From 3bdb665fed76e2d0cf2ee03cbbe5a5feca50b7c6 Mon Sep 17 00:00:00 2001 From: Michal Danco Date: Tue, 14 Feb 2023 08:51:36 +0100 Subject: [PATCH] Mangata dev v0.9.36 (#17) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [ci] Fix broken ci, move zombienet job (#1785) * Co #12341: Use `try-runtime` feature (#1759) * Add try-runtime feature Signed-off-by: Oliver Tale-Yazdi * More feature gates Signed-off-by: Oliver Tale-Yazdi * Add dummy command Signed-off-by: Oliver Tale-Yazdi * update lockfile for {"polkadot", "substrate"} * Fix code * Remove unused import Signed-off-by: Oliver Tale-Yazdi * Imports... Signed-off-by: Oliver Tale-Yazdi * fmt Signed-off-by: Oliver Tale-Yazdi * fmt Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> * bump zombienet version (#1786) * BlockId removal: refactor: Finalizer (#1779) * BlockId removal: refactor: Finalizer It changes the arguments of methods of `Finalizer` trait from: block: `BlockId` to: hash: `&Block::Hash` This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * update lockfile for {"polkadot", "substrate"} * update Cargo.lock * Cargo.lock update again Co-authored-by: parity-processbot <> * Bump async-trait from 0.1.57 to 0.1.58 (#1783) Bumps [async-trait](https://github.com/dtolnay/async-trait) from 0.1.57 to 0.1.58. - [Release notes](https://github.com/dtolnay/async-trait/releases) - [Commits](https://github.com/dtolnay/async-trait/compare/0.1.57...0.1.58) --- updated-dependencies: - dependency-name: async-trait dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: parity-processbot <> * Bump assert_cmd from 2.0.4 to 2.0.5 (#1792) Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/assert-rs/assert_cmd/releases) - [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md) - [Commits](https://github.com/assert-rs/assert_cmd/compare/v2.0.4...v2.0.5) --- updated-dependencies: - dependency-name: assert_cmd dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add link to the weight comparison tool for weights PRs (#1788) * add link to the weight comparison tool for weights PRs * Update scripts/create-benchmark-pr.sh Co-authored-by: Chevdor * add backport checklist item * move to scripts/ci Co-authored-by: Chevdor * Single ParachainBlockImport instance (#1782) * Fix a few migration issues with 2D weights (#1755) * Give a max proof size to DMP individual weight processing during migration * Fix a few migration issues with 2D weights * Update substrate * Fixes * cargo fmt * Re-add v1 migration * Set DEFAULT_POV_SIZE to 64 KB * Use Weight::from_parts * Update Polkadot * Fixes * contracts: Companion for offchain indeterminism (#1794) * Adapt to new pallet contracts API * Fix * Fix runtime APIs * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> * Bump assert_cmd from 2.0.4 to 2.0.5 (#1800) Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/assert-rs/assert_cmd/releases) - [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md) - [Commits](https://github.com/assert-rs/assert_cmd/compare/v2.0.4...v2.0.5) --- updated-dependencies: - dependency-name: assert_cmd dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Companion for #12457 (Bounded Multisig) (#1793) * u16 -> u32 * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> * Co #12558: Update `pallet-multisig` benches (#1805) * Typo Signed-off-by: Oliver Tale-Yazdi * Add multisig weights Signed-off-by: Oliver Tale-Yazdi * cargo update -p polkadot-runtime-common Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * Companion for aura CompatibilityMode (#1803) * Companion for aura CompatibilityMode As no parachain was launched with the broken authority set change handling we don't need to expose the compatibility mode. * FMT * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> * Companion for update `wasm-opt` (#1806) * Update cc * Update regex * Add RPC nodes to pov-recovery test (#1807) * Bump scale-info from 2.2.0 to 2.3.0 (#1809) Bumps [scale-info](https://github.com/paritytech/scale-info) from 2.2.0 to 2.3.0. - [Release notes](https://github.com/paritytech/scale-info/releases) - [Changelog](https://github.com/paritytech/scale-info/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/scale-info/commits/v2.3.0) --- updated-dependencies: - dependency-name: scale-info dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump syn from 1.0.102 to 1.0.103 (#1796) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.102 to 1.0.103. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.102...1.0.103) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump peaceiris/actions-gh-pages from 3.8.0 to 3.9.0 (#1801) * Bump peaceiris/actions-gh-pages from 3.8.0 to 3.9.0 Bumps [peaceiris/actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) from 3.8.0 to 3.9.0. - [Release notes](https://github.com/peaceiris/actions-gh-pages/releases) - [Changelog](https://github.com/peaceiris/actions-gh-pages/blob/main/CHANGELOG.md) - [Commits](https://github.com/peaceiris/actions-gh-pages/compare/068dc23d9710f1ba62e86896f84735d869951305...de7ea6f8efb354206b205ef54722213d99067935) --- updated-dependencies: - dependency-name: peaceiris/actions-gh-pages dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * match hash with version Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> * Bump ruby/setup-ruby from 1.118.0 to 1.120.0 (#1804) * Bump ruby/setup-ruby from 1.118.0 to 1.120.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.118.0 to 1.120.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/eae47962baca661befdfd24e4d6c34ade04858f7...ece82769428359c077b5a5eaff268902a303c101) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Update .github/workflows/release-30_create-draft.yml Co-authored-by: Chevdor * Update .github/workflows/release-30_create-draft.yml Co-authored-by: Chevdor Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> Co-authored-by: Chevdor * Bump Swatinem/rust-cache from 2.0.0 to 2.0.1 (#1767) * Bump Swatinem/rust-cache from 2.0.0 to 2.0.1 Bumps [Swatinem/rust-cache](https://github.com/Swatinem/rust-cache) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/Swatinem/rust-cache/releases) - [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md) - [Commits](https://github.com/Swatinem/rust-cache/compare/6720f05bc48b77f96918929a9019fb2203ff71f8...22c9328bcba27aa81a32b1bef27c7e3c78052531) --- updated-dependencies: - dependency-name: Swatinem/rust-cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * match hash with version Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sergejs Kostjucenko * Add trie migration rpc to polkadot-parachain (#1424) * add trie migration rpc to polkadot-parachain * pass backend * fix * Statemine state migration runtime changes. (#1743) * init, using polkadot master * version update * weights copy pasted from substrate * feature gate migration * changes from reviews * Change controller addresses. * fix * rename feature to state-trie-version-1 * rename package to avoid name clash (#1716) Co-authored-by: Bastian Köcher * Cargo.lock updated (#1824) * Use resolver 2 in the workspace. (#1817) * BlockId removal: &Hash to Hash (#1818) * BlockId removal: &Hash to Hash It changes &Block::Hash argument to Block::Hash. This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> * Bump clap from 4.0.18 to 4.0.22 (#1830) Bumps [clap](https://github.com/clap-rs/clap) from 4.0.18 to 4.0.22. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v4.0.18...v4.0.22) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Collectives: alliance and collective pallets weights (#1813) * Collectives: alliance and collective pallets weights * ".git/.scripts/bench-bot.sh" pallet collectives-polkadot collectives pallet_collective * ".git/.scripts/bench-bot.sh" pallet collectives-polkadot collectives pallet_alliance Co-authored-by: command-bot <> * Add example zombienet network file and instructions (#1839) * Add simple example on how to spin up network. * Update readme * Remove unnecessary prefix * Improve folder structure * Add link to file * Fix paths in readme * Update README.md Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher * Bump Swatinem/rust-cache from 2.0.1 to 2.1.0 (#1816) Bumps [Swatinem/rust-cache](https://github.com/Swatinem/rust-cache) from 2.0.1 to 2.1.0. - [Release notes](https://github.com/Swatinem/rust-cache/releases) - [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md) - [Commits](https://github.com/Swatinem/rust-cache/compare/22c9328bcba27aa81a32b1bef27c7e3c78052531...b894d59a8d236e2979b247b80dac8d053ab340dd) --- updated-dependencies: - dependency-name: Swatinem/rust-cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * [ci] Fix publish benchmark results (#1840) * [ci] Fix publish benchmark results * Update scripts/ci/gitlab/pipeline/benchmarks.yml Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> * Update scripts/ci/gitlab/pipeline/benchmarks.yml Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> * Backports from release 0.9.32 * Bump spec_version to 9320 * Companion for Substrate 12586 (#1808) * companion for assets CreateOrigin * more runtimes * fix imports * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> * Bump Swatinem/rust-cache from 2.1.0 to 2.2.0 Bumps [Swatinem/rust-cache](https://github.com/Swatinem/rust-cache) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/Swatinem/rust-cache/releases) - [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md) - [Commits](https://github.com/Swatinem/rust-cache/compare/b894d59a8d236e2979b247b80dac8d053ab340dd...359a70e43a0bb8a13953b04a90f76428b4959bb6) --- updated-dependencies: - dependency-name: Swatinem/rust-cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump ruby/setup-ruby from 1.120.0 to 1.120.1 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.120.0 to 1.120.1. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/ece82769428359c077b5a5eaff268902a303c101...f2c070bbf74632495b403899c87610cd4cb99dbe) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * add offchain worker to parachain config (#1860) * Enable Docker section in the release notes * [ci] fix buildah (#1870) * Set `OnTimestampSet = Aura` in all runtimes (#1876) * Add migrations from pallet_asset to statemine, statemint and westmint (#1742) * statemine: migrate pallet assets to v1 * statemint and westmint: migrate pallet assets to v1 * remove items limit * update dependencies and crate imports * change substrate version to dependent PR * revert to master * revert changes to cargo toml * fix weights to test compilation with companion substrate branch * change destroy etrinsic in westmint to new extrinsics * update lockfile for {"polkadot", "substrate"} * rebase Co-authored-by: parity-processbot <> * [ci] Improve pipeline stopper (#1873) * [ci] Improve pipeline stopper * fail pipeline * fix pipeline * Fix for xcm weight benchmarks generation (#1872) * companion for #12599 (#1881) * companion for #12599 * update substrate & polkadot * Bump clap from 4.0.22 to 4.0.25 (#1882) Bumps [clap](https://github.com/clap-rs/clap) from 4.0.22 to 4.0.25. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v4.0.22...v4.0.25) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * [Backport] bump spec and txn versions from v9320 (#1889) * bump rococo and penpal spec_version (#1885) * bump txn versions (#1851) * bump txn version * Remove the `wasmtime` feature flag (companion for substrate#12684) (#1861) * Remove the `wasmtime` feature flag * Update `substrate` and `polkadot` to the newest `master` * Update `substrate` and `polkadot` to the newest `master` * Bump array-bytes from 4.1.0 to 4.2.0 (#1883) Bumps [array-bytes](https://github.com/hack-ink/array-bytes) from 4.1.0 to 4.2.0. - [Release notes](https://github.com/hack-ink/array-bytes/releases) - [Changelog](https://github.com/hack-ink/array-bytes/blob/main/CHANGELOG) - [Commits](https://github.com/hack-ink/array-bytes/compare/v4.1.0...v4.2.0) --- updated-dependencies: - dependency-name: array-bytes dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump futures from 0.3.24 to 0.3.25 (#1791) Bumps [futures](https://github.com/rust-lang/futures-rs) from 0.3.24 to 0.3.25. - [Release notes](https://github.com/rust-lang/futures-rs/releases) - [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.24...0.3.25) --- updated-dependencies: - dependency-name: futures dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Use pallet-sudo extension `CheckOnylSudoAccount` (#1850) * [Backport] weights from v9320 release branch (#1890) * [benchmarks] pr with weights (#1857) Co-authored-by: paritytech-ci * [benchmarks] Update weights for statemine/t (#1859) * [benchmarks] pr with weights * Update parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs * Update parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs * Update parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs Co-authored-by: paritytech-ci Co-authored-by: Squirrel * fix weights for destroy Co-authored-by: Paritytech CI <52199148+paritytech-ci@users.noreply.github.com> Co-authored-by: paritytech-ci Co-authored-by: Squirrel Co-authored-by: parity-processbot <> Co-authored-by: Anthony Alaribe * remove 1 Parity Statemine bootnode that will be decommisioned (#1892) * Companion for paritytech/substrate#12739 (#1899) * Companion for paritytech/substrate#12739 * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> * Bump clap from 4.0.25 to 4.0.26 (#1897) Bumps [clap](https://github.com/clap-rs/clap) from 4.0.25 to 4.0.26. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v4.0.25...v4.0.26) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * remove 2 Parity statemint bootnodes that will be decommissioned (#1887) Co-authored-by: parity-processbot <> * rename package to avoid name clash (#1716) * Bump tokio from 1.21.2 to 1.22.0 (#1896) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.21.2 to 1.22.0. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.21.2...tokio-1.22.0) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Correct issue link (#1904) * Bump bytes from 1.2.1 to 1.3.0 (#1907) Bumps [bytes](https://github.com/tokio-rs/bytes) from 1.2.1 to 1.3.0. - [Release notes](https://github.com/tokio-rs/bytes/releases) - [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/bytes/commits) --- updated-dependencies: - dependency-name: bytes dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Collectives Alliance: Remove Founder role and veto call (#1902) * Companion: Remove Founder role and veto call * wieghts * update lockfile for {"polkadot", "substrate"} Co-authored-by: joepetrowski Co-authored-by: parity-processbot <> * Allow try-runtime for contracts-rococo (#1906) * Enable try-runtime for contracts-rococo * Fix typo from merge * Remove av-store, av-distribution, chain-api subsystems from minimal node (#1903) * Remove unused subsystems * Consume requests we are not going to answer * Respond to incoming chunk and pov requests. * fmt * Improve comment and logging * Add reputation changes * Do not register pov-chunk-request protocol * Remove inbound chunk request channel * Bump Polkadot * Bump clap from 4.0.26 to 4.0.27 (#1911) Bumps [clap](https://github.com/clap-rs/clap) from 4.0.26 to 4.0.27. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v4.0.26...v4.0.27) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Allow Sufficient Assets for XCM Fee Payment on Statemint #1884 (#1910) * Allow Sufficient Assets for XCM Fee Payment on Statemint #1884 * Revert of removed payment.clone().into() * Fixes * Bring AssetFeeAsExistentialDepositMultiplier to test_asset_xcm_trader * Fixes * Companion for Substrate 12740 (#1898) * add helper config trait * benchmarkhelper * update config * update tests * into * update lockfile for {"substrate", "polkadot"} * include benchmarks in tomls Co-authored-by: parity-processbot <> * Bump serde from 1.0.145 to 1.0.147 (#1797) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.145 to 1.0.147. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.145...v1.0.147) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * update lockfile (#1923) * Bump syn from 1.0.103 to 1.0.104 (#1918) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.103 to 1.0.104. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.103...1.0.104) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Companion for contracts: Replace cargo feature `unstable-interface` with config (#1916) * contracts: Add `UnsafeUnstableInterface` * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> * Bump clap from 4.0.27 to 4.0.29 (#1928) Bumps [clap](https://github.com/clap-rs/clap) from 4.0.27 to 4.0.29. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v4.0.27...v4.0.29) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump async-trait from 0.1.58 to 0.1.59 (#1921) Bumps [async-trait](https://github.com/dtolnay/async-trait) from 0.1.58 to 0.1.59. - [Release notes](https://github.com/dtolnay/async-trait/releases) - [Commits](https://github.com/dtolnay/async-trait/compare/0.1.58...0.1.59) --- updated-dependencies: - dependency-name: async-trait dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Remove more protocols from minimal collator (#1927) * Bump serde from 1.0.147 to 1.0.148 (#1929) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.147 to 1.0.148. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.147...v1.0.148) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump array-bytes from 4.2.0 to 6.0.0 (#1919) Bumps [array-bytes](https://github.com/hack-ink/array-bytes) from 4.2.0 to 6.0.0. - [Release notes](https://github.com/hack-ink/array-bytes/releases) - [Changelog](https://github.com/hack-ink/array-bytes/blob/main/CHANGELOG) - [Commits](https://github.com/hack-ink/array-bytes/compare/v4.2.0...v6.0.0) --- updated-dependencies: - dependency-name: array-bytes dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * BridgeHubKusama - initial setup - (chain_spec + basic runtime without any bridging pallets) (#1764) * [BridgeHub] Setup Rococo backbone parachain * [BridgeHub] Setup Wococo parachain backbone (reused from Rococo) [Bridge-Backport] Rebase-fix BridgeHub] Added zombienet startup tomls for Rococo/Wococo Fix typo * [BridgeHub] Added chain_spec for live Rococo/Wococo * [BridgeHub] Clean bridge-hub-rococo runtime * [BridgeHub] Add bridge-hub-rococo to CI pipelines * [BridgeHub] Added bridge-hub-kusama - empty runtime/chain_spec setup * Fixes * Fixes for BH * Fixes for other runtimes - align all * Fixes - const * Fixes const * Fixes * Fix kusama-local * Sample zombienet runs * Fixes * Fixes for benchmarking * Fixes CI * Fixes * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs frame_system * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_collator_selection * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_balances * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_session * Fixes name * Fixes readme * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_timestamp * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs cumulus_pallet_xcmp_queue * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_collator_selection * Fixes * Fixes * rustfmt * Fixes * Added pallet_utility/pallet_multisig * Blind try for regex pr-custom-review.yml (added bridge-hub-kusama + collectives-polkadot) * Fixes * Fixes * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_utility * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_multisig * Trying to fix sed expression? * Added license headers + correct "DAG:" desc Co-authored-by: command-bot <> * Provisioner polkadot companion (#1940) * Provisioner companion changes * update substrate commit hash * Update Substrate & Polkadot Co-authored-by: Bastian Köcher * Bump environmental from 1.1.3 to 1.1.4 (#1933) Bumps environmental from 1.1.3 to 1.1.4. --- updated-dependencies: - dependency-name: environmental dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump syn from 1.0.104 to 1.0.105 (#1936) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.104 to 1.0.105. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.104...1.0.105) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Upgrade tokio to 1.22.0 and replace async-std with tokio (#1917) * Make tokio executor mandatory * kick CI * Update Cargo.lock * add collectives-polkadot final raw chainspec (#1914) * Companion of Substrate PR 12837 (#1944) * remove reference to remote-externalities * update reference to remote-externalities * s/remote-ext/frame-remote-externalities * copy the fix from https://github.com/paritytech/cumulus/pull/1917/commits/747400a0d7876a605290103b5d4341072b4e0868 * update cargo.lock * Bump serde from 1.0.148 to 1.0.149 (#1948) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.148 to 1.0.149. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.148...v1.0.149) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Remove `parity-util-mem` (#1958) Fully removes the `parity-util-mem` dependency. This just required upgrading to the latest versions of the polkadot crates. * dependabot: Ignore rococo deps (#1963) * Bump ruby/setup-ruby from 1.120.1 to 1.127.0 (#1951) Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.120.1 to 1.127.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/f2c070bbf74632495b403899c87610cd4cb99dbe...ee2113536afb7f793eed4ce60e8d3b26db912da4) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * add collective runtime upgrade to the checklist (#1966) * zombienet, store node's logs as artifacts (#1969) * Backport collective weights from v9330 to master (#1959) * [benchmarks] pr with weights (#1945) Co-authored-by: paritytech-ci * Use master for some methods Co-authored-by: Egor_P Co-authored-by: paritytech-ci * [Backport] version bumps from 9330 (#1956) * Bump crate versions * Bump spec_version to 9330 * bump rococo and penpal spec_version (#1926) * bump txn versions (#1941) * bump txn versions * bump rococo txn version * bump bridge-hub-kusama spec_version * [ci] new ci runners (#1967) * [DNM] test ci runners * restart pipeline * switch to c2 runners * restart pipeline * change runner tag * [benchmarks] pr with weights (#1946) (#1971) Co-authored-by: paritytech-ci Co-authored-by: Egor_P Co-authored-by: paritytech-ci * Companion for paritytech/substrate#12868 (#1970) * Replace WEIGHT_PER_* with WEIGHT_REF_TIME_PER_* * Fixes * Fixes * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> * Collectives runtime: add query call info api (#1976) * Companion for paritytech/substrate#12764 (#1930) * Companion for paritytech/substrate#12764 * Remove `async-trait` * Fix trait * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> * Replace the label checks using bash script by `ruled-labels` (#1576) * Add rules and specs * add labels * Add new checks * Fix criticality check * Use the new rule filter introduced in ruled-labels v0.3.0 to better target tests * Add workflow to tests label rules * Fix trigger * Add new GH Workflow * Don't swallow failures but allow them * Fix new script * Simplify check * Fix Workflow * Remove dup var * Fix vars * Move pull image to separate step * Remove continue on error * Show input list of labels * Fix check-labels workflow * Remove Docker -it flags * Prevent shell from splitting on spaces * Fix rules path * Comment out rules related to labels not present in the repo * Fix tests * Fix labels specs and tests * fix test * new label description and rules * fix tests * use ruled_labels as crate * fix toolchain * fix component * move from docker to crate * fix test * fail without labels * add cache * fix check no labels * add D-labels check * fix emtpy label check * try docker * fix specs * test D label * revert Cargo.toml * use tags for ruled_labels * fix rules * test D label * fix tags * remove changes * add PR tag to single criticality rule * remove old line * test ruled_labels test * disable Check label Rules * fix GHA name * fix tests * rename files, upd ruled_labels 0.3.2 Co-authored-by: alvicsam Co-authored-by: parity-processbot <> Co-authored-by: Joyce Siqueira Co-authored-by: joyce Co-authored-by: Joyce Siqueira <98593770+the-right-joyce@users.noreply.github.com> Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> * Description for new cumulus labels (#1879) * Add files via upload Documentation for new labels * Update documentation.md * companion for #12663 jsonrpsee v0.16 (#1905) * companion for #12663 jsonrpsee v0.16.1 * update deps * update rpc client params * update substrate and polkadot * Bump tokio from 1.22.0 to 1.23.0 (#1952) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.22.0 to 1.23.0. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.22.0...tokio-1.23.0) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * add test onto statemint as well as statemine now (#1954) (#1955) (as functionallity is rolled out) * [ci] use external repo for check-labels (#1985) * [ci] use external repo for check-labels * remove ruled_labels specs, docs * remove repo checkout * remove checkout action * remove old gha * Introduce migrations for inactive balances (#1943) * Introduce migrations * Introduce migrations * Bump Co-authored-by: joepetrowski * Collectives integration tests (#1979) Co-authored-by: parity-processbot <> * [ci] Add variable to disable selected jobs (#1986) * [ci] Add variable to disable selected jobs * apply suggestion Co-authored-by: parity-processbot <> * Companion for substrate#12845 (#1960) * Companion for substrate#12845 * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> * [ci] small fix for job switcher (#1990) * Allow to specify multiple relay chain RPC urls for collator node (#1880) * Allow specification of multiple urls for relay chain rpc nodes * Add pooled RPC client basics * Add list of clients to pooled client * Improve * Forward requests to dispatcher * Switch clients on error * Implement rotation logic * Improve subscription handling * Error handling cleanup * Remove retry from rpc-client * Improve naming * Improve documentation * Improve `ClientManager` abstraction * Adjust zombienet test * Add more comments * fmt * Apply reviewers comments * Extract reconnection to extra method * Add comment to reconnection method * Clean up some dependencies * Fix build * fmt * Provide alias for cli argument * Apply review comments * Rename P* to Relay* * Improve zombienet test * fmt * Fix zombienet sleep * Simplify zombienet test * Reduce log clutter and fix starting position * Do not distribute duplicated imported and finalized blocks * fmt * Apply code review suggestions * Move building of relay chain interface to `cumulus-client-service` * Refactoring to not push back into channel * FMT * companion for try-runtime revamp (#1997) * companion for try-rutnime revamp * Fixes Co-authored-by: Bastian Köcher * Bump serde from 1.0.149 to 1.0.150 (#1987) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.149 to 1.0.150. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.149...v1.0.150) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Remove integration tests that are covered by zombienet (#1998) * Bump scale-info from 2.3.0 to 2.3.1 (#1978) Bumps [scale-info](https://github.com/paritytech/scale-info) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/paritytech/scale-info/releases) - [Changelog](https://github.com/paritytech/scale-info/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/scale-info/compare/v2.3.0...v2.3.1) --- updated-dependencies: - dependency-name: scale-info dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump toml from 0.5.9 to 0.5.10 (#1995) Bumps [toml](https://github.com/toml-rs/toml) from 0.5.9 to 0.5.10. - [Release notes](https://github.com/toml-rs/toml/releases) - [Commits](https://github.com/toml-rs/toml/commits/toml-v0.5.10) --- updated-dependencies: - dependency-name: toml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump serde from 1.0.150 to 1.0.151 (#2001) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.150 to 1.0.151. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.150...v1.0.151) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump quote from 1.0.21 to 1.0.23 (#2003) Bumps [quote](https://github.com/dtolnay/quote) from 1.0.21 to 1.0.23. - [Release notes](https://github.com/dtolnay/quote/releases) - [Commits](https://github.com/dtolnay/quote/compare/1.0.21...1.0.23) --- updated-dependencies: - dependency-name: quote dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump dyn-clone from 1.0.9 to 1.0.10 (#2005) Bumps [dyn-clone](https://github.com/dtolnay/dyn-clone) from 1.0.9 to 1.0.10. - [Release notes](https://github.com/dtolnay/dyn-clone/releases) - [Commits](https://github.com/dtolnay/dyn-clone/compare/1.0.9...1.0.10) --- updated-dependencies: - dependency-name: dyn-clone dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump thiserror from 1.0.37 to 1.0.38 (#2004) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.37 to 1.0.38. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.37...1.0.38) --- updated-dependencies: - dependency-name: thiserror dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Limit number of blocks per level (2nd attempt) (#1559) Prevents the StateDbError::TooManySiblingBlocks error from being triggered by eagerly removing stale blocks from the backend on block import and before the error condition is met. Introduces a just in time block recovery mechanism for blocks that were wrongly removed via an explicit pov-recovery method Co-authored-by: Bastian Köcher * Expect less chaos: use explicit call indices (#1984) * Expect less chaos: set call index explicitly. * mark test pallet as dev mode so explicit call indicies are not required. * Fix 'dev_mode' syntax Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Oliver Tale-Yazdi * BlockId removal: refactor: HeaderBackend::header (#1977) * BlockId removal: refactor: HeaderBackend::header It changes the arguments of: - `HeaderBackend::header`, - `Client::header` methods from: `BlockId` to: `Block::Hash` This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> * Bridge hub kusama fine-tuning before release (#1999) * Fix benchmarks-ci.sh - missing pallet_utility/pallet_multisig * Missing ParentAsSuperuser for bridge-hubs * Fixed missing stuff in benchmarks.yml * Added MigrateToTrackInactive + CheckingAccount (for completness as other runtimes) * Measured xcm weights for bridge-hubs * Fix for fungible benchmarks * ".git/.scripts/bench-bot.sh" xcm bridge-hub-kusama bridge-hubs pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm bridge-hub-rococo bridge-hubs pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm bridge-hub-rococo bridge-hubs pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm bridge-hub-kusama bridge-hubs pallet_xcm_benchmarks::generic * Reverting migrations - no need for them * script for generate genesis spec/head/wasm * Adding invulnerables and session.keys to the script (https://github.com/paritytech/devops/issues/2196) * update chainspec with cmd: ./scripts/create_bridge_hub_kusama_spec.sh ./target/release/wbuild/bridge-hub-kusama-runtime/bridge_hub_kusama_runtime.compact.compressed.wasm 1003 * para_id 1003 -> 1002, cmd: ./scripts/create_bridge_hub_kusama_spec.sh ./target/release/wbuild/bridge-hub-kusama-runtime/bridge_hub_kusama_runtime.compact.compressed.wasm 1002 Co-authored-by: command-bot <> * Bump syn from 1.0.105 to 1.0.107 (#2008) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.105 to 1.0.107. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.105...1.0.107) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump proc-macro2 from 1.0.47 to 1.0.49 (#2010) Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.47 to 1.0.49. - [Release notes](https://github.com/dtolnay/proc-macro2/releases) - [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.47...1.0.49) --- updated-dependencies: - dependency-name: proc-macro2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Update poilkadot dependencies * Bump crate versions * Bump spec_version to 9360 * bump rococo and penpal spec_version * Revert "BlockId removal: refactor: HeaderBackend::header (#1977)" This reverts commit b7dff85939ee4bc56f97757424f34b692ab141c6. * fix deps duplication in Cargo.lock (#2014) * bump txn versions (#2018) * Backport weights to source release branch (#2029) * [benchmarks] pr with weights (#2026) Co-authored-by: paritytech-ci * [benchmarks] pr with weights Collectives (#2025) * [benchmarks] pr with weights * provide veto method for trait Co-authored-by: paritytech-ci Co-authored-by: muharem * [benchmarks] pr with weights (#2027) Co-authored-by: paritytech-ci Co-authored-by: paritytech-ci Co-authored-by: muharem * remove 9330 migrations from statemint series (#2031) (#2034) Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * update toolchain * add protoc run to ci * ci: test updated GitHub Actions workers * ci: update checkout action version * ci: try workers on Ubuntu 20.04 * update CI for test job * update test command * fix args for test job * ci: try `-j1` option for test job * ci: test 8vcpu-32gbRAM worker for test job * update reference --------- Signed-off-by: Oliver Tale-Yazdi Signed-off-by: dependabot[bot] Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Co-authored-by: Oliver Tale-Yazdi Co-authored-by: Javier Viola Co-authored-by: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: João Paulo Silva de Souza <77391175+joao-paulo-parity@users.noreply.github.com> Co-authored-by: Chevdor Co-authored-by: Davide Galassi Co-authored-by: Keith Yeung Co-authored-by: Alexander Theißen Co-authored-by: Shawn Tabrizi Co-authored-by: Bastian Köcher Co-authored-by: Sebastian Kunert Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> Co-authored-by: Sergejs Kostjucenko Co-authored-by: cheme Co-authored-by: Squirrel Co-authored-by: Muharem Ismailov Co-authored-by: Bastian Köcher Co-authored-by: Wilfried Kopp Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: brendanedelson Co-authored-by: Anthony Alaribe Co-authored-by: Branislav Kontur Co-authored-by: Niklas Adolfsson Co-authored-by: Egor_P Co-authored-by: Koute Co-authored-by: Qinxuan Chen Co-authored-by: Paritytech CI <52199148+paritytech-ci@users.noreply.github.com> Co-authored-by: paritytech-ci Co-authored-by: Pierre Besson Co-authored-by: Aaro Altonen <48052676+altonen@users.noreply.github.com> Co-authored-by: Xavier Lau Co-authored-by: joepetrowski Co-authored-by: Adrian Catangiu Co-authored-by: alexgparity <115470171+alexgparity@users.noreply.github.com> Co-authored-by: Dmitry Markin Co-authored-by: Marcin S Co-authored-by: alvicsam Co-authored-by: Joyce Siqueira Co-authored-by: joyce Co-authored-by: Joyce Siqueira <98593770+the-right-joyce@users.noreply.github.com> Co-authored-by: Gavin Wood Co-authored-by: Sasha Gryaznov Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Bastian Köcher Co-authored-by: Misha Kolesnik --- .github/ISSUE_TEMPLATE/release-runtime.md | 1 + .github/dependabot.yml | 3 +- .github/pr-custom-review.yml | 4 +- .github/workflows/check-D-labels.yml | 48 + .github/workflows/check-labels.yml | 41 +- .github/workflows/docs.yml | 4 +- .github/workflows/mangata-dev.yml | 25 +- .github/workflows/release-30_create-draft.yml | 18 +- .github/workflows/srtool.yml | 4 + .gitlab-ci.yml | 25 +- CODEOWNERS | 4 +- Cargo.lock | 2731 +++++++++-------- Cargo.toml | 11 +- README.md | 139 +- client/cli/Cargo.toml | 12 +- client/cli/src/lib.rs | 10 +- client/collator/Cargo.toml | 26 +- client/consensus/aura/Cargo.toml | 36 +- client/consensus/aura/src/import_queue.rs | 14 +- client/consensus/aura/src/lib.rs | 66 +- client/consensus/common/Cargo.toml | 25 +- client/consensus/common/src/level_monitor.rs | 378 +++ client/consensus/common/src/lib.rs | 91 +- .../common/src/parachain_consensus.rs | 74 +- client/consensus/common/src/tests.rs | 363 ++- client/consensus/relay-chain/Cargo.toml | 22 +- .../consensus/relay-chain/src/import_queue.rs | 22 +- client/consensus/relay-chain/src/lib.rs | 21 +- client/network/Cargo.toml | 44 +- ...cks_from_tip_without_connected_collator.rs | 95 - client/pov-recovery/Cargo.toml | 28 +- .../src/active_candidate_recovery.rs | 8 +- client/pov-recovery/src/lib.rs | 245 +- client/pov-recovery/tests/pov_recovery.rs | 140 - .../Cargo.toml | 36 +- .../src/lib.rs | 4 +- client/relay-chain-interface/Cargo.toml | 21 +- client/relay-chain-interface/src/lib.rs | 6 +- client/relay-chain-minimal-node/Cargo.toml | 58 +- .../src/blockchain_rpc_client.rs | 4 +- .../src/collator_overseer.rs | 67 +- client/relay-chain-minimal-node/src/lib.rs | 28 +- .../relay-chain-minimal-node/src/network.rs | 186 +- client/relay-chain-rpc-interface/Cargo.toml | 31 +- client/relay-chain-rpc-interface/src/lib.rs | 37 +- .../src/reconnecting_ws_client.rs | 520 ++++ .../src/rpc_client.rs | 360 +-- client/service/Cargo.toml | 23 +- client/service/src/lib.rs | 119 +- docs/documentation.md | 1 + pallets/aura-ext/Cargo.toml | 18 +- pallets/collator-selection/Cargo.toml | 34 +- pallets/collator-selection/src/lib.rs | 5 + pallets/collator-selection/src/mock.rs | 11 +- pallets/dmp-queue/Cargo.toml | 18 +- pallets/dmp-queue/src/lib.rs | 10 +- pallets/dmp-queue/src/migration.rs | 11 +- pallets/parachain-system/Cargo.toml | 38 +- .../parachain-system/proc-macro/Cargo.toml | 6 +- pallets/parachain-system/src/lib.rs | 5 + pallets/parachain-system/src/migration.rs | 43 +- pallets/session-benchmarking/Cargo.toml | 12 +- pallets/solo-to-para/Cargo.toml | 14 +- pallets/solo-to-para/src/lib.rs | 89 +- pallets/xcm/Cargo.toml | 14 +- pallets/xcmp-queue/Cargo.toml | 24 +- pallets/xcmp-queue/src/lib.rs | 17 +- pallets/xcmp-queue/src/migration.rs | 11 +- pallets/xcmp-queue/src/tests.rs | 14 +- parachain-template/node/Cargo.toml | 90 +- parachain-template/node/src/cli.rs | 5 + parachain-template/node/src/command.rs | 45 +- parachain-template/node/src/service.rs | 94 +- .../pallets/template/Cargo.toml | 12 +- .../pallets/template/src/lib.rs | 2 + parachain-template/runtime/Cargo.toml | 70 +- parachain-template/runtime/src/lib.rs | 62 +- .../runtime/src/weights/block_weights.rs | 7 +- .../runtime/src/weights/extrinsic_weights.rs | 7 +- .../runtime/src/weights/paritydb_weights.rs | 12 +- .../runtime/src/weights/rocksdb_weights.rs | 12 +- parachain-template/runtime/src/xcm_config.rs | 2 +- parachains/chain-specs/bridge-hub-kusama.json | 84 + .../chain-specs/collectives-polkadot.json | 126 +- parachains/chain-specs/statemine.json | 1 - parachains/chain-specs/statemint.json | 2 - parachains/common/Cargo.toml | 36 +- parachains/common/src/lib.rs | 9 +- parachains/common/src/xcm_config.rs | 4 +- .../collectives/0_xcm/0_init.yml | 95 + .../collectives/0_xcm/1_teleport.yml | 126 + .../collectives/0_xcm/2_reserve.yml | 84 + .../1_alliance/0_join_alliance_fails.yml | 34 + .../1_alliance/1_init_alliance.yml | 240 ++ .../1_alliance/2_join_alliance_fails.yml | 34 + .../collectives/1_alliance/3_kick_member.yml | 182 ++ .../integration-tests/collectives/config.toml | 33 + .../statemint/xcm/4_hrmp.yml | 128 + parachains/pallets/parachain-info/Cargo.toml | 6 +- parachains/pallets/ping/Cargo.toml | 12 +- parachains/pallets/ping/src/lib.rs | 6 + .../runtimes/assets/statemine/Cargo.toml | 103 +- .../runtimes/assets/statemine/src/lib.rs | 135 +- .../statemine/src/weights/block_weights.rs | 7 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 20 +- .../src/weights/extrinsic_weights.rs | 7 +- .../statemine/src/weights/frame_system.rs | 58 +- .../statemine/src/weights/pallet_assets.rs | 236 +- .../statemine/src/weights/pallet_balances.rs | 55 +- .../src/weights/pallet_collator_selection.rs | 76 +- .../statemine/src/weights/pallet_multisig.rs | 94 +- .../statemine/src/weights/pallet_proxy.rs | 130 +- .../statemine/src/weights/pallet_session.rs | 20 +- .../statemine/src/weights/pallet_timestamp.rs | 17 +- .../statemine/src/weights/pallet_uniques.rs | 216 +- .../statemine/src/weights/pallet_utility.rs | 33 +- .../statemine/src/weights/paritydb_weights.rs | 12 +- .../statemine/src/weights/rocksdb_weights.rs | 12 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 18 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 36 +- .../assets/statemine/src/xcm_config.rs | 12 +- .../runtimes/assets/statemine/tests/tests.rs | 139 +- .../runtimes/assets/statemint/Cargo.toml | 86 +- .../runtimes/assets/statemint/src/lib.rs | 71 +- .../statemint/src/weights/block_weights.rs | 7 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 20 +- .../src/weights/extrinsic_weights.rs | 7 +- .../statemint/src/weights/frame_system.rs | 58 +- .../statemint/src/weights/pallet_assets.rs | 236 +- .../statemint/src/weights/pallet_balances.rs | 55 +- .../src/weights/pallet_collator_selection.rs | 76 +- .../statemint/src/weights/pallet_multisig.rs | 94 +- .../statemint/src/weights/pallet_proxy.rs | 130 +- .../statemint/src/weights/pallet_session.rs | 20 +- .../statemint/src/weights/pallet_timestamp.rs | 17 +- .../statemint/src/weights/pallet_uniques.rs | 216 +- .../statemint/src/weights/pallet_utility.rs | 33 +- .../statemint/src/weights/paritydb_weights.rs | 12 +- .../statemint/src/weights/rocksdb_weights.rs | 12 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 18 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 36 +- .../assets/statemint/src/xcm_config.rs | 32 +- .../runtimes/assets/statemint/tests/tests.rs | 340 +- .../runtimes/assets/test-utils/Cargo.toml | 21 +- .../runtimes/assets/westmint/Cargo.toml | 86 +- .../runtimes/assets/westmint/src/lib.rs | 72 +- .../westmint/src/weights/block_weights.rs | 7 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 20 +- .../westmint/src/weights/extrinsic_weights.rs | 7 +- .../westmint/src/weights/frame_system.rs | 58 +- .../westmint/src/weights/pallet_assets.rs | 232 +- .../westmint/src/weights/pallet_balances.rs | 55 +- .../src/weights/pallet_collator_selection.rs | 76 +- .../westmint/src/weights/pallet_multisig.rs | 94 +- .../westmint/src/weights/pallet_proxy.rs | 130 +- .../westmint/src/weights/pallet_session.rs | 20 +- .../westmint/src/weights/pallet_timestamp.rs | 17 +- .../westmint/src/weights/pallet_uniques.rs | 216 +- .../westmint/src/weights/pallet_utility.rs | 33 +- .../westmint/src/weights/paritydb_weights.rs | 12 +- .../westmint/src/weights/rocksdb_weights.rs | 12 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 18 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 36 +- .../assets/westmint/src/xcm_config.rs | 12 +- .../runtimes/assets/westmint/tests/tests.rs | 140 +- parachains/runtimes/bridge-hubs/README.md | 32 + .../bridge-hubs/bridge-hub-kusama/Cargo.toml | 169 + .../bridge-hubs/bridge-hub-kusama/build.rs | 9 + .../bridge-hub-kusama/src/constants.rs | 69 + .../bridge-hubs/bridge-hub-kusama/src/lib.rs | 730 +++++ .../src/weights/block_weights.rs | 53 + .../src/weights}/cumulus_pallet_xcmp_queue.rs | 36 +- .../src/weights/extrinsic_weights.rs | 53 + .../src/weights/frame_system.rs | 98 + .../bridge-hub-kusama/src/weights/mod.rs | 37 + .../src/weights/pallet_balances.rs | 98 + .../src/weights/pallet_collator_selection.rs | 124 + .../src/weights/pallet_multisig.rs | 128 + .../src/weights/pallet_session.rs | 65 + .../src/weights/pallet_timestamp.rs} | 42 +- .../src/weights/pallet_utility.rs | 78 + .../src/weights/paritydb_weights.rs | 63 + .../src/weights/rocksdb_weights.rs | 63 + .../bridge-hub-kusama/src/weights/xcm/mod.rs | 188 ++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 107 + .../xcm/pallet_xcm_benchmarks_generic.rs | 137 + .../bridge-hub-kusama/src/xcm_config.rs | 194 ++ .../bridge-hubs/bridge-hub-rococo/Cargo.toml | 169 + .../bridge-hubs/bridge-hub-rococo/build.rs | 9 + .../bridge-hub-rococo/src/constants.rs | 70 + .../bridge-hubs/bridge-hub-rococo/src/lib.rs | 758 +++++ .../src/weights/block_weights.rs | 53 + .../src/weights}/cumulus_pallet_xcmp_queue.rs | 36 +- .../src/weights/extrinsic_weights.rs | 53 + .../src/weights/frame_system.rs | 98 + .../bridge-hub-rococo/src/weights/mod.rs | 37 + .../src/weights/pallet_balances.rs | 98 + .../src/weights/pallet_collator_selection.rs | 124 + .../src/weights/pallet_multisig.rs | 128 + .../src/weights/pallet_session.rs | 65 + .../src/weights/pallet_timestamp.rs | 61 + .../src/weights/pallet_utility.rs | 78 + .../src/weights/paritydb_weights.rs | 63 + .../src/weights/rocksdb_weights.rs | 63 + .../bridge-hub-rococo/src/weights/xcm/mod.rs | 188 ++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 107 + .../xcm/pallet_xcm_benchmarks_generic.rs | 137 + .../bridge-hub-rococo/src/xcm_config.rs | 193 ++ .../docs/bridge-hub-parachain-design.jpg | Bin 0 -> 88324 bytes .../collectives-polkadot/Cargo.toml | 82 +- .../collectives-polkadot/src/impls.rs | 4 - .../collectives-polkadot/src/lib.rs | 68 +- .../src/weights/block_weights.rs | 7 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 20 +- .../src/weights/extrinsic_weights.rs | 7 +- .../src/weights/frame_system.rs | 58 +- .../collectives-polkadot/src/weights/mod.rs | 2 + .../src/weights/pallet_alliance.rs | 336 +- .../src/weights/pallet_balances.rs | 55 +- .../src/weights/pallet_collator_selection.rs | 76 +- .../src/weights/pallet_collective.rs | 208 ++ .../src/weights/pallet_multisig.rs | 96 +- .../src/weights/pallet_proxy.rs | 130 +- .../src/weights/pallet_session.rs | 20 +- .../src/weights/pallet_timestamp.rs | 17 +- .../src/weights/pallet_utility.rs | 33 +- .../src/weights/paritydb_weights.rs | 12 +- .../src/weights/rocksdb_weights.rs | 12 +- .../contracts/contracts-rococo/Cargo.toml | 84 +- .../contracts-rococo/src/contracts.rs | 4 +- .../contracts/contracts-rococo/src/lib.rs | 50 +- .../src/weights/block_weights.rs | 7 +- .../src/weights/extrinsic_weights.rs | 7 +- .../src/weights/paritydb_weights.rs | 12 +- .../src/weights/rocksdb_weights.rs | 12 +- .../runtimes/starters/seedling/Cargo.toml | 34 +- .../runtimes/starters/seedling/src/lib.rs | 18 +- parachains/runtimes/starters/shell/Cargo.toml | 40 +- parachains/runtimes/starters/shell/src/lib.rs | 11 +- parachains/runtimes/testing/penpal/Cargo.toml | 77 +- parachains/runtimes/testing/penpal/src/lib.rs | 75 +- .../penpal/src/weights/block_weights.rs | 7 +- .../penpal/src/weights/extrinsic_weights.rs | 7 +- .../penpal/src/weights/paritydb_weights.rs | 12 +- .../penpal/src/weights/rocksdb_weights.rs | 12 +- .../runtimes/testing/penpal/src/xcm_config.rs | 70 +- .../testing/rococo-parachain/Cargo.toml | 63 +- .../testing/rococo-parachain/src/lib.rs | 52 +- polkadot-parachain/Cargo.toml | 109 +- .../src/chain_spec/bridge_hubs.rs | 497 +++ polkadot-parachain/src/chain_spec/mod.rs | 1 + polkadot-parachain/src/cli.rs | 5 + polkadot-parachain/src/command.rs | 225 +- polkadot-parachain/src/rpc.rs | 9 +- polkadot-parachain/src/service.rs | 294 +- primitives/core/Cargo.toml | 15 +- primitives/parachain-inherent/Cargo.toml | 22 +- .../parachain-inherent/src/client_side.rs | 2 +- primitives/parachain-inherent/src/mock.rs | 6 +- primitives/timestamp/Cargo.toml | 14 +- primitives/utility/Cargo.toml | 12 +- primitives/utility/src/lib.rs | 3 +- scripts/benchmarks-ci.sh | 17 +- scripts/benchmarks.sh | 3 + scripts/ci/changelog/bin/changelog | 12 +- .../changelog/templates/docker_image.md.tera | 4 +- .../ci/changelog/templates/template.md.tera | 3 + scripts/ci/create-benchmark-pr.sh | 53 + scripts/ci/gitlab/pipeline/benchmarks.yml | 35 +- scripts/ci/gitlab/pipeline/build.yml | 12 +- scripts/ci/gitlab/pipeline/publish.yml | 10 +- scripts/ci/gitlab/pipeline/zombienet.yml | 20 +- scripts/create_bridge_hub_kusama_spec.sh | 106 + test/client/Cargo.toml | 38 +- test/relay-sproof-builder/Cargo.toml | 8 +- .../Cargo.toml | 4 +- test/runtime/Cargo.toml | 42 +- test/runtime/src/lib.rs | 19 +- test/runtime/src/test_pallet.rs | 2 +- test/service/Cargo.toml | 80 +- test/service/src/lib.rs | 59 +- test/service/tests/full_node_catching_up.rs | 88 - test/service/tests/migrate_solo_to_para.rs | 117 - test/service/tests/runtime_upgrade.rs | 102 - .../bridge_hub_kusama_local_network.toml | 67 + .../bridge_hub_rococo_local_network.toml | 67 + zombienet/examples/small_network.toml | 25 + .../statemine_kusama_local_network.toml | 67 + ...rom_tip_without_connected_collator.feature | 0 ...s_from_tip_without_connected_collator.toml | 0 .../tests}/0002-pov_recovery.feature | 4 + .../tests}/0002-pov_recovery.toml | 16 + .../tests}/0003-full_node_catching_up.feature | 0 .../tests}/0003-full_node_catching_up.toml | 0 .../tests}/0004-runtime_upgrade.feature | 0 .../tests}/0004-runtime_upgrade.toml | 0 .../tests}/0005-migrate_solo_to_para.feature | 0 .../tests}/0005-migrate_solo_to_para.toml | 0 .../0006-rpc_collator_builds_blocks.feature | 9 +- .../0006-rpc_collator_builds_blocks.toml | 8 +- .../tests}/migrate_solo_to_para.js | 0 .../tests}/register-para.js | 0 .../tests}/runtime_upgrade.js | 0 303 files changed, 15734 insertions(+), 6356 deletions(-) create mode 100644 .github/workflows/check-D-labels.yml create mode 100644 client/consensus/common/src/level_monitor.rs delete mode 100644 client/network/tests/sync_blocks_from_tip_without_connected_collator.rs delete mode 100644 client/pov-recovery/tests/pov_recovery.rs create mode 100644 client/relay-chain-rpc-interface/src/reconnecting_ws_client.rs create mode 100644 docs/documentation.md create mode 100644 parachains/chain-specs/bridge-hub-kusama.json create mode 100644 parachains/integration-tests/collectives/0_xcm/0_init.yml create mode 100644 parachains/integration-tests/collectives/0_xcm/1_teleport.yml create mode 100644 parachains/integration-tests/collectives/0_xcm/2_reserve.yml create mode 100644 parachains/integration-tests/collectives/1_alliance/0_join_alliance_fails.yml create mode 100644 parachains/integration-tests/collectives/1_alliance/1_init_alliance.yml create mode 100644 parachains/integration-tests/collectives/1_alliance/2_join_alliance_fails.yml create mode 100644 parachains/integration-tests/collectives/1_alliance/3_kick_member.yml create mode 100644 parachains/integration-tests/collectives/config.toml create mode 100644 parachains/runtimes/bridge-hubs/README.md create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/constants.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs rename parachains/runtimes/{assets/westmint/src/weights/xcm => bridge-hubs/bridge-hub-kusama/src/weights}/cumulus_pallet_xcmp_queue.rs (60%) create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs rename parachains/runtimes/{assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs => bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs} (54%) create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/build.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/constants.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/block_weights.rs rename parachains/runtimes/{assets/statemine/src/weights/xcm => bridge-hubs/bridge-hub-rococo/src/weights}/cumulus_pallet_xcmp_queue.rs (60%) create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/extrinsic_weights.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/frame_system.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_balances.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_collator_selection.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_multisig.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_session.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_timestamp.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_utility.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/paritydb_weights.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/rocksdb_weights.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/mod.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs create mode 100644 parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs create mode 100644 parachains/runtimes/bridge-hubs/docs/bridge-hub-parachain-design.jpg create mode 100644 parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs create mode 100644 polkadot-parachain/src/chain_spec/bridge_hubs.rs create mode 100755 scripts/ci/create-benchmark-pr.sh create mode 100755 scripts/create_bridge_hub_kusama_spec.sh delete mode 100644 test/service/tests/full_node_catching_up.rs delete mode 100644 test/service/tests/migrate_solo_to_para.rs delete mode 100644 test/service/tests/runtime_upgrade.rs create mode 100644 zombienet/examples/bridge_hub_kusama_local_network.toml create mode 100644 zombienet/examples/bridge_hub_rococo_local_network.toml create mode 100644 zombienet/examples/small_network.toml create mode 100644 zombienet/examples/statemine_kusama_local_network.toml rename {zombienet_tests => zombienet/tests}/0001-sync_blocks_from_tip_without_connected_collator.feature (100%) rename {zombienet_tests => zombienet/tests}/0001-sync_blocks_from_tip_without_connected_collator.toml (100%) rename {zombienet_tests => zombienet/tests}/0002-pov_recovery.feature (79%) rename {zombienet_tests => zombienet/tests}/0002-pov_recovery.toml (66%) rename {zombienet_tests => zombienet/tests}/0003-full_node_catching_up.feature (100%) rename {zombienet_tests => zombienet/tests}/0003-full_node_catching_up.toml (100%) rename {zombienet_tests => zombienet/tests}/0004-runtime_upgrade.feature (100%) rename {zombienet_tests => zombienet/tests}/0004-runtime_upgrade.toml (100%) rename {zombienet_tests => zombienet/tests}/0005-migrate_solo_to_para.feature (100%) rename {zombienet_tests => zombienet/tests}/0005-migrate_solo_to_para.toml (100%) rename {zombienet_tests => zombienet/tests}/0006-rpc_collator_builds_blocks.feature (64%) rename {zombienet_tests => zombienet/tests}/0006-rpc_collator_builds_blocks.toml (55%) rename {zombienet_tests => zombienet/tests}/migrate_solo_to_para.js (100%) rename {zombienet_tests => zombienet/tests}/register-para.js (100%) rename {zombienet_tests => zombienet/tests}/runtime_upgrade.js (100%) diff --git a/.github/ISSUE_TEMPLATE/release-runtime.md b/.github/ISSUE_TEMPLATE/release-runtime.md index 055326f0a11..a9430c6103b 100644 --- a/.github/ISSUE_TEMPLATE/release-runtime.md +++ b/.github/ISSUE_TEMPLATE/release-runtime.md @@ -34,6 +34,7 @@ The following checks can be performed after we have forked off to the release-ca networks - [ ] Run [integration tests](https://github.com/paritytech/cumulus/blob/master/docs/release.md#integration-tests), and make sure they pass. - [ ] Push runtime upgrade to Westmint and verify network stability +- [ ] Push runtime upgrade to Collectives and verify network stability ### Github diff --git a/.github/dependabot.yml b/.github/dependabot.yml index dd4f8952cb4..349a34690d4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,7 +10,7 @@ updates: - dependency-name: "sp-*" - dependency-name: "frame-*" - dependency-name: "fork-tree" - - dependency-name: "remote-externalities" + - dependency-name: "frame-remote-externalities" - dependency-name: "pallet-*" - dependency-name: "beefy-*" - dependency-name: "try-runtime-*" @@ -21,6 +21,7 @@ updates: - dependency-name: "xcm*" - dependency-name: "kusama-*" - dependency-name: "westend-*" + - dependency-name: "rococo-*" schedule: interval: "daily" - package-ecosystem: github-actions diff --git a/.github/pr-custom-review.yml b/.github/pr-custom-review.yml index 99155388877..f8c887c5f4a 100644 --- a/.github/pr-custom-review.yml +++ b/.github/pr-custom-review.yml @@ -6,7 +6,7 @@ action-review-team: ci rules: - name: Runtime files check_type: changed_files - condition: ^parachains/runtimes/assets/(statemine|statemint)/src/[^/]+\.rs$ + condition: ^parachains/runtimes/assets/(statemine|statemint)/src/[^/]+\.rs$|^parachains/runtimes/bridge-hubs/(bridge-hub-kusama|bridge-hub-polkadot)/src/[^/]+\.rs$|^parachains/runtimes/collectives/collectives-polkadot/src/[^/]+\.rs$|^parachains/common/src/[^/]+\.rs$ all_distinct: - min_approvals: 1 teams: @@ -20,7 +20,7 @@ rules: condition: include: .* # excluding files from 'Runtime files' and 'CI files' rules - exclude: ^parachains/runtimes/assets/(statemine|statemint)/src/[^/]+\.rs$|^\.gitlab-ci\.yml|^scripts/ci/.*|^\.github/.* + exclude: ^parachains/runtimes/assets/(statemine|statemint)/src/[^/]+\.rs$|^parachains/runtimes/bridge-hubs/(bridge-hub-kusama|bridge-hub-polkadot)/src/[^/]+\.rs$|^parachains/runtimes/collectives/collectives-polkadot/src/[^/]+\.rs$|^parachains/common/src/[^/]+\.rs$|^\.gitlab-ci\.yml|^scripts/ci/.*|^\.github/.* min_approvals: 2 teams: - core-devs diff --git a/.github/workflows/check-D-labels.yml b/.github/workflows/check-D-labels.yml new file mode 100644 index 00000000000..222c916fb6e --- /dev/null +++ b/.github/workflows/check-D-labels.yml @@ -0,0 +1,48 @@ +name: Check D labels + +on: + pull_request: + types: [labeled, opened, synchronize, unlabeled] + paths: + - primitives/** + +jobs: + check-labels: + runs-on: ubuntu-latest + steps: + - name: Pull image + env: + IMAGE: paritytech/ruled_labels:0.3.2 + run: docker pull $IMAGE + + - name: Check labels + env: + IMAGE: paritytech/ruled_labels:0.3.2 + MOUNT: /work + GITHUB_PR: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + API_BASE: https://api.github.com/repos + REPO: ${{ github.repository }} + RULES_PATH: labels/ruled_labels + CHECK_SPECS: specs_cumulus.yaml + run: | + echo "REPO: ${REPO}" + echo "GITHUB_PR: ${GITHUB_PR}" + # Clone repo with labels specs + git clone https://github.com/paritytech/labels + # Fetch the labels for the PR under test + labels=$( curl -H "Authorization: token ${GITHUB_TOKEN}" -s "$API_BASE/${REPO}/pulls/${GITHUB_PR}" | jq '.labels | .[] | .name' | tr "\n" ",") + + if [ -z "${labels}" ]; then + echo "No labels found. Please add labels D labels" + exit 1 + fi + + labels_args=${labels: :-1} + printf "Checking labels: %s\n" "${labels_args}" + + # Prevent the shell from splitting labels with spaces + IFS="," + + # --dev is more useful to debug mode to debug + docker run --rm -i -v $PWD/${RULES_PATH}/:$MOUNT $IMAGE check $MOUNT/$CHECK_SPECS --labels ${labels_args} --dev --tags audit diff --git a/.github/workflows/check-labels.yml b/.github/workflows/check-labels.yml index e9d0cf061df..f524dad13d0 100644 --- a/.github/workflows/check-labels.yml +++ b/.github/workflows/check-labels.yml @@ -8,16 +8,39 @@ jobs: check-labels: runs-on: ubuntu-latest steps: - - name: Checkout sources - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.ref }} - repository: ${{ github.event.pull_request.head.repo.full_name }} + - name: Pull image + env: + IMAGE: paritytech/ruled_labels:0.3.2 + run: docker pull $IMAGE + - name: Check labels - run: bash ${{ github.workspace }}/scripts/ci/github/check_labels.sh env: + IMAGE: paritytech/ruled_labels:0.3.2 + MOUNT: /work GITHUB_PR: ${{ github.event.pull_request.number }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - HEAD_SHA: ${{ github.event.pull_request.head.sha }} - BASE_SHA: ${{ github.event.pull_request.base.sha }} + API_BASE: https://api.github.com/repos + REPO: ${{ github.repository }} + RULES_PATH: labels/ruled_labels + CHECK_SPECS: specs_cumulus.yaml + run: | + echo "REPO: ${REPO}" + echo "GITHUB_PR: ${GITHUB_PR}" + # Clone repo with labels specs + git clone https://github.com/paritytech/labels + # Fetch the labels for the PR under test + labels=$( curl -H "Authorization: token ${GITHUB_TOKEN}" -s "$API_BASE/${REPO}/pulls/${GITHUB_PR}" | jq '.labels | .[] | .name' | tr "\n" ",") + + if [ -z "${labels}" ]; then + echo "No labels found. Please add labels A, B and C labels" + exit 1 + fi + + labels_args=${labels: :-1} + printf "Checking labels: %s\n" "${labels_args}" + + # Prevent the shell from splitting labels with spaces + IFS="," + + # --dev is more useful to debug mode to debug + docker run --rm -i -v $PWD/${RULES_PATH}/:$MOUNT $IMAGE check $MOUNT/$CHECK_SPECS --labels ${labels_args} --dev --tags PR diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ddbfd733b95..473684d2950 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -23,7 +23,7 @@ jobs: run: rustup show - name: Rust cache - uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0 + uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0 - name: Build rustdocs run: SKIP_WASM_BUILD=1 cargo doc --all --no-deps @@ -32,7 +32,7 @@ jobs: run: echo "" > ./target/doc/index.html - name: Deploy documentation - uses: peaceiris/actions-gh-pages@068dc23d9710f1ba62e86896f84735d869951305 # v3.8.0 + uses: peaceiris/actions-gh-pages@de7ea6f8efb354206b205ef54722213d99067935 # v3.9.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh-pages diff --git a/.github/workflows/mangata-dev.yml b/.github/workflows/mangata-dev.yml index 15180ddd52f..0391ac373d8 100644 --- a/.github/workflows/mangata-dev.yml +++ b/.github/workflows/mangata-dev.yml @@ -3,19 +3,18 @@ on: branches: - mangata-dev push: - branches: [ mangata-dev ] + branches: [mangata-dev] name: CI env: - TOOLCHAIN: nightly-2022-05-11 - + TOOLCHAIN: nightly-2022-11-15 jobs: fmt: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install ${{ env.TOOLCHAIN }} uses: actions-rs/toolchain@v1 with: @@ -30,9 +29,13 @@ jobs: args: --all -- --check build: - runs-on: ubuntu-latest + runs-on: cumulus-repo-worker-2004 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install ${{ env.TOOLCHAIN }} uses: actions-rs/toolchain@v1 with: @@ -47,9 +50,13 @@ jobs: args: --release test: - runs-on: ubuntu-latest + runs-on: cumulus-repo-test-job-workers steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install ${{ env.TOOLCHAIN }} uses: actions-rs/toolchain@v1 with: @@ -61,4 +68,4 @@ jobs: with: toolchain: ${{ env.TOOLCHAIN }} command: test - + args: -j1 diff --git a/.github/workflows/release-30_create-draft.yml b/.github/workflows/release-30_create-draft.yml index ffd33d6f1e7..15ad19fdf99 100644 --- a/.github/workflows/release-30_create-draft.yml +++ b/.github/workflows/release-30_create-draft.yml @@ -50,6 +50,10 @@ jobs: runtime: statemint - category: assets runtime: westmint + - category: bridge-hubs + runtime: bridge-hub-kusama + - category: bridge-hubs + runtime: bridge-hub-rococo - category: collectives runtime: collectives-polkadot - category: contracts @@ -120,7 +124,7 @@ jobs: path: cumulus ref: ${{ github.event.inputs.ref2 }} - - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7 # v1.118.0 + - uses: ruby/setup-ruby@ee2113536afb7f793eed4ce60e8d3b26db912da4 # v1.127.0 with: ruby-version: 3.0.0 @@ -150,6 +154,8 @@ jobs: WESTMINT_DIGEST: ${{ github.workspace}}/westmint-srtool-json/westmint-srtool-digest.json STATEMINE_DIGEST: ${{ github.workspace}}/statemine-srtool-json/statemine-srtool-digest.json STATEMINT_DIGEST: ${{ github.workspace}}/statemint-srtool-json/statemint-srtool-digest.json + BRIDGE_HUB_ROCOCO_DIGEST: ${{ github.workspace}}/bridge-hub-rococo-srtool-json/bridge-hub-rococo-srtool-digest.json + BRIDGE_HUB_KUSAMA_DIGEST: ${{ github.workspace}}/bridge-hub-kusama-srtool-json/bridge-hub-kusama-srtool-digest.json COLLECTIVES_POLKADOT_DIGEST: ${{ github.workspace}}/collectives-polkadot-srtool-json/collectives-polkadot-srtool-digest.json ROCOCO_PARA_DIGEST: ${{ github.workspace}}/rococo-parachain-srtool-json/rococo-parachain-srtool-digest.json CANVAS_KUSAMA_DIGEST: ${{ github.workspace}}/contracts-rococo-srtool-json/contracts-rococo-srtool-digest.json @@ -165,6 +171,8 @@ jobs: ls -al $WESTMINT_DIGEST || true ls -al $STATEMINE_DIGEST || true ls -al $STATEMINT_DIGEST || true + ls -al $BRIDGE_HUB_ROCOCO_DIGEST || true + ls -al $BRIDGE_HUB_KUSAMA_DIGEST || true ls -al $COLLECTIVES_POLKADOT_DIGEST || true ls -al $ROCOCO_PARA_DIGEST || true ls -al $CANVAS_KUSAMA_DIGEST || true @@ -216,6 +224,10 @@ jobs: runtime: statemint - category: assets runtime: westmint + - category: bridge-hubs + runtime: bridge-hub-kusama + - category: bridge-hubs + runtime: bridge-hub-rococo - category: collectives runtime: collectives-polkadot - category: contracts @@ -235,7 +247,7 @@ jobs: - name: Download artifacts uses: actions/download-artifact@fb598a63ae348fa914e94cd0ff38f362e927b741 # v3.0.0 - - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7 # v1.118.0 + - uses: ruby/setup-ruby@ee2113536afb7f793eed4ce60e8d3b26db912da4 # v1.127.0 with: ruby-version: 3.0.0 @@ -255,7 +267,7 @@ jobs: id: fix-runtime-path run: | cd "${{ matrix.runtime }}-runtime/" - mv "$(sed -E 's/-(.*)/_\1/' <<< ${{ matrix.runtime }})_runtime.compact.compressed.wasm" "${{ matrix.runtime }}_runtime.compact.compressed.wasm" || true + mv "$(sed -E 's/- */_/g' <<< ${{ matrix.runtime }})_runtime.compact.compressed.wasm" "${{ matrix.runtime }}_runtime.compact.compressed.wasm" || true - name: Upload compressed ${{ matrix.runtime }} wasm uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2 diff --git a/.github/workflows/srtool.yml b/.github/workflows/srtool.yml index 82b8585b358..fcd7bb012c2 100644 --- a/.github/workflows/srtool.yml +++ b/.github/workflows/srtool.yml @@ -37,6 +37,10 @@ jobs: runtime: statemint - category: assets runtime: westmint + - category: bridge-hubs + runtime: bridge-hub-kusama + - category: bridge-hubs + runtime: bridge-hub-rococo - category: collectives runtime: collectives-polkadot - category: contracts diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1389fc0802e..294acd5f6ae 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -44,6 +44,7 @@ variables: # they will be used if the job fails .pipeline-stopper-vars: before_script: + - !reference [.job-switcher, before_script] - echo "FAILED_JOB_URL=${CI_JOB_URL}" > pipeline-stopper.env - echo "FAILED_JOB_NAME=${CI_JOB_NAME}" >> pipeline-stopper.env - echo "FAILED_JOB_NAME=${CI_JOB_NAME}" >> pipeline-stopper.env @@ -95,19 +96,26 @@ variables: - if: $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs +.job-switcher: + before_script: + - if echo "$CI_DISABLED_JOBS" | grep -xF "$CI_JOB_NAME"; then echo "The job has been cancelled in CI settings"; exit 0; fi + .docker-env: image: "${CI_IMAGE}" before_script: + - !reference [.job-switcher, before_script] - rustup show - cargo --version - rustup +nightly show - cargo +nightly --version - bash --version tags: - - linux-docker + - linux-docker-vm-c2 .kubernetes-env: image: "${CI_IMAGE}" + before_script: + - !reference [.job-switcher, before_script] tags: - kubernetes-parity-build @@ -159,3 +167,18 @@ cancel-pipeline: PR_NUM: "${PR_NUM}" trigger: project: "parity/infrastructure/ci_cd/pipeline-stopper" + branch: "as-improve" + +remove-cancel-pipeline-message: + stage: .post + rules: + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + variables: + PROJECT_ID: "${CI_PROJECT_ID}" + PROJECT_NAME: "${CI_PROJECT_NAME}" + PIPELINE_ID: "${CI_PIPELINE_ID}" + FAILED_JOB_URL: "https://gitlab.com" + FAILED_JOB_NAME: "nope" + PR_NUM: "${CI_COMMIT_REF_NAME}" + trigger: + project: "parity/infrastructure/ci_cd/pipeline-stopper" diff --git a/CODEOWNERS b/CODEOWNERS index bae050d50c3..3e5e8bd062d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -17,7 +17,7 @@ # - The latest matching rule, if multiple, takes precedence. # CI -/.github/ @paritytech/ci @chevdor +/.github/ @paritytech/ci @paritytech/release-engineering /.gitlab-ci.yml @paritytech/ci -/scripts/ci/ @paritytech/ci @chevdor +/scripts/ci/ @paritytech/ci @paritytech/release-engineering diff --git a/Cargo.lock b/Cargo.lock index b66c6f8caf1..fb819b13a33 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,16 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli", + "gimli 0.26.2", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.0", ] [[package]] @@ -42,7 +51,7 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cipher", "cpufeatures", "opaque-debug 0.3.0", @@ -75,9 +84,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -114,9 +123,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "approx" @@ -127,26 +136,36 @@ dependencies = [ "num-traits", ] +[[package]] +name = "aquamarine" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a941c39708478e8eea39243b5983f1c42d2717b3620ee91f4a52115fd02ac43f" +dependencies = [ + "itertools 0.9.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "array-bytes" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a913633b0c922e6b745072795f50d90ebea78ba31a57e2ac8c2fc7b50950949" +checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] -name = "arrayref" -version = "0.3.6" +name = "array-bytes" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "22f72e9d6fac4bc80778ea470b20197b88d28c292bb7d60c3fb099280003cd19" [[package]] -name = "arrayvec" -version = "0.4.12" +name = "arrayref" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" @@ -168,11 +187,11 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba45b8163c49ab5f972e59a8a5a03b6d2972619d486e19ec9fe744f7c2753d3c" +checksum = "fa3d466004a8b4cb1bc34044240a2fd29d17607e2e3bd613eb44fd48e8100da3" dependencies = [ - "bstr 1.0.1", + "bstr", "doc-comment", "predicates", "predicates-core", @@ -217,11 +236,11 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ - "concurrent-queue 1.2.4", + "concurrent-queue", "event-listener", "futures-core", ] @@ -234,7 +253,7 @@ checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" dependencies = [ "async-lock", "async-task", - "concurrent-queue 2.0.0", + "concurrent-queue", "fastrand", "futures-lite", "slab", @@ -257,13 +276,13 @@ dependencies = [ [[package]] name = "async-io" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg", - "concurrent-queue 1.2.4", + "concurrent-queue", "futures-lite", "libc", "log", @@ -272,7 +291,7 @@ dependencies = [ "slab", "socket2", "waker-fn", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -287,20 +306,20 @@ dependencies = [ [[package]] name = "async-process" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" +checksum = "6381ead98388605d0d9ff86371043b5aa922a3905824244de40dc263a14fcba4" dependencies = [ "async-io", + "async-lock", "autocfg", "blocking", - "cfg-if 1.0.0", + "cfg-if", "event-listener", "futures-lite", "libc", - "once_cell", "signal-hook", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -314,7 +333,6 @@ dependencies = [ "async-global-executor", "async-io", "async-lock", - "async-process", "crossbeam-utils", "futures-channel", "futures-core", @@ -331,21 +349,6 @@ dependencies = [ "wasm-bindgen-futures", ] -[[package]] -name = "async-std-resolver" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba50e24d9ee0a8950d3d03fc6d0dd10aa14b5de3b101949b4e160f7fee7c723" -dependencies = [ - "async-std", - "async-trait", - "futures-io", - "futures-util", - "pin-utils", - "socket2", - "trust-dns-resolver", -] - [[package]] name = "async-task" version = "4.3.0" @@ -354,9 +357,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.58" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" dependencies = [ "proc-macro2", "quote", @@ -388,7 +391,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -399,32 +402,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "backoff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" -dependencies = [ - "futures-core", - "getrandom 0.2.8", - "instant", - "pin-project-lite 0.2.9", - "rand 0.8.5", - "tokio", -] - [[package]] name = "backtrace" -version = "0.3.66" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ - "addr2line", + "addr2line 0.19.0", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "miniz_oxide", - "object", + "object 0.30.1", "rustc-demangle", ] @@ -470,11 +459,10 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "async-trait", - "beefy-primitives", "fnv", "futures", "futures-timer", @@ -493,6 +481,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-arithmetic", + "sp-beefy", "sp-blockchain", "sp-consensus", "sp-core", @@ -507,10 +496,9 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "beefy-gadget", - "beefy-primitives", "futures", "jsonrpsee", "log", @@ -519,6 +507,7 @@ dependencies = [ "sc-rpc", "sc-utils", "serde", + "sp-beefy", "sp-core", "sp-runtime", "thiserror", @@ -527,30 +516,13 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "beefy-primitives", "sp-api", + "sp-beefy", "sp-runtime", ] -[[package]] -name = "beefy-primitives" -version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", -] - [[package]] name = "bincode" version = "1.3.3" @@ -599,21 +571,11 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e5fd123190ce1c2e559308a94c9bacad77907d4c6005d9e58fe1a0689e55e" -dependencies = [ - "digest 0.10.5", -] - -[[package]] -name = "blake2-rfc" -version = "0.2.18" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq", + "digest 0.10.6", ] [[package]] @@ -624,7 +586,7 @@ checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq", + "constant_time_eq 0.1.5", ] [[package]] @@ -635,21 +597,21 @@ checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq", + "constant_time_eq 0.1.5", ] [[package]] name = "blake3" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" dependencies = [ "arrayref", "arrayvec 0.7.2", "cc", - "cfg-if 1.0.0", - "constant_time_eq", - "digest 0.10.5", + "cfg-if", + "constant_time_eq 0.2.4", + "digest 0.10.6", ] [[package]] @@ -693,16 +655,16 @@ dependencies = [ [[package]] name = "blocking" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" dependencies = [ "async-channel", + "async-lock", "async-task", "atomic-waker", "fastrand", "futures-lite", - "once_cell", ] [[package]] @@ -715,25 +677,142 @@ dependencies = [ ] [[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +name = "bridge-hub-kusama-runtime" +version = "0.1.0" +dependencies = [ + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal", + "kusama-runtime-constants", + "log", + "pallet-aura", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-multisig", + "pallet-session", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-utility", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parachain-info", + "parachains-common", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain", + "polkadot-runtime-common", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-std", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", +] [[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +name = "bridge-hub-rococo-runtime" +version = "0.1.0" dependencies = [ - "memchr", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal", + "log", + "pallet-aura", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-multisig", + "pallet-session", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-utility", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parachain-info", + "parachains-common", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain", + "polkadot-runtime-common", + "rococo-runtime-constants", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-std", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", ] +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + [[package]] name = "bstr" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca0852af221f458706eb0725c03e4ed6c46af9ac98e6a689d5e634215d594dd" +checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" dependencies = [ "memchr", "once_cell", @@ -776,9 +855,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "bzip2-sys" @@ -791,12 +870,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - [[package]] name = "camino" version = "1.1.1" @@ -823,7 +896,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.14", + "semver 1.0.16", "serde", "serde_json", ] @@ -836,9 +909,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.76" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" dependencies = [ "jobserver", ] @@ -861,12 +934,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -885,7 +952,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cipher", "cpufeatures", "zeroize", @@ -970,11 +1037,11 @@ dependencies = [ [[package]] name = "ckb-merkle-mountain-range" -version = "0.3.2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f061f97d64fd1822664bdfb722f7ae5469a97b77567390f7442be5b5dc82a5b" +checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", ] [[package]] @@ -1002,14 +1069,14 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.24" +version = "4.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60494cedb60cb47462c0ff7be53de32c0e42a6fc2c772184554fa12bd9489c03" +checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" dependencies = [ - "atty", "bitflags", "clap_derive", "clap_lex 0.3.0", + "is-terminal", "once_cell", "strsim", "termcolor", @@ -1108,7 +1175,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -1132,24 +1199,15 @@ dependencies = [ [[package]] name = "comfy-table" -version = "6.1.2" +version = "6.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1090f39f45786ec6dc6286f8ea9c75d0a7ef0a0d3cda674cef0c3af7b307fbc2" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" dependencies = [ "strum", "strum_macros", "unicode-width", ] -[[package]] -name = "concurrent-queue" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" -dependencies = [ - "cache-padded", -] - [[package]] name = "concurrent-queue" version = "2.0.0" @@ -1161,9 +1219,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.7.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" +checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" [[package]] name = "constant_time_eq" @@ -1171,6 +1229,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "constant_time_eq" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" + [[package]] name = "contracts-rococo-runtime" version = "0.2.0" @@ -1213,7 +1277,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-runtime-common", "scale-info", "smallvec", @@ -1271,7 +1335,17 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", +] + +[[package]] +name = "cpu-time" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded" +dependencies = [ + "libc", + "winapi", ] [[package]] @@ -1305,7 +1379,7 @@ dependencies = [ "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli", + "gimli 0.26.2", "log", "regalloc2", "smallvec", @@ -1374,7 +1448,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "itertools", + "itertools 0.10.5", "log", "smallvec", "wasmparser", @@ -1387,7 +1461,7 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1403,7 +1477,7 @@ dependencies = [ "clap 3.2.23", "criterion-plot", "futures", - "itertools", + "itertools 0.10.5", "lazy_static", "num-traits", "oorandom", @@ -1425,7 +1499,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] [[package]] @@ -1434,7 +1508,7 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -1444,41 +1518,41 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.11" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.7.1", "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1489,9 +1563,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.3.2" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array 0.14.6", "rand_core 0.6.4", @@ -1552,7 +1626,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 4.0.24", + "clap 4.0.32", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -1624,11 +1698,14 @@ name = "cumulus-client-consensus-common" version = "0.1.0" dependencies = [ "async-trait", + "cumulus-client-pov-recovery", + "cumulus-primitives-core", "cumulus-relay-chain-interface", "cumulus-test-client", "dyn-clone", "futures", "futures-timer", + "log", "parity-scale-codec", "polkadot-primitives", "sc-client-api", @@ -1678,7 +1755,7 @@ dependencies = [ "parking_lot 0.12.1", "polkadot-client", "polkadot-node-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-service", "polkadot-test-client", @@ -1734,12 +1811,17 @@ dependencies = [ "cumulus-client-consensus-common", "cumulus-client-pov-recovery", "cumulus-primitives-core", + "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", + "futures", "parking_lot 0.12.1", "polkadot-primitives", "sc-client-api", "sc-consensus", "sc-service", + "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", + "sc-telemetry", "sp-api", "sp-blockchain", "sp-consensus", @@ -1800,7 +1882,7 @@ dependencies = [ "lazy_static", "log", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "sc-client-api", "scale-info", "sp-core", @@ -1911,10 +1993,9 @@ dependencies = [ name = "cumulus-primitives-core" version = "0.1.0" dependencies = [ - "frame-support", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "sp-api", "sp-runtime", @@ -1994,7 +2075,7 @@ dependencies = [ "prioritized-metered-channel", "sc-cli", "sc-client-api", - "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "sc-telemetry", "sc-tracing", "sp-api", @@ -2021,23 +2102,22 @@ dependencies = [ "sp-blockchain", "sp-state-machine", "thiserror", + "tokio", ] [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.1.0" dependencies = [ - "array-bytes", + "array-bytes 6.0.0", "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", - "lru 0.8.1", - "polkadot-availability-distribution", + "lru", "polkadot-core-primitives", "polkadot-network-bridge", - "polkadot-node-core-av-store", "polkadot-node-network-protocol", "polkadot-node-subsystem-util", "polkadot-overseer", @@ -2049,8 +2129,6 @@ dependencies = [ "sc-keystore", "sc-network", "sc-network-common", - "sc-network-light 0.10.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", - "sc-network-sync 0.10.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", "sc-service", "sc-telemetry", "sc-tracing", @@ -2071,21 +2149,22 @@ name = "cumulus-relay-chain-rpc-interface" version = "0.1.0" dependencies = [ "async-trait", - "backoff", "cumulus-primitives-core", "cumulus-relay-chain-interface", "futures", "futures-timer", "jsonrpsee", + "lru", "parity-scale-codec", "polkadot-service", "sc-client-api", "sc-rpc-api", + "serde", + "serde_json", "sp-api", "sp-authority-discovery", "sp-consensus-babe", "sp-core", - "sp-runtime", "sp-state-machine", "sp-storage", "tokio", @@ -2106,7 +2185,7 @@ dependencies = [ "pallet-balances", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "sc-block-builder", "sc-consensus", @@ -2180,7 +2259,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 4.0.24", + "clap 4.0.32", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2267,22 +2346,23 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-pre.1" +version = "4.0.0-pre.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" +checksum = "67bc65846be335cb20f4e52d49a437b773a2c1fdb42b19fc84e79e6f6771536f" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms 3.0.2", "subtle", "zeroize", ] [[package]] name = "cxx" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97abf9f0eca9e52b7f81b945524e76710e6cb2366aead23b7d4fbf72e281f888" +checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" dependencies = [ "cc", "cxxbridge-flags", @@ -2292,9 +2372,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc32cc5fea1d894b77d269ddb9f192110069a8a9c1f1d441195fba90553dea3" +checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" dependencies = [ "cc", "codespan-reporting", @@ -2307,15 +2387,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca220e4794c934dc6b1207c3b42856ad4c302f2df1712e9f8d2eec5afaacf1f" +checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" [[package]] name = "cxxbridge-macro" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b846f081361125bfc8dc9d3940c84e1fd83ba54bbca7b17cd29483c828be0704" +checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" dependencies = [ "proc-macro2", "quote", @@ -2324,9 +2404,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "data-encoding-macro" @@ -2350,11 +2430,12 @@ dependencies = [ [[package]] name = "der" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", + "zeroize", ] [[package]] @@ -2407,9 +2488,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer 0.10.3", "crypto-common", @@ -2431,7 +2512,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "dirs-sys-next", ] @@ -2487,9 +2568,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6eee2d5d0d113f015688310da018bd1d864d86bd567c8fca9c266889e1bfa" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" [[package]] name = "dyn-clonable" @@ -2514,15 +2595,15 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" +checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" [[package]] name = "ecdsa" -version = "0.13.4" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", "elliptic-curve", @@ -2575,13 +2656,14 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "elliptic-curve" -version = "0.11.12" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", "der", + "digest 0.10.6", "ff", "generic-array 0.14.6", "group", @@ -2625,9 +2707,9 @@ dependencies = [ [[package]] name = "enumn" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038b1afa59052df211f9efd58f8b1d84c242935ede1c3dbaed26b018a9e06ae2" +checksum = "e88bcb3a067a6555d577aba299e75eff9942da276e6506fc6274327daa026132" dependencies = [ "proc-macro2", "quote", @@ -2647,11 +2729,24 @@ dependencies = [ "termcolor", ] +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + [[package]] name = "environmental" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "errno" @@ -2717,7 +2812,7 @@ dependencies = [ [[package]] name = "extrinsic-shuffler" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "derive_more", "log", @@ -2787,31 +2882,37 @@ dependencies = [ [[package]] name = "ff" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core 0.6.4", "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" + [[package]] name = "file-per-thread-logger" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "env_logger", + "env_logger 0.10.0", "log", ] [[package]] name = "filetime" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "windows-sys 0.42.0", @@ -2819,9 +2920,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22349c6a11563a202d95772a68e0fcf56119e74ea8a2a19cf2301460fcd0df5" +checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" dependencies = [ "either", "futures", @@ -2853,9 +2954,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", "libz-sys", @@ -2880,7 +2981,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", ] @@ -2903,10 +3004,11 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", + "futures", "linregress", "log", "parity-scale-codec", @@ -2926,20 +3028,21 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "Inflector", - "array-bytes", + "array-bytes 4.2.0", "chrono", - "clap 4.0.24", + "clap 4.0.32", "comfy-table", "frame-benchmarking", "frame-support", "frame-system", + "futures", "gethostname", "handlebars", "hash-db", - "itertools", + "itertools 0.10.5", "kvdb", "lazy_static", "linked-hash-map", @@ -2949,17 +3052,21 @@ dependencies = [ "rand 0.8.5", "rand_pcg 0.3.1", "sc-block-builder", + "sc-block-builder-ver", "sc-cli", "sc-client-api", "sc-client-db", + "sc-consensus", "sc-executor", "sc-service", - "sc-sysinfo 6.0.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev)", "serde", "serde_json", "serde_nanos", "sp-api", "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", "sp-core", "sp-database", "sp-externalities", @@ -2967,17 +3074,19 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-std", "sp-storage", "sp-trie", "tempfile", "thiserror", "thousands", + "ver-api", ] [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2988,7 +3097,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2996,6 +3105,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", + "sp-core", "sp-npos-elections", "sp-runtime", "sp-std", @@ -3004,12 +3114,14 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ + "aquamarine", "extrinsic-shuffler", "frame-support", "frame-system", "frame-try-runtime", + "log", "merlin", "parity-scale-codec", "scale-info", @@ -3027,16 +3139,35 @@ version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "parity-scale-codec", "scale-info", "serde", ] +[[package]] +name = "frame-remote-externalities" +version = "0.10.0-dev" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" +dependencies = [ + "env_logger 0.9.3", + "futures", + "log", + "parity-scale-codec", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", + "sp-version", + "substrate-rpc-client", + "tokio", +] + [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "bitflags", "frame-metadata", @@ -3069,12 +3200,12 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "Inflector", "cfg-expr", "frame-support-procedural-tools", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "syn", @@ -3083,7 +3214,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3095,7 +3226,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro2", "quote", @@ -3105,8 +3236,9 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ + "extrinsic-shuffler", "frame-support", "log", "parity-scale-codec", @@ -3116,6 +3248,7 @@ dependencies = [ "sp-io", "sp-runtime", "sp-std", + "sp-ver", "sp-version", "sp-weights", ] @@ -3123,7 +3256,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-support", @@ -3138,7 +3271,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "sp-api", @@ -3147,7 +3280,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "parity-scale-codec", @@ -3350,7 +3483,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", "wasi 0.9.0+wasi-snapshot-preview1", @@ -3363,7 +3496,7 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] @@ -3389,6 +3522,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" + [[package]] name = "glob" version = "0.3.0" @@ -3397,12 +3536,12 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ "aho-corasick", - "bstr 0.2.17", + "bstr", "fnv", "log", "regex", @@ -3410,9 +3549,9 @@ dependencies = [ [[package]] name = "gloo-timers" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" +checksum = "98c4a8d6391675c6b2ee1a6c8d06e8e2d03605c44cec1270675985a4c2a5500b" dependencies = [ "futures-channel", "futures-core", @@ -3422,9 +3561,9 @@ dependencies = [ [[package]] name = "group" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core 0.6.4", @@ -3458,9 +3597,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.3.5" +version = "4.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433e4ab33f1213cdc25b5fa45c76881240cfe79284cf2b395e8b9e312a30a2fd" +checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" dependencies = [ "log", "pest", @@ -3509,6 +3648,15 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + [[package]] name = "hex" version = "0.4.3" @@ -3541,6 +3689,15 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.6", +] + [[package]] name = "hmac-drbg" version = "0.3.0" @@ -3585,6 +3742,12 @@ dependencies = [ "pin-project-lite 0.2.9", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "httparse" version = "1.8.0" @@ -3629,9 +3792,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", @@ -3746,22 +3909,28 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", "serde", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + [[package]] name = "instant" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -3787,9 +3956,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d367024b3f3414d8e01f437f704f41a9f64ab36f9067fa73e526ad4c763c87" +checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" dependencies = [ "libc", "windows-sys 0.42.0", @@ -3815,9 +3984,30 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.5.1" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" + +[[package]] +name = "is-terminal" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +dependencies = [ + "hermit-abi 0.2.6", + "io-lifetimes 1.0.3", + "rustix 0.36.6", + "windows-sys 0.42.0", +] + +[[package]] +name = "itertools" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] [[package]] name = "itertools" @@ -3830,9 +4020,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -3854,24 +4044,23 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd0d559d5e679b1ab2f869b486a11182923863b1b3ee8b421763cdd707b783a" +checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" dependencies = [ "jsonrpsee-core", - "jsonrpsee-http-server", "jsonrpsee-proc-macros", + "jsonrpsee-server", "jsonrpsee-types", "jsonrpsee-ws-client", - "jsonrpsee-ws-server", "tracing", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8752740ecd374bcbf8b69f3e80b0327942df76f793f8d4e60d3355650c31fb74" +checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" dependencies = [ "futures-util", "http", @@ -3890,9 +4079,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3dc3e9cf2ba50b7b1d7d76a667619f82846caa39e8e8daa8a4962d74acaddca" +checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" dependencies = [ "anyhow", "arrayvec 0.7.2", @@ -3903,10 +4092,8 @@ dependencies = [ "futures-timer", "futures-util", "globset", - "http", "hyper", "jsonrpsee-types", - "lazy_static", "parking_lot 0.12.1", "rand 0.8.5", "rustc-hash", @@ -3916,45 +4103,48 @@ dependencies = [ "thiserror", "tokio", "tracing", - "tracing-futures", - "unicase", ] [[package]] -name = "jsonrpsee-http-server" -version = "0.15.1" +name = "jsonrpsee-proc-macros" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03802f0373a38c2420c70b5144742d800b509e2937edc4afb116434f07120117" +checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" dependencies = [ "futures-channel", "futures-util", + "http", "hyper", "jsonrpsee-core", "jsonrpsee-types", "serde", "serde_json", + "soketto", "tokio", + "tokio-stream", + "tokio-util", + "tower", "tracing", - "tracing-futures", -] - -[[package]] -name = "jsonrpsee-proc-macros" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd67957d4280217247588ac86614ead007b301ca2fa9f19c19f880a536f029e3" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", ] [[package]] name = "jsonrpsee-types" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e290bba767401b646812f608c099b922d8142603c9e73a50fb192d3ac86f4a0d" +checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" dependencies = [ "anyhow", "beef", @@ -3966,9 +4156,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee5feddd5188e62ac08fcf0e56478138e581509d4730f3f7be9b57dd402a4ff" +checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" dependencies = [ "http", "jsonrpsee-client-transport", @@ -3976,36 +4166,16 @@ dependencies = [ "jsonrpsee-types", ] -[[package]] -name = "jsonrpsee-ws-server" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d488ba74fb369e5ab68926feb75a483458b88e768d44319f37e4ecad283c7325" -dependencies = [ - "futures-channel", - "futures-util", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "serde_json", - "soketto", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "tracing-futures", -] - [[package]] name = "k256" -version = "0.10.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "ecdsa", "elliptic-curve", - "sec1", + "sha2 0.10.6", ] [[package]] @@ -4019,10 +4189,9 @@ dependencies = [ [[package]] name = "kusama-runtime" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "beefy-primitives", "bitvec", "frame-benchmarking", "frame-election-provider-support", @@ -4046,16 +4215,16 @@ dependencies = [ "pallet-conviction-voting", "pallet-democracy", "pallet-election-provider-multi-phase", - "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "pallet-elections-phragmen", "pallet-fast-unstake", - "pallet-gilt", "pallet-grandpa", "pallet-identity", "pallet-im-online", "pallet-indices", "pallet-membership", "pallet-multisig", + "pallet-nis", "pallet-nomination-pools", "pallet-nomination-pools-benchmarking", "pallet-nomination-pools-runtime-api", @@ -4071,7 +4240,6 @@ dependencies = [ "pallet-session-benchmarking", "pallet-society", "pallet-staking", - "pallet-staking-reward-fn", "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", @@ -4094,6 +4262,7 @@ dependencies = [ "sp-api", "sp-arithmetic", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-consensus-babe", "sp-core", @@ -4117,8 +4286,8 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "polkadot-primitives", @@ -4140,35 +4309,31 @@ dependencies = [ [[package]] name = "kvdb" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585089ceadba0197ffe9af6740ab350b325e3c1f5fccfbc3522e0250c750409b" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" dependencies = [ - "parity-util-mem", "smallvec", ] [[package]] name = "kvdb-memorydb" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40d109c87bfb7759edd2a49b2649c1afe25af785d930ad6a38479b4dc70dd873" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ "kvdb", - "parity-util-mem", "parking_lot 0.12.1", ] [[package]] name = "kvdb-rocksdb" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c076cc2cdbac89b9910c853a36c957d3862a779f31c2661174222cefb49ee597" +checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" dependencies = [ "kvdb", - "log", "num_cpus", - "parity-util-mem", "parking_lot 0.12.1", "regex", "rocksdb", @@ -4189,9 +4354,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.137" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libloading" @@ -4199,10 +4364,16 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "winapi", ] +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + [[package]] name = "libm" version = "0.2.6" @@ -4282,7 +4453,6 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2322c9fb40d99101def6a01612ee30500c89abbbecb6297b3cd252903a4c1720" dependencies = [ - "async-std-resolver", "futures", "libp2p-core", "log", @@ -4303,7 +4473,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "lru 0.8.1", + "lru", "prost", "prost-build", "prost-codec", @@ -4346,7 +4516,6 @@ version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "761704e727f7d68d58d7bc2231eafae5fc1b9814de24290f126df09d4bd37a15" dependencies = [ - "async-io", "data-encoding", "dns-parser", "futures", @@ -4357,6 +4526,7 @@ dependencies = [ "rand 0.8.5", "smallvec", "socket2", + "tokio", "void", ] @@ -4485,7 +4655,6 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9839d96761491c6d3e238e70554b856956fca0ab60feb9de2cd08eed4473fa92" dependencies = [ - "async-io", "futures", "futures-timer", "if-watch", @@ -4493,6 +4662,7 @@ dependencies = [ "libp2p-core", "log", "socket2", + "tokio", ] [[package]] @@ -4530,9 +4700,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.41.0" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f079097a21ad017fc8139460630286f02488c8c13b26affb46623aa20d8845" +checksum = "0d6874d66543c4f7e26e3b8ca9a6bead351563a13ab4fafd43c7927f7c0d6c12" dependencies = [ "futures", "libp2p-core", @@ -4618,9 +4788,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] @@ -4658,9 +4828,9 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "linux-raw-sys" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb68f22743a3fb35785f1e7f844ca5a3de2dde5bd0c0ef5b372065814699b121" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "lock_api" @@ -4678,19 +4848,10 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "value-bag", ] -[[package]] -name = "lru" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" -dependencies = [ - "hashbrown", -] - [[package]] name = "lru" version = "0.8.1" @@ -4741,7 +4902,7 @@ dependencies = [ [[package]] name = "mangata-types" version = "0.1.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -4791,7 +4952,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.1", + "rustix 0.36.6", ] [[package]] @@ -4813,23 +4974,22 @@ dependencies = [ ] [[package]] -name = "memory-db" -version = "0.30.0" +name = "memoffset" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac11bb793c28fa095b7554466f53b3a60a2cd002afdac01bcf135cbd73a269" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ - "hash-db", - "hashbrown", - "parity-util-mem", + "autocfg", ] [[package]] -name = "memory-lru" -version = "0.1.1" +name = "memory-db" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce95ae042940bad7e312857b929ee3d11b8f799a80cb7b9c7ec5125516906395" +checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" dependencies = [ - "lru 0.8.1", + "hash-db", + "hashbrown", ] [[package]] @@ -4869,9 +5029,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] @@ -4888,13 +5048,49 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "mmr-gadget" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +dependencies = [ + "futures", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-offchain", + "sp-api", + "sp-beefy", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", +] + +[[package]] +name = "mmr-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +dependencies = [ + "anyhow", + "jsonrpsee", + "parity-scale-codec", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", +] + [[package]] name = "mockall" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "downcast", "fragile", "lazy_static", @@ -4909,7 +5105,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "proc-macro2", "quote", "syn", @@ -4954,7 +5150,7 @@ dependencies = [ "blake2s_simd", "blake3", "core2", - "digest 0.10.5", + "digest 0.10.6", "multihash-derive", "sha2 0.10.6", "sha3", @@ -4983,9 +5179,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bc41247ec209813e2fd414d6e16b9d94297dacf3cd613fa6ef09cd4d9755c10" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" dependencies = [ "bytes", "futures", @@ -5005,7 +5201,7 @@ dependencies = [ "matrixmultiply", "nalgebra-macros", "num-complex", - "num-rational 0.4.1", + "num-rational", "num-traits", "rand 0.8.5", "rand_distr", @@ -5107,35 +5303,29 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "libc", ] [[package]] name = "nix" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ "autocfg", "bitflags", - "cfg-if 1.0.0", + "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", "pin-utils", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -5144,9 +5334,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "7.1.1" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c" dependencies = [ "memchr", "minimal-lexical", @@ -5158,17 +5348,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.3" @@ -5191,9 +5370,9 @@ dependencies = [ [[package]] name = "num-format" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.2", "itoa", @@ -5209,18 +5388,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-rational" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" -dependencies = [ - "autocfg", - "num-bigint 0.2.6", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.1" @@ -5228,7 +5395,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", - "num-bigint 0.4.3", + "num-bigint", "num-integer", "num-traits", ] @@ -5240,16 +5407,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", + "libm 0.2.6", ] [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] @@ -5265,11 +5432,20 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "oorandom" @@ -5319,7 +5495,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a702b2f6bf592b3eb06c00d80d05afaf7a8eff6b41bb361e397d799acc21b45a" dependencies = [ "expander 0.0.6", - "itertools", + "itertools 0.10.5", "petgraph", "proc-macro-crate", "proc-macro2", @@ -5338,16 +5514,26 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.4.0" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "packed_simd_2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5bf27447411e9ee3ff51186bf7a08e16c341efdde93f4d823e8844429bed7e" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "frame-benchmarking", "frame-support", "frame-system", @@ -5366,8 +5552,9 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", "pallet-transaction-payment", @@ -5383,13 +5570,14 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", "scale-info", + "sp-core", "sp-runtime", "sp-std", ] @@ -5397,7 +5585,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -5413,7 +5601,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -5429,7 +5617,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -5444,7 +5632,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5468,7 +5656,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5488,7 +5676,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5503,15 +5691,15 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "beefy-primitives", "frame-support", "frame-system", "pallet-session", "parity-scale-codec", "scale-info", "serde", + "sp-beefy", "sp-runtime", "sp-std", ] @@ -5519,11 +5707,10 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "beefy-merkle-tree", - "beefy-primitives", "frame-support", "frame-system", "log", @@ -5533,6 +5720,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", + "sp-beefy", "sp-core", "sp-io", "sp-runtime", @@ -5542,7 +5730,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5560,7 +5748,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-support", @@ -5604,7 +5792,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5621,7 +5809,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "bitflags", "frame-benchmarking", @@ -5641,16 +5829,16 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-sandbox 0.10.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", "sp-std", - "wasm-instrument", - "wasmi-validation", + "wasm-instrument 0.4.0", + "wasmi 0.20.0", + "wasmparser-nostd", ] [[package]] name = "pallet-contracts-primitives" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "bitflags", "parity-scale-codec", @@ -5662,7 +5850,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "proc-macro2", "quote", @@ -5672,7 +5860,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5689,7 +5877,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5707,14 +5895,14 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", "log", - "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", + "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev)", "parity-scale-codec", "rand 0.7.3", "scale-info", @@ -5731,7 +5919,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5744,7 +5932,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5757,7 +5945,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5775,16 +5963,13 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", "log", - "pallet-balances", - "pallet-staking", - "pallet-timestamp", "parity-scale-codec", "scale-info", "sp-io", @@ -5793,25 +5978,10 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-gilt" -version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5834,7 +6004,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5850,7 +6020,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5870,7 +6040,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5887,7 +6057,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -5904,9 +6074,8 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "ckb-merkle-mountain-range", "frame-benchmarking", "frame-support", "frame-system", @@ -5920,32 +6089,33 @@ dependencies = [ ] [[package]] -name = "pallet-mmr-rpc" -version = "3.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +name = "pallet-multisig" +version = "4.0.0-dev" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "jsonrpsee", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", "parity-scale-codec", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-mmr-primitives", + "scale-info", + "sp-io", "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-multisig" +name = "pallet-nis" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "log", "parity-scale-codec", "scale-info", - "sp-io", + "sp-arithmetic", + "sp-core", "sp-runtime", "sp-std", ] @@ -5953,7 +6123,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-support", "frame-system", @@ -5970,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5990,7 +6160,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "parity-scale-codec", "sp-api", @@ -6000,7 +6170,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -6017,7 +6187,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6040,7 +6210,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6057,7 +6227,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6072,7 +6242,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-support", "frame-system", @@ -6086,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-support", @@ -6104,7 +6274,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6119,12 +6289,13 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "assert_matches", "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "serde", @@ -6137,7 +6308,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6148,12 +6319,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-std", + "sp-weights", ] [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -6174,7 +6346,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-support", @@ -6190,7 +6362,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -6204,7 +6376,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6227,7 +6399,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6238,16 +6410,33 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "log", "sp-arithmetic", ] +[[package]] +name = "pallet-state-trie-migration" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -6276,7 +6465,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6294,7 +6483,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6313,7 +6502,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-support", "frame-system", @@ -6329,7 +6518,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6339,23 +6528,25 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", + "sp-weights", ] [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "sp-api", "sp-runtime", + "sp-weights", ] [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6372,7 +6563,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6387,7 +6578,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6403,7 +6594,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-benchmarking", "frame-support", @@ -6418,7 +6609,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "frame-benchmarking", "frame-support", @@ -6432,8 +6623,8 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "frame-system", @@ -6450,8 +6641,8 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-benchmarking", "frame-support", @@ -6480,7 +6671,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 4.0.24", + "clap 4.0.32", "cumulus-client-cli", "cumulus-client-consensus-aura", "cumulus-client-consensus-common", @@ -6488,10 +6679,7 @@ dependencies = [ "cumulus-client-service", "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", - "cumulus-relay-chain-minimal-node", - "cumulus-relay-chain-rpc-interface", "frame-benchmarking", "frame-benchmarking-cli", "jsonrpsee", @@ -6512,7 +6700,7 @@ dependencies = [ "sc-network-common", "sc-rpc", "sc-service", - "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "sc-telemetry", "sc-tracing", "sc-transaction-pool", @@ -6523,6 +6711,7 @@ dependencies = [ "sp-blockchain", "sp-consensus-aura", "sp-core", + "sp-io", "sp-keystore", "sp-offchain", "sp-runtime", @@ -6571,7 +6760,7 @@ dependencies = [ "pallet-xcm", "parachain-info", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-runtime-common", "scale-info", "smallvec", @@ -6619,11 +6808,11 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.3.17" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8fdb726a43661fa54b43e7114e6b88b2289cae388eb3ad766d9d1754d83fce" +checksum = "3a7511a0bec4a336b5929999d02b560d2439c993cccf98c26481484e811adc43" dependencies = [ - "blake2-rfc", + "blake2", "crc32fast", "fs2", "hex", @@ -6675,13 +6864,11 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" dependencies = [ - "cfg-if 1.0.0", - "hashbrown", + "cfg-if", "impl-trait-for-tuples", "parity-util-mem-derive", "parking_lot 0.12.1", "primitive-types", - "smallvec", "winapi", ] @@ -6696,15 +6883,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "parity-wasm" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ad52817c4d343339b3bc2e26861bd21478eda0b7509acf83505727000512ac" -dependencies = [ - "byteorder", -] - [[package]] name = "parity-wasm" version = "0.45.0" @@ -6725,7 +6903,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -6735,16 +6913,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.4", + "parking_lot_core 0.9.5", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall", @@ -6754,11 +6932,11 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "smallvec", @@ -6767,9 +6945,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "pbkdf2" @@ -6832,7 +7010,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-runtime-common", "scale-info", @@ -6862,9 +7040,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a528564cc62c19a7acac4d81e01f39e53e25e17b934878f4c6d25cc2836e62f8" +checksum = "0f6e86fb9e7026527a0d46bc308b841d73170ef8f443e1807f6ef88526a816d4" dependencies = [ "thiserror", "ucd-trie", @@ -6872,9 +7050,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fd9bc6500181952d34bd0b2b0163a54d794227b498be0b7afa7698d0a7b18f" +checksum = "96504449aa860c8dcde14f9fba5c58dc6658688ca1fe363589d6327b8662c603" dependencies = [ "pest", "pest_generator", @@ -6882,9 +7060,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2610d5ac5156217b4ff8e46ddcef7cdf44b273da2ac5bca2ecbfa86a330e7c4" +checksum = "798e0220d1111ae63d66cb66a5dcb3fc2d986d520b98e49e1852bfdb11d7c5e7" dependencies = [ "pest", "pest_meta", @@ -6895,9 +7073,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824749bf7e21dd66b36fbe26b3f45c713879cccd4a009a917ab8e045ca8246fe" +checksum = "984298b75898e30a843e278a9f2452c31e349a073a0ce6fd950a12a74464e065" dependencies = [ "once_cell", "pest", @@ -6954,13 +7132,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ "der", "spki", - "zeroize", ] [[package]] @@ -6975,6 +7152,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + [[package]] name = "plotters" version = "0.3.4" @@ -7005,8 +7188,8 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7020,8 +7203,8 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7034,13 +7217,13 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "derive_more", "fatality", "futures", - "lru 0.8.1", + "lru", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7057,12 +7240,12 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "fatality", "futures", - "lru 0.8.1", + "lru", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7078,10 +7261,10 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "clap 4.0.24", + "clap 4.0.32", "frame-benchmarking-cli", "futures", "log", @@ -7091,12 +7274,13 @@ dependencies = [ "polkadot-performance-test", "polkadot-service", "sc-cli", + "sc-executor", "sc-service", - "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "sc-tracing", "sp-core", + "sp-io", "sp-keyring", - "sp-trie", "substrate-build-script-utils", "thiserror", "try-runtime-cli", @@ -7104,14 +7288,15 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "beefy-primitives", + "async-trait", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", "frame-system-rpc-runtime-api", + "futures", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "polkadot-core-primitives", @@ -7126,6 +7311,7 @@ dependencies = [ "sc-service", "sp-api", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-blockchain", "sp-consensus", @@ -7145,8 +7331,8 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "always-assert", "bitvec", @@ -7167,11 +7353,10 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "parity-scale-codec", - "parity-util-mem", "scale-info", "sp-core", "sp-runtime", @@ -7180,15 +7365,15 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "derive_more", "fatality", "futures", "futures-timer", "indexmap", - "lru 0.8.1", + "lru", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7205,8 +7390,8 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7219,8 +7404,8 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "futures-timer", @@ -7239,8 +7424,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "always-assert", "async-trait", @@ -7263,8 +7448,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "parity-scale-codec", @@ -7281,15 +7466,15 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bitvec", "derive_more", "futures", "futures-timer", "kvdb", - "lru 0.8.1", + "lru", "merlin", "parity-scale-codec", "polkadot-node-jaeger", @@ -7310,8 +7495,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bitvec", "futures", @@ -7330,8 +7515,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bitvec", "fatality", @@ -7349,8 +7534,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7364,17 +7549,18 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "futures", + "futures-timer", "parity-scale-codec", "polkadot-node-core-pvf", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "sp-maybe-compressed-blob", "tracing-gum", @@ -7382,8 +7568,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7397,8 +7583,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "futures-timer", @@ -7414,13 +7600,13 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "fatality", "futures", "kvdb", - "lru 0.8.1", + "lru", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -7433,13 +7619,14 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "futures", "futures-timer", "polkadot-node-subsystem", + "polkadot-overseer", "polkadot-primitives", "sp-blockchain", "sp-inherents", @@ -7450,8 +7637,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bitvec", "fatality", @@ -7468,20 +7655,21 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "always-assert", "assert_matches", "async-process", "async-std", + "cpu-time", "futures", "futures-timer", "parity-scale-codec", "pin-project", "polkadot-core-primitives", "polkadot-node-metrics", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "rand 0.8.5", "rayon", "sc-executor", @@ -7500,8 +7688,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", "polkadot-node-primitives", @@ -7516,12 +7704,11 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "futures", - "memory-lru", - "parity-util-mem", + "lru", "polkadot-node-subsystem", "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", @@ -7532,10 +7719,9 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "async-std", "lazy_static", "log", "mick-jaeger", @@ -7546,12 +7732,13 @@ dependencies = [ "sc-network", "sp-core", "thiserror", + "tokio", ] [[package]] name = "polkadot-node-metrics" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bs58", "futures", @@ -7569,8 +7756,8 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "derive_more", @@ -7592,13 +7779,13 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bounded-vec", "futures", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "schnorrkel", "serde", @@ -7614,8 +7801,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7624,8 +7811,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "futures", @@ -7642,8 +7829,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "derive_more", @@ -7665,19 +7852,18 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "derive_more", "fatality", "futures", - "itertools", + "itertools 0.10.5", "kvdb", - "lru 0.8.1", + "lru", "parity-db", "parity-scale-codec", - "parity-util-mem", "parking_lot 0.11.2", "pin-project", "polkadot-node-jaeger", @@ -7698,15 +7884,14 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "futures", "futures-timer", - "lru 0.8.1", + "lru", "orchestra", - "parity-util-mem", "parking_lot 0.12.1", "polkadot-node-metrics", "polkadot-node-network-protocol", @@ -7716,18 +7901,18 @@ dependencies = [ "sc-client-api", "sp-api", "sp-core", + "tikv-jemalloc-ctl", "tracing-gum", ] [[package]] name = "polkadot-parachain" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "derive_more", "frame-support", "parity-scale-codec", - "parity-util-mem", "polkadot-core-primitives", "scale-info", "serde", @@ -7737,12 +7922,14 @@ dependencies = [ ] [[package]] -name = "polkadot-parachain" -version = "0.9.310" +name = "polkadot-parachain-bin" +version = "0.9.360" dependencies = [ "assert_cmd", "async-trait", - "clap 4.0.24", + "bridge-hub-kusama-runtime", + "bridge-hub-rococo-runtime", + "clap 4.0.32", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -7753,17 +7940,14 @@ dependencies = [ "cumulus-client-service", "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", - "cumulus-relay-chain-minimal-node", - "cumulus-relay-chain-rpc-interface", "frame-benchmarking", "frame-benchmarking-cli", "futures", "hex-literal", "jsonrpsee", "log", - "nix 0.25.0", + "nix 0.25.1", "pallet-transaction-payment-rpc", "parachains-common", "parity-scale-codec", @@ -7782,7 +7966,7 @@ dependencies = [ "sc-network-common", "sc-rpc", "sc-service", - "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "sc-telemetry", "sc-tracing", "sc-transaction-pool", @@ -7809,6 +7993,7 @@ dependencies = [ "substrate-build-script-utils", "substrate-frame-rpc-system", "substrate-prometheus-endpoint", + "substrate-state-trie-migration-rpc", "tempfile", "tokio", "try-runtime-cli", @@ -7819,10 +8004,10 @@ dependencies = [ [[package]] name = "polkadot-performance-test" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "env_logger", + "env_logger 0.9.3", "kusama-runtime", "log", "polkadot-erasure-coding", @@ -7834,16 +8019,14 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bitvec", - "frame-system", "hex-literal", "parity-scale-codec", - "parity-util-mem", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "scale-info", "serde", "sp-api", @@ -7858,19 +8041,17 @@ dependencies = [ "sp-runtime", "sp-staking", "sp-std", - "sp-trie", - "sp-version", ] [[package]] name = "polkadot-rpc" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", "jsonrpsee", - "pallet-mmr-rpc", + "mmr-rpc", "pallet-transaction-payment-rpc", "polkadot-primitives", "sc-chain-spec", @@ -7896,10 +8077,9 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "beefy-primitives", "bitvec", "frame-benchmarking", "frame-election-provider-support", @@ -7921,7 +8101,7 @@ dependencies = [ "pallet-collective", "pallet-democracy", "pallet-election-provider-multi-phase", - "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "pallet-elections-phragmen", "pallet-fast-unstake", "pallet-grandpa", @@ -7962,6 +8142,7 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-consensus-babe", "sp-core", @@ -7985,10 +8166,9 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "beefy-primitives", "bitvec", "frame-benchmarking", "frame-election-provider-support", @@ -8005,6 +8185,7 @@ dependencies = [ "pallet-election-provider-multi-phase", "pallet-session", "pallet-staking", + "pallet-staking-reward-fn", "pallet-timestamp", "pallet-transaction-payment", "pallet-treasury", @@ -8018,6 +8199,7 @@ dependencies = [ "serde_derive", "slot-range-helper", "sp-api", + "sp-beefy", "sp-core", "sp-inherents", "sp-io", @@ -8032,8 +8214,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "polkadot-primitives", @@ -8046,8 +8228,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bs58", "parity-scale-codec", @@ -8058,8 +8240,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "bitflags", "bitvec", @@ -8101,12 +8283,11 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "async-trait", "beefy-gadget", - "beefy-primitives", "frame-support", "frame-system-rpc-runtime-api", "futures", @@ -8114,7 +8295,8 @@ dependencies = [ "kusama-runtime", "kvdb", "kvdb-rocksdb", - "lru 0.8.1", + "lru", + "mmr-gadget", "pallet-babe", "pallet-im-online", "pallet-staking", @@ -8148,7 +8330,7 @@ dependencies = [ "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime", @@ -8174,13 +8356,14 @@ dependencies = [ "sc-offchain", "sc-service", "sc-sync-state-rpc", - "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "sc-telemetry", "sc-transaction-pool", "serde", "serde_json", "sp-api", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-blockchain", "sp-consensus", @@ -8190,6 +8373,7 @@ dependencies = [ "sp-inherents", "sp-io", "sp-keystore", + "sp-mmr-primitives", "sp-offchain", "sp-runtime", "sp-session", @@ -8206,8 +8390,8 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8227,8 +8411,8 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8237,8 +8421,8 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8262,10 +8446,9 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "beefy-primitives", "bitvec", "frame-election-provider-support", "frame-executive", @@ -8290,7 +8473,7 @@ dependencies = [ "pallet-vesting", "pallet-xcm", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -8301,6 +8484,7 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-consensus-babe", "sp-core", @@ -8323,8 +8507,8 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-benchmarking", "frame-system", @@ -8336,7 +8520,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-overseer", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime-common", @@ -8377,16 +8561,16 @@ dependencies = [ [[package]] name = "polling" -version = "2.4.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "libc", "log", "wepoll-ffi", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -8406,7 +8590,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "opaque-debug 0.3.0", "universal-hash", @@ -8429,13 +8613,13 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "predicates" -version = "2.1.3" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6bd09a7f7e68f3f0bf710fb7ab9c4615a488b58b5f653382a687701e458c92" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", - "itertools", + "itertools 0.10.5", "normalize-line-endings", "predicates-core", "regex", @@ -8459,9 +8643,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" dependencies = [ "proc-macro2", "syn", @@ -8533,9 +8717,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" dependencies = [ "unicode-ident", ] @@ -8546,7 +8730,7 @@ version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fnv", "lazy_static", "memchr", @@ -8579,9 +8763,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" +checksum = "c01db6702aa05baa3f57dec92b8eeeeb4cb19e894e73996b32a4093289e54592" dependencies = [ "bytes", "prost-derive", @@ -8589,13 +8773,13 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8b442418ea0822409d9e7d047cbf1e7e9e1760b172bf9982cf29d517c93511" +checksum = "cb5320c680de74ba083512704acb90fe00f28f79207286a848e730c45dd73ed6" dependencies = [ "bytes", "heck", - "itertools", + "itertools 0.10.5", "lazy_static", "log", "multimap", @@ -8624,12 +8808,12 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" +checksum = "c8842bad1a5419bca14eac663ba798f6bc19c413c2fdceb5f3ba3b0932d96720" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "syn", @@ -8637,9 +8821,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" +checksum = "017f79637768cde62820bc2d4fe0e45daaa027755c323ad077767c6c5f173091" dependencies = [ "bytes", "prost", @@ -8673,9 +8857,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -8794,21 +8978,19 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.5.3" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -8844,25 +9026,25 @@ checksum = "3bd8f48b2066e9f69ab192797d66da804d1935bf22763204ed3675740cb0f221" dependencies = [ "derive_more", "fs-err", - "itertools", + "itertools 0.10.5", "static_init 0.5.2", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b15debb4f9d60d767cd8ca9ef7abb2452922f3214671ff052defc7f3502c44" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfa8511e9e94fd3de6585a3d3cd00e01ed556dc9814829280af0e8dc72a8f36" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" dependencies = [ "proc-macro2", "quote", @@ -8907,23 +9089,6 @@ version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" -[[package]] -name = "remote-externalities" -version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" -dependencies = [ - "env_logger", - "log", - "parity-scale-codec", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-version", - "substrate-rpc-client", -] - [[package]] name = "remove_dir_all" version = "0.5.3" @@ -8945,12 +9110,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.1.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint", - "hmac 0.11.0", + "hmac 0.12.1", "zeroize", ] @@ -8963,7 +9128,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", + "spin 0.5.2", "untrusted", "web-sys", "winapi", @@ -8992,6 +9157,7 @@ dependencies = [ "cumulus-primitives-core", "cumulus-primitives-timestamp", "cumulus-primitives-utility", + "frame-benchmarking", "frame-executive", "frame-support", "frame-system", @@ -9007,7 +9173,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "scale-info", "sp-api", "sp-block-builder", @@ -9028,11 +9194,10 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "beefy-merkle-tree", - "beefy-primitives", "frame-benchmarking", "frame-executive", "frame-support", @@ -9052,7 +9217,6 @@ dependencies = [ "pallet-collective", "pallet-democracy", "pallet-elections-phragmen", - "pallet-gilt", "pallet-grandpa", "pallet-identity", "pallet-im-online", @@ -9060,6 +9224,7 @@ dependencies = [ "pallet-membership", "pallet-mmr", "pallet-multisig", + "pallet-nis", "pallet-offences", "pallet-preimage", "pallet-proxy", @@ -9068,6 +9233,7 @@ dependencies = [ "pallet-session", "pallet-society", "pallet-staking", + "pallet-state-trie-migration", "pallet-sudo", "pallet-timestamp", "pallet-tips", @@ -9079,7 +9245,7 @@ dependencies = [ "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -9090,6 +9256,7 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-consensus-babe", "sp-core", @@ -9112,8 +9279,8 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "polkadot-primitives", @@ -9126,11 +9293,12 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.1.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c9f5d2a0c3e2ea729ab3706d22217177770654c3ef5056b68b69d07332d3f5" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" dependencies = [ "libc", + "rtoolbox", "winapi", ] @@ -9145,10 +9313,20 @@ dependencies = [ "log", "netlink-packet-route", "netlink-proto", - "nix 0.24.2", + "nix 0.24.3", "thiserror", ] +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "rustc-demangle" version = "0.1.21" @@ -9182,7 +9360,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.14", + "semver 1.0.16", ] [[package]] @@ -9201,15 +9379,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.1" +version = "0.36.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812a2ec2043c4d6bc6482f5be2ab8244613cac2493d128d36c0759e52a626ab3" +checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.1", + "io-lifetimes 1.0.3", "libc", - "linux-raw-sys 0.1.2", + "linux-raw-sys 0.1.4", "windows-sys 0.42.0", ] @@ -9248,9 +9426,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rw-stream-sink" @@ -9265,9 +9443,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-mix" @@ -9290,7 +9468,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "log", "sp-core", @@ -9301,7 +9479,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -9328,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "futures-timer", @@ -9351,7 +9529,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9367,8 +9545,9 @@ dependencies = [ [[package]] name = "sc-block-builder-ver" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ + "aquamarine", "extrinsic-shuffler", "log", "parity-scale-codec", @@ -9387,7 +9566,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "impl-trait-for-tuples", "memmap2", @@ -9404,7 +9583,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9415,11 +9594,11 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "chrono", - "clap 4.0.24", + "clap 4.0.32", "fdlimit", "futures", "libp2p", @@ -9455,7 +9634,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "fnv", "futures", @@ -9483,7 +9662,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "hash-db", "kvdb", @@ -9508,13 +9687,14 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", "futures-timer", "libp2p", "log", + "mockall", "parking_lot 0.12.1", "sc-client-api", "sc-utils", @@ -9532,7 +9712,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -9561,19 +9741,18 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "fork-tree", "futures", "log", "merlin", - "num-bigint 0.2.6", - "num-rational 0.2.4", + "num-bigint", + "num-rational", "num-traits", "parity-scale-codec", "parking_lot 0.12.1", - "rand 0.7.3", "sc-client-api", "sc-consensus", "sc-consensus-epochs", @@ -9603,7 +9782,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "jsonrpsee", @@ -9625,7 +9804,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9638,7 +9817,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -9657,7 +9836,6 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-state-machine", - "sp-timestamp", "sp-ver", "thiserror", ] @@ -9665,10 +9843,9 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "lazy_static", - "lru 0.7.8", + "lru", "parity-scale-codec", "parking_lot 0.12.1", "sc-executor-common", @@ -9676,66 +9853,56 @@ dependencies = [ "sc-executor-wasmtime", "sp-api", "sp-core", - "sp-core-hashing-proc-macro", "sp-externalities", "sp-io", "sp-panic-handler", "sp-runtime-interface", - "sp-tasks", "sp-trie", "sp-version", "sp-wasm-interface", "tracing", - "wasmi", + "wasmi 0.13.2", ] [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "environmental", - "parity-scale-codec", "sc-allocator", "sp-maybe-compressed-blob", - "sp-sandbox 0.10.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", "sp-wasm-interface", "thiserror", - "wasm-instrument", - "wasmi", + "wasm-instrument 0.3.0", + "wasmi 0.13.2", ] [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "log", - "parity-scale-codec", "sc-allocator", "sc-executor-common", "sp-runtime-interface", - "sp-sandbox 0.10.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", "sp-wasm-interface", - "wasmi", + "wasmi 0.13.2", ] [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "log", "once_cell", - "parity-scale-codec", - "parity-wasm 0.45.0", "rustix 0.35.13", "sc-allocator", "sc-executor-common", "sp-runtime-interface", - "sp-sandbox 0.10.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", "sp-wasm-interface", "wasmtime", ] @@ -9743,10 +9910,10 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "ahash", - "array-bytes", + "array-bytes 4.2.0", "async-trait", "dyn-clone", "finality-grandpa", @@ -9784,7 +9951,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "finality-grandpa", "futures", @@ -9805,13 +9972,12 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "ansi_term", "futures", "futures-timer", "log", - "parity-util-mem", "sc-client-api", "sc-network-common", "sc-transaction-pool-api", @@ -9822,9 +9988,9 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "async-trait", "parking_lot 0.12.1", "serde_json", @@ -9837,9 +10003,9 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "async-trait", "asynchronous-codec", "bitflags", @@ -9855,7 +10021,7 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log", - "lru 0.7.8", + "lru", "parity-scale-codec", "parking_lot 0.12.1", "pin-project", @@ -9884,7 +10050,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "cid", "futures", @@ -9904,7 +10070,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "bitflags", @@ -9930,89 +10096,38 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "ahash", "futures", "futures-timer", "libp2p", - "log", - "lru 0.7.8", - "sc-network-common", - "sc-peerset", - "sp-runtime", - "substrate-prometheus-endpoint", - "tracing", -] - -[[package]] -name = "sc-network-light" -version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" -dependencies = [ - "array-bytes", - "futures", - "libp2p", - "log", - "parity-scale-codec", - "prost", - "prost-build", - "sc-client-api", - "sc-network-common", - "sc-peerset", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-network-light" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" -dependencies = [ - "array-bytes", - "futures", - "libp2p", - "log", - "parity-scale-codec", - "prost", - "prost-build", - "sc-client-api", + "log", + "lru", "sc-network-common", "sc-peerset", - "sp-blockchain", - "sp-core", "sp-runtime", - "thiserror", + "substrate-prometheus-endpoint", + "tracing", ] [[package]] -name = "sc-network-sync" +name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", - "fork-tree", + "array-bytes 4.2.0", "futures", "libp2p", "log", - "lru 0.7.8", - "mockall", "parity-scale-codec", "prost", "prost-build", "sc-client-api", - "sc-consensus", "sc-network-common", "sc-peerset", - "sc-utils", - "smallvec", - "sp-arithmetic", "sp-blockchain", - "sp-consensus", "sp-core", - "sp-finality-grandpa", "sp-runtime", "thiserror", ] @@ -10020,14 +10135,15 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", + "async-trait", "fork-tree", "futures", "libp2p", "log", - "lru 0.7.8", + "lru", "mockall", "parity-scale-codec", "prost", @@ -10044,15 +10160,16 @@ dependencies = [ "sp-core", "sp-finality-grandpa", "sp-runtime", + "substrate-prometheus-endpoint", "thiserror", ] [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "futures", "hex", "libp2p", @@ -10069,9 +10186,9 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "bytes", "fnv", "futures", @@ -10099,7 +10216,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "libp2p", @@ -10112,7 +10229,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10121,7 +10238,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "hash-db", @@ -10151,7 +10268,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "jsonrpsee", @@ -10174,20 +10291,23 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", + "http", "jsonrpsee", "log", "serde_json", "substrate-prometheus-endpoint", "tokio", + "tower", + "tower-http", ] [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "hex", @@ -10206,7 +10326,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "directories", @@ -10217,7 +10337,6 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parity-util-mem", "parking_lot 0.12.1", "pin-project", "rand 0.7.3", @@ -10233,14 +10352,14 @@ dependencies = [ "sc-network", "sc-network-bitswap", "sc-network-common", - "sc-network-light 0.10.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", - "sc-network-sync 0.10.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", + "sc-network-light", + "sc-network-sync", "sc-network-transactions", "sc-offchain", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", - "sc-sysinfo 6.0.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31)", + "sc-sysinfo 6.0.0-dev (git+https://github.com/mangata-finance//substrate?branch=mangata-dev)", "sc-telemetry", "sc-tracing", "sc-transaction-pool", @@ -10279,12 +10398,10 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "log", "parity-scale-codec", - "parity-util-mem", - "parity-util-mem-derive", "parking_lot 0.12.1", "sc-client-api", "sp-core", @@ -10293,7 +10410,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10312,7 +10429,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "libc", @@ -10331,7 +10448,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "futures", "libc", @@ -10350,7 +10467,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "chrono", "futures", @@ -10368,7 +10485,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "ansi_term", "atty", @@ -10399,7 +10516,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10410,7 +10527,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -10418,7 +10535,6 @@ dependencies = [ "linked-hash-map", "log", "parity-scale-codec", - "parity-util-mem", "parking_lot 0.12.1", "sc-client-api", "sc-transaction-pool-api", @@ -10437,7 +10553,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -10451,7 +10567,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "futures-timer", @@ -10463,12 +10579,12 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d8a765117b237ef233705cc2cc4c6a27fccd46eea6ef0c8c6dae5f3ef407f8" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "bitvec", - "cfg-if 1.0.0", + "cfg-if", "derive_more", "parity-scale-codec", "scale-info-derive", @@ -10477,9 +10593,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdcd47b380d8c4541044e341dcd9475f55ba37ddc50c908d945fc036a8642496" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10523,9 +10639,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "sct" @@ -10539,10 +10655,11 @@ dependencies = [ [[package]] name = "sec1" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ + "base16ct", "der", "generic-array 0.14.6", "pkcs8", @@ -10552,9 +10669,9 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff55dc09d460954e9ef2fa8a7ced735a964be9981fd50e870b2b3b0705e14964" +checksum = "d9512ffd81e3a3503ed401f79c33168b9148c75038956039166cd750eaa037c3" dependencies = [ "secp256k1-sys", ] @@ -10649,9 +10766,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" dependencies = [ "serde", ] @@ -10664,18 +10781,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -10684,9 +10801,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa", "ryu", @@ -10709,7 +10826,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", @@ -10721,9 +10838,9 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest 0.10.6", ] [[package]] @@ -10745,7 +10862,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", @@ -10757,9 +10874,9 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest 0.10.6", ] [[package]] @@ -10768,7 +10885,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" dependencies = [ - "digest 0.10.5", + "digest 0.10.6", "keccak", ] @@ -10839,11 +10956,11 @@ dependencies = [ [[package]] name = "signature" -version = "1.4.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.9.0", + "digest 0.10.6", "rand_core 0.6.4", ] @@ -10876,8 +10993,8 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "enumn", "parity-scale-codec", @@ -10903,9 +11020,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snap" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" @@ -10916,7 +11033,7 @@ dependencies = [ "aes-gcm", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-pre.1", + "curve25519-dalek 4.0.0-pre.5", "rand_core 0.6.4", "ring", "rustc_version 0.4.0", @@ -10944,6 +11061,7 @@ dependencies = [ "bytes", "flate2", "futures", + "http", "httparse", "log", "rand 0.8.5", @@ -10953,7 +11071,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "hash-db", "log", @@ -10971,7 +11089,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "blake2", "proc-macro-crate", @@ -10982,8 +11100,8 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -10995,8 +11113,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "5.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "6.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "integer-sqrt", "num-traits", @@ -11011,7 +11129,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -11024,7 +11142,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "parity-scale-codec", @@ -11033,10 +11151,27 @@ dependencies = [ "sp-std", ] +[[package]] +name = "sp-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", +] + [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "sp-api", @@ -11048,11 +11183,11 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "log", - "lru 0.7.8", + "lru", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", @@ -11066,7 +11201,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -11085,7 +11220,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "parity-scale-codec", @@ -11103,7 +11238,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "merlin", @@ -11126,7 +11261,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -11140,7 +11275,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -11152,10 +11287,10 @@ dependencies = [ [[package]] name = "sp-core" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "base58", "bitflags", "blake2", @@ -11192,18 +11327,18 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "wasmi", + "wasmi 0.13.2", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "4.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "5.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "blake2", "byteorder", - "digest 0.10.5", + "digest 0.10.6", "sha2 0.10.6", "sha3", "sp-std", @@ -11213,7 +11348,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro2", "quote", @@ -11224,7 +11359,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11232,8 +11367,8 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "4.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "5.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro2", "quote", @@ -11242,8 +11377,8 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.12.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "0.13.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "environmental", "parity-scale-codec", @@ -11254,7 +11389,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "finality-grandpa", "log", @@ -11272,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11285,10 +11420,11 @@ dependencies = [ [[package]] name = "sp-io" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "bytes", + "ed25519-dalek", "futures", "hash-db", "libsecp256k1", @@ -11311,8 +11447,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "lazy_static", "sp-core", @@ -11322,8 +11458,8 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.12.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "0.13.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures", @@ -11340,7 +11476,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "thiserror", "zstd", @@ -11349,8 +11485,9 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ + "ckb-merkle-mountain-range", "log", "parity-scale-codec", "scale-info", @@ -11360,12 +11497,13 @@ dependencies = [ "sp-debug-derive", "sp-runtime", "sp-std", + "thiserror", ] [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -11379,7 +11517,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "sp-api", "sp-core", @@ -11388,8 +11526,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "4.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "5.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "backtrace", "lazy_static", @@ -11399,7 +11537,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "rustc-hash", "serde", @@ -11408,8 +11546,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "either", "hash256-std-hasher", @@ -11431,8 +11569,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11449,8 +11587,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "5.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "6.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "Inflector", "proc-macro-crate", @@ -11459,38 +11597,10 @@ dependencies = [ "syn", ] -[[package]] -name = "sp-sandbox" -version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" -dependencies = [ - "log", - "parity-scale-codec", - "sp-core", - "sp-io", - "sp-std", - "sp-wasm-interface", - "wasmi", -] - -[[package]] -name = "sp-sandbox" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" -dependencies = [ - "log", - "parity-scale-codec", - "sp-core", - "sp-io", - "sp-std", - "sp-wasm-interface", - "wasmi", -] - [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "serde", "serde_json", @@ -11499,7 +11609,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", @@ -11513,18 +11623,19 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "scale-info", + "sp-core", "sp-runtime", "sp-std", ] [[package]] name = "sp-state-machine" -version = "0.12.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "0.13.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "hash-db", "log", @@ -11545,13 +11656,13 @@ dependencies = [ [[package]] name = "sp-std" -version = "4.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "5.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" [[package]] name = "sp-storage" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11561,23 +11672,10 @@ dependencies = [ "sp-std", ] -[[package]] -name = "sp-tasks" -version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" -dependencies = [ - "log", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime-interface", - "sp-std", -] - [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "futures-timer", @@ -11592,8 +11690,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "5.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "6.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "sp-std", @@ -11605,7 +11703,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "sp-api", "sp-runtime", @@ -11614,7 +11712,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "log", @@ -11629,14 +11727,14 @@ dependencies = [ [[package]] name = "sp-trie" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "ahash", "hash-db", "hashbrown", "lazy_static", - "lru 0.7.8", + "lru", "memory-db", "nohash-hasher", "parity-scale-codec", @@ -11653,14 +11751,17 @@ dependencies = [ [[package]] name = "sp-ver" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "log", "parity-scale-codec", + "scale-info", + "schnorrkel", "serde", "sp-core", "sp-inherents", + "sp-keystore", "sp-runtime", "sp-std", ] @@ -11668,11 +11769,11 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "impl-serde", "parity-scale-codec", - "parity-wasm 0.45.0", + "parity-wasm", "scale-info", "serde", "sp-core-hashing-proc-macro", @@ -11685,7 +11786,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11695,21 +11796,21 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "6.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +version = "7.0.0" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", "sp-std", - "wasmi", + "wasmi 0.13.2", "wasmtime", ] [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11728,11 +11829,17 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" + [[package]] name = "spki" -version = "0.5.4" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", "der", @@ -11740,9 +11847,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.34.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a9821878e1f13aba383aa40a86fb1b33c7265774ec91e32563cb1dd1577496" +checksum = "23d92659e7d18d82b803824a9ba5a6022cff101c3491d027c1c1d8d30e749284" dependencies = [ "Inflector", "num-format", @@ -11792,6 +11899,7 @@ dependencies = [ "pallet-multisig", "pallet-proxy", "pallet-session", + "pallet-state-trie-migration", "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", @@ -11803,7 +11911,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-runtime-common", "scale-info", "smallvec", @@ -11867,7 +11975,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -11917,7 +12025,7 @@ dependencies = [ "cfg_aliases", "libc", "parking_lot 0.11.2", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", "static_init_macro 1.0.2", "winapi", ] @@ -12005,15 +12113,15 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "platforms", + "platforms 2.0.0", ] [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -12034,7 +12142,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures-util", "hyper", @@ -12047,7 +12155,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "async-trait", "jsonrpsee", @@ -12060,7 +12168,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" dependencies = [ "jsonrpsee", "log", @@ -12081,9 +12189,9 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "async-trait", "futures", "parity-scale-codec", @@ -12107,7 +12215,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12117,7 +12225,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12128,7 +12236,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "ansi_term", "build-helper", @@ -12139,7 +12247,7 @@ dependencies = [ "tempfile", "toml", "walkdir", - "wasm-gc-api", + "wasm-opt", ] [[package]] @@ -12150,9 +12258,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -12210,7 +12318,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fastrand", "libc", "redox_syscall", @@ -12235,8 +12343,8 @@ checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "test-runtime-constants" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "polkadot-primitives", @@ -12255,18 +12363,18 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -12310,6 +12418,17 @@ dependencies = [ "threadpool", ] +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e37706572f4b151dff7a0146e040804e9c26fe3a3118591112f05cf12a4216c1" +dependencies = [ + "libc", + "paste", + "tikv-jemalloc-sys", +] + [[package]] name = "tikv-jemalloc-sys" version = "0.5.2+5.3.0-patched" @@ -12323,9 +12442,9 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -12378,9 +12497,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.21.2" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" dependencies = [ "autocfg", "bytes", @@ -12393,14 +12512,14 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", @@ -12446,13 +12565,48 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite 0.2.9", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -12465,7 +12619,8 @@ version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", + "log", "pin-project-lite 0.2.9", "tracing-attributes", "tracing-core", @@ -12504,8 +12659,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12515,8 +12670,8 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12598,7 +12753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", - "cfg-if 1.0.0", + "cfg-if", "data-encoding", "enum-as-inner", "futures-channel", @@ -12611,6 +12766,7 @@ dependencies = [ "smallvec", "thiserror", "tinyvec", + "tokio", "tracing", "url", ] @@ -12621,7 +12777,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "futures-util", "ipconfig", "lazy_static", @@ -12630,6 +12786,7 @@ dependencies = [ "resolv-conf", "smallvec", "thiserror", + "tokio", "tracing", "trust-dns-proto", ] @@ -12643,22 +12800,26 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ - "clap 4.0.24", + "clap 4.0.32", + "frame-remote-externalities", "frame-try-runtime", + "hex", "log", "parity-scale-codec", - "remote-externalities", "sc-chain-spec", "sc-cli", "sc-executor", "sc-service", "serde", + "sp-api", "sp-core", + "sp-debug-derive", "sp-externalities", "sp-io", "sp-keystore", + "sp-rpc", "sp-runtime", "sp-state-machine", "sp-version", @@ -12669,9 +12830,9 @@ dependencies = [ [[package]] name = "tt-call" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e66dcbec4290c69dd03c57e76c2469ea5c7ce109c6dd4351c13055cf71ea055" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" [[package]] name = "twox-hash" @@ -12679,17 +12840,17 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", - "digest 0.10.5", + "cfg-if", + "digest 0.10.6", "rand 0.8.5", "static_assertions", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" @@ -12699,9 +12860,9 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", @@ -12709,15 +12870,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.8" @@ -12726,9 +12878,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" @@ -12815,7 +12967,7 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "ver-api" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" dependencies = [ "derive_more", "futures", @@ -12826,6 +12978,8 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-runtime", + "sp-std", + "sp-ver", ] [[package]] @@ -12900,7 +13054,7 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -12925,7 +13079,7 @@ version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -12961,23 +13115,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] -name = "wasm-gc-api" -version = "0.1.11" +name = "wasm-instrument" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c32691b6c7e6c14e7f8fd55361a9088b507aa49620fcd06c09b3a1082186b9" +checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" dependencies = [ - "log", - "parity-wasm 0.32.0", - "rustc-demangle", + "parity-wasm", ] [[package]] name = "wasm-instrument" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" +checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasm-opt" +version = "0.110.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68e8037b4daf711393f4be2056246d12d975651b14d581520ad5d1f19219cec" +dependencies = [ + "anyhow", + "libc", + "strum", + "strum_macros", + "tempfile", + "thiserror", + "wasm-opt-cxx-sys", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-cxx-sys" +version = "0.110.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91adbad477e97bba3fbd21dd7bfb594e7ad5ceb9169ab1c93ab9cb0ada636b6f" +dependencies = [ + "anyhow", + "cxx", + "cxx-build", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-sys" +version = "0.110.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec4fa5a322a4e6ac22fd141f498d56afbdbf9df5debeac32380d2dcaa3e06941" dependencies = [ - "parity-wasm 0.45.0", + "anyhow", + "cc", + "cxx", + "cxx-build", + "regex", ] [[package]] @@ -13001,9 +13194,21 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" dependencies = [ - "parity-wasm 0.45.0", + "parity-wasm", "wasmi-validation", - "wasmi_core", + "wasmi_core 0.2.1", +] + +[[package]] +name = "wasmi" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" +dependencies = [ + "spin 0.9.4", + "wasmi_arena", + "wasmi_core 0.5.0", + "wasmparser-nostd", ] [[package]] @@ -13012,9 +13217,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" dependencies = [ - "parity-wasm 0.45.0", + "parity-wasm", ] +[[package]] +name = "wasmi_arena" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ea379cbb0b41f3a9f0bf7b47036d036aae7f43383d8cc487d4deccf40dee0a" + [[package]] name = "wasmi_core" version = "0.2.1" @@ -13022,9 +13233,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ "downcast-rs", - "libm", + "libm 0.2.6", "memory_units", - "num-rational 0.4.1", + "num-rational", + "num-traits", +] + +[[package]] +name = "wasmi_core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" +dependencies = [ + "downcast-rs", + "libm 0.2.6", "num-traits", ] @@ -13037,6 +13259,15 @@ dependencies = [ "indexmap", ] +[[package]] +name = "wasmparser-nostd" +version = "0.91.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c37f310b5a62bfd5ae7c0f1d8e6f98af16a5d6d84ba764e9c36439ec14e318b" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "wasmtime" version = "1.0.2" @@ -13045,11 +13276,11 @@ checksum = "4ad5af6ba38311282f2a21670d96e78266e8c8e2f38cbcd52c254df6ccbc7731" dependencies = [ "anyhow", "bincode", - "cfg-if 1.0.0", + "cfg-if", "indexmap", "libc", "log", - "object", + "object 0.29.0", "once_cell", "paste", "psm", @@ -13071,7 +13302,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45de63ddfc8b9223d1adc8f7b2ee5f35d1f6d112833934ad7ea66e4f4339e597" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -13106,9 +13337,9 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.26.2", "log", - "object", + "object 0.29.0", "target-lexicon", "thiserror", "wasmparser", @@ -13123,10 +13354,10 @@ checksum = "ebb881c61f4f627b5d45c54e629724974f8a8890d455bcbe634330cc27309644" dependencies = [ "anyhow", "cranelift-entity", - "gimli", + "gimli 0.26.2", "indexmap", "log", - "object", + "object 0.29.0", "serde", "target-lexicon", "thiserror", @@ -13140,14 +13371,14 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1985c628011fe26adf5e23a5301bdc79b245e0e338f14bb58b39e4e25e4d8681" dependencies = [ - "addr2line", + "addr2line 0.17.0", "anyhow", "bincode", - "cfg-if 1.0.0", + "cfg-if", "cpp_demangle", - "gimli", + "gimli 0.26.2", "log", - "object", + "object 0.29.0", "rustc-demangle", "rustix 0.35.13", "serde", @@ -13165,7 +13396,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731" dependencies = [ - "object", + "object 0.29.0", "once_cell", "rustix 0.35.13", ] @@ -13178,13 +13409,13 @@ checksum = "ee8f92ad4b61736339c29361da85769ebc200f184361959d1792832e592a1afd" dependencies = [ "anyhow", "cc", - "cfg-if 1.0.0", + "cfg-if", "indexmap", "libc", "log", "mach", "memfd", - "memoffset", + "memoffset 0.6.5", "paste", "rand 0.8.5", "rustix 0.35.13", @@ -13229,9 +13460,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ "webpki", ] @@ -13247,10 +13478,9 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ - "beefy-primitives", "bitvec", "frame-benchmarking", "frame-election-provider-support", @@ -13270,7 +13500,7 @@ dependencies = [ "pallet-collective", "pallet-democracy", "pallet-election-provider-multi-phase", - "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31)", + "pallet-election-provider-support-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36)", "pallet-elections-phragmen", "pallet-fast-unstake", "pallet-grandpa", @@ -13303,7 +13533,7 @@ dependencies = [ "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -13314,6 +13544,7 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", + "sp-beefy", "sp-block-builder", "sp-consensus-babe", "sp-core", @@ -13337,8 +13568,8 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "polkadot-primitives", @@ -13392,7 +13623,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "polkadot-runtime-common", "scale-info", "smallvec", @@ -13616,9 +13847,9 @@ dependencies = [ [[package]] name = "wyz" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] @@ -13636,8 +13867,8 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13650,15 +13881,15 @@ dependencies = [ [[package]] name = "xcm-builder" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-support", "frame-system", "log", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.31", + "polkadot-parachain", "scale-info", "sp-arithmetic", "sp-io", @@ -13670,8 +13901,8 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "frame-benchmarking", "frame-support", @@ -13688,8 +13919,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#32dd0c9cfcd1a1bda821747f6ab334f0e3577558" +version = "0.9.36" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.36#dc25abc712e42b9b51d87ad1168e453a42b5f0bc" dependencies = [ "Inflector", "proc-macro2", @@ -13722,9 +13953,9 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", @@ -13753,9 +13984,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" +version = "2.0.4+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +checksum = "4fa202f2ef00074143e219d15b62ffc317d17cc33909feac471c044087cad7b0" dependencies = [ "cc", "libc", @@ -13764,19 +13995,19 @@ dependencies = [ [[patch.unused]] name = "node-primitives" version = "2.0.0" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" [[patch.unused]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" [[patch.unused]] name = "pallet-template" version = "4.0.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" [[patch.unused]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev-v0.9.31#7eab46fae97c891aafa8853decba4e97fc2f97f4" +source = "git+https://github.com/mangata-finance//substrate?branch=mangata-dev#8d5b532ef66f0f06be2e9b23c0f8ecf335440075" diff --git a/Cargo.toml b/Cargo.toml index 6951a331126..a8b55d6e281 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,6 @@ [workspace] +resolver = "2" + members = [ "client/cli", "client/consensus/aura", @@ -17,6 +19,7 @@ members = [ "pallets/parachain-system", "pallets/parachain-system/proc-macro", "pallets/session-benchmarking", + "pallets/solo-to-para", "pallets/xcm", "pallets/xcmp-queue", "parachain-template/node", @@ -35,6 +38,8 @@ members = [ "parachains/runtimes/assets/statemint", "parachains/runtimes/assets/statemine", "parachains/runtimes/assets/westmint", + "parachains/runtimes/bridge-hubs/bridge-hub-rococo", + "parachains/runtimes/bridge-hubs/bridge-hub-kusama", "parachains/runtimes/collectives/collectives-polkadot", "parachains/runtimes/contracts/contracts-rococo", "parachains/runtimes/testing/penpal", @@ -70,7 +75,6 @@ frame-system = { git = "https://github.com/mangata-finance//substrate", branch = pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } -pallet-gilt = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } @@ -95,7 +99,6 @@ pallet-democracy = { git = "https://github.com/mangata-finance//substrate", bran pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } -pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } #pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-uniques = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } @@ -163,7 +166,6 @@ substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate" try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } -remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } pallet-template = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } @@ -177,7 +179,7 @@ sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } -beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +sp-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } @@ -190,7 +192,6 @@ sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branc sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } -sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } diff --git a/README.md b/README.md index 3d6a47fbba6..314b71e8699 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,85 @@ and treat as best. A Polkadot [collator](https://wiki.polkadot.network/docs/en/learn-collator) for the parachain is implemented by the `polkadot-parachain` binary (previously called `polkadot-collator`). -## Installation - +## Installation and Setup Before building Cumulus SDK based nodes / runtimes prepare your environment by following Substrate [installation instructions](https://docs.substrate.io/main-docs/install/). +To launch a local network, you can use [zombienet](https://github.com/paritytech/zombienet) for quick setup and experimentation or follow the [manual setup](#manual-setup). + +### Zombienet +We use Zombienet to spin up networks for integration tests and local networks. Follow [these installation steps](https://github.com/paritytech/zombienet#requirements-by-provider) to set it up on your machine. +A simple network specification with two relay chain nodes and one collator is located at [zombienet/examples/small_network.toml](zombienet/examples/small_network.toml). + + +#### Which provider should I use? +Zombienet offers multiple providers to run networks. Choose the one that best fits your needs: +- **Podman:** Choose this if you want to spin up a network quick and easy. +- **Native:** Choose this if you want to develop and deploy your changes. Requires compilation of the binaries. +- **Kubernetes:** Choose this for advanced use-cases or running on cloud-infrastructure. + +#### How to run +To run the example network, use the following commands: + +```bash +# Podman provider +zombienet --provider podman spawn ./zombienet/examples/small_network.toml + +# Native provider, assumes polkadot and polkadot-parachains binary in $PATH +zombienet --provider native spawn ./zombienet/examples/small_network.toml +``` + +### Manual Setup +#### Launch the Relay Chain + +```bash +# Clone +git clone https://github.com/paritytech/polkadot +cd polkadot + +# Compile Polkadot with the real overseer feature +cargo build --release --bin polkadot + +# Generate a raw chain spec +./target/release/polkadot build-spec --chain rococo-local --disable-default-bootnode --raw > rococo-local-cfde.json + +# Alice +./target/release/polkadot --chain rococo-local-cfde.json --alice --tmp + +# Bob (In a separate terminal) +./target/release/polkadot --chain rococo-local-cfde.json --bob --tmp --port 30334 +``` + +#### Launch the Parachain + +```bash +# Clone +git clone https://github.com/paritytech/cumulus +cd cumulus + +# Compile +cargo build --release --bin polkadot-parachain + +# Export genesis state +./target/release/polkadot-parachain export-genesis-state > genesis-state + +# Export genesis wasm +./target/release/polkadot-parachain export-genesis-wasm > genesis-wasm + +# Collator1 +./target/release/polkadot-parachain --collator --alice --force-authoring --tmp --port 40335 --ws-port 9946 -- --execution wasm --chain ../polkadot/rococo-local-cfde.json --port 30335 + +# Collator2 +./target/release/polkadot-parachain --collator --bob --force-authoring --tmp --port 40336 --ws-port 9947 -- --execution wasm --chain ../polkadot/rococo-local-cfde.json --port 30336 + +# Parachain Full Node 1 +./target/release/polkadot-parachain --tmp --port 40337 --ws-port 9948 -- --execution wasm --chain ../polkadot/rococo-local-cfde.json --port 30337 +``` + +#### Register the parachain + +![image](https://user-images.githubusercontent.com/2915325/99548884-1be13580-2987-11eb-9a8b-20be658d34f9.png) + + ## Statemint 🪙 This repository also contains the Statemint runtime (as well as the canary runtime Statemine and the @@ -63,12 +138,16 @@ CHAIN=westmint # or statemine ./target/release/polkadot-parachain --chain $CHAIN ``` -Refer to the [setup instructions below](#local-setup) to run a local network for development. +Refer to the [setup instructions](#local-setup) to run a local network for development. ## Contracts 📝 See [the `contracts-rococo` readme](parachains/runtimes/contracts/contracts-rococo/README.md) for details. +## Bridge-hub 📝 + +See [the `bridge-hubs` readme](parachains/runtimes/bridge-hubs/README.md) for details. + ## Rococo 👑 [Rococo](https://polkadot.js.org/apps/?rpc=wss://rococo-rpc.polkadot.io) is becoming a [Community Parachain Testbed](https://polkadot.network/blog/rococo-revamp-becoming-a-community-parachain-testbed/) for parachain teams in the Polkadot ecosystem. It supports multiple parachains with the differentiation of long-term connections and recurring short-term connections, to see which parachains are currently connected and how long they will be connected for [see here](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-rpc.polkadot.io#/parachains). @@ -117,60 +196,6 @@ The network uses horizontal message passing (HRMP) to enable communication betwe the relay chain and, in turn, between parachains. This means that every message is sent to the relay chain, and from the relay chain to its destination parachain. -### Local Setup - -Launch a local setup including a Relay Chain and a Parachain. - -#### Launch the Relay Chain - -```bash -# Clone -git clone https://github.com/paritytech/polkadot -cd polkadot - -# Compile Polkadot with the real overseer feature -cargo build --release - -# Generate a raw chain spec -./target/release/polkadot build-spec --chain rococo-local --disable-default-bootnode --raw > rococo-local-cfde.json - -# Alice -./target/release/polkadot --chain rococo-local-cfde.json --alice --tmp - -# Bob (In a separate terminal) -./target/release/polkadot --chain rococo-local-cfde.json --bob --tmp --port 30334 -``` - -#### Launch the Parachain - -```bash -# Clone -git clone https://github.com/paritytech/cumulus -cd cumulus - -# Compile -cargo build --release - -# Export genesis state -./target/release/polkadot-parachain export-genesis-state > genesis-state - -# Export genesis wasm -./target/release/polkadot-parachain export-genesis-wasm > genesis-wasm - -# Collator1 -./target/release/polkadot-parachain --collator --alice --force-authoring --tmp --port 40335 --ws-port 9946 -- --execution wasm --chain ../polkadot/rococo-local-cfde.json --port 30335 - -# Collator2 -./target/release/polkadot-parachain --collator --bob --force-authoring --tmp --port 40336 --ws-port 9947 -- --execution wasm --chain ../polkadot/rococo-local-cfde.json --port 30336 - -# Parachain Full Node 1 -./target/release/polkadot-parachain --tmp --port 40337 --ws-port 9948 -- --execution wasm --chain ../polkadot/rococo-local-cfde.json --port 30337 -``` - -#### Register the parachain - -![image](https://user-images.githubusercontent.com/2915325/99548884-1be13580-2987-11eb-9a8b-20be658d34f9.png) - ### Containerize After building `polkadot-parachain` with cargo or with Parity CI image as documented in [this chapter](#build--launch-rococo-collators), diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 3858f08fe86..5bce47545c8 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,13 +5,13 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "4.0.17", features = ["derive"] } +clap = { version = "4.0.29", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.3.1" # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } diff --git a/client/cli/src/lib.rs b/client/cli/src/lib.rs index ae7943f99aa..edf11d72a0b 100644 --- a/client/cli/src/lib.rs +++ b/client/cli/src/lib.rs @@ -293,9 +293,11 @@ pub struct RunCmd { /// EXPERIMENTAL: Specify an URL to a relay chain full node to communicate with. #[arg( long, - value_parser = validate_relay_chain_url + value_parser = validate_relay_chain_url, + num_args = 0.., + alias = "relay-chain-rpc-url" )] - pub relay_chain_rpc_url: Option, + pub relay_chain_rpc_urls: Vec, } impl RunCmd { @@ -310,7 +312,7 @@ impl RunCmd { /// Create [`CollatorOptions`] representing options only relevant to parachain collator nodes pub fn collator_options(&self) -> CollatorOptions { - CollatorOptions { relay_chain_rpc_url: self.relay_chain_rpc_url.clone() } + CollatorOptions { relay_chain_rpc_urls: self.relay_chain_rpc_urls.clone() } } } @@ -318,7 +320,7 @@ impl RunCmd { #[derive(Clone, Debug)] pub struct CollatorOptions { /// Location of relay chain full node - pub relay_chain_rpc_url: Option, + pub relay_chain_rpc_urls: Vec, } /// A non-redundant version of the `RunCmd` that sets the `validator` field when the diff --git a/client/collator/Cargo.toml b/client/collator/Cargo.toml index 291a293c47e..259736b7703 100644 --- a/client/collator/Cargo.toml +++ b/client/collator/Cargo.toml @@ -11,17 +11,17 @@ parking_lot = "0.12.0" tracing = "0.1.25" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-client-consensus-common = { path = "../consensus/common" } @@ -32,12 +32,12 @@ cumulus-primitives-core = { path = "../../primitives/core" } async-trait = "0.1.42" # Substrate -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-node-subsystem-test-helpers = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-subsystem-test-helpers = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index 71a12326a4a..ad0da6230ab 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -6,28 +6,28 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -async-trait = "0.1.57" +async-trait = "0.1.59" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -futures = "0.3.24" +futures = "0.3.25" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Cumulus cumulus-client-consensus-common = { path = "../common" } diff --git a/client/consensus/aura/src/import_queue.rs b/client/consensus/aura/src/import_queue.rs index 80b35a2bab9..862abfb349a 100644 --- a/client/consensus/aura/src/import_queue.rs +++ b/client/consensus/aura/src/import_queue.rs @@ -17,9 +17,10 @@ //! Parachain specific wrapper for the AuRa import queue. use codec::Codec; +use cumulus_client_consensus_common::ParachainBlockImportMarker; use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider}; use sc_consensus::{import_queue::DefaultImportQueue, BlockImport}; -use sc_consensus_aura::AuraVerifier; +use sc_consensus_aura::{AuraVerifier, CompatibilityMode}; use sc_consensus_slots::InherentDataProviderExt; use sc_telemetry::TelemetryHandle; use sp_api::{ApiExt, ProvideRuntimeApi}; @@ -33,7 +34,7 @@ use sp_runtime::traits::Block as BlockT; use std::{fmt::Debug, hash::Hash, sync::Arc}; use substrate_prometheus_endpoint::Registry; -/// Parameters of [`import_queue`]. +/// Parameters for [`import_queue`]. pub struct ImportQueueParams<'a, I, C, CIDP, S> { /// The block import to use. pub block_import: I, @@ -72,6 +73,7 @@ where + UsageProvider + HeaderBackend, I: BlockImport> + + ParachainBlockImportMarker + Send + Sync + 'static, @@ -83,7 +85,7 @@ where CIDP::InherentDataProviders: InherentDataProviderExt + Send + Sync, { sc_consensus_aura::import_queue::(sc_consensus_aura::ImportQueueParams { - block_import: cumulus_client_consensus_common::ParachainBlockImport::new(block_import), + block_import, justification_import: None, client, create_inherent_data_providers, @@ -91,6 +93,7 @@ where registry, check_for_equivocation: sc_consensus_aura::CheckForEquivocation::No, telemetry, + compatibility_mode: CompatibilityMode::None, }) } @@ -105,16 +108,17 @@ pub struct BuildVerifierParams { } /// Build the [`AuraVerifier`]. -pub fn build_verifier( +pub fn build_verifier( BuildVerifierParams { client, create_inherent_data_providers, telemetry }: BuildVerifierParams< C, CIDP, >, -) -> AuraVerifier { +) -> AuraVerifier { sc_consensus_aura::build_verifier(sc_consensus_aura::BuildVerifierParams { client, create_inherent_data_providers, telemetry, check_for_equivocation: sc_consensus_aura::CheckForEquivocation::No, + compatibility_mode: CompatibilityMode::None, }) } diff --git a/client/consensus/aura/src/lib.rs b/client/consensus/aura/src/lib.rs index 1be562e37cb..965f8fe3baa 100644 --- a/client/consensus/aura/src/lib.rs +++ b/client/consensus/aura/src/lib.rs @@ -24,7 +24,7 @@ use codec::{Decode, Encode}; use cumulus_client_consensus_common::{ - ParachainBlockImport, ParachainCandidate, ParachainConsensus, + ParachainBlockImportMarker, ParachainCandidate, ParachainConsensus, }; use cumulus_primitives_core::{relay_chain::v2::Hash as PHash, PersistedValidationData}; @@ -39,7 +39,7 @@ use sp_blockchain::HeaderBackend; use sp_consensus::{EnableProofRecording, Environment, ProofRecording, Proposer, SyncOracle}; use sp_consensus_aura::{AuraApi, SlotDuration}; use sp_core::crypto::Pair; -use sp_inherents::{CreateInherentDataProviders, InherentData, InherentDataProvider}; +use sp_inherents::CreateInherentDataProviders; use sp_keystore::SyncCryptoStorePtr; use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Member, NumberFor}; use std::{convert::TryFrom, hash::Hash, marker::PhantomData, sync::Arc}; @@ -71,6 +71,22 @@ impl Clone for AuraConsensus { } } +/// Parameters of [`AuraConsensus::build`]. +pub struct BuildAuraConsensusParams { + pub proposer_factory: PF, + pub create_inherent_data_providers: CIDP, + pub block_import: BI, + pub para_client: Arc, + pub backoff_authoring_blocks: Option, + pub sync_oracle: SO, + pub keystore: SyncCryptoStorePtr, + pub force_authoring: bool, + pub slot_duration: SlotDuration, + pub telemetry: Option, + pub block_proposal_slot_portion: SlotProportion, + pub max_block_proposal_slot_portion: Option, +} + impl AuraConsensus where B: BlockT, @@ -98,7 +114,11 @@ where Client: ProvideRuntimeApi + BlockOf + AuxStore + HeaderBackend + Send + Sync + 'static, Client::Api: AuraApi, - BI: BlockImport> + Send + Sync + 'static, + BI: BlockImport> + + ParachainBlockImportMarker + + Send + + Sync + + 'static, SO: SyncOracle + Send + Sync + Clone + 'static, BS: BackoffAuthoringBlocksStrategy> + Send + Sync + 'static, PF: Environment + Send + Sync + 'static, @@ -117,7 +137,7 @@ where let worker = sc_consensus_aura::build_aura_worker::( BuildAuraWorkerParams { client: para_client, - block_import: ParachainBlockImport::new(block_import), + block_import, justification_sync_link: (), proposer_factory, sync_oracle, @@ -127,6 +147,7 @@ where telemetry, block_proposal_slot_portion, max_block_proposal_slot_portion, + compatibility_mode: sc_consensus_aura::CompatibilityMode::None, }, ); @@ -153,9 +174,8 @@ where parent: B::Hash, validation_data: &PersistedValidationData, relay_parent: PHash, - ) -> Option<(InherentData, CIDP::InherentDataProviders)> { - let inherent_data_providers = self - .create_inherent_data_providers + ) -> Option { + self.create_inherent_data_providers .create_inherent_data_providers(parent, (relay_parent, validation_data.clone())) .await .map_err(|e| { @@ -165,19 +185,7 @@ where "Failed to create inherent data providers.", ) }) - .ok()?; - - inherent_data_providers - .create_inherent_data() - .map_err(|e| { - tracing::error!( - target: LOG_TARGET, - error = ?e, - "Failed to create inherent data.", - ) - }) .ok() - .map(|d| (d, inherent_data_providers)) } } @@ -196,12 +204,12 @@ where relay_parent: PHash, validation_data: &PersistedValidationData, ) -> Option> { - let (inherent_data, inherent_data_providers) = + let inherent_data_providers = self.inherent_data(parent.hash(), validation_data, relay_parent).await?; let info = SlotInfo::new( inherent_data_providers.slot(), - inherent_data, + Box::new(inherent_data_providers), self.slot_duration.as_duration(), parent.clone(), // Set the block limit to 50% of the maximum PoV size. @@ -216,19 +224,3 @@ where Some(ParachainCandidate { block: res.block, proof: res.storage_proof }) } } - -/// Parameters of [`AuraConsensus::build`]. -pub struct BuildAuraConsensusParams { - pub proposer_factory: PF, - pub create_inherent_data_providers: CIDP, - pub block_import: BI, - pub para_client: Arc, - pub backoff_authoring_blocks: Option, - pub sync_oracle: SO, - pub keystore: SyncCryptoStorePtr, - pub force_authoring: bool, - pub slot_duration: SlotDuration, - pub telemetry: Option, - pub block_proposal_slot_portion: SlotProportion, - pub max_block_proposal_slot_portion: Option, -} diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index dcf105630df..a17a6b1f18a 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -6,31 +6,34 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -async-trait = "0.1.57" +async-trait = "0.1.59" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -dyn-clone = "1.0.9" -futures = "0.3.24" +dyn-clone = "1.0.10" +futures = "0.3.25" +log = "0.4.17" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus +cumulus-primitives-core = { path = "../../../primitives/core" } cumulus-relay-chain-interface = { path = "../../relay-chain-interface" } +cumulus-client-pov-recovery = { path = "../../pov-recovery" } [dev-dependencies] futures-timer = "3.0.2" # Substrate -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Cumulus cumulus-test-client = { path = "../../../test/client" } diff --git a/client/consensus/common/src/level_monitor.rs b/client/consensus/common/src/level_monitor.rs new file mode 100644 index 00000000000..294527f1f9f --- /dev/null +++ b/client/consensus/common/src/level_monitor.rs @@ -0,0 +1,378 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +use sc_client_api::{blockchain::Backend as _, Backend, HeaderBackend as _}; +use sp_blockchain::{HashAndNumber, TreeRoute}; +use sp_runtime::traits::{Block as BlockT, NumberFor, One, Saturating, UniqueSaturatedInto, Zero}; +use std::{ + collections::{HashMap, HashSet}, + sync::Arc, +}; + +/// Value good enough to be used with parachains using the current backend implementation +/// that ships with Substrate. This value may change in the future. +pub const MAX_LEAVES_PER_LEVEL_SENSIBLE_DEFAULT: usize = 32; + +// Counter threshold after which we are going to eventually cleanup our internal data. +const CLEANUP_THRESHOLD: u32 = 32; + +/// Upper bound to the number of leaves allowed for each level of the blockchain. +/// +/// If the limit is set and more leaves are detected on block import, then the older ones are +/// dropped to make space for the fresh blocks. +/// +/// In environments where blocks confirmations from the relay chain may be "slow", then +/// setting an upper bound helps keeping the chain health by dropping old (presumably) stale +/// leaves and prevents discarding new blocks because we've reached the backend max value. +pub enum LevelLimit { + /// Limit set to [`MAX_LEAVES_PER_LEVEL_SENSIBLE_DEFAULT`]. + Default, + /// No explicit limit, however a limit may be implicitly imposed by the backend implementation. + None, + /// Custom value. + Some(usize), +} + +/// Support structure to constrain the number of leaves at each level. +pub struct LevelMonitor { + // Max number of leaves for each level. + level_limit: usize, + // Monotonic counter used to keep track of block freshness. + pub(crate) import_counter: NumberFor, + // Map between blocks hashes and freshness. + pub(crate) freshness: HashMap>, + // Blockchain levels cache. + pub(crate) levels: HashMap, HashSet>, + // Lower level number stored by the levels map. + lowest_level: NumberFor, + // Backend reference to remove blocks on level saturation. + backend: Arc, +} + +/// Contains information about the target scheduled for removal. +struct TargetInfo { + /// Index of freshest leaf in the leaves array. + freshest_leaf_idx: usize, + /// Route from target to its freshest leaf. + freshest_route: TreeRoute, +} + +impl LevelMonitor +where + Block: BlockT, + BE: Backend, +{ + /// Instance a new monitor structure. + pub fn new(level_limit: usize, backend: Arc) -> Self { + let mut monitor = LevelMonitor { + level_limit, + import_counter: Zero::zero(), + freshness: HashMap::new(), + levels: HashMap::new(), + lowest_level: Zero::zero(), + backend, + }; + monitor.restore(); + monitor + } + + /// Restore the structure using the backend. + /// + /// Blocks freshness values are inferred from the height and not from the effective import + /// moment. This is a not accurate but "good-enough" best effort solution. + /// + /// Level limits are not enforced during this phase. + fn restore(&mut self) { + let info = self.backend.blockchain().info(); + log::debug!( + target: "parachain", + "Restoring chain level monitor from last finalized block: {} {}", + info.finalized_number, info.finalized_hash + ); + + self.lowest_level = info.finalized_number; + self.import_counter = info.finalized_number; + self.block_imported(info.finalized_number, info.finalized_hash); + + let mut counter_max = info.finalized_number; + + for leaf in self.backend.blockchain().leaves().unwrap_or_default() { + let route = + sp_blockchain::tree_route(self.backend.blockchain(), info.finalized_hash, leaf) + .expect("Route from finalized to leaf should be available; qed"); + if !route.retracted().is_empty() { + continue + } + route.enacted().iter().for_each(|elem| { + if !self.freshness.contains_key(&elem.hash) { + // Use the block height value as the freshness. + self.import_counter = elem.number; + self.block_imported(elem.number, elem.hash); + } + }); + counter_max = std::cmp::max(self.import_counter, counter_max); + } + + log::debug!(target: "parachain", "Restored chain level monitor up to height {}", counter_max); + + self.import_counter = counter_max; + } + + /// Check and enforce the limit bound at the given height. + /// + /// In practice this will enforce the given height in having a number of blocks less than + /// the limit passed to the constructor. + /// + /// If the given level is found to have a number of blocks greater than or equal the limit + /// then the limit is enforced by chosing one (or more) blocks to remove. + /// + /// The removal strategy is driven by the block freshness. + /// + /// A block freshness is determined by the most recent leaf freshness descending from the block + /// itself. In other words its freshness is equal to its more "fresh" descendant. + /// + /// The least "fresh" blocks are eventually removed. + pub fn enforce_limit(&mut self, number: NumberFor) { + let level_len = self.levels.get(&number).map(|l| l.len()).unwrap_or_default(); + if level_len < self.level_limit { + return + } + + // Sort leaves by freshness only once (less fresh first) and keep track of + // leaves that were invalidated on removal. + let mut leaves = self.backend.blockchain().leaves().unwrap_or_default(); + leaves.sort_unstable_by(|a, b| self.freshness.get(a).cmp(&self.freshness.get(b))); + let mut invalidated_leaves = HashSet::new(); + + // This may not be the most efficient way to remove **multiple** entries, but is the easy + // one :-). Should be considered that in "normal" conditions the number of blocks to remove + // is 0 or 1, it is not worth to complicate the code too much. One condition that may + // trigger multiple removals (2+) is if we restart the node using an existing db and a + // smaller limit wrt the one previously used. + let remove_count = level_len - self.level_limit + 1; + + log::debug!( + target: "parachain", + "Detected leaves overflow at height {number}, removing {remove_count} obsolete blocks", + ); + + (0..remove_count).all(|_| { + self.find_target(number, &leaves, &invalidated_leaves).map_or(false, |target| { + self.remove_target(target, number, &leaves, &mut invalidated_leaves); + true + }) + }); + } + + // Helper function to find the best candidate to be removed. + // + // Given a set of blocks with height equal to `number` (potential candidates) + // 1. For each candidate fetch all the leaves that are descending from it. + // 2. Set the candidate freshness equal to the fresher of its descending leaves. + // 3. The target is set as the candidate that is less fresh. + // + // Input `leaves` are assumed to be already ordered by "freshness" (less fresh first). + // + // Returns the index of the target fresher leaf within `leaves` and the route from target to + // such leaf. + fn find_target( + &self, + number: NumberFor, + leaves: &[Block::Hash], + invalidated_leaves: &HashSet, + ) -> Option> { + let mut target_info: Option> = None; + let blockchain = self.backend.blockchain(); + let best_hash = blockchain.info().best_hash; + + // Leaves that where already assigned to some node and thus can be skipped + // during the search. + let mut assigned_leaves = HashSet::new(); + + let level = self.levels.get(&number)?; + + for blk_hash in level.iter().filter(|hash| **hash != best_hash) { + // Search for the fresher leaf information for this block + let candidate_info = leaves + .iter() + .enumerate() + .filter(|(leaf_idx, _)| { + !assigned_leaves.contains(leaf_idx) && !invalidated_leaves.contains(leaf_idx) + }) + .rev() + .find_map(|(leaf_idx, leaf_hash)| { + if blk_hash == leaf_hash { + let entry = HashAndNumber { number, hash: *blk_hash }; + TreeRoute::new(vec![entry], 0).ok().map(|freshest_route| TargetInfo { + freshest_leaf_idx: leaf_idx, + freshest_route, + }) + } else { + match sp_blockchain::tree_route(blockchain, *blk_hash, *leaf_hash) { + Ok(route) if route.retracted().is_empty() => Some(TargetInfo { + freshest_leaf_idx: leaf_idx, + freshest_route: route, + }), + Err(err) => { + log::warn!( + target: "parachain", + "(Lookup) Unable getting route from {:?} to {:?}: {}", + blk_hash, leaf_hash, err, + ); + None + }, + _ => None, + } + } + }); + + let candidate_info = match candidate_info { + Some(candidate_info) => { + assigned_leaves.insert(candidate_info.freshest_leaf_idx); + candidate_info + }, + None => { + // This should never happen + log::error!( + target: "parachain", + "Unable getting route to any leaf from {:?} (this is a bug)", + blk_hash, + ); + continue + }, + }; + + // Found fresher leaf for this candidate. + // This candidate is set as the new target if: + // 1. its fresher leaf is less fresh than the previous target fresher leaf AND + // 2. best block is not in its route + + let is_less_fresh = || { + target_info + .as_ref() + .map(|ti| candidate_info.freshest_leaf_idx < ti.freshest_leaf_idx) + .unwrap_or(true) + }; + let not_contains_best = || { + candidate_info + .freshest_route + .enacted() + .iter() + .all(|entry| entry.hash != best_hash) + }; + + if is_less_fresh() && not_contains_best() { + let early_stop = candidate_info.freshest_leaf_idx == 0; + target_info = Some(candidate_info); + if early_stop { + // We will never find a candidate with an worst freshest leaf than this. + break + } + } + } + + target_info + } + + // Remove the target block and all its descendants. + // + // Leaves should have already been ordered by "freshness" (less fresh first). + fn remove_target( + &mut self, + target: TargetInfo, + number: NumberFor, + leaves: &[Block::Hash], + invalidated_leaves: &mut HashSet, + ) { + let mut remove_leaf = |number, hash| { + log::debug!(target: "parachain", "Removing block (@{}) {:?}", number, hash); + if let Err(err) = self.backend.remove_leaf_block(hash) { + log::debug!(target: "parachain", "Remove not possible for {}: {}", hash, err); + return false + } + self.levels.get_mut(&number).map(|level| level.remove(&hash)); + self.freshness.remove(&hash); + true + }; + + invalidated_leaves.insert(target.freshest_leaf_idx); + + // Takes care of route removal. Starts from the leaf and stops as soon as an error is + // encountered. In this case an error is interpreted as the block being not a leaf + // and it will be removed while removing another route from the same block but to a + // different leaf. + let mut remove_route = |route: TreeRoute| { + route.enacted().iter().rev().all(|elem| remove_leaf(elem.number, elem.hash)); + }; + + let target_hash = target.freshest_route.common_block().hash; + debug_assert_eq!( + target.freshest_route.common_block().number, + number, + "This is a bug in LevelMonitor::find_target() or the Backend is corrupted" + ); + + // Remove freshest (cached) route first. + remove_route(target.freshest_route); + + // Don't bother trying with leaves we already found to not be our descendants. + let to_skip = leaves.len() - target.freshest_leaf_idx; + leaves.iter().enumerate().rev().skip(to_skip).for_each(|(leaf_idx, leaf_hash)| { + if invalidated_leaves.contains(&leaf_idx) { + return + } + match sp_blockchain::tree_route(self.backend.blockchain(), target_hash, *leaf_hash) { + Ok(route) if route.retracted().is_empty() => { + invalidated_leaves.insert(leaf_idx); + remove_route(route); + }, + Err(err) => { + log::warn!( + target: "parachain", + "(Removal) unable getting route from {:?} to {:?}: {}", + target_hash, leaf_hash, err, + ); + }, + _ => (), + }; + }); + + remove_leaf(number, target_hash); + } + + /// Add a new imported block information to the monitor. + pub fn block_imported(&mut self, number: NumberFor, hash: Block::Hash) { + self.freshness.insert(hash, self.import_counter); + self.levels.entry(number).or_default().insert(hash); + self.import_counter += One::one(); + + // Do cleanup once in a while, we are allowed to have some obsolete information. + let finalized_num = self.backend.blockchain().info().finalized_number; + let delta: u32 = finalized_num.saturating_sub(self.lowest_level).unique_saturated_into(); + if delta >= CLEANUP_THRESHOLD { + for i in 0..delta { + let number = self.lowest_level + i.unique_saturated_into(); + self.levels.remove(&number).map(|level| { + level.iter().for_each(|hash| { + self.freshness.remove(hash); + }) + }); + } + + self.lowest_level = finalized_num; + } + } +} diff --git a/client/consensus/common/src/lib.rs b/client/consensus/common/src/lib.rs index 61098dfd434..39119f345c2 100644 --- a/client/consensus/common/src/lib.rs +++ b/client/consensus/common/src/lib.rs @@ -15,14 +15,23 @@ // along with Cumulus. If not, see . use polkadot_primitives::v2::{Hash as PHash, PersistedValidationData}; -use sc_consensus::BlockImport; -use sp_runtime::traits::Block as BlockT; +use sc_client_api::Backend; +use sc_consensus::{shared_data::SharedData, BlockImport, ImportResult}; +use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; + +use std::sync::Arc; + +mod level_monitor; mod parachain_consensus; #[cfg(test)] mod tests; + pub use parachain_consensus::run_parachain_consensus; +use level_monitor::LevelMonitor; +pub use level_monitor::{LevelLimit, MAX_LEAVES_PER_LEVEL_SENSIBLE_DEFAULT}; + /// The result of [`ParachainConsensus::produce_candidate`]. pub struct ParachainCandidate { /// The block that was built for this candidate. @@ -74,41 +83,93 @@ impl ParachainConsensus for Box + Send + /// This is used to set `block_import_params.fork_choice` to `false` as long as the block origin is /// not `NetworkInitialSync`. The best block for parachains is determined by the relay chain. Meaning /// we will update the best block, as it is included by the relay-chain. -pub struct ParachainBlockImport(I); +pub struct ParachainBlockImport { + inner: BI, + monitor: Option>>, +} -impl ParachainBlockImport { +impl> ParachainBlockImport { /// Create a new instance. - pub fn new(inner: I) -> Self { - Self(inner) + /// + /// The number of leaves per level limit is set to `LevelLimit::Default`. + pub fn new(inner: BI, backend: Arc) -> Self { + Self::new_with_limit(inner, backend, LevelLimit::Default) + } + + /// Create a new instance with an explicit limit to the number of leaves per level. + /// + /// This function alone doesn't enforce the limit on levels for old imported blocks, + /// the limit is eventually enforced only when new blocks are imported. + pub fn new_with_limit(inner: BI, backend: Arc, level_leaves_max: LevelLimit) -> Self { + let level_limit = match level_leaves_max { + LevelLimit::None => None, + LevelLimit::Some(limit) => Some(limit), + LevelLimit::Default => Some(MAX_LEAVES_PER_LEVEL_SENSIBLE_DEFAULT), + }; + + let monitor = + level_limit.map(|level_limit| SharedData::new(LevelMonitor::new(level_limit, backend))); + + Self { inner, monitor } + } +} + +impl Clone for ParachainBlockImport { + fn clone(&self) -> Self { + ParachainBlockImport { inner: self.inner.clone(), monitor: self.monitor.clone() } } } #[async_trait::async_trait] -impl BlockImport for ParachainBlockImport +impl BlockImport for ParachainBlockImport where Block: BlockT, - I: BlockImport + Send, + BI: BlockImport + Send, + BE: Backend, { - type Error = I::Error; - type Transaction = I::Transaction; + type Error = BI::Error; + type Transaction = BI::Transaction; async fn check_block( &mut self, block: sc_consensus::BlockCheckParams, ) -> Result { - self.0.check_block(block).await + self.inner.check_block(block).await } async fn import_block( &mut self, - mut block_import_params: sc_consensus::BlockImportParams, + mut params: sc_consensus::BlockImportParams, cache: std::collections::HashMap>, ) -> Result { + // Blocks are stored within the backend by using POST hash. + let hash = params.post_hash(); + let number = *params.header.number(); + // Best block is determined by the relay chain, or if we are doing the initial sync // we import all blocks as new best. - block_import_params.fork_choice = Some(sc_consensus::ForkChoiceStrategy::Custom( - block_import_params.origin == sp_consensus::BlockOrigin::NetworkInitialSync, + params.fork_choice = Some(sc_consensus::ForkChoiceStrategy::Custom( + params.origin == sp_consensus::BlockOrigin::NetworkInitialSync, )); - self.0.import_block(block_import_params, cache).await + + let maybe_lock = self.monitor.as_ref().map(|monitor_lock| { + let mut monitor = monitor_lock.shared_data_locked(); + monitor.enforce_limit(number); + monitor.release_mutex() + }); + + let res = self.inner.import_block(params, cache).await?; + + if let (Some(mut monitor_lock), ImportResult::Imported(_)) = (maybe_lock, &res) { + let mut monitor = monitor_lock.upgrade(); + monitor.block_imported(number, hash); + } + + Ok(res) } } + +/// Marker trait denoting a block import type that fits the parachain requirements. +pub trait ParachainBlockImportMarker {} + +impl ParachainBlockImportMarker for ParachainBlockImport {} diff --git a/client/consensus/common/src/parachain_consensus.rs b/client/consensus/common/src/parachain_consensus.rs index ccdfb17b671..ffbbab5a200 100644 --- a/client/consensus/common/src/parachain_consensus.rs +++ b/client/consensus/common/src/parachain_consensus.rs @@ -15,7 +15,6 @@ // along with Cumulus. If not, see . use async_trait::async_trait; -use cumulus_relay_chain_interface::{RelayChainInterface, RelayChainResult}; use sc_client_api::{ Backend, BlockBackend, BlockImportNotification, BlockchainEvents, Finalizer, UsageProvider, }; @@ -27,15 +26,25 @@ use sp_runtime::{ traits::{Block as BlockT, Header as HeaderT}, }; +use cumulus_client_pov_recovery::{RecoveryDelay, RecoveryKind, RecoveryRequest}; +use cumulus_relay_chain_interface::{RelayChainInterface, RelayChainResult}; + use polkadot_primitives::v2::{Hash as PHash, Id as ParaId, OccupiedCoreAssumption}; use codec::Decode; -use futures::{select, FutureExt, Stream, StreamExt}; +use futures::{channel::mpsc::Sender, select, FutureExt, Stream, StreamExt}; -use std::{pin::Pin, sync::Arc}; +use std::{pin::Pin, sync::Arc, time::Duration}; const LOG_TARGET: &str = "cumulus-consensus"; +// Delay range to trigger explicit requests. +// The chosen value doesn't have any special meaning, a random delay within the order of +// seconds in practice should be a good enough to allow a quick recovery without DOSing +// the relay chain. +const RECOVERY_DELAY: RecoveryDelay = + RecoveryDelay { min: Duration::ZERO, max: Duration::from_secs(30) }; + /// Helper for the relay chain client. This is expected to be a lightweight handle like an `Arc`. #[async_trait] pub trait RelaychainClient: Clone + 'static { @@ -82,7 +91,7 @@ where let finalized_head = if let Some(h) = finalized_heads.next().await { h } else { - tracing::debug!(target: "cumulus-consensus", "Stopping following finalized head."); + tracing::debug!(target: LOG_TARGET, "Stopping following finalized head."); return }; @@ -90,7 +99,7 @@ where Ok(header) => header, Err(err) => { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, error = ?err, "Could not decode parachain header while following finalized heads.", ); @@ -102,15 +111,15 @@ where // don't finalize the same block multiple times. if parachain.usage_info().chain.finalized_hash != hash { - if let Err(e) = parachain.finalize_block(BlockId::hash(hash), None, true) { + if let Err(e) = parachain.finalize_block(hash, None, true) { match e { ClientError::UnknownBlock(_) => tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, block_hash = ?hash, "Could not finalize block because it is unknown.", ), _ => tracing::warn!( - target: "cumulus-consensus", + target: LOG_TARGET, error = ?e, block_hash = ?hash, "Failed to finalize block", @@ -136,6 +145,7 @@ pub async fn run_parachain_consensus( parachain: Arc

, relay_chain: R, announce_block: Arc>) + Send + Sync>, + recovery_chan_tx: Option>>, ) where Block: BlockT, P: Finalizer @@ -148,8 +158,13 @@ pub async fn run_parachain_consensus( R: RelaychainClient, B: Backend, { - let follow_new_best = - follow_new_best(para_id, parachain.clone(), relay_chain.clone(), announce_block); + let follow_new_best = follow_new_best( + para_id, + parachain.clone(), + relay_chain.clone(), + announce_block, + recovery_chan_tx, + ); let follow_finalized_head = follow_finalized_head(para_id, parachain, relay_chain); select! { _ = follow_new_best.fuse() => {}, @@ -163,6 +178,7 @@ async fn follow_new_best( parachain: Arc

, relay_chain: R, announce_block: Arc>) + Send + Sync>, + recovery_chan_tx: Option>>, ) where Block: BlockT, P: Finalizer @@ -197,10 +213,11 @@ async fn follow_new_best( h, &*parachain, &mut unset_best_header, + recovery_chan_tx.clone(), ).await, None => { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, "Stopping following new best.", ); return @@ -217,7 +234,7 @@ async fn follow_new_best( ).await, None => { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, "Stopping following imported blocks.", ); return @@ -276,7 +293,7 @@ async fn handle_new_block_imported( import_block_as_new_best(unset_hash, unset_best_header, parachain).await; }, state => tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, ?unset_best_header, ?notification.header, ?state, @@ -290,6 +307,7 @@ async fn handle_new_best_parachain_head( head: Vec, parachain: &P, unset_best_header: &mut Option, + mut recovery_chan_tx: Option>>, ) where Block: BlockT, P: UsageProvider + Send + Sync + BlockBackend, @@ -299,7 +317,7 @@ async fn handle_new_best_parachain_head( Ok(header) => header, Err(err) => { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, error = ?err, "Could not decode Parachain header while following best heads.", ); @@ -311,7 +329,7 @@ async fn handle_new_best_parachain_head( if parachain.usage_info().chain.best_hash == hash { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, block_hash = ?hash, "Skipping set new best block, because block is already the best.", ) @@ -325,7 +343,7 @@ async fn handle_new_best_parachain_head( }, Ok(BlockStatus::InChainPruned) => { tracing::error!( - target: "cumulus-collator", + target: LOG_TARGET, block_hash = ?hash, "Trying to set pruned block as new best!", ); @@ -334,14 +352,30 @@ async fn handle_new_best_parachain_head( *unset_best_header = Some(parachain_head); tracing::debug!( - target: "cumulus-collator", + target: LOG_TARGET, block_hash = ?hash, "Parachain block not yet imported, waiting for import to enact as best block.", ); + + if let Some(ref mut recovery_chan_tx) = recovery_chan_tx { + // Best effort channel to actively encourage block recovery. + // An error here is not fatal; the relay chain continuously re-announces + // the best block, thus we will have other opportunities to retry. + let req = + RecoveryRequest { hash, delay: RECOVERY_DELAY, kind: RecoveryKind::Full }; + if let Err(err) = recovery_chan_tx.try_send(req) { + tracing::warn!( + target: LOG_TARGET, + block_hash = ?hash, + error = ?err, + "Unable to notify block recovery subsystem" + ) + } + } }, Err(e) => { tracing::error!( - target: "cumulus-collator", + target: LOG_TARGET, block_hash = ?hash, error = ?e, "Failed to get block status of block.", @@ -361,7 +395,7 @@ where let best_number = parachain.usage_info().chain.best_number; if *header.number() < best_number { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, %best_number, block_number = %header.number(), "Skipping importing block as new best block, because there already exists a \ @@ -377,7 +411,7 @@ where if let Err(err) = (&*parachain).import_block(block_import_params, Default::default()).await { tracing::warn!( - target: "cumulus-consensus", + target: LOG_TARGET, block_hash = ?hash, error = ?err, "Failed to set new best block.", diff --git a/client/consensus/common/src/tests.rs b/client/consensus/common/src/tests.rs index 23729abebb4..92cecc37d29 100644 --- a/client/consensus/common/src/tests.rs +++ b/client/consensus/common/src/tests.rs @@ -18,6 +18,7 @@ use crate::*; use async_trait::async_trait; use codec::Encode; +use cumulus_client_pov_recovery::RecoveryKind; use cumulus_relay_chain_interface::RelayChainResult; use cumulus_test_client::{ runtime::{Block, Header}, @@ -26,10 +27,10 @@ use cumulus_test_client::{ use futures::{channel::mpsc, executor::block_on, select, FutureExt, Stream, StreamExt}; use futures_timer::Delay; use polkadot_primitives::v2::Id as ParaId; -use sc_client_api::UsageProvider; +use sc_client_api::{blockchain::Backend as _, Backend as _, UsageProvider}; use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy}; use sp_blockchain::Error as ClientError; -use sp_consensus::BlockOrigin; +use sp_consensus::{BlockOrigin, BlockStatus}; use sp_runtime::generic::BlockId; use std::{ sync::{Arc, Mutex}, @@ -103,21 +104,82 @@ impl crate::parachain_consensus::RelaychainClient for Relaychain { } } -fn build_and_import_block(mut client: Arc, import_as_best: bool) -> Block { - let builder = client.init_block_builder(None, Default::default()); +fn build_block( + builder: &B, + at: Option>, + timestamp: Option, +) -> Block { + let builder = match at { + Some(at) => match timestamp { + Some(ts) => + builder.init_block_builder_with_timestamp(&at, None, Default::default(), ts), + None => builder.init_block_builder_at(&at, None, Default::default()), + }, + None => builder.init_block_builder(None, Default::default()), + }; + + let mut block = builder.build().unwrap().block; - let block = builder.build().unwrap().block; - let (header, body) = block.clone().deconstruct(); + // Simulate some form of post activity (like a Seal or Other generic things). + // This is mostly used to excercise the `LevelMonitor` correct behavior. + // (in practice we want that header post-hash != pre-hash) + block.header.digest.push(sp_runtime::DigestItem::Other(vec![1, 2, 3])); - let mut block_import_params = BlockImportParams::new(BlockOrigin::Own, header); + block +} + +async fn import_block>( + importer: &mut I, + block: Block, + origin: BlockOrigin, + import_as_best: bool, +) { + let (mut header, body) = block.deconstruct(); + + let post_digest = + header.digest.pop().expect("post digested is present in manually crafted block"); + + let mut block_import_params = BlockImportParams::new(origin, header); block_import_params.fork_choice = Some(ForkChoiceStrategy::Custom(import_as_best)); block_import_params.body = Some(body); + block_import_params.post_digests.push(post_digest); - block_on(client.import_block(block_import_params, Default::default())).unwrap(); + importer.import_block(block_import_params, Default::default()).await.unwrap(); +} +fn import_block_sync>( + importer: &mut I, + block: Block, + origin: BlockOrigin, + import_as_best: bool, +) { + block_on(import_block(importer, block, origin, import_as_best)); +} + +fn build_and_import_block_ext>( + builder: &B, + origin: BlockOrigin, + import_as_best: bool, + importer: &mut I, + at: Option>, + timestamp: Option, +) -> Block { + let block = build_block(builder, at, timestamp); + import_block_sync(importer, block.clone(), origin, import_as_best); block } +fn build_and_import_block(mut client: Arc, import_as_best: bool) -> Block { + build_and_import_block_ext( + &*client.clone(), + BlockOrigin::Own, + import_as_best, + &mut client, + None, + None, + ) +} + #[test] fn follow_new_best_works() { sp_tracing::try_init_simple(); @@ -129,7 +191,7 @@ fn follow_new_best_works() { let new_best_heads_sender = relay_chain.inner.lock().unwrap().new_best_heads_sender.clone(); let consensus = - run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {})); + run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {}), None); let work = async move { new_best_heads_sender.unbounded_send(block.header().clone()).unwrap(); @@ -152,6 +214,68 @@ fn follow_new_best_works() { }); } +#[test] +fn follow_new_best_with_dummy_recovery_works() { + sp_tracing::try_init_simple(); + + let client = Arc::new(TestClientBuilder::default().build()); + + let relay_chain = Relaychain::new(); + let new_best_heads_sender = relay_chain.inner.lock().unwrap().new_best_heads_sender.clone(); + + let (recovery_chan_tx, mut recovery_chan_rx) = futures::channel::mpsc::channel(3); + + let consensus = run_parachain_consensus( + 100.into(), + client.clone(), + relay_chain, + Arc::new(|_, _| {}), + Some(recovery_chan_tx), + ); + + let block = build_block(&*client.clone(), None, None); + let block_clone = block.clone(); + let client_clone = client.clone(); + + let work = async move { + new_best_heads_sender.unbounded_send(block.header().clone()).unwrap(); + loop { + Delay::new(Duration::from_millis(100)).await; + match client.block_status(&BlockId::Hash(block.hash())).unwrap() { + BlockStatus::Unknown => {}, + status => { + assert_eq!(block.hash(), client.usage_info().chain.best_hash); + assert_eq!(status, BlockStatus::InChainWithState); + break + }, + } + } + }; + + let dummy_block_recovery = async move { + loop { + if let Some(req) = recovery_chan_rx.next().await { + assert_eq!(req.hash, block_clone.hash()); + assert_eq!(req.kind, RecoveryKind::Full); + Delay::new(Duration::from_millis(500)).await; + import_block(&mut &*client_clone, block_clone.clone(), BlockOrigin::Own, true) + .await; + } + } + }; + + block_on(async move { + futures::pin_mut!(consensus); + futures::pin_mut!(work); + + select! { + r = consensus.fuse() => panic!("Consensus should not end: {:?}", r), + _ = dummy_block_recovery.fuse() => {}, + _ = work.fuse() => {}, + } + }); +} + #[test] fn follow_finalized_works() { sp_tracing::try_init_simple(); @@ -163,7 +287,7 @@ fn follow_finalized_works() { let finalized_sender = relay_chain.inner.lock().unwrap().finalized_heads_sender.clone(); let consensus = - run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {})); + run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {}), None); let work = async move { finalized_sender.unbounded_send(block.header().clone()).unwrap(); @@ -204,7 +328,7 @@ fn follow_finalized_does_not_stop_on_unknown_block() { let finalized_sender = relay_chain.inner.lock().unwrap().finalized_heads_sender.clone(); let consensus = - run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {})); + run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {}), None); let work = async move { for _ in 0..3usize { @@ -254,7 +378,7 @@ fn follow_new_best_sets_best_after_it_is_imported() { let new_best_heads_sender = relay_chain.inner.lock().unwrap().new_best_heads_sender.clone(); let consensus = - run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {})); + run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {}), None); let work = async move { new_best_heads_sender.unbounded_send(block.header().clone()).unwrap(); @@ -331,7 +455,7 @@ fn do_not_set_best_block_to_older_block() { let new_best_heads_sender = relay_chain.inner.lock().unwrap().new_best_heads_sender.clone(); let consensus = - run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {})); + run_parachain_consensus(100.into(), client.clone(), relay_chain, Arc::new(|_, _| {}), None); let client2 = client.clone(); let work = async move { @@ -355,3 +479,216 @@ fn do_not_set_best_block_to_older_block() { // Build and import a new best block. build_and_import_block(client2.clone(), true); } + +#[test] +fn prune_blocks_on_level_overflow() { + // Here we are using the timestamp value to generate blocks with different hashes. + const LEVEL_LIMIT: usize = 3; + const TIMESTAMP_MULTIPLIER: u64 = 60000; + + let backend = Arc::new(Backend::new_test(1000, 3)); + let client = Arc::new(TestClientBuilder::with_backend(backend.clone()).build()); + let mut para_import = ParachainBlockImport::new_with_limit( + client.clone(), + backend.clone(), + LevelLimit::Some(LEVEL_LIMIT), + ); + + let block0 = build_and_import_block_ext( + &*client, + BlockOrigin::NetworkInitialSync, + true, + &mut para_import, + None, + None, + ); + let id0 = BlockId::Hash(block0.header.hash()); + + let blocks1 = (0..LEVEL_LIMIT) + .into_iter() + .map(|i| { + build_and_import_block_ext( + &*client, + if i == 1 { BlockOrigin::NetworkInitialSync } else { BlockOrigin::Own }, + i == 1, + &mut para_import, + Some(id0), + Some(i as u64 * TIMESTAMP_MULTIPLIER), + ) + }) + .collect::>(); + let id10 = BlockId::Hash(blocks1[0].header.hash()); + + let blocks2 = (0..2) + .into_iter() + .map(|i| { + build_and_import_block_ext( + &*client, + BlockOrigin::Own, + false, + &mut para_import, + Some(id10), + Some(i as u64 * TIMESTAMP_MULTIPLIER), + ) + }) + .collect::>(); + + // Initial scenario (with B11 imported as best) + // + // B0 --+-- B10 --+-- B20 + // +-- B11 +-- B21 + // +-- B12 + + let leaves = backend.blockchain().leaves().unwrap(); + let mut expected = vec![ + blocks2[0].header.hash(), + blocks2[1].header.hash(), + blocks1[1].header.hash(), + blocks1[2].header.hash(), + ]; + assert_eq!(leaves, expected); + let best = client.usage_info().chain.best_hash; + assert_eq!(best, blocks1[1].header.hash()); + + let block13 = build_and_import_block_ext( + &*client, + BlockOrigin::Own, + false, + &mut para_import, + Some(id0), + Some(LEVEL_LIMIT as u64 * TIMESTAMP_MULTIPLIER), + ); + + // Expected scenario + // + // B0 --+-- B10 --+-- B20 + // +-- B11 +-- B21 + // +--(B13) <-- B12 has been replaced + + let leaves = backend.blockchain().leaves().unwrap(); + expected[3] = block13.header.hash(); + assert_eq!(leaves, expected); + + let block14 = build_and_import_block_ext( + &*client, + BlockOrigin::Own, + false, + &mut para_import, + Some(id0), + Some(2 * LEVEL_LIMIT as u64 * TIMESTAMP_MULTIPLIER), + ); + + // Expected scenario + // + // B0 --+--(B14) <-- B10 has been replaced + // +-- B11 + // +--(B13) + + let leaves = backend.blockchain().leaves().unwrap(); + expected.remove(0); + expected.remove(0); + expected.push(block14.header.hash()); + assert_eq!(leaves, expected); +} + +#[test] +fn restore_limit_monitor() { + // Here we are using the timestamp value to generate blocks with different hashes. + const LEVEL_LIMIT: usize = 2; + const TIMESTAMP_MULTIPLIER: u64 = 60000; + + let backend = Arc::new(Backend::new_test(1000, 3)); + let client = Arc::new(TestClientBuilder::with_backend(backend.clone()).build()); + + // Start with a block import not enforcing any limit... + let mut para_import = ParachainBlockImport::new_with_limit( + client.clone(), + backend.clone(), + LevelLimit::Some(usize::MAX), + ); + + let block00 = build_and_import_block_ext( + &*client, + BlockOrigin::NetworkInitialSync, + true, + &mut para_import, + None, + None, + ); + let id00 = BlockId::Hash(block00.header.hash()); + + let blocks1 = (0..LEVEL_LIMIT + 1) + .into_iter() + .map(|i| { + build_and_import_block_ext( + &*client, + if i == 1 { BlockOrigin::NetworkInitialSync } else { BlockOrigin::Own }, + i == 1, + &mut para_import, + Some(id00), + Some(i as u64 * TIMESTAMP_MULTIPLIER), + ) + }) + .collect::>(); + let id10 = BlockId::Hash(blocks1[0].header.hash()); + + let _ = (0..LEVEL_LIMIT) + .into_iter() + .map(|i| { + build_and_import_block_ext( + &*client, + BlockOrigin::Own, + false, + &mut para_import, + Some(id10), + Some(i as u64 * TIMESTAMP_MULTIPLIER), + ) + }) + .collect::>(); + + // Scenario before limit application (with B11 imported as best) + // Import order (freshess): B00, B10, B11, B12, B20, B21 + // + // B00 --+-- B10 --+-- B20 + // | +-- B21 + // +-- B11 + // | + // +-- B12 + + // Simulate a restart by forcing a new monitor structure instance + + let mut para_import = ParachainBlockImport::new_with_limit( + client.clone(), + backend.clone(), + LevelLimit::Some(LEVEL_LIMIT), + ); + + let block13 = build_and_import_block_ext( + &*client, + BlockOrigin::Own, + false, + &mut para_import, + Some(id00), + Some(LEVEL_LIMIT as u64 * TIMESTAMP_MULTIPLIER), + ); + + // Expected scenario + // + // B0 --+-- B11 + // +--(B13) + + let leaves = backend.blockchain().leaves().unwrap(); + let expected = vec![blocks1[1].header.hash(), block13.header.hash()]; + assert_eq!(leaves, expected); + + let monitor = para_import.monitor.unwrap(); + let monitor = monitor.shared_data(); + assert_eq!(monitor.import_counter, 5); + assert!(monitor.levels.iter().all(|(number, hashes)| { + hashes + .iter() + .filter(|hash| **hash != block13.header.hash()) + .all(|hash| *number == *monitor.freshness.get(hash).unwrap()) + })); + assert_eq!(*monitor.freshness.get(&block13.header.hash()).unwrap(), monitor.import_counter - 1); +} diff --git a/client/consensus/relay-chain/Cargo.toml b/client/consensus/relay-chain/Cargo.toml index 0f5fdb96ac2..a54ac9b8d1f 100644 --- a/client/consensus/relay-chain/Cargo.toml +++ b/client/consensus/relay-chain/Cargo.toml @@ -6,21 +6,21 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -async-trait = "0.1.57" -futures = "0.3.24" +async-trait = "0.1.59" +futures = "0.3.25" parking_lot = "0.12.1" tracing = "0.1.37" # Substrate -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Cumulus cumulus-client-consensus-common = { path = "../common" } diff --git a/client/consensus/relay-chain/src/import_queue.rs b/client/consensus/relay-chain/src/import_queue.rs index 3792a9c04bb..31004c0005e 100644 --- a/client/consensus/relay-chain/src/import_queue.rs +++ b/client/consensus/relay-chain/src/import_queue.rs @@ -16,6 +16,8 @@ use std::{marker::PhantomData, sync::Arc}; +use cumulus_client_consensus_common::ParachainBlockImportMarker; + use sc_consensus::{ import_queue::{BasicQueue, Verifier as VerifierT}, BlockImport, BlockImportParams, @@ -63,8 +65,10 @@ where .await .map_err(|e| e.to_string())?; - let inherent_data = - inherent_data_providers.create_inherent_data().map_err(|e| format!("{:?}", e))?; + let inherent_data = inherent_data_providers + .create_inherent_data() + .await + .map_err(|e| format!("{:?}", e))?; let block = Block::new(block_params.header.clone(), inner_body); @@ -109,7 +113,11 @@ pub fn import_queue( registry: Option<&substrate_prometheus_endpoint::Registry>, ) -> ClientResult> where - I: BlockImport + Send + Sync + 'static, + I: BlockImport + + ParachainBlockImportMarker + + Send + + Sync + + 'static, I::Transaction: Send, Client: ProvideRuntimeApi + Send + Sync + 'static, >::Api: BlockBuilderApi, @@ -117,11 +125,5 @@ where { let verifier = Verifier::new(client, create_inherent_data_providers); - Ok(BasicQueue::new( - verifier, - Box::new(cumulus_client_consensus_common::ParachainBlockImport::new(block_import)), - None, - spawner, - registry, - )) + Ok(BasicQueue::new(verifier, Box::new(block_import), None, spawner, registry)) } diff --git a/client/consensus/relay-chain/src/lib.rs b/client/consensus/relay-chain/src/lib.rs index 20d3b7cc757..4cd0ab24beb 100644 --- a/client/consensus/relay-chain/src/lib.rs +++ b/client/consensus/relay-chain/src/lib.rs @@ -34,11 +34,10 @@ //! 5. After the parachain candidate got backed and included, all collators start at 1. use cumulus_client_consensus_common::{ - ParachainBlockImport, ParachainCandidate, ParachainConsensus, + ParachainBlockImportMarker, ParachainCandidate, ParachainConsensus, }; use cumulus_primitives_core::{relay_chain::v2::Hash as PHash, ParaId, PersistedValidationData}; use cumulus_relay_chain_interface::RelayChainInterface; -use parking_lot::Mutex; use sc_consensus::{BlockImport, BlockImportParams}; use sp_consensus::{ @@ -46,6 +45,8 @@ use sp_consensus::{ }; use sp_inherents::{CreateInherentDataProviders, InherentData, InherentDataProvider}; use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; + +use parking_lot::Mutex; use std::{marker::PhantomData, sync::Arc, time::Duration}; mod import_queue; @@ -56,11 +57,11 @@ const LOG_TARGET: &str = "cumulus-consensus-relay-chain"; /// The implementation of the relay-chain provided consensus for parachains. pub struct RelayChainConsensus { para_id: ParaId, - _phantom: PhantomData, proposer_factory: Arc>, create_inherent_data_providers: Arc, - block_import: Arc>>, + block_import: Arc>, relay_chain_interface: RCInterface, + _phantom: PhantomData, } impl Clone for RelayChainConsensus @@ -70,11 +71,11 @@ where fn clone(&self) -> Self { Self { para_id: self.para_id, - _phantom: PhantomData, proposer_factory: self.proposer_factory.clone(), create_inherent_data_providers: self.create_inherent_data_providers.clone(), block_import: self.block_import.clone(), relay_chain_interface: self.relay_chain_interface.clone(), + _phantom: PhantomData, } } } @@ -82,6 +83,7 @@ where impl RelayChainConsensus where B: BlockT, + BI: ParachainBlockImportMarker, RCInterface: RelayChainInterface, CIDP: CreateInherentDataProviders, { @@ -97,9 +99,7 @@ where para_id, proposer_factory: Arc::new(Mutex::new(proposer_factory)), create_inherent_data_providers: Arc::new(create_inherent_data_providers), - block_import: Arc::new(futures::lock::Mutex::new(ParachainBlockImport::new( - block_import, - ))), + block_import: Arc::new(futures::lock::Mutex::new(block_import)), relay_chain_interface, _phantom: PhantomData, } @@ -127,6 +127,7 @@ where inherent_data_providers .create_inherent_data() + .await .map_err(|e| { tracing::error!( target: LOG_TARGET, @@ -144,7 +145,7 @@ impl ParachainConsensus where B: BlockT, RCInterface: RelayChainInterface + Clone, - BI: BlockImport + Send + Sync, + BI: BlockImport + ParachainBlockImportMarker + Send + Sync, PF: Environment + Send + Sync, PF::Proposer: Proposer< B, @@ -247,7 +248,7 @@ where ProofRecording = EnableProofRecording, Proof = ::Proof, >, - BI: BlockImport + Send + Sync + 'static, + BI: BlockImport + ParachainBlockImportMarker + Send + Sync + 'static, CIDP: CreateInherentDataProviders + 'static, RCInterface: RelayChainInterface + Clone + 'static, { diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index a37c8874f03..e98789d17a0 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -6,47 +6,47 @@ description = "Cumulus-specific networking protocol" edition = "2021" [dependencies] -async-trait = "0.1.57" +async-trait = "0.1.59" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -futures = "0.3.24" +futures = "0.3.25" futures-timer = "3.0.2" parking_lot = "0.12.1" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] portpicker = "0.1.1" -tokio = { version = "1.21.2", features = ["macros"] } +tokio = { version = "1.23.0", features = ["macros"] } url = "2.3.1" # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/network/tests/sync_blocks_from_tip_without_connected_collator.rs b/client/network/tests/sync_blocks_from_tip_without_connected_collator.rs deleted file mode 100644 index 6b4f17bc528..00000000000 --- a/client/network/tests/sync_blocks_from_tip_without_connected_collator.rs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -use cumulus_primitives_core::ParaId; -use cumulus_test_service::{initial_head_data, run_relay_chain_validator_node, Keyring::*}; -use futures::join; - -#[substrate_test_utils::test(flavor = "multi_thread")] -#[ignore] -async fn sync_blocks_from_tip_without_being_connected_to_a_collator() { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_colors(false); - let _ = builder.init(); - - let para_id = ParaId::from(100); - let tokio_handle = tokio::runtime::Handle::current(); - - let ws_port = portpicker::pick_unused_port().expect("No free ports"); - // start alice - let alice = run_relay_chain_validator_node( - tokio_handle.clone(), - Alice, - || {}, - Vec::new(), - Some(ws_port), - ); - - // start bob - let bob = run_relay_chain_validator_node( - tokio_handle.clone(), - Bob, - || {}, - vec![alice.addr.clone()], - None, - ); - - // register parachain - alice - .register_parachain( - para_id, - cumulus_test_service::runtime::WASM_BINARY - .expect("You need to build the WASM binary to run this test!") - .to_vec(), - initial_head_data(para_id), - ) - .await - .unwrap(); - - // run charlie as parachain collator - let charlie = - cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Charlie) - .enable_collator() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // run dave as parachain full node - let dave = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Dave) - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // run eve as parachain full node that is only connected to dave - let eve = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Eve) - .connect_to_parachain_node(&dave) - .exclusively_connect_to_registered_parachain_nodes() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // run eve as parachain full node that is only connected to dave - let ferdie = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, Ferdie) - .connect_to_parachain_node(&dave) - .exclusively_connect_to_registered_parachain_nodes() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .use_external_relay_chain_node_at_port(ws_port) - .build() - .await; - - join!(ferdie.wait_for_blocks(7), eve.wait_for_blocks(7)); -} diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index b61cecfe416..39863bdd695 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -7,36 +7,36 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -futures = "0.3.24" +futures = "0.3.25" futures-timer = "3.0.2" rand = "0.8.5" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = {path = "../relay-chain-interface"} [dev-dependencies] -tokio = { version = "1.21.2", features = ["macros"] } +tokio = { version = "1.23.0", features = ["macros"] } portpicker = "0.1.1" # Cumulus cumulus-test-service = { path = "../../test/service" } # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } diff --git a/client/pov-recovery/src/active_candidate_recovery.rs b/client/pov-recovery/src/active_candidate_recovery.rs index a269a26f821..caae3615a85 100644 --- a/client/pov-recovery/src/active_candidate_recovery.rs +++ b/client/pov-recovery/src/active_candidate_recovery.rs @@ -42,19 +42,19 @@ impl ActiveCandidateRecovery { Self { recoveries: Default::default(), candidates: Default::default(), overseer_handle } } - /// Recover the given `pending_candidate`. + /// Recover the given `candidate`. pub async fn recover_candidate( &mut self, block_hash: Block::Hash, - pending_candidate: crate::PendingCandidate, + candidate: &crate::Candidate, ) { let (tx, rx) = oneshot::channel(); self.overseer_handle .send_msg( AvailabilityRecoveryMessage::RecoverAvailableData( - pending_candidate.receipt, - pending_candidate.session_index, + candidate.receipt.clone(), + candidate.session_index, None, tx, ), diff --git a/client/pov-recovery/src/lib.rs b/client/pov-recovery/src/lib.rs index 3327d4bb86b..90c0a853214 100644 --- a/client/pov-recovery/src/lib.rs +++ b/client/pov-recovery/src/lib.rs @@ -42,7 +42,7 @@ //! make sure that the blocks are imported in the correct order. use sc_client_api::{BlockBackend, BlockchainEvents, UsageProvider}; -use sc_consensus::import_queue::{ImportQueue, IncomingBlock}; +use sc_consensus::import_queue::{ImportQueueService, IncomingBlock}; use sp_consensus::{BlockOrigin, BlockStatus}; use sp_runtime::{ generic::BlockId, @@ -59,7 +59,9 @@ use cumulus_primitives_core::ParachainBlockData; use cumulus_relay_chain_interface::{RelayChainInterface, RelayChainResult}; use codec::Decode; -use futures::{select, stream::FuturesUnordered, Future, FutureExt, Stream, StreamExt}; +use futures::{ + channel::mpsc::Receiver, select, stream::FuturesUnordered, Future, FutureExt, Stream, StreamExt, +}; use futures_timer::Delay; use rand::{thread_rng, Rng}; @@ -75,38 +77,52 @@ use active_candidate_recovery::ActiveCandidateRecovery; const LOG_TARGET: &str = "cumulus-pov-recovery"; -/// Represents a pending candidate. -struct PendingCandidate { - receipt: CandidateReceipt, - session_index: SessionIndex, - block_number: NumberFor, +/// Type of recovery to trigger. +#[derive(Debug, PartialEq)] +pub enum RecoveryKind { + /// Single block recovery. + Simple, + /// Full ancestry recovery. + Full, } -/// The delay between observing an unknown block and recovering this block. +/// Structure used to trigger an explicit recovery request via `PoVRecovery`. +pub struct RecoveryRequest { + /// Hash of the last block to recover. + pub hash: Block::Hash, + /// Recovery delay range. Randomizing the start of the recovery within this interval + /// can be used to prevent self-DOSing if the recovery request is part of a + /// distributed protocol and there is the possibility that multiple actors are + /// requiring to perform the recovery action at approximately the same time. + pub delay: RecoveryDelay, + /// Recovery type. + pub kind: RecoveryKind, +} + +/// The delay between observing an unknown block and triggering the recovery of a block. #[derive(Clone, Copy)] -pub enum RecoveryDelay { - /// Start recovering the block in maximum of the given delay. - WithMax { max: Duration }, - /// Start recovering the block after at least `min` delay and in maximum `max` delay. - WithMinAndMax { min: Duration, max: Duration }, +pub struct RecoveryDelay { + /// Start recovering after `min` delay. + pub min: Duration, + /// Start recovering before `max` delay. + pub max: Duration, } -impl RecoveryDelay { - /// Return as [`Delay`]. - fn as_delay(self) -> Delay { - match self { - Self::WithMax { max } => Delay::new(max.mul_f64(thread_rng().gen())), - Self::WithMinAndMax { min, max } => - Delay::new(min + max.saturating_sub(min).mul_f64(thread_rng().gen())), - } - } +/// Represents an outstanding block candidate. +struct Candidate { + receipt: CandidateReceipt, + session_index: SessionIndex, + block_number: NumberFor, + parent_hash: Block::Hash, + // Lazy recovery has been submitted. + waiting_recovery: bool, } /// Encapsulates the logic of the pov recovery. -pub struct PoVRecovery { +pub struct PoVRecovery { /// All the pending candidates that we are waiting for to be imported or that need to be /// recovered when `next_candidate_to_recover` tells us to do so. - pending_candidates: HashMap>, + candidates: HashMap>, /// A stream of futures that resolve to hashes of candidates that need to be recovered. /// /// The candidates to the hashes are stored in `pending_candidates`. If a candidate is not @@ -119,28 +135,30 @@ pub struct PoVRecovery { waiting_for_parent: HashMap>, recovery_delay: RecoveryDelay, parachain_client: Arc, - parachain_import_queue: IQ, + parachain_import_queue: Box>, relay_chain_interface: RC, para_id: ParaId, + /// Explicit block recovery requests channel. + recovery_chan_rx: Receiver>, } -impl PoVRecovery +impl PoVRecovery where PC: BlockBackend + BlockchainEvents + UsageProvider, RCInterface: RelayChainInterface + Clone, - IQ: ImportQueue, { /// Create a new instance. pub fn new( overseer_handle: OverseerHandle, recovery_delay: RecoveryDelay, parachain_client: Arc, - parachain_import_queue: IQ, + parachain_import_queue: Box>, relay_chain_interface: RCInterface, para_id: ParaId, + recovery_chan_rx: Receiver>, ) -> Self { Self { - pending_candidates: HashMap::new(), + candidates: HashMap::new(), next_candidate_to_recover: Default::default(), active_candidate_recovery: ActiveCandidateRecovery::new(overseer_handle), recovery_delay, @@ -149,6 +167,7 @@ where parachain_import_queue, relay_chain_interface, para_id, + recovery_chan_rx, } } @@ -175,69 +194,54 @@ where } let hash = header.hash(); - match self.parachain_client.block_status(&BlockId::Hash(hash)) { - Ok(BlockStatus::Unknown) => (), - // Any other state means, we should ignore it. - Ok(_) => return, - Err(e) => { - tracing::debug!( - target: LOG_TARGET, - error = ?e, - block_hash = ?hash, - "Failed to get block status", - ); - return - }, - } - tracing::debug!(target: LOG_TARGET, ?hash, "Adding pending candidate"); - if self - .pending_candidates - .insert( - hash, - PendingCandidate { - block_number: *header.number(), - receipt: receipt.to_plain(), - session_index, - }, - ) - .is_some() - { + if self.candidates.contains_key(&hash) { return } - // Delay the recovery by some random time to not spam the relay chain. - let delay = self.recovery_delay.as_delay(); - self.next_candidate_to_recover.push( - async move { - delay.await; - hash - } - .boxed(), + tracing::debug!(target: LOG_TARGET, block_hash = ?hash, "Adding outstanding candidate"); + self.candidates.insert( + hash, + Candidate { + block_number: *header.number(), + receipt: receipt.to_plain(), + session_index, + parent_hash: *header.parent_hash(), + waiting_recovery: false, + }, ); + + // If required, triggers a lazy recovery request that will eventually be blocked + // if in the meantime the block is imported. + self.recover(RecoveryRequest { + hash, + delay: self.recovery_delay, + kind: RecoveryKind::Simple, + }); } /// Handle an imported block. - fn handle_block_imported(&mut self, hash: &Block::Hash) { - self.pending_candidates.remove(hash); + fn handle_block_imported(&mut self, block_hash: &Block::Hash) { + self.candidates.get_mut(block_hash).map(|candidate| { + // Prevents triggering an already enqueued recovery request + candidate.waiting_recovery = false; + }); } /// Handle a finalized block with the given `block_number`. fn handle_block_finalized(&mut self, block_number: NumberFor) { - self.pending_candidates.retain(|_, pc| pc.block_number > block_number); + self.candidates.retain(|_, pc| pc.block_number > block_number); } /// Recover the candidate for the given `block_hash`. async fn recover_candidate(&mut self, block_hash: Block::Hash) { - let pending_candidate = match self.pending_candidates.remove(&block_hash) { - Some(pending_candidate) => pending_candidate, - None => return, - }; - - tracing::debug!(target: LOG_TARGET, ?block_hash, "Issuing recovery request"); - self.active_candidate_recovery - .recover_candidate(block_hash, pending_candidate) - .await; + match self.candidates.get(&block_hash) { + Some(candidate) if candidate.waiting_recovery => { + tracing::debug!(target: LOG_TARGET, ?block_hash, "Issuing recovery request"); + self.active_candidate_recovery.recover_candidate(block_hash, candidate).await; + }, + _ => (), + } } /// Clear `waiting_for_parent` from the given `hash` and do this recursively for all child @@ -349,7 +353,7 @@ where async fn import_block(&mut self, block: Block) { let mut blocks = VecDeque::new(); - tracing::debug!(target: LOG_TARGET, hash = ?block.hash(), "Importing block retrieved using pov_recovery"); + tracing::debug!(target: LOG_TARGET, block_hash = ?block.hash(), "Importing block retrieved using pov_recovery"); blocks.push_back(block); let mut incoming_blocks = Vec::new(); @@ -380,6 +384,70 @@ where .import_blocks(BlockOrigin::ConsensusBroadcast, incoming_blocks); } + /// Attempts an explicit recovery of one or more blocks. + pub fn recover(&mut self, req: RecoveryRequest) { + let RecoveryRequest { mut hash, delay, kind } = req; + let mut to_recover = Vec::new(); + + let do_recover = loop { + let candidate = match self.candidates.get_mut(&hash) { + Some(candidate) => candidate, + None => { + tracing::debug!( + target: LOG_TARGET, + block_hash = ?hash, + "Cound not recover. Block was never announced as candidate" + ); + break false + }, + }; + + match self.parachain_client.block_status(&BlockId::Hash(hash)) { + Ok(BlockStatus::Unknown) if !candidate.waiting_recovery => { + candidate.waiting_recovery = true; + to_recover.push(hash); + }, + Ok(_) => break true, + Err(e) => { + tracing::error!( + target: LOG_TARGET, + error = ?e, + block_hash = ?hash, + "Failed to get block status", + ); + break false + }, + } + + if kind == RecoveryKind::Simple { + break true + } + + hash = candidate.parent_hash; + }; + + if do_recover { + for hash in to_recover.into_iter().rev() { + let delay = + delay.min + delay.max.saturating_sub(delay.min).mul_f64(thread_rng().gen()); + tracing::debug!( + target: LOG_TARGET, + block_hash = ?hash, + "Starting {:?} block recovery in {:?} sec", + kind, + delay.as_secs(), + ); + self.next_candidate_to_recover.push( + async move { + Delay::new(delay).await; + hash + } + .boxed(), + ); + } + } + } + /// Run the pov-recovery. pub async fn run(mut self) { let mut imported_blocks = self.parachain_client.import_notification_stream().fuse(); @@ -401,10 +469,15 @@ where if let Some((receipt, session_index)) = pending_candidate { self.handle_pending_candidate(receipt, session_index); } else { - tracing::debug!( - target: LOG_TARGET, - "Pending candidates stream ended", - ); + tracing::debug!(target: LOG_TARGET, "Pending candidates stream ended"); + return; + } + }, + recovery_req = self.recovery_chan_rx.next() => { + if let Some(req) = recovery_req { + self.recover(req); + } else { + tracing::debug!(target: LOG_TARGET, "Recovery channel stream ended"); return; } }, @@ -412,10 +485,7 @@ where if let Some(imported) = imported { self.handle_block_imported(&imported.hash); } else { - tracing::debug!( - target: LOG_TARGET, - "Imported blocks stream ended", - ); + tracing::debug!(target: LOG_TARGET, "Imported blocks stream ended"); return; } }, @@ -423,10 +493,7 @@ where if let Some(finalized) = finalized { self.handle_block_finalized(*finalized.header.number()); } else { - tracing::debug!( - target: LOG_TARGET, - "Finalized blocks stream ended", - ); + tracing::debug!(target: LOG_TARGET, "Finalized blocks stream ended"); return; } }, diff --git a/client/pov-recovery/tests/pov_recovery.rs b/client/pov-recovery/tests/pov_recovery.rs deleted file mode 100644 index dd8be634896..00000000000 --- a/client/pov-recovery/tests/pov_recovery.rs +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -use cumulus_primitives_core::ParaId; -use cumulus_test_service::{initial_head_data, Keyring::*}; -use futures::join; -use std::sync::Arc; - -/// Tests the PoV recovery. -/// -/// If there is a block of the parachain included/backed by the relay chain that isn't circulated in -/// the parachain network, we need to recover the PoV from the relay chain. Using this PoV we can -/// recover the block, import it and share it with the other nodes of the parachain network. -#[substrate_test_utils::test(flavor = "multi_thread")] -#[ignore] -async fn pov_recovery() { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_colors(false); - let _ = builder.init(); - - let para_id = ParaId::from(100); - let tokio_handle = tokio::runtime::Handle::current(); - - // Start alice - let ws_port = portpicker::pick_unused_port().expect("No free ports"); - let alice = cumulus_test_service::run_relay_chain_validator_node( - tokio_handle.clone(), - Alice, - || {}, - Vec::new(), - Some(ws_port), - ); - - // Start bob - let bob = cumulus_test_service::run_relay_chain_validator_node( - tokio_handle.clone(), - Bob, - || {}, - vec![alice.addr.clone()], - None, - ); - - // Register parachain - alice - .register_parachain( - para_id, - cumulus_test_service::runtime::WASM_BINARY - .expect("You need to build the WASM binary to run this test!") - .to_vec(), - initial_head_data(para_id), - ) - .await - .unwrap(); - - // Run charlie as parachain collator - let charlie = - cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Charlie) - .enable_collator() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .wrap_announce_block(|_| { - // Never announce any block - Arc::new(|_, _| {}) - }) - .build() - .await; - - // Run dave as parachain collator and eve as parachain full node - // - // They will need to recover the pov blocks through availability recovery. - let dave = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Dave) - .enable_collator() - .use_null_consensus() - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .wrap_announce_block(|_| { - // Never announce any block - Arc::new(|_, _| {}) - }) - .build() - .await; - - let eve = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Eve) - .use_null_consensus() - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .wrap_announce_block(|_| { - // Never announce any block - Arc::new(|_, _| {}) - }) - .build() - .await; - - // Run ferdie as parachain RPC collator and one as parachain RPC full node - // - // They will need to recover the pov blocks through availability recovery. - let ferdie = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Ferdie) - .use_null_consensus() - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .use_external_relay_chain_node_at_port(ws_port) - .wrap_announce_block(|_| { - // Never announce any block - Arc::new(|_, _| {}) - }) - .build() - .await; - - let one = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, One) - .enable_collator() - .use_null_consensus() - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .use_external_relay_chain_node_at_port(ws_port) - .wrap_announce_block(|_| { - // Never announce any block - Arc::new(|_, _| {}) - }) - .build() - .await; - - join!( - dave.wait_for_blocks(7), - eve.wait_for_blocks(7), - ferdie.wait_for_blocks(7), - one.wait_for_blocks(7) - ); -} diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index a7def2bc322..e882e0df00d 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -5,26 +5,26 @@ version = "0.1.0" edition = "2021" [dependencies] -async-trait = "0.1.57" -futures = "0.3.24" +async-trait = "0.1.59" +futures = "0.3.25" futures-timer = "3.0.2" # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", default-features = false, features = ["cli"] , branch = "release-v0.9.31" } -polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", default-features = false, features = ["cli"] , branch = "release-v0.9.36" } +polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } @@ -33,11 +33,11 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] # Substrate -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } metered = { package = "prioritized-metered-channel", version = "0.2.0" } # Cumulus diff --git a/client/relay-chain-inprocess-interface/src/lib.rs b/client/relay-chain-inprocess-interface/src/lib.rs index 22e888757c7..4477763c622 100644 --- a/client/relay-chain-inprocess-interface/src/lib.rs +++ b/client/relay-chain-inprocess-interface/src/lib.rs @@ -180,7 +180,7 @@ where relay_parent: PHash, key: &[u8], ) -> RelayChainResult> { - let state = self.backend.state_at(&relay_parent)?; + let state = self.backend.state_at(relay_parent)?; state.storage(key).map_err(RelayChainError::GenericError) } @@ -189,7 +189,7 @@ where relay_parent: PHash, relevant_keys: &Vec>, ) -> RelayChainResult { - let state_backend = self.backend.state_at(&relay_parent)?; + let state_backend = self.backend.state_at(relay_parent)?; sp_state_machine::prove_read(state_backend, relevant_keys) .map_err(RelayChainError::StateMachineError) diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 860b2cd327b..fe17ac75a0d 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -5,18 +5,19 @@ version = "0.1.0" edition = "2021" [dependencies] -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } cumulus-primitives-core = { path = "../../primitives/core" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -futures = "0.3.24" -async-trait = "0.1.57" -thiserror = "1.0.37" -jsonrpsee-core = "0.15.1" +tokio = { version = "1.21.2", features = ["sync"] } +futures = "0.3.25" +async-trait = "0.1.59" +thiserror = "1.0.38" +jsonrpsee-core = "0.16.2" parity-scale-codec = "3.2.1" diff --git a/client/relay-chain-interface/src/lib.rs b/client/relay-chain-interface/src/lib.rs index 4505ac70973..56de750b687 100644 --- a/client/relay-chain-interface/src/lib.rs +++ b/client/relay-chain-interface/src/lib.rs @@ -51,11 +51,11 @@ pub enum RelayChainError { BlockchainError(#[from] sp_blockchain::Error), #[error("State machine error occured: {0}")] StateMachineError(Box), - #[error("Unable to call RPC method '{0}' due to error: {1}")] - RpcCallError(String, JsonRpcError), + #[error("Unable to call RPC method '{0}'")] + RpcCallError(String), #[error("RPC Error: '{0}'")] JsonRpcError(#[from] JsonRpcError), - #[error("Unable to reach RpcStreamWorker: {0}")] + #[error("Unable to communicate with RPC worker: {0}")] WorkerCommunicationError(String), #[error("Scale codec deserialization error: {0}")] DeserializationError(CodecError), diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index dbaaec8233a..75e398b55a9 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -6,45 +6,41 @@ edition = "2021" [dependencies] # polkadot deps -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # substrate deps -sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network-light = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # cumulus deps cumulus-relay-chain-interface = { path = "../relay-chain-interface" } cumulus-relay-chain-rpc-interface = { path = "../relay-chain-rpc-interface" } cumulus-primitives-core = { path = "../../primitives/core" } -array-bytes = "4.1" +array-bytes = "6.0" lru = "0.8" tracing = "0.1.37" -async-trait = "0.1.52" -futures = "0.3.24" +async-trait = "0.1.59" +futures = "0.3.25" url = "2.2.2" -tokio = { version = "1.21.2", features = ["macros"] } +tokio = { version = "1.23.0", features = ["macros"] } diff --git a/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs b/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs index bf1a3c9a38c..1ed896533a3 100644 --- a/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs +++ b/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs @@ -363,13 +363,13 @@ impl BlockChainRpcClient { pub async fn import_notification_stream( &self, ) -> RelayChainResult + Send>>> { - Ok(self.rpc_client.get_imported_heads_stream().await?.boxed()) + Ok(self.rpc_client.get_imported_heads_stream()?.boxed()) } pub async fn finality_notification_stream( &self, ) -> RelayChainResult + Send>>> { - Ok(self.rpc_client.get_finalized_heads_stream().await?.boxed()) + Ok(self.rpc_client.get_finalized_heads_stream()?.boxed()) } } diff --git a/client/relay-chain-minimal-node/src/collator_overseer.rs b/client/relay-chain-minimal-node/src/collator_overseer.rs index 6efb1a9ce2e..7ed01193026 100644 --- a/client/relay-chain-minimal-node/src/collator_overseer.rs +++ b/client/relay-chain-minimal-node/src/collator_overseer.rs @@ -16,17 +16,10 @@ use cumulus_relay_chain_interface::RelayChainError; use lru::LruCache; -use polkadot_availability_distribution::{ - AvailabilityDistributionSubsystem, IncomingRequestReceivers, -}; -use polkadot_node_core_av_store::Config; use polkadot_node_network_protocol::{ peer_set::PeerSetProtocolNames, request_response::{ - v1::{ - AvailableDataFetchingRequest, ChunkFetchingRequest, CollationFetchingRequest, - PoVFetchingRequest, - }, + v1::{AvailableDataFetchingRequest, CollationFetchingRequest}, IncomingRequestReceiver, ReqProtocolNames, }, }; @@ -38,14 +31,13 @@ use polkadot_overseer::{ use polkadot_primitives::v2::CollatorPair; use polkadot_service::{ overseer::{ - AvailabilityRecoverySubsystem, AvailabilityStoreSubsystem, ChainApiSubsystem, - CollationGenerationSubsystem, CollatorProtocolSubsystem, NetworkBridgeMetrics, - NetworkBridgeRxSubsystem, NetworkBridgeTxSubsystem, ProtocolSide, RuntimeApiSubsystem, + AvailabilityRecoverySubsystem, CollationGenerationSubsystem, CollatorProtocolSubsystem, + NetworkBridgeMetrics, NetworkBridgeRxSubsystem, NetworkBridgeTxSubsystem, ProtocolSide, + RuntimeApiSubsystem, }, Error, OverseerConnector, }; use sc_authority_discovery::Service as AuthorityDiscoveryService; -use sc_keystore::LocalKeystore; use sc_network::NetworkStateInfo; use std::sync::Arc; @@ -66,13 +58,9 @@ pub(crate) struct CollatorOverseerGenArgs<'a> { pub network_service: Arc>, /// Underlying authority discovery service. pub authority_discovery_service: AuthorityDiscoveryService, - // Receiver for collation request protocol + /// Receiver for collation request protocol pub collation_req_receiver: IncomingRequestReceiver, - // Receiver for PoV request protocol - pub pov_req_receiver: IncomingRequestReceiver, - // Receiver for chunk request protocol - pub chunk_req_receiver: IncomingRequestReceiver, - // Receiver for availability request protocol + /// Receiver for availability request protocol pub available_data_req_receiver: IncomingRequestReceiver, /// Prometheus registry, commonly used for production systems, less so for test. pub registry: Option<&'a Registry>, @@ -84,10 +72,6 @@ pub(crate) struct CollatorOverseerGenArgs<'a> { pub req_protocol_names: ReqProtocolNames, /// Peerset protocols name mapping pub peer_set_protocol_names: PeerSetProtocolNames, - /// Config for the availability store - pub availability_config: Config, - /// The underlying key value store for the parachains. - pub parachains_db: Arc, } fn build_overseer<'a>( @@ -98,15 +82,11 @@ fn build_overseer<'a>( authority_discovery_service, collation_req_receiver, available_data_req_receiver, - availability_config, registry, spawner, collator_pair, req_protocol_names, peer_set_protocol_names, - parachains_db, - pov_req_receiver, - chunk_req_receiver, }: CollatorOverseerGenArgs<'a>, ) -> Result< (Overseer, Arc>, OverseerHandle), @@ -114,30 +94,21 @@ fn build_overseer<'a>( > { let leaves = Vec::new(); let metrics = ::register(registry)?; - let keystore = Arc::new(LocalKeystore::in_memory()); let spawner = SpawnGlue(spawner); let network_bridge_metrics: NetworkBridgeMetrics = Metrics::register(registry)?; let builder = Overseer::builder() - .availability_distribution(AvailabilityDistributionSubsystem::new( - keystore.clone(), - IncomingRequestReceivers { pov_req_receiver, chunk_req_receiver }, - Metrics::register(registry)?, - )) + .availability_distribution(DummySubsystem) .availability_recovery(AvailabilityRecoverySubsystem::with_chunks_only( available_data_req_receiver, Metrics::register(registry)?, )) - .availability_store(AvailabilityStoreSubsystem::new( - parachains_db.clone(), - availability_config, - Metrics::register(registry)?, - )) + .availability_store(DummySubsystem) .bitfield_distribution(DummySubsystem) .bitfield_signing(DummySubsystem) .candidate_backing(DummySubsystem) .candidate_validation(DummySubsystem) .pvf_checker(DummySubsystem) - .chain_api(ChainApiSubsystem::new(runtime_client.clone(), Metrics::register(registry)?)) + .chain_api(DummySubsystem) .collation_generation(CollationGenerationSubsystem::new(Metrics::register(registry)?)) .collator_protocol({ let side = ProtocolSide::Collator( @@ -252,8 +223,14 @@ async fn forward_collator_events( f = finality.next() => { match f { Some(header) => { - tracing::info!(target: "minimal-polkadot-node", "Received finalized block via RPC: #{} ({})", header.number, header.hash()); - let block_info = BlockInfo { hash: header.hash(), parent_hash: header.parent_hash, number: header.number }; + tracing::info!( + target: "minimal-polkadot-node", + "Received finalized block via RPC: #{} ({} -> {})", + header.number, + header.parent_hash, + header.hash() + ); + let block_info = BlockInfo { hash: header.hash(), parent_hash: header.parent_hash, number: header.number }; handle.block_finalized(block_info).await; } None => return Err(RelayChainError::GenericError("Relay chain finality stream ended.".to_string())), @@ -262,8 +239,14 @@ async fn forward_collator_events( i = imports.next() => { match i { Some(header) => { - tracing::info!(target: "minimal-polkadot-node", "Received imported block via RPC: #{} ({})", header.number, header.hash()); - let block_info = BlockInfo { hash: header.hash(), parent_hash: header.parent_hash, number: header.number }; + tracing::info!( + target: "minimal-polkadot-node", + "Received imported block via RPC: #{} ({} -> {})", + header.number, + header.parent_hash, + header.hash() + ); + let block_info = BlockInfo { hash: header.hash(), parent_hash: header.parent_hash, number: header.number }; handle.block_imported(block_info).await; } None => return Err(RelayChainError::GenericError("Relay chain import stream ended.".to_string())), diff --git a/client/relay-chain-minimal-node/src/lib.rs b/client/relay-chain-minimal-node/src/lib.rs index 60b8a809a9c..1c61a7998bb 100644 --- a/client/relay-chain-minimal-node/src/lib.rs +++ b/client/relay-chain-minimal-node/src/lib.rs @@ -21,8 +21,9 @@ use cumulus_relay_chain_rpc_interface::{RelayChainRpcInterface, Url}; use polkadot_network_bridge::{peer_sets_info, IsAuthority}; use polkadot_node_network_protocol::{ peer_set::PeerSetProtocolNames, - request_response::{self, IncomingRequest, ReqProtocolNames}, + request_response::{v1, IncomingRequest, IncomingRequestReceiver, Protocol, ReqProtocolNames}, }; + use polkadot_node_subsystem_util::metrics::prometheus::Registry; use polkadot_primitives::v2::CollatorPair; @@ -31,7 +32,7 @@ use sc_network::{Event, NetworkService}; use sc_network_common::service::NetworkEventStream; use std::sync::Arc; -use polkadot_service::{open_database, Configuration, TaskManager}; +use polkadot_service::{Configuration, TaskManager}; use futures::StreamExt; @@ -84,7 +85,7 @@ fn build_authority_discovery_service( pub async fn build_minimal_relay_chain_node( polkadot_config: Configuration, task_manager: &mut TaskManager, - relay_chain_url: Url, + relay_chain_url: Vec, ) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { let client = cumulus_relay_chain_rpc_interface::create_client_and_start_worker( relay_chain_url, @@ -152,8 +153,9 @@ async fn new_minimal_relay_chain( .extend(peer_sets_info(is_authority, &peer_set_protocol_names)); let request_protocol_names = ReqProtocolNames::new(genesis_hash, config.chain_spec.fork_id()); - let (collation_req_receiver, available_data_req_receiver, pov_req_receiver, chunk_req_receiver) = + let (collation_req_receiver, available_data_req_receiver) = build_request_response_protocol_receivers(&request_protocol_names, &mut config); + let (network, network_starter) = network::build_collator_network(network::BuildCollatorNetworkParams { config: &config, @@ -170,8 +172,6 @@ async fn new_minimal_relay_chain( prometheus_registry.clone(), ); - let parachains_db = open_database(&config.database)?; - let overseer_args = CollatorOverseerGenArgs { runtime_client: relay_chain_rpc_client.clone(), network_service: network.clone(), @@ -183,10 +183,6 @@ async fn new_minimal_relay_chain( collator_pair, req_protocol_names: request_protocol_names, peer_set_protocol_names, - parachains_db, - availability_config: polkadot_service::AVAILABILITY_CONFIG, - pov_req_receiver, - chunk_req_receiver, }; let overseer_handle = collator_overseer::spawn_overseer( @@ -204,10 +200,8 @@ fn build_request_response_protocol_receivers( request_protocol_names: &ReqProtocolNames, config: &mut Configuration, ) -> ( - request_response::IncomingRequestReceiver, - request_response::IncomingRequestReceiver, - request_response::IncomingRequestReceiver, - request_response::IncomingRequestReceiver, + IncomingRequestReceiver, + IncomingRequestReceiver, ) { let (collation_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names); @@ -215,9 +209,7 @@ fn build_request_response_protocol_receivers( let (available_data_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names); config.network.request_response_protocols.push(cfg); - let (pov_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names); - config.network.request_response_protocols.push(cfg); - let (chunk_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names); + let cfg = Protocol::ChunkFetchingV1.get_outbound_only_config(request_protocol_names); config.network.request_response_protocols.push(cfg); - (collation_req_receiver, available_data_req_receiver, pov_req_receiver, chunk_req_receiver) + (collation_req_receiver, available_data_req_receiver) } diff --git a/client/relay-chain-minimal-node/src/network.rs b/client/relay-chain-minimal-node/src/network.rs index bd4b0889a89..9bd31ad7600 100644 --- a/client/relay-chain-minimal-node/src/network.rs +++ b/client/relay-chain-minimal-node/src/network.rs @@ -21,19 +21,19 @@ use polkadot_node_network_protocol::PeerId; use sc_network::{NetworkService, SyncState}; use sc_client_api::HeaderBackend; +use sc_consensus::{BlockImportError, BlockImportStatus, JustificationSyncLink, Link}; use sc_network_common::{ config::{ NonDefaultSetConfig, NonReservedPeerMode, NotificationHandshake, ProtocolId, SetConfig, }, protocol::role::Roles, service::NetworkSyncForkRequest, - sync::{message::BlockAnnouncesHandshake, Metrics, SyncStatus}, + sync::{ + message::{BlockAnnouncesHandshake, BlockRequest}, + BadPeer, Metrics, OnBlockData, PollBlockAnnounceValidation, SyncStatus, + }, }; -use sc_network_light::light_client_requests; -use sc_network_sync::{block_request_handler, state_request_handler}; use sc_service::{error::Error, Configuration, NetworkStarter, SpawnTaskHandle}; -use sp_consensus::BlockOrigin; -use sp_runtime::Justifications; use std::{iter, sync::Arc}; @@ -57,16 +57,6 @@ pub(crate) fn build_collator_network( let BuildCollatorNetworkParams { config, client, spawn_handle, genesis_hash } = params; let protocol_id = config.protocol_id(); - - let block_request_protocol_config = - block_request_handler::generate_protocol_config(&protocol_id, genesis_hash, None); - - let state_request_protocol_config = - state_request_handler::generate_protocol_config(&protocol_id, genesis_hash, None); - - let light_client_request_protocol_config = - light_client_requests::generate_protocol_config(&protocol_id, genesis_hash, None); - let chain_sync = DummyChainSync; let block_announce_config = chain_sync.get_block_announce_proto_config::( protocol_id.clone(), @@ -81,23 +71,18 @@ pub(crate) fn build_collator_network( role: config.role.clone(), executor: { let spawn_handle = Clone::clone(&spawn_handle); - Some(Box::new(move |fut| { + Box::new(move |fut| { spawn_handle.spawn("libp2p-node", Some("networking"), fut); - })) + }) }, fork_id: None, chain_sync: Box::new(chain_sync), network_config: config.network.clone(), chain: client.clone(), - import_queue: Box::new(DummyImportQueue), protocol_id, metrics_registry: config.prometheus_config.as_ref().map(|config| config.registry.clone()), block_announce_config, chain_sync_service: Box::new(DummyChainSyncService::(Default::default())), - block_request_protocol_config, - state_request_protocol_config, - warp_sync_protocol_config: None, - light_client_request_protocol_config, request_response_protocol_configs: Vec::new(), }; @@ -248,30 +233,6 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { ) { } - fn justification_requests( - &mut self, - ) -> Box)> + '_> - { - Box::new(std::iter::empty()) - } - - fn block_requests( - &mut self, - ) -> Box)> + '_> - { - Box::new(std::iter::empty()) - } - - fn state_request(&mut self) -> Option<(PeerId, sc_network_common::sync::OpaqueStateRequest)> { - None - } - - fn warp_sync_request( - &mut self, - ) -> Option<(PeerId, sc_network_common::sync::warp::WarpProofRequest)> { - None - } - fn on_block_data( &mut self, _who: &PeerId, @@ -281,22 +242,6 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { unimplemented!("Not supported on the RPC collator") } - fn on_state_data( - &mut self, - _who: &PeerId, - _response: sc_network_common::sync::OpaqueStateResponse, - ) -> Result, sc_network_common::sync::BadPeer> { - unimplemented!("Not supported on the RPC collator") - } - - fn on_warp_sync_data( - &mut self, - _who: &PeerId, - _response: sc_network_common::sync::warp::EncodedProof, - ) -> Result<(), sc_network_common::sync::BadPeer> { - unimplemented!("Not supported on the RPC collator") - } - fn on_block_justification( &mut self, _who: PeerId, @@ -306,28 +251,6 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { unimplemented!("Not supported on the RPC collator") } - fn on_blocks_processed( - &mut self, - _imported: usize, - _count: usize, - _results: Vec<( - Result< - sc_consensus::BlockImportStatus>, - sc_consensus::BlockImportError, - >, - ::Hash, - )>, - ) -> Box< - dyn Iterator< - Item = Result< - (PeerId, sc_network_common::sync::message::BlockRequest), - sc_network_common::sync::BadPeer, - >, - >, - > { - Box::new(std::iter::empty()) - } - fn on_justification_import( &mut self, _hash: ::Hash, @@ -360,12 +283,7 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { std::task::Poll::Pending } - fn peer_disconnected( - &mut self, - _who: &PeerId, - ) -> Option> { - None - } + fn peer_disconnected(&mut self, _who: &PeerId) {} fn metrics(&self) -> sc_network_common::sync::Metrics { Metrics { @@ -380,27 +298,6 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { } } - fn create_opaque_block_request( - &self, - _request: &sc_network_common::sync::message::BlockRequest, - ) -> sc_network_common::sync::OpaqueBlockRequest { - unimplemented!("Not supported on the RPC collator") - } - - fn encode_block_request( - &self, - _request: &sc_network_common::sync::OpaqueBlockRequest, - ) -> Result, String> { - unimplemented!("Not supported on the RPC collator") - } - - fn decode_block_response( - &self, - _response: &[u8], - ) -> Result { - unimplemented!("Not supported on the RPC collator") - } - fn block_response_into_blocks( &self, _request: &sc_network_common::sync::message::BlockRequest, @@ -409,58 +306,53 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { unimplemented!("Not supported on the RPC collator") } - fn encode_state_request( - &self, - _request: &sc_network_common::sync::OpaqueStateRequest, - ) -> Result, String> { - unimplemented!("Not supported on the RPC collator") + fn poll( + &mut self, + _cx: &mut std::task::Context, + ) -> std::task::Poll> { + std::task::Poll::Pending } - fn decode_state_response( - &self, - _response: &[u8], - ) -> Result { + fn send_block_request(&mut self, _who: PeerId, _request: BlockRequest) { unimplemented!("Not supported on the RPC collator") } - fn poll( - &mut self, - _cx: &mut std::task::Context, - ) -> std::task::Poll::Header>> - { - std::task::Poll::Pending + fn num_active_peers(&self) -> usize { + 0 } + + fn process_block_response_data(&mut self, _blocks_to_import: Result, BadPeer>) {} } -struct DummyImportQueue; +struct DummyChainSyncService(std::marker::PhantomData); -impl sc_service::ImportQueue for DummyImportQueue { - fn import_blocks( - &mut self, - _origin: BlockOrigin, - _blocks: Vec>, - ) { - } +impl NetworkSyncForkRequest> for DummyChainSyncService { + fn set_sync_fork_request(&self, _peers: Vec, _hash: B::Hash, _number: NumberFor) {} +} + +impl JustificationSyncLink for DummyChainSyncService { + fn request_justification(&self, _hash: &B::Hash, _number: NumberFor) {} + + fn clear_justification_requests(&self) {} +} - fn import_justifications( +impl Link for DummyChainSyncService { + fn blocks_processed( &mut self, - _who: PeerId, - _hash: Hash, - _number: NumberFor, - _justifications: Justifications, + _imported: usize, + _count: usize, + _results: Vec<(Result>, BlockImportError>, B::Hash)>, ) { } - fn poll_actions( + fn justification_imported( &mut self, - _cx: &mut futures::task::Context, - _link: &mut dyn sc_consensus::import_queue::Link, + _who: PeerId, + _hash: &B::Hash, + _number: NumberFor, + _success: bool, ) { } -} - -struct DummyChainSyncService(std::marker::PhantomData); -impl NetworkSyncForkRequest> for DummyChainSyncService { - fn set_sync_fork_request(&self, _peers: Vec, _hash: B::Hash, _number: NumberFor) {} + fn request_justification(&mut self, _hash: &B::Hash, _number: NumberFor) {} } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index fb06ea97cdc..7b3659ea17f 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -6,27 +6,28 @@ edition = "2021" [dependencies] -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -tokio = { version = "1.21.2", features = ["sync"] } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +tokio = { version = "1.23.0", features = ["sync"] } -futures = "0.3.24" +futures = "0.3.25" futures-timer = "3.0.2" parity-scale-codec = "3.2.1" -jsonrpsee = { version = "0.15.1", features = ["ws-client"] } +jsonrpsee = { version = "0.16.2", features = ["ws-client"] } tracing = "0.1.37" -async-trait = "0.1.57" +async-trait = "0.1.59" url = "2.3.1" -backoff = { version = "0.4.0", features = ["tokio"] } +serde_json = "1.0.87" +serde = "1.0.151" +lru = "0.8.1" diff --git a/client/relay-chain-rpc-interface/src/lib.rs b/client/relay-chain-rpc-interface/src/lib.rs index 1d35ec4e747..c8a1c4e46d9 100644 --- a/client/relay-chain-rpc-interface/src/lib.rs +++ b/client/relay-chain-rpc-interface/src/lib.rs @@ -19,7 +19,7 @@ use core::time::Duration; use cumulus_primitives_core::{ relay_chain::{ v2::{CommittedCandidateReceipt, OccupiedCoreAssumption, SessionIndex, ValidatorId}, - Hash as PHash, Header as PHeader, InboundHrmpMessage, + Hash as RelayHash, Header as RelayHeader, InboundHrmpMessage, }, InboundDownwardMessage, ParaId, PersistedValidationData, }; @@ -34,6 +34,7 @@ use std::pin::Pin; pub use url::Url; +mod reconnecting_ws_client; mod rpc_client; pub use rpc_client::{create_client_and_start_worker, RelayChainRpcClient}; @@ -58,7 +59,7 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn retrieve_dmq_contents( &self, para_id: ParaId, - relay_parent: PHash, + relay_parent: RelayHash, ) -> RelayChainResult> { self.rpc_client.parachain_host_dmq_contents(para_id, relay_parent).await } @@ -66,7 +67,7 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn retrieve_all_inbound_hrmp_channel_contents( &self, para_id: ParaId, - relay_parent: PHash, + relay_parent: RelayHash, ) -> RelayChainResult>> { self.rpc_client .parachain_host_inbound_hrmp_channels_contents(para_id, relay_parent) @@ -75,7 +76,7 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn persisted_validation_data( &self, - hash: PHash, + hash: RelayHash, para_id: ParaId, occupied_core_assumption: OccupiedCoreAssumption, ) -> RelayChainResult> { @@ -86,7 +87,7 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn candidate_pending_availability( &self, - hash: PHash, + hash: RelayHash, para_id: ParaId, ) -> RelayChainResult> { self.rpc_client @@ -94,31 +95,31 @@ impl RelayChainInterface for RelayChainRpcInterface { .await } - async fn session_index_for_child(&self, hash: PHash) -> RelayChainResult { + async fn session_index_for_child(&self, hash: RelayHash) -> RelayChainResult { self.rpc_client.parachain_host_session_index_for_child(hash).await } - async fn validators(&self, block_id: PHash) -> RelayChainResult> { + async fn validators(&self, block_id: RelayHash) -> RelayChainResult> { self.rpc_client.parachain_host_validators(block_id).await } async fn import_notification_stream( &self, - ) -> RelayChainResult + Send>>> { - let imported_headers_stream = self.rpc_client.get_imported_heads_stream().await?; + ) -> RelayChainResult + Send>>> { + let imported_headers_stream = self.rpc_client.get_imported_heads_stream()?; Ok(imported_headers_stream.boxed()) } async fn finality_notification_stream( &self, - ) -> RelayChainResult + Send>>> { - let imported_headers_stream = self.rpc_client.get_finalized_heads_stream().await?; + ) -> RelayChainResult + Send>>> { + let imported_headers_stream = self.rpc_client.get_finalized_heads_stream()?; Ok(imported_headers_stream.boxed()) } - async fn best_block_hash(&self) -> RelayChainResult { + async fn best_block_hash(&self) -> RelayChainResult { self.rpc_client.chain_get_head(None).await } @@ -132,7 +133,7 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn get_storage_by_key( &self, - relay_parent: PHash, + relay_parent: RelayHash, key: &[u8], ) -> RelayChainResult> { let storage_key = StorageKey(key.to_vec()); @@ -144,7 +145,7 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn prove_read( &self, - relay_parent: PHash, + relay_parent: RelayHash, relevant_keys: &Vec>, ) -> RelayChainResult { let cloned = relevant_keys.clone(); @@ -167,8 +168,8 @@ impl RelayChainInterface for RelayChainRpcInterface { /// 2. Check if the block is already in chain. If yes, succeed early. /// 3. Wait for the block to be imported via subscription. /// 4. If timeout is reached, we return an error. - async fn wait_for_block(&self, wait_for_hash: PHash) -> RelayChainResult<()> { - let mut head_stream = self.rpc_client.get_imported_heads_stream().await?; + async fn wait_for_block(&self, wait_for_hash: RelayHash) -> RelayChainResult<()> { + let mut head_stream = self.rpc_client.get_imported_heads_stream()?; if self.rpc_client.chain_get_header(Some(wait_for_hash)).await?.is_some() { return Ok(()) @@ -191,8 +192,8 @@ impl RelayChainInterface for RelayChainRpcInterface { async fn new_best_notification_stream( &self, - ) -> RelayChainResult + Send>>> { - let imported_headers_stream = self.rpc_client.get_best_heads_stream().await?; + ) -> RelayChainResult + Send>>> { + let imported_headers_stream = self.rpc_client.get_best_heads_stream()?; Ok(imported_headers_stream.boxed()) } } diff --git a/client/relay-chain-rpc-interface/src/reconnecting_ws_client.rs b/client/relay-chain-rpc-interface/src/reconnecting_ws_client.rs new file mode 100644 index 00000000000..3414dd652c6 --- /dev/null +++ b/client/relay-chain-rpc-interface/src/reconnecting_ws_client.rs @@ -0,0 +1,520 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +use cumulus_primitives_core::relay_chain::{ + BlockNumber as RelayBlockNumber, Header as RelayHeader, +}; +use cumulus_relay_chain_interface::{RelayChainError, RelayChainResult}; +use futures::{ + channel::{ + mpsc::{Receiver, Sender}, + oneshot::Sender as OneshotSender, + }, + future::BoxFuture, + stream::FuturesUnordered, + FutureExt, StreamExt, +}; +use jsonrpsee::{ + core::{ + client::{Client as JsonRpcClient, ClientT, Subscription, SubscriptionClientT}, + params::ArrayParams, + Error as JsonRpseeError, JsonValue, + }, + rpc_params, + ws_client::WsClientBuilder, +}; +use lru::LruCache; +use polkadot_service::TaskManager; +use std::{num::NonZeroUsize, sync::Arc}; +use tokio::sync::mpsc::{ + channel as tokio_channel, Receiver as TokioReceiver, Sender as TokioSender, +}; +use url::Url; + +const NOTIFICATION_CHANNEL_SIZE_LIMIT: usize = 20; +const LOG_TARGET: &str = "reconnecting-websocket-client"; + +/// Messages for communication between [`ReconnectingWsClient`] and [`ReconnectingWebsocketWorker`]. +#[derive(Debug)] +enum RpcDispatcherMessage { + RegisterBestHeadListener(Sender), + RegisterImportListener(Sender), + RegisterFinalizationListener(Sender), + Request(String, ArrayParams, OneshotSender>), +} + +/// Frontend for performing websocket requests. +/// Requests and stream requests are forwarded to [`ReconnectingWebsocketWorker`]. +#[derive(Debug, Clone)] +pub struct ReconnectingWsClient { + /// Channel to communicate with the RPC worker + to_worker_channel: TokioSender, +} + +impl ReconnectingWsClient { + /// Create a new websocket client frontend. + pub async fn new(urls: Vec, task_manager: &mut TaskManager) -> RelayChainResult { + tracing::debug!(target: LOG_TARGET, "Instantiating reconnecting websocket client"); + + let (worker, sender) = ReconnectingWebsocketWorker::new(urls).await; + + task_manager + .spawn_essential_handle() + .spawn("relay-chain-rpc-worker", None, worker.run()); + + Ok(Self { to_worker_channel: sender }) + } +} + +impl ReconnectingWsClient { + /// Perform a request via websocket connection. + pub async fn request(&self, method: &str, params: ArrayParams) -> Result + where + R: serde::de::DeserializeOwned, + { + let (tx, rx) = futures::channel::oneshot::channel(); + + let message = RpcDispatcherMessage::Request(method.into(), params, tx); + self.to_worker_channel.send(message).await.map_err(|err| { + RelayChainError::WorkerCommunicationError(format!( + "Unable to send message to RPC worker: {}", + err + )) + })?; + + let value = rx.await.map_err(|err| { + RelayChainError::WorkerCommunicationError(format!( + "Unexpected channel close on RPC worker side: {}", + err + )) + })??; + + serde_json::from_value(value) + .map_err(|_| RelayChainError::GenericError("Unable to deserialize value".to_string())) + } + + /// Get a stream of new best relay chain headers + pub fn get_best_heads_stream(&self) -> Result, RelayChainError> { + let (tx, rx) = + futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); + self.send_register_message_to_worker(RpcDispatcherMessage::RegisterBestHeadListener(tx))?; + Ok(rx) + } + + /// Get a stream of finalized relay chain headers + pub fn get_finalized_heads_stream(&self) -> Result, RelayChainError> { + let (tx, rx) = + futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); + self.send_register_message_to_worker(RpcDispatcherMessage::RegisterFinalizationListener( + tx, + ))?; + Ok(rx) + } + + /// Get a stream of all imported relay chain headers + pub fn get_imported_heads_stream(&self) -> Result, RelayChainError> { + let (tx, rx) = + futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); + self.send_register_message_to_worker(RpcDispatcherMessage::RegisterImportListener(tx))?; + Ok(rx) + } + + fn send_register_message_to_worker( + &self, + message: RpcDispatcherMessage, + ) -> Result<(), RelayChainError> { + self.to_worker_channel + .try_send(message) + .map_err(|e| RelayChainError::WorkerCommunicationError(e.to_string())) + } +} + +/// Worker that should be used in combination with [`RelayChainRpcClient`]. Must be polled to distribute header notifications to listeners. +struct ReconnectingWebsocketWorker { + ws_urls: Vec, + /// Communication channel with the RPC client + client_receiver: TokioReceiver, + + /// Senders to distribute incoming header notifications to + imported_header_listeners: Vec>, + finalized_header_listeners: Vec>, + best_header_listeners: Vec>, +} + +fn distribute_header(header: RelayHeader, senders: &mut Vec>) { + senders.retain_mut(|e| { + match e.try_send(header.clone()) { + // Receiver has been dropped, remove Sender from list. + Err(error) if error.is_disconnected() => false, + // Channel is full. This should not happen. + // TODO: Improve error handling here + // https://github.com/paritytech/cumulus/issues/1482 + Err(error) => { + tracing::error!(target: LOG_TARGET, ?error, "Event distribution channel has reached its limit. This can lead to missed notifications."); + true + }, + _ => true, + } + }); +} + +/// Manages the active websocket client. +/// Responsible for creating request futures, subscription streams +/// and reconnections. +#[derive(Debug)] +struct ClientManager { + urls: Vec, + active_client: Arc, + active_index: usize, +} + +struct RelayChainSubscriptions { + import_subscription: Subscription, + finalized_subscription: Subscription, + best_subscription: Subscription, +} + +/// Try to find a new RPC server to connect to. +async fn connect_next_available_rpc_server( + urls: &Vec, + starting_position: usize, +) -> Result<(usize, Arc), ()> { + tracing::debug!(target: LOG_TARGET, starting_position, "Connecting to RPC server."); + for (counter, url) in urls.iter().cycle().skip(starting_position).take(urls.len()).enumerate() { + let index = (starting_position + counter) % urls.len(); + tracing::info!( + target: LOG_TARGET, + index, + ?url, + "Trying to connect to next external relaychain node.", + ); + if let Ok(ws_client) = WsClientBuilder::default().build(url).await { + return Ok((index, Arc::new(ws_client))) + }; + } + Err(()) +} + +impl ClientManager { + pub async fn new(urls: Vec) -> Result { + if urls.is_empty() { + return Err(()) + } + let active_client = connect_next_available_rpc_server(&urls, 0).await?; + Ok(Self { urls, active_client: active_client.1, active_index: active_client.0 }) + } + + pub async fn connect_to_new_rpc_server(&mut self) -> Result<(), ()> { + let new_active = + connect_next_available_rpc_server(&self.urls, self.active_index + 1).await?; + self.active_client = new_active.1; + self.active_index = new_active.0; + Ok(()) + } + + async fn get_subscriptions(&self) -> Result { + let import_subscription = self + .active_client + .subscribe::( + "chain_subscribeAllHeads", + rpc_params![], + "chain_unsubscribeAllHeads", + ) + .await + .map_err(|e| { + tracing::error!( + target: LOG_TARGET, + ?e, + "Unable to open `chain_subscribeAllHeads` subscription." + ); + e + })?; + let best_subscription = self + .active_client + .subscribe::( + "chain_subscribeNewHeads", + rpc_params![], + "chain_unsubscribeNewHeads", + ) + .await + .map_err(|e| { + tracing::error!( + target: LOG_TARGET, + ?e, + "Unable to open `chain_subscribeNewHeads` subscription." + ); + e + })?; + let finalized_subscription = self + .active_client + .subscribe::( + "chain_subscribeFinalizedHeads", + rpc_params![], + "chain_unsubscribeFinalizedHeads", + ) + .await + .map_err(|e| { + tracing::error!( + target: LOG_TARGET, + ?e, + "Unable to open `chain_subscribeFinalizedHeads` subscription." + ); + e + })?; + + Ok(RelayChainSubscriptions { + import_subscription, + best_subscription, + finalized_subscription, + }) + } + + /// Create a request future that performs an RPC request and sends the results to the caller. + /// In case of a dead websocket connection, it returns the original request parameters to + /// enable retries. + fn create_request( + &self, + method: String, + params: ArrayParams, + response_sender: OneshotSender>, + ) -> BoxFuture<'static, Result<(), RpcDispatcherMessage>> { + let future_client = self.active_client.clone(); + async move { + let resp = future_client.request(&method, params.clone()).await; + + // We should only return the original request in case + // the websocket connection is dead and requires a restart. + // Other errors should be forwarded to the request caller. + if let Err(JsonRpseeError::RestartNeeded(_)) = resp { + return Err(RpcDispatcherMessage::Request(method, params, response_sender)) + } + + if let Err(err) = response_sender.send(resp) { + tracing::debug!( + target: LOG_TARGET, + ?err, + "Recipient no longer interested in request result" + ); + } + Ok(()) + } + .boxed() + } +} + +enum ConnectionStatus { + Connected, + ReconnectRequired(Option), +} + +impl ReconnectingWebsocketWorker { + /// Create new worker. Returns the worker and a channel to register new listeners. + async fn new( + urls: Vec, + ) -> (ReconnectingWebsocketWorker, TokioSender) { + let (tx, rx) = tokio_channel(100); + let worker = ReconnectingWebsocketWorker { + ws_urls: urls, + client_receiver: rx, + imported_header_listeners: Vec::new(), + finalized_header_listeners: Vec::new(), + best_header_listeners: Vec::new(), + }; + (worker, tx) + } + + /// Reconnect via [`ClientManager`] and provide new notification streams. + async fn handle_reconnect( + &mut self, + client_manager: &mut ClientManager, + pending_requests: &mut FuturesUnordered< + BoxFuture<'static, Result<(), RpcDispatcherMessage>>, + >, + first_failed_request: Option, + ) -> Result { + let mut requests_to_retry = Vec::new(); + if let Some(req @ RpcDispatcherMessage::Request(_, _, _)) = first_failed_request { + requests_to_retry.push(req); + } + + // At this point, all pending requests will return an error since the + // websocket connection is dead. So draining the pending requests should be fast. + while !pending_requests.is_empty() { + if let Some(Err(req)) = pending_requests.next().await { + requests_to_retry.push(req); + } + } + + if client_manager.connect_to_new_rpc_server().await.is_err() { + return Err(format!("Unable to find valid external RPC server, shutting down.")) + }; + + for item in requests_to_retry.into_iter() { + if let RpcDispatcherMessage::Request(method, params, response_sender) = item { + pending_requests.push(client_manager.create_request( + method, + params, + response_sender, + )); + }; + } + + client_manager.get_subscriptions().await.map_err(|e| { + format!("Not able to create streams from newly connected RPC server, shutting down. err: {:?}", e) + }) + } + + /// Run this worker to drive notification streams. + /// The worker does the following: + /// - Listen for [`RpcDispatcherMessage`], perform requests and register new listeners for the notification streams + /// - Distribute incoming import, best head and finalization notifications to registered listeners. + /// If an error occurs during sending, the receiver has been closed and we remove the sender from the list. + /// - Find a new valid RPC server to connect to in case the websocket connection is terminated. + /// If the worker is not able to connec to an RPC server from the list, the worker shuts down. + async fn run(mut self) { + let mut pending_requests = FuturesUnordered::new(); + + let urls = std::mem::take(&mut self.ws_urls); + let Ok(mut client_manager) = ClientManager::new(urls).await else { + tracing::error!(target: LOG_TARGET, "No valid RPC url found. Stopping RPC worker."); + return; + }; + let Ok(mut subscriptions) = client_manager.get_subscriptions().await else { + tracing::error!(target: LOG_TARGET, "Unable to fetch subscriptions on initial connection."); + return; + }; + + let mut imported_blocks_cache = + LruCache::new(NonZeroUsize::new(40).expect("40 is nonzero; qed.")); + let mut should_reconnect = ConnectionStatus::Connected; + let mut last_seen_finalized_num: RelayBlockNumber = 0; + loop { + // This branch is taken if the websocket connection to the current RPC server is closed. + if let ConnectionStatus::ReconnectRequired(maybe_failed_request) = should_reconnect { + match self + .handle_reconnect( + &mut client_manager, + &mut pending_requests, + maybe_failed_request, + ) + .await + { + Ok(new_subscriptions) => { + subscriptions = new_subscriptions; + }, + Err(message) => { + tracing::error!( + target: LOG_TARGET, + message, + "Unable to reconnect, stopping worker." + ); + return + }, + } + should_reconnect = ConnectionStatus::Connected; + } + + tokio::select! { + evt = self.client_receiver.recv() => match evt { + Some(RpcDispatcherMessage::RegisterBestHeadListener(tx)) => { + self.best_header_listeners.push(tx); + }, + Some(RpcDispatcherMessage::RegisterImportListener(tx)) => { + self.imported_header_listeners.push(tx) + }, + Some(RpcDispatcherMessage::RegisterFinalizationListener(tx)) => { + self.finalized_header_listeners.push(tx) + }, + Some(RpcDispatcherMessage::Request(method, params, response_sender)) => { + pending_requests.push(client_manager.create_request(method, params, response_sender)); + }, + None => { + tracing::error!(target: LOG_TARGET, "RPC client receiver closed. Stopping RPC Worker."); + return; + } + }, + should_retry = pending_requests.next(), if !pending_requests.is_empty() => { + if let Some(Err(req)) = should_retry { + should_reconnect = ConnectionStatus::ReconnectRequired(Some(req)); + } + }, + import_event = subscriptions.import_subscription.next() => { + match import_event { + Some(Ok(header)) => { + let hash = header.hash(); + if imported_blocks_cache.contains(&hash) { + tracing::debug!( + target: LOG_TARGET, + number = header.number, + ?hash, + "Duplicate imported block header. This might happen after switching to a new RPC node. Skipping distribution." + ); + continue; + } + imported_blocks_cache.put(hash, ()); + distribute_header(header, &mut self.imported_header_listeners); + }, + None => { + tracing::error!(target: LOG_TARGET, "Subscription closed."); + should_reconnect = ConnectionStatus::ReconnectRequired(None); + }, + Some(Err(error)) => { + tracing::error!(target: LOG_TARGET, ?error, "Error in RPC subscription."); + should_reconnect = ConnectionStatus::ReconnectRequired(None); + }, + } + }, + best_header_event = subscriptions.best_subscription.next() => { + match best_header_event { + Some(Ok(header)) => distribute_header(header, &mut self.best_header_listeners), + None => { + tracing::error!(target: LOG_TARGET, "Subscription closed."); + should_reconnect = ConnectionStatus::ReconnectRequired(None); + }, + Some(Err(error)) => { + tracing::error!(target: LOG_TARGET, ?error, "Error in RPC subscription."); + should_reconnect = ConnectionStatus::ReconnectRequired(None); + }, + } + } + finalized_event = subscriptions.finalized_subscription.next() => { + match finalized_event { + Some(Ok(header)) if header.number > last_seen_finalized_num => { + last_seen_finalized_num = header.number; + distribute_header(header, &mut self.finalized_header_listeners); + }, + Some(Ok(header)) => { + tracing::debug!( + target: LOG_TARGET, + number = header.number, + last_seen_finalized_num, + "Duplicate finalized block header. This might happen after switching to a new RPC node. Skipping distribution." + ); + }, + None => { + tracing::error!(target: LOG_TARGET, "Subscription closed."); + should_reconnect = ConnectionStatus::ReconnectRequired(None); + }, + Some(Err(error)) => { + tracing::error!(target: LOG_TARGET, ?error, "Error in RPC subscription."); + should_reconnect = ConnectionStatus::ReconnectRequired(None); + }, + } + } + } + } + } +} diff --git a/client/relay-chain-rpc-interface/src/rpc_client.rs b/client/relay-chain-rpc-interface/src/rpc_client.rs index 3422248735f..d8ef632b693 100644 --- a/client/relay-chain-rpc-interface/src/rpc_client.rs +++ b/client/relay-chain-rpc-interface/src/rpc_client.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . -use backoff::{future::retry_notify, ExponentialBackoff}; +use crate::reconnecting_ws_client::ReconnectingWsClient; use cumulus_primitives_core::{ relay_chain::{ v2::{ @@ -23,211 +23,49 @@ use cumulus_primitives_core::{ PvfCheckStatement, ScrapedOnChainVotes, SessionIndex, SessionInfo, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, }, - CandidateHash, Hash as PHash, Header as PHeader, InboundHrmpMessage, + CandidateHash, Hash as RelayHash, Header as RelayHeader, InboundHrmpMessage, }, InboundDownwardMessage, ParaId, PersistedValidationData, }; use cumulus_relay_chain_interface::{RelayChainError, RelayChainResult}; -use futures::{ - channel::mpsc::{Receiver, Sender}, - StreamExt, -}; -use jsonrpsee::{ - core::{ - client::{Client as JsonRpcClient, ClientT, Subscription, SubscriptionClientT}, - Error as JsonRpseeError, - }, - rpc_params, - types::ParamsSer, - ws_client::WsClientBuilder, -}; +use futures::channel::mpsc::Receiver; +use jsonrpsee::{core::params::ArrayParams, rpc_params}; use parity_scale_codec::{Decode, Encode}; use polkadot_service::{BlockNumber, TaskManager}; use sc_client_api::StorageData; use sc_rpc_api::{state::ReadProof, system::Health}; +use serde::de::DeserializeOwned; use sp_api::RuntimeVersion; use sp_consensus_babe::Epoch; use sp_core::sp_std::collections::btree_map::BTreeMap; -use sp_runtime::DeserializeOwned; use sp_storage::StorageKey; -use std::sync::Arc; -use tokio::sync::mpsc::{ - channel as tokio_channel, Receiver as TokioReceiver, Sender as TokioSender, -}; - pub use url::Url; const LOG_TARGET: &str = "relay-chain-rpc-client"; -const NOTIFICATION_CHANNEL_SIZE_LIMIT: usize = 20; - /// Client that maps RPC methods and deserializes results #[derive(Clone)] pub struct RelayChainRpcClient { /// Websocket client to make calls - ws_client: Arc, - - /// Retry strategy that should be used for requests and subscriptions - retry_strategy: ExponentialBackoff, - - /// Channel to communicate with the RPC worker - to_worker_channel: TokioSender, -} - -/// Worker messages to register new notification listeners -#[derive(Clone, Debug)] -pub enum NotificationRegisterMessage { - RegisterBestHeadListener(Sender), - RegisterImportListener(Sender), - RegisterFinalizationListener(Sender), -} - -/// Worker that should be used in combination with [`RelayChainRpcClient`]. Must be polled to distribute header notifications to listeners. -struct RpcStreamWorker { - // Communication channel with the RPC client - client_receiver: TokioReceiver, - - // Senders to distribute incoming header notifications to - imported_header_listeners: Vec>, - finalized_header_listeners: Vec>, - best_header_listeners: Vec>, - - // Incoming notification subscriptions - rpc_imported_header_subscription: Subscription, - rpc_finalized_header_subscription: Subscription, - rpc_best_header_subscription: Subscription, + ws_client: ReconnectingWsClient, } /// Entry point to create [`RelayChainRpcClient`] and start a worker that distributes notifications. pub async fn create_client_and_start_worker( - url: Url, + urls: Vec, task_manager: &mut TaskManager, ) -> RelayChainResult { - tracing::info!(target: LOG_TARGET, url = %url.to_string(), "Initializing RPC Client"); - let ws_client = WsClientBuilder::default().build(url.as_str()).await?; - - let best_head_stream = RelayChainRpcClient::subscribe_new_best_heads(&ws_client).await?; - let finalized_head_stream = RelayChainRpcClient::subscribe_finalized_heads(&ws_client).await?; - let imported_head_stream = RelayChainRpcClient::subscribe_imported_heads(&ws_client).await?; - - let (worker, sender) = - RpcStreamWorker::new(imported_head_stream, best_head_stream, finalized_head_stream); - let client = RelayChainRpcClient::new(ws_client, sender).await?; + let ws_client = ReconnectingWsClient::new(urls, task_manager).await?; - task_manager - .spawn_essential_handle() - .spawn("relay-chain-rpc-worker", None, worker.run()); + let client = RelayChainRpcClient::new(ws_client).await?; Ok(client) } -fn handle_event_distribution( - event: Option>, - senders: &mut Vec>, -) -> Result<(), String> { - match event { - Some(Ok(header)) => { - senders.retain_mut(|e| { - match e.try_send(header.clone()) { - // Receiver has been dropped, remove Sender from list. - Err(error) if error.is_disconnected() => false, - // Channel is full. This should not happen. - // TODO: Improve error handling here - // https://github.com/paritytech/cumulus/issues/1482 - Err(error) => { - tracing::error!(target: LOG_TARGET, ?error, "Event distribution channel has reached its limit. This can lead to missed notifications."); - true - }, - _ => true, - } - }); - Ok(()) - }, - None => Err("RPC Subscription closed.".to_string()), - Some(Err(err)) => Err(format!("Error in RPC subscription: {}", err)), - } -} - -impl RpcStreamWorker { - /// Create new worker. Returns the worker and a channel to register new listeners. - fn new( - import_sub: Subscription, - best_sub: Subscription, - finalized_sub: Subscription, - ) -> (RpcStreamWorker, TokioSender) { - let (tx, rx) = tokio_channel(100); - let worker = RpcStreamWorker { - client_receiver: rx, - imported_header_listeners: Vec::new(), - finalized_header_listeners: Vec::new(), - best_header_listeners: Vec::new(), - rpc_imported_header_subscription: import_sub, - rpc_best_header_subscription: best_sub, - rpc_finalized_header_subscription: finalized_sub, - }; - (worker, tx) - } - - /// Run this worker to drive notification streams. - /// The worker does two things: - /// 1. Listen for `NotificationRegisterMessage` and register new listeners for the notification streams - /// 2. Distribute incoming import, best head and finalization notifications to registered listeners. - /// If an error occurs during sending, the receiver has been closed and we remove the sender from the list. - pub async fn run(mut self) { - let mut import_sub = self.rpc_imported_header_subscription.fuse(); - let mut best_head_sub = self.rpc_best_header_subscription.fuse(); - let mut finalized_sub = self.rpc_finalized_header_subscription.fuse(); - loop { - tokio::select! { - evt = self.client_receiver.recv() => match evt { - Some(NotificationRegisterMessage::RegisterBestHeadListener(tx)) => { - self.best_header_listeners.push(tx); - }, - Some(NotificationRegisterMessage::RegisterImportListener(tx)) => { - self.imported_header_listeners.push(tx) - }, - Some(NotificationRegisterMessage::RegisterFinalizationListener(tx)) => { - self.finalized_header_listeners.push(tx) - }, - None => { - tracing::error!(target: LOG_TARGET, "RPC client receiver closed. Stopping RPC Worker."); - return; - } - }, - import_event = import_sub.next() => { - if let Err(err) = handle_event_distribution(import_event, &mut self.imported_header_listeners) { - tracing::error!(target: LOG_TARGET, err, "Encountered error while processing imported header notification. Stopping RPC Worker."); - return; - } - }, - best_header_event = best_head_sub.next() => { - if let Err(err) = handle_event_distribution(best_header_event, &mut self.best_header_listeners) { - tracing::error!(target: LOG_TARGET, err, "Encountered error while processing best header notification. Stopping RPC Worker."); - return; - } - } - finalized_event = finalized_sub.next() => { - if let Err(err) = handle_event_distribution(finalized_event, &mut self.finalized_header_listeners) { - tracing::error!(target: LOG_TARGET, err, "Encountered error while processing finalized header notification. Stopping RPC Worker."); - return; - } - } - } - } - } -} - impl RelayChainRpcClient { /// Initialize new RPC Client. - async fn new( - ws_client: JsonRpcClient, - sender: TokioSender, - ) -> RelayChainResult { - let client = RelayChainRpcClient { - to_worker_channel: sender, - ws_client: Arc::new(ws_client), - retry_strategy: ExponentialBackoff::default(), - }; + async fn new(ws_client: ReconnectingWsClient) -> RelayChainResult { + let client = RelayChainRpcClient { ws_client }; Ok(client) } @@ -236,7 +74,7 @@ impl RelayChainRpcClient { pub async fn call_remote_runtime_function( &self, method_name: &str, - hash: PHash, + hash: RelayHash, payload: Option, ) -> RelayChainResult { let payload_bytes = @@ -264,7 +102,7 @@ impl RelayChainRpcClient { async fn request<'a, R>( &self, method: &'a str, - params: Option>, + params: ArrayParams, ) -> Result where R: DeserializeOwned + std::fmt::Debug, @@ -281,39 +119,28 @@ impl RelayChainRpcClient { async fn request_tracing<'a, R, OR>( &self, method: &'a str, - params: Option>, + params: ArrayParams, trace_error: OR, ) -> Result where R: DeserializeOwned + std::fmt::Debug, - OR: Fn(&jsonrpsee::core::Error), + OR: Fn(&RelayChainError), { - retry_notify( - self.retry_strategy.clone(), - || async { - self.ws_client.request(method, params.clone()).await.map_err(|err| match err { - JsonRpseeError::Transport(_) => - backoff::Error::Transient { err, retry_after: None }, - _ => backoff::Error::Permanent(err), - }) - }, - |error, dur| tracing::trace!(target: LOG_TARGET, %error, ?dur, "Encountered transport error, retrying."), - ) - .await - .map_err(|err| { + self.ws_client.request(method, params).await.map_err(|err| { trace_error(&err); - RelayChainError::RpcCallError(method.to_string(), err)}) + RelayChainError::RpcCallError(method.to_string()) + }) } /// Returns information regarding the current epoch. - pub async fn babe_api_current_epoch(&self, at: PHash) -> Result { + pub async fn babe_api_current_epoch(&self, at: RelayHash) -> Result { self.call_remote_runtime_function("BabeApi_current_epoch", at, None::<()>).await } /// Old method to fetch v1 session info. pub async fn parachain_host_session_info_before_version_2( &self, - at: PHash, + at: RelayHash, index: SessionIndex, ) -> Result, RelayChainError> { self.call_remote_runtime_function( @@ -327,8 +154,8 @@ impl RelayChainRpcClient { /// Scrape dispute relevant from on-chain, backing votes and resolved disputes. pub async fn parachain_host_on_chain_votes( &self, - at: PHash, - ) -> Result>, RelayChainError> { + at: RelayHash, + ) -> Result>, RelayChainError> { self.call_remote_runtime_function("ParachainHost_on_chain_votes", at, None::<()>) .await } @@ -336,7 +163,7 @@ impl RelayChainRpcClient { /// Returns code hashes of PVFs that require pre-checking by validators in the active set. pub async fn parachain_host_pvfs_require_precheck( &self, - at: PHash, + at: RelayHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function("ParachainHost_pvfs_require_precheck", at, None::<()>) .await @@ -345,7 +172,7 @@ impl RelayChainRpcClient { /// Submits a PVF pre-checking statement into the transaction pool. pub async fn parachain_host_submit_pvf_check_statement( &self, - at: PHash, + at: RelayHash, stmt: PvfCheckStatement, signature: ValidatorSignature, ) -> Result<(), RelayChainError> { @@ -359,21 +186,21 @@ impl RelayChainRpcClient { /// Get local listen address of the node pub async fn system_local_listen_addresses(&self) -> Result, RelayChainError> { - self.request("system_localListenAddresses", None).await + self.request("system_localListenAddresses", rpc_params![]).await } /// Get system health information pub async fn system_health(&self) -> Result { - self.request("system_health", None).await + self.request("system_health", rpc_params![]).await } /// Get read proof for `storage_keys` pub async fn state_get_read_proof( &self, storage_keys: Vec, - at: Option, - ) -> Result, RelayChainError> { - let params = rpc_params!(storage_keys, at); + at: Option, + ) -> Result, RelayChainError> { + let params = rpc_params![storage_keys, at]; self.request("state_getReadProof", params).await } @@ -381,17 +208,17 @@ impl RelayChainRpcClient { pub async fn state_get_storage( &self, storage_key: StorageKey, - at: Option, + at: Option, ) -> Result, RelayChainError> { - let params = rpc_params!(storage_key, at); + let params = rpc_params![storage_key, at]; self.request("state_getStorage", params).await } /// Get hash of the n-th block in the canon chain. /// /// By default returns latest block hash. - pub async fn chain_get_head(&self, at: Option) -> Result { - let params = rpc_params!(at); + pub async fn chain_get_head(&self, at: Option) -> Result { + let params = rpc_params![at]; self.request("chain_getHead", params).await } @@ -400,7 +227,7 @@ impl RelayChainRpcClient { /// should be the successor of the number of the block. pub async fn parachain_host_validator_groups( &self, - at: PHash, + at: RelayHash, ) -> Result<(Vec>, GroupRotationInfo), RelayChainError> { self.call_remote_runtime_function("ParachainHost_validator_groups", at, None::<()>) .await @@ -409,7 +236,7 @@ impl RelayChainRpcClient { /// Get a vector of events concerning candidates that occurred within a block. pub async fn parachain_host_candidate_events( &self, - at: PHash, + at: RelayHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function("ParachainHost_candidate_events", at, None::<()>) .await @@ -418,7 +245,7 @@ impl RelayChainRpcClient { /// Checks if the given validation outputs pass the acceptance criteria. pub async fn parachain_host_check_validation_outputs( &self, - at: PHash, + at: RelayHash, para_id: ParaId, outputs: CandidateCommitments, ) -> Result { @@ -435,9 +262,9 @@ impl RelayChainRpcClient { /// data hash against an expected one and yields `None` if they're not equal. pub async fn parachain_host_assumed_validation_data( &self, - at: PHash, + at: RelayHash, para_id: ParaId, - expected_hash: PHash, + expected_hash: RelayHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function( "ParachainHost_persisted_assumed_validation_data", @@ -448,16 +275,16 @@ impl RelayChainRpcClient { } /// Get hash of last finalized block. - pub async fn chain_get_finalized_head(&self) -> Result { - self.request("chain_getFinalizedHead", None).await + pub async fn chain_get_finalized_head(&self) -> Result { + self.request("chain_getFinalizedHead", rpc_params![]).await } /// Get hash of n-th block. pub async fn chain_get_block_hash( &self, block_number: Option, - ) -> Result, RelayChainError> { - let params = rpc_params!(block_number); + ) -> Result, RelayChainError> { + let params = rpc_params![block_number]; self.request("chain_getBlockHash", params).await } @@ -468,7 +295,7 @@ impl RelayChainRpcClient { /// and the para already occupies a core. pub async fn parachain_host_persisted_validation_data( &self, - at: PHash, + at: RelayHash, para_id: ParaId, occupied_core_assumption: OccupiedCoreAssumption, ) -> Result, RelayChainError> { @@ -483,7 +310,7 @@ impl RelayChainRpcClient { /// Get the validation code from its hash. pub async fn parachain_host_validation_code_by_hash( &self, - at: PHash, + at: RelayHash, validation_code_hash: ValidationCodeHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function( @@ -498,15 +325,15 @@ impl RelayChainRpcClient { /// Cores are either free or occupied. Free cores can have paras assigned to them. pub async fn parachain_host_availability_cores( &self, - at: PHash, - ) -> Result>, RelayChainError> { + at: RelayHash, + ) -> Result>, RelayChainError> { self.call_remote_runtime_function("ParachainHost_availability_cores", at, None::<()>) .await } /// Get runtime version - pub async fn runtime_version(&self, at: PHash) -> Result { - let params = rpc_params!(at); + pub async fn runtime_version(&self, at: RelayHash) -> Result { + let params = rpc_params![at]; self.request("state_getRuntimeVersion", params).await } @@ -514,7 +341,7 @@ impl RelayChainRpcClient { /// This is a staging method! Do not use on production runtimes! pub async fn parachain_host_staging_get_disputes( &self, - at: PHash, + at: RelayHash, ) -> Result)>, RelayChainError> { self.call_remote_runtime_function("ParachainHost_staging_get_disputes", at, None::<()>) .await @@ -522,7 +349,7 @@ impl RelayChainRpcClient { pub async fn authority_discovery_authorities( &self, - at: PHash, + at: RelayHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function("AuthorityDiscoveryApi_authorities", at, None::<()>) .await @@ -534,7 +361,7 @@ impl RelayChainRpcClient { /// and the para already occupies a core. pub async fn parachain_host_validation_code( &self, - at: PHash, + at: RelayHash, para_id: ParaId, occupied_core_assumption: OccupiedCoreAssumption, ) -> Result, RelayChainError> { @@ -549,7 +376,7 @@ impl RelayChainRpcClient { /// Fetch the hash of the validation code used by a para, making the given `OccupiedCoreAssumption`. pub async fn parachain_host_validation_code_hash( &self, - at: PHash, + at: RelayHash, para_id: ParaId, occupied_core_assumption: OccupiedCoreAssumption, ) -> Result, RelayChainError> { @@ -564,7 +391,7 @@ impl RelayChainRpcClient { /// Get the session info for the given session, if stored. pub async fn parachain_host_session_info( &self, - at: PHash, + at: RelayHash, index: SessionIndex, ) -> Result, RelayChainError> { self.call_remote_runtime_function("ParachainHost_session_info", at, Some(index)) @@ -574,9 +401,9 @@ impl RelayChainRpcClient { /// Get header at specified hash pub async fn chain_get_header( &self, - hash: Option, - ) -> Result, RelayChainError> { - let params = rpc_params!(hash); + hash: Option, + ) -> Result, RelayChainError> { + let params = rpc_params![hash]; self.request("chain_getHeader", params).await } @@ -584,7 +411,7 @@ impl RelayChainRpcClient { /// assigned to occupied cores in `availability_cores` and `None` otherwise. pub async fn parachain_host_candidate_pending_availability( &self, - at: PHash, + at: RelayHash, para_id: ParaId, ) -> Result, RelayChainError> { self.call_remote_runtime_function( @@ -600,7 +427,7 @@ impl RelayChainRpcClient { /// This can be used to instantiate a `SigningContext`. pub async fn parachain_host_session_index_for_child( &self, - at: PHash, + at: RelayHash, ) -> Result { self.call_remote_runtime_function("ParachainHost_session_index_for_child", at, None::<()>) .await @@ -609,7 +436,7 @@ impl RelayChainRpcClient { /// Get the current validators. pub async fn parachain_host_validators( &self, - at: PHash, + at: RelayHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function("ParachainHost_validators", at, None::<()>) .await @@ -620,7 +447,7 @@ impl RelayChainRpcClient { pub async fn parachain_host_inbound_hrmp_channels_contents( &self, para_id: ParaId, - at: PHash, + at: RelayHash, ) -> Result>, RelayChainError> { self.call_remote_runtime_function( "ParachainHost_inbound_hrmp_channels_contents", @@ -634,77 +461,24 @@ impl RelayChainRpcClient { pub async fn parachain_host_dmq_contents( &self, para_id: ParaId, - at: PHash, + at: RelayHash, ) -> Result, RelayChainError> { self.call_remote_runtime_function("ParachainHost_dmq_contents", at, Some(para_id)) .await } /// Get a stream of all imported relay chain headers - pub async fn get_imported_heads_stream(&self) -> Result, RelayChainError> { - let (tx, rx) = futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); - self.send_register_message_to_worker(NotificationRegisterMessage::RegisterImportListener( - tx, - ))?; - Ok(rx) + pub fn get_imported_heads_stream(&self) -> Result, RelayChainError> { + self.ws_client.get_imported_heads_stream() } /// Get a stream of new best relay chain headers - pub async fn get_best_heads_stream(&self) -> Result, RelayChainError> { - let (tx, rx) = futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); - self.send_register_message_to_worker( - NotificationRegisterMessage::RegisterBestHeadListener(tx), - )?; - Ok(rx) + pub fn get_best_heads_stream(&self) -> Result, RelayChainError> { + self.ws_client.get_best_heads_stream() } /// Get a stream of finalized relay chain headers - pub async fn get_finalized_heads_stream(&self) -> Result, RelayChainError> { - let (tx, rx) = futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); - self.send_register_message_to_worker( - NotificationRegisterMessage::RegisterFinalizationListener(tx), - )?; - Ok(rx) - } - - fn send_register_message_to_worker( - &self, - message: NotificationRegisterMessage, - ) -> Result<(), RelayChainError> { - self.to_worker_channel - .try_send(message) - .map_err(|e| RelayChainError::WorkerCommunicationError(e.to_string())) - } - - async fn subscribe_imported_heads( - ws_client: &JsonRpcClient, - ) -> Result, RelayChainError> { - Ok(ws_client - .subscribe::("chain_subscribeAllHeads", None, "chain_unsubscribeAllHeads") - .await?) - } - - async fn subscribe_finalized_heads( - ws_client: &JsonRpcClient, - ) -> Result, RelayChainError> { - Ok(ws_client - .subscribe::( - "chain_subscribeFinalizedHeads", - None, - "chain_unsubscribeFinalizedHeads", - ) - .await?) - } - - async fn subscribe_new_best_heads( - ws_client: &JsonRpcClient, - ) -> Result, RelayChainError> { - Ok(ws_client - .subscribe::( - "chain_subscribeNewHeads", - None, - "chain_unsubscribeFinalizedHeads", - ) - .await?) + pub fn get_finalized_heads_stream(&self) -> Result, RelayChainError> { + self.ws_client.get_finalized_heads_stream() } } diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index 2d87540c222..cd2b147ef93 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -6,19 +6,22 @@ edition = "2021" [dependencies] parking_lot = "0.12.1" +futures = "0.3.24" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-client-cli = { path = "../cli" } @@ -27,3 +30,5 @@ cumulus-client-consensus-common = { path = "../consensus/common" } cumulus-client-pov-recovery = { path = "../pov-recovery" } cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } +cumulus-relay-chain-inprocess-interface = { path = "../relay-chain-inprocess-interface" } +cumulus-relay-chain-minimal-node = { path = "../relay-chain-minimal-node" } diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 067ca1c83f3..4e091c033a7 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -18,30 +18,36 @@ //! //! Provides functions for starting a collator node or a normal full node. +use cumulus_client_cli::CollatorOptions; use cumulus_client_consensus_common::ParachainConsensus; +use cumulus_client_pov_recovery::{PoVRecovery, RecoveryDelay}; use cumulus_primitives_core::{CollectCollationInfo, ParaId}; -use cumulus_relay_chain_interface::RelayChainInterface; +use cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain; +use cumulus_relay_chain_interface::{RelayChainInterface, RelayChainResult}; +use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node; use polkadot_primitives::v2::CollatorPair; + use sc_client_api::{ Backend as BackendT, BlockBackend, BlockchainEvents, Finalizer, UsageProvider, }; -use sc_consensus::{ - import_queue::{ImportQueue, IncomingBlock, Link, RuntimeOrigin}, - BlockImport, -}; +use sc_consensus::{import_queue::ImportQueueService, BlockImport}; use sc_service::{Configuration, TaskManager}; +use sc_telemetry::TelemetryWorkerHandle; use sp_api::ProvideRuntimeApi; use sp_blockchain::HeaderBackend; -use sp_consensus::BlockOrigin; use sp_core::traits::SpawnNamed; -use sp_runtime::{ - traits::{Block as BlockT, NumberFor}, - Justifications, -}; +use sp_runtime::traits::Block as BlockT; + +use futures::channel::mpsc; use std::{sync::Arc, time::Duration}; +// Given the sporadic nature of the explicit recovery operation and the +// possibility to retry infinite times this value is more than enough. +// In practice here we expect no more than one queued messages. +const RECOVERY_CHAN_SIZE: usize = 8; + /// Parameters given to [`start_collator`]. -pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, RCInterface, Spawner, IQ> { +pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, RCInterface, Spawner> { pub block_status: Arc, pub client: Arc, pub announce_block: Arc>) + Send + Sync>, @@ -50,7 +56,7 @@ pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, RCInterface, Spawn pub relay_chain_interface: RCInterface, pub task_manager: &'a mut TaskManager, pub parachain_consensus: Box>, - pub import_queue: IQ, + pub import_queue: Box>, pub collator_key: CollatorPair, pub relay_chain_slot_duration: Duration, } @@ -60,7 +66,7 @@ pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, RCInterface, Spawn /// A collator is similar to a validator in a normal blockchain. /// It is responsible for producing blocks and sending the blocks to a /// parachain validator for validation and inclusion into the relay chain. -pub async fn start_collator<'a, Block, BS, Client, Backend, RCInterface, Spawner, IQ>( +pub async fn start_collator<'a, Block, BS, Client, Backend, RCInterface, Spawner>( StartCollatorParams { block_status, client, @@ -73,7 +79,7 @@ pub async fn start_collator<'a, Block, BS, Client, Backend, RCInterface, Spawner import_queue, collator_key, relay_chain_slot_duration, - }: StartCollatorParams<'a, Block, BS, Client, RCInterface, Spawner, IQ>, + }: StartCollatorParams<'a, Block, BS, Client, RCInterface, Spawner>, ) -> sc_service::error::Result<()> where Block: BlockT, @@ -92,13 +98,15 @@ where Spawner: SpawnNamed + Clone + Send + Sync + 'static, RCInterface: RelayChainInterface + Clone + 'static, Backend: BackendT + 'static, - IQ: ImportQueue + 'static, { + let (recovery_chan_tx, recovery_chan_rx) = mpsc::channel(RECOVERY_CHAN_SIZE); + let consensus = cumulus_client_consensus_common::run_parachain_consensus( para_id, client.clone(), relay_chain_interface.clone(), announce_block.clone(), + Some(recovery_chan_tx), ); task_manager @@ -109,15 +117,16 @@ where .overseer_handle() .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - let pov_recovery = cumulus_client_pov_recovery::PoVRecovery::new( + let pov_recovery = PoVRecovery::new( overseer_handle.clone(), // We want that collators wait at maximum the relay chain slot duration before starting // to recover blocks. - cumulus_client_pov_recovery::RecoveryDelay::WithMax { max: relay_chain_slot_duration }, + RecoveryDelay { min: core::time::Duration::ZERO, max: relay_chain_slot_duration }, client.clone(), import_queue, relay_chain_interface.clone(), para_id, + recovery_chan_rx, ); task_manager @@ -139,21 +148,21 @@ where } /// Parameters given to [`start_full_node`]. -pub struct StartFullNodeParams<'a, Block: BlockT, Client, RCInterface, IQ> { +pub struct StartFullNodeParams<'a, Block: BlockT, Client, RCInterface> { pub para_id: ParaId, pub client: Arc, pub relay_chain_interface: RCInterface, pub task_manager: &'a mut TaskManager, pub announce_block: Arc>) + Send + Sync>, pub relay_chain_slot_duration: Duration, - pub import_queue: IQ, + pub import_queue: Box>, } /// Start a full node for a parachain. /// /// A full node will only sync the given parachain and will follow the /// tip of the chain. -pub fn start_full_node( +pub fn start_full_node( StartFullNodeParams { client, announce_block, @@ -162,7 +171,7 @@ pub fn start_full_node( para_id, relay_chain_slot_duration, import_queue, - }: StartFullNodeParams, + }: StartFullNodeParams, ) -> sc_service::error::Result<()> where Block: BlockT, @@ -176,13 +185,15 @@ where for<'a> &'a Client: BlockImport, Backend: BackendT + 'static, RCInterface: RelayChainInterface + Clone + 'static, - IQ: ImportQueue + 'static, { + let (recovery_chan_tx, recovery_chan_rx) = mpsc::channel(RECOVERY_CHAN_SIZE); + let consensus = cumulus_client_consensus_common::run_parachain_consensus( para_id, client.clone(), relay_chain_interface.clone(), announce_block, + Some(recovery_chan_tx), ); task_manager @@ -193,21 +204,19 @@ where .overseer_handle() .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - let pov_recovery = cumulus_client_pov_recovery::PoVRecovery::new( + let pov_recovery = PoVRecovery::new( overseer_handle, // Full nodes should at least wait 2.5 minutes (assuming 6 seconds slot duration) and // in maximum 5 minutes before starting to recover blocks. Collators should already start // the recovery way before full nodes try to recover a certain block and then share the // block with the network using "the normal way". Full nodes are just the "last resort" // for block recovery. - cumulus_client_pov_recovery::RecoveryDelay::WithMinAndMax { - min: relay_chain_slot_duration * 25, - max: relay_chain_slot_duration * 50, - }, + RecoveryDelay { min: relay_chain_slot_duration * 25, max: relay_chain_slot_duration * 50 }, client, import_queue, relay_chain_interface, para_id, + recovery_chan_rx, ); task_manager @@ -227,35 +236,31 @@ pub fn prepare_node_config(mut parachain_config: Configuration) -> Configuration parachain_config } -/// A shared import queue -/// -/// This is basically a hack until the Substrate side is implemented properly. -#[derive(Clone)] -pub struct SharedImportQueue(Arc>>); - -impl SharedImportQueue { - /// Create a new instance of the shared import queue. - pub fn new + 'static>(import_queue: IQ) -> Self { - Self(Arc::new(parking_lot::Mutex::new(import_queue))) - } -} - -impl ImportQueue for SharedImportQueue { - fn import_blocks(&mut self, origin: BlockOrigin, blocks: Vec>) { - self.0.lock().import_blocks(origin, blocks) - } - - fn import_justifications( - &mut self, - who: RuntimeOrigin, - hash: Block::Hash, - number: NumberFor, - justifications: Justifications, - ) { - self.0.lock().import_justifications(who, hash, number, justifications) - } - - fn poll_actions(&mut self, cx: &mut std::task::Context, link: &mut dyn Link) { - self.0.lock().poll_actions(cx, link) +/// Build a relay chain interface. +/// Will return a minimal relay chain node with RPC +/// client or an inprocess node, based on the [`CollatorOptions`] passed in. +pub async fn build_relay_chain_interface( + polkadot_config: Configuration, + parachain_config: &Configuration, + telemetry_worker_handle: Option, + task_manager: &mut TaskManager, + collator_options: CollatorOptions, + hwbench: Option, +) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { + if !collator_options.relay_chain_rpc_urls.is_empty() { + build_minimal_relay_chain_node( + polkadot_config, + task_manager, + collator_options.relay_chain_rpc_urls, + ) + .await + } else { + build_inprocess_relay_chain( + polkadot_config, + parachain_config, + telemetry_worker_handle, + task_manager, + hwbench, + ) } } diff --git a/docs/documentation.md b/docs/documentation.md new file mode 100644 index 00000000000..383f7ff3c40 --- /dev/null +++ b/docs/documentation.md @@ -0,0 +1 @@ +Was moved [here](https://github.com/paritytech/labels/blob/main/docs/doc_cumulus.md) \ No newline at end of file diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index 33d9089e140..edc4fa8a44f 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -7,17 +7,17 @@ description = "AURA consensus extension pallet for parachains" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } [dev-dependencies] diff --git a/pallets/collator-selection/Cargo.toml b/pallets/collator-selection/Cargo.toml index ec776ac0cd6..cdbf6ad99e7 100644 --- a/pallets/collator-selection/Cargo.toml +++ b/pallets/collator-selection/Cargo.toml @@ -16,27 +16,27 @@ targets = ["x86_64-unknown-linux-gnu"] log = { version = "0.4.17", default-features = false } codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.0.0" } rand = { version = "0.8.5", features = ["std_rng"], default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = ["std"] diff --git a/pallets/collator-selection/src/lib.rs b/pallets/collator-selection/src/lib.rs index 16440344846..34fa5b371ce 100644 --- a/pallets/collator-selection/src/lib.rs +++ b/pallets/collator-selection/src/lib.rs @@ -286,6 +286,7 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Set the list of invulnerable (fixed) collators. + #[pallet::call_index(0)] #[pallet::weight(T::WeightInfo::set_invulnerables(new.len() as u32))] pub fn set_invulnerables( origin: OriginFor, @@ -315,6 +316,7 @@ pub mod pallet { /// Set the ideal number of collators (not including the invulnerables). /// If lowering this number, then the number of running collators could be higher than this figure. /// Aside from that edge case, there should be no other way to have more collators than the desired number. + #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::set_desired_candidates())] pub fn set_desired_candidates( origin: OriginFor, @@ -331,6 +333,7 @@ pub mod pallet { } /// Set the candidacy bond amount. + #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::set_candidacy_bond())] pub fn set_candidacy_bond( origin: OriginFor, @@ -346,6 +349,7 @@ pub mod pallet { /// registered session keys and (b) be able to reserve the `CandidacyBond`. /// /// This call is not available to `Invulnerable` collators. + #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::register_as_candidate(T::MaxCandidates::get()))] pub fn register_as_candidate(origin: OriginFor) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; @@ -391,6 +395,7 @@ pub mod pallet { /// This call will fail if the total number of candidates would drop below `MinCandidates`. /// /// This call is not available to `Invulnerable` collators. + #[pallet::call_index(4)] #[pallet::weight(T::WeightInfo::leave_intent(T::MaxCandidates::get()))] pub fn leave_intent(origin: OriginFor) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; diff --git a/pallets/collator-selection/src/mock.rs b/pallets/collator-selection/src/mock.rs index 4b3cc497731..baa4655cce6 100644 --- a/pallets/collator-selection/src/mock.rs +++ b/pallets/collator-selection/src/mock.rs @@ -17,7 +17,7 @@ use super::*; use crate as collator_selection; use frame_support::{ ord_parameter_types, parameter_types, - traits::{FindAuthor, GenesisBuild, ValidatorRegistration}, + traits::{ConstU32, ConstU64, FindAuthor, GenesisBuild, ValidatorRegistration}, PalletId, }; use frame_system as system; @@ -115,20 +115,16 @@ impl pallet_authorship::Config for Test { type EventHandler = CollatorSelection; } -parameter_types! { - pub const MinimumPeriod: u64 = 1; -} - impl pallet_timestamp::Config for Test { type Moment = u64; type OnTimestampSet = Aura; - type MinimumPeriod = MinimumPeriod; + type MinimumPeriod = ConstU64<1>; type WeightInfo = (); } impl pallet_aura::Config for Test { type AuthorityId = sp_consensus_aura::sr25519::AuthorityId; - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; type DisabledValidators = (); } @@ -192,7 +188,6 @@ parameter_types! { pub const MaxCandidates: u32 = 20; pub const MaxInvulnerables: u32 = 20; pub const MinCandidates: u32 = 1; - pub const MaxAuthorities: u32 = 100_000; } pub struct IsRegistered; diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index bbfe714285c..bf8f180582c 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -7,24 +7,24 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ], default-features = false } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } [features] default = [ "std" ] diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 75ebe2c395f..f2a5b2a305a 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -27,7 +27,7 @@ use codec::{Decode, DecodeLimit, Encode}; use cumulus_primitives_core::{relay_chain::BlockNumber as RelayBlockNumber, DmpMessageHandler}; use frame_support::{ traits::EnsureOrigin, - weights::{constants::WEIGHT_PER_MILLIS, Weight}, + weights::{constants::WEIGHT_REF_TIME_PER_MILLIS, Weight}, }; pub use pallet::*; use scale_info::TypeInfo; @@ -38,6 +38,8 @@ use xcm::{ VersionedXcm, MAX_XCM_DECODE_DEPTH, }; +const DEFAULT_POV_SIZE: u64 = 64 * 1024; // 64 KB + #[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] pub struct ConfigData { /// The maximum amount of weight any individual message may consume. Messages above this weight @@ -49,7 +51,10 @@ pub struct ConfigData { impl Default for ConfigData { fn default() -> Self { Self { - max_individual: 10u64 * WEIGHT_PER_MILLIS, // 10 ms of execution time maximum by default + max_individual: Weight::from_parts( + 10u64 * WEIGHT_REF_TIME_PER_MILLIS, // 10 ms of execution time maximum by default + DEFAULT_POV_SIZE, // 64 KB of proof size by default + ), } } } @@ -151,6 +156,7 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. + #[pallet::call_index(0)] #[pallet::weight(Weight::from_ref_time(weight_limit.saturating_add(1_000_000)))] pub fn service_overweight( origin: OriginFor, diff --git a/pallets/dmp-queue/src/migration.rs b/pallets/dmp-queue/src/migration.rs index cfd8a1f78e3..27b839ed8dd 100644 --- a/pallets/dmp-queue/src/migration.rs +++ b/pallets/dmp-queue/src/migration.rs @@ -16,11 +16,11 @@ //! A module that is responsible for migration of storage. -use crate::{Config, Pallet, Store}; +use crate::{Config, Pallet, Store, DEFAULT_POV_SIZE}; use frame_support::{ pallet_prelude::*, traits::StorageVersion, - weights::{constants::WEIGHT_PER_MILLIS, Weight}, + weights::{constants::WEIGHT_REF_TIME_PER_MILLIS, Weight}, }; use xcm::latest::Weight as XcmWeight; @@ -51,7 +51,7 @@ mod v0 { impl Default for ConfigData { fn default() -> Self { - ConfigData { max_individual: 10u64 * WEIGHT_PER_MILLIS.ref_time() } + ConfigData { max_individual: 10u64 * WEIGHT_REF_TIME_PER_MILLIS } } } } @@ -63,7 +63,9 @@ mod v0 { /// `migrate_to_latest`. pub fn migrate_to_v1() -> Weight { let translate = |pre: v0::ConfigData| -> super::ConfigData { - super::ConfigData { max_individual: Weight::from_ref_time(pre.max_individual) } + super::ConfigData { + max_individual: Weight::from_parts(pre.max_individual, DEFAULT_POV_SIZE), + } }; if let Err(_) = as Store>::Configuration::translate(|pre| pre.map(translate)) { @@ -96,6 +98,7 @@ mod tests { let v1 = crate::Configuration::::get(); assert_eq!(v0.max_individual, v1.max_individual.ref_time()); + assert_eq!(v1.max_individual.proof_size(), DEFAULT_POV_SIZE); }); } } diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index a9c3568d717..4e75668f367 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -6,28 +6,28 @@ edition = "2021" description = "Base pallet for cumulus-based parachains" [dependencies] -bytes = { version = "1.2.1", default-features = false } +bytes = { version = "1.3.0", default-features = false } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -environmental = { version = "1.1.2", default-features = false } +environmental = { version = "1.1.4", default-features = false } impl-trait-for-tuples = "0.2.1" log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-externalities = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-externalities = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "release-v0.9.36" } # Cumulus cumulus-pallet-parachain-system-proc-macro = { path = "proc-macro", default-features = false } @@ -39,10 +39,10 @@ hex-literal = "0.3.4" lazy_static = "1.4" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 0620702e427..3ebbef35968 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -9,9 +9,9 @@ description = "Proc macros provided by the parachain-system pallet" proc-macro = true [dependencies] -syn = "1.0.102" -proc-macro2 = "1.0.47" -quote = "1.0.21" +syn = "1.0.107" +proc-macro2 = "1.0.49" +quote = "1.0.23" proc-macro-crate = "1.2.1" [features] diff --git a/pallets/parachain-system/src/lib.rs b/pallets/parachain-system/src/lib.rs index 90c9a8187cf..bded1c1cc07 100644 --- a/pallets/parachain-system/src/lib.rs +++ b/pallets/parachain-system/src/lib.rs @@ -141,6 +141,7 @@ pub mod pallet { #[pallet::pallet] #[pallet::storage_version(migration::STORAGE_VERSION)] + #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -338,6 +339,7 @@ pub mod pallet { /// /// As a side effect, this function upgrades the current validation function /// if the appropriate time has come. + #[pallet::call_index(0)] #[pallet::weight((0, DispatchClass::Mandatory))] // TODO: This weight should be corrected. pub fn set_validation_data( @@ -434,6 +436,7 @@ pub mod pallet { Ok(PostDispatchInfo { actual_weight: Some(total_weight), pays_fee: Pays::No }) } + #[pallet::call_index(1)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_send_upward_message( origin: OriginFor, @@ -444,6 +447,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(2)] #[pallet::weight((1_000_000, DispatchClass::Operational))] pub fn authorize_upgrade(origin: OriginFor, code_hash: T::Hash) -> DispatchResult { ensure_root(origin)?; @@ -454,6 +458,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(3)] #[pallet::weight(1_000_000)] pub fn enact_authorized_upgrade( _: OriginFor, diff --git a/pallets/parachain-system/src/migration.rs b/pallets/parachain-system/src/migration.rs index f5eff920ae1..514675b89ac 100644 --- a/pallets/parachain-system/src/migration.rs +++ b/pallets/parachain-system/src/migration.rs @@ -14,18 +14,18 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . -use crate::{Config, Pallet}; +use crate::{Config, Pallet, Store}; use frame_support::{ traits::{Get, StorageVersion}, weights::Weight, }; /// The current storage version. -pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); +pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(2); /// Call this during the next runtime upgrade for this module. pub fn on_runtime_upgrade() -> Weight { - let mut weight: Weight = Weight::zero(); + let mut weight: Weight = T::DbWeight::get().reads(2); if StorageVersion::get::>() == 0 { weight = weight @@ -34,9 +34,46 @@ pub fn on_runtime_upgrade() -> Weight { StorageVersion::new(1).put::>(); } + if StorageVersion::get::>() == 1 { + weight = weight + .saturating_add(v2::migrate::()) + .saturating_add(T::DbWeight::get().writes(1)); + STORAGE_VERSION.put::>(); + } + weight } +/// V2: Migrate to 2D weights for ReservedXcmpWeightOverride and ReservedDmpWeightOverride. +mod v2 { + use super::*; + const DEFAULT_POV_SIZE: u64 = 64 * 1024; // 64 KB + + pub fn migrate() -> Weight { + let translate = |pre: u64| -> Weight { Weight::from_parts(pre, DEFAULT_POV_SIZE) }; + + if as Store>::ReservedXcmpWeightOverride::translate(|pre| pre.map(translate)) + .is_err() + { + log::error!( + target: "parachain_system", + "unexpected error when performing translation of the ReservedXcmpWeightOverride type during storage upgrade to v2" + ); + } + + if as Store>::ReservedDmpWeightOverride::translate(|pre| pre.map(translate)) + .is_err() + { + log::error!( + target: "parachain_system", + "unexpected error when performing translation of the ReservedDmpWeightOverride type during storage upgrade to v2" + ); + } + + T::DbWeight::get().reads_writes(2, 2) + } +} + /// V1: `LastUpgrade` block number is removed from the storage since the upgrade /// mechanism now uses signals instead of block offsets. mod v1 { diff --git a/pallets/session-benchmarking/Cargo.toml b/pallets/session-benchmarking/Cargo.toml index 60bd4f6fc78..9733756a59f 100644 --- a/pallets/session-benchmarking/Cargo.toml +++ b/pallets/session-benchmarking/Cargo.toml @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] parity-scale-codec = { version = "3.2.1", default-features = false } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = ["std"] diff --git a/pallets/solo-to-para/Cargo.toml b/pallets/solo-to-para/Cargo.toml index 954facb0579..5a6c0a5dbf1 100644 --- a/pallets/solo-to-para/Cargo.toml +++ b/pallets/solo-to-para/Cargo.toml @@ -7,17 +7,17 @@ description = "Adds functionality to migrate from a Solo to a Parachain" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-parachain-system = { default-features = false, path = "../parachain-system" } diff --git a/pallets/solo-to-para/src/lib.rs b/pallets/solo-to-para/src/lib.rs index b1e7c99d6a9..efa61c8ebda 100644 --- a/pallets/solo-to-para/src/lib.rs +++ b/pallets/solo-to-para/src/lib.rs @@ -16,24 +16,12 @@ #![cfg_attr(not(feature = "std"), no_std)] -use codec::{Decode, Encode}; use cumulus_pallet_parachain_system as parachain_system; -use frame_support::{ - dispatch::{DispatchInfo, DispatchResult}, - pallet_prelude::*, -}; +use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; pub use pallet::*; use polkadot_primitives::v2::PersistedValidationData; -use scale_info::TypeInfo; -use sp_runtime::{ - traits::{DispatchInfoOf, Dispatchable, SignedExtension}, - transaction_validity::{ - InvalidTransaction, TransactionLongevity, TransactionPriority, TransactionValidity, - TransactionValidityError, ValidTransaction, - }, -}; -use sp_std::{prelude::*, vec::Vec}; +use sp_std::vec::Vec; #[frame_support::pallet] pub mod pallet { @@ -73,6 +61,7 @@ pub mod pallet { #[pallet::call] impl Pallet { + #[pallet::call_index(0)] #[pallet::weight(0)] pub fn schedule_migration( origin: OriginFor, @@ -110,76 +99,4 @@ pub mod pallet { crate::Pallet::::set_pending_custom_validation_head_data(); } } - - /// Ensure that signed transactions are only valid if they are signed by root. - #[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo, Default)] - #[scale_info(skip_type_params(T))] - pub struct CheckSudo(sp_std::marker::PhantomData); - - impl CheckSudo { - pub fn new() -> Self { - Self(Default::default()) - } - } - - impl sp_std::fmt::Debug for CheckSudo { - #[cfg(feature = "std")] - fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - write!(f, "CheckSudo") - } - - #[cfg(not(feature = "std"))] - fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - Ok(()) - } - } - - impl SignedExtension for CheckSudo - where - ::RuntimeCall: Dispatchable, - { - type AccountId = T::AccountId; - type Call = ::RuntimeCall; - type AdditionalSigned = (); - type Pre = (); - const IDENTIFIER: &'static str = "CheckSudo"; - - fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { - Ok(()) - } - - fn pre_dispatch( - self, - who: &Self::AccountId, - call: &Self::Call, - info: &DispatchInfoOf, - len: usize, - ) -> Result { - Ok(self.validate(who, call, info, len).map(|_| ())?) - } - - fn validate( - &self, - who: &Self::AccountId, - _call: &Self::Call, - info: &DispatchInfoOf, - _len: usize, - ) -> TransactionValidity { - let root_account = match pallet_sudo::Pallet::::key() { - Some(account) => account, - None => return Err(InvalidTransaction::BadSigner.into()), - }; - - if *who == root_account { - Ok(ValidTransaction { - priority: info.weight.ref_time() as TransactionPriority, - longevity: TransactionLongevity::max_value(), - propagate: true, - ..Default::default() - }) - } else { - Err(InvalidTransaction::BadSigner.into()) - } - } - } } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index b54eb6bdb91..3fac286ec33 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -6,15 +6,15 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/pallets/xcmp-queue/Cargo.toml b/pallets/xcmp-queue/Cargo.toml index 58f575fb1fe..5ce5066b3db 100644 --- a/pallets/xcmp-queue/Cargo.toml +++ b/pallets/xcmp-queue/Cargo.toml @@ -8,33 +8,33 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ], default-features = false } log = { version = "0.4.17", default-features = false } rand_chacha = { version = "0.3.0", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } # Optional import for benchmarking -frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [dev-dependencies] # Substrate -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-pallet-parachain-system = { path = "../parachain-system" } diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index 6745e192212..bb062470c07 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -45,7 +45,7 @@ use cumulus_primitives_core::{ }; use frame_support::{ traits::EnsureOrigin, - weights::{constants::WEIGHT_PER_MILLIS, Weight}, + weights::{constants::WEIGHT_REF_TIME_PER_MILLIS, Weight}, }; use rand_chacha::{ rand_core::{RngCore, SeedableRng}, @@ -66,6 +66,7 @@ pub use pallet::*; pub type OverweightIndex = u64; const LOG_TARGET: &str = "xcmp_queue"; +const DEFAULT_POV_SIZE: u64 = 64 * 1024; // 64 KB #[frame_support::pallet] pub mod pallet { @@ -133,6 +134,7 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. + #[pallet::call_index(0)] #[pallet::weight((Weight::from_ref_time(weight_limit.saturating_add(1_000_000)), DispatchClass::Operational,))] pub fn service_overweight( origin: OriginFor, @@ -159,6 +161,7 @@ pub mod pallet { /// Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. /// /// - `origin`: Must pass `ControllerOrigin`. + #[pallet::call_index(1)] #[pallet::weight((T::DbWeight::get().writes(1), DispatchClass::Operational,))] pub fn suspend_xcm_execution(origin: OriginFor) -> DispatchResult { T::ControllerOrigin::ensure_origin(origin)?; @@ -173,6 +176,7 @@ pub mod pallet { /// Note that this function doesn't change the status of the in/out bound channels. /// /// - `origin`: Must pass `ControllerOrigin`. + #[pallet::call_index(2)] #[pallet::weight((T::DbWeight::get().writes(1), DispatchClass::Operational,))] pub fn resume_xcm_execution(origin: OriginFor) -> DispatchResult { T::ControllerOrigin::ensure_origin(origin)?; @@ -187,6 +191,7 @@ pub mod pallet { /// /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.suspend_value` + #[pallet::call_index(3)] #[pallet::weight((T::WeightInfo::set_config_with_u32(), DispatchClass::Operational,))] pub fn update_suspend_threshold(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; @@ -200,6 +205,7 @@ pub mod pallet { /// /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.drop_threshold` + #[pallet::call_index(4)] #[pallet::weight((T::WeightInfo::set_config_with_u32(),DispatchClass::Operational,))] pub fn update_drop_threshold(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; @@ -213,6 +219,7 @@ pub mod pallet { /// /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.resume_threshold` + #[pallet::call_index(5)] #[pallet::weight((T::WeightInfo::set_config_with_u32(), DispatchClass::Operational,))] pub fn update_resume_threshold(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; @@ -225,6 +232,7 @@ pub mod pallet { /// /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.threshold_weight` + #[pallet::call_index(6)] #[pallet::weight((T::WeightInfo::set_config_with_weight(), DispatchClass::Operational,))] pub fn update_threshold_weight(origin: OriginFor, new: XcmWeight) -> DispatchResult { ensure_root(origin)?; @@ -238,6 +246,7 @@ pub mod pallet { /// /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.weight_restrict_decay`. + #[pallet::call_index(7)] #[pallet::weight((T::WeightInfo::set_config_with_weight(), DispatchClass::Operational,))] pub fn update_weight_restrict_decay( origin: OriginFor, @@ -256,6 +265,7 @@ pub mod pallet { /// /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.xcmp_max_individual_weight`. + #[pallet::call_index(8)] #[pallet::weight((T::WeightInfo::set_config_with_weight(), DispatchClass::Operational,))] pub fn update_xcmp_max_individual_weight( origin: OriginFor, @@ -462,7 +472,10 @@ impl Default for QueueConfigData { resume_threshold: 1, threshold_weight: Weight::from_ref_time(100_000), weight_restrict_decay: Weight::from_ref_time(2), - xcmp_max_individual_weight: 20u64 * WEIGHT_PER_MILLIS, + xcmp_max_individual_weight: Weight::from_parts( + 20u64 * WEIGHT_REF_TIME_PER_MILLIS, + DEFAULT_POV_SIZE, + ), } } } diff --git a/pallets/xcmp-queue/src/migration.rs b/pallets/xcmp-queue/src/migration.rs index e44a053b761..5eb808162f6 100644 --- a/pallets/xcmp-queue/src/migration.rs +++ b/pallets/xcmp-queue/src/migration.rs @@ -16,11 +16,11 @@ //! A module that is responsible for migration of storage. -use crate::{Config, Pallet, Store}; +use crate::{Config, Pallet, Store, DEFAULT_POV_SIZE}; use frame_support::{ pallet_prelude::*, traits::StorageVersion, - weights::{constants::WEIGHT_PER_MILLIS, Weight}, + weights::{constants::WEIGHT_REF_TIME_PER_MILLIS, Weight}, }; use xcm::latest::Weight as XcmWeight; @@ -62,7 +62,7 @@ mod v1 { resume_threshold: 1, threshold_weight: 100_000, weight_restrict_decay: 2, - xcmp_max_individual_weight: 20u64 * WEIGHT_PER_MILLIS.ref_time(), + xcmp_max_individual_weight: 20u64 * WEIGHT_REF_TIME_PER_MILLIS, } } } @@ -81,7 +81,10 @@ pub fn migrate_to_v2() -> Weight { resume_threshold: pre.resume_threshold, threshold_weight: Weight::from_ref_time(pre.threshold_weight), weight_restrict_decay: Weight::from_ref_time(pre.weight_restrict_decay), - xcmp_max_individual_weight: Weight::from_ref_time(pre.xcmp_max_individual_weight), + xcmp_max_individual_weight: Weight::from_parts( + pre.xcmp_max_individual_weight, + DEFAULT_POV_SIZE, + ), } }; diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index 1586e313b5a..17da2356a45 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -218,20 +218,26 @@ fn update_weight_restrict_decay_works() { fn update_xcmp_max_individual_weight() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); - assert_eq!(data.xcmp_max_individual_weight, 20u64 * WEIGHT_PER_MILLIS); + assert_eq!( + data.xcmp_max_individual_weight, + Weight::from_parts(20u64 * WEIGHT_REF_TIME_PER_MILLIS, DEFAULT_POV_SIZE), + ); assert_ok!(XcmpQueue::update_xcmp_max_individual_weight( RuntimeOrigin::root(), - 30u64 * WEIGHT_PER_MILLIS.ref_time() + 30u64 * WEIGHT_REF_TIME_PER_MILLIS )); assert_noop!( XcmpQueue::update_xcmp_max_individual_weight( RuntimeOrigin::signed(3), - 10u64 * WEIGHT_PER_MILLIS.ref_time() + 10u64 * WEIGHT_REF_TIME_PER_MILLIS ), BadOrigin ); let data: QueueConfigData = >::get(); - assert_eq!(data.xcmp_max_individual_weight, 30u64 * WEIGHT_PER_MILLIS); + assert_eq!( + data.xcmp_max_individual_weight, + Weight::from_ref_time(30u64 * WEIGHT_REF_TIME_PER_MILLIS) + ); }); } diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 5757bcecf6f..eff2f583801 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,54 +10,55 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "4.0.17", features = ["derive"] } +clap = { version = "4.0.29", features = ["derive"] } log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } -serde = { version = "1.0.145", features = ["derive"] } -jsonrpsee = { version = "0.15.1", features = ["server"] } +serde = { version = "1.0.151", features = ["derive"] } +jsonrpsee = { version = "0.16.2", features = ["server"] } # Local parachain-template-runtime = { path = "../runtime" } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-cli = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-service = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } @@ -67,18 +68,19 @@ cumulus-client-network = { path = "../../client/network" } cumulus-client-service = { path = "../../client/service" } cumulus-primitives-core = { path = "../../primitives/core" } cumulus-primitives-parachain-inherent = { path = "../../primitives/parachain-inherent" } -cumulus-relay-chain-inprocess-interface = { path = "../../client/relay-chain-inprocess-interface" } cumulus-relay-chain-interface = { path = "../../client/relay-chain-interface" } -cumulus-relay-chain-rpc-interface = { path = "../../client/relay-chain-rpc-interface" } -cumulus-relay-chain-minimal-node = { path = "../../client/relay-chain-minimal-node" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [] runtime-benchmarks = [ + "try-runtime-cli/try-runtime", "parachain-template-runtime/runtime-benchmarks", "polkadot-cli/runtime-benchmarks", ] -try-runtime = ["parachain-template-runtime/try-runtime"] +try-runtime = [ + "try-runtime-cli/try-runtime", + "parachain-template-runtime/try-runtime" +] diff --git a/parachain-template/node/src/cli.rs b/parachain-template/node/src/cli.rs index 99bb0a96bc9..1da49b3b168 100644 --- a/parachain-template/node/src/cli.rs +++ b/parachain-template/node/src/cli.rs @@ -36,7 +36,12 @@ pub enum Subcommand { Benchmark(frame_benchmarking_cli::BenchmarkCmd), /// Try some testing command against a specified runtime state. + #[cfg(feature = "try-runtime")] TryRuntime(try_runtime_cli::TryRuntimeCmd), + + /// Errors since the binary was not build with `--features try-runtime`. + #[cfg(not(feature = "try-runtime"))] + TryRuntime, } #[derive(Debug, clap::Parser)] diff --git a/parachain-template/node/src/command.rs b/parachain-template/node/src/command.rs index 837cd15abf5..581cf97dfaf 100644 --- a/parachain-template/node/src/command.rs +++ b/parachain-template/node/src/command.rs @@ -10,10 +10,7 @@ use sc_cli::{ ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli, }; -use sc_service::{ - config::{BasePath, PrometheusConfig}, - TaskManager, -}; +use sc_service::config::{BasePath, PrometheusConfig}; use sp_core::hexdisplay::HexDisplay; use sp_runtime::traits::{AccountIdConversion, Block as BlockT}; @@ -220,7 +217,6 @@ pub fn run() -> Result<()> { let partials = new_partial(&config)?; let db = partials.backend.expose_db(); let storage = partials.backend.expose_storage(); - cmd.run(config, partials.client.clone(), db, storage) }), BenchmarkCmd::Machine(cmd) => @@ -231,23 +227,30 @@ pub fn run() -> Result<()> { _ => Err("Benchmarking sub-command unsupported".into()), } }, + #[cfg(feature = "try-runtime")] Some(Subcommand::TryRuntime(cmd)) => { - if cfg!(feature = "try-runtime") { - let runner = cli.create_runner(cmd)?; - - // grab the task manager. - let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); - let task_manager = - TaskManager::new(runner.config().tokio_handle.clone(), *registry) - .map_err(|e| format!("Error: {:?}", e))?; - - runner.async_run(|config| { - Ok((cmd.run::(config), task_manager)) - }) - } else { - Err("Try-runtime must be enabled by `--features try-runtime`.".into()) - } + let runner = cli.create_runner(cmd)?; + + use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + type HostFunctionsOf = ExtendedHostFunctions< + sp_io::SubstrateHostFunctions, + ::ExtendHostFunctions, + >; + + // grab the task manager. + let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(runner.config().tokio_handle.clone(), *registry) + .map_err(|e| format!("Error: {:?}", e))?; + + runner.async_run(|_| { + Ok((cmd.run::>(), task_manager)) + }) }, + #[cfg(not(feature = "try-runtime"))] + Some(Subcommand::TryRuntime) => Err("Try-runtime was not enabled when building the node. \ + You can enable it with `--features try-runtime`." + .into()), None => { let runner = cli.create_runner(&cli.run.normalize())?; let collator_options = cli.run.collator_options(); @@ -291,7 +294,7 @@ pub fn run() -> Result<()> { info!("Parachain genesis state: {}", genesis_state); info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); - if collator_options.relay_chain_rpc_url.is_some() && cli.relay_chain_args.len() > 0 { + if !collator_options.relay_chain_rpc_urls.is_empty() && cli.relay_chain_args.len() > 0 { warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); } diff --git a/parachain-template/node/src/service.rs b/parachain-template/node/src/service.rs index 0980bb2cf78..a8ee57cadbf 100644 --- a/parachain-template/node/src/service.rs +++ b/parachain-template/node/src/service.rs @@ -9,17 +9,19 @@ use parachain_template_runtime::{opaque::Block, Hash, RuntimeApi}; // Cumulus Imports use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, SlotProportion}; -use cumulus_client_consensus_common::ParachainConsensus; +use cumulus_client_consensus_common::{ + ParachainBlockImport as TParachainBlockImport, ParachainConsensus, +}; use cumulus_client_network::BlockAnnounceValidator; use cumulus_client_service::{ - prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams, + build_relay_chain_interface, prepare_node_config, start_collator, start_full_node, + StartCollatorParams, StartFullNodeParams, }; use cumulus_primitives_core::ParaId; -use cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain; -use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayChainResult}; -use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node; +use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface}; // Substrate Imports +use sc_consensus::ImportQueue; use sc_executor::NativeElseWasmExecutor; use sc_network::NetworkService; use sc_network_common::service::NetworkBlock; @@ -28,8 +30,6 @@ use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerH use sp_keystore::SyncCryptoStorePtr; use substrate_prometheus_endpoint::Registry; -use polkadot_service::CollatorPair; - /// Native executor type. pub struct ParachainNativeExecutor; @@ -51,6 +51,8 @@ type ParachainClient = TFullClient; type ParachainBackend = TFullBackend; +type ParachainBlockImport = TParachainBlockImport, ParachainBackend>; + /// Starts a `ServiceBuilder` for a full service. /// /// Use this macro if you don't actually need the full service, but just the builder in order to @@ -64,7 +66,7 @@ pub fn new_partial( (), sc_consensus::DefaultImportQueue, sc_transaction_pool::FullPool, - (Option, Option), + (ParachainBlockImport, Option, Option), >, sc_service::Error, > { @@ -109,8 +111,11 @@ pub fn new_partial( client.clone(), ); + let block_import = ParachainBlockImport::new(client.clone(), backend.clone()); + let import_queue = build_import_queue( client.clone(), + block_import.clone(), config, telemetry.as_ref().map(|telemetry| telemetry.handle()), &task_manager, @@ -124,31 +129,10 @@ pub fn new_partial( task_manager, transaction_pool, select_chain: (), - other: (telemetry, telemetry_worker_handle), + other: (block_import, telemetry, telemetry_worker_handle), }) } -async fn build_relay_chain_interface( - polkadot_config: Configuration, - parachain_config: &Configuration, - telemetry_worker_handle: Option, - task_manager: &mut TaskManager, - collator_options: CollatorOptions, - hwbench: Option, -) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { - match collator_options.relay_chain_rpc_url { - Some(relay_chain_url) => - build_minimal_relay_chain_node(polkadot_config, task_manager, relay_chain_url).await, - None => build_inprocess_relay_chain( - polkadot_config, - parachain_config, - telemetry_worker_handle, - task_manager, - hwbench, - ), - } -} - /// Start a node with the given parachain `Configuration` and relay chain `Configuration`. /// /// This is the actual implementation that is abstract over the executor and the runtime api. @@ -157,13 +141,13 @@ async fn start_node_impl( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc)> { let parachain_config = prepare_node_config(parachain_config); let params = new_partial(¶chain_config)?; - let (mut telemetry, telemetry_worker_handle) = params.other; + let (block_import, mut telemetry, telemetry_worker_handle) = params.other; let client = params.client.clone(); let backend = params.backend.clone(); @@ -183,26 +167,37 @@ async fn start_node_impl( s => s.to_string().into(), })?; - let block_announce_validator = BlockAnnounceValidator::new(relay_chain_interface.clone(), id); + let block_announce_validator = + BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id); let force_authoring = parachain_config.force_authoring; let validator = parachain_config.role.is_authority(); let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); - let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); + let import_queue_service = params.import_queue.service(); + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), - import_queue: import_queue.clone(), + import_queue: params.import_queue, block_announce_validator_builder: Some(Box::new(|_| { Box::new(block_announce_validator) })), warp_sync: None, })?; + if parachain_config.offchain_worker.enabled { + sc_service::build_offchain_workers( + ¶chain_config, + task_manager.spawn_handle(), + client.clone(), + network.clone(), + ); + } + let rpc_builder = { let client = client.clone(); let transaction_pool = transaction_pool.clone(); @@ -225,7 +220,7 @@ async fn start_node_impl( task_manager: &mut task_manager, config: parachain_config, keystore: params.keystore_container.sync_keystore(), - backend: backend.clone(), + backend, network: network.clone(), system_rpc_tx, tx_handler_controller, @@ -255,6 +250,7 @@ async fn start_node_impl( if validator { let parachain_consensus = build_consensus( client.clone(), + block_import, prometheus_registry.as_ref(), telemetry.as_ref().map(|t| t.handle()), &task_manager, @@ -263,12 +259,12 @@ async fn start_node_impl( network, params.keystore_container.sync_keystore(), force_authoring, - id, + para_id, )?; let spawner = task_manager.spawn_handle(); let params = StartCollatorParams { - para_id: id, + para_id, block_status: client.clone(), announce_block, client: client.clone(), @@ -276,7 +272,7 @@ async fn start_node_impl( relay_chain_interface, spawner, parachain_consensus, - import_queue, + import_queue: import_queue_service, collator_key: collator_key.expect("Command line arguments do not allow this. qed"), relay_chain_slot_duration, }; @@ -287,10 +283,10 @@ async fn start_node_impl( client: client.clone(), announce_block, task_manager: &mut task_manager, - para_id: id, + para_id, relay_chain_interface, relay_chain_slot_duration, - import_queue, + import_queue: import_queue_service, }; start_full_node(params)?; @@ -304,6 +300,7 @@ async fn start_node_impl( /// Build the import queue for the parachain runtime. fn build_import_queue( client: Arc, + block_import: ParachainBlockImport, config: &Configuration, telemetry: Option, task_manager: &TaskManager, @@ -318,8 +315,8 @@ fn build_import_queue( _, _, >(cumulus_client_consensus_aura::ImportQueueParams { - block_import: client.clone(), - client: client.clone(), + block_import, + client, create_inherent_data_providers: move |_, _| async move { let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); @@ -340,6 +337,7 @@ fn build_import_queue( fn build_consensus( client: Arc, + block_import: ParachainBlockImport, prometheus_registry: Option<&Registry>, telemetry: Option, task_manager: &TaskManager, @@ -348,7 +346,7 @@ fn build_consensus( sync_oracle: Arc>, keystore: SyncCryptoStorePtr, force_authoring: bool, - id: ParaId, + para_id: ParaId, ) -> Result>, sc_service::Error> { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; @@ -370,7 +368,7 @@ fn build_consensus( relay_parent, &relay_chain_interface, &validation_data, - id, + para_id, ) .await; let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); @@ -389,7 +387,7 @@ fn build_consensus( Ok((slot, timestamp, parachain_inherent)) } }, - block_import: client.clone(), + block_import, para_client: client, backoff_authoring_blocks: Option::<()>::None, sync_oracle, @@ -411,8 +409,8 @@ pub async fn start_parachain_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc)> { - start_node_impl(parachain_config, polkadot_config, collator_options, id, hwbench).await + start_node_impl(parachain_config, polkadot_config, collator_options, para_id, hwbench).await } diff --git a/parachain-template/pallets/template/Cargo.toml b/parachain-template/pallets/template/Cargo.toml index 460bd1ebace..27558ff71d6 100644 --- a/parachain-template/pallets/template/Cargo.toml +++ b/parachain-template/pallets/template/Cargo.toml @@ -16,17 +16,17 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } [dev-dependencies] serde = { version = "1.0.132" } # Substrate -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } [features] default = ["std"] diff --git a/parachain-template/pallets/template/src/lib.rs b/parachain-template/pallets/template/src/lib.rs index 18d94bedb98..fde11a46108 100644 --- a/parachain-template/pallets/template/src/lib.rs +++ b/parachain-template/pallets/template/src/lib.rs @@ -67,6 +67,7 @@ pub mod pallet { impl Pallet { /// An example dispatchable that takes a singles value as a parameter, writes the value to /// storage and emits an event. This function must be dispatched by a signed extrinsic. + #[pallet::call_index(0)] #[pallet::weight(Weight::from_ref_time(10_000) + T::DbWeight::get().writes(1))] pub fn do_something(origin: OriginFor, something: u32) -> DispatchResultWithPostInfo { // Check that the extrinsic was signed and get the signer. @@ -84,6 +85,7 @@ pub mod pallet { } /// An example dispatchable that may throw a custom error. + #[pallet::call_index(1)] #[pallet::weight(Weight::from_ref_time(10_000) + T::DbWeight::get().reads_writes(1,1))] pub fn cause_error(origin: OriginFor) -> DispatchResultWithPostInfo { let _who = ensure_signed(origin)?; diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index e4ad07c0997..74f65e4135c 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -12,53 +12,53 @@ edition = "2021" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } smallvec = "1.10.0" # Local pallet-template = { path = "../pallets/template", default-features = false } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-aura-ext = { path = "../../pallets/aura-ext", default-features = false } @@ -148,7 +148,7 @@ try-runtime = [ "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", "frame-system/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", "pallet-aura/try-runtime", "pallet-authorship/try-runtime", "pallet-balances/try-runtime", diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index a52b4982636..a0abb0e212f 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -29,9 +29,9 @@ use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::Everything, + traits::{ConstU32, ConstU64, ConstU8, Everything}, weights::{ - constants::WEIGHT_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, + constants::WEIGHT_REF_TIME_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, @@ -217,9 +217,10 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); +const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64, +); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -309,37 +310,27 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; -} - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = (); } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; + type UncleGenerations = ConstU32<0>; type FilterUncle = (); type EventHandler = (CollatorSelection,); } parameter_types! { pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const MaxLocks: u32 = 50; - pub const MaxReserves: u32 = 50; } impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; + type MaxLocks = ConstU32<50>; /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. @@ -348,14 +339,13 @@ impl pallet_balances::Config for Runtime { type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = pallet_balances::weights::SubstrateWeight; - type MaxReserves = MaxReserves; + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; } parameter_types! { /// Relay Chain `TransactionByteFee` / 10 pub const TransactionByteFee: Balance = 10 * MICROUNIT; - pub const OperationalFeeMultiplier: u8 = 5; } impl pallet_transaction_payment::Config for Runtime { @@ -364,7 +354,7 @@ impl pallet_transaction_payment::Config for Runtime { type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } parameter_types! { @@ -408,7 +398,6 @@ impl cumulus_pallet_dmp_queue::Config for Runtime { parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; - pub const MaxAuthorities: u32 = 100_000; } impl pallet_session::Config for Runtime { @@ -419,7 +408,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = (); @@ -428,7 +417,7 @@ impl pallet_session::Config for Runtime { impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; } parameter_types! { @@ -643,21 +632,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade parachain-template."); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::parachain-template", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } diff --git a/parachain-template/runtime/src/weights/block_weights.rs b/parachain-template/runtime/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachain-template/runtime/src/weights/block_weights.rs +++ b/parachain-template/runtime/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachain-template/runtime/src/weights/extrinsic_weights.rs b/parachain-template/runtime/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachain-template/runtime/src/weights/extrinsic_weights.rs +++ b/parachain-template/runtime/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachain-template/runtime/src/weights/paritydb_weights.rs b/parachain-template/runtime/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachain-template/runtime/src/weights/paritydb_weights.rs +++ b/parachain-template/runtime/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachain-template/runtime/src/weights/rocksdb_weights.rs b/parachain-template/runtime/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachain-template/runtime/src/weights/rocksdb_weights.rs +++ b/parachain-template/runtime/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index c06bfb9532f..73d45339b6e 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -111,7 +111,7 @@ where } } -// See issue #5233 +// See issue pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( diff --git a/parachains/chain-specs/bridge-hub-kusama.json b/parachains/chain-specs/bridge-hub-kusama.json new file mode 100644 index 00000000000..2803a92d073 --- /dev/null +++ b/parachains/chain-specs/bridge-hub-kusama.json @@ -0,0 +1,84 @@ +{ + "name": "Kusama BridgeHub", + "id": "bridge-hub-kusama", + "chainType": "Live", + "bootNodes": [ + "/dns/kusama-bridge-hub-collator-ew1-0.polkadot.io/tcp/30334/p2p/12D3KooWP2Gngt4tt2sz5BgDaAbMTxasPWk3V2Z99bQTmFcAorqa", + "/dns/kusama-bridge-hub-collator-ew1-1.polkadot.io/tcp/30334/p2p/12D3KooWMmL3FQuYmruBui1sbY4MwNmvicinrePi1Yq4QMRSYHoR", + "/dns/kusama-bridge-hub-collator-ue4-0.polkadot.io/tcp/30334/p2p/12D3KooWQpTocTck1tNBzMNTHJ3kSv4vzv8Yf9FpVkfGnungbez4", + "/dns/kusama-bridge-hub-collator-ue4-1.polkadot.io/tcp/30334/p2p/12D3KooWRgtJqKEaMi7hkU4VMiGhpHTJeL8N7JgL7d9gwooPv4eW", + "/dns/kusama-bridge-hub-connect-ew1-0.polkadot.io/tcp/30334/p2p/12D3KooWPQQPivrqQ51kRTDc2R1mtqwKT4GGtk2rapkY4FrwHrEp", + "/dns/kusama-bridge-hub-connect-ew1-1.polkadot.io/tcp/30334/p2p/12D3KooWPcF9Yk4gYrMju9CyWCV69hAFXbYsnxCLogwLGu9QFTRn", + "/dns/kusama-bridge-hub-connect-ue4-0.polkadot.io/tcp/30334/p2p/12D3KooWMf1sVnJDTkKWtaThqvrgcSPLbfGXttSqbwhM2DJp9BUG", + "/dns/kusama-bridge-hub-connect-ue4-1.polkadot.io/tcp/30334/p2p/12D3KooWQaV7wMfNVKy2aMz4Lds3TTxgSDyZAUEnbAZMfD8rW3ow", + "/dns/kusama-bridge-hub-connect-ew1-0.polkadot.io/tcp/443/wss/p2p/12D3KooWPQQPivrqQ51kRTDc2R1mtqwKT4GGtk2rapkY4FrwHrEp", + "/dns/kusama-bridge-hub-connect-ew1-1.polkadot.io/tcp/443/wss/p2p/12D3KooWPcF9Yk4gYrMju9CyWCV69hAFXbYsnxCLogwLGu9QFTRn", + "/dns/kusama-bridge-hub-connect-ue4-0.polkadot.io/tcp/443/wss/p2p/12D3KooWMf1sVnJDTkKWtaThqvrgcSPLbfGXttSqbwhM2DJp9BUG", + "/dns/kusama-bridge-hub-connect-ue4-1.polkadot.io/tcp/443/wss/p2p/12D3KooWQaV7wMfNVKy2aMz4Lds3TTxgSDyZAUEnbAZMfD8rW3ow" + ], + "telemetryEndpoints": null, + "protocolId": null, + "properties": { + "ss58Format": 2, + "tokenDecimals": 12, + "tokenSymbol": "KSM" + }, + "relay_chain": "kusama", + "para_id": 1002, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0xea030000", + "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", + "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x1024f063334d367a9a9de80249cc2d39127236124cd65601840387a5048afefa27de0f015d686f4ef823353d5217a87686d3b0fb5e8a46d6652c3f217d85f2ff1afa66e865f8710e3373bd7042e4ee89e363dcea7ca2f46f118d5b5962967f3b0972a5376b58ed027e2aeb7093e96e6a3c67a5562ba8dc883562cb88ceefcc3c16", + "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x5005ca1f000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x0000000082395e6a00", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9170ab9e3067cafb34b160da9119e7aed72a5376b58ed027e2aeb7093e96e6a3c67a5562ba8dc883562cb88ceefcc3c16": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da91a6f5560d454405e76bae8d20f41990624f063334d367a9a9de80249cc2d39127236124cd65601840387a5048afefa27": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9609afedb001690b07828b8dac6c74ef6de0f015d686f4ef823353d5217a87686d3b0fb5e8a46d6652c3f217d85f2ff1a": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da97896e968dee3411be7bcb6e538298679fa66e865f8710e3373bd7042e4ee89e363dcea7ca2f46f118d5b5962967f3b09": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x08446272696467652d6875622d6b7573616d61", + "0x3a63": "0x", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058e41903da9aebbc57208cd24a07a347ddcfaac96388d22a0e2c24dc1e9be45cb90c494532eadcc0df1eb3de956126d0d7297eeccf1ff9cfc8012edc0bbf8d6cc65b73135ce777b6859d9d20c874dff43e1ca3a4914dc8de7b6f299394324919a50ca30a680af3472f770d703e7df9f2eb315f49f66cac59be517733a4f9f324074566562ec173cdefefa637c39abdad3cc2cd25f47c9eeb25bf1db556cbf38dba6b4f4a0ee68ff465cfe4e3261a67a62fbfa321ee997c0380f4e5cb4f47ed997c2ae29ec937eaaebd1976f6240745a6552ec1f3fcfe4f725064d6f2080cc8f3fbe7d703ace5f95e13c9dc2fbf1db396e71bb5511bb551cb50f64cbea4d1a21298e505b49e0d4527bb9b2f9b68943f45d933f9f26973c2e8a4558d2acbdbc91810e07cf9920b7a32b5c8b0c5054d0581096a01680a202a80a400aa0228052031404a8096c8b2004a02a402d0530c1e806e00d201080799164051b2120069914d21d30232236323f34106842c0899173221643900e500844666035019591bd918d90d321a80c80041c9d600ed20d302d44516060806a02c322f322b1918d90e321d643100c5201b42a606288ccc044054b22d20303231b233b22f3233321962a4013a13e34a36438c1e62988971430c2c315a8861250695185331a462a81023eae78a9f217e84f8f9e187859f2a3f567e5cf8a10223cfcf0a3f2ffc78f971f203f5c3e4e7e967c98f929f273f523f487e8efc38fdd47eb8c4b6c460f881e127cb4f949f263f54b12e3d5b6268626762756248c4928899899589e510c32176438c4c6c4ccc86580db11e626a625731ab589a180fb110c4a0883d11cb8ad18939116b223627c6446c89981231393122626f6247c47688e9101b22e62626442c88981131ac5811b12fb1186232c4c0c4c4c4bcc4acc45c885d89bd10e312738a1de9d1eac1a2278a1e3b3d583d46f45cf5c8d013434f548f0a3d4d7a90c0eac042008302f6c44f1218162c0918123023604cc08a80cd81f900fb018606d6032c0d8c0798156c0598142c0a16050605f604d604460556059602ac064bd23306e60462014e01ca01a7804a803980518049803b803a8056e019100d3802f009c802080524d3e3038804acbdeebc4ef062e2b5c44b89979c5712af225e685e665e58bc767869bd7478b979fdf05af3eae155e675c38bcc6bcc0bcfabcbcb86570dafaa170d2f195e31bcc2bcc0bcbebc608029e19eb8a0503ad80c46439de09cc096601ef00ef80c27e54d7c4c7c795cb5ef0bd791cf0b97930b090106f0c1f9e6c0b0883d7558df95cfca8f153f55fc141143f2c5f188a85ebe265e119c125b145c129e12de122e1670193005308977a5b2a96d2a104e450d8242f185e9bae8e8743a743874397466ba25ba325d1a17151d105e187b8656b95654ac2f0d67661bd381e978e8aea84c381b6e14de196b65b7501aee13f5cde7650bb3c5e9b2c4a812430b2c0e4c0e2ccb35a57b7279c13ab8a8c4567051d51f5c573e17ba18b0d42b8bee8a87e51203a3d341d9213839b688da85f6e00d51a5e098a85178565c3ab876e0b25c595c32f4d40064c5e1e1b8f0de58225e3c80595f171f9eadca46659b02cbc14ae024f01218093c0733119b61d37275f9aaf4ac01e9c480f269e1d66c5e70568cca4f989f186022c057b0152f816f7d4ede151e169e093e24de161fd4c7e47bfa927c4abe255f0a5e16de09bc2def0b6f8bd7853702cf8bef88a78597c7b3e375f1b87830785abc1278773c12785c7cb54e8b6e8b2e0b3c05ac01ac02690067006500c5803180614030e017d00bd8058401e4026e01b58059402a100bf802e8027805b4f2d2c235c347d5bd714979557430c0a65c512e09701a17181797180bdd119e113f5d1c898563f3d838f60b2bc73ad183a54e017407688b4f8baee196b03c047db168b62c3829ea15d50afb544750b37089c0d67eb474467445d422bc23aa0cdf0bd8ca7be1c3c27df183a5c343b3a058d425af34b4cd6b08d893eb05170d3d41c480c395c09aa132c87ee8e2f450b9b43c1560573e458f0db12a348b63c185a5e7c846c643d075b16a3e301f0c5ea7a3eab4dc2cabc555e55a1d17ae185c52be2d3035eec496c466833fd103052bc1ad236bc26505a8cad542acb681f9b838145f164e0a57036dd2d3c50687cee09af2ac80d4b8b4f47001e46467a8715c5b80c670717af27c5f402eea112e18f0550c247a7eb040005dc9e8f408d183873e21eb22bbe2ca74279015e159ae2a32127c5d6250017de1a270539d171c123d5e381d9742c6859b026b8183e26171b9e0fae20ad3f385470163f3b3856b21461c202ede0eae275d12b1a9d7164318645080970f56876e6639b92cb6a649467c70e088888fa4108e8eba498108493a3ae2f00d2ea7e1c7d1900f84ec585a1ad200a61f494b4b431a40009f411a590ae2832909c85152d207027019e4900f8404393aa1481209231c0521929984248970828f09bc8b91493f840c1172e4e32808919cf443c8100930092161c88f1f99028f01c8901f49402cf030d2c809494a47468c9c90c443c89020468c2459207430b2034188e422494a458660a047e85f6412930f2041967c9470944442120914b80090241040f0710102b8176944e94752083fba48234c42928a24852024c83b0c42827c20c3b9c81f418c08095284c984a4a313968810f171542409c85210127028fd18b28463866f91221cf960f201c40753520460aec50341967c04610a2224080ccf22957e0c59e2c0511213093f924c48ea712a596448033cc7228d2405610a526448084c24f888f90b52c890204c3e8a9000e48869c89291a32044b28f2224641872262d71c0079310123e3862fa915424081021418e8e807e6cd49562f3264996b44e5ad56a79d22890db1dec0e93c8bcf5ad0c1932ac8c9f0e70a714d3eef62aa5cbbc5db6ecea94cadca54bebdd2d9db694de4eb17497de4d2df54aa5a45fcbeedab4bae6743b279e73cacf6b535ca5bb7db9638c6977adee54d64a2bc6b5bda96c4969d35bfb7294fac54da58374d2da7d3f4ab76fc3b531577b30fe5c95b6b76cc08f3b6d8a65a5eeeeb89bd25a03e0d23dda9252eab4da5a316eda5d6957d958b6cb5aa574295dba7b6d1cddb5d2eeea54b6ad2dabb4525a97dd8db17459ab9d94da4add279d15734de3caee066ad9547677c5d5f5e1caf5e07b2fa5b8db69e5a86ce9b2da2abd02496995b21dcba65dddb3cf30a68ee7b4460c58c04c01f6e5eed65d001ddca0f6552d7677d1a64da93b0ceb2ebd2fadb57295d64aa577dbdadd414141413d3deddeeedddd33a49c58d696dc8b8304f49cdddd5c4b59e794b825c65f7501d15a71576abb31ad3d14bb534ecada2faea9d72d007700c88651dab5e906ef7517fdfc50dadeb2dba594d4ab94b4694baf29a5b67f3c00debcdef24a5a29ed29e7d6b4a56c5b6dc5301a46b7bb377577979e6c0b28f5dade3000b4a4f65529eee6bc6bd3ee5a6b5759dbba30c61cae55528c3dd9441e02aa94b67a6e2bc555763b959e06541e60764d69774beff6ba5b369592ca96555629372967cc65b7b401823d69370882606f3283a6dd92d2ee96b476b46be5382925c618638a6b7597abba5cb536c775535a29c59456ecd4bdbbdbc5b93877a7ee9e944ebbbb65570bbaa5acdb02296995b5567a4105d8bd02cc350d2c9b5e207797b23d6fcabda494524aead367cbee396988bb2dfda115376e4a5f2ea56c8931c6957295abb5d696524a77d9524a1f6a594b2969d39ee1b5c4dd3524ed962dbb5b526bad94525a29bb69d3a694d2da5d69ad954edadd9536edeedbd53a6d977376d0932016688fec138a0c11214904370090a42249408a0c392242808da42045980620002018414a3f7c70606969c8003008a2a0020a807c2ed30f1f4684f828c274c41444041186cc62883284241121e263ca0c44a840262515f9e0a8c810261f3f862c2df9a040662042102621241411631f309140415208474c4282142172f4c3481011666840448109433ac0540111026cbccf06363238b291a4e4638903472008091282111f21fc652ae283c988006c5c7081cc2089c9479124214920143102804eda48326224a908111186fc382a9254c2901f49458e7c1801f223e92803252204d820f223c948d116c20f261f1c380ac1481021413e103f085224a984a30464800004d8009274348489c809457e5cb0c90c924a485a3a32c1870816cc9019803064e908042141400061c81210ec632624011112e44848101f21fcf8e08321e201969682280d15c0880008206d300d193200203e928acc4e48523a62322149480162302581208050666084c9481013920620246d9810e483a42244864a1092446132832321438218299254c251111f494b3f8e9240f0516408939123204b4142f871c4b444828f0f92801c31999024548290243a804f4dd3e6a559fa21d1266dbe9a2a6d6aa2dda6265a13cd9b9a68b42b91645353138d3652d3a435353535355124da94b4261aad7648b4d944a348345a53136dd2684d4d9322c9a6a6a6269a4592340e49d23624d9d4d4346914a969d226126d364d24d93431926c6a6a24d944bb48b4d9d444a355a426497324da94348b2425126dd2681549d268348a2469b446a24dda4492b48994a3829952ca2982111f32df79d8a3059cefdf2ee29ef557ae0ad83f7a99bed7445394b4ce97f3cd9cd3ce39e7b4d8ba6de35326fd49c53a5585e503961b2c1edcc4b2b6acac2c2c2370c5e2264d1b6bf1dbc74de46ab09cb9971d051c4a29e4d54dc0d7edb5d6fd3ad85b392afe39fd6977efada2a701dd3b6eb36f91b2bf7d23da59cfdabf5f1d8bf55eff7eef991567de26b533b7eed7f71057b7dd6dfbad0c479cad0cc79a6dcf7004ea371c975cac72abccfd51366b3d9b497a461f03316b77d6327dec81bdb541e10244dd9a5b4dccfafd73cec873566b8f9a6d0e978d4f85a88f0d4ffd3d0f653d1bea197d0a80de8f43b867944b61da5a7f7e20dbfaf3cb71eb1565963ea715d38633c24a6b2ad7ef5c6ac011af012b2071482a54a74619a64577ea06290a348e2bd22f5488feb5f365a45fe8545f5161d129b72ad30315acaaab2a315568c47856358a55955b3b3d5ca2d5fa4fb6a24b41d17062e8e18abbbb7f5b6ba7f59707365b7176644a3c39ac09a4dcddb1b4ee6e6f98c98aab0d7746416a5fd222efed635ad42d0dede0852f85ec77a19442e32cdbb7761b22f2483f04030f0de1a622c07202abdd5287c2ca2328c64ea31c7be098aa0bfec8818d017c3f7eb6b26c4150e4a0fb312c1aa242f4474ce43fd66cf18f9483eded4f790302b306956bdc0cd1222210983766d4ac411f0441f01bf286b8a1dc79946e32f71e5639b34f8416e119356f485903ff67bbb525b738901283b133feb1f338a3a61415a28ff128cba3c49292c9a44fa91167a986c6c367ced589a1c4c0be982d278e1bc8f56798ed11fd767cf629671fc8df0e3b65bb36514a0cec63976b96f4f0845c93ab58abb2bc80e69af88849a3925941c82c3a326b8da493c345221d11724b6e552cb3b83861e2609935b18040338323e207365855575562aad088f1acaa142b2befc70d72cd2057a15cc3fb2308f4b20d3ab8da80164d800ad1b720dbf7c4d1823c82b9b3e0066271c479dc206fd0d9c5102406f4bf1f241615b2e20e604f6bb4749069dcac633aff1aba4fff69e79c3e6d380275076bfd72dc0dbfdbf7bfd5ff7e77bd1ef5ed1b7567c3da33fffbf5cb71e9fd7654d1ab3d7351ba92fae5e8b7a08fec8cb55f2507ce44b3b56c40fbf168f71b4a3973a7d9f3540adad925b855d8abc2f2012bf7d7c66e6ac6e2c103a91b9f58b622cdea19fded099a45b3b007625541130556aeb78a0a1b5cb3b06004ae5a70ad616f8a63d3539eef0a021ce7d438efe45ae5a7a3b3fc28d03824151aa556ae622fcd3bb97e4f3ccaea87408bee577152cd3b4178e07cd2ca633f515180e2b8626f5121fa15aa9fe4561efb097be0bc53a5d43ce179a7d62817b25a710c21dbaf4bb26cbfcaf6692f5797e560bf2d38eb197d17999ac7996c0071c2c491d113b875eaf5e97bd8516f7e3de8dbb066fb3d40e62ada8fc7e44145a6cefd23d0fe3ae71c69256b15c759ae3f4326e79ca34faedfd970ac23cef53b3aa594755cf2c9f6dbeffdee86d4bb6167e56c5a5d5262d06fd4a34f8bd2c311a8bd3f82b96e3f7d6cb09248cad9f8caf6af38bef208daece20c09387f9ccd327d59b14f3e00153752f8e42aadac9a0afad8e96530d75196eb2f7979beb5351cbd6c6b683b1c81ce59bf7611fe2a8ea0ac561cd6faf7677dfff936bcb6beccd6d66a6b755bbb7e57cf768d022b8b8a072a2c5463b07455b54a551515169a195c9b0bcac792037ffb9be400bf15c7252f5f3549940ce1c0f200f6936cafe471705c1317ba3c80c5d93675c6a2f5fe78ccec629518d0b6504a04d8ef2f4745a12e79324e9838616a969f15e2e52a5630cb0b9a9ae64db3985576d2a35f0e8cafc4387808caa810fd4e76d7939f8ef9fd366cdbd6dad93fdfedec294aafa2cf11e097a3bfb311a876cedad5cc16f6c49156e57e4ba33295ca37cf97df0ecf23dc3c45293118e953ae6fd4b5bad480f5e5e7018cc6ca551c5b661b7a88ab0862101c1b4eaedf584de45f45b995e98f4b148368c0fa23ce1e28e764fba34fa65879a4565b3fd94597caa263c3c923c51e489b063250e856ad9325e74b9a2fd6db02e1b6d6975fbba85fbeb44ffbe7d3afa115e537edefeedfd13fc5da332a4a1a9d5387a16b2df6cdddc591c966fbf73b7bd380d64a29e4effe9b3f16a55fb7d75a91c966b7c0afdb5cc5213ca918c742218b52f140a9b050aa31144b97ad48abaa155a45ab6ca5da81891554b962b1e05928c8a15f7ea05fe81732d4cb975da465bc2068195a867ee91ba4b0a05f3c8b0d9dd243b7f4f30067af5bacfc78e09ecdf7376a5b5d1c67aed20dceee6d654a4fc01a5d6dc0fa46b4c325afcafd35942d311e67ae2f2507f6ab38ca1ae21fc05a451c143406741ab2ff08cbf4fbf36046b6a25b490ce8734780f347b7f2b0c8cca35b55dc5f0e3b97bc2ad79f1f8f4985f5c58638cbaf8a32767415857855f6b6b2bc80562765e1be248d714a65fa5d0e79c571e6fbd4fb11773f82dc8fb2edc77ffd3873fd38942d15fa7edc20db97d2f37dffee86b86756e0fd1afbd94b1c67432e711c1a37f8c47103f03d71c4b0efc411ec794e1c65790433a542f83771fc09d0a29828a590fd1e990c0682b40814ed8f1863306f3f82198fb2bcfd28cb585a652b65919442db63d9449b387e1547a45c3fd737a2381c3f8f122bd3a75ff10d65eefacbe1f7e7f70099afc8e4d9fefc78bcf2e4c9e39eab38a5b2bca0a9d2beb6746ccdfedd0bec994fcfa88e7efb33b43e321b8e9fe7a41dd6ef6acf467084996d8b351c41cae9c9261a71114885e8cb16475aee99e9cb26f2b75f9ba8be7ddc45db5b71047b46bfb3a1e300da1f411d3e3da36f45d9163681b55aed080e19ec6325fbf7e7d730680c681fd7ef82826c00edcb5cffdaf70f02b46cbf9b5e0d67969fed6f8715bd9ed1bf627f5c0ae0f450ca997d69c5f9b5894614b2fdf9fdeda8d952b089aa7dfa5f8edadf03647691a966fbfdf160409e3c79725851c68e7efbfd562ca1e6dab35973d3a479db2949a4ee10e91f71a6f4297d4a699b4c29a5940615c189cb37517fffac89c69abb9f86535411c5d105e83ccec8fdb29fc8d08b08505a21b992a5d5113b799ce5fe03646975c42acb2f0768d420e83591fcb69fe577369499863377f200e0cc4e3d1bfacf2f07f5971f0468d9bbf9edb0efe268df7ed7df0e30db975fed59fdae7a349cb9a39e87f6e7277b36fae4f95d273f17475af6a7e188ed531a8e35fb1b7547c3d101997e27bf2b8e26e4fb341ca555a66fc351f6cc042221206520d31f65cfc60964faa37d40a66f446d28f30d47a079f2e4b993edd370ec20d7efa647c3fa3694597e3d6ea61e8e70b315c799a938c2cc93274f9e3cd232fd1aca9e4db1f66cfe509617d07c56a74e0abdd880d2ea48551e71965647be64f95e174d1cf2654d24ad6a77b2fc1959bea4218d3a890070be7cb9759d6c2239f37cf9dd4b3691ac4dd42fbf9b5df56413c93ce22c1fa603eb4ecf64a6f5e9f7d32f478b72c2741851eb99ccf36928ab38bf1cb867f4e5f700f9e5e837ea29442773f7cf6ed1a8697342a09b3fc3d719d0aa9695c79afbf17c8c252d922d348279fe08e63a27103a694ffa463d29a594cea774763fce2dcae0d15fbfe7b738f65351e9275627698c9ffb3ba901d8c90380f2e9cb2f87fcf9796042ad563b92a5287b36e2dcdfb5279b687e13c99ef51b350d6bcffa6d80f5654d2433d844b267f2fb7d9a887ebfac8966ee975f0e5ac3122cc8466838cfc7798a3278ccaf3fbf8a4c3353517e39a638cecff2021a9d93884e66496304737f879b680c0a1a03063fc5b17b987ceec1a7453d4fe76371dca028f6531c87327e3d0637f0f1cb16da9e8adb363b71c9cbb02a8e43f9beebb9f113999a9b5f334c54ea60ef9ef8638b9c38d689c3bc01fbfbfdf18089138759e3bec491d6894a738a138732193fb61f87c18927c6f6e21b8e20e7949f07fedc77d4eb0963efa1ebbbee3decbe278c7d0e2f3d6fd45de7d8ddf1df7baf97a7c7d1f3464d3f1df85d4fbf1c1b8e85b885fcbb7004b36fdf55cfc358f85488737d4f285be88dbac361f75b587bd6bd87239871ee7e7e1e70df753f431c8e600e50d62ec45ce86da1ec69d10cb0897c7a361f3f16cbe0f0ea9eaa8e662d55bd42a73acaccf3499c513db3fe95a9c716ebc4581cf16faea7f2b97785b28538d10be57b5ee6c4fa230e1a0362b1dbee57719c593efeed379b6d7f3cb073f85b54ba17d73a2d58adadb6de376a1b560fea0bf1b25215310a797e0d276d4e3ba7ffadbfb9c2212a445dec31448b36d1c51b3edd0935a3f07b88c59196e7bd5394f7e57c9232d79f51561c6b96737691eb8768914bac335bf1ef11903e0aa211f51a4641cd1af5eb5b233a02b5b676ed4a42760a56e4cfd22a0955ee64d79efc62b109148bc5dea8e7972306fba17903c6c35e3611ec61bc7d1bf3060cb1070c71a465180f0b317e180c63d8e3a75f0e0cf430422071a4e5180cf6f3cb01eb6413c5c47166d84b6cdfc6d3284d847358588863e13873ecfbdbd1651bb3c6f5a4c478ec2063240d3216475bf3681f29c68f2c96c33e2d328af123b3a1ff9a2c802cad965cd9ca40595a2d81933bead92f950ba5ea2b335b712afbd0bc21b31569949e71317ebe1d6bfe79fb23f7d67e1e4c0a7e46918c2071847dec6513c1f811fcef8d681105221215a23f4394214a2ad40589920af58f3229932fe5f652163d927d99384a37a34c8add268e1d642b62fc3042d9b311c6db7ffc3d187bdff33ee228dbbcc71f0b83c6803091c9e6588f386af0854163405064ea1cfb3106d6a184bfe698a8041363bfc17efb11997ae4c4cf664f54827d8c476cc2f01e262ae1b7997e3d6cc6a28d59c3b336660d7bbbd7cb2f87eb8d7afefc74dc9fef8533cb8debfe86b267febda7e3fb22a41885512b0f896eb41b69647f245a545bc8dfc33ed967f4e7c1f7ee3d7db9c2fa855ecfe67b2118fad022590bcdefc45196671b0ad9df86e2b5316bd8b7efa111f5a7f5ac8ab5181d9be29a67a2f28c26fac6fbb26bad754aa93d776bdd1395aabc32cb26c2957a7d975e372ccb3e58d6fb33bc2f5d55c4dd5dbfa7b292f74db9caaebbe63aebc4eff8bdd7f40af678896367ef41716c5a3dfcded78f8767d4d54519de102d7aaed6afb5bef71bd1dc5137fc3e1daeafa252fd7ecff5aaafcef51c7dd5776d677287ad672f9419d7ea853377d7fb36ac5db8bd11edea0caf3cacccf3abf4415a0413ff7bd944551c71ad55a93efefba397effcbe7ecd9f2752ef3bec5defa9d7518faab5d65aabab412c7abc335e54a51a47309be0d344e0bf5efe8c32a79a88fb6d46dec2ef6fe8f44da0455da342f47bbea3b0aedbbabb65d7bd6db73d0f6adee8bfdddc1e4f9727ba362f2a5f6bad88fb476b456b5b54da1ebf951df5381a0ad7af37c5854a3dbfe9bd3f27f7ded3bc319ff3a4ae5177773f7a511ed4bcc1bd7ff7e3bde2e845657f7cbf3691ebefdff1de3ba794f7e37c22727987e3bc41b48b4ca04214df9fa20db74be9778d16d1279fefe95aa6d6bee5febef774bbbda8d18bca1cf8e9e8e97ff57094c6de875a183eae2bf6fc77e9bd30e8d47dfad72726d21eefcbc1796772b76ddbd6d67bcad788bac2d77b21f85dc8fdf4ffc2edab6f022da24ff38eac893acb9f579ac8eae8fcaa4f9f68119d9ae288f37c583871b7f8df8f5eeedaf3a0ecc874efe57ef6dc44eeb7efe6e4b6afffb3ff5dd1b3ff85f8b9f7b1a5727d3a45ebd4bdf97bd78ff32973dce3eeef9d3ce2fc3d18ca9e7dff0a6bcf3e7164baf9be4b94d7bbdf891e14c7bd7f39382f2a6ff7deeb41cd1a2ed64ad53363249994aee96894591b7dc619230df9b800434d74df93fd34ecefb66ddbe677a1d20b6f5bd7c9f8b961fcf48d1aa8fb97edf1fa8e4641eae05fa39dbf894addbfdefeb869d04430ac0866ea3414ec4f3a7fc8fe14477fa656dabe295bdad1ecfda17983fea5537676db53a01f5f3f5f1c6994ecdf788a34088b4c9dbbf9e34b64ea4c656e46b9a6833c35c8d3fe46c3198e2d22d122297b2fc6733f8f5f36515004e653719cb97b1b8e32c44d94f1fafbfeae877d6c077dfbf6e7d783befdf943f386fd296e7694f1fe238d92efb7ebd331df8a4af6b7ff666863d6b83e3d2f2968e97c0a648833bc4f077da529e3bbaf8797e923d1a2fa927ae2a4401c359841edcbe0d6e4aeb39e5fa1cc9db55d6843fbdaec509eef9f0efafda17f50f83d5078df88ceb6ee7a993862d8c7104730f63fe2d322a3d76f307cc451161347598f08fb0c8aae0d77dc775b875fdf7136e68d716ad044f635e8205b704db66eb215dd32590db28b4ab6fb6e5edbedfdfc76bc441bb3c6f6f6bb7064ea9a375106fefbfe46b408890ad597c94030db9837b6776bf3eb5d3f6a90ef0775afdbbdd26beb1ee9f518bf7e045fdbbbc451832fdcdeb3316f74db737fefa551f2dc429bf1167ac6a1ccd65abb8535e32bda9835dc86b86773d6b2bc801634638c5993bd0cfb8eb2242a23204b2b257072275f6d4069a5844b9e6569954217b993af2a4069a5844ceef2fc5927d7ef6634d1f7f2bf89b607a517c1f0f0fb197eafef28c618d350e9721853c71cf7f38d1a1c1bf69c3876be0f13c7ce74d6c9feb28b86fa7138ce7ce9f78f4b62d3bfdff8bbead16822d74b9ac716b79f96864253ee7771fa08829ce738b7f2687f0b95f037e50e474a339d618763cdbdcddfc4a995c711681e67a63de6837663ea4c7f64ea3cdf5d1c679d6c7fc91b5d1c6bb64e45a51e69d158b357f7971f8f7ebc8533743a448b64f75c04aefffc0e4726eaeffd2b023be6f7f7cfafc7fc7efff9346ff43b7e236ad4416340a6ce3d32f538ebe4edbfd0f5e9807d8b4afdf83f5838ce3c37eebd8ef5780efbae7a4c1c6b4f3f8cfb726c5172474399bb290dbb66dac3e6c6a37f1eda07c3ed7d4218327fe1d7b4c8e7eb7722488b7cc4ff7e8ab2679ef8aaae39d68c27bea252fff7f8bbf626d4bc314e1ab585e8b738d6dc541c97bc2e28880c382e79dbcfa020322013cd5854eaf7df1e7f3723e0bf89e3cc3d7191cfe39fdf8e6f7e3f0e47269a7b8a32ee6f6fbf7eadf8edb8e4e5efbd1f6bde98689e3f32d1fc7df7e38ccadbfba763bed2f7dcdbaf8797e70f7d5fffc3ef89f56130d18cbf13c71995ed4fa879638aa3115ac6cffdb67dfd726cb34ef6507628330e6d9e1e0e3ddf50e60ec71366b76bfc40ee0ffbe5b7c3e6aef9eee8b28b136ad6b062fb84520af54b2bb06372ec7cee5e1dcab04062209f9665965f0514cc901104248bf103c327d603035faecfebb80d5fb795f69418c897df08334ff642dfa83196a3ac888a520acd979ff30c9b26adbbeb504ae5cb9fe228df7efd91cab74fe52b594a29a5b4f64cbe78824e4aa25a69cf6e74cf59433e6d4e1d9d9445fda39c9d0c7bb48038cb9f2f3f1e372b4911f74c5221f94d73ea985556980e23e4f44ce62a6badb6d65abfbe438056731595402d3b5a6bad9d4e74521cc12c5f4a22f9e37cd9b35af3c78366a5899b688aa3fdd103b6cac9bdf76e79a242128332d007046954cddd1dcf1d2a241340828aa72a2a0ebe7e6dcd4eae75918f24b13277d06914178c8cc0d242881eeed4f0a069210a0e77a20a1b67ab094d53441d2378a8e3459e26aebbbbbb1d2e2d24c56032e01959b6b3e6675777ca3869598b55abd564b8f7dedb5a595edd90442b1b35b69c12898513c0165966c862882c18a6e0b8737c78e12543969f3d8dff273f7b1a4fc4e63474efbd99aa0b9bb3240179a86d7162a508282e9460828b9a1e2e7094709cffec69fc5b75149733f5875c4e4c05287a9d6c5b7512c7b5e489fa3949f592e7568082e6853b46684d5902cf165006fa80206d023e45625ea72b33bc8903450a5228918506284e84208aa05ab3051077ace0703951b0b050596bad75814b0b493164ceac3172c1cd1d9ad1850a28073d897c71172b28e0d72160702085c5823559a6f8214e541a18cc207103949f2860a821899a3077e0e0f03852d448a19a9900aaaa8bac1cd6e0a902870a8f15b48e1c99bbfb912b2d24b96c388e88d9b6196a9058419db0c0f7defb4394169257b818fd2046f66c9670dc9b365653ac5cb7eeee1e85d6b6b9bb3b49a27deaac40e34d936d73a285e4f274c5a5ca8b1a4ae2250bad2e2f4c21c511b43ab9bb6fbe39cc9db66d852b1966c8c229cd1b2746a07992aad56a4f3669b505ced3b5d7efbdf73a604d0a592c11a6893963705c2c27236c7151a54a1429335be0f022a270928d94132f5461a63481850835554c70051e0367cc9c3175c65831c68ecf6878a0ea09149e3b5084d161883651a4608c31c630374b38ef4d930bb858b2a48927f2c410c68d1b29a00cf401c1202b43138a3b4fc395fcec69fc0f80ccd315ac3b3e94c9e2083b4f0811c5d655145d38796badb548dcb4908483e7803890d491bdd6a441454145152947a430c5551073a28488008167cc531425559001424d9629aea0aa800e1254b6d82086851360b5919204982c5a8f55abd59adc7bef95565ec0c9f76a652ca00cf401c1105c20538b020a38b53a382e9b2fe8382919723662d890617386cd1afbf8674838989b2553035098707206ce1826a27ea02265a782ebc51aabac372b5421e5c30b55239019ce1d09b4c025052480a881051fd6c4a9715771a056983d9d0aeeeeeeee04e6de7b2f962c8b450b0c814371dc8d72325798c201861052429a041d272c5ec490400d0eefe1cc9719d539bda553037dde744aaa4027ae3c5a500ca1660b2a2a354fd8095c72a52e0e6074c0ea828818eeb080e35e3df1a0309142a50b175f4cb9220d0f6870dcaaaf4a56920df68213cc9db60d036aa854918584172c6831404bed0275cf68b1baaa31c132cf1614c74551b95fe199caee4f64b0200d173e2c89c29aa2b38029b52a30a86a3bc4b0a58b2a69ac28400a15302ee539d1aa3bc74ef6f7894282d62da4e078ccb738a1e164005b251274727081ca0d5c4c80a6831eef4d936d93ca22b6c509ad3280123b5b132a2cb99d0a5bacb5f67dacb5d65291a4856454cd5444a9558ebc9ad326cb7332e436c9ca0f26c062045be44c2183aa76dcd8ebf7de7b2fe8f324072c379059b20310379e9c2cbe5575aaaca8b253d5450d497c6631e00209c618638c6489d50bcd550194813e2018e2a95b48c199535d55abd55890732a4b2b13889953300e9069e248173a2c9c8009074a681b334ba41e5fbf5f9228ab2857643fa38b1d285006fa8060932ad7adbbbb3b8ea83bdb36a306272099139617b47ad8b9c1882355ac700235090881438132d00704abbca1513e1ad444a005660d1d277ad8c00a1d123cae3345c7892bacec5c51d4029b2a30684bd4b8292209152cd24c21ba428416d7adbbbbdfb992ddff8b0e495c7da9a9800402be80c27e310596a126220bcf88fa410627b4a8e0e08306451cf1ab2296acf044e5ce16f543778aebd6dddddddddddf9cc9ee323867e8159c344cba0b8441a3831320b2d8e0c301d648b96edddd7d8935407cd14517474ca962e3c9fb14ad295b53eeb450db82ca64772b49f0f57befbd59545448e2285e4ac42c3b4a38eede7b99b82d410d2f58918aa18bab3a193c595305f664861fa74dc2999ae18a314782c8e16ae88914dd93124065211bc243b55acd09b4dab2ba7355b3b21a59517ef634fe9b709c06552a3009c26a8d0d610cd0462a49162ff6446db2e4ba757777cf74e46cdb8f15779515049338f8de7befbd3d54790f65bc072befa18df780d5423e13ed28b1d65a2bda518291709c191bb4542971070b2cc460c0860b241cb7e4872e1635cfed15b6272ae72465a59de08922b372f79aeeee9e95a5159c2bd93d2b3351bd262a7888848535437c9122054a019c4c1145cb63ebd65a6bdfc75a6bad165a2d24b78cb4b8537b32da426a088c2b0165a00f0862a96ea486a86ab51a142c95a55596355239881bbc543d4125872708d0e508af8b132a709ccb49a412d55979a25af9a13b821f4ae2caf7de7bcd94b166acac9936d60cd63f0d2d199a08a20433d090c20d036803e6e9674fe3dfcd128e6b52434fcc69936ab2c4ab08a920c4192cd0b8a122e505a12927c082a52ace13162aba848133937212856aba9e16551c52ee71b2b26b2d012389a83dfdec69fc6be128eece169585fec0796a327d06c455e4a04494148038e28200f02cb9f72ee1e2aa872e647071e28a355a5a1ce125007994d43c505862f07245952ea210c3851600aed67401f3a1c913253e343048ac6001a5ea29062d6838e91e1586ecd3e8a9b342936deb9450418bd9b558b55a2d059bddddbd0997169262c89c316ab2e667b9822479be90408a16da78b9a08b149855972e502894ee54f81b027c44540d799c5891d2c29378254598cac68e12d8174bd8ab26be38a90d7d4fa36be2eebef9e6df12ee674fe3375cc50447bc50420b132d845b4881d77ead5643823729a7ce26c78a6d0397aac8814e17799a600102877ff62b3976962c3164b1ccaad56a4adcddef7b6777774fe2a685241c3c07ac23b3e273123b2d24f338cbf70e65a3de86b8708508b2e40143268d0555f606288c31c6b846e1b81366b0420409b0b0a2a6822a56f8559534517ec856f10302151e1cae68f2440d21a080051da4b0d4f2ec5aad5693aab53e6e9f5a6bfd39a7b492024eae65a3a6f59c567786b646d9bdf74aab286ef2bd77b25163dbf466045747cca993041233b8cc71396179ba8189106762388115329c0b1654a23a2b5ba6de78914598235143043d516168c10a114143f469704edb6644124f53377041822b57404ee036353c61366e96d8e9a0d4898132d0079420103849b0a8a4b0049330b2394820717ad32677afebd6a56ab51a1377777777f73659aa512226bbb7c966b884a08b272977ec80c1e131b20b8124bb9a255052c09e73b13c354f5e007d280ff13486b43045104da4d9a105333f4910b1f5f4b3a7f15a388ae3a49b3478c0b481c28926d6c0f0216bbbf2810a2a1c77af88b833074f94b7995273839c2c5daa9051c2a705f905125eeae0f0c596234c62525b9c7070654d8344ea873a5bce9c81eab1e14a9969418e9caa5aada6029593a555952d3938e6bca004950b3258610506830d1c0c6798805304d1c29a167688da0261f0e1c2104515c6a36c16193181458564b61667a3def0abc6868b0d5ab8a96af29af3cd89fa40154d9af001c9142a2a5c73ac5c73886842f30c6d4fa367574f4c6dd2aa0928eef4b3a7b16de23fe088274bac4172c5891a3e355226d8b888c0e9ff87b0e8ecf57befbd5796efbdf74e71049323962802cf13509e1a168270366f9a6c1bed490d5ed4ae44c184569d8ecb15ae068a122ad038a16c83458d0aa72929dea4c0a9a15ae10ab995efbdf616cdac5aadb6028e5196efbdf77d9a68fb2bf3bdf7de6d2b4bab27bee42bb7b251e310ec597d1bfaf4ccc89628b69839b2030db56d0a262c105a0f7a28f3ca3d27821ec2913b53a6b013822d53705c9caf15122be49bef1470f25d82e3de0b82624da1739feefeb5897cbaa8e2f07fc9c1cc2e8e4b34f2ec01741d37ac3da3b940441413281c6cd0ca0287677f10081264ff195d24ad6ab51a131cfe3466b448e270df019419e390342ad512ad02c01400a60030058028009002c0941c985cc904c8d2eaa996ebb8e46513b27f0d67999edd8c67999ed5db94db36a5a29c35fc6b38c9e4c661d6a8621571d3eeecab0ea3e4fe19cef946ddf83bf97930331665f0a88f5f477d2cd2320e47fa3ae81bf50d69993275b6a28d59a369764e25ea40d58172d977892ed713541d17549d27a83a501f8c4271ee7ec7dd8efb96bb15ee5aeee2ace3fa71d6719708fec7f5fcd8fd0b74b03fa14f1c6b6e71f4f207fef73da194429fd330680cc8899efc1713cddcf6f5fe8b139536917be97af92fd7bfc471467da292eb39ee7eef1295f0278eb3cef45e7e393afc6e7f962dc6f8ddbdd127bbd3ed7128c4272bf96fdf518f0bb7bf17ec3a110c7bfe0bef7b01dfa8eb5781d8c3704fe8b590bf11fdc2db1382db3b2c942d841fbcdc733e99f332b73dc7812f2bf666f46c3e488bbe85a64f0bd5a9033504f6e0a1ccfe2ebe686570700b7b6c1f0461620fad325a3071a465d8e310bbe377d77a3d2c7c4d1c309e652626e338cc324de4532b63b7966828e3518389834fb7df7521f75b2833d8447ec30d7fece9bb7553dbd0356d353316cf642783c559a6675e268fdfdfc76397e9099a3aa8e4a95b298396554c22a2114100001a8317402030140e08a579a68abe0314000f64a84c5a4215cf4291480ce338866128866118864118c61062004048416ed200fd235188e299da38a885e3ced3bd3cdee0b114106f1cbd91434398e78b72825ede53b633c0e67b1b57ee1a566aba7147d282cf68a9ea7a2b923e16ec5311223f5e0d70ca9d22b425e6b3d4d0e634670967df59a4fa6219214a2776b3ef7f573d1b3451105f45c1d610b8e21b16c770b68edab12cd0378498abf187fc1f5c51fd5b6a629eceb40ae251600d8fb745e9ddfb7a19bebbbe32b4474c19d88f3282fe786f10cb3fd9b06ab88376f9f6ebd78e1349ef414fab6dbed1718d164608ff0a51e0831aab966dabc724e31b9e77f70d9042a66fc3de44de7db0904883aacf6378e17b1d9738e89c690af1445cc9fde61a7e7a1d3faece34135886441aaad6c44381dacc2dddcf6e92fdce8fa011a8a18ff607cc7d7dbba741d73cfdaca7ac2fa83a14830f189bffb358fc6eb6032e0f3efc2eb93e64ed0e4411aa180d316db0cd3a4dc0e268a0e4f7996cafc54e12343418a459fb36c3deef71dc9581d2b8e97484688c0b479f1509a4a57039f4e2d07c7a0753f8c5cdb342561d9a92412bd5e28ae69b01334ee3b3de6c5676f213a5ac28b8e8708d544a370d697ec9f2fea982411985484f2c32956865c3cd68212d7a09ff3ccab399d0d6de1583a687f1b9de7fb878037fd2ca9a8ad03ea298c3b1bd14fab0cc5b36766268660dcf1d996834dcc1297a057ec1b9cbbc2931a8972e9e53c7412fa5606b531658c9e90e835f31d8d8ef26c86bc35441ddc201a4864bf9c793670fd10493a3d6590859e6c2b51834608015129116a6f0318e000fa9bfafa1a5a1d67c76b35b2fbd980750e30194cd4f8d97a1c1d07c169ce459e51a03471af9913cc3a53d7a2c327a2b19d6fcf5733cf6bdb310f217ec288c4660894bf86e525ec0dc7e5e7584bc148b41cbd64a34444072073b57d07ed830175d8521f51b873f66048b332ad7ddefae583f0ca3dc5ba6cb0e361caacc490879b769af8a30f371cb533299cde8cd23ae6b0daa1ed512dd34fe3d0737c442e58c5726e24a9d98154f502132111207bb8b469f75c50e16fc9d687a13f42050fee8aee423a76669bf412c9fd42180a00e1236a7d6f00fcadc3dac8014a2d67ab755af4e70baa442af069c0d7e20e944300cde4547c7340985c28e539c8d4c5ff1154904bce75512264f3c3ebb7a2fb4fedfbd44b656edb039b10700ae2701357c614ac8b4a03932bba5ac4f3531914da1b005741e93a3277aa9aed4ffe527a2f777a63bbc20bdf9d1511f291bcdbf8c33c4782cf509712523ef807aef1e93b60a212982631b47d19af9d0dee316d54b4ea1530c139a667d62e02b264e222a7ddb472e8aed25ce6439fac5e08f89d10b3ee097ce00190bc79c66e5c34b11b1e1e4263623c6ef889f830e9f1f2dabd17e5f54cc9c7e294d91eba7a54e967e6514040708fdcc42e034a56de0436ba0c20939f0c2a36322c24b2764823797b708304c698f8859ee29ad40aa32958f2beb60501b2dffef83aa237cebb93fd1fdfbc66b84cb8edb515e45d1e53127d0dac617fc67a421e2beee54f8ec1f578129bc44a9888e55ba62c025094f999506d3e0104d39222d74ad6fb7cb1148c8b75a991df12890f05cead90290ddae1ccb15eaa04ae905f0e8f83e684e48589ec2a33562aaa114ea827dcb06bcbe748f4701ab8e1227e4e67c392af49a2a3a54f62514fb32fd327a641087d46d25f13d9a15bcc8d07b870fb1b1027f6c14cd7d4d479e5281e67b9c802030eafe6b309d26c6ed37b3f3ba65ba9befd71a77a231d8297ba3a4a21151ba14e19c26cec1af7da82b90bebb22d799f7b620f0b0122ce83bb1c1bda4407a5cd242f482db7e0ee2b6b52ae81b2a6926dadcd5ef7784bae9c0f7c819fcc81c1c29afacc47b21ee57a900b2622953381b529642e5eb6b6c077ce8ed54546b674470d24d0997614a13ee88bf80c676af2b35b17e0af0eb24bc60f125c9e58a6f1371c355d4faee2c56a5ffc08bb2e62b7e8ccb4c1a4cbc3fd51a9c0c93dadad6ee285fb7d9e85fd102d67a90b2221c3cff2d2b68342fc39bdd0f7606d6568c520a05210aa3e4e25c6437471c247c222be8107d9261397c7cb5413d25300a94da97b3de98572572d83822ce44eb2dee6a1d71bb1f83e4ab5cb3bd5ec54d42eb7108f1db617daeb173bf5b31a4f6af4e25dd33fa7a230013887a0612b207a8a32fbb2e149739bb138f4bc040b4fb126a21b245ee4f6517ea6dfcb0232ab5b5bdf802cceaa068f744a0f1336008f082efab8c12b3e40cc52db87b883c14b5e17a7310c347d6f399fe328a32fc4ed3a37173c1f03b62e05b8b56280eac9ef279e9f8a2a4a211a17ae7449e8a3231a1a34e83fee3a8ddc5be01395e13ac99701c6a7bb7fd074375746e3b5f25aae197744d08f4df6cdb0a6a3d4d1ad27823c0ba43f3077d9b975eaae9907668df7d47c98b3b13cea3a3c83b0dfd243b1f7423732d1fd7193fd0b45ee071c67bb6ada215a128f638b9502709a8a86f014be948136d88fd26a36b28bae485dcff41689ea8f2808da5a078f2055cf7ad94a23cdc1ad1612ee422c123f3b981a3d5f407104443c3a8881dd03bf760315b96103502a284e6dd43407e3b196be4fe5e3ac6fa5f182169b8b796bff5881e105c313934b5ca47ae1c05d67c3e65e3f6bc922bd7cda7be8d68d2852c6c46b132a07c3fde8f92f2a98278eb0952df1b633fda41aa0ed6bc06410577105584e31974e0edb6ff7580be185897729a99c767bc9f1d025d7311a5425107dd3acebdae039a95138de6291626f5a6fb82edccfd15a75e7cf08599ac4233758d42c26d86ad24b90d6a0f9d0a80bba358a1099014182a85c75092234f68702325c1b3501e4ef40c6905828c0e70a87e36833c74473e0406e1941fc9f90a1b72b5b64d99aff1c77b3d3838f11b909d33f2a2b9b4da4858cd912fc8ba9329cb279a4d7f3d4066c8b8d39ec3a8b1c380aefa569cf899e5ddaf79f37411b7e4a8d71bfd06729e1631aafac279d412016680ec0ac05ca257e5b40e398d61a46c36c5d048cadec7a202aff5b21c5fde7df0cd3df1b7846c8eda4760fa949a0ea798474993f508091fd1cf0f48594c0cb79c2bcfc7e454cef2471c57b4112b27171f024cea6219bab040005a494f6dc270973e521e339264026ec783d94ebe9e7ea91e6b2bf4f7751386bc5939c68dc0881224202d1a2561a61bcd48477ffbdbe0106b2d9e5947525ac47c5a09e35050f69f40fce11e9e618c77da319d90f3336d20aeb0445203bdcc4afd458d155f09e8eddb12445a28a084fb4405cef58e555e48067c95dba109f86e85d8fe46c63873992467b2aac1927778ab388227fa6c705e78fa6494dd565f279f2009359d78f4029f466a3cad5a3b6e48128bf3fc7e43aaecc5ae83cd1bdf924b9e7b3a7073b5ef9d3e086ed4f84958ce796bc5b0e0b271b1700249667b848b8ce9f3cc06ab30812e2a1b54b69594ce5882763245078080ea4a08da3eb07ae3b6854cead5463fdd3320f6c17c79fe417e3642e7f73b5978bd266436c9718265dfbc1d8b80d3a81091757d55fbcfe649f707bdbe87e6c4bda3b556ee91a414c5153a213f9bf3f1964a5b498ad0d8b3df2ec005020c1fbd9e93290cec1ead9d8dfc0c9fed688e5488cf21bbf145bfcbdf5ffe62ff2b34ccbada3df8d02729e4ef090593cb6763c5ff764440b5ae4572d6628f7ba3ee4ada0c008a5c78618f3576bbd28c781b0695b9837de7fc7f3cbc11729e4a8cd851adca3468c0ed312f5d30dd01959c896953d5f109195356111b3e6b86d2fd11d8b040f11facd56e8d18091e71836070a4d02d533515a12d8b950a60a7036d70ad42f7fe498de181d6d4595c4ea3a36e69158286df9057182227021c4f4f1e199b7cbd337f97c284177f90744ab093c6662ae544e1e198634686e26bb236be02dd53cc99ac6a9b5cd675a80401b2149c8dfd7668c8a74000d4c480ab5dda4bf334e859f9fee3e5c090d3f83ca5ad4b40d6a413a3bffd9065f3430701938c2ded4d808ed79b35202306babf01cc69eaa8f62000983424fd18a7ae5caad4b7760c4661c651ec63d8eaf2d80773ef349fd09b007a230060bc21004cd59d184505ef1953b85928299069e8aae7b303037847563d75af6687276261d3413e83f2ede681700c09dbc8aa1ec010243914ec8caf182e9a0aab8e87b0d68251505bc1c566a5ed72bcd31e46a33540c9a1a6aca6c736907cad63988a83636a606305a3a7a9c7e4531813db9fb63d5b851b22218c1500b362c0be8e62c85c16294766a95bc92190d7f3195507903f1a9c52f1a52647ea7741b8382ec60549abedb3a7858dc9278abf0c4b5f826e97c651b5e479893d0d737fab3f976adb34f0b59f8b0e92ac4a802b1a0acabaf16108fab749a77c488cee0d110464531326b6502d9a6963b6cb9a28e9e37c67d5442d1ce5a2c1570ba9a6625ef10b37f5514a26f9e892d109176b3645a7bfa25f03600559f3270ec7b1f4120c88c84b328df37e14179c1accc98d0826a5b0a52050424a2dfb12adbb1668994966175cac913eaef9fd5590519d0fb3dbae2b9b96b3d459fc71d1e6f4f0b1fdac66afafab7d33f159c6ed2e000c68028af9c1a4c5ce90967342d46ab134219034b4aad7d1ad0ae6f9438d68f0dc0b3ef581af5d78aa3dcbe32db8ac4c768f259c8e4c61c81cb0f710247e119762ad71ef74d66e3a10f4e67b96e6f01ce11a1cc1ddcfaa57f208dc048a01b0b43bb3f875457045e6ac94ae4c0ddc7e6f1683168bf260f5f85ac6bc3da03836c2b083d9697c12cb3c2274dc5ae63124d824ee1b71cafbd1c0513322c64e412eadb51567f17c775bf70787c831a6482c07c12fb650320f86fb23a27eb90a6b5318c9aedb138d6fb2c9f7976fb43c73ab3b5d8a664af17df10db109c10682a5245712997df399c08962e8cd8605683007362ef4b6b2eaa237e42cfe8109cdc102306d576ef7d7c805fa6d0301b92fe5766d7b582848b00bfb9c72b0fc90dbbf8993b4181f841ed4347da8598d5c4e42d25220b228a690391579d74c1da342c80e4fb11d30b212b4215fdbda6eb611ab75a640935c10aae17cba3c4c22184d492a9175df9891a58ea618b436af7e8de0f73be3aa50c6cfeb6234ff5868d89c8ab8c4e9678490e77a62cc7719e2c2472c3b124cc6dd056c31eda9702a3249938e517d75362cac2a0400e944c97ba57ae59730bb255d0881e4765ededcf6e6bcb199452a1032a61b1ec508f79830eb73f9ef18dec50783162138c639a52d42fd0256eb5a2b89a1a464d902507398e3591122b06a17dc4095b0e59ebe91f4dc89241359d1c61f4ea7a39de7218b89f9db263d9ae540fa3440c8147be8375bd4abbddeea31eeff2c0eaa3015c451a0b74ad513fc2d05546276261b20bcaf087d0ff83d22d54964bcd07982fe5af41e4984f5d6818157dc112d90c33e4dc870ff0b6b8ecef0f03bae97b0620814abfbe9cd6f77db66b1b8ce159943568f8d8fb6890b4bf62ad3831ebd9305e9ca857416d80852e90086f3fc393d109c034acefca490eb554682d98c2c98ae0949e307d734f50dc8e862d520c64b104748d7de4d6c518c2c23d7483b1fe96e09ae36169d4c4bcb631468b59061adeeb23d3cfd67966e49086b87a557f8d5aeaac63ca60ead07cf94d657402041c9d01e463402f085bc4300ee1e759565dd0eee7929927b084d07733f4967b493d920ee3d3b1fe90766b96f6042bfc576be9bee6f757d309b9e075d6d59350d87f14e332058119e8cb48ef62222456b2681ba1a51df484d69659b50bd620ae89289d8a24164bfe28a773130beb2bffb151957c040615386e61618b47d97ddb47a9a16b1ffbb558d77d9a7d7aeb208251657bb47e2ddd226cbc88959baf243dda6c9b84819b6a562b08c88781c75bb70c082a760b5a8120024653a3c7dc18a04c38d97f16990efcf8168d96359560093c64f0c60d46b7b202c52cabcb1332d3749eaa62bec0ad58d71cb4a713403fde81755f068acde1af0f0f2cbcb4ad060b0895d6843641ac7315f9a903dd3dc803c114404314795024d927eab9a0d91e0cf156adb64e9fa843f0aed82c224f62ceadb9c79d1408f40227903baebd36eae33907b5bdbea5cacdc5c692ca5f40bc7553b7160b41ad9008b79f70779c010101142096539661901ee4d432dd12ce75ac663513e1c2b3d1b6712830dca12d77d31e51d1588a919d9450fec77b1b8cf6533752e4c43e030c5bf5c8fb7d10a4d3a5a33fc5ff8371063dd45765058b4ceb8aa1a283476081ddd8cd47c68553cb39c6be72501906c72841793868eb6c3bc73c8b4f346959dd278193dc856f8dcf446fc6f8e0214a525d31079b91a932cd88e84b9c88d371429ab2a4d8b9b8e7526a34467322ea3d1c8f9989797f4cd5de5b0f9af7f483fd2bfbd33420b49b7092f1721dc60ffe7a5fba2a37bce2620122e4adba3a28f50e6d814799a1f170be8906077502c8c9ca7fff54f0d3eabebd523b4a97940b36ed40ae08c11603fe8b6b17bd580119891895ea9c9cacf65c054fd8e50bd86c8bf286e10da5de18317c3752bdff6b36ab11bc1785f07e65e950beee6c733126f3cb198d636f6afb7006f5d73fb4a6be9fa4956614c99461a09ba675d5f1aba334a209e8291ad2824703aaf86642fc47a42419e0c97b740502ac1a9019773e2a4eb21d8132a9046066222e96808fc635c3a49402c8df325cd6816732e0509b061eb6980b77f142a14a2f6f830c11605de61968decf7ab18e2bf300be4c014720ea26908198227e40614a30ab4dcfc526010abbecaf60cfee864a453c94cd739236a8cd380c540843826c5691946436438f3c3218bcff2f6c99c51c8d0264f20ce3e68b2989ceb3df562d08113b791c2464c66570f1f51c4f5e554ea5afb5b6b6e4db2f64f41d9a04a9009cebf262ecd3c1cc8cd04b9628eb28a548c7b179c8984ae8933b4952782d13ffd16683fd4641c49954364f23a4a593332d1f3e1bb1eb344a7df49d7498eb006e3646e1a293759a3e7f5bb5cd69f9379dff83c449be8e7d89c34c4f1af3d89607a235efc55d2a9e5f507d7cd6c6de2454a45b8e43f08389869066c0e2a4471c9c2922064372b194e320017d9f9733b3ca882ffe3187e2d644667db4b3641f35008acde322d0abbd27ff9e33e3cf1104fa702b7553845b04784aed620f02847d6ed963b5852dcef10649843790cd632865fafcb3bfd29471d5d6c6d66858953477c2815748b137584b0e49096c839cc019d0ad7579e6f01c662fa40f8fbdbc0971b1efca8f7654eedb0629ea095d30f96d9f3a921ca15698a2243fe16f0dad8561fe57f94c6cfa223f25e66c91df5dc0d26fec27f06a5651af27438bca182bcf3c29c91a8fbc6810afbb050150c6da743488b5ffead80122a58466c8fd5bd53ca956f9b5c0d5744cdb4487bdd0b986a556c511a0b235e6ca58a558b6f3945777f6c69d51928edfe5b0ef207f3884206c51163dcd5ca57143936ebb834579ad583c9465c6a3d8c79f4204e331fbac0dcdf3d0dc14aeff491ddf143ae4994a9a55a4a77c72d9aed3e9c5d4d4555e5e90f39a7a4cc184edced2b3065060eb16a2b9ff23708b4b81930411b2735da41b7fe18b588300f4adc668e2d5fe8d78a32bc92943680d5af8f56be153354053e78c2228b1c4c8cd10386d5f5737e1e88935f6ee3b30e4167179b1a16ab879134baf1b705f4efc53c6a4c0b55a3b0042ac4210e7de8063b8c091f7975fc8044ce89071c426995e1a9cdcd10be904833614949754e364fe6d79787fbc784744b40e4d20047b6479ff8ddab803ca1bb759cff5250986179649aa7c862911df3cb124162f54f1d9603c360fa4d1d909bcdc07ce33580c2a5ab0085828b4fbb424625e44ebe718d4325eee5072c8ca04e0dd4244a9a3ea008a1c2e1d76f384a4b3a8856d41c3ecbe366c4a8a6d2dae3e5492144c1f283e128a4578944568ae041b0c2a3bf047e9b1fa67509d0ae8b2d7e604c14b927767e8182f761300e57a0064939a5db2043c9ec0dbc526be4476b82665b3cfe71953712d6114f7cf6d647e83264f55075987fd7bfadcca98062f9e08d287b4151dbfbffae956ff8682161435c87ef8057d6e4678038b08234cd431e2aade9e3889d82f6b4fe2e04beb3a20ee137cfce8786bc7b2d7ab21bfa035b9c8bacb94adfb2d9341b80b8b04219c0f32c6e1381825144460988e750b648a1ed592f827723374e43da8912c64eeb02320b1edb4eaff678de63a5b2e185bb22a89d512364c6230b97121ec46e3f64a8b0687f40884b5073a3cb00ae4135c49ea51780ee51cbc76541fc454f02613414fafdfcdc93044288f2fa160e8589996d3693cb17eaaaad695d3b0bd13a53e07b0773c982ce6b3c53f7ba29daf0fb753726e369c57310f97d64dcc51794b167bb085d924d2e6a89023667e6b0fb8dbb0cb99573d05a70dc3238a71b85d0ca022de390f07727aa637d87b859c77bfc81af7337ff8f758ad402b2d56261c4ec62cbd9c78ad88caada948210cc5ec67bfc5d487427c983b357ac7b0615bba2def7fdd8dbd362fc7fad0d65bc01824ee010e9aa5bf39c909461451848c07b493bd2be625e5a087029ad7a571c59069b48c52db4682db4d7b77db9feb17901cd62fd421aa21b3da0d1186d67a393128d93cf68ee8b5b6d0511c68958e6132fb19ce1c8e11420a8acf6591b5b0ed5d43f46a6cfd60f8938280d39e8aa2e028de117a579f3e1588c8a6040d20a72108b52c5fa2eca268f4d2feb75413592560cfbb7daa18fe5c17e43dcd03605ba1e25f9261650accc0633d3bc223c28c750ce2746c8d5d3c6b82a08e544f0dd95877dac72943b61c01559854b6b0145179d8aa512d9a76543a9b1886f92fc38ffb628685761f83c6fc4d370f43ee4420e6c74b25aa5707d3fa333119410e85b179d6125d8d02c69145222c5338f7fe59d226a71e0d4027e4e07182a989c9d2ca90d8848bf0a2fc813b07efe0d0d889adb28f9aaa4bf7a2631e6c52582064eb9e77ef98d50184bd262558d9c92ad41fff85ad76b5686a08223bb42f7cab8340231802a5a584ae020ef2c3568eb2b3a1af2d322287d839c52c6d20ff40298d254fddf33b4e67d0534c10aae5977f637193ba21bc82298338c82cff4d2afeebe7bc00e0eff87eb255c84722b0c3e11a2714b0e4bb93b2793cd517d2f1da0e04d28491822c2951fbcec825707a8dd1269267907e8770a6f696b3ac49189065bc2da4e98a00a0713a64242545240216043fa26332cc46e46f3587b16b3ef561e2fb27deecc4c73436513618cb52fb82dc62feb300069071db7e6e207aefdaf8139550773b649aec807672d960b03209349669a80b7f6703031eb39a5a682c5deef50f0abd4aff0417eeb4f7d6448bdc720b92ed733e38caf1f70f176002e43b558283e6078bfc7a4c30824428b00733b840bdde3205d232056d531a6c6e132cdab2ed06d04cce4501fa04649a79a582e6e795a05081576e580a1f08b8fcc74536b708bd164a3c491327b125706e77c99007a04061ab0e80640439d4825d2ad98f4e04a60df38c66e83800e41ae2de118d90a3a878217c09e0a144f11800975eb148006eac3259219520522cbf47e3cade241a7fa5a6a63c41780a50380aaca0d80d69bf1950e5dbfb6d2fc4ca6feeb80bfe6d5ed0a16086384e907edaba23a592b02cb8b6bc321d0552df9b2067a4f2d9dcdc610e03e878b85f8ce8eff358b3870900e7d51ce86bfe6fd368ab8b20579b860eb5ad7e2b8260d3f5fc5e94530cf109f2625b8a895ceb16c26fbe29f6a302adbb6cb3de9cc110a3b8b735d876d9a57bfed4eba702c943ea7eae036e6186ecf373b88ee14b5881d965413355127f70b15b3e46e7c296d67166f83ed94f22d8da0abdbb0adf3eab3f99a3b76acc1cd75aeb42dc93e7d3c1725bd3fde6d5357db9e7d4231246391b689a8d904ae1658976ec0438987b4619b8c361a91505aa06693865cb2bf1e55068c48bc3568e842926149cddff73a23a39cbcb30732842b80e65094ac97f3cfd3986477e03a393bf92badd1a892782af7f548f6ad4db0c85cb52d7b84fc408011358e6e0ce2b73c403a15fa7462260c6031c6ed2b3d35ad98c19141122f01dd88a790eec908e50aba194033003d1b4a5d92e76c62a16db320473367c9461fd12c8e319562ceb4e3b76ac9ede29f41bfb3efaa4a80d65ace86194f07dbb69c11da9ca521eeb061b6a7320ddecbcd8b37294e67cb62ac2ca44d729c67f58166b7309b68932986acde91ba143312b5d84fb7088bc535b168cb0bc22671d2b6a9f44bf58e8630dfeaaf68732a6eeb64e6ece5f63c8ad5e9cb7f21e8cbc26d9f9291fff7759e7145012092d95b1abb291ade84b731457549a4ed2d7b550a5233055d61de39672e3b84685c7dd14740d00f2de5c092df7f60274a97b2cdfc70453d030722964ba9d23a861b0ec2d61b5079b78023ae8068928955027c37f270b0ed588fa553deb1809556b463148a95fa582a1d133cd4aead99f1bb624a3cbe4440221aab49391711acb6f4d059ef2a99387fb3cd30ae10a26b467843e04ea3808102aff6126f2ceed645e178136f4a7a1972a4ca52be06019238fa02295efc39304737c0da054b5ef02fbcd6d3db25d1f8cc79fe42cb28e6122fa056d87a5f1b326e6d7eae14ffd9f6672339262038cb0bd0b857931b69943ad80a67b68fb0c3c1b88ff228907b4d10dd616a4aad6b65bb86126dc03b08d65a941dc11697355059fca726a0fdcfbc41d4591c3b23f2d8c4a2880dc6a1b9c4532a2d9c1892c96c229d26edb3fda0cdf67ec7407ff87c664130b96743bf21794f7aa83fd32a2dcddf5058af25addfcabf495a263b828356b495739f128af676f6f985ebeb13d00c636e4de137589bcead66e9acc2d0002cf29e3b0cc2fcf18eda91cb5e07d887247f45b8a01310da7addc0aefc803a46c3afba91f4eca64ebcb567e70d3733217493cb1158b4f2515329bd8e831e9ef161501f08024479b46d96a851751c184607ac7a2f977d470a09162094c71d6c2812edf623501204a926a7549ebe716075448392b0015a105f1afdbdc708f8a9fd573e98e90cb92c6285dac074c03727834b29ed2ece60dfefb11bd715d9027bd9760a4fd86b19a04c46826d1a2318a970b9254594554c762fea17f30242775922c5be124e4aca4562965959c335d01b222eae9891ca431255a544dbd899a59b24ee20de2fa99de802b06a7b13c956c8a36cd1c50ceddf086055047a2a344980f610d078d046ed01771e07a48c24036d9086fe7319733f7ddcaddf71f7d73e5094b0941c8af2d42fc138e54653e5b39fb7a128637f626a89ec6dea46daabad7f7351d8b06e16187bee7d9ac5841142f345829f3b905e44558a476ac100e4c7ed528495e862645363e904829f91faf44184e19081307228f7033dcfd993ce6568d0f989ede3b6c2da8e47d3b9900ebde9dc8a4cdcdbe34ea58ea1affa9b72b851db71c676ab7501efe63474cde861498dc9f2014a12dcdcd800c454b838dd4108188ad9300d47023e5a7375bd4b0f378e3b8b22e36c5ffbfbb49770aa16e4d49784670d927d23af354c8c559761aaebd5dc52195a001b6fcf3dff13e63323d145551df598702c1aa169539f043ba2947b60f73a557da04467b8194bf276d6b350fa71c6e7b9fc8e812cb229cbb1e191dbfa9c81768da62083667bf9fc8227667716611776eddc47208898ad0c060928d253a8773418849727a043428a161461494d91508280ae6968aed8a43dbf04d10e00a13bf1f9d3e82f25b90a81613c9a3e87e9809a71d249136639e0bc3eda17054d90215fd163b9b6003e7cbff6c39567d18bc5c3ec20a6067bd9213d92e602b3488ab260df54e0a4add960f9a6a65d741de5264e0e6ee58323b6542fa43011398a260208cc91e61360995b583cd6949a6ef43a76c692d3f7c77b2208742fa9aaf4bb17a49f4aa735b7c757fd5af2ad210c6a81773da04951f71857c4e187f83306ed78b7f042f39c032d2e647d30eb78b371c0207428bab1d8ffed1d7048d5d762bf42cb05bc3c18dea9417a86cf17e9cd8dd908eed51661f8a242abdc6fe0f91531bf5f6035fd27d3fe19f8fa3516f4c0c2ca6523696616419b09eef4278ca0fa67c902b82214d0451da1f5b79d3e643d590d7ed5e9e87e888824207eb4527263edfd12008fc971731154c6912bdee246a6a7fc22f9fc2b2b4c954ae5673227556d73f3f1493a11b96698adb3b68433161b0adf0bdbc57db0aa8fa6958fc2538bea7a1a671ca7f206928a080afcd1d3e4d36db67e29e578dc4b86eef04c4623dc8f15d81a2d7103d7310ad6415711359ad0ab981595d0bd0a4a725022274835be256fce15357ff2984595865972d43a2a67dffb6e4a99d0699d0c480d3a1de5daeb0df94d7afeffd35471781ef94bdc24dcfc186bfe0bebd3ca5448cde4da36fdc2316017ee423d55ed7e8c6871278548e96959437dccde171dde5ee78f43900f9b499894cf249612b0c7ed2059fcfb5c0a408e4f78393a2d43b918a2c2d911b08f0abeede21e843d4c6093f2cfba5eb4e6e3daaae30d71bba249904c2d6736203fb730f8cbc72804f23d48861810acc2e5166cda4ca92530d3fdcf362f6fa5ffe47ccdfc29c200e94885e3a6cee0c5cddc918de3d47d10b8caf2418c671d353b739d2f5e7af8bb6dd72736247e1df537cf368e75d7e8069886f917abcbd7eb494338834fddf6b424ad5b170670d2ef847c71128f34017453fe4ca59c83ebcf8892b608b7f34fa9ec5fc229081c2df432f5f00ad94604918025ec28ac71a30efc0746b48418196825683cba5e6d4a1b2a7e47a5e709fcadca66f782ba54631e6d9404cdf7555171765b4836cb26b4a9399eaa7943f670cbdde89910a029970fd630c87f01cfac93209974639967a90e59dd6a9dcd7e1065009966f056581973ea3444842fccf6e9878e2427346d3bb4cc2768b8ed26d8e51e4ce4c6da252c32f4b03b8fef8ab17545cff5ab5a6205a464304b9aa6c8a9894af5d3c7ca4701538fe2478ae4799513a4eac066e5f0c069fc75117cd20ba40847e491fe21056cdd4c87ad716f335cbee608ac0e763a0e0844909d199bc6b60a895227eb8ad7e620a5a97c89ea125a66db4289df1dd8ba9fcd3422f65ede8e06370466f3dd57a7416743a20edecbb2f515f10a4a9d8bf5e5c87fafa46be4428974365633aa16e83ac93be1b72b182f98b156ebcb49d1c82e30831bebe3ea431b3e431e9135b0795d308f0873368e45759df1ba06e1d8a6f1d845efda1c96114c2c02ef92723f9ef36f15bbb225d8c0fe68650357bfda04c06cf2e6afe14270120f6d5f3dda0fdde4840902e123eb885e37fa1083a73960f56b369018d19dcbb4b924caac72142c50b7ecd7d224ae1bff29713bd0c052c659db9c4a69f6fc9db3b50712637eb3ad3102e462360dfd5862a28c368274e30a9298003a33a977a7f3f5a8506f948a021278a50f87912ccd13c38838c74240ae1978a9055c63f25c706044d2240ce72a5010d3aa1000381807275d5bb0a3e06845d766a354c9a3f633855973e9ac8b290b00879cea3d5b8a004ea6156add591ab087c2810d386402e167002a02f4b0f4f095b38c08290784f84f0e71909b0b5ccdff9c03e430ede65dd1bad78f4d5c041fb8e1a2d899d83b77ff49b61fda790bc06c0e6873a6cb0f181ca5af3f3556a5626efa7926224a164df5a9806b2026bd12c2a53cfd6fa90d93854033a457bb00789d860fc3715b57dddc256de8e58d94a145464fbe66702eb2ca5c3ed8d697c1a04a43aa51e3454ce330c6d7d2b3c1b563fcc666fe3bff43e8e321b48aa146aeb0f99136df44491ed51a63c2d2b17b86b1655c3b5ca3882d96721868c98b2b4c9686bcf3eab78e217e7400deabacb5660e16e20b951171f3a0236081c3ab7138f8119d4f3e38a87f2c3f2cdf89930336616946080a6ae0175701444bce43288df90952d849bb00c78372e3451e3e0f2a04c79f746c625a71d7c28821038f733fd443ac425fe6b481ffb06af5557fda3068708f7c6b4f64d1ccb77efc192328f5801b42a8df8ff5b37b63fdca413d84c953158f44ba61aaa2205a296ff4d6156f2d214e7ec1658f4be3c0612414a01d5bd5bce6aa2de0d47d92398ffa39ed5848d52b54df7440d3bf5673301df89e5cd03e518f42d9a43306d879c4e1f39f1382243c9cbaed92e02947bbef01faa975a083438780d3752c9a3e48c9c1eac85993263b8e8a8c9fbb69ba4e959184b5ee55629432cedb439a6e061411fa14bfef4aea9211c87b9e291e3fd7a47bab10c349476afd82b46df6db585547142f2f21ab660601212b858c67590e9a8f464be5f196c202479bd33fe33b74ced9c07ec91823753cd04cee312eba18689eee38f7976a851eb7770bfc9724d499609f81ea0eac538770dba1b418454afede973935893e559a9108c46d99813637a128532191cbf1d527ec2128cc0b209bc39e09e1d3636edeb492be3d9f975051a19fd1e94c3ceb881049e8843d3412c09ab80f63d10f7e116019ebc3f92f533a977ac65bd93c9a156bdc658d64446e6621b213181dd6f1b7c81e21eadfa1aa8477c4730f413202214f599a0ddd87df53f690e8d2eeb179b1f2681ef130a477a6369e7f6f245087ddae89f19446739ed1396eeb2cd0f1690dca7dc2bcb9aece6f9f8c1ffa99c1dc659b3f990c0db6d288234deb26c3189d308d4cebb7debb07f08a21c061b0e628ab41403ad897d45e0ec523ea7874fefb88142f8b72ccdf90f32afdb4bd0547a11a3b133ae5b1c1f3086ff65255bda68398d412d07a99233e3beb242f324476cbe89fd881f21fe28d6a5a8b1c21946ddc7945323cf9d042c8a0c90fb167207f98db64227b06906f7276a2d93bc7d3339c4a73f27da223302b83a3fb689f8125a340229713ac4b19116c7e46332243d60620d3b5e33b1294617f8cbb16e17e5f98feb7df27389315d9df8e287520cde98be5f137493baf91f52885e7ea687e859630ca651862140c37392e64b53429328e51ba3e00c65294bdf5e363cd443055b58422a2a48e00a20708aa5846038d4533549bf03010fec88dbf810b7f802c0c81a48354ff83b06e7ffec02e8858dcf5397ae97183595bb21bbdd62fc9256adcd0431335da70369b631748953e1de5fb45a921f6d7b0e87f87d28d197a5c4779538a026ff59a26880eee79a206a1e02b0999216cb5ef50a36a432496c6b15902e46b5931f46cc6b64498f62c26dae2e1f4b3e87e461908bb5c4bd5d5c5d9325f45f5f5d6b57bc20f0afb4924d92e6433addfeb7c8aea20c980081dc507e7a794a38fcb293f79b8bba8b487677230f282c3a2c6385e86e08e38d453c660547178cadba1697efb84e47ab0edadf22ac426f8f394fe0c05f30fe8045a5fc98249afc4cd98251329024522468d918b71cee8a73c3b8eaa140792082bb20db61da1ac191146f65d2db4b6c6f39ef322988e9440de24b5b737969a4da5854e0a2de60cedcf7ed609a000e0b791a89bfe391d806927f53d16aaa7e905f0d42cf3e7003aa939c57c3c9535faf47734f4f1f4ed8a5946ccb2cad0e538b6cb00ecbfc05dc87fac917163cbc74ea2be065dc67cde975760ebe3130b43b112c017d4b0bb7e0d418741d545b50ba50fe8b471c7d16de58a11612abd635cb44874890b476ad1e96f37328598f4a894245a4d12152f45c6af4b812f28cf102f33338bf22f4bce4a063b06b92ff888032fa5c0ba68e836643cba2118511879dc5de5895110be8d5b4d854cde86521f7cba8b934920922282819299de62ed0c2046866fb9c3d92fe72608d96d5811241acbf653e13134d5d1fc9705ac2d77e023dec0832530c66693dba7bb65341be23fd3a58f951f89360eb592ad5083d206575c61986cae66e0dd78a8fe0b0a8cb241ea895f29e0ac82edf1719a78ac02a4649ac86052f7143ab38a99f418f6324e2f0b7eb9d6870041916f4419afb760fb5b6f5643d2688e0ea19bc099183a25117ea2db4ce6db4ef23053751c7651d6a8e6172e6c1de0baa07c956dd7f07a3ce2f80e2a78d6490d5169e462cd96b8d55bf82ab2e07e183ca4987ca8be19565800a7a04c32845e30924279093ab06328f1504babeb66e58c8a3a574b9bb4406097b5d358e065ff920f9c0febdad50034c67e6496c1f5a80d93e3204da263240f5013abd827674036778073215d9b1a9afb90e0a6d8295cb467411eaaae1f66b8fb5f3c078a2eccd9b5f493d9872126569397f6ea39382fe05fd3bab16ee1a649314897a185e82f1318be55abd95cd7c07015337f4b515b99e17327e87236c06e279835c0145fbf3d8d1f90421d528fc4380dadfac91616ae5cf9f9c1d3af0336bda197ebc54b4bf321c45f4a7a2b5851649e53c4e1c299ad0ffe128d6ba7d16080687b7b97b6a832cefd03c5e79a178c01778da1e9946936ab1df823ae547b55edca3d8ab03498d7878a9794246dd4789dba61a2e4fe0ee2c5fd826ec47a8fc23317e99c60f8aa14827157568079c519813896f28c34b2d215a9cadce2a456a4287323de7c4490cae6e7df6bf217d332482680f468842c017ebd69eaa92f742036dec485564a410f54834e3923f27172cd8872b60fa42c3484582e770e2badc8d0429e8e861e7c163abb2d4e5608bb05f624fe24b857756fd08027a183648fb41efe46868ce3515d3251d4f92cf09a7220d3dbbef6c68d578f9362285a209a185344447300277982bbfbce61865fad3e1050d87357fb93b85ebcd8a6d0f0a6eac0006eae31cc01b1d27de2c08d04853ca94340c716746e65848b4eeb20309b1440e3e54ae561b7b0250cdd8c02ffcac150912070cb93cf818529b0a03b5cb917740d78b39879345bd768931d3b5440423f55d14eef83eb8c029d079397f61a23de70c278446f9711d85846cc4773b0184f9988dedeb0915f6feede742d56aa90b71fbaf3f8001161fc038934c606cef9b41cabfa667e5369d235c47aa4176b103364582e32a30a27473bde1581ecf64beea3d8620cf3ef61802328a00067b51889641617a3d0546d447aea29f17fd530f02a068dc98c4462f3cef900b34a0d30b4caf47890dde844ffc1d8d2cb1b48cc5d259037e63d0734eda2eeb37571c10de34c90df80f45b90a7754392c87fb610894bf5cad7ec758219c342966af26dce0fbdab4f3edd49940b183a0997654658c9f977f4f3eb5459314bef9b11c9d120d2545c281f5aec226f4607723880ab748e5bb05d599bc6c77c9da5602a2946e2eb1d827100963ed18b791178bafc135f01f27ff60ad3fa277bb85eca87b6fd14887a6be4d9af1f4cbbcb1936126807e95fe15648f5431554730accca785f95a9a6c448f146cfb05193f3d257128491982c259a7480da360f1a885dc9d8bd18ea4f6c86d096f09b63279f05efa80a1f0139e54439808f25d31a67a844e003103a2c2627aaef17f6612501568460bc6e3382d2f420ccab23017ca50c1935eb8dcfe9b44eb9738b525df248d1cd355af48972d2e56ba66cb58f29ce98a1eb308703340b2a17e18aa9b11608a015938e452a05b8d133d08564d59628398969aaec4b9fdccf301d62d1937f1b371a6556e9741579403fc66a20b180aa9b714dcb651b48606fa1fbc8a068c26e1b756d43d3fd7f21be8d7c6ce765caa2a3df6e8adbd0a468b57536fbb958d2b3102bf8b9ef72924b861e49251ecfcd3265552a223a3cb90604555aaa0f865571299e0cad11fd5f4c98162c61ab940295e91c2c3d6e1d28561dfa7e8b349a85766f4c1e25e7653223fe50054b414d381dcdd532ab4b70eda177f20d47418f895268a32a508b508a740ba77442bc9976a54c20407e3cebfeefa7abdb5c9bdc34b11dc7915fa60be1b047ce975128f9117a123387cf7b63bb77400f5ded9b21576465d0db961b355409919907a9181ef41bf6be59d69a2ba4e4a5a846ff25a6e57a50edefd764d65e8389a867e2bf960b8b8c5c6b44d2c55898f652f04c5f94b54856f137755684c79367a9642c266212a0af1ed0c0a4c7574d018684e1dc690528e2a553e34d67a998a6882c14c2760dea9730f1969885efeb207bc55626147be2393a5582875201af3c827ef55d2a1ebd3db956466a0dff8d2ed1e2aa02e6093884364cec053f81251ad94bb850104995cb9c3adac38367d32a035e21fc9c0d923ab57ca20fcd72fdfc1973b294f360f8312606a65516757b7efe241dce92a2a93e8d8a862a88f4186eae6f436068f17ddae913471750464c6311a718c397ced0b94e1404dcdee76cf8a5abf2984ade1098c209a92c266b8c417f599886c1e537f81a85e00881126984d8a090c12e39222d9a046a864317d043322a1e4062a0ae7350963115bb9addc37306c2cd52e6d5ad5a6b90b71ad02984e9198e990b68c84c0303b4adf53cbc441482837250890283526a3d51e3ce119035a82956c0ab3c6454f0fe71601e3e7ea6480357f12438a3974602359ce82ec28803ccf73845b18b3e1f25664d6be4e41d9fa54150444500a31741223e283caded26611256e15750df1ccec3ade1a12f7994401fc97ec4fe2a55ffcc1905b0bb76ea741d503cf1a4feb73323bac279d709dd6147ddee0a76b720414f94fef49c03aae0c3c05720dcd9241d85780227d330c7158d361b279ca54332e163db9ec4e362194fb6e6f9cb3ac9d110ba5e2e00d60e04010680bc0ebf8123d102fdea9d113b2ca1224db8fbfbbd98c18e69b3bfb5d63621846c423621646fb9774b0ca90b390c77c60e6a3c05427abc37a477f706e6f1224bba12261e6e3630f7d5b846222e5d3ede4ce34ad33512714c7ce96688635ed331915a1a2917694cbcdc361ef33152ee661969c7f81eef8b1ddffdd8b301c970f62e3d8ff0cb436f870671e8bfbc5c362ae62f7fb9d62898bfbc3e1da4bf5cfb8bdd686ec6c1db69537a4df4269bd0bbfb08bd4b42dfdd077dd7d96745219b65dc66fc6d318f969bf178e935d92001c7c0a4c75bdf0d79b33c7dbcf2e2909260cd36ae69ede5f132eed3115fd270bf481b7a388c1eed7b37f2088f4878f4d1698c957d1a1dc66ab6be1ba34b294fef43def76edcf76e24c1db761fdcdd6e121c2db5393ef418d1dfd6d574cce89de8dac03c1e66f47847f29a6c488fd74094c1a3936ead8ff7516fbca43e8d66766f7a6e3635914e0d6e402676ec18ce4e334b7d64af8fdbcb167ab936d9ebb3ba6ddd9c57e35e13b147a5f6362a3b9b49b80bdd5c3969c3c6b9ed366c4d9436937e9dbe3c66f7661ec3e6b11e2fa6ed269bd143f7310addf76ed427d91eba8feda1d05647bd65df2c1c03bf4d240a5d8ab26bb35d7ea3a16dbb06b65bdf8dd07d74a349a4f6ced2bfd8d0a5e5a8cda48b43c2d82d3806e6d15d53771fa2fbde0dd1b7fbde8dd19374dfeea3fbf62458dacd76766445364bbcd5d36fa67a6dbacb77dbe5a5dd35d9c877d74077ebbb412f6f7d37b627c16febaec986bbbc0f6ed36e5602637fa7f2ef49704dd734c45362774e0b2d9b87e8cfc8e351c65aa32d1744607afa9a4626916aad32dccd32989bb312c1fde853754e56b29295ac465d555d191c191c9997979288f4189897edf5dbe5e9c6711755ddab0d48e8f4dba5cd32587292939ce42417baf4be5797dc47366fa4d347ae5e4a5b5522e4ab6bea5e9dbe5a53f7d0ebb66dcf25cc715be86622703dbd99085c6d1c69443a776f48a7f74674ee35bd591c19ccbd92c1241177b8d9886e898b81797979a9e74eb997ca71947ba91ce588c01d8d17d9345566742c5856192c2f6fd881072cdf152c9f8fe50dfde8937ca8fe52745fe449d5cd3223993ee1c85422b0cc31775cd1c0150dcc916e2e8d6c09572fdccb1d9d645f9f46b7b35cd78946f5e59c25fdc5da9046448c44174786081c191c99244c925021220718ae8045260718ae90c54b138e8a644892baaebb19476b00e50eab28bab9baa1ee32bacb9b49b8e338cd661c1237b53aeb5667edb6d0a5c669a754bbdce943366bb5a338f49d3585aebde32ae642975ebb767aae3bb519074b8dd6aebb38244cebe9bda90fdd9bed1d0e097738245cbbadeb4ebbaed3e8b9775a376bd566d58064587b67b38b6cc6c1a289477f4d333a1dd94cea328946754333a8d490159db35b4d97228d8c8fce8d1efa8b79e6c9d5128ea3d1cd245cdd8c43d268a7757f5bd77136e3606e84aa23fbfac48d46a2cbb055fd75edde741d1e7d74330e09777fe76c4e82bb87349b717077b95756bb48b3b95e1c92d675d73a0ea77ad75deb320e499b41a54e9c7148198784b7bfed59f61e86c0c1ef33d2c8d4cbc20e5890041c12de00ccc20e5880049816498183da7c04a69d945c55550f01e12a4b65adefeadf0684a3f6e1d00b89547ad1468f8121713fe56abdf622baecea3920f4dbb957a187aea9bb36f4be3e71dfeebb7cb55d64331d3df4586de6beddaa12bdc2ed87eaf29a4297a6d0a929746de8dd2e9769b5b95e5447a387ee8df6fa9aa6951b555ad54ad748ac3130a4171289237194237134f498352c4275d2a67b8fcac9cbbd267236f44ac6236a242fc3ca9e91325471361f81b9bfd73432ce4dccbdba0c5b1343a2733667a473767492b5e1de856c3e026faf6ce822db75b671c8e66cb3f46d3c42e7ec16b2361bf7ca6688ab775567b31298bbaf4f1b4c5726d0ed249b8fc02491141d57f97af31158dedc9d7b4da4f4b55ef4f7a9beb3a49b4d5e79ab94f5a2daa7ede62478fb23d987b90d9e42adba3c7d3982b0bc0684e5614e7964a7547ec61b98cb5737cbf8db7ed01e93432f5ddefcf2de80c80b73534f2b6b7901dffde0ee31a7af33427d56a2f0c1f2dae9a395f6361b7a596d40ba57372351f1064c580349f0f6ead5e68aebf3c4d5f4e3e1ed9a48bf117d3be96e17d5edf43d6e0e089df4b8ddfa6aa50fa37717d97c04161d6e3fd4cb6b225dbe7a674da46fcf138be83591ee8f474fa2279d5ed2f6ed361f21b3e8d70f8843afe9cee6eaa33b630775bb0412fa766f4227dd9b9877af6991352271776973758d481cba35e6efdde16613739f8c6b2462edd5bb9b4b57be5c2311c3bcd22e8ccd4a60d9bd9e565b2f4f2bad5a008b22963fe4edd948c430372741a7a66d3cb24bdbf86d4022963f74578a6eae6e24d69c044b9b6e94ccb64b29a5ec027df61e6c93e1edd566efe2c623235d24fa6c9a19179d8a2a07842eaaa33b0a3d54c9bc3b67b56fa2739f614537575c3520093671bf91179dbbf2a24bd125658778bb37d9e96367b311f97ec0f0f6ccd6bfad765ec0d3d3d775a13e2b5138c1f4557473122c7a6773c5dd2b9b8f309dfb6b9a19afb84bbac9be9e21ddd7dd67d8d733dd6ba2c86e0062985736bffcdaee4d3d3dfddb6ceae96bfa474cf6ca8a1e82f9a813bdbae8d5b3bb3dc6de88aeec132909ae7ff572efece83036641b8f6c7eb94624a69ba5a7ad559be93590048bbed1b73de06113e9dc49dfece895ed44af361f81eb49b67b35baaf4ff5db397bd3d51ea28744f6557aec219b95c0d4d4fda67a7d776750a9269beaf5ddeb765f9f3aee662530bdf60771a6dd9c04d39bbda6330b2f83e0f7697311f8fdb2f908fcfe228d4c45cb5af2461adb60f887c411d848c4f005c3c7f4480652085884f023042d42009a32d01267deb446504b9554ebb5044b64c1c3829f153c59b0e09e8a0723902f357862f0ebba2e1ef4543ca052f1c0a7446304b55449b53e3102e804202770914196b5848b9fe8242727a705f1073f2b8670e567e73101d4332fc504975983e2929f2ef35f569808c3926b090e2ccbb27630ac8bc2d6c59230a4a057604551822bc827084bd04f909620a0c69a88c1eb1267deb4945cd775956009edd20a1644e122d3914cea6513a912f014a0044d66099c98a0962aa956aa647ab1c40b265e40e1c5132fa488e0e131762c13585ba8cc194c25595502cbb22ccba2e1c475029e2c93d9d9e20327b0f0220962485d6058599842c97158593402a4c096b544c9153768818e1352b00518aa70a5b77429018661188659c7300cc330279cf4cc8bd243c5c7aa71028b65e170c10c2ccbb292c0832d4b3611c4a402e30a185a8091058c2ec0d8f27caa99939393b37359966535b1a567de17338cda8418259d2f39e1c017dec9e1038636e79cd3c6963982c8c4896b0b2d4df40cb2481e6020418e0dbafc64a1ca17baecd0b0428a1e3831031cf3b22e486509152654a028e968e2a7cbfc4f3c8143fe5c060bdd4f97f94bf0d3657e5dd7250227b2c908e24b4c428f125290594b60b2042896f0640952aad3d8620b13181721e0c20926a69c81082226ae0abbc20c2e50c20b4280862a780108f00841161a989096b5c406f28ba02fba7421a70b3b5de061e2745a020aa4a832062ec470862ea8604b0a78a04e7c62d5755d1716527ae65151a5aac1e2ca65ec6459488b26e8959d2b3c579ae8f440c213769250c50f8fce172dd0f142e645143aa4c0b22c4b0b5c7ae66921686aa14be59253ba2502263eadaaab885255d1535541a5aac2a7aa024b55cd276a80a3a3c49937e592aa0b2ad5bca4d0441359662dc90123055278618a0e9830c3132eaca0c90b9e5c8c272ad8d9410d4600c50b5b50410b6660599675052a88e1c911a690022aa090b2b830f9820d64f0a8a0828a2a545c1180184cac20c30f97ebbaae2fb2d0c2093f10411678f085d4a5052d4850802c5874acc07eaacbbaaeebba7c829083af2ba44513b55449b53e01c68f939c9c9c11c41ffc7cbcf0f90922878b11b0f8d982142cb25005c322053766088304227862075e88020b569a48e18508a280f2892d82b054810b55a270e5075b9884008a2730007002d4c3a38529aad8e20a2fb8f2850d1b5861091aaca8411086608518c02008f2e090524a998628320d3d320d54641a7c641ab0c834fc48d94aaa2d9c44a1c216a45479c2e70a5754015bd609769cc880a2a832f189783d41c3120c3b43956cc967555555552db1c4124b2cb14425991ca16a427bc209682941c313270801175d5ce9e2043c5460721e9c7853f0b12ccb12c1a9aaaaaaf242939e794e6694da53c25ea0f21319a47cc26a227b727272a2e826f859e183309a28f9e932bf137660789e12767ae6f1347152a384285cb4c06ae204ef2871e64d014ca1091130b9accaca728025073f39d052b22cab892d84469013cf114bae5bc8071376faf47036521de7eee1822110f9fec4a2e62aa5517dc1a81987842f0972893450066f06be06302807b08b0f722cced0c94e117896d00443f80427181e4227ef063c47859aa1130c9f01e9e4e978189e460ba5bab450769eaa0e99344d7578c8d3a8d7597ac6420c79220d4cc1c3268d7aeff68f15869afb87e277c50ba2e01c811e162acc893431c39de81369a44f9c8187f1e775c19ff1dc3f62e0f71c7fe48f958678faa3082300c125587ec04e41d7588921d012255602594d3454d6cea97539517a3a1e7ecf3aece8e71cf0fba52dbd1bf143c01d7d653c1ca275e7d36182028e773e1d0fa7dee663c3f3dd88af692c874e6dceea70be128e22629db9b40de99475679ce9d424438d5db444311a15fb43449aeaf13f227df3ea0e5591d3a385132d54f450f901daf245159f288dcab18b9327529af4f450d1d353a52747f2e07e2a7b8e3e147beca227a3347be47225fa442c8d82018a416144319ae68501286ad1a867258a18b81f7f224da7fa14cba8342acb9dd84345acd2a84706dc56a260c1f4d9a55d1b8f2878c699192acddf64a7cfd9e9ed908f25f0687d8255a8ba09cb2ed3a83661b74763ac3a8e48a3d340da12dc9fb55130b87fcac143d3e8684054c0fd1e9ae681a14f6ad4b352032d70bf146960aa8f6595f5f1c383bad2a83706dc971b0f2ab5b8d17837669f487d6aeb935e28dac623eb4cd36ef48933fdb6b4e853bfa74f0f43d9794a7ba5fdbaa6f50c8f39834acd5edd06ab7daa1df2b1042a105ef2643d97d02793618ef5192d3b955478fa3a44ea93a9ff88a043058ecf3930bca96f8fc6d51f1142f004cbe76854c4f03c748182c1f04618699a199493930382147c0f8d7a566850e565c1309575244f7e403a984f4e4e4e4e6acab302050538bf2f3044c11ded830962581f3f4bac8f1f9e46e5fa46e51d30cc281a8d7a62c0f03bc01df132188681f30dd716f538e778c10f0b27cc80fbe68705c3bf18f2f183e19c0337f6d1849abed2042e6008736000b17c3fb8e1737dfd87e3cdf43be3b825dc36f0e5338e193aa8261f6c60f8e3871fcef09a6c8ee38fe3338ef7a93f73fc4f1377bccc49e2d3154c30852ed0c854e39a7e3f69f029c2151cc2cf070b1778c20bc347f36703d4012701aee71b72e0f7aee0f7d30e359c0eaa4ca3aac39f6e6854c691c153be0008bfa75045495841ed8600d350435334082a2645146ae602184695f859a9b202dc5bea859f952a3c381fc29faac84cc23f8002c7782bd333f0a22c548b9f151a80812bfcac00a109cec7f04f06de1b1c2aa02fd2f45feabdc21d7001539a60492d20ca0abaa4686b6d4d44faf1f12249808e4faa6f8d33f04952f475378430c6877139097e3838c14a4e4a8986993e99dc415ee898208b278230a65d328994586bd4d381f190f4514c7b9b8f594585ef17d1a7f87bfd5df135fd5e45f84827c414b3481cb1fd40379bea5a162678822d20952d620b6eeb0ed1a786170988e3370071bc50279e5e8da54f313d353710eef79646e5f9ecfde6d2a87e033d1df4fdaec2d3611d890ebf77235bcf3e2db510cfed87d76da1be2c489083b15bc71e9e70a74f7dccc2251632e953dfb21b80785ec8d369b48a5d41c9e524d86423b17589addb59aad4d7a74cc2d710443c1df12d0001544ffeb244fad4f1310355062a9c9f16dcf1ca5945eda0ec04554bcdb2ee944aca8d078c30cae394f0a9aca49495ecde78c4ee562204d9343ad7953c75dd29d68c1d54ebd5e1df3b9ffa8850862ff013033f2290e18b0d5ad042fc36cb089cabe394b0f5b66c85adab6d2ca89d1325084da20081e731f9e9b1a287a709ecd8cda4e7078b1f26504422d49d3ebd253f3d56f4ecf0449f2bf8c1735754187dfaf422162caac906c39b8de01186930aa510b67c8f91475a5725251629a525251629e5d5534a2c52ca3ab5ba91a4c452218e5565e915cfeeb7db7cd0c0af4f3524ba51be8f63433a128d4275d4719b46336c5ea3d168f46470f03460b0d0f7c2c03f5a48892277a4ce16209f2a118a2e6164f9e991d24b7a87cb962b3ed00984428c2e58cbcb8277c0010f79bc7b053f9f3ebd4b27120a31ba68c942454fe4894bbee082e5ca9376d2396274a1850a159009e409c2795afc884bd4137cf0c95029fbf496a87907fc1e371e38de8d2ef3a2661cf85d766f3ce0c5d1a7f76903002df3a2be579b0f88ca49307c9042ebc5be2ace6463617889e1cd4a6019d4a7f710170a27086a776c29df237e2d618c39a0f34f865e5afa69b30c9e9faf4e3c1b4b243b64200e1dc073fe3d1df2a1b8444582a785b84f2308ea3c8570368c517248c031b0c9a68a58de8c04bf77633e2b4d70c5d7a99451464e84918858741f0766a439c9c01d3d401c62bdb9748aa7b9c9f4880ee853fc29d2f4903d9fb013c64ed9afe0d898cb4a60242296f7c7c3d2a369663300b18705c74fad4fef3832261f2ab65eb175678feaca57a1e5c410e8eb2a2ef83d46a950f66c272412508d124208218451c247482275f05c1615ce1a85060d2ea518a56ab4352e8c0a4fe18b1db97ca3053f68bb07e1392254a8bdd7043ff862940a81f0ab562563c3ebe2e07bcc0a665b78e1458c7f5ca83a5332003112310d39b8ba92a7a6bcf7db785cf6f5a9f175dfbb71fdd979b3ccf17b6573e7e0ea71eb112d1f2a8eaf4ae4602351da5cc4831db9f76ebcbe6033a14f26c71e1c29ad973223e1c275f2e6aa0a55b5aaaea671dad4b63ab7cb5b49b356edb4923619aa5e8170a7afd742d78693d5d677b1aa9ad6bd8226aeb2262e64e2ae0d3dad5ee543f4d7abe9aaabf74684139be02aba1aa992e4a68db45a39ed75a455ae5695cd224f6472bbeeb0e22e27c27c30e9dc46b2ddcdb109ae3c91499f44b75a5170d5aaaaaa2a8e7bb5dc6b135cab4abbc6bde2c4265aa5691909174e8b4d324e6cd2012c1df841c205bfcf1ab14db5841533884daa25ac9001868f3df8d990e405569e6b1fd96c048f4eebe367e851c39c111c6fe62e7a4decba875eea5377ce8eb4ad7bedb2df8434fcb0c8661c4da32fd84b89925e3a9a3d6e40b86bb80b854ca3df84ae7d74b587b4a83db33934e2b4ee5567a3111c7abca6d1a36974ed79e29069747f3c6cda7e937df42dfbe8d99dd7349b8dc41cbaa571a2f8eadabda91fdd1b987351c355e34af4f25c0ce985bebcc4a885b473ef5e302dd4611a762e6e3cb0d3d165a35e3efa6c94864da3d143a57ab346aaf1f2a13b834a8d97b7c45d64e9abfc8b15fd263e74d18d0f3d86348cdd9ca42672dd1f86751a3682a5e88eb8cbb0353164bdbb0c06ab222e74f9d0e531ed30f62634ba194793db392bfa8badd53616d94cba5796b3d0b5d0e8db47d7ac2864b311dc7d646750a99cf6cdde843a9b71b46ab31238ebe4d52e8e964522f033c208b4c11636e0428336d8c2065bc4f4a8e7da338ebeade200e1bab25ac671512365c77a1e69746d3cb0510c898a0e330a9d86ac755a6d157adc805859eba994e76cf590cd242cfbc43df49a0ec96fef707380e8dca17cbd94a73e95d659eed5563e64dca5cd383f8464e8b9e290ddce6d21cbbdad87f6108e8d7604ee42bfa4e81910d1e5bda1970f591c92e84a6a43ef8b913023d2cd108f46a32a6b68c46d3cb0108769146e36218b555cbbcb5369ab1ef5e624b83ef4cacaeed17157f46ae96ba429d55235da806cbfd5b318766d36585685feb6d06b9a86ec8df6ec59f650559d6aadaf5eea7a33f777d14b37777faf899dc521e1d037ed31f42ccb6c17b25cf7b04de8a2bf6d7bb5dd2b3bba19c7fae87ab3d1349b1dd32ef72cd4b8ca3e43df7cd450f6f7ea4a926621c6687631ccc24f9b7bc0a9e44b93a2d06d1e267b59863d2b3d8b79f6f28c94c9c064bcbc90eecdcc1e5f82c9322ce605c3621e1ff3f2026373251fe34bf131d6c663c677cce3e5cd35baf4d8308f341e6f367d03126fcce8213ab2d569532a356ab98f7c8c32a9c66bea6e8fd1e9b95a6b965519f781fd45d3a226e3da607f39f642a31cd9f8b73980f42e5eee558c87892ff9803df46afb813bbda678fa9787ac293e7b482432c5db23fbcb4537e36091a6695556ab45530df731e3324623195f3eaae1daccb88ccf78b98c2c5e5e0332f48804fb78b91907d3ec661c1c8ad5f603e2f891c52e4336cb630156e5535d661cf8411e1965b4f90175b41947a545857fcfdd7df81ec4cf64933580fb67c259c523599737bba2621886e1f080b16311ab97f2a1b0e7281f65948f187661f127fc240efcaafbdea584a94a08533ed7776fa3927d82735ecfb3a53cbc9157ae7df3c472f609d5cff131460b4a1fc004e12804883f1c3bf429cb38785e97bdc121617a1c12a6170fea0dbdf62c84df15310843a64f71ca296fce383898de6688e945c2f398bd99d7e6337bb55f3693706f3c2e7addcf2b47a0021b00bf2b5534c13e5f0557afe8104be4456c10a797cd9103479f72f8a04e1f3bfc4ac1b3b721fd20dedb107822ef201f126f5021c6de8d79eb1a9e376fd7845824423ee4405824403c4896a33e2b3d50e0875fcf123c3f1b452fe9cd49b6f7db539f624dd718e2357d8cf654c1f3f4574c41059681df1553fc6031f07c86832fa8352dc432a7cecbd3384629a641ca5373fd89b904224d046a972a46a368d42ea615c69645b5ba5c2ba84f9708aa049ead20ec343e4fada0488304a624704df22f25814b09d89a45fdecf0bbe2c913f8f3d8c643ab9b0392fcc0693eccd36bf2619e9ede1b0e87a68c5ae67ced12697422cf14d4b332851632824239211d9ae784f8da458f1838be02451a988a726a6954b682ba68d42b038e875690e9d1f41a4ee336449147e0702be28047e06e5862f0e6d3a738c49a880cf18933f1439e2415c49a880479041e818b64c31267e2833c49ea6d3c826c54e24c9452930872219ec4901779ae3fd87b549cf1bc1bf15304d90e8e3430275eda6ca74f414c458810f94b09614d458208e22f452ffab679b3257d9a149b48d4f99cedc89c9c0c18a918cbc387838cdc2944228e21069e39188998017a2313c377a395c0f3dc69d47af321ce0bdf493edbc91f889b8d0422b56937d0b15fe4b4d7b4769188985e4ede6c27db89cf9634eaf5367b9b0f625f8ac27e307248442c9f2d69d4bcf1d94ea36a3c9ed22c35ac691ee2f921ac69de8c279531e999f86b49ad5a6efde9537c2c43a571b14b2bdf8d7969a65d36d386d8970a4287e82379c083b8488a3cc889d8217f5b117824403ee42219f21c229ec490c3203687882751e4fd6a13f25244fca27013d22f7222163e8821f0438e84062096efa2541ba750e32e699cc6cd12735c9f68bca6df0bbd3ebd3ed1987de20e371a6f148d9b9360ee6639146e43608a896e8c31c6182315e46f2bd2a920178912a920afe918a5d6f0de7abc600c0bc4146e43aa54906b05c599a04853a5e277b07d0dcf78e24cec22e3d9a8c821556aa3928d518554a9a8251342ed5c7f9e0e8825c6b6abdd9f70f429e6d8883ce0a6220dc4fb2f556d4480dc54043ec883dc24841cfea56ae2651f1e625faa887da91a6c108eb761b5e078d34605c75b9be76dae98088b04a67ef8fb14a326c4be1410f6a5e096a34ff1d7abbd6e3ea2faf5d0e731232db71ed5eb453fa2c75fa257318a54092286902a44c2102234248c466511158dca5f040951bb14e9191224a851190a105d1a95a108f9d513c4e71571115169548642e4d71505d51f1f8faf597a3cbe6ae1f1f8da450f8faf40f6f175cb1f5fb9d8787cfda286c787721a9505f01d8f0fe9342a07e03a761a9511f051ce9246e51c1fe9f429f2308049aa0986a2c649f6048b32a55c8f0ff9342aa34ef3f8d09546e51d7e80c787b0e8f0f8901606787ce867018f0f6551c0e3435a12f0f850173c3c3e04b43d3eb4457b7c880b7d7ce80b99d3a88ce339e8342a17e038ecdc5872c3e3453c8dcaa3c78b98342a931e2f6ad2a82c82a25119e6f122278dca335ee3f1a2278dca324ee3f1a2288dcaa59b1e2f92d2a81c739f46e5019c008f175d69543e7de6f1222c8dca3207c0e3455a342adfdb8044a620f078d18fc83e4c6d585bc4a7cd28706a37226eb235ec912b02bf7d913f47911df7c8b4e143eb71f32cb2fde61eb75164c74df7482d92c3b4558016790d455c88ab3325d7b88e7b64e6ed0840008f9b6dfc3dd480807ba45e678a8d9b755c3d6eeee108b847e68e9b11308becd0711b456cd8b8d9be8622366ab8ce941e6e8652e43b84404091e710020139ae3345c7cd36cec3de5cc37bf82b20c4368530d1ec5688df239a10f65084b8a9029b10a715d8a1e33a53b29bed7dcc9bff1ec72c16c400d9749a7b6406d9ae338501415237639f41b259230803be0531406a7b3601ece6ec33c82f0a6043aece944cf303dc2333d7b80e3acc6335d77580eb708fd421d799326fa6f9758f5cf3c2d7e11e990cb8598719a486e633c89c37d35f41e6759d29f86628415e3344872037c03d527530c03cbe5e736c02f40037d33c35a4c61c7200d33624bb991e1b9261d79942733394213fc0046a0cb969023407b8ce94ede6ec0ca037634f5db39a90ab3325ffc8373c877b640aa9719d290b50c0cdda46731072c3cd36af21e40605d4f82601ede6ed54c825111a1057674a5e40c661e690809be9351ea4cce1e61c7e0387eb4ca137f370fdf88d7b64dadc7c630a49000fa742289542a8bcce941f374311f204007143c86f00e2c60dd799c2c3cdf40990e7e19a041670050091c3044201406c379bae01b169d799b2809ba1007105482007208e830472c0e13a536adcbc7d01376b57c0690c41c4867b64ce1f04a0612252c3d40002dc2395880f3f6adc2317beb9c64d44ced923178612011a415c9d29d926cf1c00f7c824000068c0701c01666e26c001708fd420664c37bf5c0d380c111beec33d3289c0bcdc44c464e28898b8eb4c69c0cd50881c0041d840e4304100c086eb4c79b9d9f417ee30a7718f5c18ca10249b89a104418019c48fd14941d4b899741af788866f0874a6d4a0719d2936374309e23f8620c0cd50769e0ae233f748c521d099428099eb4c19dd5ce323d2cd344e7a4df4d183470f0c48e19a052820013cecb002b80e1b8023c0ca3c87bda7b1a803d81d600a02d7c1cadc00f63e078b03075b804e41e037accc6fb0f704b00398b12724310581ab33450057d4a54f31005724469fe20160652e94216e83bd43dc91b5337e2be3366ce935d898d7b0334ec3cab8c996ced9986f76c6352be3d4962e6dcc333be38ab4b48c2beaa24b57046463ae684b9fe285b0435ec406791076c889d82007c20eb9222e71265e880d7245411986b1d61340608430f08bbd8eb003051d60928d2c0001162fe091b59cb022080bf86d36cf078baee8a74f218be3e11c9d45423e9399f5d1984e287b463ce7bcf07c4d9c48700057cf49261217aebe030e6a4f2f8bfd6d13eb6adeeaa29f4689b434ea7abca80b1150a3b0c78bb65cc4a551f4f1a22f1aa53d5e14d4a8edf1a2301ac53d5ed425d2bc547c1ee5e01cfc70ae3fb62ee19de2a7ad5bbc533c66eb135e95c2ab5578a778cd562cbc53fc66eb16de299eb3b50beff4c33dec5d4ea8c739e3f9c9f0bb62065fe09c39a191331e1c5f6d3cae5bba420dedf4291e88ad3f7126fe01b66a8933f13fd80a1467e21d606b500d6aae3fa73e5d515469af2895c3ef8a2886807305c2b1fee0789820fc6c50e225894d33400bfa64e25fb4d105101ee08b2e6472f4c195058cc8251cad18234ea9883e557f5895b8d3a88c53c256d469a0ee06ea06ea06ca2f02626a84117dd2da271ad1289c128e2fa24fd569b4465451e3f303f261813e558fd7883e55fd1367aacf7a1a7a2e899e2b577f66508f5fc589423797609338b3f188ada5513f9106a6aa432a91a67dae6c063586891a9fdb07579f813d3710d4f26e54874d220da41267aa6737cf7973e56eae1436c1d5312baa7c6e205c3d5e58bd81b668afde411d467769d4f6ea31a751f4d5e966b36b36b3a87df8ca309b2110aeaee02adeed0635bfa023e29cb5141484ab5475238e63075cfdbc2b32c082330fb8bac5a456183f99eade441f3a851656a654c11d7e56a4f8e027a219e81cfc9e9d3efbf085e59166fe82a54863fd996d7c15a1e612ce7474b0799df824e22feb9adeaf274965d7f4e68960d7f46e7d7e9e5e22f19a84589f37bd4bc4fa3411a97ebdfa9524959d4efb52977d291ab5ab08751b0253d79f6d4c616c1839d3bb11884dda89c463df0ef1b4a6f724a6d027813d3e8929db25223f9f443cf6cb9ade35695708f67822d8e335bda7e825322f9f84bca6774b7dcafe3893fda5e6b127d5447ffda54cf49a8460bf5e04fb75939842247e3e0979ec45e6af5f3789d47b2ef98018caf548733d7bf61769b03f99ecdee0c8e28b1f295a1a95210f86cffd93a551f0065d740ac62d5d70ee2e303c0fb664b0720327d806fcacd4200bbec24a0f36007e570ce1096ce5063938c79f463d2b369082e163968e408d7a569ee4e4b805c3ff60788ab9a0e698fbe707e6c01d0c0316853f88419f4ca63f8d7a89394f47fc8c1dd49883fbaf7f8650a17c314727c6186305ab18638c322a8940883da8f0119333be28a5941909acf767e5bbf15e55a44a1a91649d524a29b327e8ab9ea59412f6ebdaa727a594b351f94fcefa7444d8332a29658c0d9fe4e2a59412c332ce649361f98eb77e2161ec259d2d815509a294557551b9aeebba3225175da25db1b2ae19e392898d403e1def30c29865b4aaaaa955120e89d24ab32e11685af5adaaaa27e39c96655d4bb6864f4acebaefddb05ed3d69d1b17a312aecb86409f4c7e40b8b9ee88650c1267fa3856416965ad0ad3d62aad9296872d470e995d307252b3287eaf8934d80d1267825897768a337dccbe3873272abce4d3013f371e970c494ead927048a4eed896011ef1d7b51969b0bf4a2ad1c06c698352e3cc0e8d4486e893d41a5a885b892bcb361ed7dfab95754d28218ef60dd1a7be2c91de6c6e236e4c43d60df2c44fec2725575df86e541d0f39ad6a94cc280674b5d68412254a94285112a392c803b903c48183871c39604799f8df703a35a94f35571aa59226a1d56665553142e9d330f658efbdf7de7befbd6cc9ecd9a8fc0edf7bef5d5c4b2e74925a6af58fe671a67fea7ece816be24cdf47c61e7ef4a96b80a8accc290f21eddfa97a1511381e964a8fc71104f28a3196aa378d35af38533dc618ab28658cefbd27ad12132afc83afb8e116860a9fb49333d9e078f3056613e8c374c2ab5b56524a4c638c96d656e2f750f1b9658c6d21eeee19218ef13d9aead93c718c35ceccb613bf4753bdfbbdbb5b099824f604e3be1c506c6247ae69554f360abe53f501895fec1a69b01006e09b91df7cb870c4b03c82fbb4c3320c4628a5ccfa897af8bd18c51038796de32165a37c9005eed38d474f1e700c3d79a2c3f1391a259f92cf2c96fde9031ae0fed302f7b18d47cf2560126070a68163155070b402c7cf2ab8e048a507387ebebe300c8109395ba802a80a1410042f6042e3e553ad279ca4203c8e48d32968041f2af0e4a4e083449af7033f44a320863930ccc949e513cec756c07dd9bf361e7da5e107271c6f4914f4c0098c038eafbabb3b0058780116b2a002840523a41ae6e06e11eeeeeeeeac91b8c099c6159c657430058e97f1330438beeee00938be44050e70fc4380a3151e14214a1354f8fcca05c7cbd84390a70362f8380323cd49ca123298800b236459928a63e0781c8d8adfa151211c6fc6795a30961a23bc020300a71e9084dc0f1e53478fe699e6552ba9d4a82bcbe07cddda27781c195cd22981ac02170b0527883b95145d4ba49213f9ea0d20507c91a6a6b286af67250755e0eb7249aabaf5e15cb115b054b504049e3a2de9072bc0b95e8d4d218006aa16e767a1d2c0cfca13190c2108ed841a839f952759b278e285096a093f2b52e438a924fcac48d1e4a7bee067450a2955486145107cc08082a354b7e03e8d46c1478428c4c037340a961a95356c5f1a705f833af4c9e4ac075ba73c553ee1a162973ec533bc93f52cbbc0d665101ecd110f95e5161209d8fa7b345962f174c448279186bb751925d26cb72e7b228d76eb92cad3e18317cfb0035bb772bc53a4913ca5fa6e9eb4469aeeef94b3dd7d71268b766e5a1452675f2ab39bf623ce4c88399b036b259c250fa935ce66b726ce58efec4b6df6a5a0edea4b493b23a5591d985232533a4acebd1cac6b5007ebb30f605df258b7ac37c1d669d4384bdf8cf5cd8ede8c75cd9ade8c75686d7837ac472bd3a754666152d2ead49c9c1c28524a4e291d253595bd1cac4fa883f51c50ea4bc9e7d8257689344374c196b446c419eb13ce7999018a971f33e8549c254f8d30480ace920ae5310310e605bb04e568913b5cb075eba1410c9ca50eb6ce80b35c6223317c4d1fd128e9a309391c0eba119146defa1091e61467ac5b8f57cba94f5616359fb015b1eb260c9b973c8d6ad22819d8baf4d1a2691e129c58975034ea59c141a3b29482adbf2ca960eb92490fb6e4156c65e9045bc7e695a351791ed1a89c035bb76ea451cf0c3f44c9a44f966cd227eb92a74fd62f32d42c79701369fdc958f726ebc1cf0625ac24b2b517501f68c1aeb6446a52730777740ecef31d5ede52b5524949e00c5f598755c3f15e526af774c0f70e6825ed734195a2d774e8d9319b61d84f183bc5fe6a3a84d99c750f65efaacc76b6daee524b7daae0c5feaa7ba066c79edf17b83a4ea3f203c2ecfb543db3a73254eed98bb0003605178c5d740ab550a83bedac9545edfefad469a19b47af7dc26e09c80deac359c5a4b70649efcde6225d46d878d05f4778a3320cbec861d835617fd8d40362ec8d21ae698d5accd6445a69989d138742a1d7a7e3e1d0ad215bd2410d55d543d8e5d3b11d7b6f3c304a3b7b833d748a5909b5901575d7e443f7ec3eba3bcad8370071f7faac3b56fb54bdd4a78a9e620fc2c86118b5998541aad7a05e5154996a3601075d601bf0bb628a2de057561aa1de5487cf385a75f34d3c3cbc37d7f3ac8ce0eb90bb385a0fec17bdd86521c4215bb8fa8338649981f76e640c577fef06bc856112b3d62b6c7bc799badba371a7e1fe8fbe4ca364d0bc543f08913e114d039bf8b9e10aeee3e0a1df69dcdb6c24dc015fdd823bac579f70c79bd7b0a669d6ea41d5eeeb9306a5deb2a6edd61f86d6b4dd1ef05948c431c6b0ac9ab8b5d67dea6ff77d7a357d395125dc7ce0eab767d6c41d622e3371b7be14a967fad7927abaef137dfe0ff056b659922df5a961e42ad6844a6f66312b210ed52d6b411caa4a93af2c86d9875b0c353f2eb81fa7f5b75516969594f2f15e52ea0bdac2a0dd5bf07b04ea2c5ab2c8cabaa69c33369ccfba2666696f6219d5a4a6c586dad4decba8b65de124c7c5869c4fa6bda7bd0d86f1ba0a87c67154e0f7aee7097eaf557b367714fc1eea27222912c586a276d2a7f72e61b44ee784d1258c202c57b2fc5cc172c5073e710299c02690a7c3087a5bb8e0f76a4b113b747c3e78871c1876c728656549cb8a0d2dd8314a5955d625af2b36bc646559d7352796c92c8b0db36b62589651aa6d72db62c32da39ab66d1cd755596b6c58370d721aec3a0dd6aac1504883a2911c8d62c391487b2f2fda8381d15e4c49964ab16129a48946230d5a522569d0bed0170d5a98cd07c42f46c6c4c486319333d960181e62783312dc2f9333d96058802e50fae0a3acac9e1f2c20926805944a849ae79cd995044a830a3b0b2879f4ad2c786521e1bce69c5403833e99bcc987c516a6801f165bd062aa8e610bbf88df294f95c2a3b1a8c4999fa723c6068ebfba783ae08f18b0740147cb070b502a0d6abe7eb2f4295e5a70ec409fc352fbd695055e5d60d81dfbd002b2b65c3ba8976f117e57cc6004385f4eac20abcb844c3650af267d8a87f732c3c573e55c3ad5fbb1ba72da5e3b96965abd7f6ffa978e05d4a7dec9d74e4e9f62be7270fc9573edc01d547837e2a1b536a953e52f1e2a306954b680ae268dcad61738de070971e8c36b411cfa0f47fc7020051b003f2b5374c1417db2ba34aaafd5a54f70c7bbacd5c50abaac30b4b6d908ee9386fbfd6905e168f8ba561729355b413ef42d2e105b5f34aa1f7f75c6e1416a9bd537fd69c303ae6eee6f0026c1d51b8a3ec5eb89bda25c52ae2697146abe782c200b880b159e8e1779a4d5fa14b35c5a7e2c2a38fe3243bdb4fc583d91260b8a333c4f4793464126386b385f3f39f2e078682f2d2678a86b09efc4e4a1ae2cef147b54dcf7e252f3c5932f9e8b07f7eb21f1949f586ae9538c3bef46cc730bea5a0084fbc207217c1056f1c52a56b18a31c63fec3df80a4208e1ad2a7bfd4d29e5d48e30d228ecef1c68d4fc3b1298d334d95f668df40cfc51656f0fb346e6117deaff50e1d6fd5c91f4a95fd92338d027237deacf2240a0d995171dbb3bf6ebb62af95e9c81afac7cef067cf6443f7ba2bee7d8900a7436eabd9f6aa579347d09656cfb6212a844773b41dfa3917f9f8fa62bed8abbc3379d23cec0fc7c7094417dcf13ce46f5cdf0e10795e824b0a113a2943732ee70dd80e167a34e7d82f2bdf79ecc18eabb91fa4834de39e37abfe46fae3bfbf45a3ebe6b5ca8acac6b6233e3784090c70706b593feb1ae79651c0f08f2f804b51359599775593cd027485656159e6ca824ea5809343d0c3aa7680632020000331600202814108905a3691ee869e90314000f85a2545e3e168cc21cc75114c4300c22c0186000208610030042c8a05c057d92e0251aab2e201cb7894a8fe3abd1fe04830e81c64c5ab67a6aecfc6800b8ef5ea5897e1c86929d69912d088fd083b9674fb82969ad7fc69b446d4177d46d151741d44fc3ba6261e21ce51e593454c17a0f95201049a615f1d7cd7417907c7c92a0057868d3e4086a267f4c7120bd653f644c7070a8d6c6e3e38633f452ed2ee4d63ad77d8baa2390c005af417c9da9f9feecb1e42f11bc26227184cfe2f096517c2bb0598429ce7c49495d270ff604add1c28935418e1093dfd412838656a0cc136b5e1d31a68141d79f2abf774162ff1a6905a07a9a956f5c9b40469d2586027e029e17bbb30ae0cf02a842fb9d37316542f98aa388012419a13187820631c17217ca2b6b1df4b9bdc8fecf620a81b24b573c29d0cdfaf6c87fbbbbf49cbb330c0a799f4710941bc84e906a2b4775bb560903f8932a00fdee69bc7524d5b1f642df6f1c80c42fd1cd73d14576a9a73ecaa989c8952943e869d45d5a9213baa1b231867601d16ab9c7b17bde9d6fdcbf865b26bce20d95c335dbc8a73d59c9a6f5e57e8e0c33e77d08691791d8f8305cf6991a12fa3864420091fc3f22b5972e42c23e6b8454b258cfc69b744038e8920a8c9551fa9f689fe97e5a266619dc4435744d134368ef2142cad4e96bc0558c57a22c40cbad38f4cd6aca3caf0e9fc52a113433f4afdc0bf186218383ead37d901045e993115ac3f9ec4d1698c2c7648811a347422fba99eca52b428204e07707be12e06b30eb83bfc39f3e5dbcbdbba7885f34bde4a7a49a3f1a760a04e9523f05afcbc4d788c4e3c4e31f920ed869ab8c57e8c137617703f8f5ae12c33bd50c7e0bac2e5a3cc2003de69fc4477a5403f1b9e8fac767780084bf04e47789106bb11232d4b3b0070c14fa21a048c2ece754ac720afc67524f015968ecd44948fe8770fa53eb8e0bda9ec1e88eb27ea6f145b45c63abdd92b6c247ff59d2cdd4f60202c6620eaf00acf179fbf4d350ac359f6f7a440d95e8458d2fa59cae9e98f85a22a6097655c89d97d39ca240ccdfa6725629d1d8c2f9a716f631b9f07c1e9a779ecd2b6ba952178385836d0d2e7f30e045aab02b16f03eeef3979c468adc8b02e30001c392996cb3608fb300375d903973e64455e58144b02614643ace91c01090406c6e9a99a88f0f4c1f7f21e6109112f0e972a14fb23ba23a31f2493c30866f9d18f7a27165329ebd12a9cb219bbcd252e7104c5d084a99466069ca71baceff2014de4b7eb4d77074e0e6ad8106d3cd4104360f6cb762b0478fc34bc1413aabdd1ee5caeac233305fc40d56205e6a7bf07eaa7f68793f2f69446f4b6e24512e21c1973061c4edf98aef7a38f4481f02efa139aefe7bb88f200f2e02125f44cce1b466ddcd82b15b00c358cb99acae396f4c8dddb0bbdedae93f10aa01ea761e1beae7fedb14f4443ccc897b2ae2de42d87e3fdf7b0d407b90700f540cb198e2e104be0f8e20a5ae0ed75a4f6a52986296010e8c02b236772a38d002044d542f35bf3dd6951b0cda9d335a701d52133e5e1dee75e93e0370009f5a80076de21bab4b437c1beab452a46e28a276b0e742a67561cc721b538b589320250aa6dd816a6a8d019957ee435a4451c4aebdb8181c9e88a22ed94ac86aaa24966ab69c234c60c561200d3361e89c5d688a51eb2415490a129d5201d50557f2a43ee1aacfa8c0ca6afde5665883a774597f338accdd8573d5e66f8490dc049b5cfb55ce6f8aa7597c166d03f9668b8375e0593e6c84e69fb3b6d8529e052dad4dcb151fc290f3b018d2af55af1b31d8de1b299db8dc8aadcde9276e4623cd41ea04f61d136253b1b1bfc55da2385f1af7f80e78ec6b3641e7cac99315ced8bb285e99032cc8a5368dfe30cf00d58e31b5b944396307636d0fb153c795466f3e555e59c56d6223dbee42a9b1254c5fdbb4ebf286d7c98ac620c7629d1fe48aa027147a1b19f1a1be6300aa0ac886d417dadb92eeb689d6732415bb5a1e7d3c6ebbff8408668f79ff1a3fd8373edce7e30b2266f78fd479156b8739810469b463391f9805df5516afb1f828e5121222587286c9eb160af1889ac37669e12a6bc4edebe5016ddd088a3de58f6f801f71f083cc4749d0bed698e8fa559230e9d239c3602fad2c187d98803fad5b0e4ff7c990ffcb4e5dd01eabd39fb7313031157027db47e84d3ffe83fe81584953674731391eb6e55a3e11d48daebe6e5768caa71de4232fc9ea1a8c6f2b07d47853b5c411e3e90eabe002396ec1a214c036278d851d4913642e1bdad8c17dc975eac699c29c4691e22bca05422d9d303a65005c5d76ca146939b465f5596933a29d7e606ef217b139462acd0abda1f521fdc0c6e6d718f7a7d7fd6878a61216ce547c5fe7e62719daf81cc685d084b708801dc325edb47c78a3d7f426d28b72ee09d42dfe3674703412847ed9a5476ce640029125713ad294357a29c5b740dea57c7a4631976ef553239b5c138ed1282d09dc3ef4b267311a807b3643a7921b6e2a58b99f3f897bdfaece0d950a796358a9f956528848f239fb9192c545244ac49618744c8143ab5d2b438b0cc70d48cb3292e4e383fda752448c8f821538cfd53015e529d2dc7bbf612faaf531fa8411c4e4ccb51fc840004a584c65daf46082031d4a196b70868edc6001b383f662007380950ce7c3b5ffbe45bee9b1188bf1ae9df07490711d04f976e45cd0679aebc0fad95391ca1fc724a50a0f59e3f11b0f44b45946833e0e856680661bc3bf4d7cb87c4bea3432ef66f274166f7c3afa48d50104020be211a52a0505e7a471bdaba494bd15ceda2f9d6e51be5e1f0bc38ec2c4fe55c5ecff003c6886e1ab0a0cffe31849a45a92b19fe3712d1362cfd5b4be56b7d9a8f821124b9c49acd9509952b35dc989439bcb7adb389c4297fc1d5c072ecf77e2f6bff342b5d2c1b610c3986382ad5000debd829d9875fddce82d180175919ab855ccca0f6cb7ab0ed7947e15844ed55bce05b35d29f9546426e26a97750ce667055a288560106f697846876cf0c64cf52f3ec6048d27fa3328202468c127e55856d6348b332c35a1be4804b5dd4461f98c5b54da0b8b5cb69854dc50532f9202ca3371631e09e23fc08268b299aa50dc8ea70468f00b4e2ed24479485e907404879e108ecfe8c2bcd47bff56c9b5bf23a8e3b64ef6644c175c5c4382a9d6e52d6690f2bf894fb21452e4cb87324c1d1ad748f1dd7b52179ec08daccd90a69a95b730535bc9133bb555310ea301e34c96e015441621ac4eb260edbd1f180c9d6c4ff6c831b0edf69618112de981dd923146388a01f70f277794dcb8fe36d2e91c9faf4cab2d19ece045e87887e0ff1cf0246fc83d8e17a98c38441fedeac76b3c57ca29af139e7992c4733eade6267d638716e5231768b10664f8433b3490ed5cf8c7e6afdbe91716106f7e108158bd5ade7182b39cd6c60c564d0065d3d8127e3993571a2acbf5fd386707c96fc9ab7f3eccc5e34bc9883a7e673f67788260ba4a065f3f33379e67cf3f046bf16ad3ee873582acd35c1b03e5ad20a906b92ff1bcd957847b720d0ce91d36d25ba2c8c6a2f48d552a9e9df326efe6f1eb668f6f991b86b29bf0b650867900ea25acaae41f3292bb767e8e754a94ba9bb34b3e0c271a0186d8d76d45dc5996b384aa8a45d8bc5f8ec659f9c109b4ccd10e3001f250a3554a616b196b754d15b1aaa8a5b509b39c71a02fa1747237060771b619bf04403730424c089efbe818ad2b2f207dcabd2de2b11b83faedde8ed1ed97e98974d030892ced1527fd6a8d5e3fbd0988844cea940d903eda07b17d123201dfa0fafd356682753324e6314c0b437b2e95485f1c681c78712776ae1c6cb7a881c893122219d3b744a0c68478697c82f9c12a4fa6bff2cca53a9f29cd9fb2e57e1b523fc3941107205f4a1aa263dcd2f820d747ccb6fd4b19edd33dbcf6cd08cb8da990aa6dea3bb64c10f0b717e7273bc139faed24a314753021c157abf45ed668019ef2b8a2dff13944f1d7428193249999b1679a2e99d25955e3ac42052a599a4dfe4ac53a4c9fd7ed776059f292da9b1e00005823c537000e9cc5ee02fb71529025c1c32f969c3af97a7744b52bea7701a05f4c585d1e353e4ddc96687cc1a0cc2db6be3083cdcf0cc8c32013e4eb30ee46359119b99d40cb9f01d44d5efac90d34ab4b8fe42f7ad652ab75ffd4f85dc418d4c87bbcc0989f2632cd869e14007a00cdd165f707440a249488cada51485169580a635a220e85d47caa3b9f9253284daa360e9d6226360d39a0ac095e865145b7c7a90b8940014dcc1dbf17371bbb92b439d7efd533db8259368325c4766f33393749f21cccf31a4c67a4c230ebbf3cbf4052859751e0106b7bd25b0ed70eef3279375c8a56d2a67c5eba709f1696692078bb921a85d63cae5caea9f66e049b011c356a22597af2f1152ec3411a3c229b3e23ff80b6c17527416591cd6308a2625348fd8841dc625edb0535b97c73fb8b74709f7ce2d5c527b0c20ae1a62f4d0e2bb3d3016a43ac323deec8f30e4e9fd78324bfe9a760cce024c10d06eeb49ef04d2ec8fa64c0584846904c6b63a20eccb1d1ea929370f89d2cba27638308c144d7c411a65990381a53d0e72cc503b190e98bd16b4a18cadcf2980cf456728ebec4282780543dc2e2b8127101a748329b2ede109a1c2f1801c4cc1fe5228e37cc26bd3b61328409e257a30e2cee8b2bb61f43ce8830640f8cd4f771b86e4ef1d83e303d8c369a77a94c1771953bf8822331abee17860bb67ea31cb0e96a5f1ad04ca4ae1cde24695d22c59be60fae57921c937c2015402a9f9dc8a9e856cb50e97fc1eca66d387266bed624aaf1921872428712e55425400becb19b369c8ab323cda3a59ea1221e7c980050874e24b446bd09e54eb91700337d9ddee0934cd3b7b78f3e44e8ff3952106adce2ea553537ac722e020c2c5683d1a7d29ec7125ab91d64d0596c9156cd1ca63d03b6df4b7e8fa902ba2c221eda1937f31cf552bbc7991b99340a6fae8d49a230eeff80b43f747798ddf2e395943f96efec87f8a2139322539073792930181f7335fc5a0a6938f0b54a65b2514eecb75cb9eb5629b11b2dbf1e5a8fc9e33defc2d417de6cd83f203cb7a969cff5cef351dc76e9bc02902dd2fb5d13600da2f530e1fac3d289feae69d54b4e81167ae01ec8b1ffff4b707a6a496d9fb5f3fd04bcb6791a93610fa16ce97ec3d74b820e69b25aca111f8f9933c3d1128e01b54b2d504b4420ff2a2ed8ab5c154e13a97482e283e78e33caa0856ccad2c61a5c67754e8bee8dd2c623a46bac75714f5c4ee0a2714911a1f9e21b02f83213d0aa92a7972dba1c5060798d43e6bc0fd50188c628da077bb94652f3cec5904a802decede950f03eb75687e23ae2b97975c1eeaf4cfe2bd2ca3710c6242cfec5cb950a3cfb66c0f2f2f911bdb6d385c0d485686d911ec1c900e6b9eda5891d9d1cb7d86f631c04b4cf0d37ffb87df70e935b00e89a15550edb547e353e42bac208ca7e3792ef18bfd3a39e953369b871c1e2f766e02c299b1d7cf2ede650b70c04a2b7588563b3edf79613605e0c238103f919955e0bde55ea0242b5eaaf28d67172e2bc14f68dea31b16ec84e5a07111382aee731641758684583897bfbd44321ed4e67e7bbe6effe1d1b1dffc4b903d75bb26eb7b3d93dc78aca402a83913cd3cca1ef297a8713dbec2a32456a28a56159de43b45180e5aaf22b5e22952704828a7788a781187f89c7c8fd412a34c1de9d152322cfbd4503bd2e72f0ca5c35a1acc3483c5dd182d902502dc9b19f3f293a688356df8cd91718d39d56918c0c3704c18c8aea382ab5daf5feca32371602683a19a7153bbbd2babfb203c37a9e84da2feb68abe9c92c8a865d0a27ce33e37c0b2ca892f8e5fc047e39c4d65033d00c6895d73b1bd2d920b189ac078f38f3ea3fc41b3f3c9e8062b8021208060a17e062fe5d1b1f3c5677c8d97fad9a4faeb4415fac9eb8471289f8fa6cc17fc1edfc4ee9dae2fab50f07cb1b1adc9da76e47cd4ace9c160e01e956c5b569e3186c2ba84a2b8bc95c582d8acc16ae7fdcb7eca747dc3139f5d51dd60b2e2a6a05756da550f9d26d268a9a9b7408864558acd8d716142b67a972f6b63660008404b0b925a05721a6a32d0021111b0e01723de10abaa245b2999d5edde9de64850357957f45f0588161d75953b53478a8e2222b85b4b60b718c4643cd896b988c7b4257bd06d2d97eb723f1a14115f1af929e5b7d9f9deb2f3c6d558711c5a919b34f2e560c80c40d43102570c8e630b12c1c275dbc0b9d3cd6e61788c7c86d32a36f9a8cc9674fa0aa1c329a52e60f89edf6c107c221dfb11bc5e4e553a583d5fd852d56c8b5865b3e771559aa858ccafecdfd025c39f54643e55b43d09ab1462ed920ce0da33a1133346d74396076bab5c0d23580dc746ea619c908949d3abfb9aa45378c47a1865cac459b871962bbe4bc1f742a53f537349fed21879c3c6b0ab35c8836caaa82d53a2dcb12a02f5c650286c63014a0859a475d364172d4897bd5c94ebbedbb74a2a9595d64f2489f0145fd55807d780a22a405159caf58d4cd2400d5c770162b1c8557f41c6604b1d21b1cafe53a1385ad4961b4c4d13be1b663a278a91dd5cfa9781542a132489ac4d7217e96730766a2c89ae4aa90b4bf3417e6246d6904d3ea19e758e64346f51d8511bc5a979a83a76086c1551420e7a906ad83e695d16d977507df37ec11e2996739b9b047a03267a96df7d6b44b91622d6ffc8ddea4e55cf852cc0f8e7963b710dc25a72282f4cae6909d80e3d247c18801dacbe7e5bbfa56f5f312eda1a32f9f537620ec5300769b86030b340ebe4452e63107074c15e505148d4f53d6599c56a283de2b4edcc0295c2eb21808a97f89b104504bd1f2334a6bf515c051e9cbd03599bad5930e0004141f98e59232058f837113a28eeb28c9e97fc5c8610e5823ec942894043636202d52ff07d7131f0d65d7759a06e8bc76e71f81228ba391e355e0e54ce66c4614f14e38d2d8519dbf6c39ad749d3595e12466fa82451d084200a46db44a9870458a8c27edde6ff626e47446518fa43a87ac2d278541c53e095914f9e5d39c2da0e1246229890dbeb9ba6af63a0afee438d99461b3e4149eb6abc4d7107d7c25993e8448cb9ae2c6a6565e433f5b6dcc0926a4253383f48e2cb6f8bc1df3b4b2153aa3cc46ab4217318421abe1729c930202f57c9b99877462866d538058cc05ec9e542359f310f6533671ee60a2a16922d84b21e20c23189517c434d0a204b3290c5865b9a3cb74a2afc3940a866b3c6e1f6c83d4cd926a7924ae8754d725f8d4ceffd00cf30c6ccc0b5425f4f65a5064b3066e2b691c0fafcb0ec2cd7f3d38900cb0ad27e1524d1b89af4ce3d9821817e0e69a1fb15fcb2f15e19bc0ded7ae00ae93fca728cb16f0b9733ae3f427bff6f02d6527216fc19f1869e036a480e86a09c3d649b236f1b599317d04702f47f063166cf291588f91f8e42742b1d85442abc8624957d09ee3f9c829f37f725b86ad870e90e9e79a1545e6a0f43a366c1a901a530063492c211f889217d2c2e77025c69e619e28192175be12732c4ea8e09ee152e7e5b7cb1a302303341c93dc4f80db9526dad316cd1acc6d8969daaf6d56432b94aa5a8284b50e3bccb957370f2d30f311845eb314c96d75cbd1fe6266f9a80c455f07575df5502f8ea182f2135e1db8b3c3825fdd586e1c8849ff840a44731ef657d40dc0495d34c53756ef7161a488451d5050734d8a27451ea154c71e77c64ae5a6ada0b1de5c0160393ac78606f54a4e3957feae11c2a5e1c0ee67dfb31e30ec73a942ba1f62e017c34c7ec04132e46ef314a1ade23881b8019ca0dcce294b367d2ba865eac3b70148809650dd2d6b79de96bd6c676f13d24a99a4dd9809b72867324249a6d237d432d599638e2519645702d9e6d8fc88c90192b0ba019f1aca871cf2b91e13edb420804c3e07338d40bc98c74265784440bb5865da087e3fecbf2031edb757ed4c25c639f7592a9ca1b29e8d3f3ebc29a28009840e64f370eac4a63f9aad9a69de86f8d4bdb94e1b1e9354aecfc426f311c40449994a230cdbb32f94320fcdc8785f50f4557e07d9859ad15cf06d59a7b4a97e126b28d0c670fe880c86e381a54b283e17f16a0bd5ce9f93ec8e0f9229d0dac1ca2a91701c47f8e7ac6e7f507a7ae721814af76d15df4e03db34d6eeee19ee084e8f68914f0e77a22e1841088913a19067c5430997403861d0c1083806c8aa4703131a01db998a674385285e4254ed923e0b2f83226392f718d99fe91067cc64cc16d036c083945a0493eb90f6127b4e2e3ddc3dfa7f6c502607b655f7997f6077044e2c1e9800f767cbc1a0d38b3a114af79481e4114c61088e852efcb8cab0682946344583850c159be2a29626179dd06863dc9e441dd2dc7f51d4974a8980af6c76c98c3b11c7ef60ee302437990fd74b7c238881665529ce316d55be84d84eb4ffe0a6843b2c03bcda7704c7fea98a1d8ff95cd752ec764fafd47855dd9d161397323cf4692b003658646ceb2f2d3757b879fa13006033444d2bb57d485ed81cba453d9c80c0ee5ada1619e7d082d9e55bbc8884c544e3a26053dafa9f1bfca9753204bb4a602002be6cd0403fec9c09ae3094f613b14cb5a5024335ff2ecfe6c8a6a78a1207a9b907c85f58fd9ac1a08486a46a09917ce930f45d743a485dad8703f012be0396dadf9ae8649497486c3a72f4bfe604e26f31ae2d799e25ec490de5b7ae4520c4af929b457996edad5787c3dfbfd4bc303426ce4170da9120894babec028992ea19c57500a7bd34a312df7dd9943af5c06385a3c301ba480f76719192f19157dd3e2d3739088938f63db742f14dbf13754de661133a50b750d8127cc67e93b003ecb7e52259b5cb68abe587490a6d94ee22a56011f2ad3d084c5525df8126e58b7c5c7eef4e0e0fb1619955d6379ae220ab16581a0de6fe08c3384e32ce97e2a64f8bfea65fbf8f60ef3a9ea17f78836f9dc433b2f33e5648ce1c8c2f8caeb0bc613d24fd4fcda45a0ba89a237717485ee41afa341f3bd481d7df16652b545753769fc6d3117da539a2bfd3ed8b43b2ae7bf3283486dcdcd11e7e8e4f8c9df144051869c3cb96bef2fb0e635a703aa90126522145eacb27d151d9e1b423f9f18b33138236890eff2182fde840d305f98bf3b5a54252a482dac0a6d21923db245d7b80ddffbae092f454c82c422d8ae32a5023a10688724e2d48a411cafea5761a6551c37491bca5c7209c0d1b3827765147bfea49cd505399712d0e121459488fa86c75a2221ea63136bdd5227f6f18707381a62821c10df2bce7fcb2e84235787ed9e4fa6428d261995da47ab9640b612ce984422c898687b0293d5efa78eaf23a938200ffebe047081fd13c5f7af7725d23d052a3e240466b9e16b610d689c3c57abcf24ba092258c4094d9c83ea61e93fcb079435ee181c62c395548937d3fa7d9e6ff66c860a303fdeedaae190af0d9405b89ca3a04c82bf399b36ef0e92f0d2e7522eee0b3b57e82b28d6546d9d355f2b2d2222216f947bb0ddd8e8ab2fa2fc6e415943636132b2d8aaadc5443bcb8bcdbc7c126cf57cb684812c99c51c2b53d5b58e40b3d5254f61a83511f61356ef3ea9f6ed905023214582a8a04d856df962c0e916647a9cc73d470840848566f09998c3b806d357fb33b582e00230e05909b4fbfdb24d8a30206455b9497f981169bb44d577f44152b956a8b3d854586b392471a5d6eb8d088dedb618b4d12a410523ad28f94e6c0ad5ac85bb854864196643b027b9ac1b1f78695955b6ceb5d693fedb600801496948a49780eb5d286f35aa1918b4bb32caea18448fad8c1df8d643f8c8120a28ce36dd4495fa959b91814d42d5d0c99d917f8d56c7b3bef0de67860d591daec9daf1e49a034403e37c4a365c6219de238fa4dcf1b5634341ead0a574cb4279af90ece858b128d2309cc491c8f2d3697df42cd91df3907e6834da4d74bc23d692fc2cd2b7bbfdfdeb6bba2d4964c2dab5037d1823c29292d83ee23050d4041fad2d504e551bcaa310c03b5b0e59867d524fc167a1b17e786f478babb92249aa29827c19f8635d586d1687080ab7272cc3527e81c21d7940a84fab6e3ae5068689c6b79caf26dd25f4ee2e64c87e47bec52b0de68e92252594af871c22efc592689892e00fe2f89dd2535e1a688805c4a68e387cf4aba75e855b96aaf46ee118c5233ff02a3f6ffdeeebf555134f39e12ecf82fe5f01c5b9f388d67115095df50722872788e7209718b0b136a146402faf7305e21b3ec73fc830e3e62fffab5a12d30df9a1d089148a6875313ef439fb65f899c0634428c36f3805d4a696130ba0b439e4663b0d1cce4b65733b751b9ea4806274b889657a5d7634829df912917cf595cfe2e23fd6bf2203243e247283319d0c2923997853fa74ce8d6044983862c240f16a00860e3f2531f98a2d662df0cb122f9ff0294b7345e68a5051dca921e34e1140375f51c83a961d395e1b3aa1b61a2ba924fe887a3eb544074df218efb24c9ab856875372d9e5a796ad75243bf60ee13a06851deee8377d9d4c91061f6294018e7383e0c67b8170ae85e96f175b824c0c2bd875af07bd970448d40ae0eeb3d77de6ac63ac8cbc03cd2094fba3d8f3db9147c4cf9c833f7d651b1229e4189de47849e7b39b84c5483586625a9bc2cfa442dc371c4622449ff35c51ee21b79c197360d6c0c17748025ad2c416a35beb368c9e1d263d699bdf756d9e28c2291fb0947a58476dcc077bb13979554b25d0e9bf8f913d59906002a1ae7e585c44a557fc6857783e5af858a323151a66bec8aee3c55c770e6bce7dafed6111b2875064a632a263290a1daea279b953a9d07125c953746f155dd3466c8075d75b590a1408981cf4654826afe87cb0af0e23f44bd0e0a1a6a1e89bd754aa4553a491b1f1dfc38bc1984068d7e605be450ca47d7a6de05c33f63b7c8c35ecb6ac65425dfc40aa1d322e7bff20db8f526922440a8b25802cfcf1fda34e59822899e43d4876df79f525ee6192de7656df2541bb9f01d5426d6e5d38643462d726c42c63081bbf043317f6b0b38fd78b4b201424bd2a77f83fa277809ba1cf7ca7014ecfdaa8b54fecda5aedf18db4580c1b902ec06c064692e0660187f576e3450213162a0000c1960cc50addcddac0a485a42952c91092022b5112e565fdf28561b452f4ac0de1d80b4e19d9d8d80758f215ec3439bcb516c4f87d4d79edac5feb6fa38eb388beeca95d60bcffda00e2000b70493493b007ed84b3d27d912bc9de235c9910f09afbad789ac960652a615793e518085c0caccab666f40441047f1c15206c2a4d083cf1738cdc9bace20f44ecd9b75c3af9563fc0827dc68460b263e36c801290c77a988cad600668b7a30aa339356148594566cf54029224e86ab98dbe6dc0d89d8a1cdcb1ae6e3e0c5070b47cdc58ad111a75bb10b65c25c307c964a8f9c79805560f20db60c7d591e42ad1dcb0105011d00d9db46dc5e96c404dc9aca503aa168814d4fba97dc48aa483c21f7252b395e9cc7bd427e83e7f9f19846af38143b025574b98a5635ae83694cd64646e85b1b8f41e0037ad798bf1fc69a036ab4750e73e3ad1b1f389ba9b358b8af3dbf91326f7fa0a700555a1e14e0e767adcbe3c074dba12e07e1e1a7d8ad91c778d3a97aac3adb0039511d9f2b957ea6a86ea29000e77b902c66dc48b98b0ee2a75bbab3f083e497ec5f876bb089fa55067638ed07fd0cc03f3e8a97d326bd38ac6d89462cf2a52fe9c291eff65c8df9227b0bd2184a2bbff1bae80f47f945ee3b7a750a02c32145b8db1fba1c94c1319c7e68de65632db8f9285f3ee27cfb270757f42ce453538dc36527c93cea0efefab08d6c55918402c0da4a478613602d83f69a36ef613160daaa8c3eeea0581c71b80a9d3180ebe2e10d2318004a4a291ba7b7aac1b974e9b5d62e020770639ac25f457aa3857db462192971f1526dc61575219167bcc0c169d99fa1c2285d10a6b6ba42f0cedddcaeb1bbfabee0e33e54afaeae9d6c35c18a319912ae24ed2aa1649bd0e14149774e523c0a7c83f0ca1bc7eb78444f78a50587e54fbe7bae237f654ea83a5f1a2174a65e6fcd27e9cc0f142db0d14265bd41106235826275fff0e8a87aa66b6cb1e43b87db77917a4ca36e2e52d5e052ffb3a14412ed6b8e760d32c2a625d1495ea6ece3838b853098cbd050a847316f0f9b8a159adea36588f64274db189d45ec523f1bd22fdc5a78985c80a445f825baf1dd60c114134fe2cdea4aacaf08f5c42ca6d2cd1e99a6de111d8f391a1d65c99aa43f9c5a4588cae03f50095761ede46c1ca727fddd8965b6b171dc1884adfef448b1e8cbc6559aee1ca311b9d57555776cd4924ec2a890231f65aff3f95d3390637b1c06a2b06d36b4fa3a7ab730f01be0e99a64ecb7f75212e0d5cd4aa82b8026ce3b5d57966a21a7a589859a3788560bb84ad2fcc457a68c1f59e5732ded0651c50b7992cb2a635ecd84861202d1b0197a86d60d2d0474907cb51b720e821473dcd139980812015dc050ace7bf6758d1199721ab06ca44f8700a4e78f1d925535f07682fa3c000846bec59565487375b1e76283fed4692ff6bde47951c893be8d5a7e552dca69ef775adc3c2954f161b25acbfbaaa3793c2b8716d325830f30a22adc79168aaddf0adfda141cdb7f6c7f2ffaa5ca3160fc1aecd03192e72ad90b380e341e49bfe923c973a54a862652901703b528859161e9c40c2ac1f7de148490859ab48c666684996667052d802222d2d3342b3d6c0f16643af6750f67a73299b144846428f52b9eb5e880f439d54438632a1940211179274453aca9132af229da2c1a3a2c76f7c78fc89d218ae7ebc14ebe19067f0f421b3a868ab52b8ecc1adcc53b7f75d393c7a56366c1e7514ea92120ce282c702ea5b10e4f71ef05b481dfcbea7eb99d4701b12f53a5555a0b2085d5341c1038c6e18f8bb7708c2dcc436b1764148b747ac00e987c8731f114b11921eebdfb85409a5ffdb930ba68a1067a97ab5cd9fd348776064ddc2e2c8f624300bde7c323244ed6e8d0a07b91f3f43d57cc7efb065480d8a118b2d81b69a78bb115ac8e9837319c444337a1ea2735361a9b83d2dcca248e235584cb56281aa582f6a6fae144e52c47fca0913ead2520b0e3de37b1478e02b4c3c77b12731d9f0908423dd284eb7d629abe84c5053bbf8e63db9343b9296ccae84021d402afcca7a0f586770798eab79ae7e8f135676a8b3ce6e109e68ffb88bb6086ead1c8fdb1e8c9ccc9af760f7905f8f2a1d51ac3b2215a85431355287cb46ff6ca8db484aae95e5c81e08e02761ae08ca72e07f971b65806f2186a5dd1de9fb137044fffc61e6f45c95a29658cd82f187b01e1172249852c748f0c321d453c511a93c22fff46b137659e52eec161b21db6e2c44e918c1778a3c1ae2d64beaf784d2db5b8a615a40fe322f44aa0a9152baae9634e1278eac484bb40f1566a6ea05652fbbb9975988f66a4a2f28de3311c35205d43daf0df1819385428ccfd6a54024a263ec4a69633154776734d7c721ffb51be313483b41803bf4b16c3021c30957ad4077367939d3414f65d313ec145d718fe42087ea8f00937aa727372d6041d9c0199ca30b6daaecb18922e31178f1a442570ca26585707fba90f84ac519d027fb0dc1bd465fe311f1082c057e0073e806ee33a1468a268ef6ac08ccd760bfdbdb88e027ef7f461d72fcddb7b752d77ec572ff171cd80d2ce31b69709b0c27ea3771e4be42b855043e31b23e4691766d3bbc92f4b96b09630d12ae8cc2b57ee4128c92345036b74fac0ba4c0624d057788ae6eae719a0acc6ca30001b5d14c170bc14101a35b52dda34512b8ac54a2c107042d3d0c8974fb8e67097d5a574461534af5641a959e7f36ca340a152209e573f7e7ce2ac7e68fa3b64e21fca999210dcfc285424b7e41f47511cf28ecd76b11ff5ac42fea5c4885ef295b34e58a4659911fd5fd765d445d0bf1466dbfa16b0781f8e62faa01bea731be404cfc310899cbec03a657000916956da8df4fe18b4e6330efbfc2b54667a5b159d27036a3342dd4b059683ccb34009c5edfac349e551a90d9f698d2625aa0a10ac7feb531e058ea1305871385abbaf08746f60b91ac183e641a38257a6950712586728472d9ae0669f7213703f66179f52737d7c23ab6ad4259fe4816d59435c02dcc636c9a2dee13d9787908150a0229022059ffd6336d9fe118bdfa10e226bb4fb7a660a142cbb0964bed18eebf3783f981d22bf698f1ab40a27e229b303d5f80f523c33136d15f223fc6496c83f1314f23359064413be319ad8f26b5b34ddec635e0205290d5cbd15c70f8d1eb379e506145958a289013822d89e967ff9a6e7e8ab68a7361df4d583b7716d49c40f682f9767cafb84347739810251bfe7500d578259f15cba0ca03502a2b19e195febb53589270d684577a58c13bb5dd838451f715acc1aa0b54a835a2878aa758f872d772b075cbfb0b7d8d26e14ae87193cc277206b5788a8cb79371f9143af78c32dae014cc5046a83aa907337356c559709320f92f94b3c0d8b3da5defd768261516e782ef5e15808b368835df6283c58a0cfe51ab63647910171ebb2fd0f0571cc2a21c258596b78c6cd90c4f24e810e71b84d0df168ef3e44aa075cd79caa1cc7468b98571fe30bb066c15c7400229fd518c6e8f346729dd75dc5cb05045363c40e710c11e523890a6e4a965b9314b472485c0d635f70d35c97c8dfdd87e797802f8201d5a227de3a7da24fbff52eda6f90c641e0bd14e1ae0150f620756c582c1d46189425100f1bbaf7984a8a1d0723a42118ddb3357c375292fe4f215f9698963d0c2e9bafa45894a9eef55b438b5c8615e028a191a1f748367b4c691140cdbf980a8add4bbe291c98406718ff80821a799dd945a67a93b4b68bc23b8d14bc0925004db3009f1f8d7817e862044beb9425d720dbc278d6a8bf98ee3d563ae4ad4d61258e24ec7decd4d01f22e4806a6fb65c42080b1529c055d6abfdb2df8209ba830f38e7109990dd204ce0cdfe485e615643a8655a5647b38b0539a81b5788848815024c179d8cc77c8899127610c2f250a9abca67642349f84c93e0a882b34054b7f4fb88f2695c717db0ce91e27050a39bf2d0c5d299cbc90c12a5b1366051033653751d2aa96ac08b1023e8242111c04d18ce4500ff479b888b23ded4f1caab93e90a3af6c18070e7526243a8133794bb83693aad2b1e5de80092c00ac99d4e57a39b6786bd61edf605240f8408b60e6b08130dcf60b736dafbd761d964715dd603aeeefededa98b0570c54a0b0e47e99fec2b438d36e3a3c18174eaba23dc828a21e8256e28882626a7d34e6a49b1028d00d850944456ca856de4f876505ae364a2ef37cb5ce79401256f45c3eaa71283bee30a272359f3aab2f8dddfa01daf4ebbe0f1461b52c3e29c8cb88cd4316fe001be01102d064d362015153586f839880de495db45d7003389fc8f78ebad87dc6a00a1d04986d21488837145ab7be561b70f2ef534cf1e3e8033cf1e7ea33d013fa817f563ef49f850df93e3d1503091af08bb33661c5be584cd9045c1ac114b9f4b8c4494049c780189a7077602754eff5e60361ee33f320323667975ce6b92f0c2219ba99d80400b9b9d1b3874c0e1fddd8d1680266c61204730f63b1a961822d2ce7f3566e09a9e67e9f3b9ac55c30cdcd02da0437ad5c3ad93b5a63190d19622623ba817a8b965b128342a76e54a65e2bfaaa78b613f6f4ceaa5150242d9a39a96d443c06365cb0a5c655f69f53cdf525876494a049c10a514419703e9791368c3132949a2cab89e80e898204a590df47482524de2ce04ebbb406d5bc6f0237b4a5edacbe892556da2e0e4862393e7a603f47174667bb7795f504415ec68afbfdca88e0ec1f6f48896d3190958c9a34b9925ef280e63009372258f3feeab522a66d2e1ba066497454b577902f2a08a87e75715862faf97aa13549f78ab2dde983282704826be072587ef378231f0876bc45df621527b9def6b1c7f52339792bfb5807ab4165db832d7011465a82ac84f2ef5d3c85ae867720d84888f74511b903c200d8600ca31adea1a64a6c899c84bfe3052c1fe15eaebe7d09f102cef3f1010207e20ee9b8987096703edbc5c2a5154a91a4a406f26208d20d01858d1180e80943314e943c658a7f4c20a0cf3d7d54c78010dc74b9b19682b3c389e91ee40f8d518390c5497a9b90bd60e68db3a14ef38420129b38b8a34845437845d629def4d3830af37e9edd5a5d203eeda57a8df46753f4879feb7d366d100c88355165a3421212a5d2497849177b21faa3de2fd6be385b503eb25a688f585f55e586fece292a37ebd85f58e276a3539d0b1730f22d867713b01f1714cc5351ce908ff514da1aeeec90c2544f74a8eb0eae33a02123bfbc06bb4d450b4caed1dc7bd5bd03b4b37126f3bbcb1e6d258b727616f3391c8ec7bb0319f1192edbaa4ae6ba1702b1bbae6cd750eff15c0d39a55f67557df69f663d368adc4efb82981414f33cec71bebd4990b74c06408b3274374007ae4880f08df5e48e68c2139fded5d96f5993fcdc8452c81146dad0a7096fc00c29d21f2244c9565977c5feadb5183539b405793c9690913e4b2051cd6241e2295607b204a665594cea32700f9174af26b2e79dd3b3a50a333c9f0ca4bb63da1256382c302d61637d252987669415fb1e6dca43d36afeb2a15d2a08d2cda1b89460ccb3d0351559734f4497be1fb18258d27003144376ba0d85a47449fc120aece9b1e0c4e1ab89da7ee3990b10130a4023aae180bd3352ebda1a0d458f13259bb8ae24e3e302754ec2bbb5015e983db3d4674a39790485b29258957ec6e3c738084c7e947f63a73d307365d9055bc7c82e2ed3eb677974fe04505c1e7960d9ffbc9660b2746753f16a44fb909fd671ffc7110135983bb12221adcfd2eaf27920ddf77ba5496915f1bc073171c3c81a703b7ce3f7b988413e29815ec1e97be8fd63ee6472a59355ee8c7250f504f9de57b72074dac54ce47939b80068583c999fac412a407027a9b60514ca852522c70611a0fd3368b1948140c07f7e598897759f58354b3a2636b086d28206aa0f881f534cd9d6b6f7369a599501cd64a92c49dbb2cef86d586dc5b50e7a5ddb59754379cbf8cdfc149c0e376700534ae2cca3cf86c5cd4101ead0e1926cc2fb6bb49cbc59b1b974a3f8581c70ca21446be37f318ddade181c22d8ad57f8affcbd4bc6718b8b03f89a9c4dd9de84a0c2a1eb3eecfb777e9e293e41f1e47337871f10cbbd299db22c291857e8f421a0b997164c53fc03e0e43e22279db79d61e007e950215c5f712885066f48d555ccf0769ed8b9b103b316a6d7f323ebb0f848163801f86c91a94faac0c1eb9b99806088a6bc6441c4bef4c20827575d410d312f9afc9ac6b722770ad297f3c3ae23fd3fa33149bad931ebcae57a3bef8818ebb803c7c93f7c3641b2c946245c2b84e023e765a572f898571b4cf0024b207ec1af2db47c17083184a358694c907fa89091c6e3fc943494d00e1ef19367288e6ae2657aea82ec012d09847a992f96ad5f067fa9522a4493bf69e561f376fb69276a33a76c82dde09de77d822d23ebc980798ce71c8dd3a0180942a608a0669c662183890fd02a2e75bb0d6acb4c0b402a63473eec377fa7592bdabe066933cb4e27ac3872c47c084705e454ab6d1f3b5211aa119073b39943950b3d0b7e0f1395588ab1b9f06e44fd8c2eaccfa3370930e0467fdb906dea665a308579576e2664c7fe2e5fe190f496182a8759bbdc5819f7ce1b896e3f56b3f7ce3bdff51ba24848b20173ea00c5eb09af6529553c29d01781910d76d4c34880f90bc87bd78f552e23ce3db9c0681b071407266267aa39de97c13faf9023c3d6eaa5bbb1c37320d7ed04b4709cd10f1647a58809b98978c5d1c165bf1872228d3c6eec2edf74c84122a1d26804460f00c12a535de54690c6a06f1fba4a1c6dee5a730062b0cb1f970050cebefec20481893f04977ada15154e6dbb54ec25cccf0b6c8339181ed4526fc38c60794983f6faa74fbe755fd563652f9710a8a502385be509576008bf1d407948d293493b155fbefddb2350841954b63b2cf44fa8a2c23ee335d7561adfedd9873ed6e08346cafc4eaf0da2d65623848f32220e4562b073a9309101c0d0ed438ed35494141deebd5491e89d2e269562214d9e7daeef4620b1c022c57693fb12de00b00f516512e026d9a059d3caa13355857e4972aa9d3e072ef7b593015b857afcf28044739af966acaa94935b9510d9d4be5efce000da9630992e2b8836d69dfe809a7c125dc7faaffaf78a0e6409cbebd510fda1d8bab301efc25bc511524b5283575e269b6e10497dc728bdf6f1709282630aa0e833316fc116baf20c97f2aac289549d33e8788bd95137a03f5bb83e05c04954ba63603bdc96f1eb2d7784c7e5aaf89a70119482e47135ced7332b220f3e91c376b204bebe82fb358a14021b9eb8cf9484402640e91c672beeef87d112a2dc8f3f6bd1b97756eeb76fc4e38bc28ea2bef1be00ac6b4e6f49eab1945f92d11ad22569bcac865f23232dc08bc588a3072a9b6ecd7034bdb839f1105ddf89069c27c3797a467752d57062664cb7753408695d55943fb860d5721d508214a45985a5d4253a0c743e63081c9a4356b53d07640741ed45a7950642a79af915dd17d24d3ed1d364be060a1807eae0d0f2fde6d50838153c15c03f0a4cab29cf3792966495c9c19cd521532ecd4c9ce116bcc432691694fcbbeb9ca3eaa2922f8282866317d1fe39673c3b9a886f813c0b6e1a96b4a0bab739069a41393e1e232d9c750c12296e86511b8eb1c4b76c5d340e11fd94c6e1995ef931d12e8f2059c8928426a6a1de3b845559608d15583ce345922834b9b862820c994595369109cd9b4a5ef17e493acf4b5f245a9331f7b425153c2d1da884a1a9e2e253bb1bcaa7cde221c2f653ac2c0e24f25062c0a03bf0bb481bd0d19e509f534a0e721a3cd575ff7521b998853d9434507e8880d4b1051c16eac1fe11eb15f750e3cf8785f578936bf47540111f0b28948025f6f92ca51216e8cf4822c371c8fa95cbdf0db20cda89aaaa664bf8870952b0e899424a21633cf183c038830720fa71a63a83059740689c8613ff48865426a980e87e107e8187f001b5c58d57ca4d1b87086440e6399f292aed524661b3f72954af2bb5cd0a91f706fc0edec7344eaa7270ddc3966dca191434d8d5b5dbdf585f978e20bcd69760ec634312308b5f3819a6640572c20b461ebb571f9d146f59fa14dd4ea22873448a3aee828198a4e3305de01371a1283faa62d74fadba7fbd6bd791a843fc11650de65fc634fa32ac4a234021d17c1fc81e0666960257f06cdcbb9836c84d02faee0c6a84dc6f36489df37d23a0717e2993b00e90a8940940d52a1952227e841b2af0a72a4fa66e153a16d2532b789321cd5b8eca75d968f6cff9090807d62b1b7b401cd0c42077cdc7c145620a10424c39bf86e3a0d6c0507b57e387fbe1854c1cea9913c979e38248de015068ba1e938f947cd2d1eeb348bc0374424197a09484858a2dd190115fac000f36c95f28fe44ce0fad89ab6db7c539c902060c2b274dec49c18280cf884916e2dc27a9fc76a405849744731504a1e2b18379883632b59a4ea60c4ff7d6f856bf22c437e371a7039531f6613be434b038272c1d88307a00cf8d5444bc1dee21fcf2d3044fb7c67e7d01dec82de6de8de044575dc59b4d07f4f0d89ee293577c85bc0524139d4931eacf30aabaacc29472f3d8f86239ba1591091c6997efb9da141087f0c3bd4d1a124942ee8249d5b893bff296880a47f1fad694aabf7e88cc960cdb045467fa706288ded4c485b1cd9e3b2310b76aed73c6746e1b95f05b91879552500b7ce8e99f4ac27aaa83d9510577886552016f1acd09a665e79d0516ee15abaefc4023050facb45cec1c137d258924da359a99ad76038a0691ac0a1b2e8b64941e58ecf2360858f102602660d318e85104626186c8ee65f6f14e59e11da09639d474fb0b54c4c58f10dc86026e6dfc6e63ab16b983ba553c10636dae45c31ea7ddcd951ca944a7295a5273535a4036c5f2d7dd76e24847ddefbc4b2f512e6078fc028fd823504dabde3ccc223420400fd0dec79b6a1b7844e49b2f7d5b041a4add3dc70b1e589c393305ac317dc29a4444c59b04a35c97daf8c2456ae37f5e53bdd4fea49156128562b8e584ed93308b05b531a3b11f46479049ada5f790a626c1115424c009a8165caaa72d74e62511a337891b5f46d97e3f1fd2571ef8d6d4582cf1019fac20b27eaaa15968f30ac1703d39b218ad49a4a20e768b110235cbce37d95e243b30a61e69bf30f2ffeb34949d0da99888b7810f26f9b0e4ac28247ac2f8d18c82883bb8e966f5667f99eb6f6f19ca8b74599858ab729b1db71ac54b3d20cf863fc473d2b194b52736d9942e889438cc816db2ac108e08784a55e8441a6acfec12a80e541d966d03e3a83537c6f86bcf167c1b8603110efdfb128ff77edca747a1841cdc338a6be7d9e923f12e7c508459fe79846416d89b711502ea7060721fda52a9346ed2012f20c6b59b01c803c724783e0f811a8c6929bb44cdff1422c6bbc8b7dfa8232eb633507426fc7c581546a9e12ff4837b1073c8f871bc0cd15bd9275b14bb07ad163335f96043a4b927f3df3970543741e32e6e1a409349c9562e630ba99bfe692ffa50dad061c6ef4dc9bf6f272fed0e8fdbf2946d6e1d990dc8ef89db44675e735d5d340bb382573e5eb720197204103a15337699078b3f5588a03459d3e86a0b8d6fbc0b67a32cca42bfc25e7cbf203a16a13954951b5c0df26fd677f73c05bb290bcfad63431167b68832c3dbd1bb4858f936d3e7ce9c05703a63abdffdea3b118fd2fd543c5af4731c50b26249752f7bd655666aac48e3fbc4528fa712528f87b06c33fbda1386d6d771c72b849a9783be26409e7390fac4524baa5da209e56c7455934be2ebcc412781b45265141abcdeea076e8481b693057d29b4f0e16a68372759e2a6b9ae986324ae21f6ce9c67aa30699a96c163a1effa072d7d86977a6eeae499780370282d234f4783ee0fa880d6cd62d1f15e0c2fb482590ed09f9608e53e2d226be6802b1d0d6c4cfb7da9411099eebf758851395ce68eed4b85d163e30629518b4e5abb8191428ec88a6a5907efc866e2f09b9e1ba9b183f0c1b189fe2d24a678dc522ff7dbc9dce2053571282af2410500047fb1e4182f9566e801901e45c308344d6a8dcd47afcf8f4146b750a0de1beb8d198363d67a2dd6abcd0062c8e42bec7d48d6315e3f648fdd870b429f55f6ae4a6af9fdd25edb8355dea281927ce1163c1022854083eea5a8a205a8b430f5cf5a27f3be141210357b09175917076e9a42ee18725da46a8a3e5ae1a573f7e9199b21563421f2f76a4669537dba994aebc83cfd010a62690bbebd2b214392a2116d2fc3dd380bb13092bf4a2a8a0acebb6c098ca3fcf481b526968a1ef0daad8e2f3bd07e615e44085e4cfae0d28db7f3e49815edff4b377ff319c0b3637a29d864e2cbc3aba0a72e3c174d076e22e2e0fc31052d100ed482be57f5f29bdf65a6964c9db6e5380a523249ef0f25ecb7f0e9b3d3e1e82f2bed094f30bc7f259c851f02d28b8ab01dc684d8a18208398ca610d0bcfb71588bf01153d8009d33e4356e9daf5167dd9df7443e02326fce86f4c9b6e7357899870a13a10277557c1d0e2cb105aba4defc83088f6cbd4dcfe92199dd759cc8983ca8fa95409045e27e1d025250e3ed3d69ccad0b55af0ff194cbf96d904996a251cf365754fea375a36a8ee1087593e708d9fc19ca8362c5b28afb46f6c1216a15028328d80471860948010f2bf19c7137f0fa526a76f8a1cb4da34da9a68301b2cd2b009fb472f25a06b9f3ed9b082e22176feac818d191ee632116e27c996137d565f683d795cf41aea1b3d732a01c2900a36201dfb0f2ca5171cd04db2ffed37473eba29a90f20641bcdea8034eafde75862260067aef06037f63c6e4d7727685568d6c5b8ba650b641bd1d816abc9df28118ca27448e3412fedb360878975483bfec3ac455ee386928956712be14ebbbcb1917010b3d9125d1c917ea4a05e006e887e665945f1e5f4053ec80c40ebd50d5df939cbda3a22c1b128f4c04ba4930b132dec9cbeef2db372f064856bdc0601700af4b691368570e2a6889c5d197c1294be0ec87e3b3a53620664e0a610060a111a8266c285e0b765bdba1f531e48b16dd229d32b4306c907699135b7d456ca1c82e0041b7123d15130b628578ada8ff6dda2adcceb5809f399201f5a3f9bd2fc95c6da884fc53c3f781ccadf1bff73d89b786eec2cf1c8431cb90f576eb46b88edf3f68567d08c2d5213afff2aa390081c5a944699db13ab07cffb2e2a10af4ef2e981c7ad59a1a39e4f04392ea751a9763cf6bb07a28aaaf10484daae7bec092ca86ff198b4a6308ffc6b68344e30c875e2f6d3490190daa547f68a7083a53941703cb64b2ba25a61cab951198f2e4bec27dfbd47a90b317cdfb665078f0999f5dc15d78ae5e372162be81c9c03f1b777022962be4386f51255067cade8fe664d035558e55eca52ab2b4c82c808783bab03b22688b6814380c99c82d8b372e5c34461e1be2ed62f63380cc66eb1bec1bcfe943e72731f4a1fa49aa49bb5a6f4dc786c5fa20da170d128b4087d3b518ec73e10986b0abd9c00772246127ae8588eb179927f4a9f05aee870cbb618339a7207f0f3d4f31cf3df8bcc270174cd673c9b0ea610ee7b4753f494446b416417ec040ce5b7fb891a0fb7e134d4b2e51e7085ef0503d2e328df827f2af80a4c6092979c6968627ceae520e3cbccbd60ca7cb2ccb03468b4dcaba044088098c736d2d337ff2c683a8aa2a6146dca15a673f0615b2a17694d599b0b9339807ddc1358815efb803b161e13f9f19b041b9a985e9de1079b639a6ecbca4998a11d4f74b82fc6c544005c64533638b9ed830e528c8b8e74b97eaf0dfabac6e7d396a4196cfb5ca60000b705511a1cf99f04536ca7daf8c3a25989f361d377d4e7f89ab94617d7f2d9cc3b21c68d39195fab24680ba35080f2853ede55d4d73aefcf443e86e0c741746fed98f1e1dbf1188b5e35a2314adc6e26d724458dd07e7a324e49e423c0a069b62678a904ca58c67f6f65c7cb9937070f2d957a76e0c2214dfb3aef748ff0daee2235494a179f3dc9eb4dcec143b314cbb495a634274a1e1a96463b5157caf66a269917983cb62d51a3176963ec4c57b7708b984891841c2ec3ddf34b9f2c45e0971ed5815714e7c4a14aface04b84cce473b0728828eeeb6990cda73560e6cf70153f9d249627e4172c6fa887150b9db8fb61361d09c4120c3a2c36fb42d76b5d5bf25ac561248f6da631c508f9376caf5d9df4287bf81d8b9b0ca6ce9a612bd7f1a05a35b0160801b152421c171f46be126c873ac580a9201e4e3ac7c39e8e7495ce37e721401faa40c7d7ddabca2458a13423b2319a01012eca20861e7e7cbeed40bbe52eb8f230ead436a359d3f300dafd00f29287804fc390a6525f0116c633b9103a50f4e2bc520a72d2607248dc368078cabb3e367e543217839e8c9f1dc6d639f268817b1014740876c3968fd86bb0a1bba586c1d47eee53d906d50c58e967adf0d6df87f28c530949de842276d31f745865a0204e0aeff5318e1e6e89f44f4717a4e8427e7668b11a921967d5561e4c35cce326fccf1ccb862b3a22cc27607121643a68750fdb1cf5b80658806187dcc06ded84059f98ddcd8580fa67322973dc006096ed578af76f64baaa2b0b190d934b806c9ff868e187ff461040ff1ecd113be60fba88a4ddf82bd8d292a5e973af435716e1f370362bc08d1511b28757f99adc90d9950304495bb18357f0d6dddd5eb0dc6f197d40cba79c7120ed0e3908bbfbd724fa15c12901eacd8d0126e2d6c568a4b58937b112920f14a4f2b05b7823701dcb6023a493e705b509a11a70399cea8b318bfb78874f2bb929318102a866f04d13b850ca698aa2c3f1521c830ffdb08c9289373d5d7d019a07b815866469e1849ef05cb670515b8ea8ff9f61d706ef35e10188f11d844886c6bbbdb965b4a99924c01ed06b306fc064ce14a8f2f3b9648c6e539f5fb345c820fbf51099efd6b13b4e9085706a3a00ddc1d1c12290aca806b033b471bd87ade13f68fff6354c3203c777737542d89bd1b5ab1a6a861b103bfec764fd8650eea07550f63e0aa67c7d5cf7b9ae5af7e27e5e3cf8e90016ba00ded59f76500032f9bd4b0087bedd702c1e52f8fd1a1aadb61cdd67d23f64055a753f17fb0e6b9c429f0fca56955a4c335316a499b42d9044d59f09d75d0664f72501925973ddf8ec7a08d0df4099d08af87ed630769d883de5cd6d0b308b7dbf36de04be277f721f130087bd0d96583d80faef51e6a10e459900fcd7ca8591f7238e4432107398443d88390f5b0f5210e7635c782ba91e772e6dbafc0e30302c930f1f1906ac8538dca1bedf42c9fc96f0c71d248b69d951e42cd3ebe9d155923572318f5b3140b759f0cc25e7bec2420d449219d5cbda041c5d145c06f23ecbda041c501f222e0871cc4f50d7b46d8eb28b4d9d9417af451c84355d4503762af08f5f356e843e26515ec859c0681ad0f75a32daab4e9248bbd8657cd65b329201007ffaac20f9f0f0874b13cd90704fa80429d0f44a821ff24ebbbf59b12e228678b2a72907fb2455d1ae152c8dbe5cda67cbc3dfb70f0e5173625076c859cc4db7ff89070a06e5fb63a1d1e42fef18c84fb7035b0d79fce49b8e91f1127871801ffd3f900e2f6254d28c4492df6a4d543a8aa20bf1ff24cd3607c3ee41ff6a190c335ad4ac8616725d45ae442be711fffe692460e197d74f6ba712f3c867c064b9a2ab824f276a96ad3c8dbe50ae378b73c4fa82097ad4de16f1a68188d6ae596bd58570d9740de2f40dc3e0917ff85c30ec98b8e08ef419e81b8fad927444321ef43ad8690bba5a78487f8241e9fa4fb9078918338f823ae6d9ad4997fcb710b7bedb01392ad3671cb3cb56955e8a7fb46b0fb5c05d47ddef5a2ae5f5451412ef26e718984e3cb1f7dceea3baed570e9fa766e69d3c56a523bb7c827e9648b3d96e7d3b1bebdb1a8a00e4728e41f07b90ef0774f3e2150f769dffb1ec97d228dfb44ff35a723725a9f0cf2ed945bbefd92ad6f9f9c0ed9ad9b6cca7ebb0f5cdaa872b55e08017a70c4dcb1f383730f3370e468c43f328e110b994f2b683239af8e7b54ffa15cf561a771d43d2e45dfc15f3ac7e71f4c3ed99548a79dc6e93cd95123726c0f5df3193ca31b05071a36842002033c504dbc4ca10a42c3a51a2e7938760fe3408e73f7753fbd037f30614fe4d50fd4cfbfa5ebd8619ffa0eb0b3a275bb367cd3610fec9973a707247ebac7a5ac078e67ddc73f399dc96704fc0ffeb462f5fcc37639bc56b02e07f40ab027ed5797037a2b7f9d9b1b4a4ff4c9ddf021f13176287b828da1ba89075bd81431303e10f20bd3039aafbf303d5845d9a3d21939d0e0d27eac23d6503e8a3ecef0d1330eb7913dd9d9c8d16c3f931886616ec27d71c75f0e4b66577fa6ade813b669a16e8c12368fb9631887c3a9618fe13a876bd8863d661612eac7ad766e7129badc14166671961dfc31cc6590418ae859d6801d2a1af784e618976da66d89b39b7974da59891c0c9b3e83b10cf3cc836d1886611846e76c19b9696941d3240ec2a496919b9616b0a549a04e8f6c39dbcade76f7d5f8501e4208990894380421526299e6d940466e8cb46256314266625631120542082743ee8e51ca794539e775518a713a9c4cd33a1d8f67aba1d10b0c3aeb781b48908d78985ff7649de5bcb48b874929a599e704d90b212f54156ad9ee4279047cc1eeeeeeeeae8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ccc1640d891adc9374f1046554721cf1ee38c5cc5b0c7aaee8892d189679fd1e58a2dcf4e231358c4b0668845d49c2c5a63e4d9b116c7e6d9b31af698c5e1a4b429629ebda3faf1ecdb14ec716ad3b60f3b08c51eeb881fea667976118f25892424cd90a44fa966a15430f58b2d172f3a4ecd43830cecc22f9ce21face2554bb59aa16175eac433a7d3e974621a964debe6d9af542a954aa54ea7d3e97482a165152412b56ef8c42c1eb7a85633342c954aa552a95028140a856a568a5d52a9548a5f38c53f58c5ab679fb2d56ab55a2a954aa542a15028542a954aa5521f918b514805577006d2b0204aa552a95428140a854235abc5bae113b3308a5daa542a954a8542a1502854b39ad5ac6635cbc50b0d46090742d116e8025f5242a8542a954a8552a15028140aaee00ca461b54aa552a95428140a8542c950a2014073ee23c4dec0536c451544799efb68542b6c812ef005a6d89ba14aa552a9001000ada2d01855355ac596109ee73e1ab5a84d6d8df6c64f0fa58b74912e1e5b576ccdd892b11563ab638b06ad61aa6f2f8314955d503ce99f73cdbe18bbf26f677ca54b9be44c93d8b5eea3b5d2ee1b8d66f7b9c719ef3fe9f2ecb4a343e7e50c1615fa27679e3d730fa5b58e46fecc9d5f2cb80ec60130bb78b0c7735e3e270b7b3c4fecb116f684dd2385192e7d9b169e279d3e537f6d5ad894a542e6699ee6699ee6699ee81318e6a32cb060dce4c1249e27083b8f3d2f0e73c1b85599dcfc8b837b029dc38d9a04bda750e7e4384fc31e7b6d931cc2247679e4d93f1423cf5e84658deabf51a39aa549ec916b1e7d628fe7e9bb5d5e079c27ad6b6af6b0c35cf6248b97192e41679742d894196112fb90213535458ab011237c848f7c7d72f1b0cb5aa32c6c2a55dc94ec27874d8e661e6d72d737d5366d72fd927b82e391d3614e30893117f6d861fca07e1ae6f2ec9a2a864b5a100ea331ca66382fba9c4ceb78b6160d4ad07ea314a38657b8a0464e44805f9818307cf60b13d3f25ff5663886176e8142208aad98324a194350b35f98d512d0470585a10a35648512541846803aa854082fa8222a5af092050bd8260823a00210307c014816269021dfbf304098109f8051c8fef35d99a2ca3a94514a2ecaa0e01021f05842ad4692b072026c42edfcc2ac66a01435f40bb3eac114aaf60bb3b281265751bc94d27dbb8f02c9c2f30bb36ac16a0525ecfbd0d7e4ab1a0686ea2624783c1e8fc7e3f11861e30f48634f731057d9d3b44ee53c1d0db4c4112e87d039ec721d761fc797bdabeb0189e73cc73368a2637af4e68a80df1eb9f68c9d19855249d9bf29f51ad8934e3b39532f87afb904b8f4a10cb129f0a54f60532e7649c368441d73142e55972e3d0697a46795d3d8ebf887abec75227b1d8fd3a8f1744ee1dd13d81cfca903fe867da7d328efcfec72be70b0c3cb3f08d921e412777e7151c26dcf8410426eb1a81c0e872143e600e48e3d6353fa1bbb22c5e8c57dd4311c14a318a538a8b3478acdf01ce845e3c50b67d7811f31d8c418638c31c648bf3daf86182654f320dcc09c734e29639473ce39e79c731e9997cf397dce39e79c73ce39e735274cf448d98b28ccbbcb0c35d1a630a5b58e46ee912347d86161106d0ac99a18b0a4980393a2471c7038c0014e4e0630808f0000c0474d7636f624fa0cf6a2633115461f646bf2c9999f51f43ab459136dd2f4d6ef076fe67a3f57f3855961ddec99985cce17a7b177796b41fb0b95033f3782e0a77f35b08989b3072f1a66999cc8a359dc7d749eba47de5dc9e5d13d16cc481ff9e91cadeb167b5307fcc6a252c71c5b13b3f864979ffe713fbb8f5b66df60a7c8f2d33f18df0ed7d4adbeb4a855f6a6334b9bbad5a4e9a351ad2c3ff2beeb9a966ad915a9d63e3b2bdd59a11176b00ef376949ed3b16ef51636a57d7a73614b1c9fde5bac693375fcdbfeeb96c7bf17343cf58f86e91b772d893a87ebf5a863dcae0dd43d1cf50eb74bfab6a7de1cf7d431cc871ddf5833d75969d9f141077f0cbb3a39f32b800df48e8b3ba80ce6c788b58c624e03c6088748b98f05f8b82a8c8b107625d4d983ae7195bd0fc6c3eff3d03fe8b0b30235f6a64b1f6d13c1484d086ea8f29352e290db10cae9b3c321e5252f299d59c68f53f2a4711cd125e4aec931f7edf8ce9e4097cc95f4c02e5d76fbfcc10b42b82794fba65f09609f109e2aa7f0c729674bf67841912de8f3d936906fdbb66d9b7f4024db06fa6cdbb66d9fedf3d93e5be5441ff89fcfe7b379fc6ddbb66ddb40dbe703026d20d0e7f301813e1fd067fb6c9f8da3fe09f967dbbc7afb0f5bad2050dd1ce45905812a28b481b6cfb66d9e7534eeac6c5113711f7f7539844bed92864bbd228e24f40244f2117df6452e1c76442e3e9e7d40dbb681b6edb36d228f2fea3e24e0bf20e1b88584e4e31bf7d93edbb67d401be8f3d9b66ddbfceaac6cdcd9401f0e7d3c240289409f0ec7e61f0f75dfe6a00e0f9b7f3cdb401fefac8038f961e78e0e71f3ba22e21747e2dcb973c6d92f52919d1d6e4afb47dbe7b75f3f74775fd1b9c819013f76547b014585342ca5673d06d9de50afe07179f3d23b312cef3f5336e5f2edbe8e6f0f1e979def7876714650f61b8f39733ab808f85736b9cbb3e932c82045a4d36302a6e388745593fbe98dbdf4edf3d239305ebaef4e4a7de9f486db1eea14fec631111e6f997b32d7fcf378686ae61e5fc7e1c93c1c67055ccabcb73dd13ddd755d138bdae974264328676ce640add76e2a935f18d5912f6273238821ecbd78a2b67fb58d506770a9849d1fd2e0927fbbf48bbac432a861dca459a63147fddaee8393a6c2676ee67474f038f5d8f119cc39d57587326089e3e9f8b0e38d80cff1ec5a1a358e3de3fcb7b3c25b0dc78bf0f8e593c3e171ea1926fd720fa52e25dd1cf0af28c408f89cce8a97afc1a5afbacbb79ba074a0b43056f0f8f61cd804555af4dfaa66c40ebbe4704c2f02bec49ce2c05c7abbd7b029d1db4f36e5f21cd4b1eefc70b9947e5dbe1d1eae78512a1daec86c3b40f8ec0974d0478167bf54daa54dd40893a4d3232f3c523e7ebcc49878e958132fa5cb4b17cf1d6db127fdea42fda60b5cf6d43d81fe7d342ecd4e4e61afb8717979c5164ebc74119ba08abcc20b475e622e520933f480cfcc318002dfc0ccccce90b9d6ca95999939060adb288257dd8d1aec8140505b15606160a6082e7d6b73c4ced4105d51356903650e1f361d42ca0e1deb9ce3339853395cc2bc9dd37d98733cc3384ac343e7400e9c1d0d146f06182a7b770e5ceaf66ebfa1618050f15fa53062215b034498c4afcf40218435d0f0cbbfebba6870e95a4ae992244763460e34423c9c337280dda78afaadaaf4c5a0c1a5ef861c7ce0d2c7bae106d12f0c902bfe1bc520810bcffac10fa25053535383c2c26c6232317dfc4e1ebff28834f2ebb2084f9736b9f0f5f9d2a617be2e6d628842becc6a28a65f244e99afabb3d27e51175c76a3628f638ca0783eaa2822171fa3da4c3c89a6a566ae98d13c5be68bff0597b9e0328dcb7eb8701217be6dcaaa60127b5604a5c61be2424659100e42bdffe80dd6823513b4092762fee3203ce369b1b77a173515040a894424f0736d72e3c12486f5c3339f36458abd97cd934d09921f59e50dbd09b1c08d6bb8a608a7e323b3fb9a07ec4021962859eb0ea4525297345e313695a278c5395ba3528bd70c853a2b571489485ed8d3a07811aa753472f73c1494183148b8900f26c14081891ea13ea8f18ad3870ca9a92952c488111f23e8da35399986715cd40f686bcf878348ad9dab0bb1401fec718c4108a1422c2e96f0d4b85862f674b1c48a4bd4d9b320f486ded01b7a436fe84dd7d4999ab962cebca6d194ce0e244f3bd0cb116488e5afe863d42c4c824e6f9a098dbb99f39b079be8cdb613cfddc473fba0b4d6d1c81de561f7798eb8e040ace6f85731f76fff3c19be8a7af61057455c3dddb469a39deea31bcdcd46e34da48e5e83c182fa8558422c211f2194e7c673844da021433eaea9c1ba8f8b14a1ddc7468c7c7c64a3f9b417d9815e5e1ca1568aca48b4e6aef71c7966e720da0b14a35167e509129a1720d70b89bb78d9796ed883c10409a741c12476179d95abd35ebce8ac6850b0c752be00892e3922fa454bb1a7bdb01762d9132ad46fa379f64f7b79f6cd864b5f88e59966c8c6da6ab8f411019d3dc4b229dba926410f7193eb207b023d72302675e3827a4a78b83efaf5b1fb8af87d1772c7877170c9b2ad89684468229179119131ae628c4488cc1857314622442e2642635cc518891021420412d13a2b9f617368f2228b6c4d3ead45d36820851aad2f33cc60e319b3941e77e7dcddddee93deb17b254ab9922d822c6245299b48854b6113a9726ad0e79cbb9e5d999c17073f9b1cfcd6fa0a157a7778b8feb3009df9f556f5aa4dd4d7e15f3e5fb6584a89d96094c3584de2315fe64b94cb3ffde278443159ffcd99d53cb169561467b6cf196747bbbe8ce06c2d3eb72f9fe6bf4933679a246fd8345f78beb08fd9049378b6b4a07e1aabe5d9b522d3258b4bb2864b6dc325d9b35d2a91facd9767678f91aa9dd8a335e64b9320f4f99249d96253b73009ba8bbc79397d93e5fbc7439fe17171b449135bc1d7aa78deedb41f29f6780af69a48d52eede25605bb5e477c2ca5aad13f52ffd1d47f7669cdf5fbf84fc4456a866994a39cf0eacbf359e0b596e41221a4be65cc5ff77edd5b28433bb569bfd10e9575af33a681a76f1a194b78981ffbec4af677fc95aaed32424e311032fe35c92e2b2a54c0b500cc291298b70989cb31aec40675cca9631d6d12fbc595d8988ef974ac53d926d1eee260850c95c0222608149b0eedf44d16c79fd5a0bacb111ea6222f7bfcd1a65193d829ad3d1a4598a2592b5c9cf0dd7d55831473d80102c61f3e3089fda3dfe8f3ffbcf7814d4ebb55b7fa6f577587d015d2e966d0ba6dd267f2df1ec9ba1afedb23cf9ecdac321d407823141071d524f697121b1edf7ceb8e882d9e2eee50d9a102c402b14dd27c3b353c1d8e3669db5462a3e35aa7db121b9b7776a8681e9db6a9e39dee888e6f1d6d5274eed8d85ceb8ed03cbe3cc716b8ccf29cf9761400553c9dd7a4e5663469bdc395d8c030dfa1a2712536384764cef11d2a59c66d93260bea59a69e7f7cc6451aeec7e77d7358646953d334899dd25a47a3a661691a9697ffe28f67bf62ead734cf9ed1d40fa69ea17319dc85ed692fe1613a74d895d4dff1a9fad5cf132aab4ea7e729ccd4e0f4f577b2ae1d176b509802112244d6e4db5acfa8366d8cf65179d475ae61adcab53a6a1387930f39a9628f7d9b3d8649ec4562d4a00cf184789067efd346214c62a7436a9ebd081b3912a3fe374f1c6eb6cb6752ee75cd393948e9353d3ae4a6e49ec83c7218c7230ae83d5c05730ec7e22a58873981612e2b98133146ece5b4271e29cc539c51ced3a62ce6c475697584699cceca13d96699569b48fd3097f62c0333081aa703bb79620f42df750f10eafa8c5eae3d410411040eb6bb23aae30a38d225628fd8a3478fd823f6e831535257ea0ad932765894fd01ba84ec18811eb53bca961d23d0e3f2c0040128d41d653fa087ec18811e5176777794fd801eb263047a804e0bb9a3bc60077677a5f6843daa80831d81011e271f9005b2681dae885610372420048b882146d086ef523dfb07fa85576a9da1e94a4112fb5e37809cd8c49e00e12549e718c1e9f0407be89f1ddc13cca3754ddd341ef09ae239b644549338a2b65344b1c3c98a4cc4968d281b1155a3d64fe49c383ed0d85543ead7144cba521ca87d71339e88c16189010285b806cfbb0105251412c11946231317893a2b719788dedd2d49bf7e98ae548daa2541af29ae1fdd5d291b578a937166247f6e4a78f8dddf0eeca28cac338d3382c8d98d35157ac4baa5a4dd17bdbc50a1f7ee94ddbdbbb19b36c61ca8c1dd8c8351cdc39c1664a1c4d50529631632e64842caa8848c3992b8ba9023891c494001d3b48e990daad5326f5cfe3a3d7bb3b469b29ac4ce6a59539b854363860e2efeba30968fbc5f941bd7dfd89328541c7a74d4da74f5c539371a0521047b7c430f8c732dcd3c4d160b4b2dc1ca3429aaecf5d0583756be763c9a56f7d3c9381ac68acca9f95431c50c7ea0c4164688c208809040d430307a8d4d5926fde0c1119c40821580400c22702103299c0082101f569800fa00c282796c189378663ec1671bdcc831dab4b0b669070f202b14a0e0055d58824a052af1d13dbac725eca3a374e163e8638c71878ef2cae074e0fbd90a6696fe030d8f436e11927bc4e830f24eff9871b0082af4ded5113fb237ec42b6261f657d7b167ddb06ca889dfc016db0c2a6c04eee604fe8e967e069552894b2786d12a29da5492816a24db0d5cb82a351ad4d83fac1d60bb7da44bd6d507175237ff4d58aabab356f5a6dba7ab6fcb85a2fdf4a54f903cab8b4581bdadbe50e36e5e2c29eb4776b4f6a50bfeba64ddbf3068e1c761ee7cdb7b7c32d6c0a18d6a42da9c5852d6db1a5e82d0f4425aa2f94017f3d4e8f30ffc117565993ee705016f603c29b86bd38608cd04b7888a793fcf8dbe1019e4e9c45a1e5a0b2431edf43dca8f0cdf735afd9d24b7a881b8930afc641f7ec91842cdbb4ca4de4458a7883fa896ca06131a6a646eb0e9765c92ceba1af28d6a07eda5368c34aee18323b43e6083dc62b8a22dcd6b3b79cf3ba34e6be1a76e0f7f604c338cc7d7407fe28afad43824a83bd20a2112d22465a77673aacfae1f0ebd9d2e530ecb827949939c2e628e278bc50b9fbb44cebd40d5eec6d98c9a6445d0de5dbf1744fd62567722e1a9bc330d3fab9fb32f0b0bb2088c7106dc22ad0a6daa4ed8d015100998036b05fde9d1df873c03128805530cf321995a8ddd1217a490f8d23b2f7ccda14eaec3ae0eb80ff31abcbb60029ad2db08505998032600cb4819d639e9d098e5532aa0dd1a656696913ff6812bbca65f532c33450080bcec02070b527ec3006ca8042c0624fd83f0884237b9ee0a870ba2336a082759c6a121515fa075708d8f117187d11a3979f63c7f0b29354358465894633c8ae3af429a5d791b729aa48d97db123020586e03fcfe23fef1b82e0bf185460f96f67ae68fdb734dfdf0ef90ec0906f178dda51da848025c400063bb0e20627f882ca8e149c9c1085222d39488246a5bb8abc5f982ba678d02fcc152ff8af7a1358acda390a3c219d88adf92788d0f20b1384f50b3384183c1192f83c8c108a3c8c5f1899d3c3ce0d07f04965bb53f405028e414576a7d895000155a24395d81d11c5025605890d6c8dca696b54201035a0d77c855e60ac835c5dbaa4ce7104fd1c18f848693653d0bcc2eddcd560ef067bdcde6ee306f475dedd99bdc1a5ed7837bbb81b4d5768ec1a366e344a737777d7e0928d1bdddddd3cab9031f4ca90214354b6d48da897c38fb3c23ebb5115717cfdc39c1d07d7e9b07b32314eb77bc2ed665e456cca3a1326b51bc19dfba857476397006aef1ab7cbd11b08502a9ab5eca3efdaa4ee9816c25ef776cb51e8bdbbebebd0295d97a5db8dd1ee6e9a5eb5aa67beda33dd345c12c2a58f7e1de4dbdbbb5ddaa5b2acc8d644a481cade33c4caf5172af41d623d2d2a5c56b6262650b3a9ac8f3277032e4b08d82b219008bd389cebcae6e46473665896651ca71ccf3ce36418cd320e46afd9dd18943e449f6d6c84faa1a0dcc02691cace60c8791e86faa17c8eeaa64d5ba545967594e660e372f6be6007e1e597e360873c604fc8c225d84187edb0cb2807593878c21aa3272ec167beba1b3466d4608f2530c3838710a235033cc1538b854bdfde7cb384a854f80ca8890510fe6f81e8006590808a8de1390a7b8db28a59c5b06256282b942056ab158dd02fcc155d9054d418c81ba25f31c6e89c18636c4e73e2c628638c317217c351ea8a9967dec68d20222b4618202c314252f0ed53487629a152ef2d6aaf126da2f40354987c98cb4bcf664d9d282eb16f6d2ec2a676e9964d812e9d6d564ca87cfc681e52fac74620490799c8a8246c18eb92582aa211090000009315002030140c090563a130cb7279f70114000e7ca448624c1d4aa34112c4280c33c818640020841000020332232365820028e49ba333d79df63f54c4508bb52872b6b0ae1604e220ace3a0e76303c31a64ce8b515b051f76bc16c9c82cca6e2b9c60b633d19fbd1f2621f3d6356b3a1985e1c3965df037a6f81b2ed4922b6ae74021e4f61dcb7e39857c7be321249ced5ddfb70b4332193dc04a720a731e5dce1ce1fd053789846057d5ee2822133908ab80e0a10194e4a16a3bec044bd84e04d24bc7c1c78c717c254a105f8dd25419c092e4a6201fdab1738b3a76a4e426dbf23f053d4e397f5cb36daf395bca2cdd03079ee7dfad29bf67bdeb81b64a01057b2bac25a698041200a40300a2fef0e513fe15f98cee470ff8471cd78570753d21815b71deb870e8161a24672caf3b8ab7538feaa3199889b09592149615a559736c81bd7163ab8e7a58974858738a7e446ecba108dd744a1ff0648a871205fde7b6638cdff49043f43880173d1d23c2b74a312bc4128f5e12a7f031081e6a1dafd393b275f719e85110534498a101042811ae1f01ac5fd23020dac70259628dc24ae64a2deb29a04036e50518c536c995c4be321bac1645c463a220c1f0827535b75c97bc43841b6f620a05bb98cc09dd33cb3bb664b3560b3d03057c32ee64191d4a8f36efb7bc41d8da6f3ad72e962cca4e18c89f6c12482a702806326ac1016ca5c2019470948ab58637bd61218aa40f47c327b88286d8fb198532cc65378a630fdab0fe2b5d01dc661ac27ae8f08c8bc937e2a6b5ee4e9e2ebc2480e6b0f3069bac155b2640937bad072b983381ce9872ad8e151b084aaaf0b741cc153bb74104661ed447d98c5f57de2f59938317fdfd48b79d1a474404f361b30637e347f1d8b90b790651de82216f8b7f069bb590d4df2839b7aceed4fbc1ddc0607f2c39b7aaee54d96d2b94e613b2fc3d7736202d741a9a2d3241661e5af5659190822da7fb3b03810a2c098ec28e7740089c13401ed159880ddcb17fdad880a40a004a01d2cf5805d8cc2a70c19df8411bd469f11901c4590b70a0c01e685b20ca010d9c491184b329c9652f0e69484ae2847a0d649a51bef7b0fdf6dd07b571e7c44dea2fa5c36a9369f1c0c600dd3b35b617e042e13c9de4ffa4e6951832ca1096cda0e5f21b05ceaa3734203e547729326b83a6cc8080b74550fb00456c3e41a41fd59dc0a7cac2bdec7edbda6039306bc4d2d93e486b62c873012ca41d1e37f5b062c05c09482901e46fd7920850bbae0e10d440cb26ac7efb9d9234900ff38755f239f7daf916dc56e8af0ba472db02255d1e3df82ebcfda73e6f177ab92f9a7a0390a9bd2cd46b05f6ff5b8eb09c3eae73d4eff537e9781e97694a2807848af542a98a555da256adab91553cd6b64014db322e4f4bb8b0111fd919e63bd45409a2e79e75a0c86f8810d7075e1c4a1ae529b7817d4e85759c3549ff088941d1980587632dda6ed85347a6b412519aac8b3a4fa24ea51c922f5578c47baec57ae99e84090da0af27650a232f2a9d5ea63253ddf2de1eb7019c07a82e36c4b14b114dbdde7eddce3b96bdeff15be414f32b7e4138f2d536a2482457d244ecb22baceae99de93115382e7c4841b653a9ee032f560fa9961b5874ea5e9d26667cba4e9350c58eeefeab68713a4ad98282dadef5604289b98356e9ed6624444550ef575f573a67d21a2885f9582dac36740a8cfe6aef25fbf679c01b5f6b70ed775b6fcaa5c22ac01c071f4600a91dea431b98b466ba476c94aa4236344886b9e197bdd7e3cc5e1fedeec4305b4e864a1a881be3394e8cf1dab766cd3b3b8efbc9d84dc36eec8aa00fc0ccd52b2375e7fc7e2f08189b72b6f165a49123f3b31767bc6bd0986148b94669b726fb7cee027815c8df965d9ebd05da17748db924b67ddac44e3e7ee5ec465d0ea63a71ce1d423f9c5e23c0eb28018367070541ab02e9f6068753601efc9e6f41de5d4eb5f22edc2bef51af23534eca735c0b0bd4279e64b4c64c6afa1d49be81b6ca2a96662b29d656ba81cdd25e05b351d44aeca8bc2ae1aa82da1ca6ff2a2e22c0fd41be38a2a9421dae9917f24458cd4986357789f64a945de24935039c4c14eb0a34654c60dd388df9225c60a7a947cf5e8e5838c2dc265bf2d98f8537697a6bbe42a5f7ea4d6d22057f34ec3cc5c7bf4c1c4a2931838ded1e49fc562fa5e44a00093e124eb2e9dfc8c8b2692ebc61650954eaff80cb0ad2417f598fa41147236966790c35e3613aec3c981a3248ba39e3e1a3a60502b1d8c6e7f448ceb70a45792dfb65b76bebb3ffaa72dc34fd6bc18bcec7deeac8fb712d41e4d249fbc108ce525a746cf3a1163badd3489833dd32795e56e4785b3e8b408074efdee8392766599e3a66ffcf699b618e931940be95ee32aba363b3685bfc0752d11ed95126fa92f6970a6c20f8f08d782b903e765f632ff0772a8abc724aaa863922b07dea8720841639549e66d2747a5269e9780386a87e80e0a9711211fdecd849904ed6431d4f3f0bbc3b73fa6ea7b6aa745f32c6cd1c474d6bbd25bd36d5c08acdbbdbc1b00777aaebb1d4170f7afd3e84c024a0572f85d666cf6e7f8ea5ab0fa3d945a5e09abce7f22dadd6f219a1e48f8c4614e953d3c66b9b4d22ff36e75bead615c727e52266233519fb4e5ab1260f6536b056b7ee4f5809da978e8ca8357c21caef89ca95ade20f053565b70f83b0841b9315cb556606a786ded36c1ef7bf18bb6b8a72b56961f9684f4bbed9994272d3e97190f8c80e6fe494e3c477304d19f9ec2769b55923040b50932c711d5e005d8ef39c5cd89f2e46d362504a9de0d7b9db96702f0fe8fae98518730ab7a6fc7bfb417501c5459300cd4e01c322f27ee3b23f138dbcbb31db2123318240d6514846d7792017a615fd6e33d314bd8c28a960c229bc3b1326608e92f53d06466df1acba5104466404110d655b303eff4d2339e854862c0b3f8959d0f96d05d13f22be8b4f74dcd42f21128b1354aa4c87a7f2c0baecfdd54dd4e3f901cb23b6b717c13da9f2d9164544ca7491411d79bf1004939d7a12d35a573a8208518ca180a2c6e22943e4e133f25749d47e63eae354804f44b3a4cfa8b1cbd949060c90d0d0f261b4dee951bcf2f697274fee7342bda79c23fbf33b107cfefd50c126d1f23c1be2029129211d025549c24e8e19c5797092461415806a1c835f145592db9b6857d1a5281dc7e0d71e53e7cbee4fd7c1b29077f2a8277ce722f1cb09e31cd94672f2bd999fd402c4a040f3a79e9ee61783a9b909b0a11f798b400a41e6ec1c718cbb3c576abbc3350bae4d971307bf1eb06c7666a1ea0524a56b0ea54a9e766bf9f969bf452ba57f82c807998f0ea8e76eb3d4353bc525ac5353a498f3a58547f88afec241640e66b70a8866700a96d9f6cf4a01aacd2395c658bd96a2128bb8be7a62eac42f0dbd3f674cf2feb675b4589aa4938a9434e13900715047a5f023b3f755a1d4585da7281772b8e7a08cc0c29704752b3bf8769d5e83ddaa997ffc94a1b33a608ec1745afa56bd853d1cac62283dbf00f259db9068f7e2d35b59af16ba155c0df52692a21000c2877f85a3bfd26fc6306041202759e8ca45794367afba18ca6dc65bd38fec945ebf96035e4748649b027ff5ab7bbb106eeca9b5f0c164bb5e3bc23434883b500465df71ee07a200067a0307da14058baf8b5fb112df9046009fd9dfd0338546c2679f00780b21de4d48773ffc888666af2abdfdd229c73d29483b36c6c35dba5e1cf73b1396c8b9b5ebbde1f5cfd89b1e33943458d1a4129e758171b5a8659cb2d1cbd738b631c2973b133533cd722b35e3b7a37def7565b99a9205de7f88ad8d985a790f2496eb81202d4e2d58de5e0d71c4e58959961e4a5c23c85e6f254d4ebc4e5cac213897e2717d2aed780cd66c89995b4f7f5268ddf49c42856dc12849d93cab54933615742f45e40afe6c9f8cddb4ba1115608f4b7768b1bb53508e2ab4492b7fefd9ce68dcecdd08968fab729c6489249c01e0a6efa9db177bf28ce4a097393ca25b14c51b4e622e9dcdc2d2ecde058cfa2d9a0234b75e9dcb6cafa7c6da792f896149344a954a790aa65ce820d150344459d2fa9fcb334bac5a20fa4fc0a445fd30b6e23f3d71f1b9a40e472f51260d503bba091f977bb806c200e94c5aff13c2db3d9ff71ce4ffa2b18d9ddc840d6ea5990c4f623e6ab14291e6ef9e41ec293db089020f7685812852f604aab6fabe73f4af74fe0a3a18bbaface8b2019c0c2d518c584a473676ba2870ecdf322fbfc6e12221696800d523077e43909745bb26d69b482827b03f7d048be101ffe56e4e145020d1b82d40c6de73ab648c1ae1150c2d16e99586189bb39b338bc40fda619a8760715d5062faf96e3ef9b27dc49fbcebc918a36464179857aeff6c58d0f0187e55f8e2958b2eb724bd769676dfcd1e8f44c9da8bd1ac77cca0cf4981aa192ce26ff7a44be220cb05cef519042568509aab2726d210322d2e7e8554b3cbf3cacbbe0f17c25c8e7971ed33f7706f0233da877ca00e58264c74ffca11da5cd328a0800b78b5302cf4be32fa680167b1a9a0173fa6d87320b2f63921eb72dd3eadaa5cf28ec8f063405300c26ff345dfcdbf2a6f39de13b3ca0f76f4c772da2d659c2d1b5f02bace9114ecbc5d809bcdb8b02ff47a3982d6421f6f1becf49372c4789c5b1132429e06f1e58aab76b8767bf54a3d0d52cded812dfd4c15f988dc7b860f87b89c872d7f20a533060a0ab1fd1245ce21eb059ad58322c14439a6f8a0c74cd287820faadfc83d4764fee9d76034e8a37f820c0727fd66c29acec299f631cb2935a7d6df4089f5de92061a40dda8a1e50df0e4168e3c4c320858f0d1f23364c8623a1e167e7565300f987e1d9d4e14cb783bc8c46e0b563d9ff83bb586b6ef70c742966fe9ec9fa00d7d71789b56cf494fbc73690ec5eeffbcd5e163ce03b64ba3683d5ccf2a1ca5a7e5161e3ed96907ea217f2decd07587df78b1750395222cb8bf1bb6eadfe1ef640a22a0506ed4b1ccd0b38cc7aaa130051013bd5052e48cc78c5acc5c2e9c183298dce59161113c991e05ef8aee0b372410a775f7fad1e1f19197bab69656d90eceb0b81fedff2b86f39ee723ee7471ab39c6ef23c96603a3584c7acef2721debbd581e48dfc70a626f2b814de2cbfd4e06581d92586422301d63b52053cb7de1413c1697d98f22dae46cffc1e2930979f839bb48003b4ce7c8f83703cbef2c8f21a54966834d12473569da495fc809109a12295db5baa5181a18473823846f514fd230e7866a6456071ee6580645b1b492a6cedbcd7078a95ceb752a3f93ab26122ec7931c5c49eb4812bc430f829e4f9cbf605dfcc108146108bc6655181f9c0492f694c03053f850dc2b99d90f633bac645788cff7efe133404bc8dcc694924625135afe067c016d6c4b8dbe1d5f6eb10a47564c1836e0205188500a5d7bb1eb0e79cf3407eeb2f866fd297a3b9a1a67def8d1bf32c045318f94e700f138875816a4fb1dc073d5f0331e0874301b925d84134efad144c0f92503033be19dd8e021c0cbac2703fe115f1842b656b5608322a652200b62b41ee2bbca5f813e49ffc65c3cc843652c8cc4aacf79fc530f8bcac9e44270111182aed325d44734f4b1c7f53ded31fb10643a28a0cd1e2a2e341300234cb4a195757ec47799ffc8a50d19e50e685a0f26446a1c0838cbaa3e49dda5b5886c715ba189907d9212e897209f43f6881da91267263042b67dbaaf2a49417eb2ba8ed537004b1ff21dba381354c95a29fbb6f7961b3751df0ad747eca2415d31e8c394cb8ab3369457d01e37ba62da28f9da05133129761347f2e5bb6129c35486c1d800cc428fb2f5843501a0cc83081b9c4a5a886d3ca811f6a0551a395c582a89a3c70e99495664869484024cfe77bc8783f6a1a87ec2f000d9c79663d4228224ad62077cef2df6c792091d7fa60bff7de8324a6adc70ff8fa846f448ee4526141854599e55ff0dce411f3600ed30375f0c8328ff600a1a3e25a3a323dfbb17e848594870f7a2d4b2d5e75d8ec614ba244ea18891378d82fe076a62efca25cc8c8a5d8c0982a357806f8fb3cc7902823e3cab1890f5da95c384dd23c6c35ce184ffd8adf143de683010f18d6cb36fcce358c71a0262b0772098968cc79c8c6438cc2674ee9baa500968cd5d8ce87835fda3e2c9db35cb2d74a371a5caa9ae52d45292fbccf1e60fec4b8bd66272218421dce864e747bd7a93f184350c24c110689af0588d203df1300a00d63e18bc5a9c75e0dc1b51ef74baab1d1ab4fb7402915d5dffbae70c50a60cbd5d9db15b19c1019faaa07fbbc0cc70f8a37ee1adc8a62319d9d52fa092aa9d4dcf4a5e48ea547884753217444ea00bd0b664c431f6fb59f9b656ff8cdca98e7fb843e49a1a22f486b11238cbb8db9dd6ecc7b315ce09ff8bf37b33f818cbb2c17bb4ce00f8afc40c8fb2708ea9e132a42fad6984792da793875a64af1f8cea1510690be0dc17f5a2faba7dbdf35783a5cb180b33d81ef6b3f73d85c3e29abd082cbc0bbe9ecc609488ab7dccf7f80302dcd6146ef850791c0e39d3ff52533e6f00e17abe5fbce8b382a5fa36754c74bfa561bf9f1fa9766e7ca36cb2a112b920ec7832d18d402666e9a14c6eb33649d1935290b54db7d8b4ea2790a141dc8ea3c089e10cfb05324696017e38eb608fb1ab414bfe9e2bc74d9e05dc8c43a32886f517c4cb41e4d203a7985b1eadd3dc289d0f534ade03abed6b7123f56239f92a4f997155bd30c3234f91968269806fc37eb7e4ffe8516dc0da6a81194f1eeda0363ec52727d0b3b25bb77a1f865147c4231e79db613b91f68849d0152924e45ea3493b9c6a35a2688a1e38cf15ad81c4d9e7abb06ec92b029a92786708806a9f62c97a22d6567de787f9d44a08fc166eeb46f8b5fac33bf8c44fb69ac1bb9ed41860a077f6a57bd50acd65d09e1096dd7f7239621abf2fb3c022c64e0a2f6ac367e1a27aa1a6b2378a6b0bf413b3a5871490c68a9d2f9d42518c39074eddb54b22536c6db88ed6affb490e418e15bdf12caa2509c90be2a4facbd52b0ba0263cc8660aa2eadadf89db9d250c7e0accea714430218c9d13ec3ff1da78266219aca64ff579728f1dc3de3349b6c8d05db1a64e554557c2f95b11c0c9efe952cc409a1a3ca55d1528f03a266f5f966d79d2ef74d9a3cccda0603a135bc21526094829885b51c278ba8bf09453e2dda9bad162fbe35e97a661b40868244cad8ea3cee535c7af3478359a3221332b053adae96b290b41fea9259466b918bb3389dedcf8e6794f06e8556bd20adc2b6a2eef9d4f3b278da2e3fe0b4d793a35acbba8f5f96eb8a60939906d43d5e988c90723750f3c2ea094bbc4ccd561848425a44a63149db5d07595947dc64d3327ddcaf93bb29158189fb5714be93c25d9d1bb93a57fe9f27f2989c2af9d4ce522e3f02727651133f854244600459d2089a8a0a00434be2c32c1023b769ca5439eb55df5ef37a8a6892c3d21122dff19d8e24d4d2fa589156abeb9c66162e6423a9647c64ade0746cb4db98e9c1b86baa066e131ac5e4e4c9a92144a60ee474e2bb5b4d03ad36f35feb707e763b34b3c1d7c30aed9c9ea91fcd86134c45d18ad82eea69d71330abc2d887c63e294a8bb27632bfb4c4707ed2b06b0f9187bae1c944b48334e4a2b7c83dffac99bb4f6a65a36dce552b43d1ce4e3643789a34241e431c00d0aae63466379a86b1948b186a8c530d32d0e546dccb77b41249ba8e25150518c006f61c385a7d60fd574885783823d7c8d88005cdb7fe06fe5b47217e25d90b93a46bda0254c2994c4c8cf465cf27d9dcba6a1cafbabcadffb355867023585decb33d80459dbb319e2deeb7319afdca4f8adb64d3c3996ab5f3183cda714ad899a94e844befeb7603315d7243a643e380c870be9f145c1b857e48dee79721f25b1093e6c2ee51f30fa6aa70b5039b15c5b2c01522eef644326b0a489fb0205dece1ff7ff821446ed1bd47976863be6df4ed2bb2838fb6077c0a3f89f94a0059aa049372700bab500f344b10d2801f784f2ee5e8cc9260e8e4549b88b0445d1768d9562e68f88eaaf90b464dbe4cc3bffb0159b12bac291dcf8fa392d117d53bad45136b803444b8a614491b818a3b522228258c6907274811b9ceb53318c53b4bd18cda7deae69d0da0d07ca5f2d6a81eb8e5cddda026e255154bab4365e5b544521f0a65361ff352dcfebf8a49c341de2a11a4afb7472e57dfec028a846ee43383c0bfd8b8809922d71098d14f74d0f091567ed10cb5a7ec744a7522101f5dd621a4e7c5402e85bf6a380306bf5bbc0be799bd12df4fdcdad807613f80efa9dc1460201071062176fb9cc8a1c9440632c2ac3140d5e529806309214f5edb799bc8b12d02b9dfbf5b9c347d7820a7697bac6d94ef825292b4451167b8a6e342823db7a325e6a3e4fb914e5ba3248db22c4fa761009b99d8bda5a2058b920b75cbbaf1237a3a96b69c44feb086527a2e98927c90caad38ea47678c08d61dbc78f81dd2595ed5976d50d46b2412aeeabd35eb0e828e53a9420c6f3f640ff7bc04f6ffb13943a095f1a6d330886e208caa2161036c9e5105c848cc097025da4ef584504265799ae3a08adf1b457c8e18ded2c98586768136c5e7437531dbe32360dc66fdede1e8812735cccf9d126c5a81dfae3b966a328ccc2b94facd053c445c321b98a326e00e50a38a221d112aa945a71884c1fff539b685d6967e65e98d670f90aa3bda05c9aeb99ea65a85e2169f04d5310065f3c4480a6908bcd970f374bf9a87bd5b02d22798a0906aefbe52716e441e7cef309f2d3cc699615eeda7959237d97c9c48cddc273b13c05b15435370cb75002b58f1559489b4a4f619653640e54e805435252acffa192025f55950702af6b618b7a5583ac4670b2868b34383d133f55571db5d9ab3a8b1b5ae87ee5e3e8ca78cb7851fb978fab18894c8b1d262adf4eabcdbbdc8bb6ffccac0d6f24cb49273257c9046b93332ac69242459282ac1b5e4d35822969fbff853b11b3e706c8e9795b4cee9eb7e26e50af967ed55aeafc789ce18f8214c929f4d8dddb56e12ea18e380ba460a939477d879ef8dc802e54017a2f1fbc9e2c80dc097f5c419d583d6356dde76ac61a48ca0e81a195fa63ffd196af798e922dd16771b342806e19de6855b48484646d316d41ca921efa1a42f2c2cc01a066b49cda0b20fa67108a8cad9f16b2b1fbe072d91cb5e11c7228162c5c2352e136c58457923240b3fa6e25ab64d382c9d74c5dcc2c99e301df5eed984dfd8fa9c0eb4d926e211722c4d0d0a052a50d250fc2759021278f26013efb64aa3446ddf460a9169c827fb3eea68792e287c098e5c4b99ffe116f7a109d1b6adb30e0daf186f7858e3b7450c4541705a58473976a069677ad40954ce22f23ab046ff059f97ed93a95db7b0a96925ca98f5325c992e87e8b864e79ece6f22bc935186b14ff8c8893bd34ea24f748b1736c5eae86477428365080b9144d556d5769d30bd6d8a67e3dfbd3b3cc8933a851582a4f6a9cddd385e2429371ff609187dfb4eac033cdac87b917c5c534b46ec06003981b836cfafdc4a882092867fc058d7f891775d07aaf6e93ea4f61a0a1b62450faf30e52e40aa1d3431a7c074ee7c47105a2b6d87ccb84b8222eb5cf366d23dba1b6741687b0858c9d733c900ba09926dce5c0e803b7a89975fb716cea6f27a151fbb7990bdd4bfc149a0951700874c5b237c5626515510d918043328a6189fe43148e91108ab90755d67b7cf08bed360840863a68a3834bd71aa5e3c77411b0c0720cc70e8299fc162445c977e2cea34c4c345f3bde6bef2d4cc24255c3d90655addcc35d70ffb266ba91e7e754d21b15d8e9878a418276644c5909f6b00c085f3d4b32cdd96e350a9044ec06a677461868ce45d440059af35123bdb64290687121030424b518b5532b74128f6d02b33aa02754990826335516e131337c839b92b1ed85dc4453cdb4aad2904f7014af3903136c42cd7411234ef7665d465c2bf629f16f5b4456f21ff6bf65dd23e0eff5d4bb6a7f7a58474b0794105c953e1f5115f290e453697e44b69cc458ada59a935252f4720e14b3d0307b294b651ecd0a92a1e68f44358ea7bb9f7024541c5ddec23c8fb57078a5c5e18a40a867cd7e575e66160aeb6e148e64c7691325c7a369b888213fa84c2e149a36e0fc1fccb6af0486d826fae885c93cac9776ce31c7ef23a86a49d6a9eb763ba8b1394643bbd66232215638dca0d9577aa3d684c87b6cea0d8e3ca6b6dba1c627538a955434d2ac40900476e5dc5d89f1a6ffb13111e87e9bfaf5698d31df0680ee9cb18d2dadb0bc5f78550d013218d5b1bfb4a72bdf806ab32054d4eec81a98d868d0155529b06f10bc3ed78f5054a9abb18de4771171db2c96c03764e7caec1bbee4bc4cf0592651738446d2a9c20b70530a584e423b58ac801d89ae804e1e145d37041b115e9486d6316c41a82ff0312f69c22de1560c3815d50cc342c55750086993221413d21aa912f0b2e35aa3ad04f81e021a642dccc0693c0f32d55d2a45cfeba8a2026c71f2f8bac47fdb7b2fa614d361ba7cd6b2338b12448a35bbf0fd33f8be7283a6bc64c43e8e8815e1881009550dc338b1bd32ad4180bc4cbda6045e941d9e73f4dbb67e4fd7f593423e48d1f3ea2e3c0de57603b60fdcf78dfe48f877b416318f949d691563775301c9697b2c3f0d5ff6125ce62f12135e2013416d434735430864975e8bbc58178fa2960919b753ce0ce1cd8203d41616ad9e63199a33007ef227ae58665c3064bb183aeeb819546899a2b7a100bcc64f8a3cafcfbdaac215b062afe8be06e875c2d2577afb3ff318b7e7ad14b390ff7806f8d4d19fa17527479ea3b8c8db507b4d38f0ae32df4783a3438e737153d7e7da48f6fe390ac690a6606d18058c005e197851b590a6602b36787ee8f25f42b1a7c10ece15e60c2e8708ed76df6c70c7daff5c591d49baa3fe6fad3a4c91f5c666aaf1fd2f8a470bfbd382fea2453af54474b5cd6adc0fc25b913639f7376c22685c83a4eedd9608485bf2dad5edf6bb025acdef2799d756f76f9ba93fb5064349fc90eb1c8e262bf1fc3f15ac1f99c8003e11364c8ff4e984446583993c6aa0d3e40b9bc8d75c3ad7abd90d1aa9c1137dac67de3a998020a4579c69fa18a3ef8434c49614f5559b50a3bd7a520b95c771fa0317eb6d4d7e61eee3de85665b73c10e490fe8ee17a0de28bba79cd94723392a086ea24b7c9842bc8500eb7e99d530a85b500214a6b2874341ad844548b27efd61a3aaee1b008b537fed0880fa49d2652a83d7c6fa31db463db8d26ee054546e852e106084485affb1c2706df80bb980a5db8800f6de7371b5e09bd56a659443026560e53af1b1a50f686104d34d7c814dd62779252d52ffcc0a34529b1065ed8f0974809ea003fa1211dd28b14365d1af295ebb600e6400d75e2b2e6ffb70ff2930b72d87ee7bc9f5d63836a76468d11cc884c59d93f1f61cab81f80210f9025d9d3c7e835d196d6565e1a583f08d8cd222e05ee60a455c83cdf7d92e08e5a369f50c7e00f9ef9b573e1a110e784ace167580b1e581b4160541090612c2a264956ac9a98a3b4a6b960c3777289df7ece0f24f56bd82997f27c1d850a2a9356d452f5e464984e970b50c5dc47dfafd0e1fbb356da14b3b3cb8476c44ad5a8fa48248de8779693c4f2993bdc4d35271730724650b5162beb930d441b4f958a58f9295b9fe568f0bcc8f6f39f4e8a6d1b9e5587471ee3bc73c2d59f78991f490b3d5c42dded67d46dab8b9dda0bfb737c047e253adc020caa6a11ca9279736184edc3011773a884c8c37cec85779d7f7d269357a805754a42d63151303c0f960c6980592106fbc81d16f6a85672a4214517c3a3a08b2882c3c325092fecab8de04e2ceca2da1f85301164aaff3284e7662df2dd41c2702b3657457574f67d1aae5d4b0c7f33b4cea77f12e802f1e3704e01cb2fdd281bf62ba111e100ff72b25f814a5774489b05318a19048db5495f48483925e518312ee8ff8fb86a3a6478a0e889f6391386afbc4719c1fb5b79e61e3e8026ef36e0ecd0385be71b4ae13f8d13c6c0d13486020caee72a5b171f45f251f9cd983e13e5a6e5c1f58f44bcc14a79d309630160e256283ce33553c620f8c6312aaf6d0cfcb68b56051ca7e5025544ba59d703e10e060d3321a4dd926d06baea0f8952de9094009e90bfc58a4b87803c16781cbef5f8a8c7fc44e85d5dde2dd31a3a9e7a2a310408f80ab3f48fdf40e1b3c55080223199cc260856067bf8808bbab061d95040469a5bfcb5e040d152162fe20156f1cb1d471b4c0e4cfdd818415c6c9734159370a686e68ef211235061bdd8ea5b2db38f93a7de947a1756bc61146c095ed4601feabe99146c59ee609cedc38e2d7cf068525d43e8e2f96932754f29f6169585e6a719722d21bac37597c1b327588e19195e4292e9eeca01202e7405082d0cc981cf8ff0e62e379a074a0ec1c1cb8047150f2d03e102a2f80bfc868ccdbe15b48897bedd4a61ac0c2abf593a83c12693ffb60870f63c8c0682ffbc8e3885405a4f4c3b850092a79f443e224760d6c19db755fe6cc5ff0460ac1c2a134fc86d01632633d633121d81c7746ace91008132d74c72439faf56656a69909742b7ffdfbc30a9a789866c2d0acfb6e6204d33c015d9b9a5bb6747a27dca77888baf0d233c2094f9f2a38f0e19ac5e4a705d19ffa13be215b67bf1b3391df7c9438cba307b926127a8f573f119f2f438f5e0e293a81b649221f35068ee805be26a2435d90c0f8fc1c515d0539e7dce44dab6f4dda0bc7ec912185b8733ffcfa9085d128e20a36939cd8fdc0fb307984da503e3d639cc50d89156d68f136fe7546012f2035ab9c8a990e6de2d3bf45ebaaaff998fa58b71965bd2a23cd421b4a8e4e9160b5718efa90a302e369b16b3267b0d023c376ae4c12b8200ba6d1911e61c71683bd5f8e38e94df303a824a00cb6db126743b005cc25cd477537ac0b0806884411d14b4158912f6f6417e82baf1149821da5641a4b7f2b9e9be3613dc3e5e73edac7c1f1a393293b488f263d9a74548f47a4b77e6c6152b169b938bae09fa9b6c04a629ed0b6818a469e2d840dcf7688a572768478b2e0cadc792979efc2ecdee8850e308b29a97f88782ad68bdb72bc4387706c6391a470b1815978f291fa00deca888cf5c3349c962123cf16c2f47f49707fdf3a151814cf460b93d905c56751cc61cacd9e00a3e68c8d55f46ddd3ef171b9892d05dd13aa3fc1f98be2cd7097268bf045df015d7cf29f90838f008f7c6feb6889737d79a9d7f4a41243412115429e0a56a561d2855d2cf26d9c884d044bcae023ec5c447c4c147a1741a0105461484795edad9ff4cb4333a7f67701bca1c77545f3c0104b73ba08de6d31c3f610a730df4ac343495d17131ed7306a8e382aefa95d3f4dc8e4a5a886a694ee35d99c7598dfcf918fd6e249ea9facaad2e0941e662e42c870694ae5eae9172cea47474d42c091880cf3be295c2ea1bb21a3b05e8bf709f599676a42140d4548c575a1163f39a5daf9cbc321b3bd3c2624099b27b3386e62407b8d28b3e89171f48a3163c58510baf76d5d0b78997a5408a02f6ec4e53b54c84d6d3f813556c0e8340fcc06ba130d4290b086b04878567ae5303716fb726817e89741ef1e819ca717d007a3b53bf7d0e6cc7caa555f1e7498270079500a53c0c949d4bed32008f35b3dc47ccf0e1e792c0318faf4755087826fdb5ab045dc3593a121115405c39781d04da0e1d8442809b983f4ec2d9138ccc3b32073290abad6c15470cc59eab801154bbdfee6d4c1e9453986dbe6e5ed80b7c68c896fe97eedbfae6c8cfa62fd583026565ef2f3736f59cd24447893877361b91bd8094127d9f361eaec6307c3484771ad09c47451b1176616b3bb176bb2e8f239ef7b4b60f01fbef1e4feb74e5beb3396b21341404786a5527834846a7206a9cb94c71c6a22b3af14eee46beda123c68c29064ebb55f3cfd9001b5ce48fba38266ec73fa39fda5ae0e0ca6d7c559063b3a52394472a9b03d5a82ba19225067d371546be4f0c01375403c3cd3a5b529c7b2d17592db5cf01deef47ce320b443d05bbffe0ee3fd48d822110af238a955433d8a7d2b84505d9818c9d2727e46075b4883476fe26a888163ac28a0437c44a95a694059ac300b563c4c720221a0615c85d0f6f3d0a5ac1a8bfcfc9102781740dcb026d92611ef175b19bdba625d7859e8007cecb33929a9c6e9aa98a122cf1540ea87dc425a63d22676232ce6b5fa6e18e76126d151d1057d30894e52129e4da8b2fbb00b68cde74c4554b59b847943520b98aea8d2d4e79cef24acd1137e3b932a29d5acf1f4a38b2fdd984d61c938847f32d753cbd536b383aef9a952d71c0a28c95dade40d8b8a68a95bb8e1fe7dfa4064027e7ea913311dcf18ece69d09f7011f9d556ee4872035068690e48c5c9722c9006b22d514fe13460519ef972e722f291418774527dc8f9d9e0fae47f7f95fa8697c2d1785b9b071c9415fdafce7daa7f79fbb07ad5c3a70e460cebc37f6b88bcb2888057161071accf1acef2d66f6cfb6faef3d39c57f1baff4f74ff16d0f73aa2eaa6ff79c7d8621362f6b6a9f63dbce1dfdb1d635773e1df1e8d400badcb5fa0413e68438dae9607e198f525440443031c50dbc3fe0ccbfddb1f745450be29cdb1ef281084530fc4c787ebc7b8d78a10ee87240464711f696d87b0972f71495590279265cb78df25a06b1e97f8892b02c3a54a1a4248c91a2df16f245691bbfbf0efa52951c64066a599d8b60cd9eda46a302a2b8c76691255fc439753489242bcc0ee943adf7fcd573058691d004f9f6f5929ac5bdec1b1e7239703b34c3943c4ccee3d9413a4349778515acf24dbce7f1ecfecda2c86974f0b510b911f5b8c23b5d8d8193d598edbfb88aefff119eceac3faae09b4dc35d7ea42f9f68ff31bcccae09381d2d7e42f41a692e5e820284d7cb4814915b4370bc61140c1c51ea2f4a8b824a9ea9056507e61dea06af808e2cd475166475a1fd75d1210f28b9102f484270ec10f5042a796c8b794aa03c622a1877f8586b0040a1b5c499309f40feccbbd854bbee1160ba48fcf2c82a3300a30233e2c500b30f44fd42f442a8b988256d1e375cdf259519500f8dda9ed9a7a3935a1ec30dc03dfab838eddba3c38b9e771ad6eeccf92dd83d8f1feb259bfb5a55f2853084427e313c92975484bef3f761efbdbc123653cb0e46cebfa8a0e6eb6d2f746fa1e61ff5628662b1e686b85e56d92b12c7205c4894561cb09ef8bd44decf4c1efc4b399a7fb485e39e22006b42877c8d2ec0ae6e3ce584c5ba26a7071eb8a81a0daa4be31c25a1557d5503a8080bb3f82bc5bf3990b0194034630cf6b67bfd5a23d62b8989f772288bca952e410edc58285d6627e8a7ab3e655d8487a4e1cf55053a2f9c532966d1032c228d0e648b4eb8444bdfadd56cc92586da1b14085ad73e6dfb4d1d33c78e391b29bd9c2900d2d3bd765356b433e1167aa25b15582f61c058e8856c65d26cb0c1426fce1f18a9f5c0fc80524123e30a46ff8fab6a7a59cc9fde57b23e2a82e47d0cf58475eb7508955042e91cff7dd8a0b1d5fbd8f26f33eb037e4835bc5eb50fbdfd0491423b0a42ab1b59b2cb9db433a34e5d15dbe82b6f731d1db8528f35bcc8dc3b75d8c665a2c8acef611ac76b17a8a29801e2b265ea1d42dfdc6df166cf757702eb95b19a9883f472c4ae8e257cca86f4ffb9c775e8a010f402cdf9ad09a971694b4c025b12c6761ced59f416a4acbefa41dc6503ad4b09dff4c6e9de8a0fa3a1b350a34b9af982e956fc1a50ab6f0a7f72e6b9c73d8927e6aac41df5f74dd82dab1f1b824f428e67dc34081aa2d47300d8370f239cdf81308699d17e27196acbd4a2a82c110893e6c4ef41a43c7e6ddad9992e6e53806fe20dba36b0c2765ab45f14444b139ae0f0eabfc04f53a5d6840f294008735402a2c6ad5fd7ac1aa655b256d61a77a6216b2561e40d65169eb125ba34cbf89db509dd126edf174525e42ec2838af3d50f51ca150c8d1a04fb29ff652d9e716dc36d17f39e0fbac59053fe2c67ab1715736d3dbfeb0000323c2f35f5eaa9767df85a41138769204ae4b33b604ad60e1132af9272481f60725307202a374e87cc08c8e84cf0bc0854489edbfd81727761ff047505bdacc64626182fa1339d2015ec980c294af5a49389f4b2b1b6f5ba305614022c3a45e8962a7ef80dffd99c8629bc6d94463e031b74923d0549bf8aa68e432f9780b55dbe543d40d92f0df986cc25d9b91c09339c2aa2d7b3be51f1bd2db60e7d28978e04328433b19090c68d54140e8f9b3815340a3c973703a04df03aed20ac1904dd6cbbb84f0001dad0ea81d874225d5dc01199c70b6bc56a083bf244eb71701fa201fd80c65d13ffd6a2129d6c269e948c1eb1ddc1da873241651b21bf067ca1ce3ebdb421a443aea2b551e8eef42ec50f13b004883e3fece9dc7ddcd2853fcb3729207cba932013676d2593c5b004982f9d3e19496b519052e2c0ca09b80502d9c9db473cb904940072a6e03e6a3a5179e2b82f71b0b352a7de1922dc1d5bc8d9e234a15b7a142212b414d955935fb9d80c998e558f152e00a3df96529a0f953665997d1161f9066ce5941a1053b7d6fd45510e967a21ee7dd765dbcac54f5c7358a499d40feb5b16154f9b5eb90db93b91231911265e062b15051861840f7e76de47f3eb6116fa19d4a9c43ec40b431392d010112949cf000f845b8dbd849de7cd43c45d42fb5415ce89698c70c55cd2f4aef1131b98ee46ed530a0515fb19dc1281dd9580915c33448eeda4f6d60850c28d5bc40898e185fc37fb79458f8b3eb6bd0d0cc16ea1032389e999c2cc4957121ff7df19063ca1e78881da767267d2afe14e3e4b820674df0fc2bab4e9597ba93ad2bfd7aeb94e4a4189c0e11ffc6a6439cb02fa4150d525d40d221227907169bdf3cae12222b5b36e55f1c5759a07d793cd458722cff0fbe0acbf6285b98e00eb6cbbfb2670cbc18def714df57248e13ee646c4bc58a1d2cef0957e9d87a49def8622eea16333b84273923eec39c96600dca566e220c5b1cdc68acb7c4471057d76c629acc10e49d3db73c675bbc03080e79929e916ab0b6d2926a54975c53b9a910b69e0dc49291ecfcf111d82b2e052a530b0ddfa95ee74812a7008f9a144ba13e9a96fd8d2fea4393a377cffa679da9051aad7ecfef0f641b57b530c0892086fa12b830e5cf3a8a8a8cb16d18a5f263bad8fb9740c98b4d6e18285a50f29e5509c2919ede47240eefffbf46a25c3da744bea62d5cf390cc70d8ed5a906a28ad9dfce4c4c9ce27da76fc2ce462a33e60c61b8dbf6d523d8b9884b91def69aee9b8c2f6cc51b8585fa36facb9ac125e6c399d4abcb7722c97f4bb256841273758ec24e16378ba8abc6c588d4b83a1d81c58798fc7062ac4d85d1a379abac13da7dd7b4aa06becd8a376ac1bbd7ea98baa930dc62e088098df3471932d4ff989918599f9ffd177caca6787a5be831a729bf3a39e8c1144be114cbc72fad053237a138300213363818fea9b4ae1715774a01de232ff4a8a1104f183d9d88b524032dcf286cf89b8ed993189cd439ace2ff0976a7fa4026e2803104d9f4972b727f6897a8e1d081a9f436886c08dc3ca57b5b0c889a550e5d5b4e28ba04a41a1f1286e77434f77b86d6fa14f7209b6dd735c12c35e4aaec2c73781c87ee603882213b2c57c82d60841d9a1930451b1dd3edbbc6d2d511a73235076134cd9dc4aeca8f5a9908e670290384eb3b089693a62ab698e4bb9580cfd1a4e3c09a68c59435df36106ca3a04b07fab89afac77dbbffc907b2f5cc64d2659111ec3a134f0bb1ecdd050eb1f806c448b226a459019e2834f79e504eb4d1c4cc9ed0b518382da128ff08066c5ff554c38c85b3eb651b5bbb148afb40e6364c5d68013f4cfc93c9f29f5dd65a53f8ff59bd70d0d3eaf33025e7cbdc968982218e442e71371221940e94fc3faa98cf5e76dc7f2faa685ffd9976532b8437e33222d692e479604a038f0f80e1eae08e46290a707a0209b0f695a3f811f57ef6c28544e3dfb5b6261857e3975a23107722c03d036ab25856173c2705cd0e370ea4b726a34fb920af9af7ab7454b089967ead907c200df47f58665f294e0f37ced5ed0dba232d0d125724fec88e86b096f9c1df8dca803fdc15f43dc1d4da50bdc53808efff2eb41dfae5f2fbcdc18cc052c29283449d4a352c3c7958fa498fbc93b8a492b06fdb3afb3908180e9666a9e580f6c05b412ad45cfe7dff788f3df083d7f0644d9ad3d47c5b27ff8acb85fa0d99d473d8d1026358e88219a2018fe4f5b74f6545801217673b7de52102bb91708bc7ad3b3f763a19b6b41c139ac1367b89fbb214fab91d927319ae96b3c46c1a30c0ba0cfeaf036397cc3906279a13b0949036882b803388e9045bb88eaf92932a9bc02b1642657dd61111bba6d301bcf8ce13fcf402a9ad73e7cef786934f1a91754c320861d45327fcae399fc013f06543379fccd1b551e653ce40ee34faf67f15701edce577c4c9c758793b1ce408e1ec28f88742754c26f4e4dc872eedc7510aa87b1dca15b0c54cc0d88ba1bc6bee7c883aceacdd412adf2758cfa83c74af3baad8ba9a336fbfe597b37a8a474fc20f35eac00097662944ad826ea9651dc8b610402b9fbb979dbd521082b4d53de96e2630e05aeb695216e94789b5ec610950d3579d60741ad337520a50b1a03967fe911c46e332ae6fc04eb36a7f124aa364dcf49014bddc6521a0ce2d710d5906e83a40890b804ddf86b9523baedb2ede945dbda5e4be6360c0b88bddcf62c7777bbfa9aae06719b21cfd7ef3918c5f19a24dc669a93f4c1e6f952736d8da56e1b0ec2c2e2b6618981913468ecaab92dcab203501ecad9feeb3ab331e3dcde9ab92b57db06954c0359da129ab468ce6c1b620a8c32882e557dd24c728808cbd08bb628415024110d68464935ff946c925d98be33e955cf85fab61fce9fedd26b4d12b6e6dd0f116596d921156a1acb95dab6583486bd0b2fe6e7b91a1437f34095b6299fbc46dbfc2e78ab2ab44d3e019b26e5cfb63f0d48dfe47e8db18be76b84ec3f42169690e97d481955d2ca396587fd044e9702ab29ed905737ab6440598d979a6b88559575472ed363eac35cfb14594b1e0644679da432d095dcc7869b1e1514d92a284a4cfea29a5e23d93da059da5a51f06ea12609a14f53812f2d0d826f6c23a31b6960f1461a80bc91466e108f0afd7405c4cdb414e4c6b404e646d8e69bd041d29f5640ba4f255cdef04d5e95f4d30a48f75329cb1b96923f4503a1335d5171c3b73d2a37d31228376ada73ad00e9be8aa1926e6037f21d6cef074ede5f4a8bf83270c5ccaf9ac0c348906638bfe149888106649bc0c8083923708a9d817d63338de494f5b1c82da1ad3dddbe387a6125e296cb108553da111f3f2d751dd5a266791095175a45444cb09104ab23a8f3d619285464cead9876dae573aacbd4137130834612ac0e80ed62e33a2a8200b5a4b5f769326b9dafe71fce005b75abcf00c4eba2a07acfa50fb2dca4010433c9b95f33b84a8f7d081218cb3736e0eb9dc03db9c94fdc30075c899b1ddb4f49ff0503509bd086172d2eca423aa2ae876303d0c09fafc137b616eed17eff2ae231be5a5125c7a5b8d7ccf019133d7793b7d29eb2cefa452efb0795189debccff10948f7f30a0f83d2a29977d83ab2fe93d74816117e21a95fd0a6481c52f80592c50026a5e43905b167fbf1c3ecfaa8e3408a9d91afeacaf06ae97c1c7a7cecef05a65277d3e2c5e4007c1f5f43dd731d24dfecef7bf37ed268fdf548c497a9f0c6b6530846e6f852c2ccd5ebd00c60a9c41a240b7fe59cbff589dd5864ce2fe499e283a6a42a2bf04e5df9f6e93e854dae2bf05ce3ff6e6e2bf0bceeb657bdef4c3a0c8cd750abcd7048a50bacac529cbb61a1c9a8d097b6b4f1dddda3fb5b4b6849fde536c0eb86fda4d6aac079d06121ab98e81ae2477bc9f7d69626a8c8ac2483d99867c64ae18b6cfda8e0eb78a7c6bd4ef1059759fb49a322e53d8350e80d6a58015ff5efe4a43c8eeff96a355bbd10820aa3edb0288943b46290948ee0d5aeea53db4f0549e9bd7ffbce41561376814a3ca70f3fc59907bef82e0289aa9c6e832997d03beba8143eca94264c9c87cf9fb8da64f113bd7ffc63798c6c664b53dd232c5b8b479e71a063a12dd45e94d95807023e8027da09220ddc904283b6925c93d31180e27c08c59ab6c322938987a1001aa49b6fb200a7133bc44777c55af97880440ee31282f4fd9917ff5cf7b164ac3669622bf843127a1b410a8dd12be59d34dbb53b7d05654e5eebff2f052b3ac8b3a0817fa49e6b9c58ada771b67ac4b56de9fd6a6c7dc74eec65abcbd403572b1c63b01bd94d0b325f5e8285165eb292a12a92a0fcb2f02429669538c6823331c66ff37fd7da047e75f7e6225122a24c3f018c553b583b61cb8001b17cbc7d85708662d1fef116a115a70d75358718896562cd0416c1975e667419d23ba34f95ffed6ca80716cb8c4e8fd58ec096b67da9bc6a63b8eac077bd23335834151a304b6292050fbcfabd592cc69211e904178a2b1e97291b89e6300dc55bfa0184228148c1715a5b9c6593531d7befc0679a1a25caff02b7a2a23b80e3dcc47eff3ea57f685b15f107c71910feb838528301ecc16d34e91511e6468e805203b7608f267c18e500b092743cb20a8230ae62154118218428c96f5aaf319e44f8d2c7cc0ec66b28f96cd0f19b39d9c7a89a06f367c9b906c4a075eed7da905b7678d873d7ea48c4d5f6a2ff9f928e7660a80ff2114e37129837bb596078e35bceb51fa605359aa380e69bf5521b2a7daf2a446934f9726ff3abc6d6572ef4a396148bb2f1b67cd014b420132ba1f8d80f001f82328ebacb0e6f3e3156ed36dacd3f6d29f7a24016f0223536f48f4ab02aa21866a5a40d819a50315809b0706e90cb782a2cc34b20421a32ba25d9bc99f4d2c6e3cb5dadaa8339b558bdc19ca6c1329d11c37ff44bf9b7f077f040e6fedb0d49d9a8540f15a8a71a5cfe4567a3b5e88bf85b446c8265b4a29654a29059806b30679068c53f919c74f1b051d08d1e0091448e184940dff744737395dbf2628689b6d4d88b9c5fcccd7c4cc97f75ce6aa4cd9a282b9fdf7032571c5a02884b9bff162f7c41542f565b01be6f8c9a21693b9f382b939ce9136bd57dd8a79390da6eceece90b4e61e85b9c11c9dd6e04e6b0ee10fe8037520127ed107d68fc5c4026a1373e6f56ae730872b74803fffb406993037eb87a4220db546d41a4905739c4464f9f88924e4343970a74dd0fad9608e0504935893c503a8b3268b0953eb87a4c2b17eaa3f49451a221131c429c1e0202b7c0d54df018a88267cc0a26292036a537c7fd5df39e9d4132128aada6e11d576cad50a82a13129fd9fd31ababeff1ac50f142218aa0e871bd509b566598956510d3732372b08b38aa4305065ab0809d068086749ea9ab2c384a4bae979525ab1e8cc606e58ed6791f366ffe1d4a0a0a0a020ae2c3f7e728ee5c7b1fc38961fc7f223c54d7158b8a1974ee82575d329cc7bb486de0a54374cb2f564754cb1826a78916915b56963f919226ad36605d5366d24294faa2a08a381879b9e27bcd2f96929a824ab23687574ceeac8c1eae89ad5e1bf6a9393724e0c13b2acb4d6a9ee6271748e3e8d5005d8192c2a1b43ff76756a153131375265e7849c9477d3a6ad357030ddaa6e4ee8e138213f59df83f1cc9d8ae554ab48c82a12b28a84ac2221ab48a8f65f317ddaa5c164d8303a676a3fc4b69fc1c47cd4499ecd58326186b81a3f484b8d56910eee231dc2d56172a88ffaf07f0f6b702a84aba3459695519236ad5bb5a9ddb1a864f8b4b489e59cacc9945449cca58da39b569154c74fa7f23b52f9dd54b652f9dd943e39bf5b394652fdc74f2567a56ef2e7c6838ed44da63ca5533799127258541f9cbb96d5690948a6984cc9ac6295935e542a286d8ab55f3a95514ca6d4a56a333389bda57a5d1a7f5fcd7f3706ff657f251eec9e79055956e13e94045163b3c4c6157ecc860052d7c710af4a3a107f2b0341c426becb3622d5f5889472b6790055b9e3c76c082228209e1c9c1b213e80b22942c4a63387331aca69fc379a02d445c03a51f719c52a22043ca10053d4a55929eae6f080779c581aff6d8550791ae5271ed8db79f06f1aa933aa32651e8bca6cbafe35be50673a54025195af7dbfa37bf02266ea8e989db338bc8b9ca651ad7151dd1c8edb3cea564ee347e6d6289ceadfa8be699c36314475f71643a9219fd2a13f76671e8ad9c748a771331e98db026dda8e6dd9ced91dd9d364def82ca48f54e816c8bdc7ee3dde236d72bf31fb98cee127998334839a5b8e1c9a9f484db3cfbc29c78416f7527e0dcf60bd5cecc9b64e22dd64a88fae3b3540fc1a6703b84e9b5c663964688d44431073dbd4b6403d3ab5127bb24e647006e019b83a5ff948a93575818a2c6152a3e8a903a8db6408486aabea8bff36d291baee57d28d531be9c6b094c3a83af8ed4846908ec46c91304f6bfc8e75ea26eb7392d6f889cc8d832a3f7f10ff38f3730f2f6993cf4ab7a7b52119c133f0969c4ea63e1a054dac18e26ad57d5197c657dfeafa24673031fddd6f927b3c0a3408cad81d42777777ae9bc589f9c39708e4fe01b30eeea6400461b34ec3941b87eb88496368c8d160687bdd929925d3b5c61c63e064e08e98fccc5658218514529490b82e77c49c4343a954cac560680a970c26c760b67b13b37f87bb7f7b336525574bdd20ec808b8ac55cdec47a62d68582892254acb5f782d41aac0b05134e609c2884484f7a3c489ea2035131f95d7c7047208070477a3fe724c7e31e150e92b6b40b93bce95c4f4f632a98fccf1dee54774ee0184b5a1cc1a2852319904be31648f5e71fa8838214277046d77c528cb813522c50448a1129400e047552640ce16a69d946f154e824a6352d0673cd633d7156d0e28040d00904b272ae076594525a7224a5942d30fe0b12639adeafc127ef615adbc74fd6ca5a790f0f6bd50282920eed9848f4120fd7f2075965a8ac60c1d929ac1c0bc8d2e913c90904824010080241a048029a4a6411a36b3e92b52a790d6a7bcfd2f4effb0cf6047d9ca61d07b5310cfa60abd5e1a7c602b35698b5c2ac1566ad306bb572b4897ee078e60681e0eff4254dd3dea3c4dc302ca64fd694d502a6db2ed580b9295e58ab9e521b06d55ea0961040a0b672ac1c1719832190b56a201f68cebdaf2010909b62f26fd62aca12cf0c22b02aaaa8220b9b8dac23f248dc25b90e5e1c4ee1abc23de79c73ee6def767777ddeefb8e40e032b625dddd9db4a5a51b103ed60f4f3d10a9bab91238e7ee3ef21f556f2942e28c3823468c3823ce8811e8a000020448137614442cbc22af489122afc82b5204c6a0e8f301fd30cef103c9aa3ff32ce9130280b689d094eabfee2f2489e3eee1479b58c701bc830422f0809d01be7f8fd5d1999093a43f401a6463f077aa81c5e19fc38105b23a6254ff1f5687abfe9c44752ea2faf307aa3705b2385230f92190d684b4e63fa80026070713ff91b2307788464c207ebafe9d941765bacd118659f425dd664ed4a102a78efeeb6855adbe7ef4a3148da06a59399cc6e21c5efaf5e612ff9523c7eae86a3d057a4080f5966559966559bfed50b56a5ab37e4b3c2eaab566bdcfe1fd56c97a79bdf5d7b54c6df83aba9e7f347a2f3580481d8d7e47ff35b2a88f25c245c3053494d8b09533190851b112d77d6289243588abbb3896c6e268b7cf41f84ae5176c71f47bd67284b950fc2ca91be985c6eac056c755178a1f9e8a3d290bce9dbafb735fbabbce39e7a591d1dddddd7d8444dc41902210beac02103ef79e3b5eedfd3e7f7651ca78c47344cf3d57c573473837c165b0291d91b56c67f6b4c337186aefc0220de6f78f6b399f4efee09277a38c9165df0bae9dd9e04699311c073e3ff51ec8c46acee327d8e345ac09feb4d6dee33dfed326670164624d9e64b5589d3acf1362854aba79e53c10c86bc0bbeb39b13a8e6c9357c91ce7b154813b6a71ecef33efb294fb6ec38cfa68a75e0b821479286666e6e7840cc761666666e7de045e1c4f46750c21335ba0c85b82cbe02a4386336a75b81ef239a7955999b66acaf09c196038ab034a4f29d8d063a1d5b8d319f5d1a76aed0d354dbf4e0e78a406de7c8d1c9dd6a2cccd7370e8bae39288097317878cdaa936cd60c00ecfa99dd3267f886407eea4da843937cfb3c2576666ba39c7eeacbdf71c3be7ee0e17873cf2bbbbccd4df8b309b55baea984b3c1cf54cca29e4d5fde7ee4f0857bf5d970bc4e7ee6afccbfcde8cd539b769043ef8ba08ba8192c992a49b1045a7a38882a282092b26104d513431285e2060054a2849385304584209944054fb1f0dd56368f0c2ddddb4d5b9babdbcd04a38a276156acb21e6cb936c032fb8918209b2488112128cc005468c92908218e6bc01450554aa50842b2069824590021c94626c184a151b96124e4ad24a240895c02aba906005256495d5084a9111c42a4016941d1dd8458e84b2e43959e43415ca4f0e152128414650f1817204228a82a04c91536507ca154950d9719a894db14a0959992798811186b630c28a04d3a56e935491464d19759ba494a062bea8db24b584149f54142aeaf6354bb8649b9699676b2719a53b371fe15a3fed7c6209279551a716254c1ffe5df78925a054d6813f50976e362487162275730f83c3a83a1aa4a5eeef126a4dddf64addfcfb7778cb94c9cf75fb00fb5c0af2b33a655413c10948aaf5d6fbb35050dd26423fa9ba4d966045ddc14fa4efe781a7762f941dfc04c44ea10648f8d804b14140820a2b6c96f0117990c0e66f7d8fb21a29a6bf25e4d518440157ae5c51427a97292951204729c3791bd2bbe9684bc6926d251e97f52ce455eb47dfef46d9088747a150376c65eaa51c64ae5cb952adaff1135b94871da4cc6d85748857d44873d458317b685343e1f7e767161c18f9e21c9d750703543099c4305cfb79685356fb192701ab0bb4699b2021a876cd94da292db6494a8b6d54042975e323b57f9ff39a366d30e480c1626448a26e34d4663af3adf5d7868179466de9c0e5168cc46c2bf8c9bdbf13bd7369656eaeaafeae92724e97c369fc59f39fd2dd733cba4ed3369610d3f15b7193aaf00c10f5d51a8d32ae6b1afdd66ff55b6df5f59694f2b29ead8d080ff94a3c2c1d584a8b7fb3b2f8aeb548fa48a231fe28dbeabac423d62de1209f2384e9219d067e8fd6e06f8d43cc1e5a831f290f42ccfe6d55bb32c1e5c3be10c940590efbf1bb7abd786db08ca44fd293d4f7bcf37e87f752ce89bdb742585da1fdc83968ed65ccd3da4bd2d8fbc74be494d87c4cfb1a4da866a73eac3ec7fcb43652aba9ef6daabe1d9ce60d31f987b24f6bef7d14c287819e12b057aaef0d21a8bef7f1c608ea88094304800795540401d46d2285aab200ad143f157330d46d7204238ce053031f840c61bc7205118e3233d3f918420811104528facb26518c50dd1ff3f992d2a296ea3689d2a46ef35b0b24e060c705365d44132346303de10a221b20669092440b9b204a47965084cdf601365265b7cf249484229b20987d8822097f0cc29cf20212e4d8f073cef7b03a9a875a639c36c11065ac32626e8ca3eac169f88970b230bf32ac0b8415ecd4a55715b3073fb1c4aa2cc2dc8ac336f06f8c2800876d6096c24ca0450b202836f027f05ab4004a820dfc4761f6dfafcd0420104040f08319d8400ab3b4477cf86bb336dbfcc1389ce334fc2f1b6202a13db4c61f85988ec4dc02fff2eb303e00192fcd0d6b17076f1055df2bf178718191f947b37f4510056faee62f8ad14a6bcf71516b2f7e74ce652f2fcf456ca54dd8b37b315bfb47e5e54676b3847b236f73e32f2c73f96b616436d59e8386055a271bb44f36e532d4583220725a6ba3111339a9f15dfe2291de0b7243513e712907c50939294ee586649013a052c9c5e812dfc539aa453ac3444491422107d5e5611e468f30323483e16e64bb07d89e8ecb9400e06f64386f0380bf4654983b98a37b515813cccbfcf6aea0bfbd2a64bfbd2c4c307e7b58a8ef5179c14c2fd8bf778141557e198a53f9b323bbdaf6722a3f005eb44a0d20525ffee5b1aca8329dc2d274a6c204e12af3435c75f9202dd5e55d1e860ee12a4337f791fa705473a133ad3d1269460c26bf10f32a91d83976bcd0bdab8e9f661b57eae266bf9b3d9991e48b177e9b40010a9c5c740313f568937cf154eff01d4db3ad2f642fadfd67bce334ef79ea7b8cba9ee90e55552e19af161f2673abf1cb6472357e9a9156e3cfb2b91a3f8cec6535fe1bd90579a1b36c7df817ef7b315bd3a9ef95dcf8d7ccfc17d4aa8379f7b34fcfc9303f9778b8f0cf33c8fc7b6a634df49fac31a68e18bf1be3a94cb61b83fb980120bb913999ac060e60326783b92e30d6f095bf28568f62b22a3e4cb6c1bccc33fddfa936feebc5f2545cc4454fc5454f954a15b994cbc171bf35ca3dbb1b828bfce4887028b782ce714a348e0b41a39c109dd3a627ecc9a19ce63dce15395954b743a5429dfa1e3c82b5699379acb5e74308577723e3500e2593710d7281914ac9c8a4646464646452347504194a5f26cb6034b38c7f58bc559bdc944d5699cc99d0cc8120c965ae35faf465321fd9fbc0f5ffa589ea07c64b0680df68dc08c0abfb0ee5a7005057611800e6a433b8148ee1fdd6d5579b894b3333f3af68e6375fcdccb8141bbeda70ee62b5f757560acfc045ad445108564d04517d5516c7fbcd9d50dfbb24cec77d605145e024515fe7d4f79b3341cd419db1f19b5b62e3677ee322199997180ee550ee26f20bed23d297d632baadd17f2a84ab43a1335e30a34e9bb27f1f77fc74e3677c749efaa77493373267d234ef67320f6aedbd8dcc9fb8b8520df067bc606e53e54308d7171ff085a8fcc4443048fb6fe811d5d7ee78e9bb4ae9e6812af359e63fdc53b1df16a88f344ed637adbda2a735c42a43dd496bcfa1da14ffa99ce6bd8bcccbc378573d9917f32f64b3b5f735b28d6b8d489fea637e7bd76f4ff554f0a64d386d8af9f7f0489b686cb3d2a0f1bb34dc4d6b38ad3d5852bd97d3a962a843b5f69ee53787e2276a7e67d51b6a13d1eae06c083f0c4cb6b546b69546e6036359517d3f23db4832b20d8b91f910ebf63eb8974c555f5c1c0a5b1afe1774529e6fdd95bd6c097e04fab68189cbfb613604fc087f23fc6e087f3307dfdb1204d606be3fcc9cd4da3267611786961523cd98d7646b4b6ba8f8fc395b73f8126613d249a2a14deb4a4acc0dc3dab44b8570e5b1ef1ff330b4093eccd2476ad36b00911fa4faa84c020a49ea4201495d2cd4fd8552f79d0e3e5827e3eceeefa24ce6762d1dcfcbcbc454d35df2cbcbc454130a77eeecfe51e623799412fe80ceee423d41e841c2c3feee2e49c8599d948f133e3993bba74fcc9df3f7493d91d241e2b69847523e4ef8e0b83be79c3bff1dedb230dd53ce52ca359db91bbabbbfbbbb7b10face461765be071d948e14e3cbcbc454534a49823d3131d813612bffea2649dfe4252ba9c4c3ddfd59664b4ccbcfccf9e285bb40182384ec4cf7a18f4c16dc142d5c14b705175d54a952a58a8b72852eaa54e9a24a152b55baa852a5884a5111175c5c2d6e0bb785dba2a7ec134f3ca14511b27051b870515c142edc166e8b95dbc265b16ac2dd17db8d7525a9b597d95a6fef6aae8828693d1e1f16129243e0c9a9d63b247caaf5ee2f67c1f8bbfa1e8ff88ec964a1daef497c4e2fc7692ce9f37872fcf492d0242ce4a7b7c4a28fc77f5a6b9ec9e398fbfb87bfb94fcfead85e0caaf58ee7256953cfead81cac776f652e1bc25592b4486544c5292e5785695981ac0529e7c4b0e7d67cab89a132cec6d0bfe158dd7021c60e25495a1d5d996e3f388342986c0353d9da8c1e4c228ce37e33c661a63510a9cc99c3e1233bf44b39372bf1c8b8c6171f1ea43247e7c8de9663aba9692bf5bd4fe1e19ed4f76e1fd073ded70f7e36a306f37d101955c852b7aa3bfa9ab1642ac19136568fd1ef6819da04436bfc3b68da3f264422c1dc28706d9da98ee2fc107cc5c6a2db34fc9c333a22e6b0b4301a2ed9f66353a377c97c907eeb24cd6c23e2132355b71f9bfab1a99697979716aa04a6606e3f36c57023e21323c6cbcba6daa5474597fb9dd9fe926d9a5ca78b8b8b8b8bcbe84a7de1a67bf1974537572dcfbccaaeb24b178ecb7a7e87c3d1cd7a96ef51dd8fdeca7ad42ed5c057ea35fa20efa24368d4eb7148bab920ef35e0c3faf93eacd11bc91f596ffdc8a2412e128984fd9b3f7a52367f6b0baa4eea7ef42cd9e85bb2ad878f203e46bf7523523725412cb104e9475ffa20dcec549fda1d842174b6c4e3b97ac1cc6535bc877f49279d94f04b1a2052dd5bd607b97efba13a3a844665cbd120d76f12c65bd7cbb7de65d90e7730240dc254491135be068c1ab408cca6888c87418b903645687c91b934ee677c11ec8b6c915d1af85b591efb6b17860d7ee9b1195911191488d10a58a0031390e00751f0d804b1423d5a28026528095b58c226064bb6f5a825daa5974c8e325236b3ad5eb281480e26fcd1e837f82399715d3f0171b3577e40c515b8e8420b5bb86203e387601b9c685384880d0c2ae9e6b2cd72df251e16c501bef3920ef0e54bbac5eae4d6511649167d19c184c941be7b296b4d75070ce11a29cc8f5887780d421279d1130697fc6d29e9d6a3cadfead847fc0ff27efba14a3a84c6bbbbbbd320b0c64b62fa6f490689923a18364983bcdfe2f3fbf8ee65262bd320902ae17fd4096181223bb34acc930c350ba849c1e3e70f3ee6eee7cf657cefc1277b6262b027c2eabb565a568cef3df8de73ff81fbf3f7de7bef3d18475e8c4dc418636c22c66859d6b39e15638cd1b2ac67bd67c518637c966559cf725c4c7f92f38c31c6f8de8bf1a194f1dfebdea0c52f846bf36f77cf30e03ed547272155dfbff097b592ab1eec57126615339305316766b225627ee95bc5c4c4c458eeea256fb5d2d9e91e29bba797c87759f7c897ddd326ebdff79297c59e803c2a1e93f5926e1ff7fe1131b73577837af856f2c44b13f36f637e7b56627e7be998dfe091076dfccb22fbd73c6dea978fcafcc0068ba849ac98df201258e261e363b298cbcaae2d59cf997b2bb3811fa606ae0d206271966d5c63249d692de677f4159763cc5f8e149315bd55f6a61431470f9f2a86eeb3f13654ef7bcc110b0b8bb446ab182ef178e17b4020026b8a332f375ee4cbcb47286fccc48ce49cd8aa7bac2956f7c4645b8cbb21391c877228880373e0ceb3028f401d88823737dc509289305287ea1bb806b5cc1774864e19e39f953649b75a4568e36f6080fc6b2ee9cb85e4535ff7f4b44634639ec6d720ddb4dbe1713d47da5442529f4bc2f25e5c2e4e464629e5ff6f6f25a5a4373000521b6fe8a96a92d8e3a7997fbf92538ab2877f23f3ab4566816e60402fe91e3ff50ebb294531adc9d878576dd0cd033473a2d6decf648e45d3ccf86d574c7eb2ce416baf7bb2de89d4a7748f7c233882f12eff2cf85cf8cf76c0c048fa562efcf6564ee6df4a67a74d2e20c130ec77b177594c6b322ff4709af772ce950b34be0695d294221696559b4a538a58481f13936d95adbda791616fd543aadb5b6d58dddeca8768653e3818ef5d463dde0bbac9961d2ecbe4e39774ab91699a23dac5bdf89677cfaaebdabe99932ee59ff99c75c99dd6e03f7f528fefd94f9b22137ec29ea6d3c0c7aee02c984a85bf2ec66fc93673add5380d7c2967cd15b75e40fc14e3218c27bdfc15c3ff0586c78c99645cafb72e2f7ab09f98cb0b197672d4f871837a22fcd18b9ad6e28f64e00fbd87ebba3807facfbf621c3d3714f4c4417152865a829c00b1b0f09c24cec9e9811fbabc2e924bc64c5a835fe32706721af88f6110c21f2266fc5e3299083e8c87df3a8da44d49b62f7dcbe859d5a6f9f019be059ba792e0c3c87a380dfca8bae8264b749bf00547959f76e3dfd4b8116e843fdde7cf778933b638dd6aea0b771eb8a483bf0bddf82785a1b5f83e98f6d01aa4a5f82c24281f4296f8ae5a1d376d8a2552e92a9528055a83bfa35bba24210bffa8f8470a13067292a3c32a3f0191984e9b5a5e7c60f89c03c41ffae53c40c80f69aa7d4afd42138cba9834272677f4db06ddb03aba5effa34d5bafffa14dfed7e3b0d75fbf7b5dbf7b5dd765a55ef29a52af5f56f5d4c5a26e132a98d48b4bd93e37a532d7b866b810ca7755d22d881a2f927cf1d2848a9ebae5a8d7bfcfd1a66dd27099faafbfe183303fb9a5e127d18d24a7a45b4c65ac06d5eb9b6f68ed9a929f36a04d90babfa14d92878c7ffdf53b73412640f5fdb5251e2efce502a3f3d363afb18335d6e4f25bc3fc06ebb2d49551a3ee332f17f92900371e0b98aea8740c1766492e95a211000000025315002028100c87c44291401c06abbe0714800c8394506a509708635990c32888628c31c800030020001883c0989a19b90100f315590ed375bd20a70de28ad2d1ea3c7e9d787a3c4e4dc8fbdd45e4e1dcdb1d3af9f526be1fdf70433b9d15f687c58734061630745f01c36ed7cd87a9955c1bb1c990e0deab97ea0e6a0db435a39470220b181a44641a5a03f183c1581e720babf4e054a9c121e8dbd3e8b552e0974bfb0080dcfada63016e0675989668ba687778754ff729e0d0cc80fecd4add7a2465f7b8094a2fc371fc178b73ef06b14459a95853aa43f76935ce7f8329d425fd2de00eb5212f8fbfb224210c968092c5ed901404fc832f11da89acb2e46e294d5d43848a7f3cb2a77c3a3f109da5b3d9fbc4b504679f7d1000b27f6cefee95256af83c9a9826094f9699deb5eebd622a4e4b72256bcc2d7709882b4808943d46e69ab9413a5e1f508f6926b21a5cab3cffa0a1f323bfe958305c607b34a4881ea7a4cbfb2e23200100c723437c2f8082e5f51da6f9ea121da9d374ff99d12b5af54184076c9d7a958e520eb9e4bea622b0957d88a7a6967206c85c604a8978b688286695ef4ca60e2234f1b4efebffe489b639d85532d456573eebef5fbfa39d89d7dc96584dd085c6a7985c4cbe3ea0bf224e742937084892a231d8c0839e370784619e2a7455e4be0ccc813e74b182c4a23e7aa4bd820348a1028d88883590b1a52e40e9035e1e0d2e1f27e40d2561fd0ee2ea2200cd13f6e20e8517d021ababc001aed12b77efac690039c3a491edeaf5e6503baa979d078bf3c5f1e794a68a5b196f363c2099487ac5c73091c2c459102805491cf4a104bee86c6f522c1926cef052f96c940374d562501724efc2d75717e72ca13c1ce4b910afb0d32b3dd439a817f4ac90763f54fe3d66c6e2a82bd366bc784da228dcb51138b1901a273c3d8aae916b37bdc697f235295524e6a40f574bd028120585b5e428de42b064b30aa02ab790103ca73270633421cc68ed0055a66ed8b8dc1e612ed8e31ba136890ca7d39c8ab8ceac5d1605f9d31a5c50741cae624a7395ebb77d03343e631e508ac9feb875317e0135ea9c218ef9877bff45610f96ffab81ffb4697074e29334c0c620d4a562e0ddcd84f08fb752eb02bd73bcfac7ab1522642749c882c289b920d5d87495171dc009344eec438b6741d52287689ec46219c49884cb21bb620fec126262adbe33f5f6c444dd7629dbd6fe0b7732869b5afb243053bf84eb4458a308da7c818f37398136eef1c3704027c02f07111b222341e1eb69c0a565a598521c4bf57282803e72867767d88d1e90c0abbe156d68d03411f187be0256f4c36a7a48c61a82de20d68e31d8a26f98f3f78d06d88cb65dfa15884d35756873d02d480ac066686ce9afc08e6923cb392530bf798e022746f3401e12f1779837db6770b725f83dab112534c56fd4139137a1848c4f909b5d69e3ed2c7392f47b62e0dbf7cff839addc17e504cc5e6566b6527ee7f3854723553b9680aa02bc8ca697b4fa402c0c3b3249ba8423db826e90a173c876925248f6607991e33990c3a4b1ba223a78c883a5434671eeff434dc87f52e0216a4f15c15b89145443982d5902a4d759d48a28b9849e4fe8551936452f35d7211c35ccac18f1432b096e3eb1e6e0886dd2513d4a2729faf887408b11edf2ad49362c1be2d7d622832a6dd06dc7998ee27b1e7ebbb77ac5b32c65c56f26d8907b0a39fdcc81bff67d1b37b51a1f98b70adb92031b33b0197926ead1feb7217cc25f0ceaa4063b0bbe23cd0296206706ae975b9d6c3842197141985da42bef766fcc783585c3fec2ae23b9cee8f8941ce9aa1142e3e006a7431f4511bcadb054076af8408f6179d3c0929d1cb59cc42ad3646652a9a1ba96015d15b2740e4b937e6aa8907d48c65008497883f4250a5cd4951a2aa0f6925f4dd2abd83b9ae312f92dbeb8148bc345ab651128d5d954c13e95574bb91a2eda7c3f7974fb76b6c150188dded642f693d4e8890eec5d736d0bac8acf980614d55da5b230e4fe30101f26957f9a69c9a017ca5aab4eb4897556453f32e919d7a6bed9a860583a5f9c47cec27a86494115fa0d47642e3b67b21a195cedb419a5d23c1880126b9ff34fbc751c9200a038392649a965dc342fba0070d806b9f93434a5b9051b7429b72fc6f3bd655a85e072e18441837a1a4e3eac51e667b67b1cd161df722dd34acef44c7563159c6ef63e8711c11cb9021b177866da513043651622c3d69061370042546af0c8e917fc84406fb7d9ad9c27c02177683874261f51c3a26a043a5c5ecf7dc8a0c492d13b602445cce6a851ed94c3277bd9e964d40a95cd24914230d807e27eae88b086333f75082059bcf8699b5862e83925630d6da6ed01356b229fad0d2cff430ec4d74ff183167444b6891da55fb4a55c7b3741c9d2960a9811acca54871fe0e4d659c33d052063a62c749f811aa8fe1c1394f1c8a6e428f2620d3b3c304505f0db91b9acdb02cba6aafe2ebc67712e4b40819d7cb21e62c559526023dab79a85f0c4aeee2c8d6f2ac67f641d1c4eba6d698b0b890e3e35011785359fb57b52309dc4e64f8a9b827f87911e858299aba7a4e623754f3d1188ea29f426294499e69ece00a147fd3575b04d3143bccff9be3a072f702abbdf0fbdcb876ca4c9e9751f6fc886d456b807900ca67e002d05a887cd86c1a2b7082ccf3b3d131f0edcacd92c9ba9d20a26f904aa2f7dcabc7ece0906406430818021bda71b066930787a9980b8da9ad30be48e24d81ad3cdd4005e7f0447f227e0c7f8a2d126a4a23e4ad3363f047320645d3a0d8ba50b49e0a1b05f0d8b72d29a1708b6153930f9d421a2c330d0286732e5761d98f2098ef733376b76ff688aa3560496b86385483fe876184aa47c05bc1e9d1720adbbd919771798c04769b4986f6a53cfa65f44623e296be6156d0c752938b56813447db9058837e727abd4c79dfde07b7d1b4db4819ce6f8ce28aa514a172bacc299f51aa99cfb7da68265a25e2f45d1307492fe15bd4323aa45ffdb5c7bca6f958f7395d4d8a8a0c54715f3e9ad51aa4ee3118927f0e24d429286b93e331ac40df2703bdb600bbeba378af5899cf15de4b870b341acc8a9dae809eed10db1a2b5a388c69d88a67c193ba47065c4f30c464e9932628b71d20e1122ceb9486524583a9d3b21245544c92997b93b9ab20a609c3bce22416013d5c5ac8d759aac534f5c07fcebeed3d7852a90219dd48150be80f60257a3eeb52bc68bbf2da0c393e9972555e5a54ed2169bd72d4ceb74b11bafcb963b0b33dd0cd9e905ab5fec1b79f4bcec0aae9edf2eb82439d8dccb9c6525c24e42c170f365f4fd188675d6f3bb89b312e750d7af59dbeed2e8ad416274f4daf045de909e4458cb6f1cd78330701cfac0782a6f7f810e18c3ef64b41dddf95eb60ff21bc8ea8599817871bbc0e2cccb5e180d281c9b1f95ec5e5bf2aade5da5408a6f0a178cf0d7b94e0138a034e45877b04e4e6657c42cd0601a4f9a72b4e0c22bfb288b0c9986a375c1e93c20c2dc3d9eeea07111f0a4ae42da1acec3b70c13cb88b4266d57dfdebf208afe6cabccc110d3b6e5344107ccba9ff60deaeff9787db9e34fdf0087e4b9aed435795c73548f6fd0ed661a10f75eac0cc8f6fb1c95aa08c5d17ff34d13fe908ca9eef10419f791ec044258557697faeecffde6199a8d715857fc1afe65ea4a98db0e3ca3a4bc42f0d999fac24593760b458be2fc731ed233d787e57554ff5812e4892577adb0c2ab5858305fae18a6688633701565f6cd8f561d3039515b68aecc3c0b616db0569e10088432d8fe5f38d6dffbfb83423869c57df12e0dd2dad7e081ab55ea38325e56a97539a0ac52bd255405251fa995991f4b1fcdd555335790556a7b9f56dcc6d938d78c2f628f345e86f2c31a0bcf77afcb5472be0638c50e4c44a269fb1a32267eee5ca0f4120be499ab483a8463d096281f13ebe89c1f4cfa883915abddc09c138111338ef857914266564597644210b72ea1dbe710f0a39bac2ffb52ea7905ce6c3cdd5131e1299028a5135a7e3b617d76de84729b7b21bcf0a960421941466394db2f9a19d9fab966f4763f3374602f395b1c1bd3b681588ec297ea1edf511a42d6cf1e1037b7fdbbf74b84a1c2a6a79f6613449278eb31e1d1bf2853ad259417cea8853e28ee4a750e8e888a863c899a1aec90c8a88a7b02f4a23e150b3ad344bf6d2eb44210c934f13ab3e056fd11eff7d7c20795205a7dc5c8739cd8a5be63fe5d1debbc15bce4f40ebdca64b913500a3b61fa6f713d48d98f4055dc9549cd9ab7e72d3eec2e9e3909a6769de82eb36ec10038c8339c2b0baa87925d2ad4bd019c54848109184e1b6a4f133123c5c93df03996451dceb816633d1b11d44d469886d296f0dbf256471ad96a03c4bbe4c4380138e660842022032071bbf74365a7a577a69e51e971a6e9e0ee0318dafa654d2687e7b733978c95ffd7a98d26f4c0d49163a51746afac3d2dabff9f6842d7df7c7c91da90128feb6decaab381ba59723b648c896a8746bd1be2da4000d7685ff2422192a188500ff384b9a4c105b26dcd3b3345f5cebc396457b1417aebe2ab1ec0eac1e7c52256d27bcf0c6b97804b0278ec73d1c1fee66607ed70c97c4d294ad70869b3dd8616fb2afbd2a97ecc0d7f7f2ad1614fa8e4c089d866ebe38d29b97fc6140b432a8a84074e6c238ec6efd0e55daefe808936647c3b0f5424c5ea2257589d81d8c480a9e18b91ce346355d2175b5bd6d823b1849b18410df56bfe39b2b1b25f7355c004399d1f555eb6a1ec4c9a34f8c0d69d0ab6efe37d43d8134a64cd820dae46d51395a79a88976362df8c8778a8c24642e562bd0e0414b23e0e4aafd9e35e06f4b7e8a1555432bcfcd5a07c6d8ab3a1550b7df14f6021974117df1fda6a890a8ec912faba544c8b3c0241a10d72232573f11c5bbb079b05b1494cf800f0ddc8f78a5294c04c472144ae00926a7cbb475083451e7406a01d8de829a459a50002ecc7c603d67fcca37301ead78a6d6ca0321bdc230ec2f8e2c25282e7ce16310360602d0727d6ae9766c67105964383678a142b8dd7f545b6b98b033094e684df6183626f4e6fdd3c882559ec8a3d4e72c30837b76b94640d5161dcdb2817d9e4ca04bad63561a51d47622db8348e245a783913cd72c04362777ddf2e58f8a1dd4e9180e85dc0987dbb372e1e81f5eced5fcdecd30993dc48304116a02bc3aa1a645d8c96d578a1175476795471103634c0b092400891ea84ee015eda86b40eec4081e218c1587c7fbbe6788416c6885db14152c647d3e4f3ff8f265caf3ed344c429d7283149732ee1822b900d0bc2b6ed65dd980825dc67d76a49756f28ed0b6ca75cd7df237cf61a658672fb733d58e885177af5c23998c50ac6ef1f68c01599a72fcd7fed9f0bc27655d32d88f49f155a733aebb0ca7cd746fdf2ad00aaec9e94ab16ee14ad6f4be5f82d08e7d09bcd805d28db3b8fc39be505f89815cc7b35ef9ec038466a3564c844b590df3b19e230c1c00c5020137bc780a4e1cb87abff3cf253e8c4d445f2e4f2e2a004de24e2fc9ae69390f60dde2c9ce0e1742417a701f407660ec400f4d7f7f78397a22f29b9746fbae83d3f7444b8a2885606c4a20ead070fdaba28400bb148c4b404c43527c238150818d53533f8163c29a51ff96a16ee3231b9da859327fcc8ebb227cbf239f6f20a54c16de0e818982fd5689941a401a51c41b231ccde073b13701a1c6a0ba8f862bccd58d7cb7d7b0d2432807ce38fb85142d41062d2483fff4e2fd58cb9306e6ba80c71266fc74c205715dc9c7110613d96234ea081a302ea054d88b134d86fc6795ab455fbc6cf7190ff82e15b7cd5890e1ea5d3a180524b97eed7ef3f7660c4f9eb4c928bfa7c000c51253d53f1cc4beaf27c2330b6f768938ff28c19a84aea64f56931db4c30c00d6f28c80c7277005496a60a47d5d11ee1009d86b5fe9b6a2552702c6e144a6190fd830c91db2f65186052668c9ade82efce03d6785a7c5a175284a5b13f5ca1f7e2a865997066d952651a1b4276a2f6d06a9f59b0443aa84b0f10073e4226ad0040360cc3a47a2fac1537c01a21e02518bdd85f747dcefa6247e05b7db2e8cf7df73ebae2cc19ee2c1c3a30caf21e3640f71dca7281af915fa54a00a96398ed09ce76e5b0ad38e6718d38d99b2b0f1c34dcfbc3fd94d55a7a89324e4f974636f9447698b96202a644a29698f084b01ec4843d550f72c9306b193290240c6dff0d4c996cbbc2f00e1b7b8fcc0500b061aac5e60846ac4d896e312f7b0842d1bc7153810dc802765fbbb67c82c1dfa5b99dda6909aedfe22a680769d1abce01fb64098148f57371020fce2a15dae2cd1500a1b78cc83373b0d20c69c9249fa01b6375cf740204f2f9e7a30ce3c6409c417c30cac9bb01c05f06f6eb82bfba3b114c6dc46a0735b56db081b20a59e62cf7bf7c65c9bfcff00eecda1faf40c63d84b379e7f86b91588bf84e8ff9e215db382dcba40aa5c1c7db4d5d4e99a2459d5f82422f39a8f2dd3836b5c8fea4e80289b0e84bf63de9ba073ea2bfdf07cb7473d4a5d6c2e42f93902c2cd4ee3f2d3704df15924664f2eaace4856281380f67fd803d9535e513a025088fa83cb2dd5417fa217f80ffd3a5c79686e39ab70251e2081c15cc5203d4636a1976403f12e8587ba9b5b891243075f8a0c18fb06bc54678c443f371124ba5d32aeeabe8008e3508b1686befafb3c8c6a9c7d762e018b7081fb9fb04eb7250ee4b4c3311db5a3cd6da72dcf93d5109a3e64ce7ad0d87c60af8b578bc5642579ff8ae4e33426d545dd61144fa16ea1a5019868f70ab4b3cb149ae91ad5673515624819f3f3568c0bccb7ca8f1fb5e9f596eaee0c757a9ae458e595c12024964672cf163836c6f6568a08d366a89804c656e309dfa2b28011f7af00953c026ca0587f07fb68647155e3099c31b0256e86add777a5bea1262b607567c87044481fc8d69ff6bfcd3a6c630f1d23483795d526c2cd602a9ecb4faf624af858519d60286d36e0cd7cbd4be80b5402e9b953673286a779539887d266379416e813c8184d2ee3288f53a7d02466bceb751a8f7a3b8ab4ba43e7017d56f97c21379cfbaaaefe888c0209c0219fd1e1d4a056f73b1c94b04617702d8a25ed2a0873ab6d32db7452032830810d913021c9c17956705bfba6e7e45e911b5716e759d027eff16d464ab6b75608acc61448abd1bb3a1bbdf73650bba0ed0b233808e06dfa374156cbc073f44e47660f0f3984f97b8ad8e8407a26b3d73ce0a7b035cee5cdc9ac892b8fdec643f2506390d3ec18d72186831186e44004f08fffe5507c99d901ec93abc979daa4e55bb1de44819780b61bd244617ccd37fc3b1697a6dab24f88f1fc6ee6530e31969f4b4c2583487880766d667a570d6e00ea8ad371ddc4f9a28dd056866dbdc24ec036a1891cfeb0e75130a68d4f4caf71d9c0d4165154b34a7b0d9a62e0fb38b6e5689aefcdcb4497ca504d57a6c12a3b993dbffc5370a2afdfd2c2457b5864dd1d0498cab7bad1f5474de2d7682dd34bc434fd3dd69d0dad2cea780116612e2eb72a4e719ada1b7064dacf0d3a1c7e75a03b4bebe95ccefd0f1a9054a6bf23e576f46b6e2603ae5f556bd8194804648448d01903efa332394fd4a841804b1cced075fbabe105ac7e3c47e218bfa0ea38dbb2fb6ea08465b12658532356542cfb4a99199a09f6be3cc205ad32520b399f82245c14793ecedb3ee3da4396d2982b818ab68848415d65b15e98e9cd899dcaffe90681ec01314ca82e5f11061146e89a4d0d7d8d361da31bff6307005cf9fccd2bda9f6a7b6abafd8338f32fa3779b0d719b6d070000eeb0fb293f9cffe1770ad3bcc6eaf8324af7814a1106a86900d24329994aea7624d184222a7b8691a95cc98e54ee5291e13282aaa263769d87738b3209f1dbb7045e6410bcbbea083232cd63a5f1d85edf6bc892718a93baa8d4e32eb2f58999af24d720161d70aa8372559b5c68a3799931b8bc85489b65c68dbf0418fa5fce55698d118d00bbfb6f48ab71de644a371ed81bae0e01f9b9122028adfcc21e6092fda18c7cac4df3d19d9670cf385533c378f6d0b2aace5c1d3a9626f6a6bd2f22094c8750557dcab4edfd5c92de8bf6f65038501b4536d6008b940e3043052dfe86453b8f093e75a647f85c17c4f2211deaca97c2aaf4adb39ac86302b22774f10494c2c5aa3b3498ea73e59dcdbca4b08133e2bb6b072c0eb1481de16577edabe97155c518078b45e03b6eeebe328f263125e7b2accf2971e1df1b340eda6078e892dcaf888c47ebd8654696d12bd6ea9a54623c95853f26a25ad153e9e39629dd85ceb9e3e61a621cc6f006355b97202ba52a4958758b6763865e0e7c43e4cef501e51720d80536dc799fa4fc79e76418c55fe899214d7000cd359461f44dc69e866db07c1a2bc4e67d0039e1c50352afab23d8bbba04ea4d54979726886f6bc89c69392cccf8aa847dc23065cf29dd610e9f9ee5e7dc24e6cc6b4e55ed215454617cca2b5e72c8570cef3cc4c2efff30a0ede2de70f84c3bad05f223e8e5e7f5e3e049afd9e8c47ada65247f69f6fc318da51644d93b37b0c4cdb6104d49154ffd066b690fa7d4515e577847d2e1d94d761f55ec017803f3ba42ce82a24a5d33f46c0cf63cfccaf0a63de12a74f4e065c6eeb63448a648b61c8de69521dc92236820975d690931eb4eb992c2ad3e12af0fa2787a44e3800d98ef31ef12714a44294e96d2411ef9870166a83e4e39dc593c1c2fe414f80cc3e852b375bdb214606f14e4585496f44e615ef090a29efe03e3a5af01364763ac8f20bf38edf02e5284c822f16d895a10f619c5f5d740d99a239899209a7245ad9a15cb9a87eb55227917d06c227886f2dd299f6735ec2eccd3428d56c1b4980ea74fe872c2034e2900e725dced6e65ef5e6f9531ceef23544de7685445059fbeb76e07d3a88774542b60ab69d752e488591c005428e8f59351da27537e6a03ba54c10052171ea2cdeaf6154f240d401b930889b944ab2b50e7a33a9f70b4206c6552de8ef1421ff6df4f46951822f897f82b6f43490d42cd1a7dd1706e5cd664507db896cef58df4d2d980b13703343155b11433269c093120f3fbab6b57bbba0d87a3a314dfd3c8d172448dd8f3c683b72520759ec1ec7c23116e2e8ede25b5867919415c07671b9542d13323b80cb7e898b4cdf1ff271fd9b296aac01e5b4887931b158b078b0741e028f1e7224ee245c302a7dd4b6626b348d5f3173fe032db6f12c273518731aa87ec2df3a4bc50e1564997daec0b066b3e132634d64a9bbfddc6a42228fbbfb27b4d66a79c2553b422d8f18828dbe5ef87ef78ea7a082c221138d9a4156035f1b42b35c8f2c246b9850ddc1d7d4a54b5c6c353f99ee8e0990f60ceed0a696a6db055de55ebdd15bd1539c41922f90cf5cc014519c54f2bf79840978e7cf82ce07ac621a536ef0e89ed2b5d70693eaf3cebcae1b96c48f8b5719cb6a275ecb954a2663766c6928a395517470ddba0d7a1673fc7cbca44bf5ada674e170f2bdc2d9d3a2025683e2dc11e65f877b8c02db6eda82c897ce832870a3d2d29796f6b22a2d3d1a7cca312738dfce448a5786fcac1119c2d2343c4ae11629a5c56a25e24877b22f2d13f3d1ed625f1e7169cd3b9b90f0fc8604445caae448f1016360503c32d52192ee5c0a1ba751eb3d6aedd2ca1d59ef57fee0131448de0e4b474d3eb55a1b63895a00c481f66d33fdbf7521fead66bf72a9255eaf8c9ea2d4a54e230165aae7c53ed9b56c4f75c71404e20c59990700f0ec6b5a3f50a00624078e4bacba1108b8aa13236289d120bdb36e162edf0e3828c1bad5593ea89f9591c4fc66bcaa8380f3e8e4f21e040cdc14e72282cb1372f72ebd7ccb86fc634a680ff0c32cf1a2460a34ef9c8bee60d17b1b22aadc43f5218d489ba38b84eed213f64a1437e62657b30139228f823af04d0c0d260e038a98748a9713d63fdb8087ffd2f3bb1c85bfcaf9ef2ee7b72162aa1b0e36d464df891c96f706f61b5dd81fb01221a4c75c5d4f11157b8cb38b51377c83393ddf87123b60a89a1101528a0f9357147235a99a610822f0b8b8f0db3a407352af63dca4e45ae14061a5d9a508d58d46370b398a38c7448052b4fea333d31f13bcb5448cbbca89f68d5637bfabf0cdd48ba5171a5f49dbaffe3167ca8f9ce0aea2fe69edb9c5e6d6c7768e444fd589e3530b4fe375e8e17c9a6ed11ae4acdd0d52941c080b71b113fafd46e4aff0009f7f46daafaea2a66d0d005414814cc6c5ffc0eeccb4d853c3c29fdd28b7e73780640cf9f503eb72e457c1f78e36ea45943b6d37f717540bfd9237ca01e8bd780af90e6392ae6600638e18c4f540ca3eec16e7e00631ad3e2abe5ed4cc98ed9bc37bb5b385d3d96390cdb110cc5a16427a533bf695592b0b95446131c654b81c95e88c764ba28ab6617c553c21e06feae0807443fa9937b0cb537215ff4b8a56d75f72f178fa37cc92c7c0c11c0344408e38829655c8a59f8e4915896a45a252c53ecfdc6581afeacafa2056b7847bf11ffdc072715b6480f51d3c710e85ac5c88442747010a653c2ed01668d10d8a246b30001f5daab3312f237af060bf28725cc21111c599c9c0ad0a681d4a228a4eb4bfdc6b944014aeec5f185b2f6e3e4d905871b77f92f587ae4606bc725390dda229e351d050aeaa81683dbd4bece907c861f9cfdc69e690ca9c5d19122e264c9a39c1cbd7d41e52b9d5211fc515cb9bc492aa714c34f3e0873f942c0a5dd727019d5de09c8e767839b2521ddf4d44718fe2dd43b145f27dd7202db3b7151eee719778f5a62fcc829617121c41deb8a1903514dcbd1d86e9223c6979b37d4cfc6ecb31c5a5f588cb1ef57746acd170a8425f0101621d416c05e57e89e0bf86bdb11b7f2b3b4d3a8b4b5e4c53c45d8d16135174e39984f715ba3d74d58c9ac2a72f7bb76789a944775ccdb0841a0cee93d5447ac28adf596a9baddb533bdc93452932cc405362ea941d343860b54d1a849eba37f968f5339e7b2be4d94baf7cc7c141ca2b1659f154cc51ce709b5ac391e7b39cec57404bbbd150594c425ed86e96a01ff7f54c4742f777785d065c46103e5474099142bdf77fccf7a391cf74dbbd860f72965b13c0c9377e1de9812f32ae3577e5d03f912e00c576f28857f69651ba4f71af39658f6d161af4dd204010116df835790a9d229f7ae7e168129a8eaaeadf3075929a99f908b49c8a4a345c44b8255585fea73411e64d90fec63f4a70467c95cce76d5cea8cd6e19281ac073dd619c2b3e71f1bb92e51a2049944e7e5478758f880b9ca0627d4060fa275310eb87750fec8277e882ac3c34a10e887e39480500d073f447e562ad21957df3449e274a79c76d2aef99e0b25f012891269ca8eed221cb9c923f47a2f86ac2deb6ebf5059e3526b1e7f49e4b585b3fc6643d3b91f7d4cae75716741fc6d2cce72f4904461981805e5d4bfe79518143f93e2a48405bc4eea768b8c56b8855ac6c09dada9a2b4ea4f9ffa036bff4b6b506cd7997dad365b0d932f1412fb2b32399e1033e533680d8d51afa2194bc7079114911fa83833a29a98064f008a6835c885c78560837071d4421569ccdc83c2229cb095eb0070d06430c5b73344aff2e2758c9305a0701415e9e559ceacb3dd9cd22e5bd4194a489982726724c1077c97c0c95a08bc765abf491ad5d1912c35b07912baeef2e7fd9facc550cc5277a9f534a88094d09867040fb0c778004a083985802aae04b2d9de1df8d5b26b608a9966348ef1ce386b1663bfb8bac27be853017fe9f242e0e5fd189beea82786dfa05a770ee161f5c2a621832271fbc48891483bfb8528bb3190f70a834a6c779fafedfcced5147165f3f6d73f332c867181d1df14c2e89ff1bb623b61866b30ec960ed13600a71f34cc7d6ae584a49f2d0a7211ec78b0ec29925c469101b545a4ae1c0ac94c8875c5e2154798253cc8bf65adb13e92489bcf53a5b832a675619ee6042ab6e9398d75cf9c74d12b5b365cf68715d4066aa95d961e6c10702335ae324b62d6bd8872f67df302a8b5f211f8aa6b6ee0971751821eedf6a72229b0ceb7f685f6345500836367305adfed8d258e6fa66892b7e68dad2b77c5ffe042560b41320e155d47f476cfa81857f7e101c7948498e3cfa4f33275f49443a1c869237f2c183022fe97baf2dbcf47ef92fc1d155f8024c95d61ffeffb5018531e4e8f99acc067dc65c9d37e4cf777ddc289d29339a7e56b3b8b421ca11d53afb878e51f80b37fb866ce954af27b251e1a423cc03e27529fa6b30fa323122052749a8727a75476aae29b604cf8dbc355279bde4dbe07c235e0303ddd1e1c6c0ae686e21b94b0cd158ef93c712939781354e048da931106e9cfd6abd2f411fdda76bf7a4f21a2e548ef8b66778322ffb6c35b53f792ee07c895ca0758a2f60f4a6c5c4ae9232d036f90007d4990469631c2a3bdd47a68f02f7bdc0b6bb539b8e3eec481202017664f09de1e761d3cb13a886733b49a4aa2f1008422a2eaa2f019a3fb3c7081fc303e197be070cba9b083b060126c108b2ddebf37c300136ec01086b7ec8dab51c4f69fa74c4e52848c4d6d9570adfe07726baaf01467618975c2a4ce99988d2b736120718f4b55f493b5da96af467a9995f38a280363c2b7112ec4c56af4fcadc969e55334d0efcad50559c86972fdfa7eb1c73ae123e4cb3c96ba9230d968716c69fca70da8609bdeead1085f28f72c69ca3fe385c710ee4cfb90fc735f128af2286e8f72773ccd2ac747b9c81f7465a60561b8bae0830d3e6909a8be6d6d7496e2bf7b000597e8fd7835865ffe39f304652a0a6a634f2014d8369859a1b8cdcb84960c19449705176885456dd8dd0350017f44fef5294ac74c1ed6de2a37167caa73fe05c77b7c724172be43af72d752fdad02cf4ec4716677c1f56d16235303763a0ed15b554aaab92de23818415a7b34a83255016a37fe4a8307d5622270c780d000d56a3189638e5a8be730f55d61451f60201df0e338211c0fedebeec5e0c81334cfd87d44de5d51d04dc842ded1ba5aa0364e65b372ab6f5b11c3a4f28000af0534144f1efac6628f83cc4401fe8fbb547024244434aff3c61fcc0907df1f3e9bbcf4857898be908e3f8c68d0356a30f294ed61bb52df52d54361f2b72d12949caf42e963fc495ec014edc0574882d9c7f18b7d26cd47f6dab03c1eba4f6dd909853e8957dcb957d7931019ee3279531c175afda0ce3471fcfac133d8e5409b7735a07440653cf330f2b67e72282fe68a951ebdcc842f21e5cb033f2c00bc1bfac49735c2fa2bc1998cc44d691a1340b720813e7bfd2da15c57f4b7c21cfeb157e3d9fe964c44d79a568b2a579d809580db890586c81b1516461bc2a81d6fa765f8ff2a2cb1541502e412429e8493746b86e70921b50c40a8e46d3e9afffdb8e26646ce6fb84043d8d4c1666d2a976780a748209a318ef32f8366ac57697f98e7478e3fbd7bbf748711acc60111d63de58ccb72e9a7f089177d080ec5382060669a19777fea1db4ed7e1094ae776f4e1ea01ffb887c3c8750252caa9317ccb50950d371d8c362591288a66ee594b0b8747834fd4914238a919a5cd92100582f285d3d579f702bfda76a12f67d84d02ba3023601bdd59472f60799b0bd805bc4c1b89eec5e967f34004e22c9f78e0ae011c7862cbbe5f112214c1c6286ed801feb2ebe5438052b3976e799d4ce9d497d58d368d4ded2f8aa246b217afb898bf6ac80bd8988caa689f6d2846a5991031bf7ad9dd6726a41ad99980726b80c8f651180a434b5c9526afb8219d5422ed7235f5ceeedf8e7f5408eccc1001cd7d448061a5a125cbe2500dd218fe0ae2c7b7aac8c64c6d8fd5d9161a59b6f18efeec7a88a32e289850d7d8314b225bc9638c2b09c7fb7864334cf99d03ee7051b7698571c934a8070b58db83f1b0f261d364ef801063eb040bc8cd2cc659c533240abb8cf9a2803c09038e665c675127443dedcdb0ba4c8329b6a3f28dbb9c8ff04d0b800d3b9276e4711727d7cd0ec4b527f3545a1671b6c287f729839ed4fe1be041da5ca506d59e849f2968377377e42a62e3809ff38a4ce40be6ba258f85d05eb1e6cb589d4911dc95b9a3982cd9d8b78c0139914604a61610a0e5db2adecd50bb53ec4c639c8668eedf5979241cce9122e8c8987487dd22e92f1dfa13d0ae432c925f5986aba5cae4265c68e193a6b449f6f2406af00ae7097189c0a6039a383f257eb08e56c5fb02ea7b0edd669b456019891dcf3122356a89e0686a677192ca403296b41f8c799cd11d13aba405982bfedd2de51f077ded1f69c6a0c41e61fd777dfcc749116215daa5cad85c0f92a6782268afd3567ab7161f4adc1fdde272536ef3edc03188eb4146f44e4c56d877792e4383e2149a0df4cf074bd938048ac8749ea9d8d0f59aa3bb6fc80cd0c9e0edf367529eaa67ed7c26d8f1d59df254ebdddf81ef0abc4a26105181b39976526d03d7603decba3f19ceb731a8842150bcba0cc2164c2f54e76cfc94c2095b0012216bdcd806bfcaf66254a4434f18fdef216ce6ca73dcb5762bc1ac542038f0ead8febeba103d78ca6eb6e4c2b7af362fb419cdaaa06579269d87ae2a9586d7c7df5d35b346515d2f0d90a70bdbebccb1d7cbb4e76bb842d96d08ad05f390d29a11d4274c5737c894921a1a1eeba3c3ebe115e3db6bca3fb27b70525b3aeeb9b90f39a315ca510ecfc799e8adfbdfedaaf32a3b420099c4a7765ceabb6a97bdf98225c7d612d30f858b4f1161307151c0a57109994a5961b060e0a825e9f1d33522dcec019bb0a2663196fe9d0cb6e9be8865fe29300424a1776dbcf2d6cac1fd0be225efd9656c3583bff506ef66260d6cce86ce611c11ad234a51f0fa6aaed123709b03049f2ae8569ac29276c71444a00feb6e5e96dd761cd77fff6a5d5ee08a96886df8ed8b12840b38e24023c5a87f5c0d5941dde4fd19017742309168f6db80648cbd8494ec716ad59da378bca449e0b66233be9588e24c56fd5e0cb2eae514b2491039d2467639c4343314e3e5488c99e9205d4233ac9131892ddfb6f3fa6a095d3b931ebcea7f62173c5fe285e9bced851a0617be90ce74932d80b20a3af3ac904f183f001241ee8c40c577a92b57a8f43c94c3a889938a71d13428abae30d2a6584b1e368726688ae968f12b2c708495c8e404f3c6ca93555fe7d8d3c0e892b019069cf96a37d81ebd7b271405ed4e6e25df94861e4946c9f380c7446445576cb459279ed3edb4b00012ffde4684980c0cf3961a1c4a16b4a0992014ba585dff8323c639000955b918d15973912ac203286977c78408055babf831313dd80c8609b29d71195f81c24e955b91e67228f495d0382a7a525ab01b4a21677abcc47cef349d1465f219b50d951321f0526c58374f9e85be16f23981fe49e21a8b504061df45e8cdb051d9bad8449cae21087e5e39679accfabaeb768980b2c24c69813594e13ffdfc3afad5e5ecaf77343f30c7fd4abb87f369b9c48445ee0b18492d38ec77b55698bb3b16878fe6949900e13701625f06d850469909b2be5beaef8367a2dd92b17901846dffccf413fc73156b4fe4c60df02fa2cc9dd55d5fb6548cb77051845fc9e855b8c0981f49e568838b64ccc9122a9ae3475847ff217b159874c681a67935d20970ab43f844f99fc84450e3a8f40a1cff5f3332824b2923dada81f5af02d677e97e6ee4970596510104663332e6dd3798e6afb2f818a78185996c9e660c9d53ee4a0e7b5d1a5d10ca277500809c6c54d23eada065ccc9e837cfef86cd4c45a48a5a2165db429a44076f4eb1d2f1426d78fa37b2a956d484cf7d680c3f42f55a3b7a36633d674a2aa54d00642c148db0f6ae6320cec01f02d85b57a322cb178d1872e739f649854a6ba29e788618808384b4dda6f6ec7510f7751a62c3457dfb5d6fe45b93a0612c5047fdd1efe8617860b1b56d1fd136aaa4b16b0e806258bc95da0ff075a5943ad9c85eb3f62002fdcf65100c21cab2fd3e3c6bd911a4a54f395e316b46d9a9252f3e376479f00b5277db0818e22e50be41012e8200756ea4f805a2a1ec8cf87547ee5b588b8d0ace73717d1dda8629747c4ed9c8c784094ab977ca0e94e43d2023a55ca181b9d02190c42eaa369a6a435b5209a34788db1eff9d3017af871ccc6bf259052d3b5c57b8f0255052ee5c299e6d6cc2e9ab136b6a2de7e8615957d88e2921ade3e3c3d71dd071eddaf43eff9e1b89a128be42dea302d92ce3478f750efc949cea37547ae8eba55b835a8d0a9de1ca66a388658eba94a69f24bd7119f958a00d2758a88168991aa739e4f10cda3e6cf9c618fc71b6acc6e0d91e1aa011c9279a5dde26c4cd1e555f01c6ee1ea8c6a79738fe7e8fc081298b8f8e1dd19d5a062b1ef2aee6657985c40ab7e1e91efc7812c58a97810577a6e5f900b0582019187b53bfaef1d962a19e139e7a690f6e608f72e87bc7cd806a0de68c3a59ca019dbd91e1246fb6c13686574cad177bb4465d149319517fcdc4858306ab3e6970268bbe8d0ad3cc10938f333fe3d28bdd63b817ac1e2f8fa53283b7026ba00936bb449b17316c991c80900e80f51f9596fc294032650d122d9f6bb117c725a2111bb7fb70e61a6407251da8b4a1d7acabf6ccf5d8e4ae5285a0653fcaef9631c4d5069befdfeb819fe55781c21345a723eab8493fcb579437766c427c0e12296e823ba90eaafd3b94db7efe4f691b9c1008794ac35859c19f442dd3b96a7d660e8c4ed12a57a8165bc45c0236072421ca235539ac057ef5f0edde683aef9d09ba494dd9270262923ac4d32e190b90de0bc198598f11685ba94d23d9c142c3447845b7be5008107c74c6ef8f34d39a90649013180888547fc82e97588f6abd13ea3edf4e9f7c6612218780e0db1656daffd96dd2b64c5777850e854840d4a636c30f3dbda4030412650aa9fbe3db6f4d35191c90dacd13263e4ba15dc94b1453bf2e8fbb90a101912375909b53aa085e138ce41f3abf39838e5b2cec90e88f170eea0c1e2cc29c250622434956384b33e279c5b66812f42ae5ec89e8df0c5c5fd77aa996cc717a412cbcc4875c6324d3d4d1d1d31383465263f739daa3a7d9f8b3862f19bfd1bbace69371f6e619d2d4b7033fd993d9b750e9b0d3afda56fd9c3137ec6660eebfd0919a97a0a53cca88a98fe0b623761c5b1e6cf6146d09a6189259424c24dd4d14ecd7eef31bfa8c8aab941cab49f5dd61ef6ac4e193496d64ab39bd0973a9d034a7210d3612b0bbff40901008ac8910f06137b2868f4a27d396047d88c86211c911eb0c2be61d076591ea70c0aee23510e9374dce6952b71e7c9c5ab5e0045b26bf13ae35e272ca991c9a2e17d5d4a7237a681f97de9ce34545098c94af60dbd73b60256602800056214ea8edb6a32a26d5d512fc39aa4a32e21131ca58580986d2a19806bf6b2f0eaa1473898fd9ad02653b601601fb00b2b9ba61eaa9ae3e92ebd686c278b25052bfe6bc0d91e43dbb95386a7512caa4d53e346e2ed3c4547096be64044e3e896b9b6b1473fe8eb965fd82c86a204d328922e93f988a29d9af3e39286f4b643adb8ba747c363ed57263c69b4a6b9938b66fc9e2f705f310eaa8585cc9819796a3067cbbf37c379c7b284ba39c40a875b40906050436a4b9bcdd524cea185c7bbfb294685bb16d5a1a791c47abdf319624007df1a1a7a8c6d2eed6d4ce538d4cb2b07e7864ee3f74fb20be31af482a4bd673148540ee41f1332545b63b754ec3d4e252758111de9649e5b160a56bbd9a65cdd86b1573a2ac7d2f33d6b862481182909fde90304b2f5746af308bb1940dd600d9a9574232199e7312ff2f5d74aaf304dfe372fbefad1c094e3a531aba4b2a5efc3291f9c355ebefa2ad11d25e2c18f0d51ac35fcd71b5b24ade1360e1a176587e609de32cc70a355590a9feff1037138209ed23c9ba6612d47b8ebe74df26b6a0caa69002652ecde378fce9901edcaa1216bb43cb4f44d7b8f4713cbd83de0b8f9caf07fac2927eb94934c2642fbe2bbf5dfa5f92ebad6aa383cb55cb54963387f1b8a39424009550935123567151d3d92e58960373faaf9b0f7bc0ee39777bacfdba86f1c76e53282e2a20c910b4aea680ce8ce30cc791283f0c36c3315d1399c745c67739c0a17b143cdb66716f2a0c53c0d4faad3b2937686ac1b1387064bc17fe416ff1dfa10e952a2da4e29fe9b8de84f2897e96d49537706852f10e316b8b1bb2ac4496636d8fd7b6f5209667591aad28329598fdd51dc828d47498f4e156c572069a4c3213273d4508635ecc4336a7676e205ebd714538b193c627fd41e54f463138cc616d2ee67c163291a266a7aa5c3b509539b46acd520dd74508e1d09bbdb006b1f6c97a13baea1aefad0a2f1434a58736ef90a2ed251bd42a8a18e59c4591721ede94b3858c6801a84487d84bd15f644d8dd1eceb5e1a611122e828d1e0ae18c68e793c07f55f22511f34816b252ef9d091ce276aa88688c528cd4e8466286cf19c2e80c83467e7e372358a718fb261dc7751286d7abae42240ab9351084b8695fc940501557be920b311f5e9bbb87e3c82b19ca2a90d43feb668db19da5915d2790183390db9f39ce88582fb13e2c64f13c3f0052b1a66ff2a857d18b0f1fa403f6e061274b0fa7e0e65356abeeb902c47c53b1c84a5a87c9743591885ef3a4cd651f02e0e612d2adfe7b085351035757fe426f99508d30323690f0909d6be1897f5c77692a64b0d20bbd6a87d5fefbe5e7fbfd7bf9febd9d7f5ed7bddf6bd9efbbcfe3e5e57eff35fdffeae03c7ed69deab765f6f3def5d05d3eec188ac32dc24812d8841bf2215b5ff3f2a93b36bb0d63a4d31a61b85ef75b1f70bf6f5cacf3a76de3e7299f6f65a4c93824f57bca46c1fb93c67e9f95f9e667f64df5fe9a7d19cba3bb03f13a81523f25d66a653f0188fd9d91834de417b40eea6d93da1a36344b9764e33d9fb0598d39200b3d68d86a15331b1b6a3b6505786f0b3cfbafee8f55d1573c852e46007f512a673348d040f33cfc6104cf78fda7be1bf7705515b2b65c093ac8207b20baed5ff8dfebb1144df4e20a70d977c4922d413eda0a8fd5a70e5f4c1382d986f74fbd9e4ad0c273ab7882a97df5e308d4b37449552fa279dae34bf89732dd54663ed8b4996398c5045a7a5a7ff0f4f11b01956d7f341ed26ada64fdab73603ffa985e8dc48f215b62046ce1b010756a1052a5c86df11b9046a49144b43335e70fad935c256f9fdcbd00d45bf18bd2dac300d4596cc20428d5a6bb2ac1b4aa74b435bd6dc12f686719a45693707d45d7f93cb4c6fcdc2a007a3460ea76eae7aa96822f8a989c9d0fe9870fcf1f134f66f12f15104f81f6b67fe82d66ac78b9f3d5363d9559935732d6394c443998656b3bc4e9ff58140bc0c45fb38968b2394f402a27a384ace15b7a9a3aaad45afc8e37451eb01ee1a74e7f478ed32ee9c6d6f1e7eda94bff5802b8df8f42576c31f71a956dc4549b2cff233945922643a2d94973c1f2dcd5d1901924f22ffe59d405af592d847d3709fa62d9d5fe1c8eda3825323927b48382c652fa8aef06c34a94d16fd1652501b417fe4d10d4fd8ec3d0d66324297d88ef5a95ab2231fbda15465ab7986a4398415ea5a0c72bea8dba4246f836ee0d036f641f9c47b89838c41911a1d6ce58a932f4302023a7c88f292239ef8e55349e1d8471522c4107424c4def17e88f99634f57a47bc4e971f598d89bb56f8c983b5c97f0bed60d6ad6af223480b54a6d009d565d378ac9b9cd75e9b8195bba63706c7bc361258abdc52b319706c36469d1cc97301148020bb224b51a5d3d1ee137fb72f66baa1bd2f7643d8e9775f6adebf714c895ddec0f879859e0d20e4ddabda842680e0105085546e5d6786174e1a0ca03446a8c8cb84e93d4a6a883910d1df2e7bd2db9fd5587c27558387774b7de7008f3aa69850ea7801e93431fccead9b177446ce25ee7f6e4e9c5b3a79203e22caf5707d9f5b9b3d1adac7b3dad8da38b56c7b79b9af0da7b9a9a5e1939fed94fb288773a85a031dc8b1cdb6458730389471834c2b5e09121596209fbaae01461c15dfdae55036146e39b8ce674a1e539fd93077fb4ccc4cf8997bddf2fd8915eb2a15487ab52c2a4a8b147d21c02b723d2c46d3a2f5152cc414be0756a3ecc38c7063bad8daf5de529a28e7c90fcd50270593986b596a9264af7b27ce5b3046ea8daf82a8720f9526833df52fd237578507a8b0f77e8db2b2e1d7271fbd46901ba69cbbb6541574fa6a049165bc41bdf47504d43e26b44eed503669075817bb4bf27a93b9b273ecb3a0f8d941828d70b2907803a382eb3319704868327adb99e52c7202566e14f3d6196892efd1c743a4c9ea60ab8b2dbad0e36f04608c1968581e22e48575e9f728d5c359f8e90f1dc58d4b0304a41d230d9066d87f6c42225b110fa07fc480ae4d442cb3b82b27099bdafdb729d821298e1c8b1d13ab131fb58b4a5704f47fca8b5804110078b63c260bb004922b3040c284876ad78355bb73206de7bb9b5fd9f2706d3276f58dd4b17d78f484793bbe6a68a8bf84cb1ccc07fb46b27e3035563cd1e0a6977033488c03291a0c296313e126eccf886f695c00e0796798e5a29546924ba1c3589f065a97442c7049e2725fc56403d04da03aeb6a9f35330058b183a372c96cf5bc0344a8ae8792d538494fd6f625f0535574074b94b2fbb35d31324d58b7178f363b87fd17b677bc648b8bdef04a0d2810d2ba0d4b52bd45039ad21090a5c55ad28da54c8cdbb79046c288169dd6da7aaa20c8acd2872f88658e8392a14b153d06a47b84a587d7ddd8d88aeeafe7277ef7057a256d2c5b1058ef644310a16314eb92f35d141f135b05047ca17ffa7e59cfabc10f369b8d53bd910cc174486ff51f721b95aac078d25025cbb11c7874c43820ac45665b0d9e157c3337b3ab5d7b4fee0de8e713969151a9e5f2178b28540715bf66a9b01c8ba147412c4b100b878ecf1f0cbda45505545c036ae7f69558305a15710e49995c465bee51f2466d9c0c1315e75b2ac1a4af42b62df7cea0e5d0448872651f71c7254276444b9d85a70c4000d80a686816f01395361466136028c24fb7ecd7de807c4595f8077ac1262219d922774a52066d092c0971096793d541a7ff001501f180ce17debe049d75049d311374c69aac425872ad5334486bc2fab03eb0d7b746607fbff954a6804b702603673d4a7026cbd7cc5f83b4498e3e57035c8245e8006715a6e6f69b27e4fe2a823311a4d9bc2d019720d304e9ace4ad9a1924cbfd9f4b50e62a961f6acc1d59ecd398fb3b6228389b35e18826d4721fa157c4aa020c9cf9e0d26f4af00663131fcb848f527751ca818f9e4a134eb64fc7aec952a69b4763838e3da7084915f6c19f9bcb79ec7968353ac56c0a24467c96ed8b8c1c1115c9a2b35156c4936d88234474ef2832453ad9620aba2050b799686a387d0375221a4976e2c2c9f6697962c383247311ad49bc3296a25696e17e135962bed00a702942922d10eeca272d25a1997243fa69b27367dbd551444be191f2fa5eb824fdf0483182aa484fd09414f487be7c9994245bd2133bc8364506d9a6b420db9413d4a88a64965f2e494f281129699425fd54966e0df81b4f5a220e06234946fa21296994ed4c1d9be70097a49f9456f7654a3792483f29ad2025c9cc3aad22c9486693355b924c48b65f2a82247395e8678506b824fd90be07b99aac3c525e29374db2803ee547931d4e4e93419aeccc149d14214db278a3c807144548443da288d6281ddd9824dbaf239020341fbbae45b46c3dd20f49494a2b0596a2d32a16598acd2bdba7654a8f6c536e52705282649be2caa0eea4d56419ce7e9aac3ac82736a5c8cc56c74e2e45b16c1d10fe369640f4f290c0fe9e22055c927e5ca4319b486dfc37d24f4acb553efa6c622ddbff567a8045a6e8677406c1fe25a665fba29b217c6471807fe843630962b6076ca3e846f4f294e55eb974d916c291c2c65ed3cd39a3d51cf0b841498f73ef43f8e8b576c4d8f76e5c4563bc97a73c214c78b146594f26e3bd7773456fc73b8b344973914659efaff8c99aa45ecc13e2c96a4ddeb71e8fa7ac8a0412535e8d62c9310e91e21abd96a7ecef8859c9a49f4659d1f53c244d96a29f6cdfb278e3aab3e7f36383717e66d9be47738fbba21f9192262b0e6c0c937e3c90c7034222e3ddbc5c45773ae6aa2ec6bed702f1b88ac614f164ae6c1d3403d13c1e2fc733b39dc1e31d814b54bf03de5376b42d5c7ab4472429f9683b4a7848aac9029c9d256c50493ff547ae623fe9e7e33c9e6c9f85e3ee7b3c4dda6cdf4b02cbf6bd59932bd9fed76a9247ab40a67def489374c81a92b829971e8f4fb6559664482ebd9f6cc1569229e4f2b3c9b6f46eb56f51d9523764fb7e7a113792ad29972ecb769be1bfbd7d130e0e52d827eaa851fc6413596cd26f9fe8baeadc9b747d79aaedd77fbf81d9bef4167c00bf40b4494247107549e6fe3aceab13b9b7e2cd0ee2386eb48eb3e54ea43a947ee39913bd3348e4f10219a5b7200813b4323702f9462ee4ef6fbd9bece2f287674d9272dbb75bcd1d123c26978257eefeeb0e59a40c7a1fd888fadf1652fabd0f0cd24ab2fc3968297de9ee1d764deffbc19e0ca50f5a4b2910fe83bb0f04cabeef07dfd0c2706932437135aae3114a824b14178f119e9909687d605a4fad255aa9f6fde02dd31fccbd8f30d3924fe90c5495824353dd772b2f959516e44e549222779f0284aa506e3cd57d27046c84dc8d4bc8dd5b20f8fefd141c579568b12b76350442bb2fd14a3d1d8ca7ecaa0f4d755fbf9406aa42715d9d1bcbf595ab285714d714b9fb3094a9f63de6aafb967bfbd7bc3a20d7279accd8408b29196954f78da50878424c6011886be6efad58e26954579a75ef2110eca9eebf13e0b2c493bb2ff1948ca0dcc0b2c5371827db4779d19710a547b6a49a11402f645a894653dd7bd93e48a32f28d93ee57259f2010355957c4a64c8dd877c7089e2024bb26c8fc0a5c90c095c5ef326775fa34b45a0b8401928cb9dc9ec049682d3467269324bc13199a5e05097ced20097204feede1e814b20dc4c80fdfa384d8672b7e5ee41234d82dfbd090f7da1b97b50bc4b30787edf81461dde0bd165d077dfe53aa6c01ad5a5e45097ee41a20e21704e01425dba4f3982cae8c6149c149c520d4a3eddb6e5edaf096a816cae79cd6b5ef39ad7bce616c2e8cbf7dddbeead925699763ad5fd91233d3d489038ace4e3b0928fc3a89075d40c2bf95097ee69e88d2b52aea349d6a8faedd3495aa592a453dd1f39d2d383044992244a5a89db7cee46159f4675ef035ca6e0e4ce27774f4fdd98817fad28e97087b1491892c800ac01e40c41a102187c359230432868f0026fa4028bc16420ce810b40ad0f4644170498470422b820d44043607081c0d3f1a8c0fac0e4ae70b3b92e1451ccc083b82c144b5c5dc307b4adc6821754ee07487e9004d766d0049f4ed16c83fc748ae612ab98e12c0315464eb4a10cb124704ba643ca60446b01bf14350998c51674804b435680454ac0208a1f18c12a321d12050daa0f6c92e990286caa1af096e990285a487e9024f14411487cb0d578c0905905b5a046ed27b6fbcebdffe66a727b95f7227c5b41ad345e2c8808ffe1b317c482243e77369b3de0010f98fd8c826690a4499f8feb402ee8406bc034360cc23f886a50142bc83c4a5d7eb0db7750c75deb6dafee51121f3d952d3e79fb64f006fc81b46e45f6405fa2c8c01b4b32ea62ed8f208dba6c96b3a092acb3f58a2bf2b7b232040c76216f6f3fab035c52c0ea0073ff6d1c772dc76de16a45bea37dceae58e46b52176bbf2cc9b2bd5b4b8b4f13df677d581fd687f5617d04c1220a20ed0d39f5ad0e7089f2d2517b447951976dc55380f2727b6fec0ab9310f65aee9dd5cf8e8a92cc9f256d6b2eb55c2d44bf0f6df7745d073216b45bedf7d7995c8de7f9d29df11a45117ef6bb4d7035c82b4ecfd8a47a9cb35c1da356b7807d2f28624d7bfb55c5f06a4892b5a326b45b67fcdf19ad485452eeb6b655a91edcb0a16d9b6645b92f91374a3dde7dd0ff6efaefde393e1c49016ae37c09f9b70c42ba350319e68e5fa331e508156d9160f3db46e07d5384f14914bcaf3d19e80e5921e21ebd717b97efd171586e6fae0696442d1c815956b1af297ab2fa9b5bb04c14679adddd67677f758d6f7a779031bd5a65c9f8526f7584e20d771730114d8e4f5b232998502532870d938b9521f1f99acbeeacb4281eb539aee725de833a19986ab8b830f543723f0d637b8c4dd1e609185609137b1e6cfc7fac0e585d9223008465dfaad4fa3be15576105ec5faa8436af791bbb1880ccadf575bfc3ccdd5802417966e044b819a87fb7bf4fef485796c0ddd725b9e41e74c7b21bb931880cf8d3cc957704e28d264862fb249a85266fd95a6b3f70817247de009785f0bcfd8e1c445db264c992f71d800fa280a0c90e7387098e46a393af2801b4d54abc3fea69d25ed2c6fb8f683658228bb52fc0654b2d9f789c5e2797d8126dc4160b0bcb7f2b600b9246f9bdac66fdea6b74b37ef5df4a6c49c2e259843233ff7dcd12597f45d6aff4009b9ee78bfc39a2dd3b8e662357d58c66a31912b07d16df82e7d53c8dba97f539c8126f4b92265763ad05499333333a2cac8f65046d1270c9e111c7d0a7618e9ac7310e81e36bfec321723e9ec221d69bb0be5a78e5cbda945651a81c41e66ad4c5df5b030ec19adc919dc8147a644aa4c891bc43a644a440856c864aaf500e9d430eff9980ab6e16abbbbbef4a0c8532367e86f45f080cddc0407d8f659761a01e468b2d11476c89afd24da3fcc55693d4a6c995f8127b34b91a4b2ff1a6d4a3f422d152a557ea535fe20cd200b3eecfd8f8fb612863e3bfb09f753243416c88211dd1d6e2ab626b34f394db781acad07c8ddedc806966fd88d66439f3d6c68b23da6846053cf33df39925967704e29a79e66dfc6876c44f46c8fe5475321b87a714071a968cc02d3515b3c950f627d1483d2a34fa42ef12bc7afba115e01827d31433c9aa49c889a7c92eddcc3677f627d51ae57f32754eb193ecb4d3246b24d14ea41e12cd55355f33e2c731d24e8d2bc41648037c32576209849b2db5161f1cf6db1043346268460cc95c0c60800f06687de0d0cd7f23d043820180aaa9198730418cd83ab148c0388432b146b9902b73154b8e9ac7f138c621581c80e3737c8eb1042c4058fa1bf0391ec7b3f4c8808e69c098632c95703ce58fe3694ccd78659eaabf23a6fe37065c9e4c12cd0135ff8901972d35b125ba9aec8ff12f5c7cd965173cb28c532c64808dc1319e3c21b8bfa5c5a7c9fb317e0689d6297f1d6474f80004e03fd388b6c30e4f8d6419a758a37218be9f4ceae2ff49015b92ac512229369ad1173a9a511799f76f713569bff4e281f5659779f8d2cb5524678dbeeb305651197df9b987a73dfa12957b187d3923f760f2e4cb882793b662052915fad1a47d71cbd6072e4f660b9e95ac82082e4fcdd263ce5f92682b5e0adda8541ff35f09861018b24679f70823465d4e268c568fa359a38e804b120d86cc55385a6a2d354f79cd9730ceec0f2306a315058af22f9dfcb351fe283f0385fa5751699529e629ff91d8ca26198e59be5f23d2f265fdfd0f055a1f3808a6e12ed35b6aeeb08f82ff9fed2dc83137c57a4e243c4966d995d0b2d7b2ff4a29b67088b4533522edee2098864ea34aaf263dfbf729d6a86e2fbd1ad5acf1143be934ca4baffed2abc9eed1e4bd69d2e234d92558c92ce934391313d2e44e93336793acf72f1529196992a547f125f66089220fd1a651fe2b517489622b64a5e4163c47e0fe9abfcf03f892440b9203a832055c866ef29fcc15ef12ae6ceef1642e01c74c425470d47ca96b7ce9e577b46389718864a895ec5fbf140e60e8e6030018ba69f2d67c4ccc975eaeaa19c5d62b6491b21d61b41ae5bf52e35b0cf980baf8d78821d353fe9fe859882bc6162717a6173050291cec76bd2ba61d68847222328564c6108cbaf89b0778aed65f4d048cd56cd4386e071075d498d04df6cf62d9d5104b6c0051c75600b1740288e53600b1f41b18b1749c17b1541180588a78b23f0db12ce9647f95a86323c512f720966d840751c70ea28e1a005147d5412cc1192db5ec2f432c410088e5e995fd5dc4f2730cb1047310cb0d07b1f494a8634389650743a465ff1762a9e2422cc193587e0bb1448d628945b134e5b24596fd1f870445f66721b6b2ff0a51c7661a6d2ba28e2d97c4f25485ecaf2296a79eecafc2142b51a4d22bfb8fc49359c23842e93822b134f98d8958e2905876e1c9cceebab45cdf134bce26df9f5c5fe58505c1c9a9b026cdadb70fc1424176b27fc86c12ccfea159a8a7552afc433a39d943b0eca1337b88277be848f6502cfbc6f934595e59fe69b2bc676e35595e9e5c39244dd61e809c92ec5c2d3b0e3c0be8da049ecfdd9dbe7757822b43d8c2d5ffd61f0756aaa2a2d3ca103ed30efbe64ee8401ca8e31ad79b8e0893d00a210fddb7cd41771eb83ec8fbae498f65fadda6e281c4f264ede6a3ffb5a5bbbb6741a1141d68e33c774ac4b659d0ddbda9cbf7658f09eeee9da7bc537d2ffacb538d411a52ea3581ebbb0c7dba790eded6ea1e3641a96351a8250d15e41141cb57f114ddb6cdbbe6b6ed6ea11a70fdcddace73607ddcba8ee3d880b76deb8d526ce2fa6e6fddb66bb936e0fa9d12b8be6f1b14b8ff3c95db9d453630046db6fbef2cc23d6df2decd864c3a13cc2181abe85e8ada4870b74d74b26dd7c753ed9f4f6a787d5c757f9cd7e7e45aae937b9ddccdbd39b93e28dbb6d5eb533e0a2cd7109681641d356fa39fd4a5bf6b01eea79f093e4971244e4e14928acdfa597f80372490209d293d389148a19ca80a560b360b4cbcf4e53a57fe3c100c439e0ae8c39c0906b9dd54dead12b8a43ca1b0a663be9107d76fd4a5b6139d745b93376f4d51d68ee08ebd75ee965e7ffbfe9edf553689e3f4cc701adc78c7929edb105236b7404e504825b74ba4ac80f4de3b6e3842c0f57f68d27e10ac025a254a49602f08aeff95bccfbb38a036390315694ccf8eb4aa29fd95ea6b88a1210a4bd0b0441034e4a01241030bcc8049681882c327da081cce5a07ab60c21a3056220a67d04119cec0a31201632569c05d921d1c663ac4070a25f85ca1abe0538598cfe92333030f917a83a98a75958f3876ec5662c62ec0f68672e76a95f485d117fbed3fbb393cf7c729bb3ccc6b43c3315d05da803c62600f19f8e304732e0f18e4ce2e0d6c5df0a57bfa4d6140df55aeaba10f9eb9ff40a20e21ba0cf2128895ba5813701dd73dadba2ffa625d3cfa69d3361164f67fb7929aba582f41f6af3197e62a6b95d4aecf4f8f56fee10299ab94eca3f551c3e65b5737c325dff6dfb62d01c35edb65b9d7fe853569f3f637c88f26c3bcfd9d35d9d3aaca82d6f6578747defeb573e66dbb47f2766379fb6befabc9f2e2e42d27a749ffad74d7edd164e541deea0e72797fe46deb9c05db972b10d7a402be42c89b2d02d321b51f90f90313b3d6fec0d0f3c01004c1cffac0f5439637964e2908524a69e881381ee8c6337d10a7c9f075845e880eccc9b50461de08c61a55411dea52ff038d405dea8344a032c211344d0f74e37df55e1dadebb9affbbaaffbba2f1b82a699ab077ef5bebe3dd2aa0f890b74435dead3f01b57a4ec8d5fad51f5bd57f5deab5d4fa7ea1f39d2d383044992da7d07bab92fd08d89190241a7ff00051804df86b724805871a32e2d9a3481e94e9273a32ff4855624b24aa3c62a05dfbacd3977dfdcddddbabbbbbbbbbb8fdc376782524a55542813b83e754a29050d91413008c3300cc1f00bbd1014762117deb00b43ee2b08819608c3100cbfd00b416117865c18de300c4370eb54d085a0af0d31600127854f06432ef11311840af20a4050e5e37f105f5d2f2812c8b85620b62d7fdd0bdabd364829ddc23660ff9208ec4f6d57ea34632a7cb576777777a5dd1d3a5173a468a20c5230e10652e8b810beb0896f77f7ce53940261c9d131fd2588a19e721ed85ec2ed4aa643d0f0f3bdf3d153a9a295fbb922604c6b92f39afcb8d07ddbb8ef3001b427df3103dbd3fc8544ca061b3cd1aa216b2587a70fb0cb1ad5df752f128d43d4321062065cc681801f127b0aece073ff819cd875804b026ec21141c825f691e9c00df00bd11d68720b4f578946da298fc143e9e7b0faff0551f3f79d5837d1b3041a55c1ee4601815044d16fa07b326fa74399cecb517f5c25f291cbd0e43f0eb43eb09727fc252a8480c897e012d3300dd7b00f4e52df93859e2c3cc3b3eb4167cce0f1bee166c0dd973372d3fc95211572ffb6dde8a820d00f8deaf0bb4166a03c2814510481d087234b8ef04ffe641ca2da4049116431e10bc5c7f454ff631a7de9be1ff734d96228ab4c01979866e63e79a031ce70032e67884494ef449083e57e25335c25fa7e1aae3af9de6ec2b3513d634693ddf7f3d01cac137dd7758f72d5c977e109eb80a7fa59ba17fd8e98afe6085f241287f8d4e0238b09c71529e31b952de0eddd93a93881b7df4ec4cdb5bd1ad5a2e85dbc9826eac00b97942702127015fe8e40a39ad2aa9b01778ea961bd493c14e03014517c3cc58d504e4628274972608deaf7465f763e4239a939e7a6b71f8dea9a50143d0d73845e34b2e4107df8e138048c149690c5887e474c8dfeb61360cfe1199e2a56c09d4bea139e2f141f914863be30871763f2346440c7c4b80cf076e32a943ff9b2137d8955b2277315ca884fba4ee4c9dc4303ed8a441a63b16822524f85c49617837d3c8569b973c780228de17e80fb558076789d03cc840bb8331d32458f5c9f863e13eb8309262c12707dd0c7126badb5d6871d82b5d65a6bc160adb5f60bd60b16092a157dba23d3ff64ec5fd1d5c5dcb7628e6e9526c8e507b66c9f85a6e264bbf9589a2007b6760cc2246f2390bb233bfd1a5dc3ab585bd9534efbe8a9c48127fb5b1e411a85800fdd88a11bda1e8285417c4cf82cc942c87ccd34f44125cbf4b0343e5811881b5a015621ba449b05bcffb7801bab1bab5f7d8dbe1c8d0f36686c8c66366c3c4d6da959cbb2ac991b2b7bc3aeacb52bd60c6bb55acdd8bbbaabbb2abd562c96a5416366060135647da36f8c40722c600482e3da6b81d4acc496a74a8c5f6804504d4fc6c6ca3e4b86c5b22bb1bca30cad34777557377c98b93edc997bc7fcba7163e6c6cc8df79fb97f432ce5b0665833acef7bd046ad5c4533aec64b656cd81b27e0a027e790a9137ec06c5a674bcd14331931c54c424c32d3cc4433d54c484c495a2592d11d32ec647fd3399a8d9068317a16de75124d0109f0e1efbb02be34c94c311fbe73697d7805f4686659ac191b2b1bab124e29a751a51fa59b46f57891582c56e94709a78453cae9dcb271892203dedfa4a231a5579333bf001b3fbc874ee07e967f65014ea1d93e2b043776b8b869ee46ac515e1242b94a3d441bc51a59fa693ccd464a461ae5cd8558c016080c1441f334332b9ad5cc8a0123cbea696ebb001bd6c6026cd8f8615cc0aa67687d29200162c8d46914cc97249a077a1fa987440bdb436506b28a79aa7953ee4799ba469f4c1de06b4f3c469a5ccd8e90ab53ad4999279334c96247d369da619962d6078f2754984e3f8bbc21478489419abc6fafd843bca618350931c1686d30cc15205f9a62231e4fbdee1704e3f8ee4bb175d6e0186b1e5033def3e30181ae92fbd3e2e94008a88f682382cbc4155ba2ab347355cd57cff39e86324c70361c8f46d5175b2773883bf3547d1c34acad1ab1ba5ab4e75a12eddeafdac0d61fa51768257413c27155a8bb1fbc2eea52ed8760c8653f017d09ce27d355387ac42a4db2c8a557bfed53ec64b2ae2be6a9136c625fb0d203d628ba585fa3c55b5ad6d8e283b39b98e452294653fee1535a80a705c8c1723d70b923d37c8f682c19968c383ad2a89e46f9e848a34634eba323a39ed18cfb817fe659b4768866e488389936c6b29b19cb6ec51a4b2f959390d049c83dc91ae5279d46f98e0a1770399a7d161ccd5c25b66cab094caa356a0c59a04ca2d1ee908ad928151a75a9aa0ff960337fa3151ee093e9aa1cddc9cc81a38600042080d9a81fe0526c750d781cdfa86f8028b666aeca31f6f8915072caca117847a6a5170bad4915d9bf54042e5b6add2733d768b34614d546481aa5e2331aa99068a41e124dc514d14c94965a66fd4928d3c2125b6a8d6ad1c65bf1bb2734ff7d2b3e4abf1653909650c664feb7842c5336c12a57f10d3efd27cabc18caacfefb58f7cab0ac18b24c39242386764267a8c8c9850bd0fac02dfe7b015a23708b17200e374d9272f7bd70284c01b69fbf0ad32770538c865fa341b7e54828d3124a82c507439629b7d806b80ac7e7f80f044f4a9c96a02ff76b3ae6cf3190685e08fdc9b448e0781a3a20c737603c9938c4534c0cb81ccd6e806b5a3c192e5b642db296130ae338fe07825c0d6afa5bfc50803dfb9f62aeaa799b24ece3103d6d558e17e51849341a02de8a40723c0e31051dc8f1249aab7288a693f92b261c16d994433ef8bf24d16a53df429def585a20236034c11ae59f71883406015fa3b950c61611b25ac41b50171b50177f0488a21138ae229970703a5b448bbaf49b5ed4c557a4ccd2a2c58b3862cb080e076eb35b88c7ab51eee285cb935913831cfec9a42fddf216095c6dcd41d4252c16f98e4070bc78435d48a7e3105b968b01aef9174f3a6bd4a8f1f6ccfe39c4108fa758ac0a1f6efc8dff56e2fdcf640a657ca0f962baec31ffb5e71bdfa39dd999d59f8ad899191ba2912167666547b3d56c6557e2d768122d94a1f99578bfc5fb5f0b975e27d3c6cc9f8a34598a2d1be3aab30d6b24934e3357d938cf4e4d0cd9ff443bf5b4ca2694ed886105d9ff84a45520ce49489374a7b693fd4f321b3364597a651b7f9147931589eca6980704cc7a97a1f91b62b91a817033d3f840d32b40fb029650c606eb61b45ad4cf520ad264a34aaf528f5a5e314b3157d9581305d9bfa4b23121028524b26a7b957e3449899cb3acea9836c59a2cff943549d623b2bf69a7c99a936db6ac265a24eb470fa3c5626386c55acdacdeaede920234657f7b94fdcd5a8baa4d48c1996bd763e74ec0f5dd9d9660aed66e01b3ac6ca65f02516d721d3b881db97a97cb1aa3f268d466c7ea6ad418caeab379d8369469f7daaf1e74e381c6035a05f3f425d0247efaa2afb3c35805a5f2d7009a0c39ac7db397eb40de078621132cda64f94319915254a89456584c2b58b4bcd8fde7af05d822a47191c31e8db2df093c810eeb3a8c371d5cd65815d2df0b1046ac334fd9c762a555218db26f5265a60e2e3f57ccd5a43fccdb987fe667de7bef8bbf17879bfa7befbda8bf97c6fdbff7dedbf2f7aaeef8f7de7bc5bf97bca6bff7decbf2f7f67059fcbdf7de157f2f0f57e5efbdf7aaf87b77b82b7fefbdb7f4f706e08efede7b2fcadfabc34df97befbda4bf77c63df97befbddedf2be37ed5b9f702e0de7bef75b977fb2bfa8bffde7b6f8c7befbdf7fbdb7fbbbf39dc7befe9ded0df7beffd5128735bb880414345f6c0c30e01d061860c00b8c4c8e1c5e9c50907522a0a148c172e4e2d50bee5fbafe53b1943d1fbbcf75abc4f6402593cef3c4fcce25b01db31b18c3013151539e387564a2a2ac2511428f73c4f308523c1764623ec3bb99e2be7ba5c5e8d02db1ae76db26c65678f378a4018e3ed7e5d735b5fdc71a17bb9adc31b0aed844e57bdbcfd1bfee87103634dfae25b4eabbc560b52d31192c3df709a3c7df81b0e28cc6693fa72d3410e7ffb415f501ffed66ad5e6726d2ed7f6726d374a9a84210585d972c82f7d8a1ffad272a4551b0cd60343024b326b92c51528ccb6d3c397ee8411fa22c65ab59da7ec3cc3779d26ffc3772528ccc643f86ed217960fb79affa8794e901cbebf9a2482c2589b1dbef418e4f09d077d59e1d32aeb72fdb8bce5721792264d62a0303627005f36196af4454591565918cc08ec08ace76c32c50914c6eee8f06513d9a12f2558abec799a672cfcce6952e5c3ef1d5018db33e3cbee410ebf71e80bca87df36adb21d8f1cd6ba47ffc8e177ab49ce0d14e6dac8f8b22e51425f48b4565d97abe6f271fd1c697294050a737300f065ddc28cbe5c21adba30d80eac08cc480efdc3af44a03077a7cab02e5f5623e4f0ab0e7d39f9f0eb4dabee79569c1366e6f06b8c2f2b0d72f8550614e6f608d1aadb29b1c9397c49cd90c3d70085e16cea8bbed40fbf034d7a1f3e10f4a573d55cb4f07f6815e7f294c5e14b1a851c3e0d85e172aa0cfb746700250f39fc18ade260379a047df833f465fbf0514d86fec5973072f83d7ee9397c171486db39d197fef0f494fd30fc4a61b89e2ac37ef8e1bf08654259de5c9bab85cb852ba7c27c41c89c6c3fd70683c1762acc07eb61e7749557ab9db5b37666fb5b4f85f96c78d87ab2fdade62aef3cb7dab9d5cead665361bc9e1d6c5caef2603017cc0573e554186f2700393057792e170c06dba9305e8e0e3ba7ab40b5da593b6b6785f16c66d89e6cdfd65c053a4f5b3b6dedb4359b0a03ea9161e37215080673c15c30574e8501ed0020275b90cb0583ed5418508ecbcee9aaae563b6b67edccf66f4f8501d9c4b83dd9feadb9aa3bcf5b3b6fedbc359b0ad3f5e460e372550783b9602e982ba7c2743b38e4e4ced5b960f6b99d0ad3e5d4173bd93e77ba8ae36a27777267b67f123f9d9e0ad3d95419db38969d4bae27bfd7de6b5e4b8d9b4db6ef2813183516e4c5587ee3a9c5388ee1f805c9f65db48458c03e58b67f12c3af7d362d3516b55a0b1670e5ec613957ceb327db1f577c260fb6c3e2c1563c9807dbc9f645155e8ae7f2725478ae14cf157a2e2f27dbff1248a5e6d9a8a8a5d46a9e4db6df82d271670fca199edcd993edb3207123106c0705040b41306e84ed64fb2bee75102807e402b940ae132bea6a209b8fa756eb6a209b6c9f0509de72e9b3eeece1cef3ecc9f63f8fa5b365a893ad4ea3603b1c1e613bd9fe075ad9dc43b173e7cae95c9dab7371634ece5f087faf52873fb85a675361bcb3cab0afa282f1d8d9843fb0f8e9786785f994a032ec5b1e95cf1c0275b1de99edab84abce26e3675217fb960c787355f8f26ab933287c819dfd4893225609e0ed873f429c30a74914e82e4fd9778739cce5fa3ef3d3f9622efb45f04eb6aecf240306bd9a576b927bfb9e7dcfa7c63c466bccfbf0d505f02e053aec333d651fe357d761aca2f26fff33119da2fa432247514274b965f47fa6ab3e9aeab71f13289fc9fadc85af24e0eefbc35793a100debe8a21e01288001ef4a0afa38e2decd1240d6fb2cd01b4377c6dede12b87cdbbe66043e0c842b365f0b70c8e6509b2ff27f68bd84a3ae58d2051006215d2a99d7ad6228db235c479d9ae54a9252a97e14b8590cffc745ae5304f9960f82a3f93b3097b843f64d9de317c35ca7ef8caf6c126433e3c747535f175cdb5733d9d5095ba54ffb26bd418a256f8eed9b55a25e68a1bb494c054ba25300b4db6ef4160f4c524fbbb8e3bec089ccc51c164b90ef3203cd95d647f9f794fabaa0f99eb9cd94bdff123d93d96fd9b2c4d3c68b2de206bc06e3aac519d4b95cb73a3f81004fdbe33c0472393098ff266b2da4c7eb051810a3e1399cd860197a3bc12c3dbd7703576b40385ecaf46161a50debeeeb07543f2ad6a9bacca1d99457774ad3faad7f6cd86ea777727c13ab6dc9f8732bed56a1d046dd4a50347dfe16ebb6067379069c4812a5fc712e7b7df17caf88d1dd96eff75e0d6e4d6a872087aea6ea77eaba8f4143db99bc6d26c174e1f48c0254bb33ebab081efa362dd1a75629d1a6581af760ca7342eb2d3a01de281ba7864c0ac01842b7ae4d60ed5af230dea429f07ba6da15a9d88d582458235c21a61b3608d50827542092770adb5563b040a862cd9c97448a64396b4f2679dc066d76d4a3625363cdcecb1f9642ce0b2ce9a74b3c3699410ecfdf0705c751fe471582d92cb3a5be574d548ab3c93c7335de53aa3ebb89071f3649b115f87553cb4b1a37778ad2d48412b052defdd7bf7e8e9b3c1f59d73cebb5fff9e00dbffe69ee3388ef3becf3fafdd5d898a3183be78cffdc7fde779df73fede7f9ff7795e0cffce3baa42097cdfd21367857cdf64b0c9dff7f7fd9fc9fdcf06d3465dd4ed46555129ab0802b67f4f804b54be8f7255d775f7f344b1b475a422ed44a74681bc18333e1df27d1b26c0de91c605aac990a67ef51b290d3f50f337c668541dc51b8dea716b154a60fbdb3be5e9023d3f6ad2054c899cb05c664ae4c4c994c8f93a6d3225422449b699122112450e33254284962bee4a959df5a8046cb5574d9032542410000000009315002028140e8a05a3c1344ce24cb50f14800c7a90526a4c1d4b635112e4280c838c61c400420000001043648686860804e36d38d4ee3a311f904cde6696f50047791bcf5118879e66543764924faf2fe7ced561339fae6b9891e0915d7377844b6fb6e3e5f713ccef72558aafdf6bc64609e486c0fd887d4598c416d5161d801ba2889efcdb833d15fdd9c4392a50e4b3adb48706d884c260a4b39ee219e6455abe16855df8b9510643427188000a24df223a37df37d53228727f0d2909b62a6ee2042baecda3c23ffc86a44292efbc6fe1d10d85fbb4a2bc34a5338908ca0334a91830829f58224489338c30871a91b3628100560574091f176146931b4f22b8a1d6822326ddd1fd7de9a16bfba676a22a6647c42c08ee63d2ae94984372a6e991195a2d062d26e971441a53018d454b7a9b28f15b3f0111d5f6ed9d86dacfa3d40bea0985ea8792603be26e15b9a406944b6d81e04ca7c722e97095c6c776774db36375bd42d331d6519bd7b35f45959b441ed3fd750d8fedfe7a8dc7ed7c65d1c8d4b89cbac88c0630c0cced197b992b5d53c495d88b764c902cfc346cba7d38380e7c265c8a4ac45deb0c36cde8a971624a050c76e127bff32c72b019f1d07a8d34ec0b46a0a96deb3fe9b9637578951d2c4ba53ff3f50700af78b647d0d56d140395f2c037c4dace133d3e5d983338068e0c791e6ee217fd3c0b3dc195060b00bf9fbb97811ffe90e45c67a70e2c6d6aea6779ff9ab908bfb0a724e73c336e606953533fcbfbd7cc45f8853d2539e79971034b9b9afa59debf662ec22fec29c939cf8c1b58dad4d4cff2fe3573117e614f49ce7966dcc0d2a6a67e96f7af998bf0dda272e75c7b92448e3a8bca6d1c1f7ef51ce9acdebfffac787ecf70c4b0f79174069f9f64ad0c042fb9d3bc2c2ad7b3e8e469ea7655b1037ea2b229b9a431aa67da7ce95a9b7d6bec969b958e15bbd5dda2638d6db9b3d25bb159dd5af4d6d817fa7b1b950dbe163f8264e912af1561565bf950d62dc0477a035ae890e102e3946b0b45276e8e0a883ce588fda088fef0b46c1aef70a5f77f96da55d9b2f2c77f71745ebf3d3f8c6d0dccef0fcd1e9d579aaf92656c6f2f06f3d79fb28911d4ad21b590a1a453b036da539e3ec20c0c054531c5516b24241b19f5a13d44552b2a24ff9e1e4c0be52a88c9b0ae4de41acd5ed3a7ac903f2bd2e61b68873fb6f9afb6e8110ca691e776cc0cac3f6509388ac485390244af06d478cd7192349a81fddd09af6c4f30589eee494ec471847e6f811bf39e4b709b0c54c86f69e0e0a2c9d7aefb1d381940dc1707faa37b109f9c199f3ac4565e70c17347b792c262eaa1b040801d4fac547e0ccb1a0231f62292546650cd7227eaaea205940cfffdff66ebadb92afc7347374565a30127bd3f76f4d98bd65addf7aa7e2df78a2b0a0e3e0dad97e984fa26e243181dd91f138b89612e87d369403701cdb83b505ba82e81cb22ff98d81df09ca81263e8a690eebb6f82760557f8003b2158aadc563282075df1d288c10fcb32dde4747bc9b115b0dfb6702c12530546981cba01f22c1080e2a65979b2ca18d0c54e554fdab8962c9ebd5b8d4b290b14ef5af2e16ddbc5ac87f4855bc661ac7c5140ee8bfd885bcb3cbe5c5e4e62dcdf0b6f91deddaa79cc006f207d3fcc63d89a0ab7537776eb4b5fea80febddf15971eacc005426d13e45f4cd219d15c4342d8b68256c5b657b35594a3d9082ab6cc3e844330277dffc53a7cd85bf618c3e3afeb8cf13a29c8ef85b5ca174fb1c8d7b260cfac3d1d83cbd9c639d09b2f72d86b396ba82111dda8c299189fa34b031b3fd2ab0effce664c516824e377251b3a5f687af3e1691f80ddf2dcce4c9c25c6ec7e3099de85929d31658d23efde31887e2c4f18fee140a7a70c7d60abfa0f68050f33fd7d08e78eff6d004c53ad2bbc19a05c596518ef0aba7fdbf71a5b55e1ebc8bd8bf883ed85d18b646419a1761f1988d0e2e57fe4e0f55be9dd469084f9eccf3bb358001923db059a0043f56f45a49a71134b689494ca2716f0247535a0b42d1444385871361fa0f2dd1f1b1f5038c903428322c2a9176a75901c9f00a19b0c24234dcedd2869368c2481c9a2e1cf98f302ed43287560430db37f8f703366aa4c47302b6631b645dd3f50a8456d0cd2fa28d63187ca61c1d0e1e3d142f0a1624af83b9c64a4c9b91b25cd06934d34593cbc11530a0a44a9431aad297dcf5663810dec2706cd3b1f9f38ce504b21d5bf0d5cb3d5c0ae12b23b07673dd8be1679ea6f764584e845980a7338d0e76651c05552f3817b4cc2a1ea6348086ea29c4e0062e178209ccfbc2906b9eb09a11dd893f56f85941465f130bf1e3ff176a6c07dfd0690fc67668fab670e04ebbd47659f5a2a18037946352123b8891466365e6e39b9cc9d26d601a8b02d2fd3fbde264040b846a65dafc8148c21b32fbf3b8770910cf03dde583578fa5875132f5384b5d9d496d0249622c996ea4b8790f25a192408f4c1ca901405356f1729d380583d2f6a6e907e6b080cf9c378bde9baa76f1d1aeeee0f2782c18d8ce0692ac7909f4bcffbdb9a3db67d4c90f672820975771068d6fe2374a235d633a8f7c50f7bf63e023825a27023c4f16eccce61b94728a419c8832471b8d1d8bb35ed4823c6fde036d3638da2f0a770b6a3f67fe0b174006b5b276cfc3841cf18dd2a0a0efe3ffbb78529a5f2b53bf9b39cd7d73cc470d1fda34fec98708be53af9fbc5dc34974ef28cec44163be502ee326b8257ca268ae7a633c6b033516412be482c434f15e431ad81faaa2ee9d8667cefd449dc4d1238d65496a1933e41c5d8c4a0d4171824f44116173d5aa334ec0b5e25bbf8f4c8256b0404481aac6f6c15c14bf3a4a21a39c515b89fedc42f1e60753b0cf9025f5a0723b72fc7f145433de4c378f27a7a449e9bb73cbd32d0cd5cd773491c78acaab343c74420de1d1dd5a3477f6931a438a071234ec5dd7e690c5102f83c57a85c979d137f5cfcda30cba3ad966060506d711db51d223c2e4e19704914c6f337c3267ed16b8c213acc44173c8ad7e4cbd737ec60e93135904f68fe3e78f8bfd39cdf8c57bb405dad28eaac7b29b73ac4893be741b74fd3ed4d279acddcf3d2bf2f2e51ac0b6fe96c64208cd4918095540770d3aa2c85e31c811028ed0bdb316827af9f837e588bc45e18123d8a19501b994b2604e28998515d94c0a030852c1f02a0580ba13c485410bfbbf076230eb777ff7feec51118a9b544a8f07cca61d8d3618edd903001a25d41860ecd9eff7956f92ea0f362cd081164046b4d7f469ed1d805cddbcd0ea47ccff033ed95bb6bf11dc6f985bc08f287a890cfecf1241c3f0a5388938568468d85131af0c1a13309f6b5a39672a2fe5c5881fddd1126ddb313dc66ef46b18d23cc615cf15ba9d72861e979c214fba7ca910a133e4f4058d1b6cb21545bcbeb63dbd4ee0ab00b9cb067b7779f4d652a42511a0ed65fd853fa4f6036d680294101a1185a2c19fc38f14edf502bed612c75910d5e0a7c82badbac71294b36e873df3321e191aa1c19e035cf16540d72849fdec7b98be6da458a01a95f6fb97f9fc9951e1f30123a49f205a663841947bd5d2a98eb4bc751f15258e1efbc8f937f80f41f84a9a89ce3437b70b1004543ffc0af8bf60b0b42e0e9c2e28d5182e6c5b161d00592982d02bc7ebd127708399589fb4eb40ea3608109942c8c01f3bb4b04ca6d61f2a9e645786bd60adb3958b66827b50c03818e0cf6ac9374df86be4cb3122e64cd7186df0b4172ae8709c240bc79b176dad1d6fd9b17cd9fe9315a2a857641b3dfad46258dd601510023a2c710d9ae39cf257bd08f5f5090420e22083c407b12f3e899f7e475bf0500717473c049b14cac5e4f29d40fa0e97e139ed44965b686adbf90c4c21f557ea42f2dfcb14e0f5fb2ca24fc1444a45601ed6de932ec5261436d27aee847d163d7aee6c038be4617d7fd1ec4941e3376541578a9e63963d3bd270ad05dc55dce56518e8d1421a66dca7d73360e0760688fcb3f0f147e5f6d40eebc446e76dbca41ae3ae1ea1d41d5a6cd783188a44559e555f8a1ea9d7172572f6e7632700c1902e0b0e33b2c6e276a3b29f4853cc26d23356ad10712589c7bce66976874c59babd510a3a618566f44478825b447a9eea3deb3c65270d020737351ac29fcf8712dde052f0a02b45291ded135c3f6d2efe6208d4f42a8e82a679d0eae8afcc600a0f33ef7fa43d52240f14a768e3ee01b5c62d6c3d6b85999e3ffdacf548d113a0e22dd946e40020550eb4612ced0d14cad9b5cb6f94f211df43bad11c40f29306a354111a46ee233c0153858e1dada9f839f77a2bae2a10ad6e9cc5be9de6ff743ee00a8b97a086d0838912c4b811fff873ba031dab987d900408daa6b62a8e084a0166be9454b1254e29a0cfaaff58a602030f12da2a97611ea80e16190da0d8df345f00845eaf7b77603fd695cfde83d6a8884044e1ca1094a759f523b5ada119ffb9658e27a7fdf87ecd09a39386cbd2e0a4d748474ba9d32740efda70939c6489ab8699f25f98dc445e3c01578a82ebc9a882b745e16ac5a1a568b75206b77f4bd86824992cdb0f85487929fea2d73bceefe9e1094f36fc8d293f7c1e4b6571be383d803e9ef40f5cb04bacaf95da580bf537253b9fddbdd81ff8a089036a91c61a8a7aa76ff9a12f5d5d65a161346996b00979e3ed235c7e62503cafcbd7ac9cbaf409e113655cb758c17482218e00236702772560466144379a0f3749a0575dc72e3051d1066e5b7741b0387a592b9e7c31b4d9a296423854e2f0e8ed134af6631a15bdc75363bf508e241595eed81442c3415b6165035e870a4d163918f5adff043ee6ff0c67b25808daea2a1a5a134ed6eb052757e201f1cd868a639b8025bba6c7e1b281d0539ca0b076fe87cb2ed237aa7b7bf0d1a0bf6708138fb17814523d7be85babff978cbe0cf336944d5af1ccba0ab418d59fdb122d39183410a75f8b5d7bb7ac1767b1a0c3beab7db6d3d854e9528d81217f69826a015ce851a2c141bbf60dd0445cf9f1674bde212dd0ca75ab9b6459475c3c43c56bbfbdf73c4246aa4808a0afd52903f73950481c85423080abac11a14692860b0291a323e67d07982d9a282681cc1abc68b8e1455a2a2682e141a8c8193669a1be595e798773f87a8794fe9826bc09daf147f2a5749149cc84410f5e20667443b3a26ff648a60c60d61a9595d33702eb5a38bc18e3c978f4f40b952e90542fc64f7c673d1e649acb5827574110bde59b67f98979d5d1ca443e4e7ce630c7d147ae818f3b0341f3a8aa5d27ef1ebadd66865917e77aca1c69f6261693972341b6cb1cfa25857adb234caa4612a8dab100bc552a1956a15407454def3a0189362a8a1983d2eaff192f213ea64117790abf4306708d424a5d1c332406940c5de1d757f3c2fb3bb4f5f03cf92c6b256d044cfb40b41ca590c036fb44a7e3cf31f5c4749d5340f72e6499402321dc901e9d908721112eac3fb6d897c7767e4f9170a6d7838717fb5e10f93e78da5a5a7b72195503fee461cfa9e0dc3b37c4a32c35030f9fcf0f34f2cacbe388a48ae8fe8e4fea912b1116391ea23d05bcfa8fa4d92d9c8ab3f3a0beae63249a37187a2b34f628005a4ef559e519b07d9993b23c8c07b3c58c77b7439315aa92b20f68fa84e8c21056dd8c1cd5ce7e956fc166cb6a0829c1ef9a3a17a2e6493bf18dec3feaa2b335247a6ceafa501fc031b401492d2db2ed184a52a66263a6c58a002e5aed8030c693d898cb96c2b3b4de5c509a7b8073e7baf9b4b6a16a5f893c1c728194fb5c97c9ba127ee3c229d38aa680f8f0bec4669c16e66e52985bb4336a1b3d54deb93281d1f7e26ae051137a6137445fbd4f9b60f35dd872d12db309d66e4f61a6772f2cb6e255dcc8e19f5e7e27eb3d997ec2a9628e84a6ff7af83a0555943da91660b1f3d413f83bdafb4b92795162a956bac14811c742dd511c4ff43c985a07f1e03e16726c7831eefa7e7bb623a8cfade3791340c96ac64f800dfff61b43a05df6875bb16249cf2129b2435baea60a208066a74bebadac87ba07b2caeeac0b9b549d1e069b0dacc04d6fcd8b501bfa0eaa1c53dcb19c2f08c9e06c3e4abf134a7f3cf10b56b52053a89d6ef82a2b4b93a5bb04ea0b8a2d5d5890e03a2a51fcce1a5489fd54fdbc7077a70102d664e7a605797a6d41fde5871b11ae6b5e4ce1ac53ead956ee27e802716bfbf265a3decccc4ea9fe2725e90007ca3ea303036350d1eec609a1aa15152ec57c77414cb50ac3454297ceca606b422d13563a0fdd9b9fef25e659a182b68db8a4963c45711e4d9e563c59e719a35f2c526d66c62d2bb9c5e050339573f0c85b35d554deaa3e4bb43d59da6e996530cfbe622e8d124828b4dd27a84d446e3acf2994481cc0c98202490400f3437045b93d7ce8f05758e9f8cc430d1aa6437de269810735abaa96eeba4c19549a9610fa6801c6ca249e5eb71ef05b2e225d831753728d7095e49fea709056bf6de2a3b95013e084648e6711c23e0fae6b9a41354d7340e2a1a469b7be238c686e560cd4afd314ff12430d49dd9fbfbbec5bcdb67ee900c536b0200e322f9eca1769ec7f5ba585576a13893afada2966c4869b4258ddf441743ae71c62dbbbeaec7aef942eac937d8e29630d9041f603ff9d6042fb9a618ae75693e47b770011366ef7e652ab261483078c0c12d8c1ebd3d39ddc7731f8e589b5c9c0906694eb8b00ddd412d7083c1bc436fa75a48bdd05e15d86d6b2c702700dc9668c546511929e1277bf7796ad0b90e0944afe0fc6cd90b93cc2524231f8d9949f1b8634c7d36f2c42244df6bd4ac28eb9f0b8da74e298490160a4fa407813020522ab45708fc2e00138502378d8ff3c92a14050b559d3bb1d351da01b86f45f1f6a4d6f08014aa81abfaeae85695d733e5728c3d6c9b25a4e4b53ebaab177294a7b889303065b208f76c8ec367aaee65365791e2cf003d049c4e0721e79cf4d487e2e0d0cc85646e26dafd5ccc3da074f0eb7824b3160a5497e9d6ea62dc42d18f6fe0d6e13ba77cd6547914db0427b084336345d616f39dedb0bdab4461bca398a11e4ef19d4d98c9963a864e1302881a86e9d5d4cb953e5149a27500d2d5aca32c7b38988c84553377d0ff1854b81b3a7a8d835ed9294df8c68deb1e24a90e76c94e190bc77c7b66f0a3d125d14f55f3c5957c2a16a1ecaece49f28b9a3cd608c7905f4ba424927cdd2bc613155feb89c4e99b52aeea3dd22495db8899bb65fa909e8a71d9090ca3cd7a65f86f48b25e16a2735310755802b09013ff29f9108827ecdb4ec3e919759a8934830d42fa2bccf600408a12dea40f21b02ca9e71371209e9d739e888ed90a449bd3969ed1321117a194dcc362d7bec29033c592e96b26a1124a5d4ba7828003f560691e43d1d18901b7e81859037c55701227f52b8f17c6923a19f8b59a1c71255a444e280566b70d9caf0f26250dc49f91c69323756be0f5ad1a9e4c0a995940d5909b3c31a08783f0240757bec901cb09a11b8c2db8e8ba3626e654f22d6cbc4d648b7cab862b8eb55c81636af6ed3276b7a7497bf2bf384b3231af8b1452a483adb3fd095996e3c1bb57fdce1d43f76366aaa839a396052a6deeeb878876a50d89a2cd92193a0001a6e8e7bf1643cdd2c3665772738d03400a682b6064ae40e1f166380e73664db6ab63fee88282a0d54683035f16123f2316acad4981719818629476030e4627497acd8c7465dcf3a82f5ed5157953bcc5e6a94145398c4180c7b16351531057040f15b50d739307b7aaad10d6a568c2199badd649edb396eb591e675c24ad0399fda9fccec32e2eea6c8c5f14fa5e92ce8dd725bf5e6f0958844531d16e85b270b8c3de2852f03326a659503794020b910ac032bd6c5082d75fb0900ba7995564b73099044820ca3bddbb6308cd35fbc4d0c7a3f64bc23e923a8925a67599541325bf466da00c5b51660c3620524690df867aa18a49cd5ab2d04a53298f03c697aa1caab7cd2f490d929ce086173de0132b7d4bbfd716915661432dfe1e894d5cc14786b8ce5a16cc24919ea590687237a846a84a8cf59fcbc39b2014bafc9dd2b4b82f3fc81be4d46063dc8616e05f053ff872734bd952a9db1c879ab68e559c41ccac3ae232b74d482a1c194b2273a65ec2858691e009542fc8116ed359c2ca21cc36af3510970222382f63bdf1c1b0614a857a79ee7570eef8a1540697113ad1c60bf18d570405e643920a719b20313933db4e15b894f6f32fcf33c91dc3042a2a234666bbc521ac9089cd8a76b619c181e934b1856c4e6a4611b89bce0e5ddee317c21bfd1be18a33bc7d67f91e4060fb2f0300e0e93d579671e0c023ff5f41648fbcde6587f303de83f65cb7e21f6085a0a72d76993253bb8abe4a99ae7d42321a5de987fbca9cd5bb81ea8d7097a4f2520fe2e11ce2ff6b2b01f43e0de29c0a475f4156384c7ac877158e775e92c08a6aa1f62eed0aa0842542a62273c83fe10c768f7a2d2fee5d1e9c8b620727e4d6615bed31ef43190021f3b80d5b5101390683734318962318e29eaa2811650b6c36526ee9ef885b6ba33a3c292a207657e0552e369e09ad9e1d2a189fd7816fbce8149f0f0f7e08b9c9cbf83ee913aaf2594f8a5c7ab3167234834300c45a9fad16e0fbc80503026aa3b5d42c06d74eaa5a785a5d0b6e7ccacb164e5e5b788b366ff115ca11e6df112390c3a0fed8ea108d4329e18093708bec3b0e324dda7738834815ebeb1b6b818724bc816d1881b8b52f4a3c3c2ad15e82f3750a32881b0b9faa4dfa5693f7ece177d69da9e73a112fbe06e532ecb7058fbed2b37059dd7386a3f4441be98f7a7242eb9e7872d053316a6b7bcf5780773454dafcb36f23efae63ce4f100ee3ddf69866650c5cf4065603b875b58863b1f2368f725bb0dda677a065bc969bd02ae0d092331cdce8c006a300bfbb6ee309f0890505525bc7c87bfa62e737839cd02d018b66cb959dadf42018554e10ce1a9c227448857c50f7b0041575c9c2eb583287c43a2201ad15e30102e2e7d569ad02a8a5e396a02eb809f56995e16cad5822fa2bfb228532c51e054eeb467e944bb7ebce7f8eeaab968f84434c564ddbff96ad7ad58a0421665d2df3f007f826c4aaa53f76fbe685685fba5fe5bc812d02e1f4f1c4e5a0db6af7c104d66f95d57af993104c27be76bafea235e117c5666c164d119bcde1498507b4339f4321a731882e50fa6bac6d70d1c7cf18e6176314d7ac4cf28f81435898e98d70b80c4c14995f87bffeeb225bb7899b51f16096c3de29768d37c6c197d67bacec75ab2c638522d847b4d90e7b6d1443a85ab202d700f76aaa1b4081fd32bc578f3033deb02ae1d23b534a18ead7ca1badd1d67d729e744626b27a3c106bfa301f502cf92fbceaa5016f7910c8a4e38197ef95039806982c2ce64da1e5feec3eaa0d5bd6b2e8849d495fcc87454eff8de306d6fdc77c95547cab0a1f2e5e6506e86356fa12bbb2e767cddf9bbac070da5df14da49aef8f34bf7623052656fa70aa2d6a545bb405ae9f8d62afc007ab585126c68956517121fcf58baec00035205a53c1f2bf5093aa3ba0f73de1b942167baeb05e12f926eed766cc40a6bdd8c4c85aa7b3bec8deff2e56651789efce94aab32d40da2ae0677a79c6fff7f16c49032d5763ea4e3c68269b494a9fc40f1460740e605fe2f2f8c492c0348aaceabff1b4c6db578b4d0f2512468b53c81763c8332f32f0f56d107a98eaa8dfbd7989f13ff1fcdbdc34f96045c5601eae690076c1edf98e8dedb02bede9654912ba406cc16fae02cc36672e346551d4bf492e086ceb7fd3d1944bb3cb16a3cbc05595d9f93fe9077b69c2819ba70a0329eaded0a6bf45f58eafeda2601bb275a73fa0b7211fe188ee30972ca16ae11eed8a583e07c2c4a4b5ddc8b353917ae615772620381b03605c08e0d364d8744f59099f612e9ea81f19c24f35bd33db27004a38b46e193983315c8c0813828560914fbe3061bfefca09ea2c816c0dfeeae1fa88adcee928b01fa6162cf76df2600b4c454d221df1235808a9b016e21fb3500c9038efffa6dc1c31397ac36d070a406c82e1ba6fc8e6e91b7c88fcee9ead3fd9f91d9b0bc388ea815efe208c2c891f96bf930a2623e42c3a85cc2e0ec998f340a53ae7aa2eb41ef58d0f30c5b5efa7e3fe4f06b63588fc2122b482c83b196ecfd4b41b91f013391b9374bc9fc9cfa9ec48907ff9a0411e8fce4147af650293af04fc9bc202b626f5007c4f4b64cd123e9a193987937811fc6003586348ade27c100abc13e80308f208dbdde0d930c5839038f3065943369b01d9d101128ee586281a803fd40f16e82670da77b715e7e01f3db7d37fbafbd1e6aa880c9accacc795402ed4b37b04589e5bec31543fbfaa938c4c00cc2992a96721d3009f00638c2360a531aeae01b8a073d6323085cb0a26587a6299d0d216baae3729384e3d36b7f360499754753726d9d599af58062d7012a0ade3110e163f0ae518291a669c8b2cf914ead5f94fd9159fad2d1a99beb1a65266e08aedcf383180020724d76f09041d5fd88c5421adc522793e859ea90ca9f72cb5f72e62b0cc441fbab0f7ed96d9a6a6721e98ff43d6e6ee358944b5c6ebcf8a5e15fdddf067a875f9f517537f399ed0dfce8aca74b9e701ed2bf6db5da495484ce5ab48b047ca821887f5655c0cb7eb997ca63e405d5355609cfd998a345cdf34129868134fb8fc81a65a48c5b946d51e911a1688ad257125005bc927780e91c2715cc242ed11dbf4f5f5ef3c0270dbd3d65623179c01db40db214369533721292e6c1d05713cdcae2675f25e0bfe4f2df255f10decc3eb82174e38897141939f912f9938045d192911bad456eb38851051f1b90296f084f4dacf642174bb1186ced234e6fafcd6b101112657a164ff0eef08707bef5fcafc4080167b21c266a186236acfe491b14ebf3477092125dbaecf4ff20870f4865ab5edf1b7d63733d7cd00616f0f07437b4c4837cab4293d51a8a4e7c50fec2959f9c5857ce7af5cb7f422614ef792d37d20a09344131063980048621b1c30f59caf15a057c3035d9ac40b925b26ef836edaa409afdc32e04af03afea2333789eca5bf8976051551ec90feac6003fcd3f657c388ddbc78708c44ff4298254e0518f517a78a0aa6af18e9402c457c0c06a741a745cb6328b7bfb933215ff0c843e0e593d5368a0932d4faaa1f71dc10b4881d7bd304c567efd79fa73e3256c5e9e1ac53c0744e038005c5e46161e50dd1522bfa240fe1d7b31b036cfb32818a55e2320442965cfcba9211ca10754baa87dd3d1c647a24f5fe61be45499f886e33f83757878a2dc748e5e0308ad2cc2e7e73b1f85eaee0297f32e79b8663813793cde8049d6f25d673b43469ea27968acbcd07a4425f1477828c6c2901528a0ae80459d246d331e8f71c2f094135dea67032644e387d707594754e438494cf2d3c1d07e2aaf716f3571b976943d1bd28c4701a0518b9447dc7a589478a9a03aa9f6c3ae7fb542086f156f20d9d4c25169de0a4ee62582dd6be0b204ce55c4f1aa86843d36c306447b5c0bbe30cd666ace6be7333bbbccf922facae1d757e09f18af2b7c38b34da81b1b3624f910809f76845f4e0f398308203037ac130143d6322ed8814778290db1183cb9e5e1d0cac36913d407530e4628d07d4f92c74f40a6d90f2e2caec63b6c6e849a20af09e934db0994e59169adc831520a7ff6c5c60b4bad42e73bb98a9bbfe6be7f306bef756a2d3d5f06c89f40fca4785c5579f72abcce8a42ca7a7898717f0b3714421a02ed9f66bfb50a006dde3e4ed004bca99448cefbb3278500da81f4d426006c4707be2d9ba6b01bec9210645313c3a40306182b2da4dfc0524b0a4ef396976b3c54aae92b6804a1d3b6b153f17017ae648a296fc6301ae2e74f1a07f71246444553d6911f62d006059872061db3fae4fb6b87c7b56e2a6edea6d9f4ea9e98226e1d3e7b68d1990f581cc779b292b656569ba7901ca6f34c360b0f25dd727fcf7423454aa57277a3a11fd3ec5d160a7e3a7d936cb484c881d3a88ec1e128665eb800b1489e8345f61311eed864eea3a9ce2a71a56c944779709608000460f0007bd853dd9cf077bdfa2c7af64e1f1de016477f64b181b1952d11493bf316ed7a0e3a117a0296acb1135d4518773cf0b67a0698cf6cf4e51cdd5705845bb5c29050e41c2fd6f4c718c617e415ef6c7a3903e3ba728f33a7b20cf033dd7c83307caa68d75e157351cc7b67afeed3ba8f935d642f533e871835a4ffdb4a77a1fc11430b3681d11034a4aca93eebb9cf138ee360f91e398040730ea9ecd136cc31294171331a853ab54e73aaffd804e7eeff03b6d5430c2cc75660d6a0b78137055d01ee053f908438f1086f1192bdfd76f3a9c2474fa26becdb8d2ef0ad6e8d6fa3e0b8c6ecb431c5551d08682f88a20da40d11aaad4d1c6c0ef1429079d43c6c4a0803217da0e40c7fbdd009a121d3d2791fcf6844c17c9e9368a0ec520d5bec61532a02bda0be08550ca8243fedd9a5980d26dbc1468879f80b861c5a5d1f0bf1d7723ab1771f6ba870cfea3bd85c81d2227e89fcf76e5d1c8ed4ec9b7dababc466fac2c5afc364b8f5cbeb09f6be9623465dbadf6da79a0fd71c35e680f44b3fd21b14a0e60e19197848fefc87696f794b8cf4d40074ac63af701ed03d7744b8c0c42b0bd0350ff94606269fe2aaf72f6a12a7b3d430f219a4a8409cc8270a1c696e600e2eda86f5b67b57a3b68341cbf33061840915ca88c7009028331b5a878a40877506bcf87f101196f66673e52bd25e0befdd861f51e256839bad011f3280d9706cf21da4358fbb894a2d5248ae402b98949a504d68cab22539788914b3e7f4574f8136e1575d227cf07a23538621533d333fbe4d2b88f7621c0b0227620308f79522ce17fc61658d9a43871dc6a5cb96186137f0022ecab87cbfb70aea113b0a0d45deb4d5b65fb42917f695e51aa5fc37b071df69ce34eb2182e02b08cc952d07c11bffa3be6da784fd007b42eed28f1bd1a4409fc4ec5ea362650c22301f9422e653c627d4c0e262d307a81917b1f128aaeef860eb17fa69ec458d121572f1c2f002d7e8630390ff37a820a15f55cb88a05382df47b6a3e41e6f67748434f2e03fcd5faf74d05a8f8cf598f37b48b08f7b09a462ba963e436f3320a396e237de25e84ce440c51b18a9b3c5a70088715a05c898b44fa2609c9a1c8f09a867b3c9766f5efe17da9bc1bb62f2e347c642c02a3a2f81a9ed6c5216fa1f6ae4fc7881c258a051ecaf93c124a4a882dfe074ffdb641c5a74e7a1e4c8f80f27bc31373f71559abcd8a192a54bf57cce325256cc415616d01eeed4ef826149c6851f3c53414cff0a0b771404941352bc8dab5bba22191faac673c0c72f1fd054d5ec7e8f24259fb2b7df08c7a41a6894c1dc3f752e7a6f58aee66b482950cda09fe1c35ef232aa527bba32eca673f8eaec4a62bdbd9ea6a2812748246835ffd56837825050dfa91617452f87cc8f659ff1d6d7fa5c3c48e3368188a5fb78572d33cba2102228960fcfe1247af6edd99668ac60570666cb63b21940d550ad80f1a9ef41e80312c2568d92dcf77e0e3cd58dd15aa93d17a5e7eec62bbce08d5da2a77ea37b10d6c00dc8e3690ab62d04e6ae8aac6c3a243cf62bdee421d480491b73e84b8d880b0ca978fe7c63156a8ab24769b07569cb35b6bc6331fd1c786ce6cece15244c9844c5683d8f6521626c795dc117a533791448f39d7b45b5ae8e87404633c34d3a54953c23c8453d8659b9e7a431125e7702cf9f517e2346f310cd09a0f63b091191d18ddbbbe31cf2be41c5e29c7a658fbca172dcca0e5126e14674c961f3e0236c56aaad7633f9d4b1d9bdb22b7166331f3f999c3d462fcc2e8e395d914c91a95015ca0d50238316e3fddd16b3f643fa6c80b0a1261f6af8a4ebb6eac83819f4f8bc212502cc9e8105b4b25f7bb9de89125052398235bb4e18354b173124d774ec12775e5b4b57d73c86d5fc8daa5ec48841fd3cce222dc774340110f77db1031886146392596dc237cfd4e0110d10ee800522a8a0bdfbd20a08c3f29633e38f40f3f3ffdeaaec70f0beb661bd4e328ae9152207c357f9f22058ad923b14723f4978cd63a451ae44a926f62ef3aa20bf06b3b358d1f5b7898f6d10256a1ed9e44c86a3ee8b4751fe1e3e6188462aa5d044c7f2e31bcde8b105ecf62b69c8e5860c4d34867d0fb527fa430858322d6e826c3b1b3af3dd3bd9fe96d418ed21c0ac326468df7fd65e6ad431383189a76a19cae91c2718e83334d1f74588c46e31c1a22f5a2231b782bb5122bc0689910957ccfee9e89686d6bc957b418db49d6727dad458ddfa1201d76c9048251d0e9323e01394e7dcb38b50a93f824908e4f3ed8531d8d776752d617a0a28d36edbda8358570d2303c8d9d73336e7a63c47df2fabbbfc9cf64f2098e84c433954f9de1a00c6b4288c1c54741a4748a9354b0c60dd25bf58097979d256d6a011b679730a29a64adcd0a9f5726bfaa23ea27566d2036c85ea29e884d13884d7c592939d5629ad18c24c7cf48820bc447e5766a390e77ddd2ee020887eb1f974b7be8eed4c96db199d14c7a64f6137569f098b7ba11c33d81a8e810a50ac92bd884a79369a42781ceab850ea58372b4c6be15824333ea44782052527c5bc17e9e0d0767d104cebc1a267d4eb2b8300c12346db20eca6577ab1cb245008103dd29d7bc123c8a50aa09ef509cde6eb3c8c53fbdec9a0a065bb1613c2fa04dfc43f17f90befc1f98cba5d449e08a0f70d61b1738d582bf2e0c005f6fefa31432064082b4e4adffba315f5f976b4963b3cc2e0789c56b29245d8da1eb0850533e3c9daa7410e68b99cd565f7986d1a84cd0b2bf90c57cfa6c6335b00ae55fd750679b20546d85ae086554ba78d6a3cb610a91e2cb99cdd248e0a0918882e738220a157a0466c623434144436d864738604c8ab039f78b045083608245a92baf4ea7474f746a7f1fe2f2417aa0f19c0ba86289309a46806090b430e29e892f818bb6ceca2f7c961e3180ab2094ee26e2cd70c6e30786853794825314abb766d00ca327862d12ab5c394e5de005e4970063640f03f02b8fef96f9a3518368a8f9fb829ec7737732eaebeef7e21f31143e81825fe8e0a2061c155581fef61f7e09423a396ef5c9ece4b82f1b202c58abdaef73bdb09e6faef2e2dd994f491e7b79508b5614248e2db9e3b446864e490b4942fdbe9995ebc847711b024e8c733b49e74bec6076b88578c5e8ba589aa56a3bc5f7ec6b560918206cb28a58f541d02f5052fd3ef5a51eadbf42a9c6d3b249c06f1b4778a4b99baecbb6a80f6a665cc213e5851632ec318df0bdb484128ca34e98a64776405c2206e81e968b1c255803c6afdbbd24743bf2065204480cd396842e3089b7345431c878c1047225d4067c15487b2f23dc36d914fd7c8ab1ae00d691bdf397893b934c08feb6dffda40acbcb156fc3928f063898cc21d81c40b51d348298ce510d2ad498dbb89b092d7a951bcc15a07dea6dad725156b16181c18f6c6c833ea0e0f345a5085e260b6ff3466fd6f3a751a331e6c084c825c19bc0d6f917e26db8b73ec32f857792ac59dd9c467ef78f6336b05ad68e8068e204f4508266464b465263f0b306a1fc51b0adb957310c974dc3814db68c18f2abcd43fff13dbe348155902fec058aa47fd44b7ac4af1add5515f39d5cf5651f01eaf76de8f6211147851cc51783851aad3ca2b9eacdfe33e89a8294e9c207ff3b30366bb92c3bea4458e6a1b1210f283617fde001e297e965db8ec859351594bf5cb2f2cef4265b7e25b67e926b9df89fb517fc6b41f18cbd09dbcadad21588a7f2f896326fa247c116403abf311328d936bfce20b851cd59b49676b517a1473a6fdf0efdb32438a2071d01e72867c6862252bce1e0c1a95403b6d09748b65875212be8a9c8043e5eb8de0deadf06fbda4608b846ef39a51ab1d7b4fdb7705ab9f31b6532858a2c354cb5a377269f8d073d4835879e7cbd90cca25d9bd06b38e0c6b3be9c714623eb6babea2b9d956b139d2443ea1b085bb9dbf56a4b3b5b740af130962287a92406212da536e8a4b6b26de5d216de1858b8143dcb2d7a63433f519b7226182de36351ea8a7a2229a71dec9cb40592f545b219d14ffe8cfb168d8f7f2cac18eccfcdea070eabbe991fc1a412039f3a287d30584202c8947a8ce4a8e8fb8141c0a1c166c625a6603343cb90cba83f417b75a9af8b0d7ed39e3a64121ad7455a831ca646c13620150425223ec1aa52851423ab453cde24914611f826dadb3ce7cf90a3ad6c496349b6b38d5b8a798f1f8789210cc456ad5edece886dc2abe90352d4384f389fa14f353c44ee8dab5b7b8cd55586fa189f2a9e4c63cb4f89e6d2d6d5dc9cedab444d07e8ccaf68f5fac5e9ca0c923ab9ab054e4af20e2bcea175728175638c6bbee1862960bd05bf54c48bee1e027458ab8be1a3ff8f03c9b16034f56a10bc95b9c9608b4feae01bda196a7b1c3cf85d986125bcbf10ac2b52d9bd0077116fa7877f840d1a3a877d9fc4ae48f5563d44034020616b56321b58b6429214697db0005a4efe2db878b918942eddad64e2cd689c194134b4ae09f3ad510ad65b7630daadfc70ab9c8d2bdb5037406a8cb6552f2f0e3f49e6be5b6ff849214e4035940ead5f2416bf7bd9a31d7b5f5889a0208aab4c1eb048d21378f4435fa697d1856c22f626f6948954c1f9816def42eb83807e612b73a657bc0078d54b2f44dd1db1ff9360d267280db8231ac372d42127c82ba65e34452580bfd42a07a25b22d362f29bb7bc0531f432db67c08f549b3734820a880b7a51328ad1b99bd9198f4a3cc396522a388c79929ea0e5b58c2337523fc545278178cc6b02570f4d11079020bc0a1eb024b07f4e4e1c3cd53a0e550bd97aeb82fb0d716dec361d9e0e48abeb9c1de67e02777a15afb3a85c1cc97e9e2fd906503d283528b49f62e74ae321e50b0fb543bc1600f80f55710ea672a061d5187f12c65ef40a29050a0e6ec676620491f613f74709086dcc0efe32a3c1e12a84b14ae75926b40c5eedcbf91701542a2ef6f3c5bf81b0c07c63ab43c03008903467d0298684094541dc211ac6909b74988c2b19206206799111f60702598202b6b7fd187e3e576a9df55e7d45eb4cf9606975cd1a6c00799d447432dbd9d8838a4d79b2e937c203b27952afa9111808921aea342f40a96e79379986258458cf83f7dc10f5d0a66cd83d20851cb35f8840324a5d5c4e3acb82d910e6222751dd612c5d4342282abafe7da2811e1ac7e110f070ba7e24f32df9aad56a98b117acfc76d1b762d0929870e012fe875e0c38bdbd21259e33c68222abe7cd49088d5fd94ae8eb46c48495a0e95c5ccf94e8c1bcec065743f03558e98411009f6449a520cff789f8c7aeca0004245d2ed2c019b68a4b1dd69f818fdd27030296fbfe6f260f3e585afd2861b82450b75117782b50b452a1381017d19014cd9090aeef1e5e44e4fb8a0650915b3375872e233e73ba0dd211da50ba4bc00c6f181b4c221dab28332c8422b93853c111f5103f77bff1af30071539f5195ec644bdf07dfa3bd57bb35f80936380779342d72c661b8b93a4188aee36ae1661f0b2a4d7740e90f0b475c5b65ebaa871b2c30f55b80acba38ca77179c7801b8a2015f0d50bcb66cc55a10ed524e29bb93688acc9a94154faa83c21e88bb9b932c1d240183168d3f3081970e15c8c70d147223bfcb81891a00dac3a2ce5c95846d0c7c4fb88036444a3bd95af21c2e4f68fc16da0a7b42f20df725335e88e9152b8a3e9d32f1c1f98e29a38e4067cbdfcfc6dae439ecbf9a118ebd4401c72782a952c157d6248ff29a7c464ac89228e037fd49aa3cf73857bc1926c1879402ab7d5d2988270b1d1be58e5b036792b555a4afb29563364e31d464e2116c1775db6f6156b9eb6284bf92d245371e93ec316a7e3b626086ff3ac0fc35ef87a1b259e452a7aa72ea6a266dcc14eae0853c8c07722e5bceb5d276b92900847e964dd3a5b7e59ba195fd6509cdc2f2ea2a6adb42a91e78786a049beda5143c9a9cbc9e39a8d0f3bf20520a95ca9470cfc3c6e61ea1525775848048459e5309f24db71a42d4b1d9ff3d0c0052011b65b4662a41f0abb7ab04f047845649aac3cccb84879e6fa8b99bdfd08338d543f0dce377850c9d97a1e99efd70f155193da85e56517dd0450c38edd9d5520faba8d46b1e4d8ec990e1cd37b1891613fe53ee6b28a23603dfd89062b1c99109659a877d0902967b4700d46ee5b88af94358687e3720eaf9d03e75d84c7a6f5d95aa61f2a9440c2a421ec074320a17a0d3390d7b916241a001f897eb8e846b95917df5e82b862b65b726d2a0b05cfa044fe114e04b791f13d2d6de35c885747718417106978faab49d4123cd7ab979d658f3ce12312cacf7bd3575515024083116d0d5cb072e6d9eb6387abb17ca938e8fd78adee9f8a79f9067a3376a3413752bb175ce099ef8c7042a2b99e82a46480d26b82e4af08777ed8bdde08b9547c7ec0a573f501477ae265f65e9a45cda879b775380d7d37eff817981822c9e59bbc344fa3c047a985b1842a3a485c0f8d3a97ba3341dece81e29748515a032d3765277302f61cee851171ffaeb821288a1ff83bd79bc104b68eab413593def7e612f3c5dbb9dabfcf2006af19d8b6ccd9b8b62c29bb67352388b25c5a32a26bff5d23ac807056d077ed5d6d03ab44b9c1412b3f0c5d02eeda9ca863971c40cc9e0ebf0fd05d8388175d7da191e3dc47aedb3464226a54467a491cf3bc45c86189bf804d84be6ba11eef5488f7ffc598c6d3df47cdf8cee5d939adcfc261f86a038b37d73bea6c96eaeeb86b40e3274a5da512e30ba155adee0b090f501a75cdb23fcd565d0bd82dc9adae5f5780f1eee6517f43d2859f8429b04120ddef931b236c736a35a1f290f735e98e7b948b2db090f4f342af355f36329a2dfed0ee72850bb68c13e3d16f71e7b5fc096801ef279028317710e1c3def80eabc854301c45b2dfee65f0d96759b0572c9fe7f9989478d53fd2d141188b1d70e52114a52e362c72bc6e2a2c21c218fd26028ade928e60d1e0fdd341312d0bb0d358a1a1e62bf781a80d4a470d4bc1a2ef663c483426b010714924a0695c21d3f89e27261b6bf21efdf85f3ff50e9ac98d935de5743e02e4e72a2663d9af7d06b53e603b50b9eed9e68ce980a1772a96f5aa3ae886ee81d0ab9e7b868b7044633bafb8bb5dcc69bb1082177d2d7ff1d394422412cd0d303b90265fce08cbd7893820a1762e230c0893c220d200a20d878ffbf5c66cce47fe621547658a96feebaa6e634ea6f90410344bfb562cc6a4f61bc00bee429eca178d466d5285551fc98c379811ce5df4075e6f173000abbf6c52a8428705ed490203d1e40a4482e52f08070bfb829935a46d6c2e4ffbc3f348698c3d833ca29344496385fe330b114bbdbde4f569a4b37c022bea538c7aebd054cc34a05ab7a886ce1c7dd4bed2df7e8e75e856eeed3c2f28734e95741b49c9c3ba0a4017013eaa50a21e6aa8f27628f27a42e20f0f8fa127286fc206054e039a6703c2cec95646818de1ac81e6fc1223401d8fd2b3d3ab7a47b73cfd3579a72694de06e7959d509bce4f03f20b2723bb0c7670c4781477aafa559755b0d7b32fbb711f026520168b7e2f525c9b505424028813fc23e750bbb3de42b830187e6f81a3cc6090602744dc89626c83bc9b1064e668d16c2770e0a513393b6a6a63a76c2ebd29d5208adb453bf2dc998bf746c021aacf4c743be2111f127c09cd0b6d50bd77465710f257335dfe200b66d4b003a34cfd381db6212b065d47622b9a3b62722f15eadd26f64ade7440ccca6bcf92de114cdfcfe24e4f44572b6c02c56f938ee3ec3077067302846dd08f3aaa098d6c1554e23855c449e4d6de1045ae5f762987f9995e32b4e51ac58159f115dfbf367445b9f25bdf6713e399ce358d8d3b0572b92b59e4400e35c69129d3fceac4cfe37edc01ef87341a2216ed2dbb84838a01f16efe47887dbf47e178062f4c950bac18db2f917393688783bcbee6a4bdfec452f8250e566905793579af869dd3498cf85ad803cd479adeb08a6e43b02cc7040bf645fcda69caf5647a84ac9a5af67c49be9fc0469691781c378d867ba48fd1361cdc8329097d20088a7dfd26860437190c5cfaf348ae0de32fb8588db5a198a78168efaa05147e22d513d23e03c8de8b9180686aaa38e556639193537ef8b5f3875177d0c52837898cdf01c54093741eb760af7ec4b58c6c762946eaf5df911deb6db722868a0b4fd1016cc7dbf1e86be22077217719aab51555ca619ebb69e7acaf1811fb93975f94c6da5724ea83d4188a58601d46b83b77d214392eed2c8157160e3bf593fad2c9ed146919ee64f4d514f94c76622064f20bf2aaa72625c01465720614183ad074c2eb4d05d4be3bb2374f2466a18866d50ccaa5718f33cd6c537df4857402e55ed3bfb77ac107d63affd5496efc590a2f80d15521c7ca8b23e6c49b6a5e1137abfce8bc892cc333252feaa3138544eec9bd90368b938abde3a4c3fcfa4b9d3631decaa543950289b06a8e92460b3eebd1bf5ecb10da7ff13300fe847ceb29036d3fdcab0c9862d4028406dc37c99702c44a48c6345bf93956eefef2d3d20c25496127ec62897282bd562159eb2ac106f8c8e78ed6e99002988c7e3d19fdfdcb8a56d33f694dc90c0cb83107c1d7bc0cbf8ea633bd072210ac86f5d705fa7a5caa7107f6eab4b0141f3c4b08907cc96e2cdc91780f0de80509c10469e512fedb380649d89d03d6abe3f260248ee3d104c98b2055f6e3adbd252afdf52b4a77aea109489c8a49aa7794fc9f26b960c0e62c7ba3a4538447c03de70927b9f34c7ff8eea7f30dedc4de984869ef9d8c4cee42c39ce7e224c2dfb09b973e10afd657ad456f37404c4ef0e13450a42e3073ba6200c1f4caf8d45c8cda8494eae0249956e505bf84522046d0fbac21938f43c6e17aaac1c22aca9bb50b8acf8238ef7636721555cf93ed86f9d5851272817b9db93b544c8dccfdd941515838a1a27ab19417ba7f8e5067f272bcc1fe5fa2213db416d52f52e672a72d74e58e016471b2f060532e584b153cbc7cc9802d6e9f3c8f6d20a26d4fb2c7387442823c061cc171b582004807f645dd51d6b1a0e4efd4cfebba2fceebad281ee8d0bb1cd49aceb7cb8b87c7a623d14fd31b0fcfbf789cfe32fe09ec2b255dcb1b0425150c9146ad76fb466084993d3b29139fb78895337e0771ab83bbeb4f0325fe5b02090691878a16b0a20920b5a9515d7df3d8c73704a4a4e2650d216e5d113da421f3fd506f310076f0ce7daeeddcbed565bbd3e7abe99461dbb6edc4037cf4b99782c58df046521bc0aea75f8eb2fed0a9020bd282410e665cb5721d6706514a0192480762ffdba5b26bdb94d28ee81a2566a3bf181453ca303e8c40889fae2a26aaac2ac52596fcb16f21996b6abe969055cc0d07770fadbfefc2390f22b1b0a9724b541d707b9d0ab5afff942ce6be8d259cff4019847d7aa1951256c6b643b8f82cdc36d4bdd57da43d04a2d8700a3a849448f8243891c54ba8c364b540838e77d4a4f4e0757b6c83698af834c7d68e09203d4c620234219018e05d58256b2c9118a201301941489a90b4bd3d0b258035379088f71ae64e59f3dfcfa8ca8574df5cd20bb82162bf320d365d92ef59f047ce05330424a7a719cb283f4a8cf6169b29d60628132986d6c9068dd2499c8d3fcb6146daa06bd551d3954bad27ea5b092e1fd39a551e9a6beb436fb14c9c7cf438a5c6ff77d23f60980e454c2830b5688bc332d3de123a2cc38c5b98b6e5fec67085baad0d782d485e72390013e351a19024084ca3d2b8a02da86093d3c77bcece4ccd0cf81ff6e6674487dcc7a384df37f439fb21a1e9c0a5ed22d34af5d7520a32617f6256525420f05e5b6fc66c2566574b4bb87c24dea5efaec7586c740643a6f1955449b993cf132b1a65788daa2189b1e9b22d9ec121c48a9f86ec2c09a6cae8c2fac8cfa1899c289614c18cc329ec0f4e2e5b8c88c99fe367ad954a73170b5a781e99cbd2e7c51402b55bcf7c041402a6c816cf4f67bb2fe76ed3cfc14e07e4fd93fd7577c1052189f8be6550940d3d1ebb1e9c259a8474d88138481be68e9386a30a0a3a832316f739aaef15437099837fe740c7c3fa4b6794b2a233e8af81ed1a31f15397630f71f50356f63a554aa9da5a880ed6d0bc79d220c3e682d31c384081a178b5e04cac07ab43e7bc8f5c8b124768542c309dd819d60d3be512765e18309fd977d182545ceb3a2d5175047bd3aa7796f370ca1d3b8e69c5c01779269ed5102fb49b098f3541a9128ee0c782699afc68f66272d12e2efbf772ae8e4686c16bdf47841d509b541ae68b1f3f16c24b4d4bdc8cac8d0fc5ee3296644a4d44302d2751d851e709fc373360aac75199a0ed9388933bec7e9a5981cb68a35ceaaf268fb5c357d7c08d7d113486cff70d9a3c510e787c4af603d1c3f30d5525867a6850fb590a1f3dc11b7c10892bc44d99ca079522368340e90d7a23afe9193f61964c374d914ca3781829f2014c63e1f3a0ec5f7c9d4b237ebfe7cebfcdb79c7be9b1f10ee75c0f1024f20153faf1d167c6e8dd63e001e161b8c7832ea3be0321827d4d80d0300c17b63493d142d350586cc77928b9fbee6213a448f091aeea32e170336e1df008e6fa072d0e77e47875da3b282f9163e402973c279a2b085ca2e27df78b326e8c04ebc72282610419fc2e3130239cc27929906116712ead1209b38e64bf08c0f0e83919fca484618fb07b55fe2f2b0532663e8c0bb503186283c8175ce36316ca30e2920b284b930596a8972cfefc648d6d7ecc12739efc7a809f395312e263fd8739df9d5b27d01d510eaaf72ddeee489a8e14ecae29ba44e3a0956665aa874022f27f248743fb9092af4571b33022a90c515e5898c49fe47429b14c5edbbe67b5290ebc0f2e627435ac95a913f3a678c8259891235718dc04f83aaa354d0fc6578fd2b22a388f2181c1f85c1ee88d0c8ce08d36f50b0abecc7346f5837261e3e8bc8f45fe3174636e605d969d7715eede55ccfd173604bdecfbbe751fd55ff4cc3aec698996b78a114912e2c45212dca601c04df257562405e95d7367fe93b057de4c974e3600534f324d9d10fb4b15b55ab0d6a0485018e04bbeebdd89326aefe5973621d580f529cdd63d8522a6271dc507737fdae8a1047502b908b1a2b3eb2242bd10b7fc49b8bdf8af7d27898446f7ad7d44fdd837feca7a66130edb71c9ddaebcf3022f7c413485fe2110ef92f70fa17a83481987133db80f75d81bfd698e73ca65e19a9efa8a8f9c45e47dd1a69c10fa00d0944de7f23cc2fa969d8851682a63bb7495bf612fff16a4067f93f68343a5e68ef74536952d918e0d1da09c0774b2a0875ab1ba6739243b1d467b86df876d0ee20d89cc8e43c42a351c6e4204d534243f71033e40022dcc75bb9c181a4d64d0c1388b210d0678fc9a99360ec292c11aaf4cb5701e5d74009c807ee2cd1f6fc459959b739b654dbe0b889ccf466f4ebf2250dd5bb311e3ade300385f08ad928c29313c373140a7ff5c6a5d0449a9a1f851d6d3b734b42ff8134212d239ca356aaeb8772e7851ab61d844816271fad5ca528aee25ea5de5c39a1497b0a68f30e5cd168b25118b898dfa017829fd4f91ec1c10a139547a284dffc48692edb010f67b376d6cc2caebf13f963262878a220cb612baa1b57b2e9a4ffd292ca2a78e38b2901c3ab34e4adf8a88604774aa11ad0b2c790cdf0b203960453d124db1d52f7916dc57a06438ec0195d11f0b29018a4411f77a54519ab6048fd4c47e1fd7bf6b415e747e5f1b4258abec2dc63f135aee500fb5f4774e677e5031ba3689b0e9678d93efda4fab479480cadbb9b0c6bc22af05070fa6ce1402ba67e542f6a2e10718da9b299a3c6f0bddc277d218d70aa7ae03e96cb301c75bb08f11855cce665b0131cb16b721258a2c72077782b9458d986161d84341ec2c7ed2c1fe677b65c9823938ae4e9cdfb0621c54952d8c48719fff901327825d892c313d959524236d129330e147604a37940fb1e4533d57a2f16737dcb9f105d4324b1ddfa0259b26ba419d3a4b286e5799a07ef724058835fc4b241537c6ed3a26aeb120d14559509e8568a5f48f347f5ce840f3150b49648fb68d4016c451568154f267bc3dcca8e161c8f2a48e6313215af2e0d4ddb2d227336e37010e126b91b432b999ddacb54c5883de40b73924dff88e4b5a309a63c40f99c1b974f516a195396d58320b57f42c3ec6125413c3f16353bad864c64467a8ae56af8b2d403b24c94f7bbc6f8347b68738d382321c23b41d4f1cec306f693eb24250097d37985aba24d4a744e83d780b6222cc97a5c30ec09c9d62e92fa4d7514cb1bf0505384a6528b81ce45301ff888d4940959454e84acc6ae7c4eb0d15664d499fd9a8e5ad4aace371f06143be376259e9e4b25b05b6517d66bcb04c181c2e8cc4b8e6c5128d04cc5234251141670644a8b04a09a8abbf2d69408a8f4e9a98c59d8cb832df86f75c266f0a8712f10d8ee35f7d9f00cce9d576f4484d64ebcb4ec8da1885357b74ae07009ba87c577809e346844040e29922c55295b4da96a76921f5751dce79b535b4d09f5d1be0c1e60285fcf564f764d9197de04eb33a3d5aa29f5259fb2f9192665fd3b80b31956a7b755f292f53ec6ed8dece84879a6235e35a1d71dc000d16babf40507c4f41a421345cadc8d9b6ce4d3653486db3b09039715a25bcf1c714dc383cc27ddd3b0174a9c75c4cb62c5723ea9e7f2f281f0e8da286fe5e10fceedbe2488ec76d19fed8dadda1f5fe89e0ebbc2e6a481935a3867b59437a9f1686cec0ada7dbd6fb77de63cedbfb95e3d23cd574f1a85ff8cb76b54d927355164b0264f971e6a4afde6e80f9ea8a0bbcb076490b9923fb668e9ad340396039d22c2e0e014a3951e5da926a9da7b11a5206d494024a2ef26b5d5054594d3aa921a9a4754cc6691f67d27bdb6ebaf4ffd3f1801476857ffe00087fea4e0067aff24c500884d86f0805b8a5d886e00ee8edc485c4c0aed9037d19b41d12f59ba845dd2047822cdff16113e95b936e8410423621646f2977d10687069306d9e7251091663bf76d3b562f075ece6ebf7d1a4987f3ddc2c2773bc7cef9f9f6e9d610b9c339b0b34129441e91cc6216b33a2b24347218524b3790f94ed9ec74be7384b4699ea7b20fb6d1aad4913952488c997248f70f66216d1055cc4f69e44548443e1e3b270e62ccfc6d16d8796e25e7bb9265db74e55991268948d39fd2c7ce738d7939f4b9f95282ec83af3659c7b4dcecc9361dce1b69530c3247cecff0a46f5eb25a1ee9e69e5ca8bb9bbd0ea78e3969879386e6615b2687be9cb1cd63ca81b9e890a314beec468e1b2d2c5fc69dabfb9f365b7f09d2e9e781cf62d7af8f4aec2d2206bea838bce8109b365c970d3dd86bbe6853341169b55829ca1a6787d9fcb1b3ce39e39c73ce39e77589cdc7229628626fecb1d88ffd459bb0e340a2f4fbb05859b26f4507dfbc645417862ce9a65fa4e1cb8b224db491c618e3d4510209cce5c95476b2ded036fb0b1b7f391be70465bab33c63e50566ec0d7e77eec59db11c517ee32a5efb8c48837dc417f13fbe492896f8de516873272febf65115d5af5e92f53c0fd4c1357420a905c78c8de0c3251f071169d8a64d9785d8ebca48165299479b22d0e1159e44ea4af0dd783e3fd2448e60f8a7b0ecc2b22c75a28aeb37e6d22825757820b4fcd291f2515e4693644abf6f5e52cac95a755c140c3bbc6ae429e535b14b8c6118866118867d769e0d6d310cc33029312c1452da1d8619e96d4229a20b2b7b431bc319d7252b4b47467518fbf25f8b8818e1baaeebba30ec4ac18561187661d7f5ebbaaeebbaae5fd7755d17865d2950fdd8588412486c5f6ed367ec428f8d457461c7b6c7316e9647964f58b66cf92c33e77ccff90bbcb187c698f9ab08bd02e633f33211981169626c96a16bca9b1f20202020202020202020202020202020202020202020202020202020202020a01f2a2733b7acc0c52d5e47be5884123a3616a104c9c8572412b92c3a9416cdc766c54ca4e1c21231bc7e88a52be5028187c34f50ab4322160505bc13c74e1e36683402af64d91e28b056aa21f6fb7e3c55121fd62a14026fab2cce0f76747282d8ae036fd7d855165a3eac2376dbf887cd584b04b57c28d54182aa6707c364accc86fa60b4d666e52f67e351260bca2ae4afd69186790a21864388214f23c4929c2c202b97c0801e2cf6c9d2466feecc15c4d30c047ea7100ff89d3170c0efb4810e3d7a5f6a219e6ac8f89d3e34e0770691c3ef24010e3f39423c714d8c5fc9842b9f00e35752e1457f338827ceb9e157e6e04a1fd4f02b81b08016bd2f43104fbc52c0af2c010dbf7205f6570ae1a2435188a74625e0b79520e0b7b570805fe9438b9b1c114f8dc3e2b791a0f9ed23ccf0db4c98f9ed233c91a67bbf5d104fad3afd3611a6df9e810cbf9d8315ed29114f1d6480df06a200bf1d0202fc7609647a7b9f9310e555fc721203f8e528c4fcb2121b4373e12f1729fd321201f8e52304f0cb3bb07db6413cc91e5992309189b0ec02187e1905b6cf2410a2bdc040d4dfa88405e269dec8926cf98d3e2ebf31091b93f0d287114f7307c78b48939de537f21cc0c4af0cb6636ca3fcde8448b3fd14f1346122cdbce65343530880973e0074c0cc8cb62303bcb401e0fd72c001bc2f56bb89015eca00f07e306ab49b971c79a2947e5f0d392d2bbf00f0be48daa300f0521ac0fb595ec9bb00ef8ba4a90480972200bcdf01c04ba2292bdf0285234f59100bf0521af07e33e00459f919f0bec84c75022f3581f79341b502bc2ff21d244f198e2cc91b00bcb400e0fd08d041321d64658652015e3a805496ca50563e06f0be486c254b02002f0d0078bf1278492b2b1ff65018c04b3f00802964eb469eb09ab9234f17eb05f0be80e025d51bf9dfbc8097a200efe732775ac0fb222f1da9f9c8d3c502de17d209f0923e13e0fd4893ae80977e2ae0055ed2bd34184efae68f939d26ac543d4141276db94fbbc1410e8e962a5224c6b4b41168351a2a282727c6f0bf1e28b0562ad943f688314c533dd0c9c1f1f189311caa6db92e889e80dad01a8a6a9ee6f154497c58ab4e75ca6bcb6d383fd8d1c959b224c67086ca5a90dd643659cd6a15636adb6d9585960f4b8890189333849e1d1db6611badb6c5aae6830d81a5301b243832d612412d9f1731a62d377590a0ead9b9301626c6b0e61363a41685ad46069b0f385ab0528995f2d715be3ebfed49f369417962112b7f4f36763031b0d07658855c1169eee423f2f33226d8d30a5fdf87351f796de712c0f2a36a43f50459d9d20045c8c4981b7cdcad7857b607b0311e81840c36cec4951b7cfc3b3707308d249254418912254a942851a2448912254992244992a4d56ab55aad56abd56ab59224499224896a09cb7e9da47d4de18b1dea70197965a4ecb01fc3c4f69b1b08b26dec3c17fe93ff0cc089cad20c59c5ec2a6316add3436aef344f873daf4da4bb08b780d02e7526ed6c74d8d3f6fcd47ed9ce1ae9a68137a646afebfa36856f469afe507a6467ae5949d8ec6de4929e8cebddabbeae734b7290943b263ac526c766e75ec413496583469f46bf2b62e8c9647624c0b670111710b31f20b2e8693b88cdde403ae4ce45ac7fec766f7bb73d34059b1cef261f7b0f614198ef491f64b57bda434bf8587a792c08291bda8305807036eb36eb360b25259189f3d5953d36b226069816145944861e78c30e04410a93a2595c8d0e0686d29cdc7de7b5ca331934e9b3f0e4f75301658f3005a42860ec92077660a3e82fdd38cf7b87be7ddbb685b69b6ca16d236ddbf6996ddbb66ddbb62d852763ebb66d33d9de755e0782db613c199b075efa1a5d341776b2ce73f5da2a5ba99d7f64ab196b3a26ab6b544d10f55e8c98183aac4a9e9638393a58952b882ab25f550291a90e7fc498ec5a95377da47d5a6033243e7afcb0a454451a6935a949ad475a4d96b26bd7ce9185ec6115d9bb6ba1e730b1a1b7775bd87867b09e67e2fdf34c4ce24ae5dd457b6fd126ee1e0beb7d86e87d26d274f73ccff33ccff34c0e7a323c13cff3be66b52933f9fd6e62525f3c189f778e3bfea409b843777777777777bb783574a8d6e830bb11a8223600361a81c2b15c4cc7b53979f5d5ef7b326477af0061cdda47643a998e6b90d72958e3c583c1e00eb617b8830d1fd94e4882eb4804e8fa488759b380903d93474f549bb8937ef4f4317bd8ec5289985d2e8934dd4fac924bd82ce8875b48b2ecca22947aa7bfa1d3ec5ce4032fad81a24fef3d7a36dc30808ec9457e6cf68e3f1d663182ac32c05623ab549ac65ddb34cee5da8d35755c25a5a4f784f62f2f594b09c6a3902e5e8c094e9664954ad5a8ef239164a358c5aa1893a134909be95628ac16188e21c866bf2bac0c55c9a9b5a669b44ddba6811f7d18ce155df6151e8c14968b749831e1e3567458f6516554ad1163b2cf4b070f9fad408cc94e81a8229b2479c2d1a5ecabdbac66b5902ec99e41b659f16048906fd847379d611691b18d59d068d3bc0fab4bd925dd68b338f0f691f651f1606035f6d4611fd54883acd2d2d0aed366224d6411ed9d414a95ece96f26d2c4f9eba35f991394149595cbcf1059442b59c89e2e6557a9b14b2835f6498d3daab14b9f66c293a1b5903d26dae56fe8ca9eec9d77a9e2c108813bd89a8037f4eeda499e0ced1eb8836db33acc6eb3544b7a56805050033bcd6bd376292b76c4277fe44648454e9c0a651e928e8a8dca2ea5ec9ee2c9c8d1c232cc0b1cddbc24d53cedd323a71ba315c5934141ef26c5294e655fa9c177b14b140f9b0eb38b3c1858684646660f7f52d68379e0bbcde2538e71defd321176e4c9a0ef8b520c8471445e0c1a92def785957df04d277b7a7ae8bbdf7e07b28d07863c180dee38c755bea9ece38a42f61a8d8a34cda34df3594dd7a24f356429e369118941453acb62fcccca0bbc7949223126bbacb2a7031ff6ab599d44f69b302112c9470a5e1c305b373d6dd3a53238b0bbfdcf83b1bdfb3738906f28c83e9a6dd8867df00d479b522e52439e66bad467ad228ba551d411ebc1f0dee00eb6813ef4f6fab4862a0f6c3dd08697eaea8a18d3e7ea56af0cb65b78a9cb4400e1548a735a7478877b6c866a138fae01801783be8fddce5a6b96f64bd29a7543aedaa83bd4adab57143e4944f6d0ecd4bbe1c6d79d7a373478830377e8303b0f6c37d04687d929b82244f61a6dda9eddc60e6d629556b9ad524e82cdb808a7e4694597fa2d28cf478454e44652363bab64475b48ac8ac136ab6c76ced46d97757e546330df75878c3cf5912e65cfb2ec5166e761b367593fbb8ed947b26cf36048f0eb307b36b9e641670b49c84216545998c7cedce7f37b65e5af257cdc4f5cc23cecc4d1a5f9e8d9401faf06d2a1965d5cf8aeccb143fac4374648453e2252a74ddae7250e220d0ba40d228bfec12ae62715d2411ad000d829a91369e4e739e97939f0431e0c3e66654ee7c160ac5e56460c0363e85082b3e2c0608c2799134bf33ada8e9d3db64f9ca0c177a3df29b07162df45372895f005c9549b80f429d4a63b772c76ecb1775a67489bb64fee8848d3e530f1c06ef372e05ffee671ab917450076592d5e2e6962c1612bedb4196f553a84a963cd225991387083d479e4260ec527fcaef9324f98751aebe2b59ac0ea7910e6faf268f36dd5ed9396b224d9cdf41d2f3b3c4ceaf0cf1dd5eb591364556c78ead23bb5be7309288e49143e4100f468ad9e7581ee970f2b0f33d7974382511be1bf23c7050ebc8996a1d3b2f5173499b78449adfa171441ad12f98d0af8bbdd127c5dee8e3d91b7df8478cb93eaa7c835a412c5d07408a4d0acf5ebeb97c336fec25c1c74873f23b7ae85c87e443e94cf0b11de9f82aca43f512819781a05c542fdfe8b8ece51b14906f2a8c3da939306047ef4af0896e6e7e449a6863446c45355a89230829d1a7e8f3ece520fafce8f3de30390f6c5962c058efdeb7cb2133ce0fb1d7b13abfd3a7843e839dd20b9bb93058eeb38a3e62cf8679c4e280b1d37ed5c4f2fc1163e84dec57434121fb55af8867bfdae574f6ab9cecc1d9af6e3e9bfdaac6a3d9afd24e51fbd56c4966bf8aad30fbd54bc865bf3ad926c650feaac41163e85df40b693f1026c6d86f461bc1d93331a6ef7177da196c9fb4e27ab67f91a889ed15cc9333814d15057c20052b7477cbfed552063723e9fee925cdc30a31c207203616c1051c7bb9860b26b0a757c6f28d3e947edf25a29a9da7e720a2e51c3b670f2c570d8e0ee7b18a810eb9bbfbe793d939881a0e32190576de05b64619b98625b8c314b5708d9de79a89551caa77811113913ae46139a2b415b79db713978f2f3ee5dad97b40a441d6c051ebd5a04307980694a3c480b1dfc935d0030d271cf74b14bd1b46178dae11184d98bfbb6851fd4c2af659efb91cdb6f285afae8e97002fea0810d2cd1832624c90217945882869303d1030d2720102a4701632cdd1098633bf7ecde10298f57a91bf8212e41438d091a52c0204e7e729a7127f5075e828618cc9f9cd48ec10512b1fc13302261f95d14be1fe5e4e4285496221f8893480202e5409ca0801f89a412b59653530382effbbc1355cf4e18d22dd42427bbc971efb87b0f4929bb9b8cb6d95d94bbae77dba5b7711cc7f137372ab9300cc330aca194524a3b4fe3b6ced3b84ddb36708637372ab9300c432fecc29a15ba9da0a4a86c2b5425a543f14eb66b5de7711cc771dcc7715c88bb0917627d4552c5e63ed31cc7711cc7719cc7791cc771f7bcaebb07ced0ce71208d4e03eff61a1bdbc993658f2a3b1786611886dae4c9de25af7979c97b31e6e5bdc19d07a694fe86346ac86b7a1a774e932d9b5d024122f14ebe8f372ab950158661584329a59452ef74f334dad18e76b4d33aaee3baaeebbaaeebbaeea3cea47becae7b8b3669ef58d8ee33c4ce7bd7755dd7755dd78dbaaeeb465f379a31fa3aca514ab91a333655b8cd6b5e729bdb5cc94dd620b79d1ed505cea0b3060db90541394ef328a53554a394721e37eabe6da36ee36495a146a9f68d621a9555da300cc330d434da76463bb92028a534729482747274e555466560ab3368d4988004b8f093271baa9e9d305c7dabaf46b3e9d128297ba4dc3cd9731a33335cdea5c95fee98c7813bf8d469f25b953684a19e77f123afa8a4a09cf0755d35dac43f4e6326d26ce7b73861144e61155e61d299f9a41595149413be34beaeeb0a75e7bcd8813bd886c01b3af7eb244fc6758f7ff00d4ba68603e905ceede607a5e08e69b9e730b1dca587691bb66ddbb66ddbb66ddbb66d9eb661deb66d9a94524a29a594524a29a5e46a36907b74363356abd56a85715bcd86cd7461188621a7ba5088e342dc6886c96ab55af5b009713fc4181fa28a9a942ce1749885ff28f7eb02b9c6a43b77aeab6cc33d5633624cd6a848b3358ecdde3e449a08a46be28c950f8ad604b16d1bb73d524d03e7c6513a3b906db8c7d6c366dbb619abd56a45b7aedbb6add6e8401a9da7d16ea3dda6d1adce6b9817e3f6a273d3c01a1c48035c11e2cb3e83460dca6d94dbe8acb267fea4512d43765a79601be3f6aaa12adc9909373072c602a3daebb1eb0c184975ebc00dd321471de4a9e38c2acb4515ff6016f293c8e54987d8439af964748840a4895492624cdf1eec75a5e64f768ed296c79753fa42e9cb895bb2949d656cd5a05cce72fe0913a41595a7a09c8cce976993e8fc9df92d5c2ca04dddf92fdac49d8f830e119841a34f3fdf469b24b7278329a52d3a6cc9d30bcc1890a71740b691a5ec20a5e0173bb4c9509c05c5598cf841c7926c34e28794e566e7525f2e2bfd6bfdac435cab5857b97bb57ba87a37a9a17fdf475584524f9e5251ae5253be52554eaa2b3751493f514dbceb89b3d47e4b651b79e21c975f92ad957fba947d9e73e49f9d5dc04bca5a3216f05296fa72b627b00f7cf42ebf12088a5f29846dc9de419c4b658b82e52d9f9e0c1467b944719673ddb9d468a31703c559eea25dbe83adcbdb4823b12c77d12fdcd575e51f161d737e872ca8a5a2a82e9576e8522fdb526ba067a9fcc3411d663f51794987d94dd44675989d947da5764ded1e1d664fa95dfba4f64dffa8fdd536a98dd3416ae77498bdab2d242b7b9d3be93e1979924c88a59cef09940a1f90bda41293071256d2488cf1be22c4775dbb077a6c790907998072d5619425eeb2ea3091abd8a1279300a5910e2febf0f0599377ce0f7b09c9c9c9b13e54602f15975170234f36ba74bda33fab252b56508f961c53ae508d0eaf73b52df3449a0db4410379e06bee841a46ce75aeb695d2a672908aa170912d2c274c90565452504e46a2cf24e475dca6d1eed9cf7adad80b858b6c61396182b4a292827232127d2621afe3368d9e9b1b43515f4e6b6b75887fabdab9bab55496cbda72976a3bae91b4a6a67d74e9ba6c1b79faaff78dd74d2a670e0c64efe43929a794b273a92f383ff66220ee6122f672a93930c079325c3ebfb97c622e9fc7ce4186d828432f3d7db4899ea8d18576885b86b263974be520955b2a0b611d1ec23b2b2a9589545675781da57291caab0e8d1cf141c2adca3f1cc44b1a559b4797aed30c641c127cf2b46dda14d43f36fa57d8dd35cd28cd302dcb349a615cc33d1827e79a81c569134e9b2207e19c4813635070d2b6b928cd28cd302dcb349a6112c5d22a478ca0c7087a5cccf10273ccebaadf94734e3b9961a05ac2d7e798861e9bc07a124844f88030e38319e2694696ae7b30a4e59a03acd9c59dd83fb0d7af0ccd1eaffd80b22a6c34820339a373b4a3b4478733dde3c923cae38947964798c79647138a776a06c13760a72496d136d5177e4a7113367fccd40432716690201d86e0637b49244ba44d26aceaae5f5e5d3662afcb2c965f3ec23e7c534de0a9892a3a586f1331511946f948a451f9757e42a449f9bc2e55768d76f8db070878335114bc5939e9a4fac229c5afb790ee4bdb69134ff73411ae57ccb469f454878392d3a2c33b23f073b6cc93664b0c42cdf9697ae1f3286d026fe2f32d87998fa14ddfe765b6cff9162edad47d7e016d3af9fc8b36a17c1e87369df8bc0e116813cce767b4c9e5f334fa94e2f336daf4cf3922fdf264ccd19c937413866f798ada2959ba6acb592acc4f5496a3d4133fa928efeac9b9ba55937bde43f5bb5643cfaa76ac663751b183d5c45fa8e045f5055a6b8ada40ba74ed204bd749a3cbbaa0f810296e22c57790d4e70aaad8b59afd856ae2a1aa79f5fbb69dab26b48e7e52bb1315e5b5d2b3d41387a92c4f51654b96662ee97ba9bfa89a388afa72978ae2b58ade525d0e535bfe4295ad0eafa7a8f2a74bd768469e76e8d2fc0be03c08de6fbe8297343faad54687f32fb54687f3282a8d0ee75dea8c0ee75b6a043a9c67a93a74387fa2e2d0e13c4a7db100172d3a9c37a9332b6462083b9c9f9f266ad792a7af4b5384fdf4c81dc9239aa33947141b8db039a240268ab4a24293f2eb9c026e01ab209a448c0396010f612fd1593447738e28361a617344335265191dfbe82b9565f4792a259191dca1973c9166f4ebf28878ea9494570feca5239990238f808384bd421f853e1a9d5e9d4abd215aeddccd444d1e13880964ae60962004346574facbcb41c7e5c1181dc6e8210612fae8ecc9a03404f24d871a98832dddc1d3e1f5d0f4e171c4d19ac3c486aed58f7e343aa58f1e0cfad568bbd5e16d2d8c764c9b835b565bc9f9ee44458bcd1ae66953f464300579b690b2221b79b6d0c372d1640a363636da1e2c075aa263a24f1f782c8c8d46f850c472b453190de9810d7462c042e8c86162b5e7c080ddbe731f1d9d7a358c1e4760d799e0e391f78f7aa79f07c2d8ae04dfe8d8552a5b1ea6d52e79469f3146a3518c315ab7e839edf6edc1deebf398444d709e562aaa5711db271ed8ebddba6438008fe2116656041654966f18bcdf08bc242902ef2f0cf67216822fdadbad6e5d48108934a2f30d127bf1139809f6fa11ecc537372ca483d88b81881e451507cc44b18d34da0dd29a749dea54a73aa56935a4554fab9d5639ad6e5ad5b44ab59a6915d3eaa569383418b6dc28f418e3116c7c4402c3b22ccb6488a7184bf122cf06eea43b39e122ab4369814171f7d5ce49eeac68c91f6e5483d86b749b087b35900eaf4ee1e0bbb2d54992449aefd765ebd2ebd3479f48a4201766f6b0994144162b58c575935fdeafce04826eb524d83a075236b4d1081f822c173b46d109ec03df243291e81d799a28894a7d2a52af76266a14234d94275ed2a5eb3c688fcf87bd52f6dae11f61eb3ea49ecb374068904f086988bd5a3cf6ba8aca2fd145957f5c973b455ad792f0e7484847d8c84e4f18fea4d6654520df88e013fdcad86e896aff80e0bb9dea5403699c4813faf52622d2c85f9f1c981e882799fa214e14b3904358c5759d16e49cc05e12670422117871c8f04d0ed84598283b9f135517da4976a34506c61ecb227ac622fafce81c27aa3f221f1929ec4814ade82eda02f104c3af97d4a8b40b98aaa39e54684604000000008315000038100c85844291882ccf1359f91400107f9e4c6850198ac32889911433c0184408010000000000000088540d00c82c5419a6ce9910602a482a75aeacb52a91fb4d47a4d79b49ef9d3a9c6feb83864a76b72e905c996fedf6a1bb856015dc3917591a466514876edd504363f5bba96a6cfda1d939dc5e6200af07992cfb7eeb1966ea8089c6a6606a1930426cdbff27b6272dd44e53eae83372574e1caabb2a42459874c032ed089324ab20307204155f403872b1c7d30daea5220a1d54d5fd5bb5a707602b11ae0c1162b63417836b514054dc903e83f81f486a482f6ad026b8111162bb9f76e3e7ccab014096e7f47af6fc940ad4210436b5d518694145bace06cd277a081e46899d2e98d4fbdac767cf674791232720a5af0c885aff118b0e5b5a147da6f7074a464b8a6a95de3380c73cc79fe8cd3faaab8c82936a4fcaaab3fbaeb14bdded2abfbaaf7475bff013c93c040ad2f8cf93351449404a67adc031c55b69e6ff61b6563a5b4b4fed0a349a4865af976ec1d6acf5854f6e6a1c6057f559ef5ee6b123c7e20363919b0e65516077ea8089307293b1e84844378052f5ca6f8de200a1661e61860543104539ff8e307ef415b187cf01ba4ac1ea11006ee71e983c0711be0ccb89ccec956605e0501c132e9a90e6c4883410123e12ea60aca96a9b58ac2ecd060f89d99f59321d9923849421d0144df507b9838ce644fa13180c5c99f91aee09fa6bebd99f8fa66de19f1940c864f4188eccce0796e6d7b1449e70a63ffe9f3b8e8a73763027f15c6f8f96f3ef40566b6f3eed4ed94b63e8ea8e47d8dddde5bbd18a131810c88486b6f11898c563500d51a18e908f40da5dd350f5851f1dae7b69d0fcb161f3e320f37f9124072504a05b293a9141d1414ec0c88655bc72f79b21b1539521329f4daf1c2a48da0100640ae701953859d43568905b6bcf79e770d5c0f7450d91b4d90867d6c4a378019a8ec1afa277abbdb04d3faadeb3f07c361502104dccbfbfd01e0210ab488b0916a756a5bcfedeac720c23a1fb4fb424e521bc0fb7c555f03ba05cc96ab1f23ee732539c926353755dc86ea7349f36771e90dbe6c02ece76cdb3969db7d47501ac8f9f564e08b727728937004d6207d8ff0a96f52842785aada3e17baf4d8a0fa3c9e878dc031c0cc1d27afc7d01ee6256ba5760f703b11fc7f373348840d6966bf7a24d7b97a13d153eedab402e5acb45885b1d46a5ea648ab09581e737d119812e2a131d15ee3bca99438d44ff7a1f7fcf1c59776a001f11f03a134137f56be86381093dc96495a98069d5fb35bf23bc66da89023710eeb7173b4c838bc1b70dd30b9be4d6f30f47ae48f1f38ab26561ed1ebcb5f81b691ec3f67e1767b620beef9e941463bf389b5c21de17dfc4d57146042c63e1e286597807c3d94a2ab4873135ce111a459dd5c748a916a24ee34b2eec1d5c1f63ec6de303c303210fa50b4ffdb9d9994f524c6ab8f300c260ba8d02528338bc204c1e229e845aea88894cbda6c4edadf95d81c15c2394c5099af7b5ac38814fa959d7d5f1ed6016723778f82e18dc91f014764b76243c0b93ee4fcd6c1c7823fdf3733de51d79d203169deb2d5200d804cccf6440939cb10c201f0ffa2f823ed5dfafed9aab38f8579552d84e5d5b6b1e56c26fe7a2d1db1cf906444585a9715d9cb00058c65fa93fc17cced6c324162a90e2627e3503d189ff0f9672fdc023563da3b5f7dc9e8b855362a581c64752f67131a609eb0777a3296480469f1e4d631800fce0201cea7fcba64270254b1a52d430b0f43cc557fa1fa3909f0dd181927ae88e5799684f427c0a1708a981ba3a9c4313661753aad2c544f4e5dab5ddabff76227dc73e24280ad93e67899a5bb8f6c6622d8c415d2904341088ea3963e72db6d8c17ce9b0f02743f12843761b7e21672647713c5c47408e1cfbffa361d8cdbe0db15443b7d14009aa28cf9b96cc3f3ca8f2365cf26334f1647ba000176c6bcbe192a5e196171ee7931fdc3e7711656c8e85f3664c967701306553bb930fc80f1801469f7d772ada038eee8ff3e5bf6c38d969043b9cd5c2310758f54450acc47ff9548a39d0d49443c12888b83b31a3409840fbd82a1bc54bc74da231a8dfa0925fd7c53a40dde6112c2358b58b074003677c2da2a0a5677224f27ee95718bc32386842776229314ee0b515912aa7300aa7a613ad23f0a17eb3f17e89a6ee7f8e41662564b06920a2fb645ca6d913155543581f18822cd83f8dbddc0866167960059f83f3d58901bc9b60fb4471f874443e823b3b6a596fdacabfff8a85c83ec563bb114e9536a220c8f9260167bfe79f93b4752b7208f8c9b3304807286058823377bd5b26903d468293e58479209f304aa7858ea0221150c3bb8386170395fea9fb9a8aadaac13ce1273083f034be5007f1311fd0f8908d8e9731976700fa4085a1ed11846b8872a9669f826310ac4649ad9228cfd6586f8d1ea2a9cd68fdaf8d5cdae5bff123ffe4eb4074d964481e5c9f833ae37ec9373dbd8e8e3243b81754680e7d1da0ea80f73d6e6ebb8405db8d70e73bae97788222df6b71f140415347d6743001c0038545cb6698162a099022010e8187759ebca728c40f47b8c3d131b75557f0fcedb32bb0898456ffcd24148a1de41aa7e8488a22b7a7d4a0c9ca46d39a41c6800cf60290f4d1ed15a4cc3678f4c1d3edf12c45dd82a8499959cb184b22f6a777c9a5e2ceb716bf413a1751557cd60bbddb571f948ccc9a07a7c428d0749910033af113b398575904a0090c91efd841340799bba586b3fef158561696e55aeac6b51707bf8bcf1eb70f4aa0494b25b2b26c3bab4cfd463305ca32a3c3511c2e48d2a4bb061f7380276f4334501a1d62ae1fd040911535b4f0b116809d0399c48c70d0db993e770916c2a24017f84874b8f93539f8eb2f51067627d3936699dd124a92f1d6fd6979bfbbaedb4e42920fcd13fb98cdb1d89aed6b25c926db51125b45c72dc54a284933326ba2ed2ec5d11ac1631a7874cb9411278237578b66191d05229ae532a4ea08c4e9e76ade452312f4c009d66924c95a17c5ad8108e75ca9085eec56fef439eb0ad44b91cdbdf7a3d8b1412619cd2e13f18910c00bef430bd221ebd6ab29c8b5da3ceef1856a09350997f5857a84ed70c9d3d7563e9a6bf127a91c21785708d3bf3505e2e4748cb50e95b4e6aaa9a671e5bb8b380a5b97a97d0938424ac619a68d9f80f57c9e85166a7cf990d1921715c538430a85c57039770c54c69e33b37fb942863c08527f36510e5a85e121cab20cf12214c46a3be37e95825827d25d9dd1c1200eb4682c9309e52614344e520a14fd054f1f89b95a32e2699f4581f154bab73f2a7cc08ba0d91df11cd3d142559f7a60f230d9f6f2dc6aee1c0216676a75bfe3292d2dd98df18c0623e3803951e70409332c96757a44a4181f21b42acc44e87ff1ce66e8ebbf24ba5dc930268345b97c9ead3656d00a4e928703cd113b21239df957755a019d411cedf61558b98e4600bf578bc568f2adb58d7852dcf0f8d31976db38503b9fb80a53863668575c6aa205864ea56b09e840a41107026f4bab9c60a062e55c39f4fa810770dd8b946e51512b71320b2d9717766a3c2536ef46f83dab9c4a6e8056dde884c3f5b2dbbfeb8ffa4925edccf8008a8755bd43dee05c56b6bf8ef86c06720691304aba776a3e76cf76181ba99fc5e2d4bdbf76867a5fe37d57557d19e0e000905378c0556bb5aa7c1bf85b558365165aeaece6ad832621b0891007d8f7f9416411161c864148f732a12e960141780f83f8dc3842a4f30b8580ce324364c99543c8fd044434199a44a81e96227af99e45d0fe1c23025ed9f534e2d21047b42c8896aa4902892687e8f472380e8b573c5c944a5b5fefe3e4ecdd3cef5a49f268dc5d6af76d967a17826d10c587b9ae1bb3a7eb6e5c155da5957b381e14d8aef5a1814197c7734d24fc58d7d77240fddbc3876452144a3438471525e0f880ab5c6ec51f2d0d0f2e58fc0b11ef3ae441b1791d4401c86dacd77f9225627a74db6f42e30151ef1e3f4cef89d75617468762dc65a1d6154ef899b1841e9fd92ff75c013811383dc754129fdae787340b9d9fc2b681fd1f2fcd3903a7556de596a608433d58837fcf76dc9b0bc3ad1aef81bbf6051230194566c10f8ecb256c094767cfef27b61533833a11862be8242758e4960eca6053daff10833fbfef1b2a157c0ce6f491bee9dc370f8be98ee9ab7c90c63fa8cd36c6ee38d8bf36be95097084f9361421da7a9368c56eefae01d1c84745e757521242ac32153e5240bde95be7a05b786db83f47e86e6e5edecfe5a189359c501643d93899c28a899f82b11e41cc0703fbe1dda802e21e77929869f1e61860599e6264e0d25301898e5fa3b3e8c0182ed80acecc40b045c59d4c8d9828a7a19d686b21ee814875c8e91322fbd73a2dfe5c38f749998d64930b726cb39969b656ef97f1086baed65b4c74e5a7214ce024a2038ce806d0235b18b6d08103b0995b7322611dc1b18b91de94df3e08f2c84b769c0f10f1268a19aed9d27b565592701aafa9ce18c51ba73c74a2ce9d640440d0c8b1a10d062d380d06abf8d5c02d80f76d30226a30118e8557a8e85645ad973c81de24f32a88a977ef851afb927d2a4f9dd3b7f6506e1963f3ac4d9490b7d66dfea7998268d90a06e82ed95b709267a1e3423deaf4aabe6b01458818712ccdd9ab529122b3384e8208227a0fc0be25e15b4d1931fa547c872bdfd567b5cb05ea1d3274cbdad4e62b9c4e9bf9cfae82433cc76fe94e6eebec5e9436dcde661969f0f033ed4821d4cafea3e15b96931db89ecf6f419f0eb111e8a41d3b776eb6b0d0cfd4f7eb39d0e1679d88a74e85f73fd36fa6ab4123a9754f0f37419b7f76095717c1bf30d523301992f2a7fced7ccfc3a241cbf5265d78b4077875130870716e64c6339518f19a63c42deb2b607388fb98eef3cf3efacb556e7351170fb844f0d60b2ce86c5da6624ff3a06fbbf4a3c555cb71741bc3443bdf8f20ab8bdead4aa3f57839ec943adcc30524e774168bc41520c27d0585b04c013c021539e6dd5b12b71c2e5ea4b783f4c68b2baf78eb066477938b21efc156cb3f7488abaa57772bfeae45314252a25ef11945b28a854371c83b3ac36c0e6bb0309595de11bbfd641c2b553b1a89928332045f7dc7e74d63c9254c9c45f4d5096eeff04a7c6500b35023a2a12763dfd99f471bfa8375b09dddf70bee15c48d58e819c992189755fc3bfb0a9b06d79e3a7b78ea590ac5896daf2e8457a31700e99d6c66082c3c561062a0d9accdc2c8b4a8b1c49e5197a8e9e9af32de03030fd4046a450602bee04750d37c09d038a98abf7606cbc749bf4f8688bf0368efb6a402677eaa6b660073909e0f37162aa966fe4fb4e033bed614ab016ec70a8f2bab030617fde73395c34b6190aa04d51713a4ea9f026ee8476fbda117ab9bd037597c299c085ccd60393707ef8289fe2a5b1cf988f75ab15a873bbbbcf7ecf6d7faf625b4280a143f577d7ab8345ba6f16c4cdd88eb9ff5e436c8cf6773e3b257f1de2a4e21536b3b628c1ba2dd7d32525da20676c08eeb3beead5a5e25b1ac9fff78d75d8c9899220efcce74a71dc1b08c51b7fc282fa54c1bccfdd2ec75c1e83270206e722415285c846c1704cc0a450024a1f756e584cf787553979f195a6c1c34be63292dc5633854ec434a2043d1668127b6168a2c00908706aeab73b12454bb51f14e7635c734a1e4cffd5552e3124c72bf49deeb4fae53875e0575b4dd5340b6c1bb74c079054eeb625f29020d0ff7e2a112f0f19725ed02f1909a0b534054668f24222bad4f00d469cc73fc891b5964cf14d90282c999980dee8b85221ffe304d3bc38f95a353bb9e40e998c45dde1e60c77405602440443cd1e5ffe59d473da9e1ed6f495e0ddd806e2b71781fc0f9511cad8fa4b02cfa1f0aec36b0af13075e9b2a74633a69be908102811a437c5f41171e2d2206a19cbc8170293aba148e4bc4120f1b28d84c4474d72bb8a1392e780b85c2aab2346d2bb9f917094fe04a22ca4f7665f661a350ac8c4080fc8e497eb17189bfce5866dd2027bf360f39b34a1ea948bd8f4b54cc86628d8127dcb7da98c55d4c080456116fc058e4e7ceb023ea181b9fcabf85695656b0739145ef623366f9ced5d19a1966544649d559a2133956f6310361c0fcee768703201613990d8b0df1b1c5f357e676fa30b6c91713ff9b13d8fdbfb03fa31adfe9615ad39cfbd340869abb30f5bed5eb637db3358a437367e6b77b57a52beea36e3495d312d97de4f28794581cab9dacfe237a8ec7082e99734940c317625992b6401528164dfdd3b58aee0f29ed7ea3012e919a0a4178394a3b156446ede0695c338eef96e63e5cd28e00c8ebf3ef2a9752d1d3438b7089f564c518c8cc9997ff648535e82265c28cbac8ca7cf4799f7c3a207fad37a7b8e3349746f833e4ff4dfc9ec8899f7a394b4570f1d94d42a76a5af56162f7c47f164adc2a3ab3fea4c6ad92672510dd1598b3b35be1b8dcc1ed971273a08b643ea775122e9111020cdf1f3d48cdbb1fc449e0e8e9ac76e22f32d44db77e712e69284424cdc50e4b06c334788c2a7db84db550cc6b2c62cd5bb72c7ad0ba5d973c606dfaead25cf4a9e0fb7421e0b9ced002c91cba07c0c60dc0cb18293153eee6925347cb014df0d8a7573343da29b296c8aa34411b5930d629b44934a7d71b8e3fce98d3256df93d9f9094239a33dd5b095875466d02f7df5c5f518b259b2dd7e697128efa45c1f71b05511118f1c5fd7563b556ce4956c8c6dceafed26de9f2dfb8b3cd4f745cc2706f7fefb329186263225248ddb3ef85799ae0538b35958245920b7e39a1c28c13c0a87d6e28b2358055029daaf5df09d3bb0ba5eaca5ff65a455838593539990a398949b9257a734e48e9c79be44e8c6d89ea687752072fd2d499be7e52caf8971124820a81a61ffccc1b524c8cf90d8d6ea560e05420ec3ad03974a974504669e178193b30196ba755379d69bf304c2b54dc246b11b8ec84e517d5b28f73ab6eb0262bcd65d48e1c458f36e4960ab12b0c7125301715e2722896770c9fb7aee1d6095a61d264d32aa44d622339c6366e47a21c9d7fa94a0947dc1c7867d955c8b14aa32a0ba0ec6838b86f7857683ba897b0bd4b31a50514155e50ad411ca48bb34294895716e47b1b2ff8a6bbbfdae3b39a30e1977d9230bcf3446e1b0157b6b7005c4d36653ac9028d851f888015823b6200cb50ed8aded03ff9cb0a690ee6928652413df89eeb1c6ba3798e2436d5f3ab4696306420908f27f15740a3ff810b5420e1954c20803cbd47d57b8bfbc769710ce439d01868d37c5a29f4879d489f05b01b2ba71bb2cda847ab412933bedb5f3f6319569f68c62bae45cf456992f12111ec8934f0d4e5ddf4e6befdcbdecf4f79ddcdd220e2bc0d35797c483ef165be9e3c79eadfec9a2a761ad5673cb465e1491f4910d8533dfccbbf1473574bbd9b5ae5a4d508577d1cab3f094f47e5534944a6d075288f442f7533861cb0753b49a9d5a1ba150f4baa5169a9d45b4c950ccd1dda2c1bb2523c2ccfee8ecae80a8f3e4d13b30af18cd12f8792769ae27ad34bd3140ccc5b6045dc4a0af411a7d53aa2ed84ebb0d02ede0d3c321cb267a06e3470fbc27716a40015474756cfac9a0a882a1274a6c0fb1a4d79a752b18060ad18281682c6a19070dc1985b5a8272d5a1aea6757b7842a54b2e811332b5658bfdb80d809d0ce37d9c672f815f8d624a430f924a59fc4b2499cd67e0519c79c9566f174d4f8b979576fe2c016b4d4ef6069532c164fc6b08df27c8c904b8b3d25eb141435d30c3ca3ad2f102eb2618e351d42d7c58ae21748c83f5c701f37e3ed8d46118fcf327399d724edb12e2aa1725f9fa26181a33a93a80bef677762b57cf155dda5686af5bab01286f4297bc0031e7ca42c5b8dc6e3a6bd71bc50b1493f811ab883f40d7f20e4b52048cce8a7351df718ac8686a8dc7aa41458ff6ba701a03643cc075c1aaeb9704db9e08d068d8a4b8cc6c4b1ae442c2ec9b9f1cc113f3654ac6192caf9b9286542cbf2e163ad1ae159c9910dc92c02638680aad2bed473b02d5e7bae3615366918f3cc201a18b5ec463e2a868a427a249264b869fb4a1101eee7093e68f019555fe4c877f6977f1483d19e064d39ba1ee5476aa57194c816571ab72b4557cdcd9a99c84c7f1e0aaed1acb8effdf6e9a51fcb91afa1ad9aa667300d79e43d9cc69c6fd9a611d8af210a116378c3c84ec5f2456d1a0df3e130797751d79bc875ac3020bad70eab365ddb4494ab0712107db0556b79e9be5a093846ae946e44733b80440838f128241b85daffda475cc9c7500efe6a5a517ce85f9c349bff94ca4f492616cf3a2469c1fc93639b91f368ef96623c50c19823985f3a962a74f49e8b8e5da45e2906bc304e0b02e08d1a9171a5e82bd4e1bab09d7dcf563f696b44359a232433f7b38dd10d0135710012e7fa319db60fd67fd78d32038bf5f9bcd75d6dcb0302af3b9a96d08a2e515e633c1d26bbc2eb047fe46fb6bac3014b5ddb01140a871cbda643065d4ef70856b243b31450fc6a1166eaeab5ba4de6feebe1bbe85ef993573b6272d732a9381dd075550eeac106137446821462d22d0b26096d9e94daec9f0b8623c15635b86432d52606cb6ca35ed6159b0dc68b98480d6e20653272612ce58b92276010a1437791ca55248303e769e8101a7092589fd77f42f0c15619357797f1b03b1c7da9e5e2d9c9cfd69d1203ae21667d8bad50a7b74eb523a1fcda23b6a18f57a64bcef29c3bdf02db4bbe81180602a8088a7638f25a59a92574c0690ee49321a60de3be0ccb2bdeac30543e9b3999f4e8f2c82883586eb416cb01cc2f3944d405f086124e62a2161ef5471294d775ede07b1f8d9d7de769e2b7ab1290b04687400c7b365dcdafe78b5a5248704ac5628bee7997e1e4a2f1184e346f8bf7eec30ab4d205fbc36ba7d19311cfea9a7a49a79a0269a5f70fa002ee8ac9a59365f144dea2f98e26762eb7ed7d07b9b77bab8aa9b3efc7427d8831cee45f53bc587cf15a8e91130d190fa9b03fd3dcf771276cd83925509a87884efdfe409c00eebfd0ddc067959271616cdac996320a658666f8b28fcc8065fb743917a3cc49fa6d0eb2c8252f9ec5a3f3cb298292279168905f3860a54514e9d0ffef8e21dd90d7a0595c3de87213d5443168a266123afb8c133f281a914218a2d1bfbfe10ffb9f86ce25453ba0bbda18ed456afa45f30f850420091643ac286211ec10a69a95babc064a80230588b30a7ddd89cf0c9ea15286de22dabf678d950555d9b2e8596a3517248cd1bec7909c490dbe4e60afd40602c32d31a2c1c8ede20b057cb82bae5addc7cd6b219b1ff3631f477e56607d1ecfe76d682f6f5f304d366fd6033fdb603298e38484ed56bd7894b09e811f779a22e3b8cb1b92f50c472af7f9c45462d5fe1d58735ce821f3b2bb5c3524a53782d53defb04501a38a74f95e3fd055048bc6c35ca8ade812506b066a79092c11a8b2355659d61cc97fbe048032bdc085d051bf1b3135791a564d2ee7564eb9399c531031694a94e4584ea32bd906e97bc8360b2675639ca9474fb8c51556c057a9acf8d0dfd08be7fc5465531ebfd6668cf943bdd9add0803abea7adb2afe26d6ab923e54570bcb343179e6f7553a8fd67a0f2ff121fc3824b3be6a92e68758bbdbb359e589d2983de810f7f85a291de0d92eb648c139459f993f80a022262b0258718ee3d8436d37bb9661e85a903db2412a9b510cf3dde70248127c95c91d9d959d6aa84ee87edcce2bcd54f15c1ade6032f796a815525f35b0ae81a23f51a8c639a291cdb60c20ad7766fe0bb47ba69e8bd93dbd2761328bcee73b66e691626e56b01d6d6bf924ac6e668fd98020f041e87221c378e763ecec61019c28e55f92a485314eb882e9067b8c02f6c87696228124a8f1a9decd77ebaa09372da4f329d13a5da9d2917ea005e174550dce17ef99c955778187f63a669399be81b2dab9eeb7de9796ef08fbbc71cb4bb983c23f3249b208fc34a1a85cbd8f2496023d91b7bab7299f2503cc3113f62d0a86ae1903abb088db9e601ecc76146b6e8cb90e8c548c9ed41239547b67da44aaef50f04a0b489721cf36e4c20a1a9b30036865ee5599c72e05038030ce907017c031c0f4b7e2c10fa03e407d0101736318f5e8900179d69e94645136aec234b44f9ee24c0d0ea3352a1381839f31fc1319c175520e84e31d265a7459f753040a276a4402deae35e01e591630804289e35e0e7cda3e4b054029b0e2cdde30a777405fb128c857ba717584bfe368a13ae711b0797b3a9d21769ef26103622401493557fe43f9d97f6746652023442721a98befed2091a150c9d56112c794007bcf7591399c1f7c9a30dc9ad99e37140a0b399fa0e5dbb305c7378b3542d56feaad426858f2ccca92410483d8b95075c1b41dc0cef6a8c15c4ac9f1bd8fb6975577fac04260fff685fe3f28580b147381198ff73471581995ff783119879ec1eb1579aa3dd45038b38d14755ab0cff1e20f5d89289963636e3c60f26b23a869588b9f69b0335e6703eff44c3e67d1934eb610f20e432124e91ccd03c80f7f8a353f4270d170e9dc906b667e7eab849f807c39b2e84f474ac6388464f8d488c17db979464d8c4ac1195f66c25b6d7de7717918b0187261a7b0793f0802fef26a47f0e7a055859985ea42238855f432a364e903e5545bb9411e90c065008a63d8eac71f98347dcfbbf4a81f6f49929cfdf272eab3e78945c7703a7bb0b240b885333a79d8dc7bb916e55acd44b0016971308a799231d41c2d89242061d20a7f0775c00e6443527fdbf5303936196e1743ae19622c0f2039424e1901206d14117d695363ce1753cd64d2d2b6160c52ea67b34902d83598d41a030339272156226bbc2efc7225c8f329645c8bcaafc8c8c63c548ebb437114c5167027663fdf64d56e33661da30c0f517a3022ea6b4c16f3c4d6efe41a3560b4426896f0319a956d2803ecb0aab1b7f99fbd08614a5fcae269b5a661f755d701daf845c9264d575dda5e57b0473d8cd05456cdec0bc01ee9ce8fa83af4d6140597a912e52d76a2e36b36c6ae61a0f9664bbe60fa7537315e3020d29ab3f3a03a54a153702ee92f2f4b6114fc753ad30e79d103945dc3186eb330adc93c6b5783634d236644f91029b24b0a356a201cf2ebebb7d44bc3e0eced709552e595854dee5065a032aac269fca6fe5fbb453b55b1b8c0e8b1a67ddf1499d7f4ee677e155f2368370e7d95128a33b9ee591293590091ce453fd0c0a8500a146c9616f357490cfd926ba940e43a1e69edc432d02bb5ee436649a864a1e6d6c291cd20d094488b5305ef423f09ac0649b4bf65d259b89eb259f8cd2f1292cb11706bbb4a4e2671ca8661d5030009ae6a51e3b41e2b6d075131376c7b446bf9408a5b340676b5534cfce88b1373ce2b8e4361c57542d01fa7bf6537b4c51ecbc6fb99a30118e4e87f02e142a82717028dc5816e4392789d59e463123748b19e687b1e1725b8270ced37da8df883acd9912e2cf3934e02c197e9427e06c33f0c6dcef712a015b8774e1b42f2e0d1e0d0ed2a062c85502f572253c6d26e264a3acd33f926760d792c1457359897da5b323c803fe61201200f406425b6f70479d0b802ec41c0334d824289185278ca6970508591231adc006766f58edd183578885a26c63a375f331d29f95400f0b2eee7ca58052077d53096e3609d627803f12a65dfa658285094b07d84a2550acf5882ac1bfba69a8a9aa56880d6c93747a41a1c822285c942f0c9b5ce25cd7e35e10e7de464887866a81964243b43274dda0373394d8b402f2118e4481a68849f8a01f350efe1914ab3549634905e621a758e85786f2b410565132298717a4ae88f2b55b4d56fe8cbd9ac8f9d2ac606c3445c2d6f14500c74939655f45e73a84215cfb3f2681c224635e4b37883b8aa5ed89568d70c6349f79dd4fc89f047598c09ed99751d5634048e0394016e3219cfba384e4705ea6986f71e8b1fc41f88039b797c39a1eb63a2f297d48cd5598286d1cce534b0f58e247f52371c71bf76922f060144a62dcafad1f2b4dbc34ac6257849573833769488fc814a46516d234744ebbe19c90c5cb46686708d35597b81ff526f0af802d6330dac0579edf1c6c87cea9372149512efb8b6bcbb75f6ab52c9dd86c86e52e0309bcc0666e8335b079338a8adb0656661042246d73cf28744a4758a8aa8e0cf543257a354a6765d9e543d92e4c9e0d76ac4e239f372dea0cd10e1b6281a9a53f20b159bf464d3d8ee4e2afa2f2dda4d3d70a24d5035796583d70eb0cc08746801cce70cbfb5cc1261aebd5d826e0d431971c574c1c0381bd68b2bb334e99a37581297102e736e721ad033cf0e521d178a82ec6287792779f98366a658811f8e392f0ecc8cbcf5215d9d2ed85198a78454a96ab6c9b262012557677f1c408f8ec8ff256cdd28ddbaab26f87f5869f53710db8b46e04755ea2f32f6f4261423ad2efa1dd8ec3b438d4c2a63fe18456e9b994d8d544125e8525d8424151ac92b9e36eb818d585c280f30c14eafb78f9e58b77c03c31b86e017de235e757ad4c4bcae2eba9d11e95c3b6d3a8b326d500e9fc27c2014f49fd00c71825edefc5a7098d2a3590d2c205ae46a2a54dd1a1e58e905f8468b472342ba706202102ceb4149b366a65087cde0c3de1b0f2b31ecb4e81270d07a23d79b51300e9ab7de24535f8863ed7b561bafd4cec797d02f6e5b9c2ddbd65e0071289306c03c82efb4954eafafd664b047165a0c14a9140ee501c454cf5e411b3887b56e179e2f11d711f40ff98df304d319360c0cfa959e7472fdec4f4e612b31c766af5177ee7f415393a59e1532d6d62183f92324747794f688070ce9413cb206f8ec4332c764dc3943e02210574b10492651bc0e1e0d55bd750f3c7506188caf0964735d4df9e0eebcaee824d38b448a756ed6bf1606f4fc4262a2f0a5aa26c09eabbc94f8801dd0bf2aa6d40ee537c7014c4558407920c9cccdf019c7ece89e41d0cd1dd81e176c04662f3d08b01b2eeeedc081efcfa11b935a526e175d8480371b43914552eefca14fc518c294acd307387290c9f0c4a286d7d04b95fbfcb92c734d0d8c0894e7b25c8cc52c48f2969a2fdeafc801080bd3150aa44f726681d900acbaa1c31c539c0ef9665409babd004aa4977e9bd3b14e99a78cc7e735663523003f34fb6045126cfe99848355067423b80209fa9c5680221781cb2e580d8887379425f21fe79ac792f40faf0a944626794e808633459c0b42ca6621e32c845e4243a0ef798ce6d692726f830db3801630a44aaf657a29413361ba963decefc0746fe3896f8b687e289f311c5489230ed2723439d791968e839c8ecf9a2651c0c8311779ace1607ce6c355912e07eb93fb9c14593d0e64e37666138c5cd694a6bd9588b1a93741184a2666f26eefe56848f2f5879aa7da467c1e1d4248939f23312c58a53f71751b7419cca3249203b39b556107cc49e2621e4929684667aed98996a04c6731776ec7eff1035edd2a6307ac58ed270ade8697075b6eda80b57d382ed3942f569a6a1830609c2f8148715cec15a10e1f257d1835516e148725091d1bf534fc3bcc45a19a9706d244346875dc1c995b2d9ce5397d9566bde098c40573cd2a5c8ac549148f283b42a1e76230c237b7a7e5feed13fcd8d4686ae0a3e45bef906e48ab2b91b9fa2af2d769d1865d3fcf1cc4493301f2c38f07d70f6c933666e6444e028ffa73893b1503b1f49c2397e912d7ee6fb8f5c67ece83590e8e94bde90c45130d7041c3c270e15bf9ab2259b3283adb9aa64f4d2f37b88f522a42f8cdedeecbdc808817d734db7b70a5c1993c15e48a6ac940b971a86716255bd8373dd9c6e48aa498564000094ab6726661499d1bbbc314f7a1728bef90a05346f6ce46f45b31f891eac05669a8d340a88431a51a0b7ce67a8dd4f31b16c9391a8dec7f46c919363850636746438424f43b923d5c500012d6829092659938aad19d2112e0b170339464c8a6bb8df9a868b39cc73be10c94915f459d5aa29394dc823c04258d8359522804d2fe330061a0763438a56dd77a0860904a7db771cd8c58c30ac656a067756b6d3fabdb109327438509ceb62d14cb6322a5e3cf950eb530612c76a609bcc620da8da86c374b1b4fa4c85b991915c6cd1ba76b29e1d1dd2084e2802d69c3434b4ef06e72a176b8a0e767c0a438af62dac9eb0b0812aa1f25112d169880a24e66515c2099838925754850bb5a38440715036676802e5a81a9d2ca131dd8c1106a23288d27089979e01f04e35da6fd5765aa0d08ce565b7081ab51162361e6b1910d60d336cba028bc751d7a867b50f3f89362b846e9411859e71a365e54546e8b327aa1d8cf32b4638ba8cd2fd40da96fdc0e901c46159922b5f387a46a301a2e34d596b33b1b703bc05385d43d40833c519a27d18401310bfa38f6b98d6df801d2b66e2d368e68ae3a3222ad53e645414115aba6ae100a86d03029a85dd68884e6581ceab8f312deac38b37da83936189b5143aa14877dfa420a33ac5f510e94bf6e1bdf48750df7b440bb5136d65f0bb4fa01d3f8ced7359d516c10bf0894b5a4a0800e18d40f9dbb8ca407f11dea8a13568031a5ef9980ad7c98f3299bbd7e80006645ec67339e9aa140fca1480cf90bac0d8e3b2249d297fc324b4c9522ea1ac87425ccdf565996935253ed0c21b778efc284469cf8347c93b61e7eb6867529ab11b99fdd0a38ac1d5b44ff93e4a6ac94ac1d6b0236a2ece1fb1948c4ad71d71e55ed6e5c74b27fef776d0cc63dda7889fa8ac0ec6832e8f2c54f6bed178740daccbca860aa3b3369c9faef008c8568421c0395609a21b02bdd207fe35226e829cf7b4468025c17a3d6ccf3a5db9b298fbbc851520f8c3029d60788841777895038833346aaff9dbe865c9b091c3280780bcbc09860d5e5d3785b674de7bee672f159c44ee599420c9f5974af5b528acb4eec36628e773c760d27698196cadce1fd33943d5ec6703e5824d43c084d72b6aaa4460d01174877da28291b4c43fbe589b05cf332bade758f478ad0b86f8c48bd0c10e172134eb9ca03de3cbc3b67edb505ab136dcef76a6dbf821f9321cfcd290e4896f04011b894baf0b6136d3898ab4706329e6138d46b679ed993675a1a407b4418f204ac8ec76169cdb7c6af0d2caa82d45d172d25047ed98a5468036850dbbb55a934d357a63cb57587b0b655b756cee38678f64b2928dd4af751c5ee9448706f5e794b3486f68b297ec1277be9f16539b34b10c33b41ac81628a7925b1f6baebeb31ecca96a6653aa19f7837d962edb0636f5265fa8dd4f2fc15744ac0e060cecd147ed43f496241cad102e2254b6a38a80456ae4b65ebe101c0bc2d66491015ef54da4f6fbe6b8c66154fd4d22cbb2bebdb19258127e6a72520b01279ddd8257150af18341f05a2af4f1b00a41dcfe0dcc17831432bb7c6c9e55ac35bdd27b4c41c9c377056f62223e2a45be1050eb9314dc9f0f8dbc87f80ccb2af9986e2752eea26ab9476a18bfb6a2d7e6099eb961dc6c89e8b5f6f44124ccac45ca80d1d613ccdb053289b2b1b2d8db38049fb1474652b6d348d907bea615a7f4f286bf514f1b773701376bb20c454fe78faf59c81a1282eff01b66f37d744853f82318ba5221a2a3238840984193083fc525f884a597f64fd46376d40894205af2433ec2cb5844c546e9be7ec482dbdbcea4c6f3f3eec1599c2c5d650ea1b05b6bd5f8858aa2e6baf23a24dd154064d48f15d719ba11950c3a4fd58f600152d0260d63ad7828bd60c8a4e9fd4a5d47ef05690d08db6ac6ecfb6fa77c0a459a0e138a78ba071b4980cae787fe1b69cfb3d6deafc67a9c5208d96d52aad638e3fdd7aefbbea29181774858e1134e10297033b818de8f4ca40e5e5ab700de1b0b9ea2ce3aef8c45626fa794e296e9152e80b335ebb871949db712ea79cb3e5a822b50f80d72c7344fa56028cd19ad5c4354b8fcfadf6d3c5a58a07d4e7a08a411d2b406b478ceb86d6470acb35687e2f47c38ee24ff4cda198760249ae7cc836a8cce832c1cf420dd38a06da50042a96facb9a6f68e4a86340f323d33e629e9faa2440803603e75ce38606784f8e25ae117573d2640e701883f0a0b221b7e8e6767ec7505b609fb60c7add62c8315fc49c18ecc89db8625170c1b2e0b4c9bae9b8d44412b00496463a7b3ea0da4244c2dbc919b448f63205701fd386c35942fb57600be00452346c8851722dc269d20c100b225cf77af0124646072e98592f8b500d233cbc83caa00db48fbc696e3dc3243d263490a541b803c2dbd17f3853309466619a273fc3b7db1ba9f4d9f0bf391d1ed75458ba1979ed7a17389c7e8b28ecfcdadebc9bc575d13ec87cb4cacd361c6609769cd7ae21d881dc0e036bc8efab5f7596bcbccc043fe219b6d991f2af4bfed836ccb4c578bfa693d5ece0be98e235a29f5f5f1f31569ac567a78aeb4cc347bc5a7ded400ad7cc6dd46c5a9b1673c52cbe784e29e49f015b07db1793b8bc44d9f5fd089d9bc98e4c9bf9b8233aef410fa7d58e5acf6e237f7010beb96128f51efa13dc44dbd659ef199c87ac3aee86c36f44a688dee46855dd93d0e09f282d0c3a8a4a72eada8b141915dd0069e64c67632c858f862f1c7d9b2c40ada3f8684e47d1683da0e0c56cb88182eef62d9c21cb7a198c76e72a18cda26181fd23abf34c4220bb497d55c762c58ccb1c6b2cdc4fd19ba048bb9fbd0f32f522a68abfadccfac75768e18ffc14b3ea8862fc853d8cf879ec98c01a3ab806f3a4dd6bb23e1e9cf11b7494e1652bbcf4f09fe69bf62aa65b3a67e0d62d07b73aef09d59bb6f6299f7e99cdce5070437292f0d9c575139f70d6f0bd356b357fd5e18a2f565e7918163f67de1e33611c18e9340f295bad877b096f264e79f2ca71c990019a5307ec5042ca9432aea66886082a4d22a5d0507980f7037a4a41c9c67f6512449fab727854ba61360e3ff8bf0c749df6dd989fa9020dd06e9763577a91b17687b2e64f74ccc9ba7cec9e430f1b18824fb93c539c1b7f28884337e594990d883056ae70774ea5d747521015bee25f9e7a5df8ab603f59eebdb3174c031303440b170e88031787400b158f480315834c0985874c09858f458bbed15fd47bfa2f9d1aee87ef42bda8fee8afea3bfa2fd6856b43e7a15ddf7d383a8fda2bec59e6a790f9d122889f05ac6a86999029fce5183dbfef905a9d94c106f8fee7457aa14db58aaf2f77eadc8973ec0645bedb41db8cf837fadf89a8ed37e7bf8d04be83f7466de6d98268cb99a4716e4f1d75a87be4c97f7b8b27387d54345b7d7a98ce11615881ac89aeb24fc2a335099b3956752d5593583d48f5ceb3fc555b1e704c1dd2a9e79fae41095253c59b800053823738ae1d6eac0a6cb52728ae2945cf1748a8c9aaf69a7a6159dcc0fc11b538bccab5345db2d280a7a7623f1a590f6facdbfeb52de18db01dd3c5aaaaddc9f334f968af390d81a68cc4aa5e2a13135aa4129fff4ffaad463e3013f1d9eb663a4d4b492bfbd7e5439c2c84877ddc0b527a5ed05e548a3276afcecdf9a54ef8fd3806e4b2aa305f44bd7fe7afce0df929477c6033d01ead3718c145f39ffa8cbc535a67844a4f1e81e10ac94ccfaa84dbd288f1235b82e66b56a7c021b97a3d0c5c58e7c25a3a6bb352ec10c3b5d32f916e5f12eaaabb227c21e546e4c5365dbd2b6811f26d66593c652435951d816a99704939f3b46a94781dea5ff1b5c393446475ae573a19d43bd7c37543f86ca42745cf60f05b3c266664832fe0e1a5bfbe5aa81fbb022fc68dbc6c150cb0fee60a657b013870fadc829cb2bb03830aefa9807a676a0c5b19853aa8bc8e45499faf8077064712d5ab0e993848defa920bfe263655af4d66e0bdfbdaa1eb7f564ea16af970ba9c03d61a37582cdfb840e1978c1ae767389bdc3db3a2d7ff3b5def5c9835f7c25185267aec0bfaae39397c1f8163b0c8f617a61eecf75e4714896c5428c0e19438c7e58b8b88952eb5c5a71d9378f522386e404f984e52755762b656e0bc67446eb812fa3218e864d9d51fc66e5ca316ee1034a74c3f042e36251c0f020f2dcd1025858d33fc28abff0cd48995b9538409676010a2a252a1d2cc6c19cda2d9fe7040c8d30af4492cf1aebbe492944bde9e4fe6fe98fe04b9352cf946ab41918cd96607dd771c0ff530c1da54c83f6be390f1ab474480f66cdceb5f698b518c93dbcefdb9db6abccd44eff2f1503d70c5d3d82c7b0755eb925f9cbd21d4657e35b7752064a7bec1bb9a96f8717a350a02c1dfcd26bd0f0cc34ac7ea1db3a79a6dad99b14b5733b44a0f8d3d3eda3fb3a12cf7e85c2298e183be247be03774122257c7a6d2fbc1d8fb10a371525ebdc7d14dbef94f310fc8b00bda8aaf5e9e8e7fafc6ec574b33d456a8722caf8ccccfe3c8e94f07fb63bf508282fb2cd971a7aa7ba5395594ebf7b00f340dae9efad93c1e02fc415b53735d02c0a6027198db6de9738dbe99341e8e01c59d15da9679a5e6b04dbbca7cfa154020cc7b6e1ab9ef0d2e121b91bf254b86bc44c7cd80e34762923b092c1509b66ab12c2ef3241bec643b4779eea190fed85402b2cec6724053b979cb9865d37eaae4136228364fdea0bef1896123815ac1a5a882712f84683b4b13540a189c0915203e4ce7852699d5556678f7600c70f33bd3c0239701a7bf5a394b2290acab4560a0c42f0cf0d9f6d14478ea29932e4dbe3efe45e5244c8cfbfa81e56c31376e39db04acb3215238e0ad7fdec270745cb2f5c59646451186fc3974adbb3a8a023c3e5cc720c7b1e1fc46b0d52534d94bf3f43e93740f72752239594546fb79f584faf38dc1f095e67100b7b307cbf315da7b65fbedf883a1599b6e81ba21f0282ad3145a734a4aaec00db4341ea69117ce13fa2e0c1e04e19a917e79dbd0c2932059b29521ff4a3b6560942122e78b81ddef188c20b8ad14799003ef59f73a6f83353549559cfe59c3711b5ab7458aa326a952c1a27dc155f381cc9c4dbf811300c90828c322919e05698578f74c3fa9743db225a3223f07ba1e71a897e944d937666fb14815e466fe2aebeda25d9800c42beb1439eff405c27eb53f810c4fc9f0f1b9cc9f2b8bd8a0dd501f428273a8e9d36a10ecf1f524a6190a5e802242bba4526c4213a1509f0d24118080d699837fe493b9f3516896e9cdf60479de60a2de47fb42f2c782bed33e3aa232e0e120df5bc99af975b4a9e909afd91a8503ca447019e3e8544c0cb708243c53d0f658e13272565f65091763b54a86bee38fd70a32ec1141b67e2785c92faada6aca95b3e5cc7769d6d59c88c7cb6d391632e6fade0c2cb06953ce458c1d36057848f4f151a86a7f76028807d91cc96301f3e75cb454eeec893b27d74a95adfa65c835db1fcfbe02a44ee57cadcf714a07fb417aebd1fc062bb8c59383622b660acc89882b122630ac68a8c99187ba0de7aea59ac47a07a19eb757cdb77c67ed15fc67ed12f637ed12f637ed12e637ed12f63e5c6b2580f9e7a59d6fb83bec74aa1a24bd9fc38a57b940db717e247405fc8bb80d31adeee970d21e64a50b18cfed9f6641693b3141d40dc9c8c5ccb1c4a25b23c57b4e983f7ba05c916d61ec0d955a733dc16053bebaddf32706ace24ba353a97205b70090f04e191f30054816bed55d222b9d491084aeacfbdd909a148e87fc6afa2e96a620a21a482f3e28b31aed683a0af2058d0a6f6ddb94259257ce7151c118f0e06407c3e15001e651173b21ac3ea5ebacd4690ebca9e7b084179a4cbdc56cd3bfaddf5981cb6287ab45996807c0103ea1fba695c4096594d07214ea59b228b3fb0c2acba4458469ab9824e2e07bb4414d54a506327efa1b4ea39067f3bd88166e7893014fe47d78d694c81a48b810fb4bd4651e0242b847c88f607c34f11ec7b040860cf1ad24d6849935b4a99524a018606b006710672890644ed6d693d0bd3df024956f9b515ec6ef44483614041871142773f9d6840f79349659292f4637a9a26755acf5cc9d2d403a1d6a3f5b46b50734d83f04443832d26d2c97f239d6ab4a89a17b5d7b123f6a2187c687a76a98a50a41a02756dce539973a26e2f722f729896d22d1b5ec4c2abc80ab4a874a2019d33b9e0ed820b2eb800795d7031041ebc5c1bb7ae7de9ae87362375cc0c8af074af365295c340eebec90b031f070f5ea0840a97890a3fdab4077db53270c7ca401d3c748b66b8e9015f031bc3855da8bc5b2d0caff0ffc55b1728800ab7461e4944c80b0d7059f845952fdaa32b231f7a4f5742a18e63c7ca48a903fd68953fe31eb8a747cbbfd1c0c6c8c12ee4cbe7b130e6cb17da26c734b31c1cc389ca7f548b2acb2254fe6fa1a85293f1e1d3671f1caa80f284ca9327dabfa675be8adaa7b4e83b7a4a99525dfadca8a55cd35cd3be2d5afe23c92f1e9d4d7b0c54f9d9a73d6e265afcb75300e0bf8d2200fe381606d7924fba36b10af473c946334557b5b1d16c4b9d4dd795ba5dfe526753fad83551d7b2f6e0cc5b30e400430e3c9d97e07ae745a04131d52ced83421b9385613a62619c507fe23ed4a983402608b429088348b8af29a7c2b5f4a5eec84b4754f59e1fd5991f790b0605c5231ad4ac98b75a74ccdc03c2da6324300802f911043aaa6234a5a554fe00fc5008049140d84f8b6fd2ad169d477128cc447bdca43da601b257f9a091cadf472bc33d243f0c6ad61228d4ac548fd27bb3164a5918dbf3c3276ca5e593034a5fe93da83dfeed4b9c0dfc55e368e098e2b42aedb10b2d69af468eabc6d1d0f5f3232a0ba30adc823387e1ff6051083e2882cabf0c8b547ecdbc056db030fc3ba80c67485436aabcc47682412bc31f97a0fe5bf9a3ce0c46311277b8f4a5ce87572dc8974867c289da635fa2b237a9d2daf38b4be9e833f17b93984ff917ee3631c1df328fffb58f2b615ec24358c89b3d33cb2afbf49126cdda29afbd2c95e4fb4855d9452f712d32702d3dd752d7c3bff47c82c1f94b6cc453da48b356f3e89ab3efb4c7fc6a0f3aacee5f5a2fedfe565a2dcaa8fba50ec7caecf7ff4b0c5fa1428fbff94a4c7ba6ffd8687b36e229cd4a3d3f1f718c17ec829f9638ed4d5ccd8df60ca0b1d052a8671f66169e7f9763acfc64e9be0f80ea4b5de957742c70045898d2abb8d20780db85f916504b0f00ee885afa9505422dfd8953a296be7d4c4cbfbd527c00946a00c0f589467c54f7b232a51c5a3c4e8eabc5476ebaa9e352f7e5c05afcaa5a742dbec4c9ae05e7dcf78157895b578b874654fec97d5ed5381a626d21b96f6e128caa3fe45eeab7b71f593a4605d05b42e0078930bec34c8faabc2544fb205293117ee47ed8fd500e45f57ba9cb2bb43d5f66d85ef7d77072d4ac16fefe3dc2480f755f15d67072d41e08608e377c82481122448a102142a488094c3002b8526a1c02b951db7da2616223701bb54fd3db39bca1c66fa996b5e2f7736c8bc5106afcef85ccaecb386d6be5db342d8c157fae3cdd34395ee1fac4798510ba7bea3df59ef2280e856571e53f5ea2964e0f483d8c356be5650b636548f5d8e037135a091b83ba4eb7587c6cd889ebd76c0fa24e0fd856ac40b1801c0bf5ddd5391b6645bd8fe58646581836d0ea1fdf9fd8184e17068aaa68eab78f9952dd51acead7b31a722a2a06444b7c0dfb1af6356c6be1339813f9caafab368e6340b404123bb0410f9baa45c31ae6d551a8d4e901a877195028945713c73c52dc0e281d15db4e2cac902b348fc5fc145b8931136afcde95f14e6ecabb8605f19c38580100ddd7631e73c813f4301510f5a933cac6d1d8de1f72128cc4ba98412af51b34b1e0b8c861e2afd870d0a92b9f8295935899f88cc4ba68d251542e4b6a7c97df2214fa71cc353e4a1dd1860500887e1e9b3111518c886344b19589df82c9c4715dc1b99007c177230d13ff882351e2295817f1519cf7ac8c7794a215d4285c488d8e0395469d6088f5d4f56c2bc7bc7a24823a514acf6a514cfdd751d454b7e2f480d4fb2ccaca90eae0a726111191f7c0a4a874368eab69477b27ae2b1a5898f8cc33042132c6214665a7e09e95895e37ad67a33e10d4adeb282b33e369275648f573a285817a16eae7449ff6ce0b93fa155dea4fdd51eab7eee86b14a05229d4db006bea7da46aaafbfd13072b3c3d60a583fe3386d47b8f19539da77c4b792ad54a623e1388c254411f4bc160a53f715d535cc394ac4c8cf50c62b15843e92680a03aa2c6cf010c3d7ce6503a27aad1891c4ac3dae36858794f6d6d8354d74a38c6318e71ac612debcbdcf94c0a8f715641bf15a299d12db842b228515f4e5d76c1ef462c7e264dc913620f05f45b214f88675601d3fb3a76edad4c14f45bcf4d0dc3cf12c5450a0b2de7609b0a1022e46baf6b3acccfba4a3b94ffa33b5e78c212864c4107af228ee08a30a8f107b21c864850054cdd211238a9a8ba43437ea0b3f911aaa07a828de8219a689b828a540112b8053318d0ae3b94048aa1244fbcee5012591226bec31680264a565019c1679b10babfda748f85264b50e241017377777e77ee99f312eeeeeece2623c85e2495457077777e77ee99bbbb3b3714eeeeeeceb108eeeeeedc50b8bb3bbff7ccddddddb98de0eccdeeeeceefceddfdd09d496a8721242c1325f808f2f040081fddccac3882840966a0106d4bdca087e887f3cb9f90ec236b81d4d166557874a0d859696750bcb8044d11e5058aa909173451c48de909192b3b4c86b891014552e9c48fc8317c7442a6821c2c410683811213547e28d8080a5102216c04c57428ab162e68a28855f7abd78854e4c80fd6487580265c200415149666fd80113ed1b3039f257a8066c03305c87d66e340c8132a3f141246e10d4bf587f547d718129082264ca8fc90bb6181951f7edc0c65732328ff56ce61deb1b1ef296aa67e3ef1f7c97b0a9b4e12f8325c9e4535e1a44ba36a06200e04fde813f45ba39d181bc536d14016d301546313651693f9d0130e283791c5560602a7195048b432fdd08995e95fd7baa02ce63033df0ad57618779fcfe0ca623128d41e6c63b1da6fe3069cf500d42ff40b414f41a02ba0d50a886667f58289bb9cc761a00de8e779311086830e221c3b1cd5fe1c5156889db311847e4b84a3bbfa2a22a4a3bd7ccaf2103efb58c9e9f0ae1ae84721f5543a94f60bbd5d7734c4fa035667cab2ddf703564a03ba7352aaea5305a0b7c3acf6c7bc9026e9ad4948cbc1cfecc0c48b91c13adaaa5fe8d738af5fe847394169a0115dba055fafd7cbc7d59ec3f4fa8a1c01124d3842fdbccae21a4e5e91fbd17602392eedf967e75d5a8d27fe4d9a7eb4e7130d9698130def3c79d261bbeb8fba5096388520763832038d6cec3023a309747179a12cebfb99687bfda9644dd42ff46fa515704d01f55ac6044908fa41a3864d3ad3306f4124da894a8fd02de3606c653ce809f45bad5ef014a1a2d4a8f6b3f011252e2c0d44552c1d6ba0660531502369d6066dc73ebd848fb4d7b0065a02e58635124eb232fd0de30a036aaf1b8891ac4cb3abbf61cda282f2380c8c763f773c0dd44048a6e857ff34c9261b537d33333a10d57e19366e2c94f83abcfbeef3510d09287753467bfd34edf5f3cb484279b48d6675ed1b35cde2f7164a4c2907fa7931fdc2a32c6b14a178a980e8b0a4f6e34c930bebcceff65abe77ceeeecec52939ad4a473b233016119fde6fad06f52d974747817fc68548f38f8ea17fa494ad0af5f241f287deea1fdea1df8ead791da2b05af0287f490da5ef76b651ac216644079a772f7ad51fdfca8fde8050177c10e52ca628a46d007b4ae0e436a3fa42c2f26150b21e8b7b1fefe9517d08f6e52e84793d8d8b52f3fda6b20edb557f9d999d999e1c68d1b7779b7fbd1e118a133fc0082137ff66ad64769902ab59f65861face3b2ee1ef99b26c97d706998daebd87dfcaa1cce0cfb23463f9ecd9af5cd28ddfafe699a456cec22ad804eeea9d23d1feff04e94dacf43a6c9857b30428a02edef57fdb8a7857fff09cdcc4c9026b55fc63281decb9ae096a6d0258e1a665f3b3c3d3e339c00c9babd4911253c0835eb9b33c892da6f52b9c4b024f1d7e15df1f7e5073e4d7fbfd00f79e8cfcebba0cbd4b5482ae8a7aaed7114dabf42ec50109fda5485a4ea0cf9586affd4ef45875ffe4fcc5c5ee3c9ab59433bb2faa36b0d70492b359c186d5b0d27557c63530f8152b7d690f1346b7bb003a1bab586932acd6aa9e1a48a0f9b107f7fe77611f02d10eaa92636027c1b86b7b9dba13fb7eb605b6fb1cb4b0c6549ed22a0eece9a6aeabe9bd57c1bbcfec0df4acac11f27c7e50f390ff8b76d3fdfb5d7dc3f488ecbbb20f2b5aef4f3491b3fe9e527be8c9d107fe8fe90fb837810ff2041bc534510c48e3e6cfbf26933d3f69b89dd347f63528c28a0f23769327139aecd71f14c3a4daa579d5656bcd5c66c38918d1b354058c7668bd668ab2c514fb33e2732e244b485212e4545a8130dde542613d76263fad39fa64b69af4b31fa8dc32a1bb168c1b471fc39aeed379d08accbf4ccd5987ee35afcb7cf71e5407bb5d7b0d3764cdc4cbfd0ef9c8de9b70ec7d4d1bc68bfd6d3ac8da20d69afbdc55debe9d78cf46b3ecdda6abf16d398e816493bd29a16545b13aaad35a9ed907986683d348b8dd4664e1bd2ac7ec8d578f27a354ba75d9f54123c9a956214cc6e7894547e55e6ad52c34995215c0d19cfb7a062243087612675eba7aaacc361f8d7a5e540bba35a08e8fe37594808d006ea712c1cb91fd2e62dc7fd762fedf9eff7beaab7ebb12fbfd979ddbfd749ee87f42cdd227d93b89786a9d4f787d0f87b02d215a66c2ca5a0ac9d807273bb388eefc06194d29ddba57eb3fa05aa777365da8f30a10eb4ffb94f8fc394d8c9c3ee2e0b718a42ac3bc482a1fa51ad05254be92e63b0a179decc0b5615818113d963a4bd497c97317cc1210e458acbda8d6af74f4d02411ab87e2e93c524f4934545cd8add8f14265dbb2f712024cd829dfbb4d7ded3238d88acd0aef8b3d0af4a45a943d5467616c4ea47bd055b8bff6e3c9733a9341efe8558e09bbbbbbbbbbbd31936be9918773fda7717e3de7f0439e77affab98982f06154509724e9691d9e16c66880546acd46f1e217b21adf7bfbab19aad562d53428bf4fbd304a5d421c17d01ce1b2fc06f872e042661e63131c6a89148a44ece27fd3649f035498a51933142cf4628077f1341841da7c2b62f2c2dfe9df1729b736addddddddddad39f736391aa671f8a0a6f96dcc46b3fa6fb4ec7e187632daf31677dec9f34edb81ca20b24e0b2bab5b773a4cc3d6b4285fddfe1e63e4a1c381d8f685639c18e68c04e9bf157f1207372214bef6fe3b9a159f48dd6f26ced1105ffb4d4a0975f0298244c28d3bc4b3a4fa7310cf58082f69d60e95404a65990e0b25b1c97886503f8ee20f9ba337374aceee5315e5d0b12302ec227d0e14762c2bc226a58c3272eb62d7ba8aba9bd66bba30fd0be32d9ab57163bdfef5bcfe6f866a82b0f38153f947d364907fe7a4eb2fe3a4315d465fd9b8e1eeee5add2116ecd48fd2607bcd5b08a2f1678d8f9569b7b8557afe778d534df843fac8fdc08691fcbcced1a00db4b924e752d06f561a2d31ccea5f43f5dfd7cecab0772d7356b2f17aeedccd0bfdf40395d3098820836dbd456db48f1d085a24c0aef8ec8add8ec9a5fd0e74e9c4d761ba7811e0da930d74699d0e39a45cf1db05fb193e4d83c073bc39c87d288bca4d38ec2edd852bbe446aadfcfebf78dda2bfbcf25d8728d3b3e056fe54fa8d65c041699cfcc9991ed6c99938da302cdc374c9f7e2b2af528ae0523688b0c03e821ff3fd9b5c4f0d5f45f4daced3fd9798ff3f0f4c0d32c294d2754b732b9d289db1ec5b5a84cb97569dcd6298b408207b27ae2b8080a9505b72e29051502a5b9bace57514d816dfaedbb44fafef7d6cad4e8370388506237c6e9f43554ee26475926e7bd98a88c43f541752909929482928440e99d490487d426e978557e4a941989a45b4d04d4ac68a45b5dd4238774abe51329293a62f1ef4abbf09d8a5af451acf223c754356b13151dcd367591b72251242a5ae68528c932cc9a7a9a4efdaca9eeab61c75b134ac3f4a3ba9d29b5dfd4ed6cddf73a5efd7cc7a77e32284802c91e1989bc259114c5236fc9210dd3afa4f693888ef470549ba88a4954fb99a5ca2a9a058b2aabf0152baaac02aeac545945a4b565153295aab20a0d85aab20aca44cd3a9d2afc950a63f74df7190f5a98fe49e3cc8e07751f0cea9cc777da6bd82cc4091595df6bc0f561a147eef0c09f64c10fb55d9f3c41ed5f8ee1ffc1fac91dd831800825d6dbca1d038878b22eb67e1576241e16b2395593facb789ed13662b17ed15e6bbff296d6b5b377f4080a1ffc39bb38a78c134e28e3dc2122ae503f954fd103d990ca42dd1e28517a492ad459e811f5eea7c5668bdc0d21882f1f477bd9b54840fefcd9dda075d493b4b8f85413bbe930bc0e23a720eb32717254bb06af18d76664f8f3f8e13fc3574cd0b894eaafc9f9c29bdb5d8f63f7d29ecf8e7ef5934b7bde7502b1ca089077200c2a43a0c10d9224f14310460401849f811042087d12004e213ab59f26210191daaa8d71754821dc2185d0ce922b104981135c90635021dc2a9c31ba957f798842eddad0888d4f3268b5ff467b1b5b62c49163d777e8d808bd6619e6dad8d4dd8cf6f67fe4ca617665b4b7eb35eb639af5758300c2649f2456667b2fda6b696be3c6cc85868a10d5fe287c0d1531aadf1ad53e0d9980a7ca086966348b61151209a276371ac60635b537bf19ef7eb4ef97d12cee62da6bad7b69af9f9fbff6576108515540dda1214675b53ff2b510ecbceb64a375900aeab42e932746a81fad0bb37c82a1f2c7f23dc4b6cdb241d61e747f0bb0cdf473e7307f34353c90318987590a4bd342ee0421ef8aef523638a7a0dfcabc480a0dc76876116532594dcdaac65b74ca3cd9dc029f57fb9deb329c2b68a1eed00f4afcba686cfc57f8c9a8ecfa865d8cec7e227ca1f91bcd42dda120a690624e05d0d20f11f1ea9f3ee7ecf9debda826baa59304967eb6f9cbcdbd31d5f9eeeed3bfb9393752e95da77f6bce4bb38ba5efb15fdae24ef872a5c3ee67433da142d5a00ca5dfc9f5803fbb954fe35c7df88da996beb98f6b9161f6e856722d31f4cfef6e5b64983d66b7754b5bd7327f5db061785be6c33a83d0baefb9c9992809689e8c9208e10638e079bd5c5aaafa338df9c14865f2a408a7c2be10b67dd134212632a66952489b5248258564ac594b4dedcdad7e33a0ed83181ca95e5d1fc07eeae60ed34ec0eba81fd2d33429c8019b840a657c4d0aed04543eb7741fd7cf79ea541151795241a1b24f357c57e683a79a524d89f4357e4add0fa9dbff266cee87f42dd24b260dc3735dfcd43b29d4e2054c926951faa7fc1cd7f456901c57fc7dc9e5b820a0fd7c1bed678793043e8e66135f76385d8b77b0bbc86a6626068a5df0e4185c97511c83e2d46f3f9af6f7e16c2a9b6b32700ae18fda63ffc6a4fdb28b4f56ed975d7cb06af16f4cdc6a482891952f01f797dd0d496ce0dfe0bf23d8f6e5fb56cb3efc1c57cb762d1088ef6f13bfc349b29d8d3f5cf838b16bd95f577cff1c977604fd1e08246a774f86e86e116c9abbbbbbbbbbbbfb9ccddeee3e840d4e8e0d4e0e2331b52dc6e3d635b97591b8756db2bb9b099aee7e19e10bf68e5d4cb11d07bb755fb5351ace0e0f0962d2c3911d0682c9084dcc74aa286b1def6c3ff4e357f763066f699d8e1c1b9b91c91d7ea07fd3ac49a94af59e04e00d128837c08f5d37f7c36eb2229a94dfa32aef553d037717c2df6e5625410cd384e83779d835676c63abfeaf05b49d802b6f3ddc7db8cfb02e103ff86063587baca42ef3528fabf8622557271addcdadda8b696fa5493369d1a8f29f68b8d4ef54c3a5d25207766fe4b2145455daa06fdbb6352f457d394c9bbb17a23e9c6ad2ea761f076af7bf345ab9ed403f3993b3ed7c10aa9f9405d57dedb5cb7d74aeccfed7788b46a8c6123bed6d050010fd5656d32c9b6699dae367e1b669160d4ca177934e5a89e28c1ca316359e113b4dd3a25c2554ee6e6060fad44111dbc15e88ff57d6c131c6f7dd85befced830cea4739b6edb27c77f31f20e7eeda14286f732dd8855ee5d56a40f7238441372c472c2c9dd73d7bccfc42d34d803f342a14fede986e4c5508cfff957554f9ab69dd43ce7bf82fedf943cefb11ebfe57fe98f7983c49c284ab25ecc274cfbd21a19451465863561f40aafbc0a93ee40310f553f5cb13391a308414f2a86f4429a38d770ec37554ffccd942404185b75bebda08c45b3c8a8e80348b8b34096ff84402fa6d51065686ffc4032d22fa9609407032104dedf93c81462234de077f8dae5b6584db8de2130dd7ea0e0d21055f024cc6b803ba0f5e082b8e1cbff90651ddedcac0083d76daa8e8d2669a3149223e2efafbabe5231cc441cde2a2294c18c604070911cda4f04b09d3f8d98d53d112e73d899b59ad6cd008e1a861207f06fa7ed4061219094eede70f4206ea8e8d681deff4f430631dfed66867fd92adf16cfbfbb2c578929999999999b9b7db956197fd1f6edae329e7d4542a1795b780b00f7a9a2c4128773f24ef76e8c8e1793764503fea55864a68e99f4f001f18c45eae96ee6ab4273d7cbd5c3bdae30d080e9012d6d917738433fc2071d3612673118f9b1c38bc353b1b36ed31ff0c218ea8dfaaf20b39111b60a93b04844efd1e87c3708b949199999999996584368cc3e7a4d479467b4ce32dad5bad8464708c0f5130716285fa4d1f2a200f52138280260afc4045290737e8b6113b828452c6eeb7718d52e7f7246cfba252a95eac6646b3d2d374a99bf35455cfc2b62ea0aaaa8571aad246076aa77ea89dcae198ad1a4e813eec66a46e45e794ec5246ce2483c6841a65a7636580e83a4cacdcb792dc57a375f366556347677dd1de6bfac02acffd09dfe6238f1b3ef26306d6a48e667dab1dcd9a51d49f9d77cdeea66198477bfc16a0a6f6981fc7ecee860d6fcd6e66c68abf3285e160d33a9a26f46b93214450bf9d4d95b7304e35ce68af6d74343532d95482ce27bdd6f139973e556f65fa4d3ca0b2d6d4d87d35dfea63f6ff6aeacdaa4295ec48c46a79a094ae98876d5f3e0a27531b5b0d5cf9dd19f6b1125a4443fec643792c0caf8d43eda5f2ed6ce5db285af8732a771f77346cacb292f66275757477d1b62f4468fff2f3121dde621723a9935b1d3bf8039b85a8e40d5635510d118d00004010005314002020100a86c3a2c1683ca20892bc0714000d8d9a4272529648a320c861140621440c0006100000002020024233640300e463e6217d80f3c7bb5527b5a7022277ac51c59525b8a42ec6e7c7f99c086310148ee162527e736bdd8c2fec253d939a04ea0ad6740a23e7c275762383c929aba2d7334ece11a9d1992a69f3eeeb260b4ead1638a626790b3b15e42e6fe59818ee806779ba42e25ba481a03ff86969ce23c6d5138a802ea2152bb56f60e98b260bdf328ad56314853ca24ad27ae537b4d02fcef9def40258987e184e666b4813025beac75181d139191df46ae13db9ecabd7d108baaff1189ab50c4e7f8f9e77362fbf9869ccccfd2d459ee71a4dc4eec5b31dfaee12b5e4a7a81e0379b1b1fe5e2704e2331da1e8166e445c8ee5ec3b0c02786d9190502714c1533700799052a63efa490d2e0b5649979f829098e87c8695e4b522dedd1b7d4ceed2db97fc43fe2d4c1971748d846bc9b16e115a97bea7806b64f5af450111afb7824ed27e9477dc7573dcdff571260298204ec2451f4ed0c2f2b5a348323591039ae4b5b73ce5522640d6140aa07d49aa50b0c148ab9196f90c478420bfb13b7cdf1d21935fefdf45ec1e39d0d99662a75580aa639d8781b8a3b09c0954124f57e7084f10f9944dfeab1378a2ed7325c0832987e1d55347396436f16eb578a9020e24a922aa7b1e66fa68e7ca399f2b570cf5ab8c2864a522532ca5a9dfa313e97bfc886244269db3cb87ca70eaf8af423bcaccd9c81201aba09fd794eb05ee878c3f5f595097a5a588a54daf21220e40ce84399111afe586ef933c0a684be82c319f33190aeb1f690e054254f67728cfee5370b1b395f8242400b8bd7ca1d1bea77b715e99001c40b49f33fe048554fde12e68013996a2a6a37ce6e59db3e61a8ddafa927a45207837330694970d213afb617c03cd1597fb13e9c32380563197f78f90835a7e2dddf29cb5768e468048df3772d79f7511e8a57e395a8fddb3f8cda6ae8a6b4d772dc15b247726663f0d71f7b9c0dd409703a3c93e9b3fac2b81bca446af55a811c41961551d962383b24472e54724aa5815a8c48403a1c2fd0d8633c6d6e51b856f3580d98c6d8f5034780789fdc67535c1ecc4b3032dfa48d7b8aa414a37bf697a61e0d83cddfb05a1d480291b897dd188564f3eb02d7dbc54981a1755042e166d2d2b21cb946f2a31642b2891a819a28858b63ba0b83a758e153cc66f7d5e354135fe9a2e5e2e38fbbaf503c30f058fc8f26a1b0fe970b68a661bcdab9f993655024730e57542cd1f15483cb80de6525d4d4018609107779e23efaa932851287180e074ff0a9fe6eaa9445b01d7a747e45fbccfb31a56e505f44db9606bc16679818560c484c9dc0059516835372dff92301b2d1126b2ff47b0c370162f1351395a22cd22d81f1833449e7c812d4cf51eb167199a0440567e63477dd5ee57a4b4090e8fdf12fb282c3b846c3f0a532f544da0aa17c4826039cc48dc0b04f201ccc634f585bb9a11a75925411a27e31edfd389cd6ae2a4992753e39c0a5bd44a8ae7626b0d9855928d995f8b70a1f614722fa39e5814bb6f064f11426b94cd2bedc528bbd56b511448fc733518c0db8b9a063c24628fab478f73a0fa65b938af81156817a4a4ee551eb1133953a4f782e5a2d9f233630fd4cb6bfc72e9f794ab43aa21fc05e0d945a87f5eb9ee0599dbca3dddd5545fb9684b5dc48067c8f2ef02504cb82a8e1049707a4e04515b4f67e5343c294daa86f2e2e841044fd2aac415e88572818747f81983de98477f3618b65b63c9435aa94ac052aa464e91ff4938bd28372634c08651206d89249e7a85bfe9460975e8dedc8f7fe7c14fefde84ca785fe10132c3009afadb64567d5f5faffa86fc311270db4c34560a9edfc6a6b33759e25d5b67d071aa48fae56fff5f7121000f15caa93c3a063ac2de42555f6f0885a255e9de0d7ef285fd6743fc9ec6eec50e7350430101cbf5e12202b5a91e31003323a025cb9cad6dbb18fc95b7c77dc9f7395662074783df2430b3e9a1704b33b3a79341ce2f525f92113332039dac694b1ba064715d70d117e14489791031710519978671021146276fc945bd408b88b9f0a5c226fd0d7ec532196a1c90bd2096b4a331fb6259a6c65fd70290bf6d9469106e5a32d1cc1563ced958dc63cf02cb3dc0bcc8509fe54d86792aa786c9a5f011fa416c23db2adc00f76865915756548cf9a623ced4da86ea5c8ef6e3f368a2ff009dc17169bcb7777c87bb24219841f93c6270fbe089796aca534b354dc4226ed7955b7293830f8d9189c12054a44618c1a8afaed1b17620383a35c13cc897e0c8473612e841a9313fb40e41b54f91368bcc7bb4303102eec8a6b1a925ad30505169445028b406de4a942e3e56c55984f23b044886e1a32fc1fce98e03778ef34cf112029a356f030b6f49c1eaa245920cfd46d877a0acebc37178477f49fbfb96b51ecb29776e13bc1565bc5cdf68798d4c8f0a994d2c325ccb88fa052edc6c1542b2727e047583b1a017c86b1fc9c19eb3bf165b4bbf1f8a4bfd67e0f1f31b19c4b751512babc938885bf3ef122fc6c42e46dd9b8ab60a78b43862a72c77aef00b449643b488b791575176388a9286f005af971a8e0be30e24c2d095e81b6c493bc76897e890c983d1b2e870dfdb2c192b93a44e37a775f3838aec913b05f0d1f601d7671c6fcf45f8c93c266869e9794213ea95569cca53a53b11001903a243292a13a3942355a05f88d15572294fc337104f9483efd02efbaf43e5b7bbabefa1d9a7276558bee3b8133fcc9597a490cf50a5ef6e9e762deda041ef135c14328ae38a9ba8bedaf958b824777701b2bbeec774477ad664a031f6dd877c701c170c9b7742d9e613a178bd429e465d742561d43284a122edf6bfebdfffa1e77b76b68860d8a82602518c90cf802906f7485d25b915a79e106344ed080a613e1a078c61bcb69b054b9926ee43d4e56ff99a407e80d50d5a58f0e016b01bb818bf1cddb53123ff14b94f6935543c13a036dc301218797984024a0ee6203607b57799bb874a9e203384e3871358fb11308a23fc27ea15b8bac638f5722314031bdb5e954bbb72bb40028f77862f230d4a56a96d8dcbdc483d4d79d6a556bc80cb652e90b862f8b003a33af11b356f98722292fc86d6abc06c861e7b7d6f9a84ed878ec62fc837c12e7726bf21ae180c294b557603d269014f4020097c928d89c82285ef56a97aca4a18bb4d0806a3e0047c8fedc677e625846177b1a1b3aaa40e2cc0f52c34137a684248c883ea2f72f6b3408af34270349ecdeb02e5fb95d7f226d7a84c88409f069ba5db7be64719657cf0ef6e1444df3f7715e707b01ffc86d00000ec69d60b972c2c5c025203d559d8525821f7d2679843f283db26550119242fb61dc9853bff88571f24a3154092917d975f4a083083049dd61a611e170618d76a50d024d33d799bb92880a9560e2eff722e676e1c92acf48c4f6fef4cdd5fed7ced0cee311e521a720976d3939aa93a4cd16d32fad3463c8d7ac5de1e05f27fd3b1027d6a585b19d0d0d30db68670cc4d6d0dafa7989d2ba294542316ec21169a69f9e3ee3f3e0c91614cabff6eb8f183418ed40653d4b04422f6244a9afbff5ba5f6e109f3a137280f067f0ceb4c92fcc5b80670e902268bca3eccff6b7dbb3ca3f331ad98c35d7d12ede83b2b3cd50c1216d59773a8a68a1901750b20ffd87a85a6ad938aba98f7c68b300d17a1f2f6fbbcf966f78e7b1d4b0e644ce2c88adc80f2311d4467d9c5fce8948cd24ceff3a42080d350a6e89afafcaade2ed5554603e417a65dcd68525b473b45855111f84bac1f4b550db6ec0ec54e17d68e666621c313bf5d6e367fdc6aa0ceb2808c273a9be71c75dcc915200c7b7ce67a2f079341e88c94094869817a936933eaaf07b30f7dc076fb4797911d549e487d8c5b452ddb1f1c5f8fcb577034fcce4d74b9561fb2850c19f2a90b5cfe7b10edfbf86c6378cc3fc021ebcc089439b774758cf00ea8ba5d8f21493693f390713d6e1ef33f11b0ce36a068945a688e8ee70228706e9b37076808ea2ff4127289cd766f938a99ddc747eb5f6cc9bcd7da69d9e48184e8a3018ca3988aaf6849830f4bd21155cd0aa369ec880c6bcb03e4ceb6c08c46ff467bf6eff8380eac031c6b4d79d941a045c1c69f1817d938b2f3ff5c29d05c4595844d7af9a9e7596a16f68c62484f0bc337414f7a2c8f9005f01024614d2ba9ff957611ccaa18cc560a52f0e780722a3eb9d5aa06f779686a3d0e02dd859f64e81d772e78f685d60e8934c07c35ed390bdc27d10f498859ffbe16c291b62d16931203987a20583347f243f711e2698fe76cc3a20e48b6fc1cf7cdc3d71249a6976672df70303844ff4e15b9fb978521a14427ac7fb8f74b8dd308ee9c1c79d417103637b3dc4b7acbfe201a15a8d442123cb616752971019ca23bbbff385dedb8a838bffd93595ce16cdd2dce2fd61cbf0efac0539a2064147b9a41b57a75e5115603b108ed28d5f2d1a90f249624ddba0e0880fee6269fae6c95bba2de447bab0daa88dd202a43bc04d1db423bbfb7f413ef14b43ec575fb6051c881e0707d8952983792cbbb9c5432388ea46d69e3bb0b234cdb02b000ed2ed29df1ce98fb70af96eee3a4dcd6a9e6e86ae5a5fc1582767bcace724b59206ec7497005f833f45b161a305216c26915e4709e13a6e72010a29efaf0cc442a22b5b88e83dfce6814eb6b19152b181b09ac1e77878956a253ca00026e5ac256a75076fe3e15ddb0172545dcd420916e600ee01a0557e680f6d54927fb92f0620a5a8a3536d1877feecaffbe0c44015577ee3a0e3e8768ab039a8421d3ff2f5866114bc52b27b926ddd82fb2d8ff7f881ac10359a8293c8dce198f7f4ba4a23d80c0f18676092347477978382293cefb0bcb8b69b639a3834f0c5d0db87b324e28a8909ea291e0f70705c3a67f225afe924e57640d431feb0673cf32dd201ca04f7dd1a9e612b71710464ab209601fb86867f80da214b2bc39a0c2af7d894cda370886893a56125aa907a3d87d53c29f0004d09bd1f94d2dceffae77f4509c2a0f8413afb1c2c903cc3582027ea0913c037439c93bda7650edbc8f9d6e86416b7872373aa0e9500c05ed49d4ba0ab66058010f99836607da00e7b8cf430e2752090b1497072590481890e7a914186a3e625210638cac9317c18838e20f4e9ae20bb264b837a0cd35f9ac3c5c682f9e4352b87c1a32c078578c1e907dfc216759d5c3900d21220074543bb88706c75e4f4a651ca71c0d074e29142ac5b26482a86ec86c6e8c3560695321f470e119052f0d191901956081a737492dfcd973b12a6cb53ee7a89881e8a601600243bba16f9a737ee2523ac728d35815e41e112390169a1dcecc482850c943b4258d3cd9cc76e6d9280b7919cf77c1522c2632b6d58acf852a82cd6ac1b729e15e5ca658517d0affa8f3b2584f99c80ab3c3704380a3bcc9941221b224ff3f211fc060c2eb62f01b19e6f1be54f327f3305a83cf6180c29585ebdb93466a4fb2f39a91d4b8255565e9b2564fc3994c10f6f20417c51e45b56b48a9cc35c131324e2995496e290ba7c93e160d4bfa77df95357607b863a26ca51ee93b75e449368c452e0068361f2b0a90b506cea386b100614a76e3f636a65d5ed935f955ff2654b0fe30216f92c569610b10277b544d2bf1741edf3dab310079690c7471c00496059ac68811f51391fb9460f60ce27f3f8f2a1ab8301464344c733ffaff5597ea7b7e9f518b17b7c9580ebcb56684a48c43801c66fe8601d45439952ab3ccb0b9f4d4d19d94eb0d06b1e3767206b374014be7abe10da8828c6d87d3b71414bc49f74284c3160d393982d233d1b788e44f132723bf9091e397e960cbda1471747964ba7aee721a85340bdd7137f152d55dc3e06d84910dcc90247b20de88bf89473bb009ba3a989822812b8b608db9e3e4c8a749dfeed68c8b72b96da5559af2f2c5c858a8a0e42109774629dd30cd66e010497192eebd4f9c3f004be91329000fd95e83573a71d9ef55ce0db17b1a82e07c81156eb5277a41627b97a5afc3fbff9d4cb43c968450fe702919e1a89c44738fa487a3ce6f8289a9b50605aecc8ac5e6ac67d5fd73ee475616bf2c29426f261558813af7183a0ca8e84d90ca654f3b964f15ee79349edaa7860793967bb8392890ce6b3916669714b73979db2867d99de6aa70688990bba6c39e9fc003c74ea647268d5f0ab57e59fbdde87da0dee210eda6ef8e9f5324a63194e00e9ea5b63793e93608b76c685f584b2d998d0462ef413c71a4381811fb45ea542453ddd996835de867522d46aad370bbf4976aaccaf9cf86a5c47dc3eaec90991b3efbb66610a49a300032d554162984c3909b24b375285934269bd43a53be55f4156759d9c5f9793d37a0e6ad4ef9d1fb0e2a339165c88ccf50842a9d939da9bd6c0596a3c8609b3b350bdd33404edcc084aeae677ec07cb868658a110e5b5f50da865da6bcf043291473edb0640906c6c175caea4ec17e0e1dc1562d35b683008168771c0b0f42ff9b8d12044086249ba8bf516acd62623179ca11732a9d69013907441d7f706a3b7ceb5146d42b8e6267c6763db0fd9f9adfb916487531344995df3af3d000d4a75734ad52145dc7005206a4a3bebdb98e861c61dc1d91f4ef9aba2392fdf0ddf8ce8de1f8b350c86bbcbc9800cfe5887a9526b10bf66906bbde028e4c3d4abbf94d7572ac6401a591a11f21f5ae32f4c5736c8659e60e5a4f941c945220557bee07c9c3fa002168ea8a68c82ba3ae155917445d5564404a6cff083bf645677addf58817822a30df477621c376aaa960a17992a77d03a6f5658eb0760d53a9235e299d6b48251344c704cdf6592ab6557c8eb3d37fd6b436038f85fda9e80a303550e4e509988aed99d9c9d0a6f6e4f298790ba70dac228a3a805037b841b26256e1f5e4284670328b9327f0c5dbb2a49a74655d2c1bea461a8cb0c791756a40ab4d803400ad0f4d623d94d38ec2833d747cbc3765b70725f6386dcf8c2a0c1d5ef75785f7cee7cd7d3f03ae633ccfafe1709b40f3f3b4443b5011221aa4dd86a4b42ff63eb5da70ff6710981299ce16088f878dbb31a746ad0c5efb2689f695a181e4906ddc0c68d504285f53b78c0e242afd70e08d987cbe8421aa7e7b69fdfc47107dbc9227e3fae5a9931ebe1847f3a36a125554643fccfb640228261b369d023bc24b7fcbbf3f588ff094a795f65cf40a65fe29f23346bd66e214a5bf252bad94609845b23f27e1e1b8f82ecc99e880a3e698783b9ee54311a381574408fcde7d16d06753f3d27e6601029e8fbddf571f9a5452f28985ead1aae7accdef31631d9d8e78dcd8f7cab26b54ec139fa477a1f101622aa3ff80cc42c199547522356b391dcc433a2586f6bbe93e5bd2398ae45acf56ca0c4af07349ff8e16e016e3997fad5fa246d04bb2c7c9f16d78d018340a9876a40ef620edcdd2000f00947362940970eef7dab6eeb452b5139e2792c48e2a830058525e158d8d6af581cf4614112498a5f83f16041d80a1e71160e500089118230604301bb8452c951f3478d93185718a44a79d873e1dcbba73e8e763e1d01324002d783e7ab73e5e65e5f50b69ecc4a5af19549588fce8bb65f8dd26b9083718332110a7b16baa1d54d147e7dd9221d4b2b8a7450f27a80158812ba258db5771ea7c164d251fdbad48b7865d384ca2b5fb31a09f8f53fd5be0097d145bd848e3d2d673e0904de1a11b99347870d3cc25f6ae2c90ee041d1bb6374ccbbac102ef9c2296ccbde6daa0b45a4c6040110252df1331463b845c4c138847539c5f168c47f1592c483476e780c82e1421356cfed60db40684ab8c61cc75d3ab098dadf0fefb0c6ad5d51d42cc3e8167cec152f1613aeeca904d299f79e7ca2b329c9e6726229ed7fd55afcb2827f9aab2b9fa3389893ca3a91ac1f96369e9cdd207687bfe96e2847600099568dac8a07c4dad707bb8e48c37e28bcb9e4bd4ffc45c31681ed00c3393a4b63865bb411c4cfbc869c298f16a9c62d3f60a660af91b84156c81b2b2d3ec7972a930ec38488c863d90649c60398ddf4d83cb6c8f79626ede3c859eeab0a04c923cb260ea9c6db605cfcc28dfc3fd94b29e2e7d95ef60068723e08c17b57aa6d3a82e0db2fec56db3e1ae9ee0707809be840d3c9d713739ea976630820ff80754b308bd73d6d35f9ca2288b93cf728aecef1bad474693b72643dd724dc48017fa877e2b21754f0b526060bf61a7cd3008c2a832452c714f152c3733ae96c44290044b0cd30f991095d0fd1a6d8369fe7a7d4ee2c65ade0c19a7abc7991ac843f1ad7dc66902e2626f6411f321b8397817fa199580a5d6153e48de1635fc60387c1c90f534fca721445c80f2cb720fdf62e6ca858fea1d07bd419b28edf11628600bc124f5916e35410c69fa5c5836aeb66fc266d0f1d90429cbe12360300c859995f22b0d7cda1b0eaf02d4e1c6ba03739baa0117e3ba0e3683d841e7ea4354761afa47761901536af13dc29b316b4d700f8d4304715fe6a2ded6a3fd77b31454034ac484397a6710a164a2633b37bcd4b31913d84441f48a3e72ae2014995b846548ce4d59e6175bff00eaa689744a30130a10b66ee0fc8a9e6df06db4a66dbd4fec2b6bb746d8c1512691177249d0a3f01ce360c341ea0fa9c41c5a44a9cb3879e8e363c397f097225a41875d6b0406519816634d098062eb9177c64451d107a3c33acea37eee65d9a49acd72dd75aa69546e73f2bfe5e767647c5b5dbdf18cabeb3ae7babaceb1b64b2fcb99c0fcf637bf766e554a173d959cb46abf37527556f5f8f3b350765f87cde407da6472591923bb558714f7c3d7e867c59582bf1dc0cf28573c80f4b8fe8d1f7b365f8bac257f9d5dc5e86fd0d52e3b76d732dcbd86a12f3cb8540cb72000000d7adf2db8cbf2ed5a7accaea536d8df63d0a72ddc27ece8d719b9722cb86b62a0dedf59d0f61ed5cb23cf28a00499f77d2411b15f7d0b39576c20ef6491098b41cd7ee4701f52e8528caa98d2949ba036ffb030d07d3860305bde8eb245258d42a93ab5d7bda3ec702a0b408985b9fcced548b2e930b1d25ba27ba9606889ef10f5893620995ad0b9eed5e4258eeecd8285f47a43df300737748445b490d74710b62db2b7ddf93bedfcd394e137c283e294bcc9869e0ae314bf872cecffe7d557bce94251499a0217318401c6c31299bba0d0d9d1e5e8c7d76a0f2990605c581e569a4181bf7f1ac7b7fa332b5dad04fa898cb67da89c489394836ae595a3c381b204e626683556918cf52093b8795199c3f144d3d4fd01899243458e62d6f009343ccc77b6dc541f7ceb17aa9aaec71c616f9dfe382a510c23701dd5c420353d76bb410427e4f8b38d4c070da4279b68349e4e643625b59fddcfaa3d83b82b9cbfc874ca16382e306ea1f8007b0d58d796762681b067e966bf37fb5b3a75773227fb4ca641759585209243b2267a40ea1ae6d6024dcce291149a59d806251ce4f5407448eab6b1c37b579b5980b6b69da9083867aeae7f52cb15f986a1a717ba35316c3b1214de46c55562398b2e72ac52c51a0b1dd9cb6ca3b320a2f3a95bcdd140770707a53e04d883a5685f944fd7293c1a0cc8a9b16b088461d7301d973ca05a879b42010e12ba853a6e24a982e14206334f298ff77ad233130d765221a0893f44708a27bde763f6837974273d6f2c353d115b6c539b809c54d1ab3473de4aced8ec5b370a1eb88a46c01d602319d4b6162f973663b39fa962a357828f9bf4d01111ff6824d589bfa15b519b2345914efa4dd2e7a845b24f719cdcf88bc5d98b1101ffe77284ba6e72b4e8a25492a573fff8689477bc1244a3eb89819093e276543330f129e35fefc5d88f63edbcd2c8a3620d54696ed07783ecf4d5189706f7560d3347f858a70a43b3660f4353258bdcd12f3ec5c1b2f71637e966e4c88813ba6f75df816010b5f04240eea17388380f63f7d473232dd855dd541f4568213cb6964d464dbe0922baf859d2c3db7358ade9e0643926a8a720a6035238ceda3c1866d8419c4a993ca543ac8ee71f3726ee9f3e06ebb51ea1ba6cfdb4d88168bf834682c5d8370a5756b26ee07bddf3a111d7ff4e3b3c0490d6ce2e3cd9ec9fcc787aa6fe411b1bb7c16bbb3f589b13bcb6f19bc854c7831800a77d62dde8941a5872b9a28e6341178166733fab104147cc06e8bbef43b1ce89050c200b6b9473e2c87af9e0e1c50c48bfaa5567938e7f4ac1a1b0653dd9a356468f45c6eb70600af3fbb0ecba2814d958432157b378549f19cda6f3e63b4802a397d19dcd101efca71145c4cb8b570b8024a87e49aea0b54b21e6f9521a236c10c03f42583b1d22d9710a98ce7488d271e68b081bc1f3eaf039d1a49a014ad6610a3ba747c3bb81533c3d35b6eabca10a96ddd7d837a62fdf9e3ec4c6a9321ff886d14f44d6dc17e1511c11aa3559dc981dcc13cdf7c4149fb39ca13c91049c6db5d0dded2eb9559de717f6bc960768c13e620d940cb8d2cb269ddcbc488bb3a44194b89f2e2a40034747da96f2a82370ce3f232adf652e641c99fd5ddf41d5ed0c9c4074daa1e35d119e0748fea1773a718ab38bcfebbb9c6f1c6dccf2c464c0bfc258774086c69597137d25d96710eafc21ccd05384a35242e652537016b84445665ccb7a51355a6fd030d34366c8050b31bb986adc8d8023caf453da93d608253384bbb9b1ca08d0744395056e8ba81f8b48134b2049b8c858380061a993b03eebdc40461005b1f611dc02021ec313daf350242a60a557bdd9a668a0e4843903ccd2bc07fed9771d2560f09e00c0cad32725a0851238b2435e468e26ecc5f4008d4580cb3716bfcbcdc35e526491a6912f41c2ab48b2b22553fb92e70059c741c9cd57b91f299cec08a3fe6847af4f170ce678335fd45fb872244e4aa04ebe8fab219ba81f2695a3157bce7b7f221edc3234414c1f01bd9c61b4d3e695b835b296e33cb65dd0c22b83e20c9f90e6c794864f7a4b8a5fd2482acc97f962a9a8877c74ffa8bfc1ce410fb3b161a3b565460cdc23f514010458b0d931c2d42d7cf8dbd74aa0eb27a11d832c9a15b72c1af4b00a50002ca62656ccd4c4a03ecd0beed457b8ca94c15d87135b66906ef84c1989ef782e251a280acb697c7aacd748ba0b57694df639131b2126a259b80a18a2a4283c1bee38ce14be16f13f23160d67e50141e5b3893a496b708f00cdd66083ee766970a3e5ab31f5d1c6c850589f83c16d758e37c16475d823a28ef617e577159275f5f85b9b4f98caf2afd20f6323a70f600279d9ee2e0161dc6ee801557249d8dc62a063df22fa3daf8a0f9d9929cff009a50dfbce7f5b60ace96d4220d1790beab9f3fe695f928384709fbab12517cdea6c51e6094dfec506454adf4dbc4d0189826db5f2fc4d2144b2bd01a096e109fb9759ceb02aa54ca116a7898acd997b6550b6fb3d620e6123b9a6ab8c76ea43cf1c2311679531028efce0be71515b70cb3a95bb693dd3f8881b38b2cf2d484f82bbc605d5994bbdf4247162b1d258294bd90d0841ad81877c93fe5d7864ae1424b480d2672530347b477c88d1a4061d529998409ad0665327b75c92293b93c327a705971d4bf7d07798904127246e3d1a4ce2084286f932d9e770ddc27be0e11cf5b7b16a67a86dcd0f47f6ad9967020d59743055731761ed55af5ec57138a9a6379fae22994845a11d2c06ff1783f3142d9d3db4a74a165ce904cfd919709162585033ae941c5b61da5872f12a68478602a563c3a1d47ca418431a501bb150c256b80974d8b5fa3edc0982d12f69f076823754983017fa66d0278b7ba5884a3b61b142c22e5aef0c53ffbd9507892fa6b4fa7c9d2878e759d21ed177c121ce320c32aa91f0edbd7408fa3adf1fcd7aad4ca64be4650404f0bb361a0e3c4ae1be0c609073a34513ac453488c1dab9ff7f4438fc9f4c72aea018141ee81fb46162118bc5d8bf3af504c0547ad17580189a9256fa4bf95a9d2c381c6c987a340cf25fe9b6d9257f7f04d3c2eb06027f0975036bb2c116312700fad2f3a88d00eaabc6dd13df7d15d1a6fa96baa722a6ca966df4f4615357627295f7e0d1751a375774d199688e4f6c832569b0e1c12ebf2024af7cc1f19ea876ff0ca56d08565fbd4663119730bf0cbf87deb3ee905cd40dd04fe85eda0868f50b35028abd9b6d8bdccf6caff8e4c972dc0ccf1313bfb6f54b5ea1afdd1a15489e04b4f898ea2a7e621c05a1ad3a1a124d2787568b4e4099adbea8a3cc2049268f8bd954e0c00710026bc51b1de9d5666a3e5f9de0406d1ac437165db9cc9da68f2df223a7b31780b4375d277176ef4198eee896ce3dad685e50dc6e5ef0622c0d164ab388de799208a98cf0c2f882ec619f748b58f0c8335bd76578e7e7b30b54526e1a20619d2c1b539ccde122d77a5c4782067091cbf6af98d03242d580d23d9273a8d3bdfedbe2fc7cb1268c7443a9c210588730652ae731ecbe2d05c9b7e0143e505b07315d5cb30e4ceb5816f7198de3dc808458cbd1732bb85ba78bc00acb50945a0791c11377013cd1e72c3c3173170799f9b2d32ecd8c7823fa5b421826a4b8fc3622b0c15c5a6d6a113d284d7f6d1327ab3bdfcdd53caed669643a93c98859a1cbee7d2458753d5518e67a046a7dd22cd43ab8332430e42002c1d28562ad8ae644cd6f8e1d68004b85c531abd7a28fa30047e857c210ef1907d32f6ed0844044b831cb38782b7057b4e676086d3e89730dd01f37543c988919efa30abcb4a3b968646d16df1016d8997381224962e527a499ae7aef218bae79d5135efb9517726559e7288446f44e05ec05d8fd25455904685d023dab3b174569e63e70d4263ec8d9468f59749b2c16f2fde6a7ba220b163eca4d269a9359f56cdd3cc3a4b0437edfe52aef55726be9de50d6ba6601c60e84efd85ee8443de379a9c24b04dc29078feb291be7e8e79c8dcb661fab1ddae8a30e226add260820b73bad1da222e240027d4ae105015400ad6981ab5cff43b4ac2c8fdffe1acd99d5c51225deb3f0e18ac953b3ac94ac74d0bed375a530d73574fde6b376b38c4c68e8910a2637a6dcafa4bcab54f17d651e80d5fbc64d7b96e22f017a7f6e91500895615858a8f092b46563defbc472af21a73b9cc1c10b37bda27d23935256bdc0e5a30c0bfebb00900b216c1f9caad3a1988565334bccc5d3b783c63b78e713b7639bec5e743b126ddb7afacc0a3a3124cfae5db3aa59d07234bb655eb380ae15906ba70fd2b9733929d2aac063a5ec979a581caeb6dfa64b31012c2bead22f35491d2bb968787965b279a61acd0a8bbe69bcc0ec4acb1d031cb19dc6ae4238dee5fd7f097238f8b4d4b8208dcc656289117951ff0220f3c4e5c9c43b9fd4e857855c8925eb52604dc943544317180c2b20f8e1a19133f263408a832641b630c4d5cbe83083a0620485d50ac95829ddea184a8f8cdb4c439591a89267838ffac9a12b04fca112af6c64cf67c4776ea2247848579cf0898b9b54ed0c8d1b9f2a2da36fe563826256924aa3f254c9242e8a1af81cc4ef2b61001c5b609e7c4e6fe149596ce4d3889e7de3afd8e257d821be952c038a6ee4ceb36796dec9cec0e9280ecb396687b391ca0518810b750b80932c557ce87f535117ef3b2437c8471d99436519942d85778757e920f234e12b5c7fa24320d485108f9ca64bdec73e982dfdfb7763efd79da7b0499a48e5d1c8287278e2f37f08cb856f1f3b8201dccc01b01d0098c13bd96cc8dbdc950a49c121bf52b12f0853d9137e16b5a302e5a556d94e9ba046904c6a40949bc2289a937fcb08c0d81b816a4276a9f44f5be6ea05f92825b7ed013810e4a3f0f3c3f17fb90520e2712e7877027f7e7205e1fe948b4499875ea118283fc6675f153ad1ac608db622f99f42ad22f33859f2b327ea62f1351f88c689f63b866c191125a1e20fa0728f45c2b1dce4cd640bc36a369e5c4c164a0a1f2fe8e8d2197e666c67ac6ba968e6ad212f1a180242c13a78f22b15c88d7b4392aa1ef849c3a481a63ea53d70c6c51105d0964910f227b097a2e16f35c612f6bcc0b71cc9f6650bb48a906e51dd8418c6a7379d8b6cb69051ffcaa6b78e81da7ed5ced95b78b89d309dc2b1e1eb3f870f52539d3bd757047933d45559188f366395a03655709b61652ce022b31cd438bdc53ad3dde0dfa02b43f48b28618dc220607af736f70a45dd94eac191a08589c4f33208acab537dfb863b9c9220d4503360a8acbae630fa487ea017b86242e02a947a34dcd06faa2b778d573783efd884479e7a0a231c9216c626fea92823a7bcfca3548fe7fc6124190de7c8b1b6a08a1681e07643f9c5ac380eea1892cb1bbb950a86d8af237b1029f33783bfe1c1b4c0059c82a7fd435925785904b1b2545cecf1eace092c48d21e533ec48be348202e07ac8da070d7e938bd770d1df36704092eadf5197d6385e3770f2d33e17156e9167b7a1d24cba16d78f055896c279744e8e50cfac33d8b8ddaca424d9a876222027c4de33f4e8acd5acd8a0e9de9a06424d86553c7f3f1e041243a9621a26ff0968a4aaad23b1d6cf6b0141f25d9c9b8be87fe2a4a1d6b9cb4d9c6205d217a21ec85fed8bac15751c57b6d7ce54daba558813d9811b66d7e25eb76e28dcf8824db652a3d9ac6307dfe0ad0d44ca01db8dc38b45b34ff378918f27b7e7a774c19d071c28dc988c07a45ebd696a9ccf094edd0a83b817e653351b8ad28adac89fea53e99be271cd98c08dd2bbada09b6b85d15f8719341e7f15bcb3cfb2f211166d93aaa4527ad6a6e447eee1840d33b36a3c0333beec81bc7ebc56e1240e27ce896b8b110676ac57520cbaad054b119270767cf4d82f92d3680425f958657619fb51b147c3b43a0d289b452d2ee946d378e8b7ac312e8a1579aa6b6e9b4a0f8045494a27036e2035068d4cbee9d980291912b0a9489e8255a0aa6b79149a0534a67da9bf8ac01332406f9a56a7ba0c8844a2942435badd2ab77b1885a28ccc4c650bfa34b02771107d4d043f333c271621369a5c6dc002650e6c6a222cc12363c7bb0345069a58a83ce418b6e0d0cb5830b2482868293a6efb2a27c41f8189f61ef92e25190746895144effb383435b29f56bdad6a6f7ea4d3b69e3388262f80ca1ecb121c9d2f4326cd0a6d770496944c13f5c0d9786632329b760c01976d961dc854b6caf4875ed82fc7821ffa3cd6e0442aefecfe7808bb0b95543da07de13898b9d0cefc38a6319697aed6c1abd7d3e2e7350ea13bba711f13d357e65d21959e1e7b19177d35270f7c766d4c98a4c00ffdb087df0054cb46a41c5e105d36f7b369449d25210edb7c78776ee41e288a2357e78abf159f47548595a5a0c274e93f67d5588ad22c86b7a620d443c1534293e0b416ed3bb1448f072be7bc077d5a5fcb806540f6698957f2a57eed532f10eb625c8ff17cd604254beed82359bbe9e6c711852ff31a1dfd7969607bac938d192d52d1b912a6ec4afa4f6f30172a6299c1f6f3375505a2397bf0ff5d36b12f51a7bdf891d1748857e82aa9a367cca0d8df77afe91c9cf57932da76b35abd65ff606defa56e381749e54b562e5227dcf2b42a0ffd8253b3153450cecc34791576d1978c0e9e8bba89585140adb2017749135866188345fcee5ac6a121adbe30008d37631b18183cc1b09fc0bed38d7478b417e693f4b82ac4e58ac81db2e614d7b5f4267536adbdbd27e53cdb3bddd7de65055975daa03c630611fc941755ecd59f841ab9514950db63e8576485650174ebdb49c333e826b41b7f6076adebe022ac380dd830bb603ac264808711ff19bb332e2839287934e9be2f2c01c5c686bb149107538c979434203de418ff9ffb0788fb2dc132fc1269a9a53a44519ea9fd84bfd726d058506ca8330237b4cee970842b6062f2778395a040614f0193fba5aaae3528083f71cd311aad0a6026fc767881d52136cb4f9b8834e7f66475b80c97c770d2e5a914206cdc3f9a3507ebcf0b81ff9aa8a8cf7752fee6a8ff3aeeef42f5e4886a042865e1846b0073c8182ec39b187d41381ce74bdd963c20dc481a807f0e6244f8c451040689a973c46ae211f544a7c645d3e05198c99716c2006e6964eff440fd5ecd6d4785f46302e603ea55ee5c4ba2e4ca2cf1a6e38414f047e3321bc365aaac01fe1984062469118ec6c2a078b9fc32a1455baf2035f6315aad07ea7aabc4659c223f14cc0ff33def37e74af8b01c745d19794053b6bb58f2720a01aa2294d76460f5f2761755274337b9f2ab98de7cec39942a09dc1beea43424c79d6ae99a1f1cf9e6957edfeedb9b1362735a2f06c273be962772409077bffba683192e186278c4c41bc6e35dabba768a14fb33ba3ba3ad163a784db90be8adea57c680e2709e5b56e1205b5248ddf60ae28ef2666bc78576fcf868cc175253538e8208fddf246556a2c0963cef186433ad0f8bbf704bfc2415c86af739414b28024381e53a1e341e234d6dee117ff39dae3ac307a842b29f662dda5ccaa1b16ca56fac065f361c909d082c432e97148258e73309dc716bb8735541f614d89c9e7af25b0a3fbb4a8a253941863700270f476773c97d2032801a1f49be06a938fb2ff5a397d98f0efc04f1c8454ab2ab03cd839ad01027644ee95ad0fd5d9393ea59fbfbe055c486969c20732eaf7aaa95a0fa91718c0708828aafb612bce0163091dde82f153b4db34b181e244a0942b7776ed92ad100eb8645e5c011adbbf4329d053fd1a54264176be73b8161b3fe60cd6294d46eef5106a1f418385afe2ad3ae5172a334ac0639c170f3b481b22fc62021ab54feb3d444a25ea6512c27d9276163f5907e917022d87d719ae9010209eeb9460c0d133ed12976fac8945c905c5ffb9729232a33a3ddda34caac7148113a20fdef414859e1299b000d709d49574725328cecad5450e4f78043be4dc84b72f0944aa839cdedbc2dd868bce5ad471941e5eef0bcce8912fcf635bce6942cf171604234d3201f51339af7f29901ded43783c7934a477a1748217cc9354974cc49e913f50af71368a26451724f317d621c46342cfb9345e81b5bb8417d929122a9db718523bb5795f05a8ad306f0b29a873166a4919f3e647dec50a73132e61aae30bad0428b3922ec6bcd2cd5609501d87e8b60994c9ac7b0248a702040dce3589a3161ecb8e1fd6b49c0a21a9685e93d42a958440bae913f9727cca67854f3d8695fa110e4b9b1d72e489538402e925269b60bd41a1fe5de480793ecf75ac65f6c80c5eb33ab8af1a3d9e4a1a4472294842545adf7f440727f9ed49a91619743929f6266e278589447a1e947777ee1f22989d1b6826e01af1fdb1f02bcbe1f28a330379935e4f916abb8b0352bbf0127b2365548a98d9716e42982e04754464c522ffde8699a6e797111faf16588b3e26466e8b3a58c9cb68da5eec84a2d8136bd511bc1e4b496b2443dc08d9163dfdd8ca0f9711526b3fefa09c1845c7d4edc53b9ae54f7de3a4510b900685a412dcf3391db0bbdeedd6c0403e2cd6f0a2ac75d36f1edb555102ce2b8e2dd834bbb3e851f4654c97880873f1fe47bb66ef5d14a246e0f22b3a7f5557b1526ba9978e4482b6da48d1b0ec46747d0408a0b68a53ea3f9c8553cc46b852ff5dc55edf581b6395b07218be0aa52b2efe988bd24120a6debbe41bd04a57018804784d8b8dc2dde692e711bd6a32110a0f074a3ce5d2514be92a968a20c1eebba315ed54a224de0f32b81d1798e951d7836c061b2935836e985a40f1354fc7a7f5c826b0510f90a7d19f4b282554dc8f202f1d35a82ddbfbfb5539de96e25b934ecf850414924770f69fd2467850d47242441ae7b7262f72b809a832be2b212cedb3dd5f3831ed4b443e98175910c1376f29db2fac147cca15a3704ce4e9dc621e1c6af9aac3b56ff5e1abc5e41feaf62445d4f4a2fbe93cd1c7e0e93b931017ede0fdd9c02acfc72d98d9a14b603d960b260ea78164d9858e94fc17a8484993a03b55f4897745e4718dd97f777a3803c17ef1dd98e853e07e552a1f6b1c251d8a0fb66c0ac28a60d9ceb5e993829c5112715f751ec3dc579b5235e3eb686f56311202103538fec3ab5dc36c8845b764430246bfe5fbf79166877168872aca26650185144d17674ff901c1f3e89b76449273092880531c23a5e76ce252574aeeb95eff295f82e10e348fee2958f9cd790d946fe2b4fa39914c370e1e905c07db7e210e205c4cf9ab44cd528105c77882c8eb3eea152da1f30d9d3969d3f976600025df2cca666c64aad1b0abf9003df627b2dc4116ce4d3dd9ccd70d1395617a34083e8bdf1bdfb715d350252976bcb03632e2accfd1838a69e62759ead2b183b71df497e1662bd659233ab8c0c349bcec92db4d9b330282325aeaf0fef8c632b20d144e184e2b0833450d70f5f7279cf2e0e6e1ef1004c5fc7b306a30a5c77546a2408cc0c5ea473746de635e8ce81869adc10d4a2384abf005c72af9cc6f888e1163836c44db23c0ac05920c4b8671150d3e4d2681e3ff18dc404014d210caa4716ea328d808148bbb0863347c04674c24b7d6f1271497ad02505daed4f687f37f2c7fd2cfef2a34edf3f6c07be539f5d48ff4e3e2a7ae123c488412521aefabd38182dec6994f89fde896bd0a2832b96f7d6b761a55b38a81988d901bd5140609264368322a05d692910d22c93d70971e1f5be3a32b639219422566fc27e5aba4dce0bc16d641c6e80c8f659c6d5f1eef0764d56b5ab234080d429b1be4167a7d6f729f14078f82eb71ba3bb4167897bd7ae742451b7be6b489e8edc1a800ca16d1cc528160782796da391de625778e0872ec01439472a4d3b09d303c35efe91fa93e53f849011864d6db092c952e3ceb87df682abdcc3c73a5437bef77569ba9f43d6debdb0231119ccc46f8dbf6809d38e9c926e27c2a758b21fef78dab71d57fa2d1838b758d23011031bf42965bbbcace5b6597ca34cfaa4b32e44fdfc6f213f99d97bc28fca2390c8a1775e76830c87345a59fb46b04dd3e4d0c25765038c2b972c0a405d9be317ee3fc2007bc12c9f3ef58bf031f989cb84a56e120dc2f121d442e36755093ce6822bd003bf3ad08e7cd0ed0acc4f724052e21f17663229d27db95bd649b1f10ab0b1bb47ec012750f4409e6f66168818fa47c7c4e82c0e5999b14260de1219280196b32ba96d24d146fa80b75a47ac7aae2b3a9f5267aec36db41d51308e57857232d028f55b7b6d8b71cd4187247125f96126190eae6da007b27f9595bfc3847556234fe65c61a7b870b4433c85c07c50f073ed703eb551dce9d48a382bf24290de69baf73f111ba75e075bec4a330c08cd50d7e2f757005327032bbf91fec770b1725be2eb24e7a762d56fa46d4a717689effe481c354fd328e3f8932e8c5f87615a8b75701b0bf7cafc6420fd4473c8563da2d80997b37eaccc9cc78dca51cb9886fca4e960880bef7df99022c270c3f835a3979732184fb84e641cd2e5c0d495c1763fd58417bce175d3a611ae4493c8336b4914af238f6206b7a3ffca6b69193d24218a9c32702e4d7545f38f5b4712cee875e8b13000b5c3def932946d6bca8b30515f2c4e03da7c3f3a947794a248eac16dfc79433d5b323512d82707a5b4cd009cb620d27002a7296adcaaa7dca4d65bb883c958beddb7cabf8dc8e3a23caadfebf828bff2948f033d31a9db53b491fac7d85ec911e17a439752daa5ee3f0387fee7ff127f94b00c88788cffb65b07f14b507554dd56fdac103e4848698bdd0390d3e307435316e4498019eaa4b22c4c071e79c0031e500e33f7a3dc86b81a2c20b44d7df6f02cdf59957de7eb5b6855f2f7f9bcf33cefd217af33b7e4d050a8f900bc9d4232a9a9f9d9f9fd9d7776afb46d9b14729ffec6f0da6527142a7d4fdb1abcb3b01f6c40e40c8c1222fa4d772eae3858e628ec6be04db714e29bcc352053a4115b90ad9f4e79a06a6479ca13333245d71c7443bdf91274c6850e918e9138e3c0c30c62d4e1c841c4e17ddff9212e2426b8168f3d184510688412aab3eb005ce4e2740c76b8e49d8824285ae432ae13c81510f644bf04d689800a6d7bcd59a310998795aa999d4f0d1e52a89be9545094669ce4fc9ff5f7423cec851651f14b153d817224ffd854d97ead93cd346bfe8b9a051991a64b68d12c93953fe8a946572cf5bfba3facf5574d000115e6249659fcfc642a9d34d936172c5af97ecbea0e9097437c76a2a86c16f16d12a88225b768e7917a621ad9a6936ad59f0984a1b14fa2a9c768ca2837e11e9935f0f7a7a96b9e1b7e84f8d0f23597cf6bc2271fe8c3c605e0159e27c86abfd9005a2ee7ee1c3b9a11b782fb81e5df721cab3507146b6d6ddc72871efb447ec847355f39822a3506e9e4f43f0d707a88667e3761e2c46b5fdab59c802a3fad3a99cf318d0388e45ece984f424725d3911eb7a33ee75736280b502fbde10f966839e3310301e74d7dd179449730b03829c4b040c67513250838f8d26d586630e669063186ae998941cc34f4d76454d37106ab9634230105be2d63e07c35575482fd1b5378b21782c08170390fdd84d76a7134cfd409b52a295c41c914dfadfb96777b89c4a18fa65d3c2f86ccdd2af9e0e5c9e18675c636cd44f0c4220f583c4b10f31f3ab80d3a56e7a1ce10018690b9f0a5d1fde6f338c9f94ca9356b8faa0de6814e67ac96307b3510954aae613c78da38b7598ad0d436c7299cb7677d242c8dd58b7ed927924f16d21e9168b6d8a6f8d3207b421a40efcfffb3c85d0bdd4a19acbe70d85855f1433f05407f2d559ebce3753b123fe83541e1a7e114a87604b69af32c013558e6b1032a0aeb4c434de101aa6004a61a2ba06271902de8c1e6295c27d9080992ee0e623db631e62c3e8989d909533a825538384ca3096f8f4afaf34b803f2e25f60521286aee0538af685c0c959456f3965aeb0729c0121dc53554a7fa11e3ee1e124e54018f218e0f75c7215a7d330272fa151c97614b1bd33d4cd058fbb9de2313145a1bc79c24d8ffe6f9e602be371ba053c0b066678626662ea06527d0c1802bbfdfbbb5c7406d8dc9eabed71bf2aecc8d509dad5b8fba6b8f02d7d07602a65552d449282878c5df2a51bf0ceb42440de528c7b2b68a72754d62994bd4104025adf6cab27a78d0c53da9da703ca8ad1ca23caec64064d558c4b1011459d7efd4a2fcca5ab9161226773813a6174f12ea0e70d197e18196a0fda69b5eb8baf7fec46357ec4436063a587c4383b17911cc9c6a806f1b87dc5cc7b036c2c23e39e0b7bf05c9f498b3fc1033f1b3c41d7ae8f28a48fe82612c65f1067b24b5d0232a1e35ed94adc314da351d77ba34945fd10454d54b4e99eb4a4e4d27d9e8b4a913d9478870ac5276e55bf6191c030b41bb2e939ba089f603deef5c27f4f75ed362329e61ce2c8c1938080f0b6fe04c54e7db9585c5a25353a82a3ae371d7d11b7080d5fd966f25c74415b16efb77a7b7acd66f500c706a21dab977395844da00ee297d60696c3f90385e89fe3473d9cda2672337e74bc558f4fc5f62ccfc54696d6163a25c88026c6479c0bf61e61caf27c9f815d75a0b04f4b4260d05ebd490d14369bb1d56579386fa006b193b77e50af1330e39ef03d1f8a9854ab0c6aa51277445285091d5b155914756ca58d8c556428002e79f8a2d578a6aea719781b2db84564d29d9c6663df0a52b3d3e4f713a7fa054a1988919a83fcb6928314b32a47b23e60b05df088c5598073ee8d3399235f14ea2fb67d017ee9a9b5fd6e006430e547068110beb314145a1e008dfd69a61c00b7d9c4a9591d4980e54ef85d9f5e02e01ddbba811c18927cdca016d5ccff1e01615dd32a1277bed4725631c4ecc6298ff246201ee05830f8a0d585824cd5ab8d6dd8ed93eda25790e30fdb0caae08d33cbd0df501e253fe18b40210c4f442beb33881d3980642104e494c44b9912ea3dcc3030d2cece90bd4813e0801135eef33b9f596886562b7c7620fc5ae6aeead058337da41aa22b97aeb86290bc745e0993c448355af8706aa8a9efc0c9d15169343bd70b0c99c2b6a17bc8a50c2d9b8b335ad84afacfce78b077a2b37ab4d59e9f382e15e21196ecb4d7213b844da800f2694a2f82ea39ff0e8d8d176c469b48f7cdd6bd642f2bf08cb28c5e263727a96c9b1095f244e49486a6c7e64faba129f6335a0932292d2f03b506a212735c39160da16afebcb16f7c667d22aef658631ded27785fcff14bc8181a8a48546fa5647f719822c081e96a0e00bc8a5e2537271538a0aae437d585a2aea0ca033d1d6a3fe64832eb4f3aca2ff07d1895adcdd7b7a73409e44967dfcae0386d5978264ac292eeb1e5678765f907f1e473dcf7d2a20794dd581e339b8ec3768fcbd3b0adf95ecd90f27e47ea2f60498f923e956bb67e351c4d5164c85fae38d4f22addaa3a5082ea3ae54173fb241f1e32292f04c50cd9975a81c422db5252ca66b426ef532c4cbf93722742b51826b03bcd622abf5887826b07c49776ab29fbcff61ca10cec65c4335aa40b66573605553705c2dbd2ddecf120c404f89586b30ba39cb819bbd281128ccc3e4e74a8d879f8d43ba5e857133da5e95559fac3e5fcb0a67f43e8fb387971d6cb967a62f2bfb44132992e5b40e492c75da958556740673dd8be44282d22dd6ad4141471d00c924f11ff388f2231f1232d802e474e868b3c980de846a8444540831b07a1e107a38bb7bf88441714657a24afa09baa3e9b551c212865b6c4eff22158cedbf55e2047a7848ef3d98753627dabb39dda9ceaec56c3499dc5a5a19c9322170149095f92b818444915c1adbb61969b73853021db1633f4ece73acb31aaad02555995e17536fb36ec43c9752b0614fce07f4210e04f9461640ea12a822b9660e2b269268bb9656126b5cf9249686aa72dd97fe203bd310f144b56719ee4e2343eb6868ef774f2a1b19f2d05de13f787f34afbc76d7ab074f799c05da11c07f32985d247706d1074cdf818b89791d989c69b78f2ff9c0d4c29dc8085e07230175a0e713f2ec79b1da65836d1cdb9ddc5c12b0c614936193d3761d7b4782c848417ce1d6ef543af7d13de44a5f98948ff5b463f8857405f0cb0a68ac1ddc80b434f4ee23edd6720983a26f5b3e5bf9a347fe2388635129be98b6ec6528a353f9599f07226ace72d45ef92de1575927b61283694fdcabc364280789d1405e66d305450fc15bd15a87338cf48e7872cac118a856b5be801897a2086c05bfbfd506e0b20830ac16ad8c12a63ba596b3447134d53a2f5b2916f59071a5600a05987f4d7a103f3df2c60bc1ad0019c8dbdfeeaa4f23908cf20b8a12da31a2acecf3cce184ce54277055fbd40fbfb22a36af70d22cbdeed805fc526d07dd425ec083a1c78d7ad3b99ba6d06a35a3f3779c65247b52725b509617b2c145575a577eb4913d46d4dbf727b5d60215a1fa08691838df9bbd01b65db7b258bfe15ccf4dd87d90a537257b03cc300d4189c1976db535f01b454eb0a820d10d4ac64567b6f6393ba06e27f9ffd9e0d8249d435428dc7e6c0817b7f53b00159fbad7de16babccb699a2cb21b1832052c8da5c08af137e76a20be886c3d63cf2c65a9e6b1ff04b429ead96d239640602a58767d1d9840564f87318648a42d12bbeb83062d1c51833e275d6f5df1ddac1e68a97ba1a016665c0bad62316c306ae63e0009d12715607da055a91fe27beecfddb90e921d8d803a3377f0a892b5b56c095b2a194ac242e8ccb7ba0e1a7c3bb0b0b4d6c0e11f9d666599418ab561525979669ae4cb881fa4f6a0cab5e1be34e067f4e481396decff0f4bb2175e3afa0252198820192dd08ad687b08d0206b49aef18f88b2f28433dfd0932ba6e001ad650dd7edcd1c6437800fbc0a6500659759a2643eae39fcaa47814c0bb228f0bd0184ae6352a0c15d51a3513437a977de2c3c881755db08c56f2d5abb37a5ab44e7f0978fb27d13f350ed6eda968963a6fc0c7c46747d77fd725a45e25bd4cf131f71e5c6a93a0b43359c1b5e184257bdfcafe8a787ed96c900ad96dfbf7f86571ec14e09ec0cf41f6cc59cfb3582241e062082b6c8aed99ed8c027558b869ea2c154dd7741d10fbe1200587f161882481310809a300085466493d9040ff7cad3ef012c5192cfada31af2dd38ee0b7619356521a9cac8a47b5cf340aa94b57ebd55f7bd9a861421099ddb23cfed1e25e9978bd429882080cd21bb00cfe4df40145e1c36224ad76e3ad357fcae601872eeff59f5c4a6a9d1bbb888cfad7a29b75c84828994d07be7ce2e461cd8676d0eba77a33793d394dee2fcfca40c607b45fd070a7979ef36c117e2515b5eff504671be912f693c1c552f1908b2b956516cdba415f764e9b560d4431892fbc941024b7759546788837a3e602d9f6b29130275b6959019f72a51489a00ac4910ebb6e7ef93f5f29b0539ecf8d8e61e9930788af3eebf2d7850a163adac047a4d1341dd31ad13cc296dbe11d647ea0966efe7fb4530cae923fc5ae4520cc9c580300fe20ff2725b0bc6f232b2079bbde89b1373e4154ada8a49fd4013931a23fd1514045b8440e38413f726d8df544f098dac6b6a8c1c36d07679152db43adaeb252f1f1673dc657d538ee342e03b90bd8e556304f3c0f5ede96f1184be2e7af70c80286de499005c72ee52d2b905a6bf1d8e3613763ac72e49105a0b8100c69cfcb6e69269be3f768c7ffb2f27d831f9111d3054d8952599d5b7628ede0b89ef2076f12fe27f657c4c5843563f99eecf45d8af79075bde784ee2983befd0a7341068f07267aad3e012027bc4c7261e261106d4c1516f7c2eca0c8e0f58445828063c15be0736154d1c38765a3fbd049b37e1238ce846287fa1240d895a7326a8f2493058a844506aea174328896b25c43cf31b90d104b2be1c5d45b00eeb64003f165dcab0b80a9e8e92ed59b5282c156e1a075c4a034a7c76805820962a4e07f103e21ec5fbc8f5d395c2df06d678883419b2057fb9103957ace531604c02c746b8a012625988036320fcb0ca79e0833870680c5b41b0341e067bb1a957ce2219779fdf3df58b6028a4eddd6dcbbdb74c49a6fc07fe07e407b31aee6e9b6bab69daa66d44345804edc471326a6da88151333c0008f9ea958cc558352a0167555a0154c72d8aa94669c5b3d76083154bb31ba36cd0416d91171531898b2a7f68d00c4b20981624efa705a11f580e7e5cd90be6c68f4b34c3dd0d5a8059a84e49cf41071ba80caa5792b5f9ccd24efaa6a6d3b0c7a6a673e1cb7e9b429d5eca6ea17ba27ab58936f4a2280ab584b7b9c71ed31da4eabad6039cf8ecd08c3901e3c79d91709c18fdb858847a32831660166988da02ad2c2e68843ad97c4ee6c97213bd290b0c723aa8fedbcc6603a7519628c210366b10c1e7065200cd3987eaa9fd09c95c0f29ae709973ce6ee61c99a5439a28021162e800a789161bf87030ea78724d0607ed831e9ce19a438d36b6f091020a2a9d5409644bc75b35913569d0030e50fba972e1b8529a5a4877d932b078011b5ab4000d2ea0a8c1cf39e79cf3e4c50b738f9c53491355f8600b2969a471c4460fd00b74a07137ccc5a78efe3eda658bd589ca3e9b594ab6c118539cd815b2744eef4d06d1f8354dd3bcc52983ac37bbbbfdb12d87747fb08fd3377135c96868d4b9752aeea43978dd1f3be7f4ac6cf79783d94495deddcd725bb2cc9bdac6d18ecaa6b671949bdac66d3f4653dbb49fa9cdd9dc3e55fa323353499b70f3a7f376774b58ca8432818181a14c60606060606060604a3094090c0c0c0c0c0c4c0925ca040606060606e6a54499c0c0c0c0c0ec285126303030303a4a59502630302ea5ce823281a99aacd459c0984a9d4569ce0d6739cb0e9d809a53ee2712f1aa715ced9e38368fc8e24bfc01c1504ade4182e1b21aa757f40aa7d875986f5aa4b322541c8fb72716081458486c784a92b8e20839e822c808181859bcaa783db58da31260ca8928999916c7fdf92356604410525889a3c8881e78d628552a8e9c48b7db98deed0fe0053429438e2b509a080a42d2a0899fad4b7154d212957dec317987d650e2b49c983a1918c59ccf0fcbc37a07d8d54a21d2e5d24646be145b92e5913c703acd298eed2451a6db5be8702607ed3f9799f9649e3f31c6c8f6d7600d9e93ea853334c31eecf162a213632283981040f85146992db7215e6f841f7c611be2f5a07b12a4c0e48180749277480a4725fff9565be0143b28da10ce10235d6e449048d405b202cb4ba72e5b4b03f3ec522ecd74aff3a27aa24c0b6fc80041a6c849ceee630e5a0d43d475589a9a6d713ca8bd0aa38efcb3c50ed748da304a7a24cfdbbc8de483e4429d55d6d71c62f74575ef442224e7966c0d1dc98c848a7e66ad1f9790ced08f0ba1fca51cd22e6f0080048974a41cb6378931d29765722ac6e4c028962d9b98cf4d13175392fb9036426a8b1ee9606ab186197a65126528ea96254719191eab0c07ab526b699a66939313f3b9c9b9914da44b97e7ecfc6c768f19bc30654b8a25d74b96e905320088dad3448d6a9a4735aa518ee3663bf5266c809a64016a82052432c3ed02288a16cbdba9fe5ae7ac69a0f32d4b058d50af08463f2c52b82caf44843ad2da3158a339e74b250801cd39aa35b5a28e94e34d8a8f07b9fc1f0fbbbbcdbb1f0f557afbc8cb3cd180a2c9e941a9d2e9107a367b509a06964136252f28da6e47689bcbd51b473bf003a5dbba41eaafa594d2836383785f077ef8360a84cd8d4ac4124ad4f185ea706ad024b8a2cd8dc6d93eaea8b6735fddfe24833a83a39df6c2a8aa461d675e0a997366f3a69bd832238de4751119ea2744e927649e2135ef3d43135b26a341a6ef0e3f9d5f0a69325a2653ec5d454a339e6500b9ad3477d6c5c1f5b66ddb06c484ce6fdafe7662d416a126b217af220d3084c05854ef172888a39fdafd0209e1c38f2edda8e02f9010375e54ed17480825c818c2ee52cdb5d36997ce3919082899212e4a1a6fb0a088c7f5b304ab65f0edce4df179bbc514cf4ea2dff5e42d450ba8b64434eda753013cfb2ae1c3b3732011a62bf480aa0018b8a2c082c807517ca2bce660e61219f51b7b7cffe8238927dfdd5e9398f2ed2726be8174d8f84635e088099911a42c41e20a8985136b7418755fcefcf821f102319e9d2291e5d9b5da83133f80343215c6b3532d553c7b5728aa7c73b22a852370a80adf4dfaeec0a8fbf247cf79e3f9d9e4ba2208580d8018d26288216bbcc248620828070837438a8eeac9e86509a11fab7755e854d22f90cb480651e92f90eb080e58e28783f90562c1cfcf5f2025b0fce84c789c12f5489132e4d250674fedaa082760cfd0a9f317c5457a2579fc2879d070612d71f0ac31ac89c360f2891c9257649451063dc39e5dc698d9e9ec97dc614e9452b63679d353b46186a13a527a3ab9b8d037e2966890bf4fa76abfdedf0686a89b4b972d5671db471a736c96858f584b0596b5891e90815172e5f9ba0fb9f244798553ad9262fbca15496c1f59f8f64fa7f6e3305f867d6366c63467666f90088b2d962ed962671107f932ec0f4aeb8e6cf5e9542bc7415c15621951111de5866244728a108f50104f2c0aec55461d19f68461eddf3e8ccac0ae4e6f7cdf383765183fe155ff4491af208eb110cb28275fac1ae5d0ef306ca50da39ae4b2d52b922885ac30aa875845c4aaad9d67a876fb4cef0c0e46ea6f3e8f907c36c33a954516897206ebd60e23786481d3386ee3366da774754ae6b0948bc3a8964153a35fa027b0f819d918b204b2044d9cc10dbd34eed483e4eb759e47f2489d04c3ba2f7bda1e8b6aef42df6fe9ce45f55803338b3720f9394ba59f170b7e3cfd0be41987cc942a7d8a1f6b0e6d0137c4691cb7b594dfb9484a3f31d8512cc8208216f62848464846a403abfa04d490ef556dc8a1c789d2d3e96562e1b5cf3f7ab105a262ca7b3f5e501018587ea4ad0d02e3caaf246b83b0f879ce79f6d8ebfd37c88a221e88af8f116c3d3b0c8ce2492b0c4b54647edeceaf88478184d4c50860d7116bf2fab93bd7a7e679d39bdef4e6e426cd3b1b0fa37c3ef109960004409645147dc2708afb0e0000f0248514885040a1498f1e566262824e38a14a14134cd8399da6f0e0710506c6a784126e5e5e9aecd86145878e1c179727b54631998886be864ad0830efa100689a82397e5b988518ce5a59472d2ca15add1cf2a0af684f4430a22f99062a4283da8a3171b65a6ce87e55927cb84b9b09cae5422a69e959fc19b327ab067ce472fe8d9833df15eac1a49383ba4282423cfa7d3c2286e318addc777d2a4d869b94192bcd9f9cc8ea72444c7137b0ea2aae0a52575bae7d5f0d1a15f59c3f76be57945574df90cc74e67c628f6ae3cfb00dc0312fa00c4834809c437081020405c865304124a209e03f13ca21f80e8c918c5443cd1b3920a47faf3ecf48cda852ce74938ac1a3d1d520eab46cee7d9198612478e88a4e33561d5023dd979a6ad71733dfbe8c514208578563e9ca559178ece0b16a33c4d722dcd6639f2623bdf69b1e99a7ce248a7043d6f97f3ec1c0c87f924e77ffc025171e53f1f4e5bacfa6c5c37ac2280b3531c56b1005361003e9e3c948ff43d157c7945c2a1329bfac357700912f921ee10aa00fcc5f38457cb9a5fe987fac36718b53f58204048c21980389e52e25851e248ff0b5128d4ae180381972b410b484000e1b83f2b84239df2ec2a84238df2ec3ec2d6f812ea308ab55711ab2419bf1f80b0465684058bcc88555207bf2f86353223591659161e56492bbf1f863555787c7c845825c7f87d0f6baa084d99f26295acf2fb00086baabc767660ac92547e3f85b0a60aecc993215649d9efa310d654192222d2619514e3f77b843555749a3491b14a86f1fb31614d1599152b3fac9260fcfe09614d959fa0a02a3156c929bf6f4258532556254a95282f56c91cfcfe29aca1f2dad9116295fce2f77984355484a64c99b14a7af1fb30610d95d9952b3cac9242bf5f42584385c7c7c7c52ad9c5efbf8435545c37373aac92527e7f47584345a7491319ab2417bfaf23aca122b36205875532e8f75dc21a2a383939305649a0dfaf610d15d893273156c92d7edf14d65089458932c42aa9c5ef97c21a2a43444435547e58257f7e1f0c6ba8fc50095a1a594325687fec0f61a02d7e7ee45c4d8db6230db6b9e64a293def7b6f3d9fe10dbd38f366ba34d80ea37aaa268e2ce4e2a28eaca3e9f4aa8f26ac5db06fd774f5ea7bc2df8ba7f83df95ebda2b4256d7ef4626b44bd68cea94def74249a436fa80da35c148751acc3e3b167186db57444a9a3178b7951c0160b0c013548d5656936eaad5167177a9ab66989e2064268228aa9715ba411a31c477a49b162042bb46824929344240c90c3073256272a61796bd4c9a8ae3997e138d64d84c074e9439a6bc38d1b161292ef208d8080c282d2ae84e57521295c9008756d079918183aef5c094b098b14c6c040ea2dbc61b76cd99284975db82cd2ace17403c871334a9b7a6bd4ed8606d4b0334dace1f4ed24fa33a4df391886b73ebaa55c97610ddb64d4ec86ed0f1a446f565835346b82e6b414df0b70394bf31154804b86a5f968fa6def96019aaf266e5638d5e226233571c12663926b73cd3990078cc122a05d86e00cc127200d7e0f3082200c36487b53b13fdac7960204610ddb7eb0b5f1fd7d40d4b1619b1abbcda6167221a9055b80f62d240db10768d74252108b809622c9b53fda3d2b7a82b0fdd1feb9ea26eb5553d1587cf70f2a08fb7610c67c446516e29d9272a9e5af389ee0b74bec55d6f504e18c95bbdd13892a7d494b6061e29dcedca1fcb9bb20f86161e8de7d4ea2bbc3788102ba5002a757db6db9a5bbbb4bb94deb4e8bdd8e2b82d8d2c0f0a2356f6fbe704a9a90447540fda816b6c029291302dec2dbddfdba707db173db57f3dddda935067ed0da0b8d09661e9c966b88b4bdea56a7a4d37ae2b6d609b1c68164754b7abb5e4a29a56b91b5a0aeec3ad6b66cdb30a1ba9bcc3dfe4022bb33e981fd21e1a82b7ff04cedf2d37cf68e0c22bdbd61bd23b7a09d37fd166e53382547509704445d1f9285db1446c9cd8b0d9283fd217ddca4bc7c16bf2fc01f37d9260442c0fb4da8495d1f372196dbccec463d80a28727c0970b868680a823a9f5eca4d6cbaebe2675dc868686e4720fafd8d248e79814b7a2fde1aae336f4ec43bdfa36c5de8fddac7f50c7adc87190bf152d4dfb3af9298e9284e3431773ccd13ef4a0cd468f388a3ce03473425546fda2280b3252726016dcb333b7342bc60e9c4d480b4db0c57e6ea9fbf4e7966a822df63448e75c72122ac7f9268ea11552dc623b554a293a0df99be2ce1d38717873ce29ca3919a5a4a5948126e73e0df4089a23b4b9c121c1152d1f91e319512757b4b9c11571487048d0223824a811b4081b742144eb9bc5a7f0c3410fdddddddddd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3da5ee813195baa734011e9044e1f5eeeeae44e38cfda66449bfd95d85162c457eddddddce1f78caa82d21a5558c1a86fefb0535007efdab0cc30cf94a67f45ca569b54d5921086c92fbdbc0df843ea14da837f0c5fefab161b0fdb1449dd5288c984479431e50a4e78c0f165e94284da3de755d473b2218c4f13e4621e92e505f6698d551bee4135bd4718fe413cfbedf3db134db8351a713f522bdd2a153ec5473c9a00bfd9cebd039288ea74f14a94b14ed90e87043f571e41efb6467047b27015e9d3ac52d0c794091f97aa1667835d35d8c222aea9914f2f5e0e8333a63368da691fc88584b8f2f0b7f57e4fea03394248ee3484b227dfb7da50e6c81365a6819d40cca064d63d2a139a3439c46adb856c845c7ea90f267114c183193983852c8bcc1d9f1e3c491bf318803ea802dd08651df1c1ba4fddba2657f507ecd9bd76bde7c4bf0357bc22b14a7a44ff9de9fa0191f1ae5494347eac7a193cf65e8a4e45be8c44559259fa113576595dc0b49a10d10cef2442ddfee72d627d22c9c6aa747bddae1edb46b31035c5ce36944db2caabdbb9fee5e9d6a2352ab579ff3a0d1c5ca18bb23922ba4436112927b9f835eb8ac8d456f280e75d1d63c9a461fe923b9e7307c0e92dcf31848ee89dba9183e07459f5a24f1bc04ba4b092011ea2568fccd1fa15e258192a4e45eaf92b838e831d261f0bce430803152ac80e7258fc1f392b89d8a017417910e7d4954935797d5e47938b5f36257bb343bbebd135a1aa35e953a34bebb32be9dca777744974b4e744c9d1daf6f1d221225ac89d3a99eb04eb5cb70decc5838bf709a78b653a459441dbb9fee27689c379e93c2652d8b4467bd2a39e84790408181e49f232989ff89484071469cb30e0a329e8a2e8a5571dede395915f5f6ee2585502b4774583c35614dd03cef873a763f3a21c5e11beaa2399cb22285d0203648fbce7737c1a12ca056ba9fee87c65835ce995117b5d1d16c0979de3ee4f3f659f4853321ca83f9b670bba0f22285ccf24e32ec88be67dfff0d7db24e88e42411c90eaceea753ed302091cd61389c44cc22640a8ab9044f9c30aafca1d42b024bf3bdea5cedc2aa346fa7c0169142aa0cd2deb978f09df02db8ed09b24b37703fbb57af26119b6a5782baa0c2e0bb7be1ec0f20eab84238ddcf37631411a3865cbdfaae709542be3236487b968ae5fbe3c1772df26961d548dbe7a94bfa8743759abebe6173a857246fa7b35eb59342134909c71c80628c6fd9a27a553a7625b3a97ef9d2b0877345954cb5aba414a2893c3648fb093c38e4d77868b6e88ce8c9b72cca7221479436fa2e712147193f4e9b76adfbc93c7fe8943ace482963868e1938430c0d21ab406b7b306349dfb254d9be15f54a220162c4da5c8a4065c41aa80cd87703c57cbe519dea656d22ed5417b5fb17c80928cfa00341d1e4591ce2c796793e5499e55c6aa824e1597409aa3b7eb938f27954af8c401edf7de1a49c1d614eca9de2aee438e776f78a47c31c38c560046c389dea909f5b77f7f6437777b7cbc9bef9a9e8c8ae8e748afd242433536576255339071b3c50a711104778cac8c8c87cb2ceb1be7bc0b5d8ddddddddbc656badb5d67d434f76d9922d0d544a67ee126a4d9f5db9b0fac2aaef24f9c4aa518e3d9edb4d35502995bde5d0ace8082fedc92c4e46f1cc0ac9906eea86aa1b11956f2afbe844d5a63cc24d40959b2c25acddb9aaa8d5565b0d07f93d41227369b648b7091f50a58fc3fc1378648c5ad4d21849ed2a0232b54227337eb7ca37aac8fe68e776b0d3e4d7a85be24c393c1c72a0cff9fed820dae4b4bda1b76c21c7d170991279e9e13e28505d5f6f436683f5bc8e2aff02f538f1a59e26a4184dbefde524a34645420a98ee8429b230a3093878987883256db888a593b5d2a9f4eabfa05422a55462e39070441941ae20a0085a224794a02569f010414b743047d0922d3816b4640657042d7112b44489d77e8396e4e460af18c10d1ff010e10613527c70b24101a265bac18274a3699aa6815f30f1850b8000f2850dbc2f5a70c33df47c31bbc737504fd0b7929e207ac670830657c85ee03e627e817a60f0db2f504f143fba0c259259c25baa10e1427cfbcb49468a91d1a9cb410f130d9b9c594ff5a5d60d0d9d0e0d17f450b9e1986d515f4ebf40b3297ec72fd02c891fab4f2e644e5cf58162c17d300ac9172cd062031ef81001076be3a145848ee628f7e1be6ddb963596b80f4649ef15a5a2b7ff6c91b116ad2798b87309e88209d32f9014247401e5479751c35b1fa3d65a9a0ea760591fa3f7ba8f05968181ee9cb1931775b5982d4e2c66120bb0ab391357018c92b33967733663bd621c94bbc937df7cf7d9dbc29369d2a9695a77c74cdfefb934fdeb4398fb4a60056b056b6903894cf1fb96553a283f0d47e942e9a711d3cf24fc6312fe1823fde30efff2f2bd9efd1d6aa10cc7233fd620f39f8f2a9c3c8ac329764a9f529f8cda9e0ad65056e9f0e91faf5e7cfacb04894ca35fae5da7f110bd6ce21788064dde6bb066ca1823ad823739f5393332727113e826a33779fd2287fa6c03742a7bea26215037cd00e7eb57f776b8bc94e0622a957cb0600ae9f37852f739f7c0d20c6f30816e0a4ba17c13f8c29cd3f74d26d1694883c9a983d43fd0888936f388e5b06aacaec3d95987553454777176c6599a1dcece442c8d29bcc154c31da17c107cc1e42e26932f68c4e42e3e847784fb0bea08c7ea25770969a86e720f74017493934023553489dee993e33d1f5fb809a39871ac54c9ecd547be5234d73039fb0ba7d38c552623e1a987282a608755a369c2584583c95f1de8825c62f6e00ba053d088c96bac57d44ba0d45578eab15e2d8bd6197bfef607e5f1a456e79c0794ca9daa8f39b029a4af812e98bebae7126e4f839bdf367e8166f07a2fe6e351451de5f7f87840a99c8f95471595861ce4d3b08c9acea5a0955e18359d7b4f72bb882f1ba77569dce15f5260b929cc9229dcbe144e71fb0b471448e3cb387f649c3ff263093fb5960ef6291bc444e773e8df15a42c81f32b4589978e5f294adc4ce9f10b04032da630fa0562c2f5e377f4ec3b7e81a620fa263954580955e8eb2ba87563805fa02d43df5a8abeddc52817a4b383a1271964508c710174ea35200a2475253f84398471308471091291e2c963299d598e4a2a1646f576496e1f0712914048960445194a1ee63efc5c869d83e1a8e47371919c041221390e319defcbd2d779e9ebbcfd8410dc31c1c265547db18a7a13521e3c81c7eb550adeeef2ea550f37cd344d8e6f175934cd1824c2ec9d6aef11a298d418cd637c65ad162b46138ff47014bca958a912d4628db5e8c873ce59e5798fb0a210d698907bd5d7374ffa4208f805da82f3dbcb14c26531489ddba9a369d694e2c034034d3336e4aa74e4ed758da57171214e2e3d541d0fc7b76b291931aab37413d57fac42554828c64de0015363fc65c2524fbec3f4ea9497b089a3ccccac6a3e54af42df5e8558359a809c8899aeb0a988496b5470c6aa11d431bd4c10c597389e4ee2e80e238e2894cc0e7194a945333f9a5e446a25aa23282b1df5ca34a347a6d2d1d7d20e611d61c5b23fda5dc22a84fdd175082e4cdc0588ef247c7b49ac466096a12c62944e1d4d2f93698719e072568c68f4cd62c5528b189553fd970b33b2fc08cab828d584c6fe68dfd2127f819240e4833a82b2244c4942909318970feec438bbf61bc4c314efc584a62b9c8a6191088b633d7ad9e0c77ac4cea2098da25a3487d0cf66a659ed411d41d9094573f0fc02fdc0f500f8054a438d0765bdaa45d445878b0b309ef8d1a5e8db5d847a659a996632a3a1371dcdbe41598b515d625247d0e857b5950dd3aca8eb588b8a7a657a75aa4dafefa9c59886f0bd2b5310a490718567d03b2a3a588c0fe18e8a28bedd346354b3caf45a9314476de7db29a5140514b40ed6c5ba21566d17a57bd20975441d4fbb464db35ec9b04325ed33ed3017633ce1a28a8c0b2a58e62739941f1332ab83753cdbe6691f11ea60d841e99e54718319701f187630d81fed32f4aa9ba2ebe9aef8ee606354494150b6349a0bf607955d69506859145da14d51868c69af1f19eb601d8c190c970732806480329c5adfa8454ba3c325886f1ebe97bef6aa45b5a81ab9e8b8ecd42c2e585c5c2e4dea918bcdb75396527e3c5dac8335287fa81dec8755b05ec94d49172da6f13005652019201972062f8550d1345b50d62b195b36cd76886a2f4ab597069311694fdab59d1f2b319f6fa7f3a5f562f33b8eaa514c4c2d92cd2522dc0deaa8bdb41d56c158454123d4a37c8c736654ed558b5a2f31e18bab53da4b7b75b0efa7853c30ec1e24a28e9dcd91167ad4b528966ff77818d53e4f631a2c264644b2034b7b75aa7b84cbe29063c2658144d411bc015b8c92524a49a97b4beb53a622d8fab27cff302ae8dbe7802dd01caf5fc9aae57fa89a937c34bd4cb35e814f38d51e85823ea61918649a6d5b2a28fb760777c01762645a187a067768953a825d8861f45f08de30d8fab2e47c7b87e3dab4fc77f4eda04eaf3e212aab432750e78b7ebe8d8aa2c8a945a2e7431d6b91f62afa76ed558b6a9196c32bb9f3a4c9d4c22b79c3a929d439369f6c0ef59cf52c7a165a3892433fce9f3c704e3c82228a444a018793168b3ad3d8929b31e69c1df4830df70ab2d1a2cd727edc59eb872d7e5c2cb367acd499de389600c2e92485c897ae2d4f594345e77d6653929b2f68bd266ecbcca30d345aac16c71502caa2c8a505740323a01b1001d5208c173c2b5e8749d83def30091418d83d3149fb9cfb46b34fcf394fb2ab17f9d353b0aacdb9394a9db02e4aeb48e081a5d9f1d367589afd497d4a1e7eae1c734ea721aa53cb252a2251c2f24e4d9fe9d4742dec3184c3235e7b4c6a0f1b1bea9cdb1cf15c0b49e10c9dd2a1b73bc5f950518c9acccc356dfde65e6d7752728ffb0b6225b30b7e63259888dfb6ed73d04f9ddae4b67d736c528e5569be559fbe6dbbea920fe153af8a9cea26659dda862ac0ac9228619dfa09658c47067191294594248eb413a9386b4a6b6d90138f94e41a4bb3e33797454b83c33cfcb66d5c72626a756adb4c2212252c1d3ab5499c4e6dae8539306aebd4e65fb89d6a41e5cd371e5858356e1639cb61dd66faf46d731e4ba3396d6d4cdff0d6c7689a7dbb27bfba83c400cf4719510a993bea8977ac2a6651ed1a758e5f854e4b37a50bea665d964ed6117d7bc7514a298e118bea6f2e0997e5d1fad2d59853b58959d55cf232975020bb5a41a6daa78f2bfcba2855a77069d8972caadd84554d1b469dde19356d5835c3a8b96455427a7c74a354a3da26795ba19fe10af9c1cf1655fa911abd510d37cd57a0435288264e1b5f41aea8116ce846a946b56ddba68d143223831841ae3a2632d5be339eb743f2ec7e3a299d14c9e45bf40dd29d8b7de36d9bdbe412be49846924a5fb5181ce24b045ab65af5031aad1c4d9a6d10ca7e3dee6ecd296e5a5438dba57f7ea602f1fe5011d5a611acd23eda53d995a66160d47dbd15adacdb74f9652ce6f7685a8bbb75086fdd1cea1112672b572460ac9c006698f804ccd142102fa37e19821810871ac4a339242e64c731971cb6d9ef7b9272611934081c11363a47bbeaccf93c44831e608c92db02c927b4e1293208112832726f99ce42431467ac995b092c45480e48948a0481106cf4b2292ea9e23d1c15a16e838dce082fce9165856c97120c2f991922f68f26581618cf4cf97d519859a8ff6135301927f1e03c93fd1f32431d25d62f0dc2426f9c4980ab838e831528cc1c5c198184afe79c93ff7bc9340388f3aa5b94aa1a6a3c13aa5b5be5d47b89d7209b7536018fbd6112eab96c2654da34ef59122d3689c386c64a94c9c2d63e24ca3bfc2b39da9a8942d7566410b15a2110c0000000315002028100c888462a1482c8f5445f30314800a7a98427a5a9ccaa34190e3288a52c610620c210400020408c890cc9409023fae2a27ba5c2f14c1057e810a85a1e1058c608c0b680569bd6991f45d5b37775a15b8cb1591fe566e0c61b68e026aeba84c53240e3b97d7db3eca07e079b96e5d710a2cb7c3b8e9d385a52617706ce959ec61eb8a03306e0fdc49ad6cf7a0553b9a7126ce712f099cd2294f107847ab5fed10be4bf421af0ed22135016ac0ac510b16c4d3df565886da26ffff3d04fd6d9f5b2515084c7706f192f77071e521fbdf34e48304052d5ebaf950138a03bf3ad76113451748c68ae09a4875d78eb446d10a980ac099091905b18f9fc3305248c86c4925f10f9c3a9c6a3795dc8638f56923e38d57fc2a044e6d68bba25c35d4387323a3b2d4160a1dae1f740814c4f337268c1d9f342639a9af1514acdb95765ed68cb2b55c7d91f53f0463414ac57ed7e8a52c79fe05de12b555718cecaf75771984f9ca08b2618b124852ae44ba8635bbd2522387a99de2bb0c73e5572f855794c46b9014392be5f1253911ac2b854b22cac10453947f46d0388c94997e453bf819647451f5f820320922c22bf0bfdcc3a729145bc98db473d042ad4df23e601b18ced1a07246e4b4a340c62a463a50cc49c860b99bd156f19ec1210138a6afa3e69e459a19fa2188c7ebf3c32d593e824465d547488f73a1248e29b8bd138d6e6037679718ba76aeae775036dd9ccccd73f2ad9d5d4b0a2051a12e51cf2bf1b2ff26a372dee2f43359709553e29e016955fd67ef708e62c2ea4e34718ca0e2e4b0c52de7c45e2e77fc633100fc98e7988e382acbaf8c942082c820e8f56f1444cffc9cdad6bdbbc9732c4a71d0f46443679ecc295a7bfc756c5c25e1b6c4cc4bd66df354f13e13afdcb1a9d05b272814e40a3f7f273fc0a477edd92f475bac47b7ead110423783e42965844e07d4391324534467f67eec126a7d7e7a64c16c9fe11e3771659bbc4aa40e8f0bde9f60334f26b845e81786d7a037e18da50439567a3d491511afb69c627396ec6f4a68ac9698e85272a1e559b84f27a86aa08345a77b4a5c21936c413c5478c57a9b595385cf5e29490e9a2c9cdfa4184580881b253f137680115bb9fa378f8b0da2978bff1375bcbf5a61000eb0a92560a5e4b0bdf287a22041f6e901fcbf5c9e7945331de071da65e1cc2e6219e312d2d6cc468353451a1403198aca52c54f3875865299e463c0cba1c3a276bad1b4093184b8dfc8901020486c1b391331f49607fc78502d9a896d2d904cd4885f9c53ed2c3234c749d665e7f2e6edd353033830f891a898f11409691d301a8fa57d304882899bedf71103a31a55ab64f681a22897e5c57c8511395426db9a3f027fbdb63e1a5e93359486e498d2014c869153e386c60c4122840df5f97e3bf2900b21101dc862f53817f35b973c7ff1ea1205f76fc291d25e87f5ad1377f47acd99f359ad297180694cc8d0d6c476bc435048109f1a7c213f2c967ed5d98c72b74ad3b3fdd75ffb12acb254f429828130f4ead4147553f3dfe4a09b8ae7f60e273f8cf0b53a6e8c77d942b5515b5894430be81d0c15721f80cbc43001df397dff002acaa7baeed6bdbf6b5b0392ef0cd49f398d54ef1d22b8c3a55010c91d4aed52fddfa86977da6d074ff42ee594bbade9cbaf2bd8230b771c3a5f9b7fc553b4544f865f2a831658f490fcb9926666cc8dba6453b68c17e0228e0acbcb6914066d3a3edceb4c67412b1b11793ee690efea03f1cce19965b23c40cc67fbd4a10b9c18a6792ff2b9e4c1d4b7e5efb99dfacb2ae8b6ded620de3a6a98ada76e6e41eb93f7886866b6c77adb7095f4f88ee531b09abf3e89824e61a03e27dac5f9b5086b61c0b1bffb8390c9adaa1d364bf264bd45e918cb94e9062c9db53001abd61554672aae18d97bc46ca418068131cf58f91ea94ad250173ba8637550c40dce0e8585717ef5b205ebe161fa925b9e7bbfaaece730e91f255e0d851350e6cceb09352da462dbc6e4f32195bfc54ac4db7598d7179aee41426787b91d3544c4ae16b206d2cce851c82b7e4d3200394aa25c1840e39c1cd275bff2d71057c4fc65961def65db268c02f6227ff1710bb4e661ce78eedb189706eee695d670ed7f34074a885b7b842a2a37c9c0e49e72ce8d98fe44f31622fbfa7c76ec1463229b44e4b5669d5ecf935b5940a80db2a842349c0a066b2a0c9543f6fef0c3252798e286bc0d5151448b9ee945181ced3db616da623ac4824c61b0d4e68b0079df75e6c20a3adc4c8e0055df6c5a5073609827b480f5116e566c1b28fe188ded5047a435414e4c311ee60779072933b1f032628418a3cb29384b4ccacec2a44de02a56ae921b2a2f17513052a048f317b2f835a552fde712cc53a8cfd96f4e0529a982284f8cca8d78a69eddcccadea9ed6e96636b09e13d8c8ea39dd1ee15a4fc23798f08f9425ca457e68f9c49b522e8c0c36f900616b2e2313fa047ab9234d8914c6bfd132819d280d2b8288050260eacc7d18fe4764209cfb3e8f9b14b6521cc663980e3ffb0b28603155dd5fd570973625796c738662343ad34c2c97d36c9bff07e7349cfdd8ec08e1a5b6b5c93617cc170b3caafb1eb208121eabab112f61bb854f3c6d23ad66c1182383fafce0672590062990c5ad43d849509f55a1424cd670ed1092627aed4016977c17616d7848efd3a2438660a7a9e0db5c3ddd7639c4536152ba59131ab0b17887e53673747a6821057d8f9dd1371df74b7a79ea8e469bba7dacfc57988b10fc2fde95c88de0a91147104e26709d1b3c5c1cfe2fcb66aaef70d5590b886c5433cce47e41c9c0b25ff07fff0d080902ddf7cc64264073682d3f2d522844661f63e8aa544f9d0dffb616c3f370441f56a74c702f41c4e8897c4414d5d267bf4efcf54fc1bc12103e56b92ca170288c163542b78f855fe41c623a6130cf2a9e08514fbde7df57ad2122e8cb01ccee45f254497898955b9684395381b3890b1f21213a0ba2ba723b2b1d010fa66960deecd3f8760022a834a30e7d1430272b58149a355f3f29997f1f9af4981f02a0293e74130db50838e2097eeb845961c5d186ce6abb8341341af81fae2cf9ecc5a973ab12eeb03b71fb3db57a42f6a88e16512c6b81da1fa3595700c059ba48c89524063a3adf390e287356928e480d95b397482897456d531ad4f57efd950b3124915063c5e046317086dd0b1cadee17f71e1d9801c10a5b44c00c3aed50e999c70a9414d4169fe8a69d41301c179ea626f5e65cab2d46df138c92929dee8ba7877d05410e712805568900a45e2ee67a7c844b9566483bd2dd4e2d11649c9bdf161877184a9fce330559b4944a47f916ebc48eb85d377df12a60e795d743ab22544e3318cff7e8e4d27bc850641e38c5cf1471b5f182db519bba7a1cf8debeeadbfc56c4ec2da7c3b2efa3149847f1b9f8c08480884e951960e58fb55f52e3302c20c4338fc2c79d38f473d2b793b563688b4de004711e39903bd0e0581e2f328929ba138272a638daa550bc5c2c05d9a2524007c090fad8ed9567879801671e14be882ba76853a7eea76e58976d8535eb83400e1d31e9ceb90a0e598d4b3cbd7d52e69d52674697f91954ed87802733f21b1033b7d9d32914239d8fc783deb59ce4467bb26bd66226f99182f25ec9dab168f26ef13f718a57686e599241d9cc3224a22fd7a28d29999161c9f5846dcbf7f6f596b877714a125f44529f109f48988b80bc457c00356f0aa8fc10812e102ec8dc839f138ccdbf475e68db903179a99f7f48d4c73432e85437990c85df9ff99d1598b879c7ef39905b28f7974563db66e87572316e56c750a86ddea170d06f870913f55a273064dbe965c719b0add45d5707386c346cddda3b2a63f5063589cbd72a062ba357a059cb569dee6043641a7e1952b41cb81947b243d59abbec3148a7012bbdd73c3f304de6c8d2f199e6340b4189a4cbe36c7312746edcc78ae2b9d1202eda5fdea990617807a8ede1b2d4b867cb299881ae903a14646f8e82674f7e0cec3cbc5d007bd0f92ffc70359f54252c0fe0968325e03904081291f09bab4bc01ce7fd86e39765e3fa94cfcec0cb79dd2035a17d2d6c45747228ba4c1d22b69b14338d48c1be7dad39ed9e8c2f621827694b59656f9f2313a800cad740407482c3bb57269674e9aabdf083035b3f862b616c952431598ed0f9cfacb85886b1185f108845d2b0f884760be7f8fac1545b828c0e31ddc9854416303206e4b09d038274775dd7c6556b956568c5855aaac61665f75ceab90a7e2d5985543da9554ed114e064013b90af822ec031442d7bc1e9539dc71536981693d18a956d9d4980136c0c54a2361d9e60118c380cf069d30ab9468e0999dbb2e80ce510621026509f375897095956d14cd1d15ba5cb07238041d83985c584315ea402dfa649861dbbb4d494d2a255e18fa9d29c38a1e3a800bcbe7d8952fdb862404eb17c8449d062a53838cc9e098162f5c6602f297a9866bef4d3b9f93690cf0d93b0eb51ed0a14607a2f85897d3d8935434c5e3125cb3db1a81d24e759b57a94f906b706288bcc8eeff52d640e11c90fd1ed8e5547499086bd4dab713f3acdf6a673a64c170472a794e6e81ead2efa30048d79221330889fb0611a338011c297b6c9f1389b3e60c58dd36acfb767df3edafb9b785e2692d2d890c803cdfbebb8d0a9c1fd4d4a72d159c6548d5f054454f4c82bbecc7bbce136eab7f463c22d89e555a0d26b96a499aaccc465ec9989fca856132495423842f5534a8fcfca1f7a3348936fd3ccec49aed5db897a0408f725c352674fa86eaf153edb295c6d63089f10f07e3b5251ca8110746f70dfa977e60f700131433158f69c732f3c847b93950c3e61e36a0e1c5e7978e46fcc82f43cf806f8c42ccd2fdcfd8cb25f17a058767c3ab9d474dc97871079c6c6506005cd27d1cfe4317d3157325650af819d8ca45ce6ee084b0bb863089a51730d7f6b3e588ce35ac17498bb120246089ff5d0b5e7615188dfcb26086643a72c24a0f8ea021c0377d47d303188e82e75fb1eb40b5de1f364f81201216fd8b335b7a60414ab6e5c15eb32dd86c43aca9464684e35cc647b4899d4bb659a841095114efb2aeeb35061e3d0bfbf4cc23b5ab53d0c60ddf7bc07ee8caa1cd8a1bc4df5073cf680c8e1336148ef1caab3de652ca6c7c08e60cf4f86bc3b31dbb3668744a806f43c1902bbfaaceda0682dff209b4b2f483adf5374f86f06edac5a5a2d17c1db8839e75fa4e81de03e2a8acd6730a6ba27c347350c93ad8ab937b83444c024ccc569345107fdb0e6069a7b4983a484b68a30244ea17031a936ae53b4414084f1e7063f4b4ad7139221fa7f1dd23f21210683d113a7fa9c16fc8e7b6db7082c7c2ac47d0577bb28a1f9ed387b0378888c61eb55ac509e62c1251265e34560656507939f5ad138c8bd5671006a6e38d2d8b3318a63517f64fbded3d9807ebf40ee38174b6cc58027e0e44e6ab09ea6b7acdc77da899fbec097b7fbbbe873f62064f4033f59412949431720f12bfa05a68b5c44fbe0993bc8d6fb3e2f9b477be2c4166baf0101e1c4d9211b087d7e464af90dabc630eb384400e70809442861529ac2e2a526135b8929aebe1fab90ee70467e88560ed8ca9c5102417fc069ffb185f237c6b2158b4b9712c0b716d6ae16af31b0792716dc66c990f06fc0e7958c164694086d9e7082e014298c49e260202403c07ecd6018219910f74d5b23ff3547e3ac985e525e3b9a3cf8cc760f15e7eee93f86771bdf274d953ac392ee2e91be1df8d901f979cf669eac9a6555a645c69acef0103201ac81b1311cbe98ab777372d47ee715ef10fd0c815afda7ad6a9642af22ecd110d4dd0b32ec416dc058bd5d3743ee86151c86ddaec93798c31b32cacd887362bd1043497da21e7caf897130e8bda492c190159e5ce763b40191c2e427da52545b364eea9b18112f58cd04ec723d22c19ed990d93e8a52c67d251b4051bae3eacc6ff9a237cebbf48a991f2b471676cdb0ecec68c4b0c50aac19014b91ad664f2521297d19efba1c1454f817d0c7f333ad30c4d992efce9dbf7de5751bcbcb61f877b96086e434a54dce187f5d04524d90bdcf1af24679f2b2258830de5a8b9569b9b7369ee7fc4a13e5d1e8fdefa033aff98e81a4ed2fe3a70aded443ae5a83ee849b3924ec3d3485f5897766767dcd9300ead5b46556fbe0d332993ee299ffbdc0957891a0db5e9ab24929511b4216577c4aa861b3139aafb60e4a497f81e833b373180c160c7a64741a61565aa49157948b8b76c457750b6355087440cf1b1c294e247d29a518ba778bc0f4530e0d2d656aa168bb4e0cac5d0ef3ad344f8c95483ff58d10040207e28f64a9f57f8a4b5fd224c01ec56405c1c7302d0318098b9f893efbb9f4e803c0190683cfa10388cbe86230e2dd87290e6a47ea2aff71731b18d3e88dc2b4370cec9a60149a22d0f67c1053a637976e39ef6f62448aabf9b44f34d8138f06547ca6ca1df6abb984aa6b9e17562d0ae2f2dd8ae9be7f784aa768742f66c29a82b2a443b6a82320ada31b643c764a20d42a22c1adb350214b93c881f116612952ef8c144e543d24a4203d701a1e52448fe541a13c2e658482b08819ebda08f48e02d439d9b13229fc8e7a0724ca7237c0e7db35dbe0e5a24bee2d9f1e60e28d28c7651094e40628945f167a22d5cd684e35c4f57bf2e1d1a742b09bf024fba22d132c856948e58b026553f312b76602eba8ee8e806e8a3063a32dda34fe0ff4cb675a33a2ec0c9d3c3dd11cc7d5435dc4d58cafee9c58c484c08419245e168a239cf0dc7546a767b4a3f42b8b9408272cd0059ef862505d2cc9b7cc0c2ecb6a86cbccf7f03d3272fc4a740db41d579bca570a2e01dd96ef363116f7caf29b4126dc1291ae0aaebbb4bc028d908e9dacfbd63b05fe57db45003d1a305f38481f9d71f0662e6b11610e472ef29e6122f0dbcbfe3137b06032606bab81a2804f6f8daf07783fc96b71bd56578d54ddec23ccdd7cb0a7f810db892638ee780d215711c628e39ed5944b0b7330b9feb5dab3e58a727a2b83887cf6bc1273c6e58e68ca7359f2ff8f3f6e5c25b51cb9391416c70fb6730dd4b79b28e3dc092e90922f5586c2b675b6a36eeaed521a4bb43ebef58988cc1acff59ff2cce3c4e4fb1ac983015903f1f63bc4765030795130bb1623f0187ebe7f8de2abc8b93b41c2d55ee0c8c362ffc4d2043a066fd458c7af0de20b4bf875557b9ae9b2654f3df9bc5ccf18ada1f9f97cdd6706ee4cbc53457768a40c33d70adc6f41b606037c33d603cca9218223d5858bae4e3602a3986ba9bacf9e68aa1c6ce795d60e43578b832ecc45ab4f264ea0659493ac821e5e8061f05b33372830262248143ba2226f5c5d0e4da463e5e8f61a35ec05b7ae4ebc11cecf6f8eff26ae47db410ae7abf992817b490d3380f922ddb30ecad9bedc1f0c4cb79afb09f4118f53de5b5e6202eb9b0405f42dec65d05d8344259f548781b42fd1a113196390c6f174cba633ca8b0788de9e03e99970998e24a8bbc0974f44429f332a0a80d87bcfad4c5975d80182041bade31b6924c676a829d4187906d3ea39f9fe5c917d8dfdc053a18b9911fea438fffdb0c4cab5f727b3b26f03327bf8ffe4cf089effbd08ecac35082cfff64c774167292be30ed5c0166e781627d586db5aac43bac6718721b52cd430839463aacc823c1617469c349d3cc1cf80792dc4f67b75791c4ae5cf028bff28327e798faa67a6b1cb342ac504bde4f4887314eb88f63407adea4afbf3413fd731e7a42d2aee2a74ef21557864086e20bbadd7382c1dc00115d7f52db278d721f450cebc984ebcf179b79ae0651d580d6d5e4f2afb77e800751216526727760bb48eec922ae6364e9f3ce2f49e0780f96ececdea915fb0cf8ee3b4e67e13db3751178881d851b0f46492e344378932254b547aa72bf44245793dfafd8101fc37abadd95a5ce05b13a55d358cc7228a909189fc1d8fc57314e83e92b3093aaa6b51f8f5abe4747ea8221b156b3a732929181213fd6ffd9388047f7dd1caebdc0c04df139a6184ece5bc1f00cf0fd08b71d68cba6040ccc981140863faabd1e81870e6fd81646c7d017718898a847394676181dd63a2056b0994e118ba22e9f83552c668c106109a5b1c8336e09d1859791509aed80d5ea2e900e15c5b595ddaa7930d5006ff81a62d8afc65c5c5e73d38f0b9c159a2784cc751d62518122264337244b144c59ed26ec1aed1ca4ae9fb65ccbb6babc37365e2bd3a7e37daf04596ceda84e1ef73039d455b16d82e5d2497d205bd63b6099a7e6106a9296762ca51e82c77db05c7c21425943805d8603eb50b501c2eaf07a9243979af6c94e8f7c73e82490ecdb0f6eda7b3cbacfbd9a8251374abc080bc8c4c188653f8c355d3488de14366903f878e65e41825f22b579680325cb8a0669f0b6a0c280599b4e475022a0cb23c7ac2beaa04dbbcf5e9d487044a5fa255a20abadcc3bae4a4e663bb8f0b4681321664d842c965c37809ea8200dd2624b5a1e84e428480d7731d17cc5efef48843e0051b487d4a256b2f50941532b7903530697d85517551f5e07119ac46348f15f430049982af5a630c7843743ff25cae710f5238b7d85628d80570d9625071d71e9097fbb25df0392d335b0d4d22e6c8a213be215cf15ec0a92f2cf7845bf54366324f07966a42c52e0c0504db0c3b9990c8d67c419fe6ea213ab8c0ac7b258d573e3328f01fee591ac6b255534342c1785b0fa86459d0985f6e65c1241a18b4c8b0cce14ad474cd38c739045170ea8a1eb496ff8105961741b790e18e5bb8febba3a0ecdc08b7efb2c2223a8aa46914309ea39a33cdb661b536d5c161c747671ab1b97ce1cffe9d13ab5b5b87e832ffa336a6133ae34aa490b5db5cfe83052e8f6c0c4e84cd314a9cbae46b160052e0c52d129e886c16e8b66d2486e214558439a0c807e9c3ac66db6b4669ab7d329441a20745e9f024ea7343dede194efdf110bb826059b453bb64ce977aa2962d62a972a268ecea780393ca8e0ddf0fdaf3eaa5a379fe3d26cdd1996fbbc416b9df5ca9a5154edf66b45672b1bd3a85234dad7d16c3674cb2555c1f31955a640ab4f8c43e156a18c29ab33bfe82ca2888299979c8056b13298a0e6ae33aeef0bbdedf1238a5c42e8169ee5436511c3e0f0d32a4be71c7814151061c93a81b7b8c0b02f4346ed0b8fcc3f00b5c3a883bad192f34b37251b4631c95e8d802223664c86c897ed9f9b3d53568bc2c3c88846ddd293973b6660aa05d27479e33005860ddfa0da804052e1ab6f8d85b609f584f8ff3456433ab125388905f51972a4d9b918415010364a2ec509db68c9a68e80605996e13496e5c0e693474af79573daf83a961bb0b275609ecf915d1e4fb30a452726a89a4979d09133392265b68aac311322a7a44335d2fb5c904e4f302aa6404e49354a98ad17ed8eecc52525a68d40884a923999d76962549211d78c3156302a0c7c57d6aee5bbde3adbddc6e8b47057c932bb196ccd258c7aff9b3c4d6f113e0793dfa692e6a3e7ce147d13620dfa4aa4162c1cad05e193055d6847d29e7410806a93db99625e0188904b498277a6c0269febabfabc66f6d6e902b65312fb89e1bf18859875e6e962da86a68658114e4789dc1c8df58c888c608c5bca2e2d5a983fcf9c7fb7eb52c825ec72bdb545020b53e0a0108532410e14bc99033257c04bcb65a8ee4b5a7c883763842806ae4f01222a8e5529c47fd68a707cb43dffcccfdc6569747a97492eb3ee5fee84746a42b683bc64e265d9bdda81d95153aff86632cf05305ec862a69a25f199c3d56a8a42139179ccb0d742b3b97107dc005b31227613c3e42f5fd3ed5b5f13598d542cee10c63c98c31983da3bc737ff5e254d8896600b45c0b7c00f04701f98a56f12ac93da0c7d4de1f0c5263fc2feb0f8f16bfb7ba984f9df65f139a592c47bea26cea2c72b942a8da14cbd712d24a0c0f15e4dc1c9641d6d731487515e03dcfc36d1bddb0ca73e93cfaba87a0bc377044bd7f3d56b6e3d123816aa442876f3b6a2f3f9eb50575effd37e5705bf9f051aebc73397ea2c4b8379541d56b85720f54a16ba3547f7d357713c026c39e06766e84d5f0e1a92f8180c803fd654c4327508b408bff844e9cd2939079a5bc52c06340a9174f140f3fc6d85683c5f54a70e18f2200c866b29d5001c2460c79a9b7214e7e01863518829b85013917884291265c6535af55379a6cb8dcc78cf9a22909546ea722ccbc8c5bf60a4f8f0039530516eaefae0bb624fef4b96e1e885c421ba700b02cfb3e1c9043117916df9b9d13b9efb6f9fefb7446a12c8a81310e840c5e3e8c13317d559ccdc3f76df465825810112730f06e2cf1d4f49792fb213c2fc8fdf031164717bea5c588807e440ae2163d188562bfd5fa5b3f92611cfcf162985534166bb256e259abcbf17bd80d77ca0798c7680d2620b15516c890683e3f23e8cac03bbdfae728e4268a4cd77b0585f0e6b08582436a192d56321f0f6570caef4d1be5820d309402a8f180c451996e2c5af9861af3e57fa83e629c55d3de3d33a001215d63e512a0ef8ecd08e2e65498e715c16276e6d44aa2b72d1c23e7fd060b47885a78ff50bc98685ce3a24e64bf8ab80666618aebaffd60fcbd37dfa2a722205e8edeb3bcfa08ff969b03c5ca5d05404a36c114f14e5664564a08d30be391a1b8f9de20423e6cce458cf85f04f80e75273ac0cff80acec8952593a4be954d3c4e058a7f8f752be0098f3cf4e5d059841dcffcb38a88f7db5807b32df343294716ee19520cf8da9c0a5ad0a471c9e4f980d614d303554ae2c654e2901c92f0f59845cead0e0daced997c11596db2053b78dd42e37a9bd8f5d2ac88e4e7631de9bc54068b20ff4afae010602984d999f94146801f464d97adc94e58f5279e5095709efb0f36fd45361679637dc863ae3f157ea01014dbfbe5d6cd04c948bd90a78b6dafce4da030259dc77e85cd20abb720f1bc71065b7354a53bd1017adad5f3e58ef9a91e7dd3417a2f7851b06ebd0baa747cdee4c4b0233d410d62ab78992fada85a0465d1de0dd4016e55891c718147bc9f6d822dd81e496e9e69b823ff674ee35203eb2d37f94ff0b111174f2e14a07f0e6471e07930f83c59fbb55e52c1dc9b967070039414b712a80cb4395ef338773c0bc988edad1c161d0c1936007ab3c1041a7648ea613969447a06f2b742ecd0e27287ed56e762e858c03359a8dcf3a12d08eb714117e4b576fc4385bb2ea5467290cf36746618f2eb00e460f0d8b01465a46eb99847631297c7c7e4af7dccbfaa138dd498d54d25c4fa27200141849bae2ebb0c8aee52b6fe0e509da56f9bc03db7ca56bc1666d07852fea7e55d7e2a1dd18424c216b25e6e8913bdff0270b740c099f3448b1bebfc7937844747fc8e56d85c74a1813e8d6cbb83f6016048c5faa3b10f5edd7d014bf40af39fc2d7bf3f47feb5ea10c5096934d03a84b1d4481c73b7d6de05a60fb2382cf1e3ea460f89907181cf6e4ef06df357df0c1f8524f4538acd11f137ecbfa3085e14f9eb47058869f30fcd7f5010dc39f319bfd8374f77d6dbf2e350cb1834f5a14e8a91f4c67bf0ff54c48d0253216a74c2b17b1f299f5fd42438ec2ba544a2d6c05b829cbfa734e0c8e705e1baca1c79d9cd98874282117311f05fe841a1d0d1d47e71a4dbca7ad57c633a5549164c0ff6c4334acc709a3a097853c9cdaa05da3dfcbf7fdeade89311fb92ce51984b3a60a21cb7f7166c38721b0703119beea00e55b17148a78521164740813e16c8e4fb188486c815cf3850e86f074ce55d6358790659b5dbd6a89fb2b434659ca4e91c6dae21af1989e428ee798538895d0ee5b5eafefc9addd63498b8f007f20d6fa8cb1a1de35670d1be6dd42220de0ffb6ee9e623a3db92ddbee32e4d4a0459a6001f19120778eecf0b4a968725231ab9266a04725fac88806759a942a8afe1471c1f1f240e0b89df9e9ac1ae28b24235166281a8ea45fd2ccd6f2397e298ea4d39ed0718c34b6b273786536e5c5647fbbef9f6985a6cb9174a04708bb55b2d9a02d9606a701a3d96d0d89812917a99875b221d90d29fc8db7771edfedd0a6bf764c6f17eaf9f44c489abd888793b54dfd2f7b93d372a28608019d63ebe2d3e5f1ac3be039308523ff65c07a39a0f31277f1f3a15e03a5d2851ad925fd0b23af287c9fd6e0256ff5e4160e0ff0ed16e4fb14f527bde6e3d91452539438832317e8f3d299087e6b69c2ca5a9b0346fb2552e7dbc1ff345eab54c495585b8ad3daf853850e48aaf2f11e8ec2b74efd488a71c00ddf2bf46678d20b5166d4b6cdfea7a1411f8c465501cad17f96ad10a164d2b846303ff4b96a29ce00da97e4bf6c1ce720d612579a144cbecf5c314a8bcf20762d59c7e8b41a2e7aae7ab22bae9cdb5b5218df283dd65554c7a7039e927287c32d2170af626e1659350260fe781b31e2151735f99512363332322c5a63d50df7b99d12641eac40f371852bc4e1e1913f882faf95218d3c2e2d9616c84824c6d9a74a5917d46d4aed1e30f972cae99d03225b4d79ad6bc0a78b29a1740bf86c49cab8ad6a53eae780c856535eeb1af0e9624a28dd023e5b4a69add380e55252a2e2127029424aa91d3e80927a170e2399ce43eb760f7c42cb34fc6a9bb3624430021c74a88ce468d3139858d03f86f6f433d142564eaa292aff6e077ce46a6a067ceb37a759b10c49dc380df8a74f0a5938e20ec917818bbc6c8597d423c06967bb7de0a9ee873c5332396ce0c59841ef10bb2bfba11fcdd19aea234235d019ecdac6b127de0551451e163869280db931eedfb926d49233a51ea617e657e8b73a66405853330be07e8e437bce15c48fd9d5ac899140def6a366b24ab91ddb1322901d4fbc242a7dd4ac472b559cd6ccbc18714180b1ec617e33f1fa05549b4c13b5e24f4fcfc681465258de0277fee956dd3fcb303eda27d85d651417707240ba22e3f728cf8abd7b270cb35edfb363c673d38acce54d444983bb19f9f9db9d605eb04b56c92a4d13685591b6d4eb769132c2f3f409598cef9b04cb877b77e84c63a54348270991bb0f3e03a38c3368a4dae677157a50ab4ffeded9d5533627104850771bd075bda644bc19eb972434b301067e27ba1f91b91cc05f7871ebcaf8fcd0ed44452fc00ee2f9c204d903d92915eb051d7a8c173cfd093af43fb735eef42e7d6d789c1fd7fe62b33655eb1e30b55db1f3002ff3e64231f273104a63235c093405ab0c6b933d4273cd27faa65c1cec93f344fe61a7cdcc14c67ebffe8bd787aad92d21499f8be7b651ec29b9c640cbb991e0442e8f7a82bb66f951ac4d9525940cccd9a2ac7b5eb8d88f97895cce5c057968a74a61d017c6392318eb5347b852fbaee266638ddbb9dbd68dc5570e4b33072ff53be339d063055b92be4cf74cec5ef4570338a4114fc791078590b6e6d081c4829e580470792f1fcc7cde127ae1a48a757290c0d00078d16522cc1cf6ad09cf5a8a4015e8f8d3c1b15f0eb754589a6a697b2b2b08e4a292a05959234b6e4d5dc170d90630ac4488020c3838ac6042087146b88f9a3c83b06721ea8029c7a22a9091a126ba473a3d78bc3c254948ee13a41b4effe609f0fa4c3b223eb66176d1a695a2ffd3c64814979034f17235bf6381a56371a410aa9fb410633c53fe23a2112a1e41f65ce26a2658c232edc75c130343dd5c78fb8148404068c27158db0d573fd2d99f80efb998f9a7e0091425de2c535a2a1d2a41a591b97f9e2448ea2b56e3ec67845735e13e5737e9d170265f8d226dd4450ad7ecb7a11f0de38f1bc70d50a2d65da8fbd8fcbe2e8545af88bd2680262650c76d47bbe5dffca5f8824cf5f2229e79f9adf1d9bcba286aacdbe61f60759232c5c87f590841010c75cebbfe8ff40e7c94669135b080d149f659f935c9424c6d67833c7f852294bbe227ef5d5cc88f22c71ee169ebc8117605dc78c89bedf4de867b335031969cad04463a9cabd6f6fdd7cf26f70b2b3d822bba280a76e72bd53be2ba1740371d1a462050f3033e662d0a56b84ba23c5e98ba8ced36e2f59c030caab6ca4d9b348b3bb706361dc71c3d063792a605bef5c38e8b5857d4865a6da65ec750676eaa187101576e986690d2e6f930cefa21060c9752e2aaf05576b3b6876db3289e86ed61c7d5dd5b44093668e67864ccb7c702859c6b5dee87ba7ac9597b134f5e54b5c5cb13440430549f1c74a8430e0872f094c9316256b4091bf14b5743c31a949be857809580048018929e194ebf48f5e005b8ab62477ba3064eb41ccd22dbf049c32bd5f6742e9604ecdf8b682a40ab4d916ccbde4b87afa57eda8d000d9996d478cbfced6329c3ea92fa0142b73d562102acef43c0d70630fd70e9865181f2f1198ffe62526964f85bc66f52893a0683ee73413345199fac849ccff4f406a5065a74e4776f9658d1ba7da274da6d8784b1b68ad35d85324d697c6c7d80f69d39963e60a7683f62b692baf048afe9f4055128cd4020a87a4f0d258d245bf42ed8aa0e402fc8cc12261d5faf70db4bd575b2f757087b8e47fd1ea7e51805e286160f3a0093a5d885e58d3773b03181f946b96897745de6d045df0bbf1fbd76a6c9ee4d36e46fefee94f957c596db1b428fa0ec54de70ec7c7a01463e250e5da81c1e862c5cb69f5944d199c9e3bd4649993c710c0126c3d4c848ea8e396443fe066e4945d269bb5c670cf7f7e35c231b028a388ddd89892377858ca0f1a62644cf5042b0d513c26045a380b6162e98dc64a1744565d70dcb59e7b33720dee08c79438ca08327cad4063cd2b6379e07d031138bb5b264161b9d8490ba9f03af26a0fe58288616534aca384406825d66724ee361748069ea5a95c981967ab649eedfd75d89d204f67c095215f67c8bfac5d960a7a31c930f39d7f87c02a2bf2582e3d64e048284db9a51f2d72abc03354d61391926028830c6d47895972642004b74b283d5e9608dfa359af82e55c15aca85634adbb6a81a5c08e71ec7cb2909d18e198526d5651b2b4f09fc6def5de32177a28d34e95c6fc24f2c4d68e1ca1dce800a1ed383609a0030a6ad188da58336b1dc1440bf387ea5fa8497c83ce57905a2436648e8c166a542515e82d384f5e9a35b0e0197c83f51eba839de6c60ee878c1e24e3d01f81d7c2219a265b9cd2218be70c873d6852ecfe1eced2a5e8826686b4f1175c894471f211d628fc024e61ae8f8b5e5208b2131aa8429e5289c637514b2d03d7a69003aae5d9ba8c88b22258f30bf7ca81dfdb0aa7dccc1c2a2e5d9383ab8d5ffc29cac840a0fd0bcde03db40d361db429e2e9297104cce75b448961900d98c0289c8394bbb5f5081d04d2abfbb5218aea20696272dceb2078c4812902d16e4b234e93db391338884f660cae14ca0b8ec391ec04e0c6635dc8946d7cffb2afe112de09d2849b16ae01585713aed5d64f01535895612f0a08af97026018256e65555acd6c746c6c245cdaba58822a68ca9c510ac4aca6a5af95c29c41725127a4660797dea025eba947a6370d52cb3992acdadb82d2a49351318120f4828dd7b169187283469f66160ed8aa824bba6bd208c41d5b746dc21d5942aaeebaeb149baa74baa15eafa2f85e4ff7c418a11eb37517ca13d2768b4eab153819f4e86396ba215d81bb99408647e325b2c7e0e8209f2ee418d38f812b830845b286332739b32b9332d60c5aa598a140b9b04c61353d12630587a13760429950b3e0eb9743e593bc0792f9b590d31b95f81611e03e1c00c6ec72da9a37b9abd29356e43e06452a63106e4b29ade3483d9dff733226bd9a74de2d7a6dd08f60fca717c1b5a5124134128b66ab923d282b5d0cd9a51b79a83c1aa4e7fe1060eb524b0c4e218c1121fdc6e159137df4e23153a36df88fa741e7ec70e4d4b8fad38203a45ed75c83284f38b92cab4c9cd747e479425685eb08792c480d32313eec0a261274931c19f41462966eea10841e23e60df2a9a09bad06719f940075732a857103d8e94d6840d09dad82b89994b8bac1377a55d0cf5680b84d4ab0ba6129fa1334a0e8a6152adcf85dafca8d4909aa1b68ea795905b50b1a3cc9888379080a6f4ce2e8e7878cccab2b97a29f06224c4542fe2c44581c7c26a55622744ddb651e4c5facc27f59a965fe5242a6cdfb51af3719ef96524f14a293de8cd96a6f86a86d90b37b2c67634d9176fdd8eeb13a397f050a7fbb5a11ea64db0a6d3c8e71a12198e5bde20d21b8d4bd493ef9ff809aa4542792c4f96ab573ab29269010abdf7c01aaf0f8dba4a365f528a20fd2c058445338bc4fcac574b9df8a573d4de93f77337ddde39323e1a4a83eac4b46caabbad2adcb53dbff0579f7c6b8088cd69bd57f4bec514d2b310abc39b75dfdba20677693615e5bc8401f654faddbd5c670702fb174730a818b5e094659cdf5fe0ed832d66a64bfc737b401da1c627f00554bdc967d16aed0e4ec03789ac9dbf6e9138328c8a37d4399418775026f36d30ac13d34e9d87b185419a601138e1e6518af4ec1a669c3b972f956264994096a62591e86a5f31d6a26e7ef2e4b2080deab701706ac42ea380e8c435d13c3b9756e8dc50209f83e36ad3c4efee95268520f20088fbe8dfd7981161152ba720487c9b7abd24b580345b1544d0dae9fd47c1b5eeb9c11290305df22e34afb8083043d33bd0fd518a3427ac508b36e029b392c886db6460a0af7d6a461a52e6e4ed980c002fa5317840fcb396b22892108f893b6cda70ab6770f455de77509b08d423f1b72be553d921756fcd6f2df370631708b77a83a9e4b352613ac39bfd1487668165eaa8f2a5dd77af0d0fcd9774955795092aae27da3562f77c40c2a85aa6c960bd50984563349b9f906d548917266db25748794831cf0991c4b042d07c0853506f5c0ca5b72d036e5e999499be10d0c78de59620dcbe3f0f04b4f1881d3fd1bf54092797d4a61e108cbd2dae97314995e3615182dee87b60a9f4f352fc01d38d4bf8005eab7dddbf1b3aa6d359b89db4f4968800553ab4f315240965316d98806da70789070183cbc331741d0bae28266759de131066ecf1c3351d646f2919e3e76dcce31584a428a011296c9a37cefe20672643026ba69803cac969f44d0274047d943a621d7586b5aa23bf3edc924b360a9220409dc883192c0e05d8b713e19106eeac44545ec7a699a6b8f8c8919c59141cd8e3e8793458e9856e8a761a7a5660237aa8abaf757291cbd835dccd11af941cc2697a86bce01168a259ac1ae7435e15a52c85603bebfbfede7b427b78601a774c553e6fb0144a40de54260d473831bf9810d32c47eb89291cfa9abfdb959a914c7739bd86741e33a60ccb47f6fbd922e4861f68a097a375839ab75f688688bc3151ca9c5f4482353d14b90cda768048f99a5b894cf885dbbd0b27169bfb3460328a6c7a6f1b99c9616cd3f1bc56b53f0ecdcba39c84066244afed7e59b2ea63673d64d598b10ad25d0dc55ae7a97ef1de8163a34c3bf8f449017f9cbe92277eaaf47d2988a53ac38f9a2a086866efe59db51bd0013fd4f6dd5d6f06d1a81edb069ac003c74a6e1669fc13f69e01c4bc14121808b334283dc7a0795756fa8933814b77862b39c0e90be5525310928a0482d72afa6bfc73f55f66e7d8355618e312242aea1aec34c634d2e27d36f4515916fee467d4f6c53a7a7633f18712e3132ac1e6d848691c0f40cdea29679e5a1eb85091f1fc1bfb739cb227e147ca3f761a630a1317d5bc572ffc33cd010083753450c54f0992be344e0c84c3d0f84e2e17deeffc3ed952c409f8b78f15444bd2050e06c244e0298747e9312e89a0447593a6527bd753774d36c94f3fe0ccd15d4af71aa428f0b1ee5bd7250edf5ce78d29ecd74723d7c46e8a749ad05815e2fd0002708d4d5fce1bc34872968a5d2b8cfc49168fed0a10b3dd8bfb65bd7708cd00338cbe464c266cf6bffdaec8789b0281250fea431e45b28dcbc59c826f25cf1ba96dd8f034c54c1a503fe72a7cacecc2883db86148ebfd15968484d1035d278ce67c5b26b3f10b1e59eaee8ba7f5bf4f166497026067b228ba502d94915f573ebdc1d0a3c4a7d7854d1c9bf2e5f5fb50c8319ef776608918284c4094113035da3864ea29c8890d1809f5e9eaf0a0dc34cda20ab6ff2642b5cb1bdfd878cf84f459560637d0e355215489261ea213ec4bc0e53bf096e26204f6dd29bc4bb68cd0fbfcb5fa6a6573c416ac98192226c1889677fcb0c3c9521def4c936a4bbe8ff17cd0e10ad009225f3ae29d7650cea10e4f9be41bb02cdf7431bf441b4492eb1f3d6b206464b298be6ad52cd97cdb5774291be1705a565fccdf4b982f8d7e213b78c84c372d527f898f9a4a72b9d68928729e154d2c427f8b10881b3d3f962cc2168793e76b3248cb7c83effcd82f6288d57aedb2d31223c683fa8d27020893d4c315aba73c6bca19fdfcd288ba3219b08d46303ac13c17259266d77d04a5cfc77ff0b4d3a6f80de8ea2d1a8c916a507413a65f2c5f686d176667703ba4bc4c2a9739abde0bd707b1604004a18d93c0963f8619da4370c5768c4abde23922cd72eb380619687006dd7d0cfa461b212c0b2e1734f00320524497c37b11da45fd6d27e27b568eabec9b1458cc8dd4004fb3d2c6837b17d914e178a3790997d2f39da10bc1da234425b326256d1f9e5ec969c734603f36552b0f060bee42207a400a549570c26da1dec96bc1308948d8bf533c9ba04a733ea725e457db0256f5202ae735da7b68da49d912ff93d1a84355dd09e73335a955173d47500ba7b781be335b0e1d95367bab0c9471411ef7c84b67278523399e5e28ee16eb30eb3f02b8abdc9aec8de538813d008c36959c50f62b4ccd336c758b14fbac7e6056750993e7fe73abe01e45e1674206b899a67cc48967a9e932057de5c85085b855ae3ed4ef52e9ef5a5eb96b6a8b5ad0f059e3db632b399619d9c090ed12f7ce7cea1a0c8b7a653c8073819b56ce19b9667dcab0ee7a422214483f5dcc292e8e46bcb0a3c07ca37f662729a264039885f3e59db44737e6d3dcdebc1863a3b4499ca086140252ea30dba8430e3fd8158b3a46e67b49f4aa79c12c798799d60607955af3b45781ef394b22ac517e33dc75b4f88b2ea1a088626aad8f912c3f68267e77d82e6a7898b616d7e89f1cca3910acec34a2140baff120b620317c019737a82c9f1b80213a365b2580678ca9c8acd164c0c858abdf027d97c73081373678acb6de4e981f1c74f1726e6e937123b7b9ce8abff6c66a2c557c53e76eb1bfd6382ed645518ef0c25dcec91d564d21b051a9ffe312aa98c8133c1a56f7c7c16f2a7aac099162ede5a984fc25b883fa2d3fa227e81cd5442b215b979ca15fc59593531140370a68eb65e547ab6ce566d610c0713f4fe9b2951bd886e8f9993ca7899661a11864721b49a7775e8d99e940514edd0c51c7d70bd8e1a19d4c95105d775d491419d1c55705d470d19f41a8c2f95dfb39804f1c0fcb5a16fe35c1e9099be4e771491f22978a5bdf4b4902e9d8255da5b4f0b6919f3e0178fe6ade3eb8e0bbd00c78e111f0fab1f33fe489a1e35d2e8a7e34aabeb512145e1faf8a2a22e3ba40d1230e24440f99a84eaf546912b4e83ab88974e0b9982d2e02efecfdb0f61dc2a8835e3da3177b1603eedada745b4dc64a0171d05ff7241f74da3387ef94e04308a251823e4c6883e6081ac51fccda4d75f156c4dd498e3118e0421d7ca51f46cd82964b6f0472ddbcf75e127c400190e86f11697b567e04c93924eb2c711ba900866b6d5b01b3ed6f51db14226a84e8b1a1e0888acb71e1755b8068cd2dbc19059329f2a9d4102cfaae137761c692794c622bacac5dd765af1c0e06ae444d678fd7420acd9a01172180d48f457e71b56e2d8d8d35bd2b98fc2163a607a70557ecf81248907883e95b836ab556c78683cf5de2d749ab92481938d492cbe90e64ae224535ed8ff20c1a8dfefda9095782571689d40c1849205c040a1c111c6d0ed04a84660b8300120502c282890e55e8d906c99dee74394a41a7ab1e8714c4d842f585ad3f69d11210fe1ac94bdc07164a863836461560bcb1b1faa6b76265ab0f8a0161f80568187671c2d6029a2b9faf59c744e8e2378728034c1e452727172a9325df77166d6c058f940d2b85e8cb83c2cbf3f30e77c18c60676ad9e3526618c7869f04e6fe01c5fb83a5e393482cd667795796025cae5c91709aa440832a18113c22c647ff1a91076b32fc91fc27eb7ff0a8c51bfcbc28f555e52a0abb3a5d123ebc3b4ce09dcad185895933954906f25d1378d51a74ef751faf042375432db2516be7844d032990fd186b4fca9703f23201500f702de23fac8a1494dbd662b5af44ef794f9ba8707e0489eb1fc5aa2291bd041650e82fddd39196fccf4dd50b4d067d9903fe2f0045ccad39423084304b36174d5dce4859d16a86f1b4c5e621f91d5da002c27633a5b9c23a74d033996156ee0b38fea8729c3cf3b7c30d34a8fd42e965718a4c607ae5705bc0ab559dd708ec21e3da5aceac4e736e18c2fdb3f2483277d8226ec2fe14ab3682509ebf3d30857d27cd5190bfa0ee062d1d6020f3f056d02555f0d1403428e381be87ba45005974d1d6d42d208303fcdf5b1516ed633c628bac05e493479823d3df3a5bda97195bd8062216faa3a79446ad7425c209b0073ab4b71e69d5d38017c386ab0d8019979fc25c9262a0dffa140bf4be3e4efc89d470d838e4da8e6d7211e713a994045f8b3842a3e4be3d8a8a9b158b83de7f3c9880da6441f22619c381444ec8675a09855b0759ed5594f817340be988ee1ee3560d4104cd694b0f1465e4cdb941f44702af4039aec3da0e87e7a3d57769c543827163fe88b3d354c321462e65c6de14229da69e99e19d135c6818e9a65d3ec986146ed433f21ac5d61886776e9d960db8fc400d9924bfd5e5d25c7ef067b24751f9fa80aaa2dd363619097ce778c0a6b1bee9213cb6b6d0a607429004ef477ddf4c5ef5e6f5a1d910e3fa20daa6eaac8da9ba63aaa3c4027942d12b555779ab0f7e3c3a11870f4899c90edf16e61dec4b1f628a4b61fa3453617974e22ff420b277e275a439bec1fff8ac53aa22eb646ad5a43de0d9920ee57e91f76fbcfe5bce78ff03bd2365797ef62a10d7d493229cb508181968ee523fef634c1163d1c3e0d7a23f502c6d117634436a11d65013cf343ee110b96954c1b496a0ce1bd9b672f1a479ef9b210916e1f27661d0b3ce59b12ebe5f3856a970576c9d101c3dc52fbf48427a3ea4520072a4a9f79c8af0fb1a9b1e28ca278d9d2613315a888186eb82df6913ffa35eca02c53ec6b8029280c0d20a02cc212383d364154416311b60afb843dc42998b0cc4bb8a5c9be295583f7a5166df13dd70fbfcca96a3f6191e786e67484f69382c90ce628a30c14870cd2dc68349f2662ac11bfc28cc11ce321cd90b5d82c8c9585d63be4651ac5dc0c5d811b9953c95deecef458a2214699f6b3e12287d5a9c5ab9dc3dd8af4be3b43369c012724d1ce19a89f637fe307d8fa2fb5dd165a08b209b3c54c8b75388e0872c427c6a2e8506ac667b77edbc60700e2b241335708c72e21ef334619153fd9f0993239f10b1b269f01871160beff0dd3e2f538476d1576507bc349ddc3d30c56aabf78a5da3e5d64452614641a0b358094a0176c6ef1bd0849f2ebee5514eda4a7f449a417180f37ba350dd03bc270b2f97c829d2697939a1856361ecfa73bd6812b4614482226cd10ece42fdcc45bd538f48869b9a9b10a1e2359c14c815a6ccc2738be9f9fdd9a57f36941f6f35e59949d6f05728e3993f5ed68f4f76012c71894e8b2f5454a4c73a264b71a070731fe2a171287ec629cbb40174ac91b2a913158863bdaf174efb41a2694246636e008149fbf5ec02b68c8a9c0cc8fadad647422e49a02793b69aa2b0916cc405cc625f6b4181b63ed87b2914babbce35cae62cd993e47483ada4b59cd9cf41c1de996b6e087178cf88b4feec0eb6d9d5e29a52a10b4560487b33ce5123c56da181d578611400d04c1166e474d5fafcae96a0ff1520b102411bb98480152cd7d91922ab4d162eb021248142767a600edc4844311cec1276fd3e1833f23f04d0e1fac842206d276300c45041a22e239af55e31d6ef05d428fff7171c02a1c6d400e23d244f1f4a0b01768b68aae4fe4b01efcd4fcbd0b099f8e6b132baef7d1aadccc5616ce99cbcda6f832d2c8a6dab1eff301caaff4eb1bc05fdf864e2f1aad54819d2f821570080f4c41c2b1dc4f0420ad3e2a378a9146a1dce1649bfeb4404c72054f194e5c0c6aba39f9d2fc8dabaa19cc8dd734a66cc28c8a0ea8630d3cf27edc25fb554e741372edcb806e9d95963c4665141ff8dc5c5225807ee0877d973082bdef4273036d616d4896f9736c3fb21273f128b53a856004191a8e234fcf4072261cb9ed000b61b34d348cea28fb35245f246cde1a2f8fe10461d1cd70188eb3fe0c4408fa000c7df5215eb3f7c3bb551fd1adb1b081f5a4f6189705a60371a1f12e29b1c59bec87c11b68530496ea446757242bb356ef53fe6692047ccc19d672dfde347031800ecb134243d2dad01982fcef7b7fb390c9a19438839f1aff30fb274706ec86366d6cd63acdd19c48f4fd74834bf2e06befc38288a4ab2b17b4817abcdc792259b916d291e9c382e5191c78617206a62b3b708e26fa5dec76e2a78fb7712962bc46346fdcc692d8095898c85f0952054b0d41963541e725c94572a26b0d2c4c76bd52ab6d1f7046e605da8770a284d08f6eac434081571d6c21790161b3fc29154a6ca524d39b3c3419cdba63ee4e31911e9dd3086bda41556ba1c2b7161c1a48e0f46ecae2e73352ac899aabbb301387a035247760f166823697bc5fa301b6a61174cad5a7cf4689ff7232898c80ed7b6f2f8328b607b976dd8cf9c3f2831792af87819cf9406453d8a1c0a2eb92a82fd0c14b1dba0f46ffc724e722d22aa660d7c336400f27c411158b2c988d523aab531bac5370670653a9429ef4f038a2b3bed764a99fffa2b8da6792e1d127a3ffb0dc47e7257cbcdbbc97a45eaf1fe472a0f4a6b2c0c01551bc0218e649b8311a920b32612c7663199747a83334cf230fbc5ba130089493d62bcc6de1ed863ddb193c39a411353f30b1b14901668edd76b9097501d0a3d3052488d918167c22ec7b8fa21b1f69840f366a674f880b284fa33c4705772d38d63a1e20a8779dc34e8155994d17e75076c3de40cdb8d4f94cb79f55e9da3111d1f33ea17327b760cbb07fc61c41af8bee9f65b2f603e3cf702072503eb5cb7cd0df903991b56fdc15cce5e355ca2240e4474f1623cfac83f46db9727ddd369ed8ca363152375f79d0f3234c3af8dd491180065a09cff60c1f1f242552081d4c65b0db0c57c28dab8b2766bd376dd13e636d39051c8900740634fc6f7ae6fca5d71f56eaf9638da0066c5025b031fa5af900f3fa17ff9641abef698d4fd8f539ea6c4edf7b0e86bc5255901380a795a90cd135ec0c790e26576b7608811671214e2633d943808b58d88c4145066e39796affffd53ae4fb7c170c94de34e613af9541830da1837d6ae0032b500fc9f6a506350c8d262201d1d6f3ded0aa683c8139f588955bca1b247c92636c41a4f133940fef9c311e4b6d1d32c670dc371e839d4d74a64e85f12349a25bbf3dd206ce3b06e9b7d41a7a4a932696d6b753324e15e194b6709412dc7d6479512892ae6d37e3bb4f052a7162bfa98ef0b69810758a29d6f2e7e656325fa9d1de6f35b2e154c83235559e1a9361519fae8f4f7bd7308b5129ecbfe73fc6d41a452678b3d1b9863604022b3dcdebeab2ada403e717d76f6561db9ab2ade4c2b695af39cb561f0b89cc8059ada7f93439a8b8fa6b4fc122d0f07b78c3d72ee72c8dc3de699d0f2c9558da34e78b01fa848124e36fc31a64c3696278b8058807c19368afb41eea04dadb178210f51b118219a203ff2ca1bd52f1f5c8b691572250e927f1fef62195060637a202efbfba09331a0989e19fbcb588732aff99266035aa09563d54261244959951521b167a42e9ba00183f40abc953f09872622d436297e76bc7f7ffba141a93d3cb821dd0d5ea1574942aba203ffc57ea60b4c96d8f9c91cf69905d560c1a596ba8db9428ac28b0a549c390e067bd50821384d4404bb1bfa0a77733c7fef3183d655f7fedd29773ed5da2169db2fe52242aaeda3294fb7cec7abe4ab4c43b36c5776c062940a6c13984be3f099af3d9cfd68f682546aaa85f039259af263b57034a46e7bcb6ab02841793c3c29f28c88827d7f9200107f93fa9db9888d1a71c363aeee3dec3b1feff9f40e8c8a33632cea098626206e42d4c5456decc20bd431728b4af014b598682d055a3241b79afec329dfb0c436c810ee59c5a7cfc26b541c6cdb4035f038ef78abb7d338c46f380091416abca964074d934238b09c4a4ff782bc4f0f94421a1b1eb023238d0acd80c9338de3846bced363257dd61d43422d252900d8809c04a70b5d78702ae4ff0f43c049df4139ca67ae34f35b770092ea05e31aac5802341e263cefbd93c278309239b0d1ccc79e61ec571684e8e074308d4af481f237650b86db9f1600d0eb9d18f42edd3650b3ff7eba94956ebf91458b48a2845ffde2888262c569d7f4090992ff4cd839e17a0931a9cb44f8b2eeaad2832c3af50ae044b26830dcd280aafdc663d6dada3027c1d2879b5dd7fb950f3ab4901988086677a91428e93ebc3505783a8fd61b120c2f5659dd9d92db0805221e0f6c53f664e5df0663f4c5f6cad05e0891a152f571b72da91e2e89edf4351bd7f02edd05fd8f177b6847ac0b8e80f786efa83761ffed8b15efee299c049d663ff25e72f33b71979c8d176f0d13713123f847027e23a11c8ec487d67813a7255d6a21d4c47f7c9218d30bb062fad01360d0f80c43439ff2508703e54946fe1315f583139b5cc59935b7db8f147170b20c8774c8e6b98cae97fea3807742cae5d56825e1d1c04a0d9760ba24010f1bdc9eec7455d1e0cdb93a7b3f4a216c422ec283c2ba7244865ef799ad421571ff5be2d685852d338abaa4718b7d66e6bf9f99f1770eb02110e564bcd86d6f956dd57e0d37d9a9d4d122e135bd6fc2c8f50795f7d5048209799731fff8dc1c8cc2d89ae824c22f062b7a27aa09111d2aa57a2a57b80deb426a083cc7939144b5960d9c11bac17f3b618a1360ce48b93dc49f0efef4721411c0ffe407783813568e042c17b2bb6c08a913160b642150c583d221bec6661dfb58a6757bdcbfabd06ed1bedcced521e7626b41119b841fd406332947381dff462c1a5e97553c7166af44360b1996fd4cdc3a6da237ca64240bffd7fb6df07b46263ce481751d19da96cf8756a453da33e9823dc6b6c2131515f68e84a01395839022ef93de5fff10a4beea58c9d9196d16a3914babac9f252c20a5393e4c6c789cdb7edeecdc0892e36692ee7344d5661f83da0fff89cb3dad6b6ee19f7fd80b6ce2ab8f850310eeb085700fc7ea47d8174912dc68572894ae1875204915fc0e257d4b794571fb40be2c12fcf7eb8e904dfc75dd8a19e102b1d5fa7ac505ed6025008df7704008688d0bcade6780c6110234223ed5aeda2f813fc70501a76fca064c19515bfaf8fe3278b11b666c003af56a35de5cd2d3c4d2a12f7ea445995d3470dc564dd5cfe6eb181b2c0aa73e37e478de405e72a29672b9e44a61f1267ce611997d4c09b9a0cd0c805a1ac4bdc704fa542e28641d2c1585ec5e66151f979cda39458acd86736e2d568b893d8b63d86613b163b54d5a2f0faeccc280c068c49b386919476db0e1e5254b25c6ead155b911cfc16c7a56ea01b1d89fa1170e4c4c6777d898327912127c4e7ed4a2d8bcfb0e6391049355b33daba49483224bb1891f5c2e4fe6b21d44402846cae44be50e3675ad09e4021cf83247dcda0f77650318435ddf07e523584ec6aedecfd0205bf9126bbee76c9a1843b6582d9cfbc49c37e926b6b199c42c5c27a84ebb951820877e309587129078d2eb15dd514e4e99690233df87b660cef1b2d9e9e4926db79ca81d271dc88df1dbece41b04300ab7d4188ac755fac024dbda90b95bfa2764eea101ad5b80bc98b016045b75881a84d1d023a69dd981e40d8d1b3568411ec043ab963029486033a8f0a805a40d811a903dab58d5352aab6b69611748b0e687158c509e88320c891622e699a8890090d5e6207169b61cdf837dfe1f9fe13b1e780fd665cc04b889fb9d552c62888f0ad8bf66073afb34686611f402f08eddd644b29a54c29c9dd07d007f1071016490059f2e850cb13132e4fdd32056bea16487384136ebfe4d12d2f6c83efcced979e87098f49938facf5213add2229006fa21250d4df04cb09d755c1957e294d57c6a4a4499a5435557ba487db382cbedcb4906ec7b9eddcbeb184d01d42086184b099999d3533b3d2c2fa8a9999511d6a4abd1c41906c64ec200770d75b70a5df2e61e9d7876e63f3c353331d6275a8dde6b6dbf48c6532a882fdb61a2b052b6439f63bc9aa90719151a1de489094345cfe8833a44735d270fcc1d1e6720c72b92194b9b12e03216c3fd5649f2388671b5abdb1edfcfeeaec21f451add67e3eef2c560e6c7551fdc8a2afcbdf14e64c5f3408b5e996f94c63b31fdebcc80228e2d760503d3d6ce631cb655cd5a1184f394c879899d52d5f33eb728cb6070aeeeeee1e4df3720441d2627a54bd5bb2f717e7e13b86740ebb7ca465a68c47cf156cd508cdf7587642433ee7c633ddfefaa3c60c8b4c28e6616e3f570149d2bcb91232572817ca75948b3257e6a24020c9b723ec649931a320b4300748aacf1933675956d967b3c07e10b6030f91df3f3a8de61ee994d1631402909b1d170281421d893146203ae49e43489fe7d74e88fa997b7d987539749074dc59bdfade49efabf16fb877b23e7f1dc0f43ad421f78e75a83bc767daa6432de466c8fd78b5cae19626a202144c9338a8a65b4e3ab483c66e5e58ddc280dbcf5040dd2e59751464f436014c6759f77933388d93d32df1771ce45e0bb90deb50b7cd24b1ab15dfbc30a0bd6f3424d87e75e3b8a81f5582ad3a14a41b8757edbcf2919fdc5ffac4df71340e4ec49961b0fe164e38a1cf8e278c9556789a71086184ce2643e89475f79816f9b3740b883ebc13547f7bd083e443d2e60145cf571df28f513d90b8b1bb6803db29152ab4ce673adac37e9d8a9487fde87db68db0a8283b984275aa532853cb13862ec85c48b305d3109d931b058f1197f2b371eb161d5b8718a6430e9960bf08833fc42f0a11d22d9f9f6e4d8fbc640a727dc7e9f3f90f8558589cff63fb71c2ca934f8cdda22335e18b5ddb69a6f4710ea823520a445f597540127631cdfde28d9e8c65298040a0805df8d044ebe70d3efc1fe2fd8e351a9ce1d161891f19c69884264f96ff83ad1dfc86bf074aa55289f4419ce92ffde35387b11ff4960d177afc9e2e4892066768f1a445f13d38b0dfdff843bc8f03fbd9d8b2565cf86e046843421acef2d1f6f0bde5343d1279f85e035de47baad5357aa73feda76e797194b70da4a1a311eee67c8865070f4fcc09457d680f45dcdd47ee080e1fda6b15055d691914b2caed524aa97724b756ebed7d73e67e86d8ceb5ce612ec2c969513f49e779f1f87b4e9e93a764e6aa9e822ef0460f8473052ffd1b60dce86d301fda4fed3f573069dfefa56ea13938b80c07aef46b90bd2bb99ecec7f6b69b362e527d7c34655ad43f83cc9a49334373c6731ce6285bad51d954381c95c638a949c9363bbe33cc5063b78ec3316f8658e8b58b7c1bb8d96aab5a58936df3548ae9366b70302cdc4b5befcb66660e53130ec7945e3761f366e2ace64c8fb61bcf09e639c13c2798e704f39c609e136c83710c1449c7793a2e864b71286ecb61f1a8c1ed60d9e91ff7f3c8d0785e3c28f7a43ad43fd279624eb68ec3e143044211930bafab3431611e0e47f53ca70e795e3ad47302995d0f9ef2a04e30b802e3c9d5a81c167debdce5a269511c86abcc1833b54ac9b0279f58b7540c31592a957d8c9e28c3e63119cc144b3a319c193d594445532cc164d86eceb0797ef3e0e4c4c0b83cb53364c6c72343665505804debfca545d4f31314968bdfe26838973663f3976ee1a73fc23960bbec71ad0ef5abecc06eb06eb18179bdb878b4b81dac9d956f390ef39cba657a50dd127150c83920e5b267e3a9b6e1f1f21dae9dd66da6b932a22ed32067f466484315d9ae8d654d02c2ea6e402c7429b9fd1f1058ae4970e1ca1cf6a1703b46e0e4522558ba84751c37de5514a2e6f6cfa79182853425e0714bb0638b8285342478c9879786042edbda69e59c2ea431cddc0b694c3d6e491b91757adf898ced138365e743ee061d75fb80e81bbbc56187ae14a90b694c42eee7421a13cd650e020de189431d777a5f9c0e44431d1192400a502a9372ba2e2386877f0407ec5cd1853442bcaed61bf73086ff2c5c00e8bf1840ffcd7039ef4657af014cc3ffb3217ee5b85a6b95d135893b1f321ed4992a49c6dff051d60216f9672dc85a10439743867f54879c8391d1e590f133bc26b9077542803e06d0c31840cf7120d073573d50d7dd3782d26d5077f241de108edbb9ae795cac4333aceb23aa11991f2932be37fe7c7f9e5b817dd0c8c778fa5e83275cbb02ebb27fadcbad4bf33e1baef6ce69efddd5be4474b5b70f5d839c0f301f413779e82596a4c492688ff2301e459b1ecff4920ee7d3d9189bea900d17c66bdfcdd0551c58103f7491097b388cc0705ce429ded7c3c9fdfcf6dbfbd394f53acbea6cebe4497eeb489ee405f6b33816c7c31ecf93b8c0deedb74779da81ecd32ff9910e647fe4f96add71177d60c3e557f9d45cb629aff166715ce593f21ab309ecf6fc36a6431eeb964d6424a75bea8b749f8e2b52f2dc6d4044447a2008c8e7fe06e9c1d771bbfbe2b7c365d9993ce46ee8e17efc998ecb5d0f37eb8090d7c43300d398dfdd0d17e9acab431dda6ccdc9ddde763fe018f908d02ff16287b6bfe12a5d97d27d9f0e5e94ee23e171fd3d3d7cf86b2813f6b35ed82fc574fdd9b39b675930aceb242429215a1706b990a60439176e3716d29440c8fd6cdee6526d2ed5e61a41797cd8fe92d8ede79258494ce574b205ae45534d5f540895e9a731b44583d0953384100683c16030984a65ede7a3718c316e9bbc9fbba2704d58ad2a980ae62a1679ee3991d741724fc5f291c8f7d3147449e96e3f5df968e4fb696ba4833446e5d1141194eb70a026190b49f47f98f5e9e74f698f1b5ccdfba1ef4753b4075ce9cca3a9ca03fbd14b4d94c7e651991635ad41477b401afdb3a329b812434d16ba8855dec2a1d5c07e34455337455334c5b5b818770f12abc1d9b1b971b954aa9898546ab55aad622cfd26b9645231ec72a9605911902174e8ccbc5acdd55ccd158c4ff9142f47cac398adcbc2f24dd76469cc24b10b70b2731121f78d9e2b77afeff1b83b0eff50dd207783e7a797d2814c6074a013bed6da46d9da28fad0e7aa51990e29297fd2e900e355bc1c2a0fe3b54fd72595ae4d9f0ea4438cff7c0caf4ba0ec3f1f03f42a0ff2daa4e281b28fe1b56a9579393449e5553e5ea75ed96799c9090a0acaa3989c642a1d13261d08eacd7c3559f3c7f6223f9abe3a3129992bed5bab2299c7a95497469e53d025fbfe60f637fa8351388c0e92524a483a78edfc91ee07eeb8eefb0d4607492933a5a6a4a4c098ab149a92022325a56bd25ccdd55ca5a4c038e9ce04192b63411a87fd701bcf719707b9fd9964168b592c1694fefc53f0385d035c3845112e19dbf773968ab367666666ceb2eaf1bce6c93c599679d1079792765f0f30e62b6666d634ba7140accdbf62431ff84a8faa6a90c49d82fd2a0bbaf42663fd7ece9a80e70a612d6be5ce72969d222d68584efc31135ff126b662cded778610a652a9542aa5b9bc566b3f9f7f8d85c5260713f10599229082c8787004493b39b1822e28b7e3e70a5bc5ed28e24c2340f2c72885ed6be32348821c677ca71559251ef8179a80345648d82f9e563391e54aa09a70c25371155771c5a897665372b591efa3cf601aec322e9f5cdea2f7d9dba552a9d402528c1eecd08dee2434c8c12e531775bd74ea8e2031a63897e9cee5a62e868110429865f5abe7fdb32cfb6f06f9d4d522fe2d48f5c6b6bbcb3a57aef2d4263b5ae1cd202cc0477570808f3271f9a9121001fcb40874865a014794e5227eda040cf1336d6d719949def9d83eeb4c95b43dacf57590b4da4d1d5a72114807cfd7f7785307e4da6f1e2d79207ff7726852f699474f1e4571613feaa22e58ff379740ab80a39ad990c0a9726b16ec475d36dd0281c44027876df86bcfffd1205408bdb951f368ad1e3dd1d36451eaf2d8748b3f7b6073d5a11f80a8d73f9373253b574592a41e187dd1204caa59d635c903f311add5520fecca5c7e5fc295b8fcd4c5ae4f2be5aaecf9fac83c4f45eaba0cb33710c209e79c73ce49e99c03983121e037fae0be0357d1e0373e23e3ae76c8dfcc283b6765167ed99d480ffac0ac4ab9ca55a9d98a81f61b4af6f2519cacace5a356d64a7d6ec72805163ad700174a81850faaaf4adde23b7a94f198acd564ad266b3559ab66b15699e909f6cb5acc3c02ebae5ac8866443fa2108c2d9dddd0dbb3db99959a572958fa0ffb3d88fdf3b0061371b418ccfa1e27d1ea4f22a70d44a88bcab54fef31f2fc7e7553e6775ab54fef3d68a6317ec9caf3d771d80b0bb8129b9086144e801be46b38fd1e5088288d70e528cac055d40b73fa3f974201d3e2fe365783940ff791da4ca55a049325ea503e9a0f232bc0c5e0e195ee575903450c73a5d975c04ea403ac4f0a08fc1631d507dd0c7f03274201d6678197e06af65f040f563f03aa5725183aa97439364bc0caf415ea35cd455b05fd67a754bfd569531477ca6c4552523ae1a29912103d42e8d0bfb65ad569f3a0975e4eb0f40d48bf232be617c4a4acaa7a074f0cae8220946b7758865744ca07420a8b7daff662b73653556b0dc93bcd69b8cae49b3355b1346b79d7c06696c6f1f92c89001f250a14d9e515f026e7b10ae4c48fa749074d27ddae58fd17d800a44ac4826dd0f7c4b3a92ee6b16d76ddd672fc3c07e7f3ff255fcb5eea35e0f101601a8050eae6b2698357bf6d39d599d33cbea14c2be5cf5fa01887ae7b7caf767fd3053e92289761504f5d22f7b65ae0ed5a8744caa56f8bc4ad72457f9286bb9a8bf56fbd1b256d6ca5a540727a93c5f1f2a5e8e20481f2f6bcdb975d501a365dc6075d9e9093e3d754b770b0db486c23065315d5d669aba4c652ec3e6eef61c06052184b076ad5e8e2062d7d7f55ac3008eeaf3d31374015d96979fa2a8ea32ed71d9a335a64e3e8a3d98b9e422eec68ebb5a15ace604fbc5123f3dd1d385a1277a4a71abaa84e831ba7b747777f7e81eb508a143d1c191afa2334be9ec55f81550dc9eb009eb969b6e89bf00f9ed2e17b953253cbadca32bbea2ce8e18a426e2c49d68d3ef0eb760f8ee5a6de1fc736a7173ee06eebac71d7729134a0ef351ec0145fd45256e974aa9e88a291fc9ccd876b560542716d349c9ecf4903edd6ef65857a7b4b7666e8e9fd226b9c748e4a709257ab8220c6064c16d151257b9c8ab7097ca5dae72d710f6f3982be6b1149dc26c1bf33b6e4ce3fb3be54f77ef93dd1d7a18ee39aaa6a234c5284df224599246bef4aae58fdb129443933869725193ea8d654df2d6c346d9a90ef5735cdf36b9942f23737ba6676e2b0169f41270a5ff934bdc7ea904943fa4496adf9edaf249966ce28edc2f7a3ab8712c8827b812d3a13639d735499e24ea763369eb409b97437bcecbe121c212295210f1052426e6731be779cc755c548a262e8a60a14b1770e42f1bf7220d67f5341a6424375c119b81a5af21616777777bf2bd03ac7337203f08d395dfddc73a22b733242ccc47198e93328f0717f5d7f70ffed31e58a7c3828ad7ad978150e11a31a975aa4e10a6db3a1dfdcaddc05776082edf1c9ac4838bf8d24ece4e47ec3e86b9ee75bddc3b3e120114f193c012c12cb8cc1c02ba85f592d73a1d9a3af6d37119c2f793090ee07bd17238207cf626e266e35bc8f5475669a7db913b25137750a798124308e32bbeb61e969999559f659fd873a63a145f2eaf2f692361326e7fdc812e24b75f967c947d8b85b3faa424eac6e21076fee738d045f2b5ad878d2fe822a447f1a5453d8a57401b910848230be8128be0adc74b26bbf461a077da8d26e8e23106575af26811117014bba0b95f8cd960430d350c209a66ccb85f3499622669e282fde2ab5faf17ce901db6e1ff723b76918734452f9ae00a132f77b962ccad7d05e996f89069100145fd2c78c1a03f9ae04a7f62cc69e2aaf934a2a3a35352cdec60df61d465d3e597cbcd8df2eefe181de523f7a2fab8fcacd304fbf9ea8a5775c265f697ebb88eeba04e371b0ea2c85eea4dbdc98c803a10ea784a1e55b77876f44ea36e477677752a7bc98c08422a7bb19911310681e34a9c09604b16e34a9916608833dd86cd1cb8d29f6961c6b258b74c2bc0503f7b132789eeeeeeeeee6e9897e94c9c4ce7663a990e6f4c70b95e3add0283c46a70766c6e5c2ee67280190b4b28f41f5b615e4574411758334bd2f1544f97bf96ea8e6aa2300aa3b0cd73273467a93cce8a2acfb2e75e0b7d2c77c4f3988bf8456ae5acdd3e1feddf138a45137439b1e00abfcbe5ea20dddd31c251640da1bd0557f823cb471ec56b0897ab685dfec84ad9347dcd29d4e0682d97524a29a5945242969239d66aede7f31f0a45545c4556b3a0260c36bd1cecc41798b0052908cf114b90262aa2224a2a0151ae47715b3ac1f264234f2eba893172d006be1eb0822e1d5150fa4dfc71714250802bfd5f04820d7702a4d12f3d87d1e08baf20ddf2c9d35df928be5cd4aa4fe8bdaf7ee8f440ec55d2147686e723bb4cc195ee188b4197f8822b5dc051bc22be6230be62ac192585adf78bac2fbef8a54c4921f69329501c4087ba5fae6ac858586ac8540370b077430af6832d1fb913a0a89f0a36dec5cb0b1cd9acb54ab678c2c60ecd000ab8448c14afb9a261e6cc1fd366bee6cd6ccd76750da53d57ac39d32d3c6764a64cb7c49fabc9d2b19fa7beb99aabb98ac2d6f294abfce5425c865dccfe03d5dd5d525253b5d0b1a0ec72bd790aba7097ddcb5a1d52c27e9e1ad2a3c972518c66230f9b44c6673984c4fbe4ce6c8d78dfdc71f945bc6fba38ef9b3c2effe67df3355fbe39612e7ff5668cf47ee0d9c565b8c23a56bb9fa7b2166c4f79aab32d8e30d21d8307b22f7bac52a55ab307eeeeee3ea7e68fb2f29d55312ed854f494a2a7d42ded59797e7878785497dfb3c393f2cc784e1e98cb1fbb71268eabd6ff50888525326f5258cfa521a215bfe9464544fa5dd5822e3d71f8595818e73f1f6b6bac43d9900eb1e729411794cb3c3ca7fadc56ef063d3bd2f573b37e47ef589f7659ac43dcb5562fd361d9f668bce91097e00a3fddc23a4e87f837cf611da236967b7eed3dd9436863fb6a3b8631dc4fc56ded3e19773eed3e19eef470aebcf13d8b655d802e20b05b8036da0341bd43a08b4e3fe42887a33f76f4c2e8f910f91bbdca7e70f432567d82e5e717e9da53f2943ab535c913abcb273f754b770b0db126c2f00ba72ecb5cee13373333a7b6aed5dacfe79f99736892db704558be9fdb74f74bd95c11b67dc8771b7e8731fdf993be0ed26719723cf9e8045d625cfe88822ef2f2c7948f6abfa04e27b0b03bb9487a11e5227e19c24217b58edbc438c63ead34246c2f56c66ae10ca181fdb0c9710581cc6231af5859c6724f7daccc6a899dcb1ce370b663a55aa956aa956aa55aa956cd5e5662d98c95b13296dd5e14c6de3102c117c49e03faf2fb68082631e129b852844db95c285813f4878db79fdf7321102884b8ee315ee67a06f4653946e670c817d8120dd5f312db81c1a2607942b40328eaf72a60a81b065d50b29c69f335c8c1fdb2581626c8b914ec57e7cc605266b00e8e42393b4e9fe7a65b201027f0f0943c2d204e60e27e9e976c879b00c579a5627a94c9f48e8d0dab6019ec66b00c666dc9b333670a458b9f7db53950eacfd1e71790f25990dbb55afbf97cbcf7523c4d6e0c6f3417b272b544ab1a9d73466ddbe69cda46bd0a3429e5513a900e289f47791da4930ea4c3c9c378185e0e187ff23a4830ea7f5ee561c0f818303c507d959af22975fb5a49524abe7fe370989898dc942e924a6a4ac70449e56a8996c29590588f87f3542d2505068c823b1448a29d7cdb7ddabdd3765f3d918f92398a868272828282827282e2414139414141413999b3a4df0a2fd49a9a5a53b5a85a7851b5503995c44a62253a26291399921d9321262793189392491c818dc0dcdddd3ddb5c79ee37028bf182855ed8afb6cbf39894a7628c51d322330cbaf41c8141170e86e976491770b4b96089155b11e06863b56c596cac1f1beb4b746e970ce95097ecd4d8cfa45412ebd0e6da5c32f62b817d2330912cd86f63c136d60fe8b2d5c09520c096cd0830d4cfbafd9bab87fd4a62d96a2b6d3b7a8442d3a27e21426e6e7272860c298965ab9258b62a8995c4e04abfa3b43ad425b1cd55ca76f46804f60293c9fcc03556c766f71b81a15ce98da03ad4233026ea7db654bd6f4427f3be91d8cddee37df566abeb822b293436065736d7e72aa9d32d3b3d1a81f13697b7b97272a6b7b964f293f00c3d1ce08a74c2beb8f485afd56aab55fc4802170f70a50a5cd808638c3056fbf9d50e50c48f534f19d8a15be27cb11146030dced0fcfad6a11845376650549d081f0b8b0d3d82a40844c8ce8d8f43a4b9d1064a913d3182050b8108c9b9f1ff6a23d91396999973d4d0a1cca5bc31dd3d52af0616c7c2c6bf21816e40b7c029681073fd774811c2f6d7c47ae851a378071cdd7091fccac3be5c980b7fc6b3bcdef509418fc0c0d39ece5c0099468e34c6872331f66396f6a3a5f1c636f0722f1fc610acf6cc6d4374b6cdfb38e687e6793cdf5e06c365bfed478b52e10518a4c20b364c82547421e7ca6f99386fe418617a0449f286b73e086bbd767091fc5aadfd7cfe432c2c8d7a79d1282ad46aede7f31fbd2f249700bb362e04a204d5d5703a244d60432c1b1b96ab460d963bb37688dd0e7065c60ffa331689d1e4079d50997f07e8c297bdecb5ad13627b6e7b78b5bfd1dcf6946e73d3b4bfe1ecb37b1c990956efab7e848dfd75b3da4b09d21e5e0f4e0ec75887774a6dea96faf21946a337689fa412cfcc6fb9b8bc450809515ccf628b972daa6023c51d11205653c03605598c31260193c518638c2b48786113c90c98f03a438b58748100e894734a21f44007f7e3c4172c2760f91ec464c156181a2d5cb0025b7221102d84e81778614517b0205308421370826cc13b965e0824c82b882b0b1b219a967577a5b0bb7065ca58a3d5ed7deefe00efee76778f52ca2ec6d8eceeee15461861eceeee8e744208a174776f873086bce12b46c9a11a17bee58fa114d0dadf1e27ad5fe994f10b5a69adf40b5a699d321651e994f10b1927ad32ce22a294717e51a98c5fd04a6b114554fa05adb44e198ba874caf845c9100dcea8dd1ea72813c1cc03378380bd5929c62837e696f82be612dc6696524a39694c953ce083874dbeac99e3006d3895b2014600257aa708da6018a6d14fbf84ba800f1ce44cc1a4524c4b28cfb90645bb868fb8872dae0b6d9f653efe468dcae188fe10ba401776d96008d2cb2968834b4ca3b39d8f8a02cbad1fa9661bec44d75c56dd06025c692eb9c72cb8d2af8541ce66988910d146e6d3d54620f35be6ffc8e09f1162a9a1baae9abb838cfb411c2df0fde090cbcca60b772e5fb1baf423adf32587638eeeb729e0caaf5d5cf99ac121618b016e7c47801561b870d4dd90c3c1a71b6db4da2dcc2c353e44bfc291fcf89a8410fe9c956f6ccbda2c6a50496005124437d21dcbffcde02aeeb71da10997003702b12205d7c616b1ae704110b498a20a3420f510b79bdeeeee96b1ccfc927c72e38c01f010f7abc1869a1b1f7e3088901b3f780373b8fbc12131dc8f77f8fd9847bc1fbfdc0813e47e1cb384fbb10c11eec73337324ce2c68f5fede74344f071e3d7b8f1001c8a3073e35f60879b1b9f070f5ce1c60f41155f28796162e2c6e722a0522fb8f181d47071a311a6b811c8115670636b065058dba704d0a00a8ee4dd1200d713b00d4865eb61ad8022910da188298354c5e20879a243a002ce10b2d0820be3da61c44582e53ac2052a978c0aae0c5e9f2cb0b0e184b0f40b6ba79f60b7226e604d8ee01858910b813881032438c1eac2d60b813801e486b08858948025e542204f1ce18a2f228fd18e216a90ea9b2a295b80a992ea7f5988546b90ea7f2377011dbb8bd54591bb9e8fec35df8ee0001c9d700903700ba6eec6000e172851a16695f60d970bec075f38c42f5e80a7346288477ee867fcfc423b8194524a226a2c9e2089fb3d0be5a1413882a3f995a5468c13cef9d1befc0a47f2a995d2ab1ed41183e86e2acc4da3750470742202d8127fce39e78c1a80734e6d7ab4e999737ed6559f9a11f69b19e8960f74e7cf183ccc39e783624097f8dc51a5c15e40ff07b7e95f6b7bff8dd6de9375a53e5fbae31048d866170e94c37c7f0bc8077d77a01cfc357f0d64817eedbbdbde45400ee00bf2e1f68597e41d883f7b48da3a106b1d8835486fb0b8883e77385417512a84e561870e5118d3811643d0a55b6c437a0c637e025c891f6fac2c29713faca7e04a94de07612d161f656f2f572be3c3f8a61b3fa6c0f6c748299db4d24a2ba554c69f2fb03192e27b04c10ec5183f461cf2e4037ad021840e61f7c5eeee760fd6002164a97184853f8585ff59112c588e39809fcdc082b8d031906baf226159606ccab9fcf1e44a409bb1f0354a85fd1a0bb71f0bd0a52be4810559c01b010964816e1de4c73d16900efe3a48ede1e0221b4b633fcbddd23d2c2efb436972310d144017f6980870a5456c2953c115a984649de0b234715793818d31599a534a015d8c8023ce02b6d8867bfc621afdedf1b0b0084000000000e87eec02c18f4d987bc2aeeef7d181b2bdd46f8405417b210d0f3ef3992d7bd3631c17b50aecd7ecd2799d3458830d12bddddbdb63163dd1133d31462fe4836b47d88641c1f2378c52616b6cbf6ddc6faf833472c3479a07d2411379ed7590eceb20f137cc763746ba1a36f6ab615dc4cf75b5071676e805f60b6ddde75dc4ef0183a54ed8af71eed739dddd006f0c9625b920a779e55cc8dd40721fd0217e1b6e3400470d1f160636468d85a543cdd086fceeac8793108b176cff171a80a7fba1be0f4194aee767277f7607e10aede124c4d22d30e6e95a050dced0b6931c1d622ef977777777bb7bf5ead5bdbd3bf772f00e1a213441a6404d717ac9178b8a286e2ee470484f678a976bc7fda0ce143b973f07c38c0636043e82ee9982fd025ce16f2f200dde9e6021102042eed73a578a21506edfc96d1a980b81d0bc5cfede6937310f0823f38d3536770384a1bef1a36f37f88d10aec015094309ebd2fb3a4787f82177430fe996a17ea894edb53645ebd48c00000050002315000028100c0544229150402269b2a20314000c7e9e4476529ac9835990e3284a21630c21c8200202022230323252050169a97ae40cd456a21a8dae87493ebcf749d55565110bfe792de2e702d353440e6569414dfc4ec0155b23d95ba4aee66d153027114bf53cbea6f8f389a396f803e832a9c634acf99605cc0cd0e3d286b2cf0243dcb9d2b3e72382409311a21b17b4d9b3c65915279759ba0cba732c97f8198c751444244e8e387dc3e2a5a769b393b50a868672defeb7aa2fab18b2af98c983337a5a7c8b75ea8e05bee6289d50decfbd8477e7c27a4dbd6fe54562f80cce40049975e9e4b2d112e331ce9135188bcb4648cee9d58b1be7cf5dcc4c783a6e65f2105705c8e912ddf16e35cfee3edafd4027b49233e4ba8e76edbf4e14f6225574e5718f545a10a0d761233a945ea33eed70a677856ea5e44c6f1a989d8e5c8fc84f6b9aef9a14c6a9910e4181ae7781a8abd64f2dffc4748d7283c99bc31e9575e5c031ea10ca3ea17f060dd459bbe6fc15e6453a36437fc8185403f2840558a737a0e5e1cbaa3239f0174da8924699464fe207c28c215a1701d7530c5a81d9886d7e1411b8549162bb6a40220da722ae0f4aa1500c1c12344b09a158a1dc7c694128b633bd9fffeb3117240e76391cce183e995a5c37b7728caef3a236b1e3d5637488de8f6020818421834aed7fbb2822765a86753b03abbc1a5cbf298c29e78734de6c187518b3cb6c0f368ad84eee84dc4640c5ccd6bbb404954cacdf8e73761c820be4e1fae7136e25392b931cf424a506f27f6b994dc90b69b647ceb9517a7c7ad6df63adf4c7ede9ef05e6011576e9d8df14ad738cc35278fd9652654d66b0ce7265dc86e12f8cf81b4ccbea7b07159c619b47c4b5d0b6e4ce9820cc2f2fc420dd9f8b066d5bf742c3320b54aec07c3906035e9110c8fe2b390478f92aebf1d099ce6e41c7b6020f1cce5feb9de6a33110afd4baee4a29af8e54e2f2de0e9b834ceb0cff81c05ec588fdd5b81f11df63e5bd3c5635acbf037e52a12d9979511478429267355854cb06ec806cab60d9ae5affba8cc56017319a8190a40e7f3806d3ea4f9fd758c0ad7a443cdde6d858330912d63b107b7923af1e848c674153c53cc2d2cf55f541277f428e1a47e0313d961a8d86e373887c362c493b0844629e1f95568c1a933f2dbcb2692f588b6c3d3df8f7372d5c1cf297a90285f5f57f1386292ada9c1588d68a7050879276b5890ca7adbf8fb530f34c3aed12a27794993d42a4c9671f2dbdbdf4c3678cfe2e3caffa284204da59c8c02b0b411b4d684fec50cc3a3e6773467c03ca00fa16716ea8e9a9d30e231a557740f3a1209ba813649a0cdaed2923808cd556dedc65a2536ef7a81e8fd0495fcd23369fc744034b7788b3c75ac06c3f2b15d643a718df37955c2998ec9322be91c5685da3aea9c86a1289e786e1376dc3a18adf32b7d3203d12a22dfc862383567a8f18819bfc32ebabf2bcac327c3988cd7171355bc1023621b52b03dc1c637822e8f78666da71cefb53015fde33c41f718f7e6664686ba32d0482799104c13b9263fac419bfe3e2aba20f8d47e1540773827c561daa881e633379d1ae7fe0e394ca0abb1dd9a031f3448c94b0ddde001a87447981d2a617ac026be848b49a44be348abfc936e2f485d0c0fa4324138d597b8654b6ad1a0b7b3137087e598b105e4578a79f67f77f5a4758a73c1ef0a7c941ee05d08868a6faa6b0b977b7e4f2c6d709f124298429ad4582ddb878a18df76c133f85c40743e231658a53f102233d1287f22b8163190947d9db222e0a58faee76e1be7cbe05a447314a763c66bba4c81d7c356094b0eb3ecaf4139f9457379f5d535b3f713ee2d7d4f8c01f9c46dd36143e43752b7ed71c367fea85cbfa20b5817e05496e25a723e6c794907c99ce0c26e574dafa2e31ed5886d62a86b93afef6b1fa3e1b045c8457908962d8119085b2cc55e3f6016c089fd6663d59017543255e3b90788b7387dabadc4aa7f4b99076dc8475bde72e18eafde8074046558f446e469d28e23dfda8d330d4890212c77aeb436e613cf5d0e59f2237946e6a189cbffb38727757468b25d3962c2b9d1433e840cf7bedfe5e6f2407e0a69ce99892d542348180f54a1db9c7dfd3ff6c286da5d784aed6d0d509c651a3284bc902827c2bc4367f5eba1b6dcffcda4801bfa6811afa97529a7a8fddbdf4c02b60158294b9ef9b42e353bf08e43c194fddeb9b27b4c1c30a410677ac2241815ec9e9a74736b25054a237938150474a2824c80ceffe5c32b4143c3e7fc9a8c01fcac94fb88e66e1fed5ea1510a97834314b23fa79f74118250750656d21de8528c9933c856bc62bdd055052e4abde88f406204a670e5366d74437c18334760ee8d2ae6dc0a531d382df4625773abc821da6d2388065c5ac401b8e934c10499eee40b50ae383a6b67daa3bb198c110058a6735ca65291ecb11804af9517061758f71279930a5d93e74bb15facb1680e08e79b05b32fa717f6a81aca9c5f2976c5eaa8625f6e5b52a4f72f4ccf92b4df4644f0753b13344e94d87650b629cbcc00ef74e135cc55edc71aa3eb6f3057e71f3109b8da3a68b4680d3ced1100384e006bd249b0a2195c2c8ef1af984135d75f0baa009ec54d45e069b3204e1fb56aca68fe32c65ac56a328afcf2eb81a6f8691964064131cdd4494cc4ba14a5134d23eab436915941ee33883d9db6024d52389f03ad2c4a86219f5cb1331614da2393b95f6bfb5cc6158c146082585b47debfa5ec4589e6b3411a7259dcf7d47c05e82497708d37a253387180bb8a9975e4a10d3513bbacdff57bc9a91ec168f0e266b2942d70f42591b0656b43ec962ec4f9933c906bc183ac9359fcc7bff675816503cc96d8c06a4e464b50c52b0bd5b4136142b0989c9c69eb894dd1e7534676d440aec37caefdbdd809e6b651e838dc243f0684aa9b9fbde3d0e8abd557ab6d89ec8a1e171e82c9e8f56c972ca311c2d881dbc290ed7d0cd215e6c42fd79509db9aea83ee19d9ea09bc521d0137d3fec12646f256536e1a29b0e506044d12aa43182d7a1d91e5f93d5ab6ea708fd574ef87da65f1a07bd43d8a262eb674d38e2ad913302ddeaba1a1ae35529f7388cf3637786d58a9ab0a7c6f6199f4cdad80aa0c4a9bae05126efc772d6e961d357f9a9940d5aed5629be033ee1ed6d1de4a43306626bcac989836473633c2b6a2fe45be9d963fe0c9f416971e801a5a8ba205f8a068474250144f79a9afa9b4758a1ea785db199f4519fbc363880d5fc806eb33e7526b8e79a5c38286cfc0c6163be4b80d2c22653547b161cc89055de56e02a4a7b43be297c9f22b27bb1c39ef04b534f314101946713b76d72d0debe9bb9bdf6a45c2078c14379f0603f39466e445c7214475afdfd173014ed5bba5e8a253f473aca471185e7c9fa9d1e180f45aa5d63d3f098cf5d08b11292a243f5a5314b46886c9e9358af71fb6ebb0c285c628924421a8f0fe21d00d55860a5eec8d4f52552d037cd089d2dbf02588146876c1f951c2afd1903df32c728704884c262a96076b41e145db4b0fb6ccddec1d2159fa2d2927690b73599938d3da04bf2f173438d301411f82da548a911d5ea616228a9a04df67f8bdaa1b30245ced40f67615876c1df960300b46d20fcb3857e63ac3ef50e444eb242e07da2e7890ce8a08c6e0da2951a9ed97d47aaf56fc1e1a0a5941cc09ab8dc5079739d7faf1c898c21d0d18f8f1aa6dee75fbb0a338e281a95386883263dbfa60f1061635e9e6a3f1eafbead6975f0953252244db31c568c98482c37fbd453213f2956a29956fbed144406ce3e65110595ccb21dc4ec87115394ec9fee8e75d82d13107bd99ded67065c2eef0d7724177ce490145260cd7aa53d24b4bcf4a723f4633bcb2553911d4b07e6e7fda8a311b6d0f0b46bc7df30f6d148b489ff7ba3967819ee50620f174e5d307dc7c9ca9ca50921c946737bb09de902d6eac3d809beda91a22991c8525a9cd5dc8f799d87ad1c9dd801146b04e1e530b5fc06be74f964637d21e856612c0383ac24926aefe64b33542fc9004482bee500359798863c78145fb24a2e9a4c3ac3926f8fc74e1da05a977409849dcd43bc5315ca45ba3a4c7bffef9c7e45e95658a0466b1f4c4fee8a94755517858231cb369ebe254ebb6340a37f0170c18ee3379175383bce03e4ed344746062783e3085bdee011327b8c8dc45b04f41a1b913297ee88aec640246949562ec8ca99c60e9f4ced0e9609674d616a5bb5d6385ac998683843cdb1a20d355503b20893299c23ff48f59580bf3ece757c3d57c0b423594526cfcd85c4a4e264f2b59130530c16df9df8fe9369ce696e8c17e7848a9d5c70ae9fd80b4b67af2901f5047d602dcb3bc10f0394d90f77bf215a8545202db7980a185bf87b724847a0bc679023cde7ff9513e190f47f27218813eccfbc151ef776ecd0aa9dcb856e272900052ac6275627940961f3f3c9b26057484bdea63c32620173a1e36c112f2c28f22b5a132b6e4938c95e2dc62f8921e1a281dd260798892c967210861ff7811fffa784c7428ef992d368424eed46305fe23dae4b3ab8028f4189a579c2570bc165ff6e10b55f0e2b670e6c271477e184477036add15badf67e9ade294c740dddad77447ab699a4bb552368c72c0c778e138a37a3ac420749eb92d3172515e03b57a7a48c7ddc8ff6107d3f945c669cac4b89a6ab2d2618acb5f82e619118546afd9616da253e8e6f9fc5d3b9ae5d7a36e8274597a0e24b386b8bb342e965853f52d120aca01597f34bd71be3c267096406affb4d3c1448cc1f03b7a22d5500a95ddc84f6403fc95a0cd730574144d8cb3065eaf5c4c87238be6fae1645e5640489ffacb5e8988b8ddd1d816fd71ad2f32b4e14efa49499fea709ff2610aa97288f60154d702d7e076770e14e268ae5dcbf52ec09c9c1bc920ade14f37c41594f3e17a69ce84462ef7d62a75838324f43122ff46f819d1a17cc78eb5f462cdbc64e8afcdcbc4c0812bc850f2ceff8b38528d88a01289d6d4f326b33af1a3249840dadb700d707912fa857674363b485885aa7feba4e5281a69eb0136cda4cec3e809fa42f2aa50c1ff3a7fe8b16bc9e8a52ef154e2ac5647383f98464c03e9348f5f4427a45e75e98abcf1d7a817069f52015ff4363d8d936beb9b81ecbb2fd7a87d96ca0de97238a32ccb5a6893a369dfed5d92c4e3a1a0f485148334a8d813e230a59a30bd5ee6f213452f4837830857c99ffdefcd587c8f390b6ac3b8efdd5906088f8c0302f14a20f0e0a751f5aa4da645d8baa7472e77abba293c4d1541b0afe56421b140fb143bbe4dfdaf5398371b8d866f279e5cb07c1ea87470c183e8a2da0a2af63fc73ee873308e68f22203597f7e330892ec8a50639e2b04aa94a9dcb47e7e996c455970fdeb71ed5da4290504641952ae75df8ce08fe7a4be226871c6e1fb8d6bbc81d29fdb192943ea786d889f6f27f09733c221b24666e01375db1e9d8ef6947a274aa0eccbb2db00975547b4e30741b7547cb02ef4ee03bfcd4e03c1cb83e5394accb2614951170d4a00f09d27bf1b354415260ce3f5cb457c89ec6842e95cf2f06528e169bb5a72016bdd04af623d172006a144197df83160ac1f55f81218ad0edb658be8a6a49a250084d58b2e8479b7092faedfd8914d4f145c8ed7dfc2f02be003a4e8f02f8a8a1e082d7c33a690305326500cd4c86b26665a4a56a5b77c2171555fe00186cad883e087691668a29245a7496eca753afc8f048900e94f945ae1154fd8da20a5bd34ace3eddc9b25f2f840d582d5c6e41e7f0e0c44068cef58daaf7fc315b05b06afd58ab83e80a4c4a680da8d8c500a34aea9001ba37bfa6a197eea9a932d1fa28ce38f1fc3e2a6cdf66b1c252ffa3c2f651a3a5b539da1691e16b6a7ee6145b9a3f1a79020d9c273e0ec6a3ae14ddb172c342108721ca9c4f50213f719c72a0a02015ee26885ed454edf420e8738395d3d109ca291a9ccacc3c6a90f80c21f450a40a282485b3b311ecee36a38763853158f499591cd111988dc65287c66d950fa060389936453d83ef13dbb63681966877bdd8ea01436938852f2021786d437f00571780d7c86164d69694b146d5697d5c2d010ecb8d14dd3933fa3f15101de27f6744b4e8263f3437601a25758f66cd7dab06fbb153db52106182b6fef627271aa91750ae00873c5493ceee1bc4edd98e30800ceb041bf6867d48d4348b88e82fc496da82b409a8364b66fec24907ab8c91e3bc55ad35da3a34530d1b74a8763374d2500db3ab72a0de022d5291861e0781d76e675e97a31b58997f32102626b48299283edc5418b941bde83a74a4b7b278b7c6b8007631b93d2fabbb3457ec96cdc7892f43be15b633dca8700508b19df6d6c4d213a38c59ced0adc95971917e677b3b76b34356e8deb3448a61607be8879a0ffaf3816367acc51392268c4dab56d18396cafd401a6b2dce11a59252c5c829ff56163335a01d489947480a28ffc7f7cea7e56b609a7ba2ae17d681ddad380697e1a4bc176754b8f16eb5507cde541a51dde1324cbf707193a239841e176379ba020709537364cac8a39f0392e14854199dd3dd49525c64c027f3489b224f482058664db640c4950e5ec947d9acb9191aa452bf36b3d45ad2f5cd230ea16642555bf41e35a971201584c0dbd653dd3391930ad4642e020f53ecd22f9f5f06a89a3a573519d468099c52dffd0fb10aa5c699095e1701ea21808ea4afe275a5c00e25e0cc7b57deeb295aba526ec42138c8483367d4a13f22949f02f3b97bd4517f4b9ed06832c5bd781dca65ca22d9c787d2449cfcd16ec82a32d788adb33828474be0d57db1be695bc1a3de65afa70f23e9c4d369ed2f7904727da239a0e629907ca706f00ee6a4a919e945c04b3700ffc18499400a1d18056ad08f5303ccf0e8e94a6e430698444d540a065630142d171b82695613901404397fa5c108a84525847b4ce664b48889b4a60d7d384cd73792d6c94d7fcf2e34c091de227a7ba8b450aadc09a45164182a805de2027da7c86fbaeb8ccb900eb41d6fd70abc90930dfd54e888862fc4207daac350140de03d84cdcacb2652c2c64db0ac5c208c6f78a1298ee9873a22f0f1df818337b1a3a2f43af54a5501bdd9314254c51fec61ad964a95f1ccc35662e3ce0987ba592c6074da84b7ec61ef4756d43200185529fa52f31a409599a3e4f4dd7772e2dd78f64b49e50af41e78330cab4d6fa6a3ef7cd81643b7cde5a15e58a25976a5209e525867ced52a80496c4998d2c9e0140e33aabbb2ae482d4e03e0547a40db41a3a5552fc887ef8d8946a0093024d499e95ef1bd27bbacebee0fe8830ce4ac5d3597216cd432d68c91114b8600e0a989862a6bd4bf397c42f9807b1de7ba4b2f282b89df32395a5dbea2c1f9ff71aa405f1886e01de190063412867c1025449ac54d9f9ddf19ad498a3b0f94b58a48d235456048ffb8e8dd5e0118d5410148e87d69d0a79318716e7c967d25aa971891233aaa5c27d58d90aa1d46e287d520bab96dce53cbc0c2d8730ff348c41bd978ab8d85a5c84c84234bff0dfc2666b89a3e22edaf94c5cd2f1079843f5ccdc81503e27947da0fb7a37771cc5020e02a712773f6dbb7dac07df1b593b5a3430051da2cbbdd125e63c2da35b47538bd4a22c986e7d00437431c75bf44023f0fb92782c76924a9ec155f075969b4bd292981a393aeb04ee319d2609ee8808c2500e3b816bd0edfb3099e094defdbb431bb00cc5ab51adca6f4750e404f4171076bfb04d30af6155a72f4418c8111814cb36cfb1e5dd2ed7ecabd4b884f77314ae84ab6786078948f8809122caa54e85fb869a2af62af3ca316c3b96816b9b83e4c2df357c40090c79bb7e40ce89466102c129619ea9403c2082596e6f3f00da1b3c3d8d118cb574fe952a80332a9e656b02e26575d3e03305c49b63d121b2e40e22c08701a37732b1bfc18af095db6a2260b7f609f905ed8a1ab00c4b26794c2113d8fa02795c72d31c4595c257154169f4e575a25eabc630a5320648c567fe3cc29971f50262cb981ee7399751f2c66dc62a8b7b585ae7c4fec7ad77080c912375580d5920416d6d6d79e0e00d591fb6a2fa0462357b2143704baa1e15f53e3e3ce8445983b9074b2423feedec80e2cab227367700977d3ca08fdfd507d43bcd59b6cf331ed0315127f926142aebfe61efa65111b167a45196c10efe8c832f0e7959d26e53ca43416c401c80c58e0accafa7bfc740ee2bebc43a2d445d74d9694359c406cc1e540336ee785099b626e541acd410c955b0e282b02e18b04b4ea2265b5820005e6064c0fb096b56c00123ecea0915b7d4904c359f6f401adc0eb04fa7020e4b230f0d8a91d1e6e314fedc6cf186d3c28757b6acbe82d4d41b9d99fa557c8c98edde2d641138ed2af462a7fd3d0bdab808193471ea4064883d98d5b70ad8d1b54950332d9a8b229cc30c41ee1a7b9fae34bd7ba8f686942d3c7a8caa3addd42f09f3bd57fa71e7f4c10b40929476ab27708324e83bb967a86a46f31d740dd34490340231125535424a4c9c19b1fc3b8941a6366ea0fa7eb43ff3193d06c7715a080bb160ed807b757dcf6a324e172a21f163abc169099327d87fbda887c5f82895eeda3162051b90388f41d8ea19a2b66ebe3eed1f4f460b7f58ae0370df01aaed0100d781a6c38e7a0f07217e5152d60ff02a70683cb85f176a00f7c65d64c411074e46a84b1e10124682fdaa26120a3922c90ac54152c308a668e0c05c01c85ea24450189e10b1876e1e7bcab1ce0b60a4fffebede036f66c9b452a6a5e23f2cc446146313531cc88a12d08652551db136208b61ce8117ea6be5fbafa0189440f36f7f33e429a4612b88e46df84c4744df8da6f348b0c00c5246e43ef5362f75e0fc5e85aa2b790d086caff46307be4d1644ded6c42c13ecf26086097e939a7e24d4eb42336dc094d89a41c7b4ac3e064ceaa1a426e595cb237874e8b87f3f947b2b037c6cd84f762661bdfa07a0119253c08d17b6affaa74842183fd3d69af42365d0f06117fa3166a999d18f8f5c243e9df193763b3718f03c6ea7d5a5069220d9a352d0814a338ff20e4418ed1b90b30908e75a118498a192552a57b08079a973c52178cb5bd207674c8dc1238004988bb80bc58eff0f0c5081357723ecdd948be2a0d3757511e2a4f79590d6c05794fc239cff18adc63ce4f85fc50deb2ea6b474169504c1d26a6e16614f8c7c921adff3313be42b9319cb055e9f35039ad08884ad6c34d2fc0884a1a6ed6ab6b32c279fb2b2f144c8abddbf7bc433246854d43db58b98d00f0b853b7bf22c1a42abd0aa54b1a66a4d98f77ce4570bb6ba930fb357ddebed9cfc67e99b8084476fb333c629d08821388132413208dec29fa80f81311c9015560420a878657f64c7d4033251fac35f1a3562343b3141643bb8c3f3df15746ecd45db5851adebdb28f501c175eb18d8949bd7604c4f1687877d451c31f704bfe7cc16cdcc1cd628b77a372d00914a8503c2ac625623943e54f5b080b691f82f0ab3205af461cef13e60ae9b651d7b46341d0440ffabda0d71361e02572011d261c120fc6e787515c68fdfa50a4ed5e891ddb9f02f9863b46040fed6e37432be8f3192eceeb5786208f4298f01e4fb740bc2e9d1990e0ecb7ec040bba1c43cfc37e0bb5e57ec949be913f1a45c0d4fdad6847a0ae05544ce2d067bb68dca74711b1b71160ba1b7bd80c7130534809bc8d5cb0c858f186d87b98ee20eddc6c4bd13ad21bd6897934f4da1139eb7590df70bafa6b75f395d9f20b16ec58a76730e4661917ed3253a59fed28fea4be2fbfa7cb40dffd37beb6abc3065a020f5e9103f51089bbe9b4928264d22bcd01d04a36fd3db00e13e952a993f0fa688cd11129d5a48e2dd24499c73aa544c0cf7a505d354697d45b9601d844d9c17ac9a58a5d05659713516791201355f6b4a056ae5176bf01f8a6a8d0f2a4ac508444aaee780f3b995f176af22e242db7d8c4b62e292f2f392032a78048ddc429f886d41480b1a7d0ab10a5d71464f9a72cb1344520e8317b4f3c1d9eff2a90cced40e0986db6dbc2613478d45b149fc4aed7cb954ba0925dade993f47641e594547953ceccd66ed562dcc2072859fb40522b9f0dea7bc34e07db96b76863dab7d41e81812bd7b6f9549bc55d88926cde2e27ccfa40982282fff44e19822d12d6cc58bb277d66d0e97677fd83c1aa275a15e5d66c9b951529186ba1714628cdafaae721f74110f3b811da2cbeb901860823183990f2fb0149533598afd61915489daa7c16304bca35f586b6ec3db8d87796b640dbe8fee201e93628c8cd2e95586fd9e1d2dbac5de2dead8491fe6a9c519a39761a60894d17616c472b473a90efba816170e1841a76408d5a7462683bdd36d0c630c741b5ce4b4e15e56824eeffcc9dfa180349d79020f8751a36d48a7a0d44ad2f3bce2c68b15124b17ad362f33b213451d279ddbc856fbb1a93ba2f9bdb1cddf775061901d07a8aed713958f1fbfb440a27d6c9c42741bd8d5ea44cb17467e35461e6b51fd474481b84d49ae285e2aa08e1ba96374b205f7b13a256254fb735eaf37d4e03728a742a8cc12b2ba3bf27cedd67a21d094ec1881fde994cb6555b089b42d4edd8a9ee2908b9a3052277edd0188f56d255217f610647356b3014e206a20e452e350f7c978a95d414dcf135861009a655cb7e6e8d3c8ea7d44c26b44c9c3a20f36391635749ae11f355aed466c6e840f3ca66c2d0df8d42025358ffe8e7a40e51bc8df1217c104d15fff4f23dbf1fa54ca04df4f2047a21747a7abdcb5ec808c1fb971e7bb4ee94d8488f3da29fd1d89f482f85b63528d0958fcd8915c4502d61c667aa7936f860649c5acf76f837be916734d6245325c26bf39f424941cc8737ebac272ce35a3fe1a48627d045be4c56842138c3ffd7e0ee9953ac6a60dee0caff2b6760e73bcaaaf71399cd53629290a26f8247f25af92d4c1f78c0001bb446d3bd56cb53092866bc29b40a4904fe9051963721feef9f6cb8b533ddc4c99908fce4349f65c31b243b056a0365b8019811b438a1041743186b380078680356d1d7494c1df26b68a031d6a0f511585bfa842bfc6d8fec6263338e89998f95ddfdfa9f0219247eab230ba79426913604e249a5bb7efa2056bb01533aa83c79a1425340de65e2a570b50669b406be0945a5fde701839eb181e9fd903f641ed1ac4399dd38d69da78512c7cf83fadf243dabd71cc5a6bb1c707fd53158e8987c397678e4da4c79a8cb91c452f867667b55bf6bc71468103b014080315d805c3a3534c8e99fb4e4d30ae190fb0b6af11fb768e1710c72a1de826ed3aec274278c86d64d6d8fa6a17c6b4605263f49f0d2823d093726f7b2c88942328413ee8b98d5e4497021a18b6a2013921a20f7b52e599411937ab3343e3f24da919fe882d6b96feb851280782c2efebcf153f5223421ace353c6617fc989bff74ff03c3b197a1d6cceca1a8e34be8ebb0a1bea7643189d60d0dd85c1197ec3d132213e23ab9b1690f6d2bad5da8444ec82d228e4519b2c66fc36a3fdf3bb4c5d03847b5b110025dd98f3b073d18c822cbc374e71b78e435e4e81d9ca8c1007dcfa77631a6b8c03875338777a23bd0967d423dc064d3e2d0413e10826b1d44309377a4db90837013fbcafa922eb1b94b09a54029370e918865006b00ee3f076b45b0f0b6ac9f04fb7f006659eefac4f9c8825e2eff3c667e88990508887ecbfc86d2be1cf6d4e53da38231a3972e676ba5a0bce6d56e8e59927f80847f1898b803ce9675269e665b96d0bcdbb371472c4b8c4304b6f36ce8b012e813e2a1a4010ab472c8080c684bebf689c72a4c5484d62be747c4084f349c156f8e01c5238f01eacdae4d04901f85cf0ba1c2bf7930908c531c7aa3071d1b923fb8cc2f5214c36dd53f0b706c70bac66409b86b15befadd9efaf3f4292d3ec006cfbc4f002c8ebc3ad2ef85813292fe5df913218b239969c74070e436d210e81fe64273fcfb36cd1a35bc2066d7f7eed24e3d02f5b83341b26c885b00ce84d29fe3fde88b2097d84959754cb844e5eda4963fc1843b73ffeb11f4016114dec23f0ca1e22c4fb5caf37dcd0c890202a46a10cf693c323f81768571fe6e3bbdd13a59654d25b3e23a719651a7b20261117afa765a691e0e84ddd8899972b252c7e1d37c7fb015565d1b0ac8c4ec147f61282e7612bce64564704e0c5cf3ae5c69880c9e29c329f1d05b9ca4c8fdb5843fa1e36d8ed1b4bc598082d4a3bad8e6a814bd23614010e1d161a26722e097b47ea84aaa6715b5eec3374abaa68a96fbc6807c591690ba894c002b70f2931d04e07ae23ce197a3e10d30701a7696169dee0ee6947eabaddecbeefaee9bdd05c0147d008f89ddcf32c0198319a1cd4200f912dca55a01956c0090d98629f8e7188ebb9d555693aabbbd51f52c2faa0875c4cc5077f7c9d0ff0ab9a3a6bff1ab9ff79940b274e4a296d2fb18d02073bd64eac160eadbb90f8f5f1dd3756bbc36ae2852ea1823da0f200f3fbdd23d735439e7614aca1aa5dc33f1481b3c4242509b9a0feca46b902318da03e7dc87e8fd0cfe61c0f5e23ac68ef4c00f386da4f9a8ec6394485bce06b80f782a09b0b8a674ee20726c03aaba85688d3b6fd91fd39142f4574a6cf8195c89f7dd8e9882163ec0f236972c124946e9d83392d5b7352666ce6a46393b45051adddc9c22de9ebcfe45fba6abff617f5f56796f504b99f6f8c18ba59d17ec3d07ed7cce6909ab4be7cbc2b20b31cdc829ff7aaea9fa986e5ebf68380599a996836720a5b628aace78672541bb4f6bc8f0b7e6f0d7dc36ac096ca57242a12546c49f00b4bd0109cdbcbb491e2e20ce482104432c1308d2f8293526727ca4a2ce79188e6750e73d5dd5d5ebfe1a831b69c91be81eae9006b4c70ac402405c97b973f17a387bc1a7ecb6e408567b262c0d09cd9d21a9c6776e6cb3fc4356cea3ce6c001a1b0c56d903403565ee03897f8509ac1d133fdd233945dc47e89b98c9f07d38fb0a591c7da665df23d8ce4ff9585dda6415ada0c1bb162d2ab99d05b58e5717a526b205d46522f8f5359043f5634486af9b72ee4cb54468c960cafa47e715a8e7b24a1f72385b088acad51e5bed1749538d58427d91b953d2870512231960c18b8e2255810b47f61a41b45b52d63f099fbeec2c391d8c685c7c88d441c5d4ba6ee6b4f9e2e8703d9cbac991212d2d21e46395aae5bb4b61ec750e45cf880083cee81546eec90da91ed65ffd2594c68cf108a1e77e14c6dbabd5a6ead7d429689ae3176164f3bc14500d36fe4b027585650cce515656ec85f7222c469286db1416a9be7e89fd0e437c4e1b5960c28a4c068581d791a13ea5ccbe3621a5097fc6186abcff37abecf26728ab825f80e16b1deecdc9fe64b81a4f0d4c2f2087b4f5c8e638b97e3ed73c5952cc0d5682a49d51653cfcc184aa034fafa0de76830faee6dbcb59bfdacb269057c8527b57ac3647cf08979109d21f27338ff2d826ef6aa0ff0acba78ae6f30921b4630c8141ff1511f000ef826ad482f4fb342d19bbc10743ef8d051f719114b57956e777d55e64baf75c8eccfc44cf9fe1ed33e020028e326308b7ae5702f7c3046d54fd9fac9a91f7419415f4a3f50efc50b7cb1eb75d518d187db9a7e3e7e208ef012211988f120af9c6cc25b2d85d1ecf20e60f869125b9a2a62cf4dd84e45df6b75a859ef9af554796333eca6225fbfb8c5a8293faa70bc48535e709c9924b74764f0a18211e88db3521e449aa991aca74edd5c65e38c1f561e14be176c2a3c98dc0c1e66c41703243625738379d1e253ce28948448dcfc02c93733949a047c9502f756518127dfa8d7453230be8e9a8327db2bb1b532a3f758045430723bb06e7f286b30d75225c8a3826c14a012f5e665ff1950a7159a0a5a7ed4bf80a958e744698da0aa7aa9458ed6ec59836901d130326c2a68e2f68c175be575a825608acc38058393213aa3fa896702320c8eca0615be834160b152a84853dd505630d7aac221f4ed0a1a7352ca33c47c62b4818fb468a1d50a8bce95b627a61e92f141342f99403fcf4820d8c1116801062356cf61dd289cc3c84d0a68177830e498cd18a76f46224e2b4f65899efc52ffaf2b07b34851130a30f33ff46a2d21803d5a3282df3a2f7a722e4ff13c6e43cf04128909150505551ccc64654663485ff19d005a63954e57e06dcfe960dc8014db27db71d81988d78f4050ded1533981903c4f412a15f8382680220a90edfea4e61e96be9be049b9594c2643e258024732ec19e8a337932e87abe0d5ea35b9c9ab4f82c9f7246d13c1fe2d5e5928f78a8e30ed7f63c7921007253af3a81c28c1be2bee9472270f9f87b0b74699ef32039c9a205d0639ee702ac6689470c018576bc5acb5e8c1cd706dbaaeac4c784502d11da7354b9cf71d994ee248ba9cd5809d2375f413d111bd51576d4cc1d85524d63d3bfc1c287b39d1dc793c82888528123c38b4bdffec7f7e82ffc394bedd859267d0b60ffda94d3e909fb6670e090c71a4ca5427b07cc767e47c93963425873d20a46b251e1a07defc54061ee628985f13734424c125dd260bd511da20ecab20deabd01e5c9cd60b286a565569f3b094dea28a2270a783b765c64842e7052204c69cb4350bc505ab190b916a33f720eb5974983b1aa7e70fe2be37975bf9cc2c66ebdd41c7fa140c56aef856a5b405d0b16ea7f313c2deb67eb5e4f7093d77fc63abb97bf8c3cc64a733b32d369607944efe9e8a36580a79947ae437103b1fa0148cf85bc18913b8bccb66d637193341ee637cb0b0f482784ac16e95aa77f9ed100c91beb9f0f3cb71447e2dce700557c7a43295b6211427f7ad867f04f6d3e5a58f15d85cd0c14784ebe5c2a39d47f956f0c5d3abb8182af317a521785bc3b9eb82b72abe6795d272005180ad255518c02ccc7e830038fb61a331976861fe67d9a2309b223a719e75db86e08c3c4693e7cc6bdd2ea35e8db58d57bba7512c116f81595fbbd9d39e1d6d3322026d2e580f63a33bd3d653ee34893608c17cf6b9c1eab1f88e6a2f2515b5ce5472f37774057cbab0437ae6cf7a84a8f6d5206f01202f89683defcd747875c9810156af5a55517e7f72add5ddfa1d21ab3e6a5677a1a2dfdac989e7c2c80c3610d9f767dee4f8ef08288426413c541cc387713977ad4536e25b4d73bc7e28cc62440b872cbc48f9b7979df39a0f08536a3e464dc3c48bf861b12ce6b823f6f36f1e105ee980ab910a57e18feb197aa0ceb7fd4d4f9817118d2b3ea54ef35dfce0b30a95142f0b3e2371064368668fc7516d4df520fe76e9f09b04bc3a78ec477d6781954e0d04f4faf71cd2c6e885c2201cddc88c64e6cb933003db9b24ee4a5dfc221505c174e65d97dfd859991e2049e48ffef295fea1865e8d4e83ff24336665676218e0a38bea0ec2af40cc034c64a45ea34abff6b73f496c33c52b5597c6845586a5d61897bddd0a95b3fa8cbf8f91e5e57f5fdd5629abb3e11eb585618b542ce52ca6f3c5b2e20c067a74c4082e1f11faaeb03f2b3bf2113c7b9ed79b53b6469b183af7339d7b801aad0a6e50e4231c76c786b1ff50f422e5240b134ce59f0a921ba7fe1573d6822aa7da699380020eca5bad3f2dcae133b2fb84baecc8d5e9052957373c9af7126d3545000858399bcafab121902f1e864766a752d4168a722836ff034899158f728a4928322c184bb1414d05dbd03b2af76f4690cd6a74a4687c6d81f7389ac47e60da20484a4f5749b4c1ddad38e7bc2647eb923237f288fae1e09d11d5a1f38b3dfed0db407d86360f41bb6457e3216d5a64cbed2173f5b81b2b9d0682130ebfd19f40bf36269d71c2a56ef989f48d7555cc70e71c410e23313101fc461f4296e2abf63cb36dbb2f60063349421135a5c007b50324a5b9a1035fa6f732dbf722b1dd4f6c56e4f0a5c7777544224154893bf80e93239193551e6b7edc6d90020ccce851ac13e9e43f9fdb9da858dde6752f1beff1257672da6d18d96aa6f088de4b9de80d71ee7f2f2b2f90c456b7ec171f02481dea87ab78a046693bad8ec4521c0a1757597602d71da2692ce3cfecefe5ca4189441ef315fc9125ad623dbb0f985c27b64b3b85f0f922c74e57032c28962f31bd36bccda197179eef367bec5b12c597b33c43422d4e43d8a1fe21ae9229c23dfd9100d23565b552f3116768c3ffeb38a4849b1cd9962440d39959a439c1bc71482fc36a4c755b04725b11170039532ae6d237a086bb5a7c799ae102f8b6486b412d921188c944d0a3e2505145bceeae0d45db9e8bf8a587869764b59764406239e9df88c491ba24259158e2e458dbfe24125394ba53e0acc8f30e6b936faa9367521d4d2ce232d226af5ac6dadc7bb2675b755866bac9cd7988c1a3aacd4dd0167a70eb24d82c4d184249a0fda8c94cb488e7a4b3e5de9caa992dd525b28bd25866ae5e9b30df999215e400cfc67ba04d2d43a3ab14ef785945494bc3079dc45881394cd371c55f36b61bb1d89118f16fb94de86c7a83a62f1941b5f93384d18b7e2c8728478e4aadc21dbafc971601eacc6d1aa488e3ec148afded384bace2b1d06b44a53951f8ef0fa5d762443c0fc414560c8f168b607c8c5ef190edf6e8ae73f01a80e3691c307093d03d8a262bc292df003714432218a8ec0645f27113b4d3f0cdee6205848357ab73717363b4015b5546ee2726ea6cfad6f0fe9f8402a035ebedf7e359418211547482051c7ad11af07054b3a918bfac9d9a05222e114c278083cc355282e13d70f569b75decaa5ddd16b31261580e0d90460df1f8c037ca01fc171b739aeac943dc7163f1ef3cd7ab88a7f16aba8cb3248eaf5196b7e065b7b65e4ddd409a1923a54eb74fb8ea89972a291edbd4b24239c6e5180e7302c825050616236caa4aca3e5d86e0e7080e322ff02097097eedb2c0575ba17a7482d2c3211a79af1a71328d2ee9f07f923b05dfa1668400c171a5d6a3b200fd1bd36d5f187e1969666b2aafe9c248fc2eaaf00700def062c70e33f45fa1393a1750b09fab926418c2dc4011ac871590fcb9a4e248f11ae95c412f1be591c9bf8d19d3390336a299bd2e5b6330edb765a1726221a6f4567506a8c8e46d41f92a66a94a52bd9df5e25b8ce353f6ac88b1dfd2cadb40a283a3eb2fe20aa5893524616b06d86bfb5e84d98de5f6e809eb34fba85458ce15da99326b267298054ff1e059c225c54b3ad7433c8283228675727266eb7a5e0a7b79f8f68a4359a4561758fb2f39d48713a62cc1d44c6b9f9dccf501bd3273ab3fe8b881f5922378434059e513a218d89e86bbf5a18d22db9242b161c52cab948293a8ddf173c7b10ad7ac1cb3a6e4c9f40530608abe3a91196989da9a65f98bbaa305363428094cf6d2d40feafb6f845ae1a988e7e84c73538c1d08fb2a3c4ec6dfea7add4f1918399110e374d508bd5c0103a1d55b9ccbd03e9a997d8aeb955fa9cd7c9f7ae90efcb2bddb48d2c87371a25eba7e849cc77950efd1dcc8170094bdea208c2d8c14bba595aaf17309df4620c6cc5fd5cb011310cd6cb37eb90b939cdf03de5655ae039ee9670a6a236f691a62517be23f8dbbc25bd64006a8a4207ca127218203c23b44e0bd6b66522ad1d9a13b32b8ee25e302791dcf11fb813b9c26e138d17e87546bf6f49c8ed5cee59904ec8355fa8bd44f226cafeadc29290cd6bb528c0a84da44a50fa8b2213ddabc107356dfaca731a8f4b6f9481a49e8800a154755a8e51f3de293d094d94cd4189dacb8cc24314124def2ebd76aeae6a08c78757458104a30129333b2eb31b08ce22d72dc0a3d108ad78f5ddfb5a826b339050d16e76566ba2517ea34b1c7dc8e1281786fed9e60ecce5910dd9aab644cf8180f50ba28f989ded24846a36d4c7805d19898d53d76f4cc0004a9aeda7cf48d1bd7ebb02c7322f2e3a72cbc775185cb58a54c0e0a738be04f2280f8c5c87aa0b3c84b64c556d40634773487b5f27d79ba48087ae6e2e79e381b5141553a6be60668641abdf7ed14957d8560a62611ce1d5ab50ed7fc8bf0dfa1c33e1adf90f703cdd792c867c367be02af2d513304f399342dfad5993423fa579bedac32a61315027848a0857ef26bfb24ca6cf0fbfea67480afd5264c2219b9280fb878151590252bca5896ddc85311f4192cb74a2e130596f1c62a9deadc6b221214064ab257d9c4387af1d22f6a11d4f47e913f445998521e2287641c2b19db8360ad78d2b26b63e15eb2e51b95ebfc10a55dbb07a4be42cf5909ff5d24d22adb6dfc794a8b0f9b6b94c8a43e80881f74d8f112d238659f1bdc9ab9b31cb3172f76399e8634a36c049fa3b97c9da81d58d8fdf012e494dbd96023d07b5ebfc199492f813925226ebf4eb01fb3a61dc82ea8e7c8f3662ed197dc36eab008d16a23f545d041cba321ccb933500ec1142b9dbf82850877696c90e859556a41b9abf5d2d38f9e22d685c4b7a1e37865d5ed96dfa803c12deb9a4cfa8eb77ec81bdf46236edca07b60c8d391fbff126c153a20bce2e32f5d6d9e81d59c6c26f7d142f6cbb62b0213ebb95083e0e0673c003aab8e89c2e3abace6f08a3b9825590a519b1cd3ee3d4b98660cbab004bc33a72de9279021443a0a438c82fdfbf765691575e8dc61386d5f27bba1a3b5f52c05651ec9217c8847d62fbfe1003382bb2ed653cc87f5396a3a11e61b9eb38a23651c32aac0b776b041e27e4db1b7ae01d9efebd13919e85bf494d1f12a344c0f2a040beda9d2fb3573713d407ab66b4ed1b7550bda8743b1278e0a34c7ea5d1828034b66bb43053e8f6f5a2f0ec3abe52181a418af25d66bf9cdef13938c53f3a461080cd24d7a85e04831b47687e5b7941eda749e537bff6be7fdf16274cfa3e011e5a6de6f23182b2a1a713a298448cd9742e073e640c8d02e96a6a1dcae74f6553825872a9a40cc69286fda698760ebc8e4759f25b0f712f8a3a4c11be4d660d25393c51a4f7a7f441cb0e280b7cf1ada9e6c616e15e231f385fcc4a47105475cd0fcbd4be6cfe7b0455ab5388ac9af5f413ff4408b1bef229aa4083a0f95b33e4c5b14f8bb6232cf667cab6389c0c3de8c88018716b5d7f20767541e41f46f7f138f88f7822aa3b1ff37157cf5727dbb72f515ef3340d83f829efff649adf733ed13b4fdc70561d1ad2e802de5814cf16c6e5c7587e503a6faee73c2a9c1b0cc2ea3eaa41327e2b4f310f603e55c7fb2b39c30b217af5755b1e78cd59c3d8827da402f6a6b142fcdc071f0dcc44cd4cc321def13d38e1076ea6496f6610de5b5629f69b108a21d1849b47f98353c066f1d959ce0da3eaa108808f579da1990b4a298207201dcebc9819adb2c1dd95dc9641e58d5ac512c1391501a2c2478015e861dd8d92909ff92574c4aca25591e88083e720de65cc0a068929f36417a896897586aa04c370cc68a477b143e7ac1010e6e02696635cfd89b6d9da127d7efe4753cc82fe85657061abbbb9630de3493262446ee4f510ce5153f39d7d53715547715ef03d1d6c2a2ee03868a43b622687961e45c91cd3adace92adcfdb142cb448ffe5822fbd3bec845eac18292ff79cbfcad4fe050a310e25f5e51118400b9919afe002e6a67a7aaa454cbbc7998d8d3be335ca19253d623df68e72b2bfc40235f65ce3d9ec56f6a75bae893e233589d50bebd0fbc323d8667538c6f946606204d009ac3e91058ab9eb6fc42678820528efedc2c122c0b1e709f03baabb35b01d3f68960b221205b1fc28481a97cd01a405dcc7fd7b118ab6b2d21f50ab2ee324fed8cceca4ac3ef7c60eb2559bb479e8d8a340a112dfb98230842931dffb8ecf4d4db41107d2b7fb6632ef2348676741b080f79079bef8741466730ff0bf9775a253dce48b4fa1f45616d515f851d25dbb46ed0cd809b059b3598d892860910b062d88a21fc88ed4a114e1d1ae80db05d267680921cd8a0296bb84632799498293cfc0839cbd140ca24ca843b5018a5f9d19ec501ab52f337b2f3de326ba5658874c82240521b7c8f8a734561879cb4bee2f4f9673000ad9024ef2df3609ad3029fb2f7cecec1a2c6287b78b08e30ba6d0b29ce777f76749453914ec49e63a8a4dbe3c7fa6c664a9517d9ca3d2604d3d719aa42d316562aa6223ba0a30f0c7c4657d201165b9508f6fb4cf2793e39f4c5fdfc71620b5e07d12f6f347286517f924b63b785630735ff5367acd69673d1b21fbfd6bddfb30e87ac89a3c0d80f5110cca90d45031b6292517282b92708f23211c89da564ca3ec5b64b05c8ca9b826baeb1c82e78273054f0c33828bcd6800299e4273b7728c600a5762a7ef0ed8e00cf3a000e16c72a492143e6dcbc6c43d8ff5d56e13a27a9de84b89210bd9597f4283ae6edd0c15da355ba20e41dbcaf3adc1581519688a385246d0df42d80bc65f8e1c356f0bdad70a201e50f19f151ff11af9b9187bb6e9afb823611647a6d6653dc065d797d1b0a5d033585f3466539af7034ba31b11cc8083754d35c82faecd2a00d35e05e8d12cbff5d2e680a78d8bafd401f5f68bfe13594fc4fc3060aa99ad2412dfe915b94c05726c8a0eef2da6b2451ef6491989d961b04c219a3edc16ac8f5d77a32032c68e63cffce634015d00a5f99ed0edd4d6c65a50401f5ba45f3e6f4a1b7dd728a3d463f26d9e7d54f4fe2faf5583cfc6496d7b9aa1c854b79e341c716e565d791347f4a07c6f9c900c1db147dfe4ab48d4221bb1660aeb9c37606e748f65654a698c014d39761a96c4774dc1381d492da57224543724f93c95014ff65a57593cbb48c3d5399ed987522f969d8c59411df3aed0db6702d8bcec688dfdacf03c8b4552498eb05c349baaeeeeb2159b38b65080b2116b073496b571e5c7967408af26e277a15a31d4c2d0c360a3854f0d8742c97681264f6147422f1ecb45aa388f2c0f55a02eeb4236e80fa2de79f18bcc24725066a7e17cd2dc707912d65bf41dbef989f35fda77e636d2a831ce4458065c98dc3260cd712c510c58e200b01a735baae380b3d9dfbd884f2e3ca04ae0762f4b4fa947401928198e9ca2a3b01dada6040f1e02cc581624ceedd7fc336621e2c19fe46ad52bd25662efdb61d71937b70ed64c9352055698541ac2b9b26ada6db7627070769a44cab184fc571c5afbb48702538ba8060ae91abec464e906b330b48e151ac706cdb8a9b869abb5703d300c977b23802639b5e9f2abb871d9428bcc4194aa3784986403e302f3fc469be90adc3c094d8e158e9d68601b98dfe2913e59907989b814fe5d16369df3552e2a737fda8abd78da7e92a6ad5417f8462c5617a7eefe217070925db1038541faf2559c154b670ce61c9af840f25909ccfa34aec28b46bf069aec4f0d13b6455faf281a2d20800a2f12fc34f29789a1c3ec5ab7e65ffe6c4699026395fd6855bba4bd8629d04ea84a1a84cf545a218fb9f53b7019d4c87257a5cee266b17a1e9682c416ffe1b6468c9c10bb68c511cd966426a9ea4090025e5e82e20046d01ecdeda845893d045b94f3161fb0f1e1df328ba501b2276bc0abe0088cd8a99024f3ed77d80997221d2a99619e2c5656b1e5354295cacc32ac760f5b8ae95356223c21b0a41dfd12d4ceba3ac7ab829083e39bc48269a25a7322c7588cf4c299af22460c875491798d1526c96686dba5ce1834b0f4dd968eac201d3fa1cde6064fc47700ffc28ec92a49a5fafb6951e2f138fc7eee8f127f30bf294953f2acc25368289c771a7e1b844b163afa9a38e0754812c9b3cedcc039802d06f9882a2846472943f123d73d99d81d97a23d484d17e8602555457f60e85f26ab2f5f01183058582e4e94fcf1f2b067845b301f304e68b44c9c6852fc010405812d5c18215e106fd435ad3fd43c050023be4183c7923b0e4287a5f71949ae9b54884dd06af0e3953cf91722b12837a9b8dfb1d47b6072c1b4ee606bbf8295219c3043ee400354323e23dd442ac1c2209bfb1c534b76bd63ab33be15043f2389452f7b9346f4bac67fd6f1856c889399f598a452b70e1c697e31830bfac77a96fda33aced15fb906afdba246b14f76c086937f50a071b2cae209f308a0567510713d21baa0e8427403d19c39ad5fca518ce89151493ed46ed5ffe14f5310b691a10a51efa11abaf12ac8040aa26a633eef5d51aa36f8c9e2649a068c256b4fccd826002628d09b428b70491c5e5615b26efa112a6be1b6078d9e38a43922cca8ea568179120f66a95b73bbab070cd19c29c36b312de9bda1bafb8094f57fafefd9bc8545a477d0d6defa9c0f53bc6fa6b273432533a2009462ae0d9da60eeacad1af5b89b3a02fd83e12f152ef0dee96d04b925dc3cd68a32e979d04a0b61da4067480d80452276d0229f1683b214e55bb0192fef0753070602843223855eb309c1202b8cb294ca4d251faae1b89df8d95c97ec4b47d683c6483afd59df6eb7b3e58eb712fff20b38b8ab07b854efd4fafd13d5b9c0fbfe1083821d3fc2ea2894d903e48307ca3d933f07b38999e5a1b381b2e997a332bb8e0170008024085eb7c1647a348feae87359c3e138b076c72cd30b6ad14d4aab3c764fc67b72059da0200d350768eab1e6071fadfbf68921395772a296e821dfa5cf7bdb5e3c2a4109cc67d74c22d8e5b5d7482f7a3afae4016543e2c81f724adf23ca0de6e57bc964a93046c249950db13aec4fd8d13f72f000704e3f8d9842df8a890cebdbadbda5c9c8855e809e75073e81102fc4bb00cf9d8984b897f094ca2d2d7f6263b90808602a2191b6019a0ccf0f515184d9ed2b2e4e17cbf8160ff6aaeff367a4ccc8b6189c8a84ac5adab3db2fa98c02c21389a8c1a9072ac8a74fae73008e624b66bc409401d202876942fbe68f59026049930175861b4a55a192623820291950909a2b168b7c56251094462bd248fc5d341a98e2a95cb4a00e4dada4835f690646a265f4527734bd7b11f74d684d0e1acdc1df0b98484806550d21a765126fc50ab644dd5087af57509eced53fe89727336b95d6f684c146ff1f3785ace6b9c09318f6ca945b2aa4dded4b573178759cc1aca3c0702930db80b2a4596da0d91a5e5dc71a6485284698133b1570970b6b31c855d142047e5ff38c9e543c01ccf052d7061ad7032992ecabc026ac41db3aa73c27a1e7c99aeef912e68fe2dffea3a497a0c19bc4495f77961d76bf0df674322c0666287079a26fa2843c00c8f4bc88b3adf4fac3efa6dc4e184e16c71b1597e37a90101a2c22abe444909ed7c602e072a7dd247763cc4e31858fb791356733f25d0dc9ba0fc9bdc0b89ab1e9685d924afb0846c72663e39ae4c88a7073b99cd276f83e10386c5080b77b644bfc4a7e31ccf78693c9e4514a5f07270d3b9415b92cce06ef269b56a70a5f111e75a0c2f1011b054080ed48668dba77f5e0171d4a5fe1271a45c755cf1271d4eea9a059e9170d945089a0e3c36f498649b199d63e65e2790c2719ebcf31a6a8ef39178d25c94ada5d5c489cd1b751b5e988165b0af706ab6c4f26c6060d3b2071cd46ee6456c1b963330eadf2b81ff9e4ce2836057e7a70e1453314d054c69a1e2b0693d1412d17e08c7a22549122df1d8600e9a8571a823a49440b438512b00d12cb35b9c8f845753a80558b0abd8b34e2221632328a1118e44d1465910162adb623544df32906c435224ce82a2bbc0e43a94f322e70e40ab02d0a24b8deb0f0c9994fca50068ed55f8be21aab3d9b9b5ae6a56dcfcd3385f873331cf6a89d98823a1170b464f12970120ee13dc01b3066ae1808035cff263030bead0203b8c1516eb4813aebfa509a3cab701533bb9e14769abbbbe103ddaf1a77827166f589d0fde72ef4327bea942aa555b8ddbb9c553ec166ea82c4ccf3817eb4d26be1285188fe2e093720c482535a52b4ba8870e6a709587473d1a3c2bd01432e649fa6722440ad0ad325e90c95b26a140de3dfc4d46058440d09fa3bf8360be0414798e3486f92fff11f236086d71a9250800f06b19edd94e2da980aac3c6b7a9285107df5e6510db87abce39219789e7e0244e0b5b5f546c278f8a4b9010a47d229138ce2507c2265ee39260731f4481672c28e9460c30b94a9dc2c4aed3f1721589a5df71b5749beda0aba4b6ad19730bc898d83237d22ac150ec6d2d54f47f6977393428450c11aef149a0d20373460e07627b9df0310db1298317199af66f217ff26f9580c1e678a4eca9cd1180af0489e20c03b1624b452e20dc059d2e8ce65d1c604cc7fe0b0180fbf268a2802e1b309adf902b5ed3bb526102eaa1c6bc81938016da5d2e2ead315ca47f716cb7cd7954123cd1d0bc5eab64d2df8bf2458941b0d0ebf79fcc55e4c29310636c4ced79987e9a1e379048445193c95f31b700d1d4bb1fd99a15c5d0fc5e85b189a1c813530f4cc65faef77f9e89e5dd30e0403c8cd535571026f1f8d0b43c1cad1bdbb5d1143c52c1c2aaca6e0a628c0952f31de762357c94573e4b8bbc4e81ea871ebf73122df24bb20635b4d0b00883f79d8eb95fbf07df021687490cbee2677258e428422c6109deebb2bc216cba7c1c7b7000ebd163ac7bd23cdd9f6eab9f0a9e088665bcb89ea0b034a1d2dff844f4a497060e1c14503edaf931017213e651eb4f2dfa43c83d95395c1199848b7d821c11bd98b86b119c0dd43d08398bf6e24a6692f998d4c1ddf9827e699950bfc4bc0592d49b29310856d3808cc8d4e77326f04052fb0f660f3771ce047e84a6f94c371569f59e652a9a9a3bb7b68e5e0b888aada2102c11c6236cfa071b44ffeff4dc001a35bb3fdb994d8010b11e304e8cd910f259a89f27a3f5c53644904b0dab5c9b40e5373e39cc3bce11bfcf7ce89c2b748679387cf994c994d349a9c6b51998f6494ddc7aa312e026bae2d6be25ec71baed2e54d9724c2e3ab1d4bf838f367233a381cf875cd6b9b0c15dee850f443b2c821ebb8d9089a7c633ba7ab6e5f53065990a07bf7ce1f61a604f2126ecfb68d0eb0724f390ff3b8b7eb3007195f35249ad2d5876e146edc83203a021e4356f5ca2e7a35678b02753ef25fd08c88453a45f4b5f0edba5045348ecae535f6a8707ded410e8766104c81029c221005536419d24b41b5d8236b449be1e6e9d328b0cae7067e08771f160cb11037de8d9e06907c79c4a1fdc8280948faca6ed93bcc20f12b3aa96b9c6a56bac147857f98a3506881e8076aafd6478bddff42435e5ded2db3cace79af946eeec0d00265ca12c76ea440222f0f2ea80c9c9d1dcb6b331717dbf14744ff950832dc137ca8ba356ca7fed2b6983a20071c241c09beaae90efcd760935a0ad98f179fd1be332b53643b0542a2b1194364c1a5ab3cdb58ad068d89a5a4e4c6a8192ef45f35271fa8d839d349220a1d77df7a2f84379d278a1356b3b3f4584c295ffa16a87d99de910ebf8c9153b7bd8b1854e14e529ec36665eaef8e693e3450527e568298f7234d54438e59c98acb09dc0c06c67b128225afa5d18101249beb5ba09622dab6296df4a7ce341a34b95a2f856c61b3b8ac4e4b430def93a8546d9fea6cecedb9241c7c1709c2e74987e6d33343febaf297b6e6ac7eaa11a234858ff485d7d0d933336628af691ca1e2ebd7bfe262669d54648276328d5e08638b52f7e55143de463ec4e6bbd77627b56203e9277bfe85ea02d7433dbf5b2e019d9d7bcda1f001df0c677af5eb9de82db09f56deb73845269284ad07c813cf45de5c48bfc6e72a6118f9d3a1b1698f1673168be7be5fec1d09d4953b06ab613125acb6767444135cfec2bd81559c7caa95486913827955609238e174b0a760673920673849cd5ba4714caf644143d0bd4694207c16348a20516ee091c54c508f94638ec12410fb0a50f2a81f12e4d55a93892c314a89e86e3095dd8068e0a6387e587c3440f3416cb7a6331fc6e3ad5998a5802f78b529a3e01f55da3c7814f0afd720add766eaed1250c6855dfc461197500b284577640a3a1628b94727467d709da820dfbb19d8706195849d3dc87037c2f14c0bbfc1e7a97dcb654c3326d9eab2ec99b0ee0a9109e1e42db5d0c8bfe5feae68b51418dbee003017440a104c119dc8fc744f3207ac65c2d71e5a3549caaf762e50ef00456c989a9655144d20003250031e616405b089e5c3d554eee206280c737a82d80864aa37f450684b9118e9ace088f24b3c16f76b6ee7f4bff1ea3ff935446bc9f46d4c5fbfe01fe7640c8dd210ccc656f0f7c0b389241938471d9df71b531eb721cdb0ee1a96f16782e595400733c54566a7194d1fb591ed7b9687f04f799f273ec318a42818f4e36ee14ccdf6719d0354ff102c5366538d0aebec2aa763e3219547199b9523372681ede72f67644ede1912af926708429e973e42f3ee55dd2db02838cd8b9f8ca5b08ae8809b0979feb989065206d312addf9d47174f17d80e196d0224a6cf3563de419e6aafacc4f94bd23c77826808a6348bd8fb88eac6487b1c48d23c066cdd19aa1cd7ae7ca0c7e4168c58e97be4ebccd10063d9c7bfcd0252f74669cdaabb5c7e165030cab873ee568294588bee2599aa16f16e294436aca3691a251a170505ea1efdcbe3993ff11da37b363cc0bae686cb909e5c9dc5da4b8e9b86364feb6e9d8205b2c68f9ffb332e4aa77d91ec994d177eede38995f301bbe52c3bc31fda1a76b40bc3f57ffb3a8dac06e285ef01f7944806ce9cc4bdb99e00ff8d9b2c4eea0579cb44f4171458dcbf8b9e9711a3e46950b6c8e1249bb3ab6aad380c24482d5b552f140206db0b4575b4a5da61fe1ea9f46c5ed4cae5c4e5698c72f6ac59fe0721702a37e86c12dbe212d581f1b5fab88a08eb28202ab4914effdf900344fdd0c64b77aaa039603496bb85a050c2e757821a32f29db818f17b9167dfb24d4e5f4c0589e45e9ea0d404c0d4d1a104e037ff619c1c5229985d7309956c311196728123254a4f8d13bec78bdb2839b73a2f884c081c6e6be2783213eb7d416dbbc1c69429c5eb76ee29e23f6a9086542790e5619954a49798d6428d5ae21d6ab0cefb5555c0cefc42332269dade73fcb706f902ee64d43d4530e4ecf9dc6522dd0865eb704afc7d42ae4f2b8fcff7865d44997b8c5bfa153ca90d9fa56c3a0fb4d3c1e171f8c7f215926d3d8c013f51edec221411093d3ff5e9a4938bbb2e2614769aa8dc601c86746e9c139291e3da142cb1df2106ac7bea7a319fa4ddfd12586884016ac29e7a507bc2336a38ec1ccd53591424842f636d6b0cdd2ade00a7feccda1a9d856e74ccec3df34adc3b96ceb9cf9e13af35351d6563c9715a9e5b99075e65a6eac1fb586707adc954628cfa0beda86083b3675966218044572b63233dda23954d7fc5cf6612744da5cdbde1064e655690668035d7348754f25310428289c946bbe75bf91cfcde1d32b112f9d4bf6465f96bc600cc00bda45b9a8d1681242891a09e102fddc20e95709293a833e4e285b551ffa4e342e363c701737548c8f59484c94d62fa89de844ca6248763d6113875a7d369499c31df89f6d11aa125c63d50c49b991157601962808e35f267ba8d414e2655b4f268e30fb1a177e75c770f41026b19aca6cd035299a29cb85e589aab06bf3e26b3049ce9876c3fda3c78173c2cd524a2f1753222386bc2de917b0339cfbb3fa035b090fe04f777f01af1ab1462762e67f97198bf6c129cfdc0a7d6859d005322ab5cc0d8d5c75a581dc3f123706ebf2ff656c3e96811bd7382942c17ed8bbde7c372f7643cfe825a065e48390e5436463814c59023e1d068c66d7c23d255f37cf6b0b131d197f0baefcd99e90802ae45787955da4b1488c378469e9d17bfa522177e05f860517eba9da51b0824f828fad2626776bee524c0e2b57b8d4b1bd117d1571674b4e3903d1bbc819078c7000bc3121f07de205cba640638db9733dc784c6882c58d2bace6aa35d96f37a1dc66f1387782d15ec3bf07f94873141408e16dd0101f98919c37732473b2f4004336f1dc8391a1acdbf571305a3d73acacffc8ae4c92c9f960cbd9980fee65d17b75590aeebd60da6b9b3ad4ee02d2140fdf18f5f6acd7c7461c273088ef4bd330b487cdbbacec655d258463480cc5e8d99658d908ad03ea5cc9243462a7dbfb3e0c3e23399aa92b17ccff30f198f77ffe947213811d8c0bd48584d67efb2eb53d91f1e9e87e6d18c73ecb1b319c3edbcbefc1375aeb4df248ebeb2056ecb9bdb67007078c77c90d076143a6f54a62516c052bf96b35597691bb4e0fc6ab3bdd8abd875f7cfe1c0b09d788112fcc281d105336f6a7550c84e174f438b489df09a79789e96badaea8e2de569b9076d1e3c0aaa37d50d1c85fd41b78a4668fad25274c232d31657bc22a69afc87737ef79de7b0a48db9cd925baf407cdf464c5c4343d9578b2536e1f926471d835e12a51eeafb21760300fa163a9617329e41459861d616d576fbd78c05026b3180d1d151ce2e5e741b391349237faa27a215d09cda7d20b4fdb08ba505ff4d90d194dd777b8e9f2a3fc2dec11835e90e06f7a010710a7a8e12870ae20c5001580d42c58e15929e0c99f62b1b96c952f07227fbcc6d84939d7c67601554fffb02849a29f0b3052e3be009740a7e0ab7069cdecacd83a73777147962f5ea421a409cf1ae82d875d22b46fd70333e379fc89ce13809e3f13528668bee8169835f0e1a634f876c33e080860acecf60e08d859019502948e6e22f74c3b57d17d057e5d99eea4543a48e8a061c6724144da171bb392ad02aa1b05a0f5b571c4563209c5798ae5439c33e283b1109ab24142db271705c23746139a49a2cf2e05fde9f457cf1ffd648c298a21777bba20b2c3459d49459f8b5a7ba58e5a0c90da3fc8bb4a914823fca4f0a452390c08f134c6cbda217519e4dd3c2cabeb6454eb8a9645fff2326ec802280bf3a23accd07ae1e5d612922217691be07cc0348bc630291367615cff7ff70faee698b64097c9503aa8e5e815930181aa50339962a8ea343549e1aeaa836d59ab610498bf5fdc65955b9e70a19f7c272a41e85331002fb05e076717a1c943f7f00d6e3d17337a2ef75cc2b781d06b1731c0116ef05a61da359fb8f9290bdf7de724b295392290b08ca07f607ac35226a2c7b33d429d5a4d70711ead40594e52027ecbeca32b68c31c618a3f42172ecc905cfba937519638c31b2ecdeae2668da2ebcdaaf6fefeb796e0663406161377797ba4c66d94d6cc0a123076e2875c7e6c00db37543ec1474e4c00d11c2eea2c3eed874878e1cb861860f9a66a255d02a68153d640b216343a85f13c97951392fa1560d35164f3567898cc99c8a9216f916da7eb67a68d1a8a2fefe986aa8d067ab2546d4e97051703ac59ef9e06059c934e3060aa56da65a6ddc4b25936926cd160f8c188c4a6ad5b44e275a45356da5f56e42b4aad0375a391ed931d298adddf8ed13573f4ca85dd4464d04449bb12de76c19ab2a01ab6e73f94adf8fa793d3ccbda1e9b4ead3f90c882c482fc4acb49bb90ea37664fee97ce6b5c028ee4fe77907e79c95b4d256e2bc1dbb6919f49cddb9c1a86b098a6eb486133718c528d6e9d3c3b4c74858191d772184907358e9b1bb9b3b768c317677ece6dd0823dc9dd7177277693d795f8c71298d31723c54e898102af4e595483e1d272af48e3146d9044a773b0e49e22323119a06e346e96e774dcc6955d0c885f05f0c343262540a8ca26c86b1146340e3755d5ad4c0c4897afa2d5a8df1833ae3b768b5458a16b0a36c2e0fa5c351432f6a8ddfa21595a2951320f71c866c70260f275a4ff1144f2787383af48483e38328989899994fcfccccccebc47f30587c9311e5db03706286e264c67a2b4021896fefe81049a8e14078c215dfae42f59ed9c6333333a7b0c27fdb1390f81e838a6f0700c7d395e5a4abe178e276c51840494c7c3b4d6521828871c2126c50e7d5e289139899ad884605a8c1f1f48959082200b19a428b283c7104ce410824cccc1c0f3b4188d44c115b7032a82638e1db63389e3e3d71a2063333e7c0441d07f86e429526a8e0db690ce1882274c9210a22c6a862a7977c3787058655cb84211ff095840a1d6683a9114305cf623cf1ec2726b09e7d8697f1051044e8200765588981129692197583a9b1b911c5b3d37a72d41230d043116470e5074c40e24805422c21b3a597ffb667989a02f01260f0ecf5e4289cade2d9399d0a08210b207ca183152c2bc0210821d3225522f16b15c20f0af0df8dd60e0cd02223095628e105cfaee1b456ab550aba1db08545050a4d3c3942889df6f9eed37777776759686a6e9cb0780603876730b4786630c8780e234b6b09244879d6a919224b0db84f10e1db2f6666229a00c3cccc3a5ca67cbba4fc801d6ed8428a2a5520a1c40ea7809d059d06303347b8039867e1db69155c584718e2e4dddddd5c1435852b6cbe307af6c84e8d20c4b3572358793e820fcfa853b3acc4541856c51dd8fa0fe608ffd534f1df8d2248f13c042fa46c71f2ec8efa2205386ca827a2252d2c4c585844aa64e8da5655227cf124eea82069de0044efa4608b64ddc030271c847670a0b5084734d9f1312a820d78f039fde024459495923ae3f78a152028565cc08395267e00bf5770a0e54af3a5c20aa145f4dcad2d8cfedbd6163bcc1eaf2dc8e5f49210888cbabc4f8616ba83ed97c72e48fbe55a53e7e8ebd1f8801ebd07f448bdaf7d06f8d1a71ff91d1c1fa6c66de8cfaef4954fbb23a3a00e50ce05cd5122485b2d9bc57f35dfc27f365890f1ec916631c47316653cbb0f4108cd83efeeeeeeeeeeeeeeeeae16a6ac0575fd5b87314629197a34edf1283d7b7b244218468c30c2ddc1a753ad7c792bbdee3e2857c6c84eb713adb5ddab8c62af758d7cf394357acc5da81373bb39e7bcaecba35f737a44e24baf475a5939bd172222740a7d67b4a2d1a0438a1810ed4c6997ce7ea363c723242108ab9dfe2a4000ad76a27705556e9c1804d9a3fe42e841a0471915a54fe9fd41a4f71563ec895faf60c1e5b1e8e2a1f7ac4c10b6109dbbc8cc4ca33775edabd4fb847cc49ea8d10bd23ebdab6bdaf41863fc8608794c9bde27e431ef13f241d8e7e57df5e927e4e75761f47a8ab4278451107abba0d2f860f7eef70acbc9f7e5832a84733e1c22f13f9c224638e78311d229e8b49e4eee28140e0ece432ceab7ad1e6ef10861142c3561f660a66563ec134c8c31f6b0a2bbbf9f00bedbe6d9260b556598a3585572eed3d12087e4d9a3c73e5b97e7846186792c8551cc2262a295ce2c57f188b204428bbe361ba39491e58a5145d877708f1128a4a47edb82da1e79f63ef89a4c4bca28a17e10c9311b900ace618ee79a172c2262541875e378e8da5842ba36391e29a50c18f583dcc523326af2402a2746d56c26c42825b557c37a906c0e761782d32a98646368550fa7dadbe47d50ca5a61c4b76f9af7c127df46b087ef1cbea1d748f6464803a18ada5af6bd22548586d91b060539a895a1adcdeeeeee62572a10ce597fe1729debbae6f5dd6061af6e53975fdb97b3efcde5580d6073110617df1c3cd01795654fb4939268777777ff9449ed0395d894f41aac601350fc40a1bd914800a3ca2c412f6112a5b536ccd22ae81365908f760d49da1be930ac9697dba47ea897736e50a8ddc3ff28b376d0e40d464903c8265e2e142f539b92a8bd911e3d86a30fc8d001b812e3052047283a2f47b56a035fa09280f26240fa91a24dd7b8272a746d7677776f5cb79c800963777737733ce0b7920a1d72ed3516b57d87bbe0d2851dd406306aba206dd858823b1766966f8972e0bb703da085043cbc7908808731abda01b3395825a453d3216c15ec615310490b9bf7ad17d0fbe06ab3fcfce06a8f7ed2f9176cb237d3574515ae2a0ce7b44f3fb56a776c7ece2b58fc3ceca6c749942d8170c539ecf0999999d9b3619464cfd8bbc0919d0c669e746e7a36ce28e92fc0c039d2a56b80810cbd7421b28b977207e7387d19e70436153e3ea8d462ce1de611738d8b72d8822aca21e9519b83bd3db5a7e6dc46009b83f3761b71a8c200b98301087b30bcc0a8de23dfc17087051c18804ca91fca05940e8a7d1fe674272f95b2922f977936862afd0f2e618d373fb26925dfd159772aa1babdd4d544c8f10860c3381ed331c7a013eef899e311c0deb45f5c0666709e058c402308ed5437f98c8e8632aa5117ea39085c59c933d73437713c1a84d07becc322a5ee8b5c1f79ee7afa390fc6229ff98ed63aea5927ddd44108b437ecd177b4c954e599eb813d1ca2c247c3d0cbc0483adf5ff4186a575469fd3af17ba54ad01371be39e7d14429f90aad1d232bb47638df284629f45dfac4b7adeda2024485e8f7ca1249ffddfc5e59c2e863d8c0aa70868060f0440b64e0033176d8bb5d4ab904518cdd3b98f29a7f10ca43ffa0110ffd03de27034cfacca351d4ddc17f8b8467ff623cb01dd81b8ec1a77e708720ec22f3a8b9a669de635ff3234fbb8f7e45b24eeb6c0cd52b55588ff591875d4f3fe64115401cd169f7c1253b7a36cd787a718a52c621705112c22149a4c72222e48e72b7e6745a8630b5c26d835bfb889b63fd7d19c54e23c438fe40e3f6234c348d74223bbefdc8ff584090ee143c85674f81017155786db595df11d9c12ecfdd47430dcfbecc039f3b9aa6e925faf56297d7e2c6ccbcb2b47b437d68a6cb496b801b873da1422e7ac65505159e7a4354f8128ffa4360ebe91088f4b4b934a50902d233ef0ef3acc3328ce324209d01ff31d783014fbd210c78ea5a6d2802fe19e653bf604fef87f4e2cc42ab41ea07761dc2ebc2f9a5b4d6d369daa0b25f573bdda6b51bee4de30c69ecf27763b798435740bdbc5d931b63d4bb3d4608237f2ffcf61273ee6117f6a11724ca80f3238642111ce12ec6ae8725ce8f981754f18267efe291671fed89e008ec6010284b9e634eb12ec8b51fe1f3c6288941a146ff99ece3f302335d9b2693c7983c46c66360b4c86c0b75f06aa67590296c3133335e4346c66730cc9770f99de2b74849d26b03708ec7a26c64bcaea3e1356262dc44a4a9c0fd8026530a9c8f18374946993ae93205d8e0e680337e9a71191b279fb1d1c1574146c663767770e79e02000060a34ae999945276354e1c8f9257d708b0b14fab4ea7f5f939a79fa6cf79f473fa8c6bf38acd3104b6b29c3809b4cb996586fbd12e69d0f03ef85f0da7e1b3681a11710ef7033e8c841c04a83f0ce7c3241333d32dab55308bb35ab53bb44e873f83e3c12ff3d5bccb9cfc936ec36710e9339b83c6a747269b23c6a76b31316ec3658cd374f067701088f199198f718db798185fce478ccff80ea61922bd930f31fde963fcd439bbb6c206716c70464a357de63f3347d42fae3ec6359c1923564b9c391fed276f06f825871c8feacbf5082267a40defab31e305a9e1333edd34e325ce478d192f26c699f311e3326e6308fc198fe966803f53f2be1a5e8a71c9f50832e33df065bc863763c4f40f26fd9cf1bc6fc6359f325e901997f1e92519e7381f333207d8e0e6e011a4e43db39b3102e36690a81f4c8a401f74cd6710e8d80fea986f9c0fe82da3346eb89a2c2da3643c8ff3fc13c053003c8d79cabdc9bfed25d7837a3bb8c6a5c394bafd976e4657bb1ef8c9317efaf28a739220199325e7697a32696fa24f56abe4189b8acee4a397bcef84c3c759c3c7c9fa08eb47afe962134e45cd8b4e22c32cd3bfe813b5441a7d636c41d63cac90ca23734e0c9301e7e7d57df1a1f46ce289bd206e38fae9343fa64b9fcb398db9a6f106fb5bcc73094ca79de92f8ff6307df48698fec805a10d6eece690727232086194f44d4747a715c063f234d7b8a3e19c9a5c019bd34ec34bbe3b630115b25a45c3931ba720ab8feab75b5e484f11cee9aeb71e32f4304a0e815d56bda2abcc2f8fd3d12102bb1e89fa40abf6e518f5834750c67ee2891aa96054c709ad78098f16fe8073b96dbe1f140273180ee7c8aba21885c3449d128751475dd2bcaf9e3a1834c4a88b9919f57cd4101e615e6d0f850ac23628c40383182567be7d391f330fa5304aba7422b15950d4e85adcb050221413f0f1e6a3003e6e0f59dadc4e0af80cf09b5a6c67ec7ae7908b90d52a48844d499754704aba3c824fbcccbc0f12bd3c3a82422fbbd81be9dd614575874e9112272f1d06f9e9a07038872ee0c53f9b9fe11f0c0c158c92aed32a1af4c54f33bcea61a9d2a1ff681ce383763a51ea3c02191776a7a02f3b853ca4ad0de59c209199d99b1c7510e9a1cf0ea1c71e48047afca99fdfd81cd4a7b3c0394368701b546a73643efd6673603e5d8773f8a76b58b77b03bd21f08fac98f822254b66910a9cfc741b9c8902212a3f3db20aee4c8d4bb5f4eca56757e1b5deb420d4d9fbb1806727b2e3a947e36301cfbe80673ff2cd731179a1f5d8df85f0a85953a0fc6948ace15c840352161b17b6f74fa813e7a024dd620dfd4edf4be442037e6c7b3484b6361f6c7d33c3ddddf5a067ce74777777175e10c2bdae6c469975f00852e1c9f0810e2c12ec826a9a0685f414310257db3998efae38074a661f4632a57e709579c3156c24d007fe6cdd1786f9e550620c992143662c6edcb8313a06e10f23c9ba25dcc339df111a44056ac239d98f22ded3c3a8f60eaea04f075b62c02488e489fa6d4b484f910c6a5950ffa25f717eeb178dbb3edba389de1e234c32d1ed071c79660d4c8fdc0f19a40bb3f7d867af47fef43ee933c48e5d761b8178c218140bed82059e5332cf2e7a735e97c73fc0fd8d4f90584104b007ab638acd7165559c4485551b51c482f0d80eaa3cdb20823aa6b3f61f8629b13aa0b628a6443a387b5aced7f9688d7008b02fbf7005a863f3756f55bc4585d5217dbda3b1114de7baf9837439e7b323d2534d743239bd9c669ceac974cabcccbf356a1c401c10073bd73593c5a1c4de24b1387ef6867d765ffb7ced333b06d3fbba8867d79a6c73ce09b4c1c0c0c074ed23a5941b161333312a8fc27e26b66d7462db466168781498a9049389c5c4d0f030dfc113036a15922997dfe03b349c7d32d92e78fe6c0e24ce9162482e8d03a82373f68e0154d1241b3c7b27b13a36676f25364711cb483c13f1eccd823aa4b3b74fab603607e7dc3c3c7b33591d456c0e4361512ccee124174ed5fb4eeb6141348931a04e6a2028e0b028c85a3805bd8bcdd222c01ee061e963d70f7366112c4631a5356806d124cca75344adc238c780aeeb8a97773743fd211719abd54b4fc27c389a04bd0da6e31dca83f31dacc1f8724378a2c43890dea1dd00ba5497b338384bfb74fdc3a8269c00d9d9c0b1d13c9cc1366690b5b256d6ca5a592b6b65adac95b5b256d6ca5a6b830d414c89dd144b81e2a409b664d9bb86cd591c949faaf76a73409fddbc3ab905360efff5cf8772c80c9bb5502ec618274b665dff748ae19c5af6448b1d111e3cd09751106641598f289b47c9786650ec3185bcf6cd9b410da47734871f25c3a27e93357f58c9256e8eb9653a69e24b4e134925438ad1f5cf0f5366aed229207732efea380ba37ca8161c1e624494b91c2e28ea57dfa846d7163697a27834d16f803b5368a4039970875d48ab68a29fe0f2758e1e8df426007d3a90134c891e90f5cb4f007dfa09a6b407e4f2b64f30b5a86bd4aa8e999dc7b91c406728eae748e072155ae66b93751b10b5fda21fb58fbe49f9e855871bc02acadaa226505035f80fe763c66a0284ff5af8786919d7e3ba21c151e63b3acb9c7ee6f29b42bddc7acdb7591126bde630e8b50e3e73343ee86b4e5ff33e1168aef536eceede4a9f097ef7e6a22ebbd5af1f451a388114446564ee18654de9b10ef3e9d4640125fdb03028a3f461759472c6f85a8cd9938a41c158d78c9f42dd0c9ab2c5aa4965920f91c86254134e31f6f3a47edb11f6a3651e51c139328bec1f4e4a29b348f9b9b1b227f5c3585c0fe8ad9798a81f843274500dede08eec683c94ff36c65858501b75aabb4885b097975bda6b24734876a69e35cd72c22b2e2d9950a07563cc90215f36cea89e31fa8ceaed900be770de996f6325871dfce9a2d7da45e7e61c73587b3efb8444603ff3e00f246aad76367c63eb6c30b991233ba6185a5b24ef7be14d6e3239ec2e13f36532751b3db7b9c128e8714cbf20ba660c1b581cddaacb7b818b6f9f17f606a87ed0875221da41e90cc7d120c684ca5152136c38056fcc0075c4156cac67748d56e1e810ede83c88031a3117424943472c284c458af4f6175a75793b0c455a554f49de2988037aec6a3a4a7de6e5d0a7bd52d4e5d14ef50e2d42fda04f6445299c1363d047a2e61212ac2c8929a69882d38145ad3cb1f2c40a1033c4c882c89e644f68080551e1b5db86edeeee2e6da17fc26de57c5cda6e0e9ab7f1d3696d95b675b45395b1e931d2295b87d14f5f3887a63354cd21386d004fd361f6df1cea9f53a7962cdd4d9b552606f4042813a232a9ffc582f9b3cdc36cc1b30f51afb66a4af4d99ec2d7fc9cd366e378a6d755b965323333ac9d6ad400a211b439b267a70144c3090d160d2850eb6cd06c341ccff6958ceae4a0bd6152bf39b42571ce37839eb770d95a6270ce27c3149a35d839c4824df1360b968967e739b4f306ab8a9b82db95acc495daa32184f10b0e34ca39cccc307bad37c6e8deaccbf9dab54df91addaef81ab6d17e2ddb307e4ddbb2de348e077bcc307a71318bc6cdcccccdcd2988a81863a49dda6b1b4208218491523aa4809a9d00dd1e5080c2dcbc3f06f84912c8839a1a209a2bc6486505343e0441813aa8f1b72888a5a466bf45413e6cd01215cc5c813f04d5d0aaa6dfa2284a78e8350a117280611dea76051251a4308a62658b28474411e5075e12e50627473c810655fb2d3a220c2b476c517484151f63449d225c525f7400bfa834625074c40fec53e96fd1114cd8880a538650e55ab087ca71114495f92d32420a17d498df222386e0144620f1a722237a28324207d67fd531297056a71ad40d2eea16ad80f5df69053fffd1530dea06cd0bd3f781f06a07f37a39ed26e6519fdde53b9a762b04015efc7a5168a21b59a21d124c27c1157362b3e7d1bd172e8f9e9c01939ff7f1a26e1193d617316151ced922265b8a766801e1d5cee4aef5289757e4a30cd2c31fbd19fad769fc723f06f0eb452141cc89cddda54b972e3b9377b74b979d193d0a0376a6b79dea8d5a38f6eee63011feeed2857e77cf8fedd285b9879f01bfde76931b4ca1be749bb274f36684a04a4d4a1ff4b76e776807246a1edc0448135c1bed6826c0f9e630701e0c9adb9052876c12e6bbe5a3774834af4836b751833a6493be6767d700d3a1471e47b2ee3b7d771f0ddf1e27f703017fb93637ed824fb56eca0c3c5b7677e44a983703ff45e925897ad0b655532e20310131720381abd50af3e0a6a2867553628c31c60e069f2943743e484f3f75d41fd9c15c5bce47fb8704f31ba60cd1f99e360084b1dbe71f347e7212e86fbf9a6bbfb06eca0c7c75379525eacdc031fe509e942fefa1cf13f571123012e5097e48ef1b88befd48e420c0df976bf4a27e4d081cb9602b2982d021dc1be9e32f8f1d5edd0cec23ae560f3d22d37be8bf74b838e237d71ee30cfcd3476cde212dbbf638cffed5df6b0b0ee8d1d13390d441c3b16551541c546dd5b68a423b85c3b66a9504f224d0c6f150e1250b8a5a838b72c231001be000f0000890423c4b20d982556dab6d55c4f34a870afddb10b0d50080c6468dd38c4c0c0c8d9719b5c624e442d913d588db23028d60d03b1729a5f74929654db469984dad4709218452caee41bc309b8f3ffa67363d39fda98c92fb6f8001ce950d8a116c58c1053572b070f64023a8868a058c1ca28421c50a1a6cb1338b408176450e3e355d56801285130e142f7ee6b708cad10db40fe6eb4699633364a42f4616f6066bd5f5cfe67d7757fa7a547edbd7871ba3e0fa4a19a00a5d6605f58b50aea0bb9b73020fa1bbd7034f19d55064ae04e8b4894a7ddb4e5188ed0df40abf52bac35376773baf39c1d48d76470944e5bcae29e93525bda6a494524ae7259dbe106d8ee8ed2f3f9c53fa761351ab5e7ab02f46ad82a830dc8bd310885eac207a71c237f4cbfb50f0c5e8c5a85fb02c746d8bda0e7fbd832e160b4ad0118d1f295096fc542132a24228e7a3571327d7149ae2f46234830845456079f95f0c12e77c2f46439cf35d2d2a9cb36570ce161101f42adee92f460c53151391a6458537c0585280bcefe5680259f9a14013903b2f469db241653f516115ed94d0890a2cdfa7a2ef53956fb741ebc927454da0ee5e7e5e9abc18bd54217aa1f22245e805ca8b13a26b0275aa9bb360ac75ad8bc9d213903b99c32e86c5a818284bfe7b317a319a444673488cd38b071427d0f78bd18b51a73a062906a9559c4bce8b41faa9350629e8448553ed555845415884a8d0f2ddc5f716f47d129a64d4efc5c84464d49984a4d1b7d34869f482e5e5e8258906125649d60b15508862905eba78d9f2d27a21e325cbb7cb0889b670ce67128ae92286cb37bb89e8db4d42d7a95a01b91e59d42ee2543b1616155af82111981690fa6ba3a1a12a445b543556454370a1220b1217a318852d6afbbe0cd1104340b814432861020aff3913d6118e6021b1b208b1c5094debeee89023d4425b881d19b55c1359e8ee589b997963d43aa5ed753784e96eca39bbbbbc50700afb8dcfcfde47e4e9deec8c96165d8518a5bc61d3708d3c4e7983717e1b55c3a8754e8c0afdbaba093b06ff8e91c6b8dddc1732ca4829a51826e346b78d8f19a9399d346ccac85d9911a8864da839d432ecb14dbba8a77135ce3965bc326d330294ac83bf6198438c620ee97448336ff706738c7a3e314a10489711c20882249c0e66c47c1795b986f1c848371aa9399d300fee70a155255fb8b241ddc0614107f582af4e59f4be18fc254cad31cb92a851db0dea686f95a934a996b339077d3a86ab23541854e89a5c549679dc3ab8a82c33c15f1eb192e6edde649e795ef4e0f4be888369e09fbe5a097270c51a0fe0ca07ae22b7710907a78ab344838ea380ff7464c095517a92031ddb858cd2a9f4caa5c8090b942461714e4784e53f9bef1b4c7c7b6d2058df452de0f2c317dfbbaa1f1a5aafeb62411272e0b6985810851d3628824a39f0a0ed608863e9903dd1da60a004832249ab810fc5429435e12304050f511869e9e1a5f829024ac20afe09201b9808356102737202a9534b8dd8e18db614fd40e5e7a3689d84280a62cb7fd563b25c3ce7e4b2830c82d8a1e83fffd9818a2276d0d28020908a82d8a188072b8a8250123f5a61adf1d3e9e10db41021eba27e301917d916991659122b776f24ec7aecd765ce23c763726d83e0e4074d768cd0b031f9e2c99455c12065f0f4935656079fc39636c9d358c6d3c88493115b9f6c0f14095397734b97b13ad6c9d36db2e4694d97a79e09d58f9636cd6bc8f1ecc87434404e34332ee327cf08543283242e768cd0b0e980350165670ae64776b4de168a28c078c18e111ab4a49d29339c063a84cfce14cc7b884aa38e4940a6a71e5b62704e697ffcf393d01a51ef28306bc52f596f5912f5d2b6ff3c4ba2723b91e37981c6eba34e51bf3a9a7619afb3683f551249565379248d9e7e324868e8a9cb8884555d4e3d76c1399b532e9b836b6a9ea2607c1b48fe489f2f32e1f222520cccaaeb2d7bd35f6c52184fa9cb09f0cef4daa8531df79a11ea1791a851536f28a8d3295ebcaf5ef1d47775b478ca5b680f2ab3b8e8a9c724547a97c72d9c05a647a44e51deb26573649b4645a5e11f0f21ad60bc8fd6ef44b324ea179124a0f917fdc533163a1a9cf7a179433a3a064665a2a7ce4338438ca2ce1c0fdd86a89a7f5ef2a8f4d8bc28d469afc5ed8ba7b1f5548b4d51c738eff28c4cd99e9e9153d21296d0b2431dba8d297577a49224ac9dddb1a1bb74d999c2fe551ed943da6214f588e402428d3e947a3b410786978e08a45e6473644e1d06ea94d6cdfbea6679baa555ada794fa124e51ff6e44249c8a352c0e6ac3de50ff02d03246ceba88b437d4790bf5d38952ad08a38ccca05e8451da94fa6dd23ef522ad823bd4bddd9b88b429ead4a91735aee812a8839d2e79ea25e7a897bc15f79c17577b433d9b52bf88b465f5d423525308973a6f69d56ef9b15c3c4619a5ad4a9c820fcbadaa469f0e391ed3a3ef14dddb1015fa52eff3acc3bacc35d85dbf5c04e0db18eae6db18aaeeb2477e8c51b4da4eb0a87267fb4704a6bd696ed83e107dcb7cf7d52af241e8bb81be9b1bc907203477e483181d614e7fa676d2443474d3e6606ff50f1af4b5f9baf5ec59d07a310baaed71b54f6aec20ce9162d8281171510f5a9e8bb8b53c77efa959ad23201165fc57d32d1f343fc7c3ee807d19707e7a4186ccd01f258b8e7536606ee4480930d7d8e3cd370cc33cc9911dcc4ba2f9e6eda63ef686c0cbd3300f07cc9364198679d6a9e849304f827992f59260dea9533136b3cfa18d6e4aec26b49936c5fe6d43cf9b940dcae6646bf2db92672c0ba8630b6a950f02a0bba8b40d76853d2bd5900c000000a314000020100c8784428140281a5695d53e14800b869240765c1b0ad324877114858c31c618420021c08001011922d2260866f9103878601eb4666dc682f06b888b64ab7d8e944a465b83105110458bb6d1387099dcfa8bebe94836d07c240220eec0d7ac7ea266bbcbf5fbb833a7b73767867f9cff42243e12af9358f6373b005fc8dc05a9dbd9f7a14aa2016066b59c4c3ef7a30342e4570f25670afd81b75efd857eaa15189eff6925891adbf4e15848a2f6514b0902199dd867c8cd3b711184965b4f7581bc432370d967c24ab47785f806e7fb9dcc8f19bbe49e8fda7d0b860b41fc774f3a9438b378df5a0eca0d52a777fef4793e4ef378b28320b55aa6c5ea56b9be55d4561ffbf4c6f9d367537a5451349b30d8514b661ecee1b04f2d2a195aeac5204510259eb78aa974b281e7d9acf0d244dc03b9add35cb335018b349fce2a14ff4c863c1a939796dd43c6b422dd479e2bc6cbe00e0fb90223efccbefca0466e9ad20f0a3b453da2dbeae999c55790bff08caed3087fd752714b92add1cd30f8cbee9b262c434096fafa779c7ce5c02cad3c0ddd3408d1d43200d3817db2d61fa7d15ed83078ecafca5cb119b60059b7b94da3fe778972227023ef9a9e1145ef91d3abb51af41e7a87dc9e69910aa04fe5231e274aaaafa73256e146694aad2ad2814d8d915619870b824c1b109acac88bf2b669479b18889b9244a345f3d2b62b13924c7a9080abdf606b15e60949f8729f643eae2f670768925aa6c95b1ddf9e0310d10d880e3c938d99735d12d1467129324bd8ef1e5318c302b51bed8f7a4a6ad09e306b0d2061fa30b28d0ad4262bc440b32990a18aaf74b07937d7e9c039692351911d0ce86ed077b7fedc6e8a35da7576d3b7dd0664775ae78e6239d8abaf0de81561fb84841ca19d462c30081b4ed6870f526830c0c847a04609f9cb7223d4f98a9ac28b3b44e126138d7c5fb689d8f879b5be6e98b149fd484e5707c6f3c9f8188c62456889ad6110c396883bb62a795ed622164c5eebb02fb699ee257e5a8443f3d0b37220a58b7a5e43210aef15f64fe9cf84efd21f4ac79cc5626e86cb0577e1a063c29e3497c037c3135823b5cb7ab9070ab617e0e96cb573b7f9142c9a90ac2f0713986e63449bd4296d629ddac427a9ed624c6dbe0d9b1e5ee9f636b1dc9c57c05948441891a07d1127540516997463ae04e2f7b12b3806281f1294a99880677f8b4bbb9ecb0fa72b3606f18db80d94dc19d4cdf7718dd43c44d90fa6fc4019696b705cee72999434e8b40e8eea2f0b62922dd02c60245defdc13ace3ce7cd3623533015b9b6ef5af7263c3148c843f9a204c7312664894b116873f1ea64de20e237fd99a79f445b79977e39aad2bdc87c389d3895b1507a8ec41bf3af7f99f8fdb8bbd9f2eb71f628615b5c19c24781ec68d6d117fb2c71f4a2afa9f4b231ffa49a563a17fa13645bc5c6206f54f802d10cc959fd4a37ce80eb85b75dd955d75bdceb63ab5c41b6bdcb5692b637b9d9d7b2fea3f936c5994fca1cca9c332ce36afd5445a839910b75e22d2f2ab9974ee9bbf81c3390e65d7f33dafa791fddce6ca4d918010e22edde69153c2b7730e684d3c278890ef2a7440aafa039cac7ff8c17077fcbc6531f7170d8c9f3f66d65d59ef946031f4d9d8966505375d6f46393037d5e51738d9e40161d393061b45f2d521058365b5bdf9762e4a5e008c73c0a319d7368a65dfc88bb3c6dcee8f02bdf5d6a72c61892597f4204a812f3e43c6745b5e7ce378047baf0c3c40d66fe7d5be2dac1d294be00880fad52edbea384f44df60323dfff27133a56219130bd7dfbcd2ca7c819ae87c1a1d90a89274be033d54804746ffc46f38b38d3c8fbb220bfc0613b4c2e6c69842e0b2d7d51c827fce28e2361140d8d7c6ed0725e7e181025c1d4a019cf4a5a12ec74c0e3e1763da963fcaaec276ceebb795524557a75f993b02f19d162f2e11109240ae5900405c3948647495af1c073f7591b253b33750b706f16fed863cfde8c73ebb302aa2a8f282d46f64cf05c9bbd9db2ac916e403be01d7f93b25ec7af8f9ba8c47b04b5fe60e454c5cebbd56c4aca0beffa7a9e2a566d55fccf10d3e84bc341abdb018f71183b421f5ce8dcfd43d21a22f633a6d3ab4a89d104ed92974d4d53b6a1d26bcf42415af1c5e1f47ade11ef096b2cbba3b540d3eb24369cf8d1fdf43b235f735680f6b562fa879413b7b18d8b417c1897df75118370a3faaacd6007e569f99e9d9246c928d7374c1bd367d6c730b7b9853aa6b01004f7892c10cbdde1b481d21716c60d720cf5f34fd1dd04ec0172b3b9855c503e5d607fbdcc18e7821fb1fc422cc71d6787a008254a006d22e37da9da7151f6aa1152e34231c35a804a75f2d61de147823a5ed96be7672e40e47100ba558f916f61065704a304a216727a2dfb51ad0e463925beab00250fb665323869ea15e04f30ea1e4cd6eb94cfb5d07eb54caf8aa1cca810f898b1589c3e97b9a17e89d14721fcd2d39e9689175e74db397c0599d6ce4e1dd94a83901bf3f69fe8a50cbb6f70b86144d75fb7f9d0ee0cc91d2161b9a062902459f36721f350dc38877441166fa8a286775c037a7b13fd56ce8abed7804bb8952fe48d886c23ccac9774655d2136b421346fccb89576e4d8cafd89d6d6d68212d0f2260bd720ae0469d6d97d8a3511a9f844e9e019a37790e7a570bfdded4229319b36e34670082d26aa11e31754d9214e6f4c59bbbe30d0d86237151ca791c750a80b4e64a228f4020a5f9760bbb8e8554353e4e6bfe689537983106415c427f0446ba10ae3069ba2c7ef768e7095d82ad1d864081c94c3c2cb95e42e97adddc3a6c6134aefc6839366fc2be1b7c489d3bee61f099ff460001bf8b4950979cc9b88d0c6066e479a044559eac10d54f12e00dc136e31c16d5f11e08657e0015a57431c4c3c496709823573f6e180e3e6bba512d508da1226ff8e7e6e93407fdba09bab9b81379de1e4738b5057c1d2d5c4e729e9c55102fa44b81dea194a44f29519d34edccb2c5151f4fc5f5018aa1cf4a373efd8e4815ee8b9de77577e0171024d651c6751e7037002b31c71926e274da1e504c246ade6f13c17cce7cd7116206abccd6b002082ef06961f8ba5b5be2597204864fe9d542d45f904413a19e9ad46c258cbe70987fbc9899790f2ddd16be278bf0c3ec8942741e6e97e1ad6c29273f68b89f1fc14586f4a0fa55cd6dfd52fc42c7513da43a1d52928366e1acc9a876c58d1035b803d6e00fe8fb63f4b37cb8871b306bb6ee01f8c2865563f2ca16588906d557a4384c3c77729b32ec85d6452f402ff0173ac2ef4bbf4e7203644d965fc4922f838d6bae02076c5abe97128a55a49238bf00f722f1d2b5f06d0ebb178d869edd272c7143525712b103accea322ec37087439d3c976b3b0f9b9184b17e04b0a510c17276b95de95d2af958d193554cf9aa5b58f6468b489d53046810b11690c3f5bfde6ecd9dba5f7f8204c8bfa4f3a88def08a8499d60736dbf5c96a238c0a6b3a84b2dd58b826fd40206b297b3081bb0f0a817bda1381b75604dda82b4b6e9d8d94aeb51316c574ee8ae990fb3d29e8ab51ce9d9ebf759a5d192741bd4a81e092edef9de2ee1acc32ace634b4d69d3c5ae1ec735a248f59d0c2d09f8be083352934d86acc6a3041d780431d03d558702890673a5c27f498e4c2670c6dbd22897b850fe2c3208d332fda504a7ce0c901c67a39fe15c8b7a84f26c9a2712dbcc8e1845fd92d6a09749eb2f252d0ad7fa34e0e0d8594bd666ff323883f429de764e2b70c387597f7beae1ce93d5a8640ec0056bd7a5e4391d16243e98d97a0f3a06ba4051623e6a39a6efd1790d0fadf9af382ea416638541c1e82d1189e8408bdca4b9fcc7b7d30e450d0b17e7bdb6611a8d1a9da08bf7d207779e3643fef1806e855b36c384856f0df043718e2b1d97f77faaf95ff08f6845ba7560c1ce64889408d5a96cb7b8f5d5441709f828fa99e86a057ea2f842f6755170ccf32e0e2fc586d8e01865c8c74511dfa80b55280421f9091e3bde2a00fced6c40aec3a443132721460573abab5f9ca1fa550157c2e1259ef313a3c10d63a93be95213d142bb268dfc131f135123b6bf03e3ded1a8e92bb085bdd4e26a9e9595a24e2c90268f7bacf63f0160806e250183f2a0c4a1fa44bb74d0104439ee3037a7077cf719656bcafe5c360dc72ec4ee27df2793fc93f18c34ab08417d91f0b3f20d97aea62aec13cd6eca9226e105c53153a7541ea9613b4c4417229992856aaceba24b2aed40f8b4add3cd33bab34ca7e7bc1c042cd311c030da7b54403ad407363aa4cb6a84751fce40258d48d712414283631a48334dcfd4e754be2629ab27c182a75cc5cf8d5ccf3a9772920392f70b47c47b94f042ba42ec204142d325396320d6f2c9acc101744d0874e3fb507bb299223028d2a980c59ae29ee30ddbd0a6cf15f0fd6144e7a45421aa2bd9688eeb4d1bd9095273130514ae4cecc4677ef85c1cf8e292ab8bfe9eed1d0dde9a607d604943dbf1c3f625953af4cdad1b734ab5b09784bbbb781de5c11d6bebc366d8a233f9512d61d1ec8bfd84bf122dea56ce97408af93f876fc390c205f230fd512b83a1aa4c63b35c9bf831c7abd757a4041306c81b98b6756d7206ba9351f70d2c04e5415da641c24741341938b0334a940e9b354e66299ee3a5d227213070d9b47c260d64e45e878d7bad65ad11ddac1bbc0d67568bf4a2fe4be08ea370becb2970ae255c668894e5dc9c92d39b606f24c986245952b2f0ff3535691994eecc8037183b0e3a27eaec4cc4eece44d4f54454666ae62c33c1b67634264dc0957d581ea8638f236f978750566b24cf26cc1481417f9a15575ca2f7bb3ccd9b80f191dd7d04b3a258fff6b174fad665d5082ea3a5c4284d9c93dec147532c79501f659ae39db9bae0f8c42992694f79b60c9fbc8ab9bb35dcdea74398cc300a39e0b36defff01762a49b4010eddd8e17d1e1f13cdfd26bfb4448003978c5586f3b81585246c08d91f29533d6a7acb8bef85ef9cc5958f4d2d4001ad4ac17a0bbf2b6b7b96d25bfa64c6dea62afb502ebdf7d652bb5bbc1d99a176c2ff1c752f9cad93004e1c17e7d223095d5e859d008d3589689e2b82decf0d34a0aced38a66e9120f5fd2085acd4ab6034435220e195b6c146e1a7fa7ccf0d5886b87b0682739c50a6bfedbb2a21b1cd9c6136bd320e0d3ca1450f09d6162d44565a1c46be10c92f169fba2c219a32a7054df4c3bb83e54f445469ec033bef98c02c2115b03dd8b24aabe174f4c525330909af7b56988110e8e737550d6ec2741f41f3258e8c899b34b3d1c014ddbc4885d91111202bd7f4a078f4d145b308c867de73ca46156f58c290b11596ef74bc1be256a87178a5e1eee28ea2f396ec2f2cbb1c1f67ffb21e9093ba4551c73e97e7348e2c2546322ec6f82995208640b84ffd492df80886430622bc1fd250812b9c1c03ee22e2a7b47d71f305560eb2c9c4df91dbb5bf4dcfb0adce655db141d5a1f1cc4c61889ef29bdf0c057dae1e59f49d8bef59a2df47071d2cb446ea55d11c0238323eb0b91951583fa0189de5279cc4ff499dc5dd3646b796598261d725816cefb8009030e4e64e178414ab0ee11c1397d6c61c88bd4f6288e20d28a3240af79abf507ef274cb2f69d5dd8caf728745cb4af6671c439698f3e3e93473502e7c72cc353247152dfd76da84532e0543e837e62389d855550689ea0e370ef9ac1333c9b906a9623da885526300ee01f4b565fd9c018ce44e56e3ce7898361ea7d4d2e7a13a9f4a0abc752ef8bd8d47adeacb3ab1c1212e50ce142c386bd10569f6eb8aa018f6758ae967e8fd247eb7b0fb833822e5de11384db3ccea742fb45af9338c49f2a4e30bb2479553f537813ee862f9732d03c7dccc0ee50951621f69f8374a64a8dd08148872ebebbf042c3429504852ed760eae4205018592cd9e099fa2aba8db4e37b18dbf3ba7dca27e6bef938e7176ce73093b903b83f7fea2c96aacfb93b2428ca118668a4d2cd868128e1716c6dec95cf92dfd9d4cfc16a767c215ad812162840f4ad71d5e8046575dc16db1659c5077e8233d856832b9705da4a424b9d495ffb60c7bfe23e3b5f849573d2532098c7595f8674608928be3a9822f3e66867536e53065550ba712b75d328ffea51fdef0bfd8542c989c24fd259f88935c039112dcb989a66aa9b7dd361caae5973f2a20cd6ab1780581e637141bc40e4e5ebd0673793b94ca7ccbb709afe98a4bd6905e4f1426330e3f8e8e3cf4c986e9e9469a939ca149c85a991b3cdccf2983cbf21dc13349a6431f4d759bd25090ecf045276b6e1f6a38d837a872228e1149b8b16d64bcc6bd5d43421fe8fe8f96ae498c6e130a605ace463cdc998bf3f89049a07fa62b9c7919fbc3e928d07fc7e2a8cccfd4ccb60059754bcef815291b14dfe03bb0bd7a84cc546eefd8cae4e7686b3511dff767cbbfa8396a3a34acd3a5f8f7c6ed4231d1b3f9dee9dac666a2c4a6335036811bc23c4fe3b10d13ba14580f1e7ff98b9b95c268c238a31f722437d8c2b99ad06dac1bb22f508b128f6620547dd4955c64c4d254f9d20772a00e4210aaa9b598a8b9094cbf1509ddacf0f1c14f4008d24fc22511755d76b6d0856af9cb5f6929889e647d290ae01fa07dc9a8732c74db7d5856f6ec32ec6b93b5a5c0e0649f787794be7e2ef78c3d63f652892e900be13b059aa604113fb1c1254e90783f255666cbe351e058de7d380561f7bc25ba11675d5d4e9825421435b7965611b197f2aaa4332531b4d36cb5d0abbab56d723eb8c2f1934e03930cb7c04f15fe4d05cce22a0b8702b86c300e86695d3b9a5d158553552c8fa0415d6bfb74acf154662b45aebbec066b6faf96651ae963f8539a5042f713a9db7cfab8025a8ed82d6e9d45001a0c2ded12e8da4c6edb1ded133303a303c363e032e32b55e8dc7f382f2a00c17e9c8b3bc92d3459a510404e62fabc21d0bca681c24a8549d9088b64ee2b77d862815a5af33d7a1b75d89c698e9ef10adf0b6f74d66837831b7913ed9b1a3d970ca94365a50511e589a6c2d190408112a55b5a950544eb5bbdcc93e9434bdecc16a8ef09712b6756f36b58525fae7b27db1f8f83993b005545ba18d6b140224df61ced11f68f64098879507ac6aeb496e45b19a66fcab162bb3b53845e40e8fa43cc77dce36c4b3669a3a0ce4d473b44d69d56c3b52780b9baaeafbd72a87b9daf5effd69e9998e6d6c90db801780ae305257cc5e33f4c47a581d340adee4465a6cdfc254ac0eff3809232370b0099f41fdc58850a1a65e1d7cec314ccb316d44cd30c3ff02d09296790edd731aaf352c4c0d9ac346d1e561cc1dae6e13bc35745274b8fc162a5b7b4cb191cae02ffcc75322c34dcc8f35730d9c1d2e577e7671e11ec3d9ecab2e9a779f9843f0b38a0ec6b560bf97519b816f48ccb8d1e70a8be421ddc4a4f873f3456981cba16a6b5c751ed993166cbbbd71d019f17413742d348f4c5350d0f02ddcb9e89982a81c4e583a7e48432d3a35152c89e99d4dc0893206293cc0fdf55c96d2a52449fbaa6bfadd9f2ac08e6e1de68b7bb4249e83a4adf76c9346f2c566a1cdc67eac0243b930b7df5684636432e0710eff7d32e2b49cce043845b37c412b8e415324cc026c5bd8ab290fc41aa8eedb5c6cc3bc172cfe2f20a4ccad72b4c3a73830367de275f05a09f18d71bdffcf2372b643e9b8b1c7c1e36db2ee01e070199ba0c1583ce6158bf0168e3e67d7a2f553dea938e4cfbd7d7f58d9a28a3145f48a7d33830fe968c1aca318823cd0c4f34137f84fb654a7b2b52971fbdef811f223850d9da723e45c601e9cdbccfcebba2506c23b1b475c0cf95074d8352d6482d1859478a2ad8da8210986ff29a4463efe8f2805faa5e71e37f4802fb5d7762a917f38cda49f92b9786c3eee03b8d6857395cc13eee30ffc411cbac93d99ad6c323e6ef1ac4771647413292cbb025d93a90b23b326ebd9be011d0c0236943f5a3d28167231da4a30df16acb398cfffc6f02b256eb34a2697e65d01da27ef9e4c0854ca0ca84602f898ae4132829753e7f124b11616d86a74339f3844d5891149a15401f2d535a7fae6f4f65b129bc493827fd7a69cee4ce3582a31de19049e8689d82f72f6e47bc7129eb989af286633d046eb6a8a1089b213020d6d7c18a6ec2f8a04013c4782f76b33f54cc0838ca440427246809c0ece0d95cf72f3c4f61711e561990af5de23af021e0468876bac13cef2ab1c8e43962a2f99ef9edaf32130dfa80e3e182529cd2ae15477edb053979015f754aac7b0c7c886343f79c56665d382161d5739177bca850edcd62ac1c5fe41dab586da5a53e87a5be14cc591810e96e1bc66ff2108b2de2c2238064c1513581ea23292f75bbb4135849f1f580baaddc7b450eef4d5482de615ef6ef9321243f0a00f48ccebebd31101111fc9259fced366d0460e18b17e3167de1efe268666a6ed8927c9b1603ee2f02418dd190016bbff24803438d09ae1208241f68556e8e01e2cd9af32d1d27f7964aa2f0ffd2444d26e28f8189dd10b87cd602427deae619d54911bf6d781c09cd7842a44de317b70fdf35bd91291f017070121bb5e5dae47953d5735e18f6f5f78ae8bf556f69ba6ffa7204f0aed2fd0075e53f81c0212cc3df6a6d8ecdfa49ceef024930fe4f453e9d5fbe5879808c9c9c3552a35a499e80a8fcc3db373b4348b11a16cdbf20e7ca44a889f1be7b60db7ee1d39165cce89b4b4360d7ca0446253bc43187c827650d07fb37ea045c814fc407e2214928d554550ed6c929221574415390d10b3c8a200e32acad1c10e4b6d641373302178a357124412dac0a8ec66f21e29e2bea1b3934edbb5cd0aa66794ccf4337a88f4d54bc429243d1c38ad6be4f595e5040f8c9c2333f2a25820eebfec7e68414f2890139ca6e1fe3e8f69d71aebef9e8278530ca5397531a85108748a304429e46ab4615e557b88d344c3770bc1ff21da2457bb992096127f27046e7a042ceb45c82246bfda7cac5e280cfc7b33c3c44addc31a8a7a0a62332cc322163f10c6275b08def29d50c9e067100f0aeecd654dae1180bc02a9e4245fe8e042b12ee47df5736aa4ec4f2ebdc6efd07721943ab5dd55713dab1de2193d87d54a947e7ffa15dcb912fb1dccb063aa1faf5615047dbaa6847c4784d97d5a75b1146e554e8b64eb555f6af2a8b68388a0d0ff7d7717114a6ced68b52b8988bc164f509797b08fe4bf021a73830591720f85f8d8d3cb641a4518314b69fef4629ee8dcaed4353bf1a3844da10411b0c5b60fe0256bdf69c3a787a16a830c14b950a80b54b20f0cf840abbf0eae0432e90216a168f64e195cbec888df1e84066f5541ca228576b6c7dba39e87ff9932968e2e6bcc935caf79e5657111e193176bf6944f3fba24fef88bd19271c88d3c53e65156c664970f5eb11c037659e2552cc9949843c38f941b5f28b31837db54da32aa1a8720d40a4a6fc1d4ab9d2994156188ad0df268bdf830c700982bf92ff7bf22631eae8691e81433774889c3ac317ac6c0752d7299a97d7bd374952c7e93c85f82fa1ce7c94acf4986231d157ba1a2264db30152117a681420863c38fb0b4e1415c579b54b100e708c104d8d6c91bab660ceae9448d4ade5fb020780b0794c16a633734ff6f81f24e98a38c7052853b1d21d87ed7e46b9f4da544dbf317039fff664bab328db7fb6bc94a1d53d0f495ebd27f7da93124d99cc9f9497e871019aa6f1207fcdc3a9155240ff6b58b42aa9d95194dc1332df921224b7d4f9e0e5e3cbe9b5b187884bc2bbd338caff0c2281bb9ccbc6205e775a2ec9d388a5e61c9d480882f1f9eee7ce77032796695933efca3ee7c537cf08f52bfc1f6e0ded7f674f125ad60e14161ff19610f5904fe1069ef06e14990790cd63e2857e64521fad3fdbab1b7711c82d70fec404ffb0c9ba3adbd7d039c80ecc8c4f6f994189b91af431f6c494842658871120740ac350303c774cdc87ee7a300bb5c3ffaba50afde227ee99f315f0b840f27f48fd6c3de0b161c7f9e763558af2bc57ce25207dfbe90bee2198360c4f14bf009f9f28b293db8eee2bb97b03ef66866cc3af4e30ff2a60ee0e8657fa1405b0616af26a21d68c57bd4d24736ab1009cc02d454c2f9ba6e71bb988534d54a411bfca8ef5e3a9456050d09869827e3e907dce40d49d70fd5e4bfbb9b1e4ce1b8bb3a9a0b96b00e7d0fef96181c6cd628d199d29c2b786d8f7a13f4e3b3da8a09f298f6a9cadb8245ecde26c4c5c55d635c552c09cd74e9d3f17922b168e949953a7ce52b59719f8d123e8c70fc6e277f554dece3e5df1ab5f33374186de1f50af0fb01fec749474df4ee4de85ee91586c1e9453813e01b70583885d0055a5ff4f0c9aea326fbfecf1e7b36432ed2b88f5aef1217e7da55992b4b41213c1b796e76db9e22d7c6edb02f72f489ddafd14ab9ef1e6aa74f49cf839d9d83f3e3e8a7f6f943a7613938d2aee4252644f522038603f8d03d4b806afefea2970157144c0d3ee8cc27b7db68100fb9f9dc20a2b91315685889e3448426dff8f65df40b5a7c4e24260096a12fa24fe83200a5201f4509429faadb59fee707d0ac38ee1892b2088766602c331283318793544874151731018914c47680aea27bff84b82fa41c7f86fdbe15085c3f2cccad073591a4616e768d77f84db0b42ad2f7896e5d5f2f46afcea44a9d8a3381265ebf53326b32e86660c8f80f94c02b767bb76f94c0fbb4e975fc2321bf6c5d1fa2cf7398b62505bcfb960688e1261950475b14f0e95f606b02e1bcdf6a402aabc1c7d5a02ba84620a1ddc6a45fefc26a511761c034e2c634d3c11f32e0b1cd902484e893c205d11da30616230d3f4913cb89f33fe7f4a1731d9a995264b7ade07778e3146354ca8e25a503f061626291c81f8e8120c2a63b4d8b5a39c50c7c2825e73a4ff5e523348d5143bbef4eeb1c77c80c36b4006c811f9844becb3e37d9006f86e7d4fcc56936aeac10fb26ea8f791d27fdc100d04d71da68be760734d9091c5007442272418b728114cad731b82c42a5fec596b99962fff19d8a166606d545f1be18e8a79cf0fef7d497f7cf3489323ff5c3c627569794a218cfa1ac49b6975987d340b97d3ba0b99e653e8bdd9c26e5195ae5bbb50d56a3868e44cdb14d4b1ae86f4972038d4d83bf19086961fd737c2aefe2ee8e5e2f48a87b6d31942ece13658f771124849128f9ba942bc45f78a50a3e594f44fe802e8a58d04d84bba513c4c8efd3840239e543a87b54cbd1afa928ce45fb86b89504cd193a1953a3b23d4f27bb983a8407e0616bd522c38d8a7e627c46516dc84b5fb08f15ea8d9612bbd4a5541a2dcfd8974f3ad13ae7596faaeeff7da9f2194c1b82ad4231a5ad8d306c89cfe2aac85b5633fbbe8d5d23acb78d175a4beb82e20cdc30d5e4bfad79df4a64689c00e5c825db44af80395fd5127996fe30f56f8743d0e5543906ca1263e04d6f0b58be2e01514a4a1cd514ab322c2245ceb1cacbb0cc880ad9f122fc6da4d4a1a01dfb92107db215f51ae8350998b330053d4f9cfbe7829a5076996f06732a2c55398667441af16d12a309c3490deb24c601585ae033329d50e2794adc5d060c28134f10ee48294165ae6c6000e244318c004e1aca1013f53c1d3944024d75a6de392a9870186f4b3e541daf2a10e38a7e95826137d4966348d53c28cd41f1e349967551b6c29685080e4cf09de1ea22375809a780ee108a350094167d5e0333a2e3f69c4f093f25f2390b5116fe88e4220d023863be3ce716fe06ec996aa68b7d5330cf5b40709a177431237f397e2d989bca16407250651d10f1025a791bce9779aff31635c4c5ae6f577d46bed9fc618c320aabbec756806bd83ec8de4b257e4a2b06d3bde8999ffd8ba7cf694d86e2ccb08e31f7e93728fc7abe8fac69a5799c43f52b0a78e1aae2792c5ff242cf26e55082913183b272d227f1242ec6043d44a385efec52632a2265062d8b53462bc9711f7a69ddead45b39e2a22bbae23cfe6fbe7d06afc5f7c71d9bf8021b4e9d746c4ec01775f2f8bc3d6a9e1518a83c9e69d9c53fa8201b12ea541c57432e842b20bf928099c6ca6ea8e52586a114051e86279bd4341ce56252ce31317da2dcf7cadf7178ec00a25901e324287a0a0980d16ac0815948ee195c3d0b4c37dbdc17069b0e607e81011b1a989ea16ebd13716b2516f98a84786ad789b00a869dc3d16841fe0d03078bb1c578965fe75a5bb4fd109b772e9366e355a1a1d94b98a3d78052613e78e8400a508c6d21d2910c9af8e9f3d14d29e3c73cc3cb86305d7665d5b9057b8d5758a05eadbb0a2c91293be0cb7cdf14808739d10bf7dc2e508a346ddce24f0b1bd831b5009955e5aeb2f0a7492af5fcbe05dd602a8530ebcadd21344a609c943bf102891554a88c42652aa3c9350283205dd37f2021653e8aa39bd0625a3da591574efe7100974ba625f875df503fa76ba75e51fa69a098668c116f3ddda079d8d33daf293fb0b6bf5422a755acbf75ec1d0756f325bdd600f1ca774a6669043698888ffda8646bfbecb1336ee7343917b9054cb51a9f0f002d721d232f836c575c7b8d9e977baeac48b1c7a72f63b81add0ef20592cc3c8c3b60febaba86d253a4d2fab6d24e10d650c4c0399dc770648d88bfaab86eb7df2dafb34cd0e5a673dc141917b862ec7c6b29cceae63b320800f0d867613871801bd61fd28a3af68e001fabe05cf7b17249082aa24daca3b7a06134c53e78b625b1a54a64dd80f4948be84e34780d6d628a9b85f78b3be5fcaba67a847c5f9d89cfacf115faaf56c2b6a7490a689f64b88ce7d722b889f7cb7fd61ea1954a5e22bb980a94798d514f13566f2b2b8f15d4c47ef5adb2d1a0a84ebd7c2150cd1a2dc551e9ea94731c048358b28f2f4957fcad451ca131692a95b74ca37af768d917fcfbcc392ebfc9eb45ccbdbd84ea529724cb4a422ed9a419b8549e4b61bfa0b637b8f1595b64d316208c7397e70adc09ca1bb467a1faf26d80d9e6c07f23fecdb9ac125a663142669d94127b7dfc7faf00df282454e25271ea80cf8b39704e430403d4ba0066d7a9778f320003733d515704aaaa369b0af4b035d1a5f00d7c57c14c18c5a94b45fab6cda7387f74a20f9da02765a0398de4d3b21920ede9988eb89b1eea7720d81a5532e64b7319a5506ebd48a6312fc0bd4bd788a91818b1b270363c91db91c68cd3f92984aaf46c0239715010b75522581d948403f27fa2faba4320ac8271a203c6b4afc4bcc4d65168468a1815f56e49fa446d7124c060b37f62f3e2a30f07cd07b1faec13a5b8328604c9f627ecb177e74ed37fd078926a85158908defe7323d3d528340d101a04b52c266478b255486765341d91c2af6477bd6c6ae8d0abe2d37d1c1b07c2368fcaa0dda66dfda833a82e9e1226456f55b03d2bcfa47b070a3d050824a2ead7ad27cf1ba764cace5a8b9917832f2204ac527651d4b6b95402e815627eda368c2b76987ea22946a17638aee195e98d666adc4d5682ceefed33ac3e71524699b357ac70579df93eae2596cea1c2ed2562706e588563f8e85bfb0df8ad68d44deacf359319766b8a3136dc645dc35bc5ed5099aa1427016f56776c9c6aa6896bb4a698cf8f98263777333f5591cad6d22af5ae88081aa9ed700ec21c0bc3f0b39e4067292d79f7437d002995a16f0483705f57341c3445042ebc0d0c53b5a59351d544ef3b05bc4b2f016db3d475afe1aa4948aecb2e3575cd0ece7c4234c2129c51fca960647c937221c817ff20ff203a2d13188f071ac2a209019581cf4e9b373fe75f2ddd0d6fd58ff0362fa275156ea7f558ebcb6485d5cc8027f3f29bb2eb3b22eef287a13eaeb673d92217c4601d7859202b2bc7ec9fb9193f9a2b13e4c838ced17f9f402d0f9bd3c181ae2c26999f7d495efef6a7218ab632a06bdcbb517a2a1de9e0b7204bdf486443f509ab01f49efa5849ad1268a2a099ab77a363000ee681846f893c93848f2497b42e33598ed23f919bcc75c562d86e24cfa767f98348a8f51fcf41e8e7cdd0ea0f83c6925062d604d03cefa615692b08068236b72cbe0329b9be3eedb752b549c992a48b0827082cf6b5babdb2cf4398f4d89572bc1f879b60290d2e5be506045b7a3819303f24549d039c77e7f11dd7f63e4cb23b60b625f1388a29df749f4f73b0061daf3a9600ed99c3245fa939b331930914dd0fce6522231daccbe43ef8047e0b583a06e7b98929296a522f45ffcdc46189d7f7186a0b429b7d47055f49e2f774237add1a1f1d822733a4b6affcfd04e5ca7e72e47ffe845ecbecfc743a23bc37f92c22be38eed86940a92f90ad29c5b19e3a00165bd58bd5eed486d00033a373e42771da27e30380c1f16054f6edd9b2dacc51e21655500390b9aae86144e6e933815c6a62f72952c03a88c324e3833861e339f3dcc4d10fbb77c46d43c3b173c1015a9bfad828f61d05d46c5b4f3a2c422e90c1ad38a44d93286969cd9bbdea9ba0b08b3c7d69b706d8b65cbf6df99010da73890c477ba648905288aa9cd94e7f463fc2b147f4225879026d5777f47c92a14bc5504baea970af1e2458e43346c8dd559558e7936f718e1670fedb31231a25fc5e11b8fbc46af5b5a251c876ee3eb27d36f72183a0906f0439e16487639c1eaf9ebf755385db7f41c386e094f7ab615e744c82a7a0e14ef6f5ee48e79fddf1c4627f2dfa945425e567df9d1583b455fcb93dd7dc7aec9ebbc44b8c11e561fe823bb9cb62c926bc63dcf7f8ea1526f2d9b5cd08516b3e8b8ae0d75df55c45b700cd522d6701f6da13ccfbebe51f88c594f9c58dec172b1e6fb8e9cd50a40b7712c9330b58ff4553bb3ba6a853cf57f0d4e520f321699e76f1a1dfc6f2462a967f8d057642a06bd752ceb11604c4658906b732374881b4e4b8ac07626057792f8ca1a5fd681d918485febd80f79befc5d7e4acd2bbcba2877e9f96a6535aa412cce8b9508ef158d726175e53ffcc25a917771f9a0c141362e047eb2fd648e2ce1377f884e3899fb6a56e2e87839fd64433e05cda869bf9c5d722489e31aa7c7a683602e03b18a8541e49df20e9d74584f446f7cd427b14dda04160b846f358e0c07f627859f2bc79e2d64dfe42d3a4d1772ca0d0a8ac5e42b8f9e8d7021bc47b981cfcab3857ca0b27cf6bca2ea9a941a61951f4ecb1310912aae07c592be46814ce81d4c15c78d4b202cac5f87c25e6c3cac85b724762163734e57bd216ee6093d7afe472a30657008fd9df8008bb9f16219910280633288dfc6281911ee236e7fab9ac01b2873b6e008b70a9d0424ecdad945ef26786a37de51cbb7b26fd31b4706c0b285d0d80e09962d7a3d54496e8ce4e741efa316bd3a2d3bfddbb17ce8a7a2de82f7d252241a3b25eeb17082a838b626125240ce91a3a284ef0ce630fc311ba856ab57600012b139e3e5143265c6e290910bc75e9c88aab4dbb00222534ae36d22261c85ac24e501cda423f7c5195ddd5d94bcde9ca296aa62499319b2d5204c49961cd4f5c5d88c55e946ee3a7289754b124f8182c59a40fa093ac867e55bf24da6ef57639b67152068d86e06a74d5a1bac6fbbafe8ea4e076aab05997743a4c2624d7084e581a3e5805f1b5b5c1ba1c5195f6ddc0133375376169007e6754ab68101f816f1645a5ff05d9971d511da6a83a82b46dc324d7de2cd19374bb53d706fc4d0404b2ea67839f84346943f47e879ca2b1dc18384530f0276469addfd9f0ad939961e8d67d39b91de2056d65eeee07a26c9cd14ba605c0fd98bd879ad4a32ff30afebd25be684e4e9654ef6511d93f476198bf2d12e27b1f12baee97fc607c266db9aea556e352933c753c11423fd61522587ad6201b348fb907448b77828acc68de7365c07b663b437c55d4e9d01961d26b71f95b12b2fd564f5fa09b78deac30f9a1acf979656cf21aa10d53480e825188dda63ed4e2421baff2a556871b6778bbe6336c7607a57a3aa21f76b420dca29936a1c1a65958a357684be96f2abe0d88c3dd79995d1036cdee0d524372ff1d73a9e0ea34f90c2402b39dc424fd93eff12434c720d60bb4ea7cb8091eee77723f414c322ea5a8215e3ef656448d29c59e6b9fac15ba4d64f39955548db3efd830283ff1f29affa58c354396e591dd35a56bbc82e17600e1f08bcc5d405501716e12254ccfc5c0566f16da633c327b9c2cc709316818c8f74e6ff94ea74c1137c927bf8ee518fb9c5f5bfc00735d9ea1677718b3413ca877c5af5287a618487da51cd2175377858c1c9acadf9f4d84755443f7278f19f2a0139339160c57f1204bee56e40dca079b631ae979b580e070a13a1fba662135d2fe3ee8b12693f6f3921f018ab73ac1a95428bed4d1ff18d8db04eebe023e1dd22b506d0a9e08fcc4a32be56dadce5a5abb12b23beec03e710e75e665904c719e99947c47c5fa2b1d791b7a4c9777878f689f20a512f4bb2f1e4c61b97c38cd9d9c89edc5bc2ba95cac58c589a6acdd9810cecacf6a795d0c4144d3097d2c0f6a702d6ec2b69ad2ce0b1e19906c783eeb61a60202d965bdfe0fcafc815024ec39c873503569f22bdefd189b5b276db6a42a25ca079fb6a30184891403c4e8ed005ab69a7a50107fdbbee468230a13b12fe7d498c1d63fa33c7d51f75f51915ae868b6136a9bd3ae047c8cca2d84a67d671831a0b37330e86ab9374d6b9f8f2952d6b5db987e3b8aaaeecbf14198a3d61839c2c11dda890c20fff12e102bdce1339acfdc61b4258497a0803fe19cba051ef7b8cf0a5aa8fe079715a02374f5470733b40c787655b72cda200bcd9cc06d5c728b0a26c7ecdcb8d71da4ad569710b95a1b8957cbfe92762696038fcb895bc2698f2c94736897ff6116e8e2de40e0fc3993c85f030d015fd90a9e73f862d886b5e2b97fcefca0d9dfc1a2bed239bdfdd9f4c5c70ebe7297f339475811ef0a5e315b10a53e85b86e62f438075b609384055207194131afc45e3cfe9adef88f425473a2dc6e2c5c31e7acde87c3331e4024a55430ec594d3814208173fbdc35721b02194f76c10fb40281e6f9b273614aa9550308f112d3caa43f18e127042c17022a91e06830278ee30141c0ab689f939c1faf11207825bd20e5ebc41a1445a00bb35c1a7a51ea662b1a8aa8dc070dc72facc3af0fa1b12df5759c11ffafca6c6413f2c217d5a5a72b693ca716092d9d53207ffa97e13fae708a3f7652d57dc954503e31720976283305b26dc8ee4696865b298668897d695c263cac621ca0552308f054458ae9f1e3fa1412cf47525239c8e6111e7a1ea4d20a024bef7f04a4fad5f4b796d76deb293bfe5bc458f175ac29fee533ff279e35656d5179338324edfac200b7b071b4162297c76e3f63f618c979229e8dd790fef12f8de1a5bb1bb159be1e58e497fca0778ee61009058966e98a6cd095f78e9229c9d6eeb2d32e95677d986052ab82168b497cac05184c159d56adcb6a192a77fb6cfc696bb7b0430d3bac3e5f7fb276a9eac8bbe161756c8c9502ca838de126c66d293753887bbcb6b6669c8716a03d9adddd7c948dd90666270bac56583bb0cad29391050d27ba47dee472ce9751efb5276bb3a98748bd4c1f82e7599d94e2777bc2bc1c5ad1dce4de62b4604a911ea9c33f79e0875a9e0a26e50bab3120ec4a251c3dadd80c7bef8fd8784d46a410c27eaa1659aec62aa763b3e0b0fc8df80061303a52cd6cd2a580db44cf64955ce05d9c5c0a9d69b7987ac4f6a033d7f805c8c9e959b5a37e79392d5da1da9aaccfdc30ab74d48151ad5b10fc6bb712ed7a65c979b0e06317c415c0ecc12027a2b87c97bf2e6eaafeedf3a94926d70f5ac7aacbfde914518755b5f615288069a4a06f21702cf5bc3121eb760d5ef3bcb3d328b4158ecabf3ab9f85dd1eb7276c8ac600104a2875f73fe6d7c495d9fc2a265b744b5b20289f51b2acf06e66ab2600af155584328c5ab54060d8f7d9b59c0bc875b6b1fa6d155cb1bf9988eb3f7aea0c5461b7c7412498f99531a9be193d5180144686551751512abf74b69bc870169974ef557644df9967671469223be74236d4d7180cad2c6f7507d3aea4750f446ad3ad447a8448d7737b176cec301338cab0f80462dc944943a902c1d4660bf67ce3db63385be04a60667537b35224d860b6c26b5dab46ed520a8505cedc53413a810b4426fe425305c3d478cbe4b565e1cdd62c9ab50e215546e39c8c0e9ea5955b41641004d0ee1b9c85c2dd8c000d17beebece782052c89f5c776331efca828b271742ccf7e1361bf65ae7547b0e5778b4b67520845e13ec4edb66704fc632d88da89faacf3c60c3af59b8beb6466558aab2625e7a3b595fe29f3a7e595c63300c627a2c27395da841e95072b56c31d6533fc32735a1dbd0c4ae95987abd3808b21f3b71952e3c622d26724e09257dd91c55a0c676f9354155027cf2f4be2c689c1b66328eb0ece62c953e301bfc848d4c5410101cae83d34e2eb3c3b5b22176b89398c02a2cc91c093b245793a4bc8996e4488ba7a2c82e0dcf93a576f37fd33f22f377edc60898445579a5b033109de7d3cf3170a20915b1a694417db27351b404d7a92d503d7ec8ef2ad4dbe5e909a45a46d4e689d6611700507f7eef7c4b3f0d918affe0521715f62062f7c69b7d78581668227af1b238dc2e5f96c40071c217b185894aefd199609640bbc28437dd650c0b77d9f4725c5bc7140e48daadc36194fc5c8427d7c2ea73523a3b093a1cee6d5f434d9b61675a2ebe44560ced11577213ad41878e1b594c4777c6f6be41815fbf576b53f18200043a95737db9c2c8ae178ef39b9993e6a8167ed61c39023aa34021e30768da52fbf550e68b6ab2a4540444afadd3dcf899c23e1d7067044e79b38781a0552968536189de5c5da24201112ed0cf950163348380708f10eb2cead3cb8dfffdbf9f0869268a486b6c1ac0c1f18cc78df8cfd5bda4b2e6858328b19466421b66a3fe745d71fb6d04b91ebf7d259f7fe61abc001f6921756f261f3d56d6ccb87adc75e72a42cdfbce638ce984db9985ec3941da33eb847869c7131e1928dbf0f56cfc121b9069c4b408e70604b162109982152b1c05c06132303381780e3ab0a9c310ca0d45e33345df3c5615f02362ca5c1bcf164d420a154bfc0d9bc4f75848d58bac63412092133b809101713759e6434caab6b2f61e37a09356fb461dc0862c1762902e4e27a8ef426a7bf642179503d5595b928408aa5b2fe6ef68f1a818cf23b109b7d26218258d4df7998cfca66c75eb821fd3eb2363b44b5ccd8cebaa576beaae4f93415610bb7102a14ca4d0cd2ce381511b94fdfa204f6ebedd533c3f3f21c2fd5910b673142657d498630d0fc031bdf0a7bd123f5295b370863d0cc5e97f157047e9455185dbfd12aea50fc9cfccf091dda3f1da58565fcdd8dc8a704bcc9bf3449eeb86f581145832309fb1791c750cfa31f650293971572e62951111bcd8d857c105a1bc0fa081c09da6b542cc8b240b7d59ac356bfd1a57f20d48000affa262f2ce16f9f5c76e4445baaca3bea76a7ba985c1d62a25cd5e42086b97c9fe084190263f20360a59cc3e045844921da45dc609f42633ca2a071785c3d88b43f57750832ce157b41e105ac499546717c1e0b8060c3302f48742948bdacb07a6d8bc7fea13653bbb71d7d6ead50646badb1543a8a4eec0714592e43e8b1badbf944358082ae6ad88e3f1047a8205824f4be732d4222a13476eb7d3ef9809c6e87be41ecca5bf6ae409927948cbc1c188274ee285d46123fae88f48e2d910d02d784b07cc7b9fbd3398202ac322212f38292ebed10d4b988203590aeb44ea07a4e3651631df494a8793efe01ba088ab6a25c973299877c4626bc91fecb0b2bf2e674f48bb8a449d1ff10762d979fa21197ec05b48b833dcd04d96525060aa36528b12a21a51b40e9424942dda98a22b493ab80315eb7b37a54cf0a2f8dd4056f1a4a81cd2fd537fb98747b81d005fc899dd86fb92d608b22598cdaf71bfb4ca3c7c010013d26ad1cce8762033cfac4455319a0e0c0c987f27547c1201c51fe663c932afc3fd476034a87ee2b9d5875a2a61d2dcd2d951d74505065b65383490a561b1fbfe791a1b41735fef7028770c78afb81dfc43a8aa18cc8f7df278438f9176188ca6264795975930b8047ce5c58c5e6dcb557f0dd169fa0cc36c7324522c4614879c9249e9c29337d24d8949c5715d0f34e4d1ddfcca3fe1c521449551de5cdbe8d03d154cee68d0be557a482ee4649b99aa53fcae3f24164bd0cb0a5deb9559bec7c889e2574f6fbfb7eafa8ba9b035b4ebcb59c44cb0505aff0fb1e0913ce4d83935453b8cbe9358ad970d969ea98bed4bddd0b2fa2ce79623b0d51136212d3506a0b14a10cf358fcf3d6e2f90315b2325941d61ef7f5017537d25fb8616d30152d577ae54833f547158f8b1fc19e3035fd95240277a95ca4903538c7e4c2168e2852714ee9821ff61dc89b6d1a848f4ac096c67b9bd5465cf56de2775d0c70b0c25cd81660af04d12e973254e00b3486cd1c7e146f66126d707b1981c3e29928ad168e317ae6f78e2af5677c7890dabd64b7ff19b086af7de41378308a6211e20afe67bc036a4815bf7df335659663cbee4b9dfc3f66d85ef0ef949aaf2abd450e8f4890e4cf986c2ad9796bf9205566325957118469e4d31f9e0a52000adbf2af488a8fb059fda6c718f8691508e7078ad2edf71373bdfa7f8605f0069cf219281df708fda478378886b28d9b488425dce9e2071803e14f7944317755b787a9a09242687803fb003dbe36b0fba4a474303bcde11e28f8bdf15337429c0d9527809fe50b527e6e358d992632d6ecb06f2a7f00926a55d0ae931af843c815258ac58d997f68f6adf228029111744fce89421ffed531eddb1b6e3ffeb025429003892bdf59279c0b59098e8830c5a25401beedfdafd9ded56dba7faf259c9e61862e9934eda3fd56272850d69303383b9dd8d6fded3e2f666518f42c484b393ebe8a46e3e9c4ee95dfe213c7a3e2d043a810214354db37d8077e460307824367caa3491411ccd2273ed01a34ca744bc7c0d15deffb3fa6bbdaacef9a9b85426da6057186ea8ba58f1ee3564d91d206fabc1262d4b7b464714f9a2d654ee5b115c3f40432d0cc84777ed209b8c543ebbb5db7aa038bba9a432e07f7630bb8b4f2975cdcb28018c5d28f79a110777019b105b96ba76bf93902576cd2b75d5615c8048f526064969c18cd974b2ac2622f8f7fc071966a5b30da063d2f1cc29de4f7278d79bb6f2edc2a3b1c1e41a920478798c600651f5b804d71783d973294b917f53b284ce907f5484eef8fc7148d089a71ffb57a508abdfd05894019c56efb8db18c808267798fc56ead7527f637d470771687b4307f85d9f44033434e41c386c08f0a413d407c236ec6902e983fd0f50af143945fe0e825bb26421e5a27c82375cac51025397eca9d4cf1912c261bc6f0f773134a3db0a2634143398306901c3a9297106701668a9652175849486c23d171e8580d3ac0c1f5487501689965a992f743756d63b9fec5cdd9b527b007dca5e74db59a290969358e6544a5f09e7fa09e97f19d3cf1edfedf53e1dfbd529aed3fb8487fa4311917d34a4ffd8c2b96305807312dc77000cc50f5a7a990d29f2831d5452eddfbb8420ce3733bedf2028a2c898fb7c2de76470443489d1648dc4b68fc852f1364c431a69e1a6176d48451d244424300b7432b5475da1a18f2ab0ba1433b3d1f4ffba3da6ae594227a5d8df3c98fbf0210fbc4746f2899085855e5b83afc872e2175d3be9ab46900dd738b2c5559447ebb644565e05b53e2903df991852cb3b4b5a39c125cf217b8af227c58c01a1be6933aa668d9665bf2cb19fde6c9f287291b937feea7e480a7da4735a533dfc16d4a8fecd8d65262fa96c354c8c89a7e19acaab616ced3a4d402e451f1b876cc40568e337cb79658ef2f8ec9b49435106a1736cbdc0d9771232c73db74b628ab7a0fb4eb708ff240092a8c9e03b62f1e82e5c6d62f871d4e44f511ad4630c203ebc2c86969498558327b3b0bf6c49943a95a97256d77f036eff1d3f8f1d2bc90e84a0560a4a11dfc71a4e5ad0bcfc38c0e90b1b3db0cf45c37ba8f971fcdb8641e2d0a135b33e3f3dda10d2913b7b51af725ef0e12425447c1ec1b669ded015eb411f8ba26bf65129fa026909d95e34463d5bb89e5ad6f68d3a9fa3f010a415ed0c374fc535fed0c588da3200af57c55229b91a7c15a8bf08120242dda4ff7367aa437e396cc4f559292b4a5249ff222f91ce24aad46b11540f2711f6301547b7411d7866030e7f9f2c9b553861559ca6457b9a855fef484ac836c164f347850565c31c39323f4acf4cbc9bd9fd5c6c318e22484fdc74b236a0cc0d86fc11c7a542063177000f321d74c3230bdb501ae74afb057a3d5a0c5660e66ac596320daf5f795aa296ea4cd3343c1398a4ddb50212ea5319872244e759b53bc6c50f6e096372205fb77322936a93843c25209f1bf461e87932fa2149d1545964418195651002711a47a578247088170aa2e54509429195ffa4fd51938a9507fa12b896947dfa1d46ec8cde082fbc4edae0196b095eb8a2cc80702d389d44b5a94f5ae3054264c906b166421015dceaeed5908c97073a6272100031a3345c9ba5c921b566710d13f2b0e74619ad4c25c7fba2ccac1054330ab8d24bc35313966106d3c7b970978e771b9d4a9e29fddf16c88f82f398e54fbee12f9c44fe4992b1130e20068753819016bee3967e2a288a1d04476c666853c611ed99b416f77e4e8c6065c72b402390dfce4ab8f8f8323f9f4a7e0d5112a427ed6749c51dfe6f2018b3c660821a629391769e04ac124466af0ec9031563e8ddce2598d839caff07fa9803ebba757d805d1576f9170626707dd272370cb389a894a62ac911535a419d9a5a7994fa47641a86f24d9101938d4258708803a4414158b9b44f22cece3226e0803d620009a2530bb215e0477993e0de1205b2550a881ab8408700309c2f903067f5881838cb057ff266178db75c37c5bd0c2610353e7dc59b584c4896fb100b03b387a63a7651f929310d66d5d40ed868d978017be8c4f63f8cce1a4863ca73abe5c7987141a36dd1da04eb7faa7b23ea12ce14ac5855aaf97386b2b8f8912b18b580681c90eac37d6291e0c9d9ccc75f88f0a6e3175b49c074c4c3dbe5a328266d3f475fd382c301be9f05f8ea9731c7c7c318c256aa786c8d278db665ee641b94659730204209711b1071c7c95c176293c74dcca12a792dd25844f2e95bfdf52e7eb2053878abdb6e8f20af8f9fd96c28d31bc5849b4a8d60c1e113a822356b0f7a58ada49b80bdce17564e5a107def853f1178041490056d7feaf550ff1819d81aff9a145d859e7383c2e58643c014fef687085553196fc4ece2577348a1a916159b25d391e4be3cc3a09c976901f78176d54461223d9803141d2e7a5743cc718d25ab6424161a5247e155f92920adcc8d9e48ce7ac410120e47e9315ee49045dfd78cb752ed97f6033eff395443b03ee6428efd54e91e9c1920bf3d912290487ec39a2fe8e7783dbf340b7f8ebea1217386fc5066099a0f8ac584eb454b366f361067e8de77ac3562196d29ec8613ff492d1dee0684fb03c332744de5feaa11e559a5dcdf2fe85d647d630cddb2874ad1f62b1831175b98a65d09ecd63b1afcb3d23b36594dbab3c4da07013b7694e79090247f746c640bed60ee393870506e027fe024e3042627e99b72ad102e118d572f5c35f403df1d93eaef880a1d1d8ac93a3c0e6f9c2cd0c23f29543e8dc1813fb4e8b2a25e675eddaddd81e2b223ef2706058ac8f2a53264fd77fb0bb26e3edc250a319fbb7db0d7ba6ada33114871a5f9979f01f671e50e762e3a3faf1fc1eaaca95c2d4fa4a05bfe78cc67fd22b01f60d4ce5f93e4bf792bed78bdf9d6b82c61904dd1a0c2bd04d1176e7a3cedba5a58f0843ad7bb91c19116601f8f1ec27fc8d082cbe9389799ded788f324b529b7b2641d923c86b9481cadee2076013891f5813dc708c1eb38804abc176cf4701e837de2345d1be14a1bb55ec33a224b4f5b48f98a9a7b1b5db5bb9045bbb169119ebb34a8eaccb0c60c44ab3b0aadb1444d621bc74d7147ad9a3207fad2f523d83e6445a5ea78c22dbea4d0d80a1c6888ff35e3b37cc14cf0714556586ce9f064ee3d59fe1adfa2ca1beb0f3f1a5823da02602546274474dd1068786d0fb45fb6d83c73e402c18bdf84f34d62f0b07743cb2ecf8a045573a31a0203688faaeb9cc13c30ed34be1062180a981c50e7730dbb10e11b6a7bf6852c2ebff2f03c2d3179349ed83d8d6819519bb8320e845b2122cb944401dcc8cade5af269e572cf89b1181f0032dcc679b8e3200d057e8c734ad48de8d1cc9e3be59b1d5e18e2144668d932f2b946e1ff66b614c46db2a8928cb0b0c2fb65b1c6dc8b52525ca4c12bcf4d579779ecf1949350094ed5c7886d205da17ee1a9d211c9e196c5e1fa2b0188032284c3ab78ff58c0bf42680de997475a1428ab401343fc946b83293acbb5895e22199fd152bdf92b58a1928b5e59cd59c72bb5506a82b5a1162f79165a0049da340840fb6536c85298bb781b602ce150b816af5cd36a72a204ee18f98b0f217de424da9fdd144c22ee00cce216c8195d75d41a272633e5eb951aba113e9d6f5354e6a04ed27e6280c2d6d8530997d286e870d6372a38ec216fb894727831650e7455a55e1c1d3aecd8955dc894ebf27c2b66d57f2abddcc70c04c874ab06a6f4e7723c75a374527721782bd36401f9cb9862433658a7554612ad910aadcb192168d15d064ea6ed1b350315b0b0b3156a868e8381c0a3a3d62aa02dac0acd143a66c590a2db3e0733236402f014222554619109d832071a79d468a8454d9287ccec52534dad00be4a47e3fc37b884d43cc8e8c598f5e9367f48c5c9ea1db469e8c81c9323ee559869493b0c614c5f8488d610796f554b076859799c5bd023cccd6bced7127297e66094976e3715c99b9889e22a607646850be11c817c6ab12c3c78ac848f11a00c47c4a865f50182068285fe176705f17c06a22228c06092164aaf57ab2715fbc8849b30d64cf66314c460c795400ca60dfaf8b2917b39a8bb5de8ad9a4bf6a37a9861b84265c822f12bc7de184540971df5f4f277710d4346eba316eec401033e9ee12395a0580101876e2d061416bf403c2447d2320adb521805d851116512f9ee598ef6f7bd908d268826617d11b811a0ca86383d4c5358a6ed3d7acc2ae0b8045748c69c8b622a6c0c003a829efdce98b9d0a0123333dd36f068e0af4231364efabc09a7b9e7691519eaa3b01a4340a98a979af4cbb0d15e9ac6ced1c380cc036b07488e181c452f26da75ddbc0c4785690449165655a7808fa72b319fa47d645d87cbe41676903620c993d4e68fa5315586d81692fb81f58d48d64a8204bdd528311f3f5ea9a8980883444b49c56788e6690a11816fda5465eddbbc53c40cbb4382dd7d6a2d2a3bfbfe69a5ad9af4f0632b924ca2ef6acf9baa2f073c86f23013509b0e2790bd1c3dc66a0acde12445650f6fcfab2b1dfeffbc00906ba34a2afa23ce35cc84f11446cfcdadcd28df9867ce50392fc11ad5beac2b1ca4aad7c95c5d2a1441ea0d3cbfe11ec8b55cc860118d36294052a88c2a27bc22f2cca705210173bd97e02ca0cee1bcc1bb346a2ce4edd08972d2e35cf7a9762815992f6482e33eb90610d339dc24147f60fd2572063be2cdaf2f2886d13d836c49445b208bd95a1870a5d029c5f09e4be5c52579c502b7edef8e0a3a22b501a8a0e3c1732e70ea46e52e123325bed566ef5291890e800218456c4bd666f2e075d1491ed7be95b8662c16da2ebd05d25e189c1c230a53510b10056ad0ebb6d61ed63891a91fb13a379475816100f049cf906626d1a0921603f326d9d9e8456a10ead6c6365bcf0fa4d1f5729bfea885c75208fde2ffc90bac762d0b6e551ac619fbb3924060368954225b2c205d6ee533c1469f446f5c39d214f90e87312735c8c56f2039fd7768efeb5ee1e1ab1897b0d76e9cbd604cbe2c5fbafd1198dbbf882ad1908a7ef7e4171028b80979380e714652abc18367b6461614c9de3bec20fea1f9f3b650740f1e6442c80cebb0dc4796e37719588eaf9cac1d522299e2017cc267f1291908c6b1b63751484d0eb19b59480dad880ae29a7355f55ec570fa50e4be8970683f13cbbb8a0ddabcf3ac9e122a0c0044378b8e8d31b6591cb172713c518a1e81781e8df1667a72861fa9cdd54f01ba06481d9cd141879812d5c5e2566c19f2246f3c3c0ee4a4adc2cfda71b6466811cf79b84dd28e57d28cdb5f82141525c440c6db103c1edf1862c50b4dcbfb3032db76a36dbf171718c0c9db924de2de56a048e98b7b7f850ad4aa3f82cb4d34f71f3d5d8aacd720bc70b8161c70b2a62523dc7b941a272b8acfd623a22bd95fe443e18f975ddd3da16a8c3f2b0d839de1fb4d249062d21798b3b10af9ea92604d4d83231a0e56c34221491899240d4d1aa5b93481fb8a8f57d2ad903de02357e78eb4e1d38cbbddaa5249f1963ba462598b56cdf4336b4348d5cac6fd13033f542a02fd057ea0dbb93433d4e762f14c35c5f80106c7bb66813dc54148acddd351768e4168f745ee5306e4e5b0db94463e2142fc0146b10c9e4e0276e7ead99b04ad6213964be00b5dd483a46023a1b17695e95bbddb2f08f820824c60e2f9b3681c88f9da193e30b75a4707541220c72e6cb2284e0ee83873180c5da625d97bb6db432594cd1e68737901cc692f303f36b11ffa3491f991a91501c088001730e00d97b620b7ace18bebe2ae756a1912ddc8ccaf86ba8958ff60c56884139d6fb3a841020b02d7f41eb7c722307c50b52e871e0c8c81ec6628fa0cf06180766a18d0fcc016c340c5a7ac68d47d67c81c7bdb34878670a93d2cf1c42e147299fbc015285be716b359e6398321db3b8e9b94caa26a85186a7b249b827325a6fe5ea2b1c60fef939e595eaed461df4565ef40f70cf3e60eeeef4073c4dffdc93737923c2132830a62ad579518ee23d86732c8a88c4775c88e5f9c0889816469a047cb65ab154cf4e7cc858c8189a1db22e8f3d3eb5886d2743043d6fe14f45125af908a65bf5ddabb8da8c47f0144200816ef7e22efdd5e4892a97c0911ff54f27cd82919be9955966663160d8972e54ca52fbcc3a4cba0ab2ab30b4ed8da652f245252928baa33148bd6f58c000bfbd5964903fab6572ed3ddf4bba70c7bc822b808692faf792fcc2dfaf7996a5f1dfb7087c41eb65a01a668a025136cd182f1223633f460e9fb9f04976529064454e62f249cac0868b5c369e86d91c2225f151d5a951c0b8166c3eedf0a345b9861dd332908d1b7e56e4aab02fbcc8fb29ae97f1fd631f899069e27bf11333573b5a15f937f79b8e59cc809cb194c75e7fafb15d22c090d106081192060c06fa8f460abf73d0960ab26c9df282e8676d39ca0d4863bf98750910a9c3f0da14f054ead33f300ed3d411fb258a73690c441ecf3f842ab731084b017404b98a5cbadd77c6a07b0a7d75e049d6420a808aee8941b62adbd272527d984a673e5f57118877cf38bf621abff4ef483df0dd4531f47f78e8ff8148717678f330c5813468ce8d256a73d242c6f0ab8685da010c9f911c211583f30da06190850bb27116f5e084a642a190e2883dcd95b1988393f8aaff311d18dea87380d1dfe6dee776341d5c550d0eef850c7022916cf0c9cde753635adf097015dd64176af92816caa1eb8bfb91f919401c5f34add76f899e37817540927f084974c89e47d13f6c4dfc1603618f22c86b297ff304d6b5665a387325dc5fa7b58d64fb7d96671294e012422a43cd664bca2f7c8ef3bf8c616780f3552e33f4d079984b8fdcd76196432916f6c16fe4619509606a1463f8b18844245fa8abb1fdfb3c36521f8caed27b43c51b0911e3f6b3d132b3536e5f675c6e6d8acb54d48af5b2b9ce620d4eec21d42e7c268cd11103d137fdf3f0f1952c93b3d3f20406b050e9db19ec01542eed0e273e1ee947352a568bc5f4a82b3a9e336dfba48d5682a18d049680d02d9c6e44737789542c5167045091f426175c3706808859f9bcc3fdfa2c02868b10712f50c5362688c107c3af3f633e062ae5d15ac1307cc550fdde4071233725e9b10dc2a72c3248adbe703c7efe8eb1b3cc5b3725896be608ac0326860fc34a33ef7d5bb63756926798156ab8d89b8f6c98226e8a5292b4fe3b6399fda61bd279336171aaeb7e90c3b6cc75b3dddeb2eb39a917bbaf08d7db8d18bdbe75fcdab5172c58bcf127647636fbcbaf42c0544c2aa0c2e736a732b27b02fdc12795f182ddc570772ca7f9ba2302257030fa8bbf12cf78ee60687ee0fafcaf0770f210c3ddeed76ad46a063ef7c719c53c72c6b0c7f8eaa41726fe1865224566bd7ef5b05be6832a88a8e775da067b310423ce6a7d5324ce9d95b5f4c0e822837118aa4c4eac43e8bb86a11a8a7e26ef2f36812eaa3c387081566d5a4afb6b42398517a810efaf3db934712ff3347dd6d6a5f50798b2c6b0725ad11ce3a7607581c260d970685c51e7d85d4512aa43c8096e81aed6936d11d092ab9b46235bfd6e57dd1616d4c37ae72ef116470cc0e9b9e177a42d5cf5c283954c167b1a403b40e21086dad0726e8e0f949e9949421b658dc0d325469b0b0430f4ea121eefff5a0b4fa230f3640a7258a00c18de5bf73f162ae3e9327fa6189cde946192cfb2e1f438e4b3e620c429ba5a15db2e05542024c786b6982d09e5114823d8e5555230988fd8ba7a49be396f3d6d4f7c5d2d1024a094009002f415cf46beb59637f1aa52c0ba89c899b21c94acac6bbe6d78fbad4ab4e5bfc3bdb7b15399cfc43a3e8631b05f7b1f55c4a1d79eeef611b44c4ec3a2bf541132eec798356c76e08ddb6be275e9f641f6c1089aebebf1f10cab8055536dac6302f380dad8206e56108e3f16912450c3d56e5228ca4cdeb9f3f63c77067ce48f8d12ca145db0b71a3dc37f58e454aee651e4cce1c14f57e98e44c4019f6833ac2a205a11f20e3a45a6d6a32f34fa7a2fb8cae7a577606b3eaab203388f76e3c186a6986bd55ddb8ccd9a6cf807b2d69ef91a00deb36b21ed6b00e05d8d89f6c1da2a280feddec1f216909d5c4d109a094515fa19ce6479036c381d13d198c20647566289d2f6c14505520cdd52fbc6276fbcbe44795f9fa63ab219b8dd2e6e16ea209753d30616920d0e85e032fd39eae30b15d6349216d3891774ac49d85d5aa61ffe4131fefede587d343c93ec9ffff1efe91a8067cc984560cb41d77edd153e301bc0d4bf70cdf4720edaad72772a09cec5df871d6ae924d8732820cfcf7c0a49253af05cf0f95e6bf4b675c55d96da68a5ecb232669d79a5eb51d36504de2b240233945169bc617314920eb8c348f14acdd30cceff5ec3479560e27184ac02bafce5675c30d22a4e072a8cacb657c224c6250ca2609b2d39d2dc56f100e4260a23699ac4da0d2d5f3a0d34bc6d3bbdf0df261e733df0f36f0f95180cc43ee26a53dc0ae79a9d851af58e1fb401e5a16343251adb480b35b2f7de72ef2d93942992068b060d062520d48c19f49480b41561cca04636454019bebcbcbcbcec9040e6f46d72ef231da6f7918efbd5d29aad36aa261cdda8317d89a3a4c928e47efbd65a1b817ab2f6010e623bbab09382d90d680051854f175748706cc1df68c792866c67be719d2cde37e18b511c0873e97a6b9046db2bf09bd64c1a466375b0866c7faec0af23166afebec10f973ad9aa70c5b743b90ca7c905f1291f01f37bb474d528f40c0dd19d5fdec81fe374cea9bab4f4d9dded339d65557573c9c2a5b2f84f3bcc653d4274d5559a48f61e7a55a56b9c48af4865dcd289e4e9b02d8820882022238144a6358820327dcfde43f51e7ac8d363ceea489c37b6cb7499c35d06c122ce39ae87eb91d58dab7141b49f591a3d64c8663fb420aec6097132df388edb36e7b0bfec67aae1bd31d890cb6037061b7296bd3095536efe66bbadab5b8dd5aedbaaca41520f2cece91cd37fcee7c6a0acae7ef722d2b58414712e2235b0a44139216781ae504848c448688492977518a98ccb7de9f580457445b3bc527973c9e00cb7215af392e99388602f799b1e73d6f7a1c75c667ed674aab426c55d95b33ed548c7f6326fcf5b7b5fd630afe7cb52672e1feebf15cbeb7119ea48c0ffc6127c0046eb089923ba5e4f4ca679c3a506721db36783c2cc1aabb300e800fccc6839996ea9a4f9ccb893d668cd28f7572a43677c6718b1dd33d5fbfab3a873fca05954466fa03bf44069d9a3d12a8dcadc55ddb66d9b5005aa41951681cf1baeb34e26e496753671f5ced3ceb800e79cb306b0041b57aac28e0a48d4b20072032161444903c5316016381cc303365c69b8a1db1ca95067d7df7149bf8bee7695c5cebd73ee6d76ebb66de3387777a7ab8de33877f7cdab0fe0b6a97e50395a43cb9d2cd2dce1520399c336ef70934a01b6124494903d69201f2c99621a680e812ad3a0caf4a7cd32744358a395e7efcc39c3d037c42783efc877e53bf22dc993003dc8e05bf25df9ae7c617c573ed91786ea883bea762488660fac28c15255aaf9b472f60be7a949e9d5127bd99655514add5fb6ca4c404db82415885338c72fabe8aaebbacedafa7ddf07823e466a2a9c35701192a4f593045125e3c5b66ca885aa1ab1e1b38e89ecc274525428c46aa44715f349a9496436048208495855e8e2e2e2f2f292840c3b1263825ebc1784e349a2c649cae8e5065212048746844a88d82435253c257c8f6acf28a9622899a2e48992599ef986159f55238f128209494c01730325196ac225a9440008e708ce21a4f8a820ab463254dcdd33b4f6cc971bc807b6f2692929ca14a6b4c56da0245e363750122deb2a1c8ee33862eca28509e18d1b376e986042ea67159e30d271c209231d3d43ff84d50a2689265e5b5c8026366edbb89bd709aac84ec00317561cb11384173e53862069c1132f72a346e46dfbe148deb69bade7063a22482eeff350a1d244d6c89cd3bdd66dce2df4eeee58772d6803c9c9f52c7697dddd36c2aa0acbeeee12c9e5964a77f71b96dddda6e9349293db79feb49cb8eed4715c8f45b5985236701f0c38d4765d52a54b1a954a24d33d9ddcbd72eed5870061c2b2bbfbc545a5f2dcab8deeb636cc40c51a6602669899062a4248727269707c43bb11bace9ee1544f82ead6afdb873ec4adb5afd43a769780e98d12463afadb842b37463afabb4d88210540081e1e1a8f151a8f9517ed05858787674e1e1e1e9e2aca2001210847ccccb6f56c3121262b6c6db1504896bad5adbe9c74203b98734e0cf0f0e0f57ad186cce99ad35513e36585f6a259995b8c6665ce2156683c56683c565eb417141e1e9e3979787878825e45e62cf1d086d086bc5ef01a32648827d9286947b1494a7e3b34394bf01df139e79c7352ef986ce96a9b930a0923e4aed4c57c474424dcf822b7a471d602aca53562ee27a1d4a22beaa22dead5d636aee67d60382295aee9d4824a750e5115dadbcf219943454444369cb5d99842b3060323c6a8c417115c441821b51929f180caadc52d6dcd7f684fb4ccf0a44db933973aa4c227ee678fcb4c99acbf70f9498d90cc198c588229468410b6cd2d264509e197c52dc396f5c2d6dac2a059145625531885511809e177e4fe4804b53d85c1a691588c541b71086b184c953b2c5f0020fc8e9c107aac860fa4266a8464b6c013c255b8c5c0960a5a3d45e7f8723f28533d1f19786188030018c180250002086b0e5de108209c630a36360cb8c981d682cc68470e413862667cdb625bac67a4d0ac56353b8eddf9208ef03b7267c22d862a9269cd48e8faa159b4d54a41a64f5b2420906a61ab35005b1bc04887a5626b310488a10975085b61099a656b61904cb7587f433917ec72a55a1edc4e278b4fa714d872437db607c151a40f52fc9486cbf551a875b9fe0b1ca02c179a1459509e529b79918788c892cb1ea3e3a814228272fd4984c7e9bfcf39fde7611dd49fb0b8bdf74d529c631fc43aa6b7dfe40d4d8d3f7c7ea0b048fff4e083df32fe306191c7e9c11729ce39899be9bf17734cffbd09f77f58dc30cec52e17f89eeb7b6b479b7187cbd40f471f245ab5342e53676cc26872bd51533b958eb000dd9d05d75bd8c100bf117296cf3663e8cabb9fbf83d6bce02cf19da6e75f3c66fc5e1cc387195bdec688fad328d6277d93aa51ac5ffa265f46b1fefd265d46b1bee99bec5193e2d824ccd8a48db1491548e3ac29a3f10effc4aaa77196d862e311fe31faf0411c86df37f98d9d945b76f539c2797909f48c9f60bed304a68c4ba067bcc33e3ad79d3f9de5e342932fdfab9cfa70f42f52179a3cb9d0e40b76b95afe7b17eac34e883b7ffe1429c601718747d84705aa669d09a0aff0c8f55caa7278e46eb91b81369c2311e7fb5afe7b8a511fcae08099373bc201bf1b7db88c113d74654333ca343de31f1eb9348bdf23fcd4f70867f4d4476a9c2d9c1d2e994dc401df8526412cd21ea52c342aa448b1c863f4e0e78c1ec43a3ef47528ce71b92ed3bdcb8fbefb91faf0bff1870ff73fc0ffbc971f7dcecb8fb08e8f7d1df05f70bb8cc539a377c13aa91fe12af200fffb1c108b95c33929dc58acff7d93a851ac1f7e932da35831ce09bb5ca67795de357af05df75da47785fffde89bf4f185f103b3356163176537c5b2a9e4c386aefc2ba6a12bf7ef70b8405a763a5a2ac346539144153680e27e6bc8e082684ca2ebe58096e07642615c9315d4c93d25d1e1da22e80e4b4216d4b8bc1003f6b3248d269ae8812b920393232bb0c119412c51060e4cf8c0a449115b0fcf00982ce935ac900981270a2a78d88274264a4c26457042e490050e358b1c82c494015a79c58ce15979c5c0c0b3f28a29da84c09303931818c3e487ec8f5279c7440726d400a3ede5baf36e6ef63d21d3e960154e3142f9cd893b9f046f32426d972a941a6d012ef17956a61771e76f5e91e715dde9e4d2520168c21bc299479293cb914172724df5bb5c71e9814c67ae9c11cdc9e8aa9fb40338e79c94765de7dd9ee9f0b66dd6a93b75ead4a991eb4fdde238ccba6c097086157a86be516badae5b5e17e6b671d8ba4ccf544a496aafc7e6bb9159cad857bd6fb85da6fb656080e2fc1b254dd8dd1968dd7295572b1c600628cb4381d219338d10b5c082608f2660bfc33a634ef71ed6f1be7bd01be9a85b3f4da492044d76e3d7833b9f8e1dc9d5086c7566b9a5ea37c8a54c9e363c2fcf91559abcceb1fd9c215dcd90aeeae42228db7028cf497bb471b5dad19cdc4684aee668da9a80db973850e8111325076e643be70e8ae04005c6c3f5b9201a645c2f075489db0941b9262b6694fb45e1830be5967199b85b0d0654825aa0f71bee7e0bbfe7b068b18e7dee77c81d7287ec3b03fac10ba02144548a78ad180421830a2ce4e196b606ad5aa3228b8c8a2c45b646051a3eace18d2fc4b5dd4833e496ab8d88088a1a78b216d0a023e282871ad09a2b3c3c99a145e1a1499420b4a11d5c429d156f46458d0a15b52c342a5c60c50a938976821026650724517c45250c4979113d19c9a4f020832427d5105114285c4014a549ad08eb0325f261c806e00cc807358018955a519c0c792b8a9335c25694d913cf66bca9ddd2a6d25a2b50cbf35fa0352e2aa05910a5cd6c90cbd9aa01cd8090cb29c4290e0f669e5fa9b8048d49a7b5c802041424101b0331c81b2e080d14244102e9825004b93d8775fa0b1ec8d0208158131c416eb829024a1c9986dcbb4c8fedbbdf38b187fdee2de6b6ef3077290262a6aa67aceb741545c21822815420c8ed77c8bfb1a208a0ff9e27bee58e0701fc7e70e783e097c4a5df80d601639041049e9178afb343daf74612d82f3b3cc107ff865a6b9f6787b498e77b106319fa67879339fc59bc837d1ecfb3f6bde6b16d9fc7c3d765fa79b0ca65727b0a5ecfe8b631b6d2f13f0081999bc39c915b36adfe4d77a5a1abfe76221faa0d64a7a4d0fd15ddb269f977c0dc6c9cc5a56aa3a1ab49473ab8b94da781078849314482a5794508172d122c5128aea89160a9a54431450c48c8ec881a099668153e3f2458a257347991608906bd6224589ab31e381123fbca12575f59e29a4bc4d4782d01348436e403318078617931e7dd8a0e88b4c8898174100e74d043fa882abcf4f71879aee0044a10916089ae710616122c512a84889160c90be203162969bc64f3d5021e594b1643f821c14f6bb5e83bcd595d6b09d1ffd210820fa6b4484ad46a91f4dbbf90ebb63a2bb2317ac2d4842f7e122e3f8fa8bfbc5914a3b220fa5e4b80164cd0488b4b4a448b9c75aa1519a345d2a7ad494ed2895e32fa12fa71590f0d72569394f6646f512c7428d37216350af529146e697914164b1eb4d402c1524f1bfa60098472a9dd70ac7aceb96abab2f1980aa9dc1ff331a0eb8e74d8c00571ae0bbaac146ded9d3b7966161499cde589ab00bb7db89efb41f7918ecdeab0ff853e5cfa3473303f3532b2f83d5ac13463ece83640aa8f07b76c2155053cacd16c13e0ccb5baedbe14a52abae5adf5dfda5a7f05647859dcfff65a2fad2972df572003ba059946b2ff34426b6e76384bf5fe2a98ea2584a2a54ab3d57def32de478da9d2095439eb557f6343a3badf75dfdfafa37d1d8d463b3d97693432f7cda9b3ef4293a553f7ae3badbdefb580b4eba8d396bfe3e9451edd7fefc3fbfbf4868656d2e0b8ec9bde1b7f98defb6eb4dfb57ccef72df6bfdf70cefd13d631fdedace92b7d1fb3c3070c35b46e5e4553c92a0d873ada7520edecef3cc7bdc53a249dfb5d47b98e36f7f67b9cbe7b8b7ff8e49cbefbd13dc751cb511375c16b774da51389cea736605e542e2d2898917b1b63c9becb087e6afc1e358ebe650c5b26e5e143715c2eefb977d92f8915e3745d77e2befb1cee3befb9a738a7f4dd7758c77e8924a53013405f39dd7358c7677b9d9bc37d09eb9070e3b8461f82ff796f5ddd739cfdc2ce03479cd31110d4a3d2029d9d105a535ad50e97b94334f9938da8578de1bf8ca9378d2e7f6af9c06b3a81bec3594d3aee5eb86b75ad39430d8fd02e7db0d26eb97a97f1ed02434318a0636973819ef11786dcda7b55aaffd5ca67e0defe1cc9b0bdc52e7058a49ff795d6c8907ad4bb5c3efc0d8b14e37cdefbdfc022fd97df21fdadf7a8073f07f5e073a8b7b0bb01f7ecfef386ecfd83ec2d3ca0591768191f65227fc12be2a23efcee99eebf6f79ebf2a7d7f13e75c23aa777f91efdcbf7a87ba6d215d5f1e1704ef82f58c725c43f5afef43a298cc2df7bdf7b9ff3795fcb098b15e398b02be63257e6bd706d0f59986987a3242138e7ee22bcbb8fe0a2c7b80d87f117d508a37d1146ef63469717c50a338af5a55fdcdd9d73779fb01903c1efe17def79ff03acee8dd7ddabfb0be76e006a6d3a08e57d2da602f48cff1cad30ca1c9e231944fa6fdfe55ddea772aced5ec7c5e21c2f852bb743fad46f19c57a1ac56a1ac57ab7b1b3bbbbbbbbbbfbcbce46c159d7e2d4c8fe9c1ab406c787b360a62c8625556bd5a638da8719bbb7317eaf1abd7f19c34f8de0b78ca4771947dfa3d4d864cbd8a40b0e57c411d552a0d5c6fb9dee73ec77dfdf9574503bf65a6b63f3ddd8f7be47f71ffe61faee3ddc75ffe3bec5623739feb8aacdae75cd8547d7bae6020f1c7b4f9da96402c1dc28bd97c358a4f8deeffedd21ede8f2dd987ad478615702fe383e3a47e72cd3fbf70eb2bb7d97cfb1ef7273ba4f611dd3774d8293f4449c6b7279df9dc6265da66ba91b7d8c308c35cc97fd4212acc36991b8800971fb6dcf34eda2b825571392e78f84d01aeaa01075f5dbdc3655cfcc39840fb9b1a882d33c9fa33927cb1d764a7035ae36a2a95cabf9e3ac7f9ba2f147f8720691f0313e8760be6cda387eff23f8248c367e84b1e545185d3e6654bd38a61e667cf9716cf2c7264910616c12b471d62c6ad1e6cc65bcb614f05dd2975e8b9e57744df7a5f79f4e9a757f7641a223ee411b9b9b30fc1e20f86108ce3983f91bbac49ccdd96462899ef139739827852da0be7f870f6795c0efa72098b9c26097eb7b1bef02bf45e5ac55187a6168037f2d7807b6711957bd8c30b88cbf8baf6c1d715a1e448d93ecc6dbdd325406d5323466861a9bc4f99ccc9fced150420741acb3438ea571ca4021b79c4dca5623fbfc79a203de380b7c7f9b1d3e6070d67def5ae94d5f36d1699ca48db39aa405d58486885aaa1d53983f3348080b6d8868ce6e6ce8aac341b5d3d1d310b25cb92aa4d6afb02eca7565033ecc987a1b63cbbf8ce2f6e17647717bd2f625eb024e98b36a80d1b84c5de1af3f61a7193399be07f827fcc33ef826fb20f83f4e75ab52ee86cbeb52809ea9069832b5003d53697aa6bab48db34cf6b71bb4a66014a00b8ce2025d6014100a08057c024201a3009f389d6105cf761260fe0a26145de59d39279299bb827d03f474baedeb57ac437bb8f222b7df2173ea67bf6231a7725f7f870cc79ee2cecfa1c137aacaf89519778e68373b82bc1d4a7d48942e86ba10caf351a037b4a6a3cc9a894b8302654d9ba7e9a957643cb97349b37216fdc6e5a5c97324e5ca6cd1b8ebb9258d57c5ad551454702bab98f3f5ef90e0189a44151ac80534b1878321fef19534d0cc3dd8608794fb6d8e2c66e194b7e746910553dede94b78fc1fbcdd2ec619185eded6f1f03f70de4029a2973630369a146fe8029cfa751408f05b7bf054a29dd4129a59401f486ae866cf1d5b7771cc3e665cd6efdfb8c2bc0924f4ab7c0d2351cf7b26bb45683b378f884955d84d333be054d76523b80b68cdcfeb0c9f5077dae7f3fcb925e695d809f13325d0e56528cdd0409ed4c46e868e0e245aaed0ecc62d1a1bcd9e7859f096c0d6d770f8c59565295b0b3e192aa70795a09496084a59054c5ab84341cc1ad127657eee40e6df866007acb5f9da3c371794fc5ad6eb887a5dffd0f0ffbd8daa3eb1f148b391d48399153c580d97f470e6595d03222bb4f29b77a515ea90fc1fdedef90db5b67898e451ef4ede7d0b758c7c75fc73ebd399e0e7d0f5bbb434eef4b140e2a53c36a4939dcb2ba72f5ea1cf057ae31baaa44463318f20e1fb54557f577b480e3c38b50b9eca08a83cad4e73618165c17f218ad19e55aeb1c5daed827c77b8a75ec7bd8a74442bfc734a3092c5ae40f2018c8d561ca10e40f2016b7dc8a0e88d4f722bf55ec3aae5630d73ae690916badb4d6da711b0e5a43a1c8b5aa209728e44a65dd16444dcbfd131b121a65c962cd00c977dba3eaded57f6fd407ced02ce2b6ba6d13c9b66ddb6b0a1179feb5538e44a9d7eba610414d0992cb0ba44ac2bb4105e0c68511e368610c7143e32cd2c83737501663e400ec1be5d52102b009e0db835e67a84f83cd5ecf8c3a58a8ad96d72c6c5c58471d9de92802dad1d1037c93c173c5b667744c91852dd7df72c5fd9956d88296b75cda5c9d0baebbfb6f68cc755f1cc7c5382373893cdf5f3d348b62712702e4464a522cce726befb675f7e6eededd3dc339b1e0d2eb6eea354cd66d2100eb4fb20882969185902af7cb0d94050e4058f820088d7283c32b2bb069825bca0d8405961c60219457b5bfd1a383ea5eeb8411426e6220e4c46cc88d173327a6f8010c2127b83882527da1e48b265f3ca1329dab0ac88933baaeeb848c0819719fd861c805e305068cca742eedc54286450b8c75a1849229178c22891b06fda004952f94b8329750a207575c526e2025d6a0462e971b6889902b8a96cc6c7005122788e40672c2954b4f28cfc7911ba809216f284f22a250b59205d9d86eb9acebc169d6d6f5498fb77fd8375c7fe88a56eb66b8eba1ab698121647f1cb23ffdce65d7d3f5acc0c590ecd2effa6dcbeea75b724b4a24fa23d132f397e89cc81c8a6cfe743d3d33b7d6d6da5a97e2aea7736cad9e995fb7d6e69aa53c7f9bd19a279435916c42684d033521cab38b09c97293e5b9422193d569cf9459ed87d6944de58b205a533618797ed955f22cdbca50112cb4a69c53a80e79fea44f5ab4662aa135f48926b97b1293cbae670a151472d9f58c41469786935c766ae4f9934bebe28aba165de5d28b881cf6a4a4344ae3645ccf841981dfde2e33a714e91cf575c52d88dc6a2e333f357399f95d8f57438da89a109117cdf9b63549f5738ac2a52dcaf3cbad95a77db5e0132eaf0997aa122eabec8796e72c28a8ab15cdf75af3c3a595e5697bf2fcae677e37237a05d921674d59edc77b61b135a1226735e9753d169796284fa13ced2c4f1ba3b8b4b03c5b2835ce18d0fc0accef802e053a07a5ee58548d915513e81cee1e841699525aab952916ffc64ba073d4ef40d32077803211c20193a8d5ca1b165738c6c8ab1c5a23d2a0404371688d6893828d38292eaf676f08456f0459bdea7e269835b0c8f5cf4f3a62b4c2ec2ab44cad9159446b26162d5dd1d0d4399cfe4cd1f344cc2835c55a8652bb2405fd53e427322d22539a2499f62c6a6e16d19a8d28d3dc84b22614187531198a11a14534ca6d356665e2cd286b84d6d02732752297d6884c9fbe329d4555dcf0935bca10b0e4721655d112cab3a873d858cf5007cc990a9ad54832fd6ebba4e56fa8a973acd0790655cf883c28d98267e6cf77564b9d2d9ffa14d6f91db2f4a09212657a7b6616d99835c1e096b3c85954084f60ad13a90a2eb080b5481a9801a8e48c174641ca14a21101002000001315003028140c870322b158240a6465980f14000d7996466c4e9d0b634110c3300aa220630c0080186200410419646888a8000060e4ee865e36e84328bdafb310cf0f0e7fef345a517db0e9ad63e42492a55eff50f919d68b5d8ac05658639be269ec0f7c49e0dc693710de2a1a6cc90d7c4e5c3ece09af63fb0029ef51433ac5240f164df1fe6591d8174adcb2b6663919e657e8147604fab5dfa803287a1328a58111d4c659ca1321acaa683e5b5088ed0886277469809c66b95a03bcba91ba26ba2de700b47dbff1665fb937dddc501ebf4ae58f5f26de11ffe89052f95d90af3277b26f87a2763f85b301954604e3cee2765f4670554fcfa2a3c71fbd84f6410fe0ae503273b49c1392a472d4b6c0fa7accab93821e3df8db5763528c2d7b61a19cfa8c08d6e5b1e860a07267a1d4a26ccc11d7504a7c2e16b3f191e1c571f3e807a4742f08a4e8007cd8a51bf309222498636fd12d4a5f05ca64819cb1e3d56920f232ca3fa043998065004bdfa42c9834fb229f72beb6eeb9d217cb79a40bc6d76024390bb27ed40d1b9359bb77da9f8ad399226ce3417066b3b0de404282e511676f67baebb026f967a532ebcbc7aab1a8b0b7ea79cbaafc9d1456125f5731a2a117bfd3cbc092037a2920a2890ab5d81b2d52a3a5f84250b57864e5b38f41653463287bc7905f3b2ab5737a684c0304e9325d6c660df39e42f025d6ba157f33988cee137c3552831e89b83def1b40b34f686784b3e680f09948cd865726a7c005d10f33bde1e9cf2c8d084d7ef68d23204ddb71c60ae250c0e0ffb521881abda380c312dfe5cbb816c23d3aa06056e9489e3447cc69f312249ce194c7a14676a6171b9da03db98d4c779710a64676cf18214fe1f841121c7bf8e4f8b12975f94c044ba7dabdc7564e486bb8d1292dcda72debd8ebb2bcb30e7db06305060eea66dbe47fc343ea917968fda6ba1c5d3f625fc09791a89f9eace42aaf1def802ba58dd5fc8acbb2e747c30a6d955dfa7831cc0c67cef05a93279e9f49647207b742b90edb4062351c9cfbdfdc64f8f1381df4641a299d68225b9c0011d991ddcd6422c1eea7d86bc530ba601cf8d662dc467dbead4c18fc3077351458a73ff4902359189066fb75a62bd20ca97530805ea43c2b548d38ff469326acab145d2b6870c181a310de203b2e1b9b61a37588d3179e11d3da17ef67bd2efc7da30aec797ebc8a0744bf8fa287e65894849399b97880109ee6247b06ee24037206d3aa489b4e91c697a0aa922bd16aa136e5008480a7c401696218d67dd7d7bc1f05a185cb9857b28a466860ee77f61b1e482b29db2e3e9f5f79d9cccb3596a54e1228ca30537f32a086b92507573f6a0f4ae83bf377d6ad1270db4167a73b18cab9da224838b01d967a87bad458d93b85a814409acb539120b877870330296d61ce7d29a555012acc99844665237c36c549f46e8586790a116da22ab405b855ea944fb68a1b4e4c2bd84439257b8283f3d4209f87607fdc579ee2ca8078ed3a532432cc246b33e68607a37983af90814ff9576091d041af90054556e2b77a428e4ab493c2c6f96b2f675274f8fa4bc42f41acf8b126a87a7615320ef9653497f041f7098e450705ed242141ce0afa68ac811d8ef6aa5d0b4f6cb595239b89321544b7dfb1db1ac7f5b45469b71ade004a5c6922cf1e7f59f3a3cd479866487ee33cd356723463849b9a709b1be2e0f5ad91659fb9df8e57d064922ce686ec13d4dda3c7905664616aceb11e93790a72799c40e9bf68dab854a9fc60fa1e30621f8c3d07ca3db0f166e0371bcb5096b33ef763288d17dc6fa5fbeaf3bce27452d5474f37ef7a370f76409f529a640c963c04c697a42803cf005f2c9546d5e4b8eee35a03ea3ffe4b946a1c4a9a80651970c88f93f0dd08f4210c04d1fd7c0ea9fd96e5dcd570f7ac72c97480c962842f8525f76c0a6cbf3bd2fc1421be38189420c2435bc0505f3b646bbef86203186b481107ee61612817cb91498f777e2b4ec18cc9926207bb06d93ec5a2e8f2250f4c0a231d7303ff1f67031f0ee4631fe653764f40d36da724a7f25d6a718638b82856637705e854cc98f6124f707ca7040d91b3010527e089397e9afeb6410f5dbd32b4ddb041af135a82aa29b260052986cb77f99003e3f3bd77b3b91c7ac3d3cba4f231defeb8a4a02db3347026a1090a875cc3c5688ec6551c8e308be31f858e3eea8bc1f37006f5ed4881bcee2e9aed029e6c6c79df1c78b3de39c853030e01e0535576b458c91b2e8ae6806c3ff9ffd2ca05f0d52e9d2b52f8e3c46be2b4203785b93d5d96a6c9dc052e623c2a443e509da634e81640664d88602b19df5654f42247fd2521ccda2fb40b58b6895186ad1a228854cbf6d3c739f7fc8dc91117c33d2032071dda6393b84e192f41d638e2ca1db4c222ce47c16751dc30f4c5ed07064f18300b7a9ec365478a34dac80c309eff1d122c92e5314eb029f373a7b8461441f1eeb4e069e4096cde3df7fea47cf65ea0a6e4d8649d8f3e80f4f7ed945a2487947a00286e141831beb631fbd658bd7ec2503c3a328229e9d0b3584c22207c05e1b39a6c3f0d5415cacac5f48fa991394e51146104a60d590faf9521d9dccd98e0df08b54d937804c68d8285e8b35c43a5c876d4d35a312bf08256a3671eaa9b23cb53476ec4e71523a91e1fdc0792e6055227c9f36ecb310cd85fec108bb6b6acbac9effa90f3c2a5d52881b183d468aaf5b1399c2e54fbc06fec02b407563fdf3250acc97155ab521ce6f463a023aa0592cf849b152a70e9ef2827a0165e3a56f0b1b2ffa8cbf9bd1e8e85d322b28662d4f81856d7d0046e1a089b9da2a318374ab48653397bb0ea160a3a6a1e3f0b0febf20bed3a6421354395fe49b0e07c12ff5dde4ce40d27c22651efffb83220c2a0ccf5cf4204b126eeb83381d8a07edfe836a33ddc8d41feb40f9779f6ce9441612884aa5fb3f50d3913e8d35f29b03655089ec04d6e5e669899343e90a5ec46cc55c0c5b0ebfdd9401f0e9367fe271ea00835d24d719fd7d339b06f1a5f602dbd8b318a4ec01c39f67cbf6687bdf014ec4bfac36b42050fec5b845d0d44d30d1d4789334d520c266491db325e92dacba8aa1e933b6e2e75780958e6f037c2ae2aa0f62b4b6855124ea00311b4da79b6121de5a25fad59dce8750dd599f24e5992063f8913578006b4075a1928206106983b3bad80f0d929e88b05d80626fb0ff76267553196e2ff217dfb4bdfca835611eb881bd510d00aa21cb634d1a8dade7722c26afbbe9193f1bb15cecd0f966fe6c9e840068780117c5e79c3f483dc080ede3b806da077afdc94fda7980ebb58e185d931bca97ce2c50368ffd2281088c379f8eb41c396078f6200aeca0fc327dca7d7503ef2344547aa89677da73b4ee450e10021c9fe0d2c1abdc681dc44c766c3be41da5876873529c8b93de95b28d589553abdb7406519f8a5a0e6b4e4adb00c954fc291cf866480ed6303ebd0209ed41632dae5aaf38207123c5aee9c4c7953c7082ef6c774dc7d4a46df2752221ae11e128a04c7de5d83065fba7a46235c8284d56dd3d0f2663f34598dad16fde58980a6855475da5aef76436f9955c633b7a191e3ded180f2613106534694703174b794033dcec332cdf00294897e74aed036f1e4d219ac26c8de44cbd8a42cc1f10617b8953f21ac5066b6b390d64f0099247ff20856dc5d0e36cd77dfcca8394b83b0b9a2c73085bd51253dc0a0616c2f4af07345f11a467e08c5975b80fcf69a3f1378db46e07439ed0c1b08506c687d8b40d69caa91ecbcb40296dd893e3720e95b069fd28839bf59488fa04e2ca9c0b8d1cde815845cc8530dd2a2bf17459433be3746d8d4dd02e3db0be33cabb571402de84a9c28d6a5f958dfafaea511133710d4f246c0bae906f02a2cc7680658689909e62e1c8718dd9e8b26288a0263142749307029700bc12ef54fe225f11d61eadcf11728c3706ae71e82c3b510a6fd9198903335807ed6ac5fef84d856820a11e756b4b5f6d7992999fc28ee87675866eac4355d29981f48052f676245cffddb8e4de8dfc0349ac6aa098f3766008b877cb920b0a7e0d05d3dbdb6777eca85c4263353689adb3ad1a9465867c777793fe889c5c4271604dc13375f1d1cf872aca7aacb53fa2c3edbe7b20fd9608d893df48d151d3298cadb43674271166cf6f53145b146167a7506fb47ed2cd3ad2d4ee76c4128b1c33ef501035dc041a8211ecfecd6e6d94774c938f63dd2b708a1c772879f666e168aaca7054944f9f62f96ca8a53aa0810bd87d4ef10150f19ecea062bd781bbc0ddafd61c280be9de38ee025ec23ca390f165762b0c56a3f951ef373d95904ebf232b158c497be708c63f23f04dc81855f693a9b273d359c640f8010cf2fc693c390cd325e1b7de6c0b2989cf4e846ffd2048679fb9681d3a8d98c28367388740efdc1e3e689eaf63b424d2a1d204b1191d0ee249bb7973466a1735c7a475cd864b05bb2f167f0468cd69e4ffe3785b9ee3e3ac7eda74c3d6db200d8d0001d888c44600abcf056e305de4ddb44f9dbbbc49761b57671d49c6dda9a508fc7bfd98233dd6e075bd13bf4be0f0ab3f698c1001a4ca3986940e12979ad01bb28b18bfcfaab23e465f5b067d4e27a2ef7c6b30e0dabe1f31018b40e355e2038a52f3dedf2779f2ae8fdb7ec0d10a675afdb649e96515118011d4ac294137038c74d9f54aab6f7d290455f27a368ad01f37d223cb26a584d2697a0f575272c3a97f0c024f24a0e754858aa8ea183aee247cc7f6e9c40a393f9060b29d6b61922966e8b78772066119c408abe12af854eb21e123a5798ca180008441517731969b71da6829c24c88aa0d46d02356e7b53fae29bf950bf149f65e939a3b4c1d39df8c74486105615b0bc32ce3ffe0445cc65ba6824373022c226f05238329766b3c29cc78d83b3f29f037e62bbeb59a032c3da0fe45de152953415518c428ecbd32fec021ef8aa8f155aba4c616476c9e38cf4232dba25bae68d55f31068ea9402001a770860cca292b36001955db4f396b87a8756dc875dec790ca2e4bcbaf9d7c6c342947fe9b049a2ab7928079001c9b164dce9751e98a59116465012ae3518ac4463e3ca32e195c034bce635975d1240cc2ad4a16a46e530da693aed0e7da340fabc5f49241e8197cc19fec3b21910c4425db62694ada2c51188184c97354521e486350496eaeb6b827c8180703de0bf9fadce3e0dcdef757250c37d736e1906500f236630fdf74110e66c2916542201bcec02c8e77c46007e018af4e708d242dd6c5f5b09c755497cf065e52b6e693d84f57f5b73c8859787f62838b071e6d87d426c4ff57e0c2198ac224422c21be0b5503db41ebdf0b0f35f3dd692c99a4b154522059c3da18a84eb46071eba989d5285f11ba3d901c1131d7e5f8956d52c66637809df23c8b74fc99d719c34bc92cfbc29a714dbdabad3ad0fde3c8048aecf9decb24d6e95f751d891cf59792cc7f7e5e9dd11081cd2dba59c53b8cdf28de9715f1bb7462dcc485bff2ea3f744905fbfc2ac3a5d0b7ae722c80e9df5ac984ff1a779761b0f2fc0e018316c92e5305d80092f75acf8d3e1c3f22053bf4fd4cb1f22b436ae3e2706097f69d5d4b0122cb0ca66fbdd1c7a9e91590d8bc422f60e9d2461597738314977b3a033ab43030544b1c58ece700ec0841310cd088144aed3a52a7f8bcacd6f011912c76bb4ec41d6370fd5d0a8c30a1971c2101e0e77c44fe476e9418943e2b887bc6cde7cdd525c8ae8c4e1a182474104a61ceed36a41c6ffe0e2143ee44b8c2a056d2c26bf944c3b0e84799a7f6bdf0672df0ac98847d845eebeaf32bbe867eb08f79a96163a042e493e6a769616448eec429ff194045412727727a56de603c4e5756a6e6307b5ee1a016940dcf432e2e13cdf99685032498d015dbf590333f40afcffbb577b7439e75f7dfde7a262c84af902511e9292c93ecd0920a5a3718e8f89f22e96000c6cd6957daccb75736b0dc62aea99ae7bcc33521d205aefcf909396a3deb26ad3ecf0f575239b4eaa645905c1cd5d531394b1a6d8b15164fd8c0413eec437dda190439be3f8871381fa1c5b4dd29fe4356c5951fb2e32b5f13b5e967a12b12c454f28a3ce74b7f68bf5b00ef0e77d3af2d99f22f30348b19f1aec960cc817cd9652d29bb65f5fa4813384a26232f2cebad001e4c4c6ecc60f29ae9a00014f174d7231618257372c06fc776e294d349cd3a0fbce3f6708d0fe0abd28d0b57d9a5d2d20cb233c52d79d4c309c7e6a82de829e4124bbcd931ded6ce4bf3fc6a2ee5654e164eca92b693a56386d47c286d4a3747ae4ef2672c712459ddd974f643acd3ef271f66a30d34871cb890c0bb01b7f53fb02c46023cdc83b397196243effbe99135c8bfd181f19358ef3d4b028ab15b61b5972e7d53538e3aa2c5b34511832d90ec484012cc98407a9f9c8415a8ec3eca10fd018b8cad7b2eec17b0f44e423e209152e2f8b491b67185fdbbe5dac5d648fa6347b0f2ca5deab6c0c983a666e0382b2a8305df92f091d78ca3fcc55ec3c223459b0331629c9f9e844d0fe46ae7bd5943b4df01d3667bb61c2eb488805394d37f4f0b2e309318b4883051932472a773fd4599c68f38d9d02209b1f159f6af00b331880624980c539221a3ccd1c9ca53c01945ca94a1b35e7c3cff102a65cb42456d62b070093bc6e3a32f1d564285464e6d0349e9805e84e784ce93d483e409bc9726c5ed01322a31dee912f391f1b24c9a62b3d38f4b14e78180f5c6e1e3aefab34abe9fd2094035a1e905053297502701fdf2691f3d01a07e0668a860c37a4989e094d7373e12901d1ecfce93f2f627279ea6393a394cbab172369e0e886f61b6c692120c0bb1471732c81c94631af19aa7047367b9a6de4a008baf291c4d046dab372596c477d68fa776c05ef965ea3ce9c7c6d57740c26ff5ac840f200be80633e3fd545edac9aa59aa93c9946cc18ab92581957a6f691aa81de9f8d81585c00a1eb22f3ab22f2e07b46f60d5e5c66dd2ee1f731f88b5e88dd5b7e35922e662ff411f7c81e53477d7295170fc8ed2af93093dbf3df80547a19ce3ec3e57472238758db33d7993688c52bb880a1f6e0436d0948facee724db1f96856eef1f1e43dbd8b90c9f697709fed5caaa1b73dc80563fb6a576a42cf10f62060b3e0e94aec787a8474c3ccc72bf114b700d66f5af4a6dc813cd66e4abefb1268b8d0440a1ea706fd022a29e81598af3ac1411ff1c68d04112820a4363ab33b7afc76881091580aaf69fc738a742a2588c4a2a9638c8bd4deab3b5176d73c60f35fdb1592a38279dac0152e8ec2e6f80df411e6e20ddd7472a44769bacc046f514aaaea8df7fe4dff465099763c76fe70b9d0b77004fd70492a8fa7839fb3b5a3b45d2a20d0b5882f2238da5443a3751c5b6d840716ffcbf160da9e92ccf493041fa03ef85b4d775d44b6722e638542b52273afbe9ff2848872462c2518429b9801c93b463d58546e82a3d627a654c208fa4d52d393f4e14def6ff609d85287879c2fa515425c061f619ca9a7a61e16866c865cb43e5c425907ba1fa5ffac82b7c3c2921e20106c5fee8bd92d5474c7208c84ea304a7e11b64a92996a81901c98aaa09344faf2687b6424e445c2c9490a2bfbc81443fb97a6d6b99457ef9f4a31499fd6e53320c941b235d8a919de39f6ba5d97aa031ac627e0c119e8715fa801b66dc1001b690176b26273456ec74ef5c271bd8b112cfba8ea93e8c74bcde147ceef9bb1ba8d0febd8975e61f865ea43cb5726e174c892d30af2e68c9600e38d037d102a357fbd29e75bcf157d2467f4251af40c5084e1a2e270652468c8ca4a64cdd7f8202b98a577937a9940bd22da4f051786513496b5e60c129a2221520d4da85c4211513b60e7af5fd65082daf2a3cd855b1502751881bbfc8da1be2ce49bdc440ec8ed69fb9217cb1841c46f85dbc41d7ee15e0aa7dbad1087bc0299e4a202f26f6ce3ae019a06c1e7b118f670dcf6e78a2fc5392b9c80e18666c4309ab0da7dc98b5a0390bee58c82d5b104544af80b6b68189d339e7ed33e2225835638b57ab27975e962e31e9d078a0c40cbdbb2b3d8848d5e9ddd9293ed51e9f29f472880fd481d4c3150b7a2355478c5cdd0f9f04b4054806f5eb679e6408d0988f19b9244ff4debed7697786af33e116c846b31774417f3bc293911938f54533a5a4c2a315929e52d4de5e2ae4c58cf0cdcb8e4ca0efab3f802051dce824d1566a82d7eeb5ef216340743833bee3e61c71211859d75bafe75400300d8a101a20b3c90b22d8106ebda8859294c5f2bef2bac857912d7b5a95771f17deb01c44de6076731279f1e2f597286eca4d1b4a38ab6568d65eb6c2f1eb6a969391eac7034e5f3067004252dd899492af6e1e20320cc80732f8ba9f4b7596e0828e934cefe374821654e80b7f0f34cfd11d5acaf87f2c2eed4b7de23f5bce53403ab06182485c9edf0a23343ae044bdbfca829e65f66999050d0b756c0a479682c5de0a68df6d775939b246dc071a2454ee8c26929e05646d9a5c0ef299bf92e97e99c4a9e8f210d323b069e0d38e90c551906671fc33b4d2fc2d1cdc749b02f0f160adfc18c82b23a251751fe4b0e9d26b9a82fce70941b03b897dab41d25968b0ae33c2ba967a9a4a24a4fa72a25f54b995b9fb889a6954ec5ae873e819b946cd7b55a3edf9fe91de679f24be1b1640c2f178ee216e998f05228792e8494287ee94ca5b9cdabeec3b92c6cd1d239cb59452796df94b9c3ab454da72b5595cc3423dcc966cf16b901eb2a1b788e91d5c00fec941f01149b2627bb7fd182971f70e37381e660b35c1acf0876536c91e303fd9bfa9ac22c4c599a4caa43432639f94668aa404f885e8d0cea6eab297b2175cb5b740a57d7e4eec99ad309cf9533dece6bddb22c43441cdc0699a23dcc0d4f454ef390a7043643ceae7277edd886cae716f58ae36cff6f653af32073dd60f81e83c339043fe1224670b038c0b65c7887922b0c5f8797f26981aeebf9e61a9800d705145c0f6935e13905e5bace87f7851efbf0815fabfb65dd420baccce804597cf05a84234e7532ae4c9508ade2eae21399304fa63f91ad00fa85589fcf4c450811e5e5ad11555a809492fb8328722864c5459907e2e1a8b001190d8c251c961c0bc50019cbd2e9015cf9b5124455b2d68a6716075e9f5e4384a8f448d6cb94862d2e6bec6c22ef22386962ca4cac45e06f828760e9176137a7da64127e152a3d031220eb4bfecd0b63680397ebf8b656996deb5d1b60f6f900f5b9eea7ce2bba617080d323bd35601e01aecef36849518317d3408e00569c349fa61e007631a7c25488db1ab08b7a6d1856f76c514e27d804e27f9109219032bb59d6cc288cf2410184de2a6d835a24a3ddd89c94347926cbd7a5f917e1b6c4e8c9662f8783b0d128bcfbf10075677d2887c6322f29c58514ae87a2dd45765bc8e536d1c723c30fbfa7f102055988a1fa7a022673274f1490f8e2738bd9aa716fbfd21cc734d207c829a166202dc6dbcf938841b28522db6665486839875301ee540368957fcc93c5cfffd8b840be9fa64ace009699423a656e7691d4c683bfb614018d304167406304bf6c8102888138805c397dfd053486d7e76740ac7daddf80989558a11cc0d4edb6e9f4e2f32c1b90147c582d0355034bceca6dd955c44fff6c6188edf866846df7cf0d08d9819fdc32f73ae261d480ef798afeeb0e1d247461a52468a0784f532cd35812ad9116ee1d6cc0d934a0046e06d45bd1a765e5a04ff8f87a065c2c220670e8e5f34d8e2aca7700791e1afcb76a0a9ca213bc91910ff10218b07ed7b796b5406a538dd0c588df5d0a660039c21752fd31694a990aed9791ab6e01c0cd1688a665720110c23e80811efb8d01b3bb0a0c8a3f6a32899d5a3b850716e8debe018e11bc6e01103d10a1aae5e17ea10d46c1e39686670bcf67882261d10a331b6e0283cd14ce966761e83f3405328c5e2d170ef204baf8250271ff69be9477244820238d748161a52eb086e9b3c4ba330325e8a2acc143c1e79e3f7c8071d18647a211040cb45c8e00bc2e3dd5c312b83687951b3a7a01882fba930901184f5695934c10ba9215dbf98155b52433ef34a50160b3d6de6b07fdb4aaf801a0f6777e0c38e02f9a39fb9a562402d321d2aaf10146bc376c878e9ba64686a0b11151c69dc381ff321b281bf0ce1b3eee1c3c555063522614fac28e5eaad3e6a861e7dd5599a6ed906865ee234b26c2d7f93591a5a62f98efad4dbd4fcf46dc973b8d80f967e2f9cd19bb76e8e4937643a71b7623e34c9afaf525f97f1cd250541a2aa922a2f09d17dbe83ce2b8316273ce2c43f400568663b5872a85caacb9da1f4a4c34b57c0fc7fa594f37e98aae55a07367bbc69d624c496ad7ffd7c4ad7208573e071d749d1e87836c409128c8c9485ee67f91450bdb4e1eadb69167f5b252708cf56ba4eebbf124a830850ad7f49aa3023718a3efafc37624b80f4b3b689b3eacd5cd5a4f20524004f77ead634d64d5eac472a54aba0259836aa65d10dc0ac54f9533cc3c865de58b495174cce70ef730cfef3fa54d0b01ec9fbc898ac6bc3477d687ea94a65960b7ffa301fa220401030e6f6fb5d3f05ddcf4e46f8cc7a94fd75b4c9b9dafc8c92b4506a42c566fee11cd40a85215076b6020e39e5f3a2d4e9f85e3135564d3d9216d33234e1708ba06df319b17e8959c0e3f6a8cb9f6fa4d0b6d1b6465fb2663e0f62af6684cb99275d52a73b64c2a8dce02b6889892ccfb09faeb451536a112cfbd7612c2fde0b6bf0a4960be641d1310778964d5d6342f907833ece0aeb43dcaafe89cfa8a6fd3014a0e4027df3761978ca6d41fe6f92543be4f2e213710ef8b28336faad04d180ae163e2cdae00ab56bd929a49d29358900f692defa6e47f38388414322ada949de3e69b1c7159bf7a1d45a17f2ee84a1714df4a9d8381cf6920709951c504a749af6a8448a48464e373b52ae7072e937eabe0208080e8db668a6d99b28991647348f541064b64171a46c743e696fe764e23d982a375c2fe2903b1c89a1360929e51a5d66d8e6f86995ec65d8eca62a84511058977261136959719adb7a8d8d0868d613d641d651ff63288ad23a561ed67f4a0e4f4060ef552b36f1d201aa35f5c29377f5cb2f409c28405b5e748af83c9d290c81e04fbc66aa327c4c84faab8fcc6aed18ae24f084ccd2f8332ca04ca3236d0fe729c8ad40b651beb2d66c6e95f06b7b48d48b7234328e3e9d404acd13114741a94653af2d02792eb7392a33a57516e2987693cf704ad628133ee6a34b74a54c931ad08b4891b5915094f6def0b91307bcec8889540c4873bf39654147dd6aec065efe1bda90e97d6e4c05e647c8867c849ae52a90ad3950ae7dc45c29959f401c2c739d6d0948c664a11eda68852d1e5842ab7130ff1c3c6224a583a4def676dc825f440b287c10dfb02bd72634651671a2426f3c8aefa47b4b297943ffc73846241d0cb66707adcba3c3ab88c61aeaa18574115555a72242dc1dcfd942d213724629010711177721690227b2dbd0f9903dd1469846ece60c7a63d7c61ee9464e88302edee37e5601f5f87c177a713d7fba04566dc1f8bbbd16b3f57ae219b70981ec459e9becab64c4f4a5aa9481b0e503201d1f250525cadcfd9273918e7f4466818a7fba3f071a1330736f4b58bd9796ab3fa4f86ad5e9ce8f71a38f5d4cb9408b8774b3153934318568fb1e2bd40f66e3b059d8f3a9158e6969b8ff746e56c685a962f532e342486b131cbb131064f15ae65d8400cd6d4bade71a6e0e95d8dc51b25abf6eb8bdb4621e1912560cac102de71045970bc0703514bc8f4a414491db207d4a35bed8046448d5c0fee46faa390455c28b53c610f7eb60e3e437320bb72d996b4b609694e1e3680343fd88afbc1c0ef50c7bf5609f6ae643f95d3a7746bd2210876bfca94fe8c9c6154906892b58bb27b76c7053550b483fa64b135449c1b5e00bf84720c9e0e5cbd65a197be7502e63294c49da03a81e49f0bdfba2c2d7b3acaee517e0b3fa4b4ac84a70a48c6dd241acc13664295e60668fa5ffccb65ccc4f12899a9bfebbf3746afbe4b027928433b2efefea15c1d83e3d4a0dcb7ac229975e8bfd46c173c2aacb07087d6c2fbe76ea88f4dbeef882acc8108d9e417f262d21f962b770c4a16c3e5172a4c2edb5af00e389314cfdc00646ef943aa816b120bda4d3701a623864281a23e605cbb0a1ba7fdea22ccec02af53c5394b3f6db7636fd760adaa415dac3b9528d5c9768e0ffc64ffbaa44485212ddca2ea24c8f08884cbbf49d953d1c582de0f8983f16fc80b59c9db44cc7e48741df4eabd5ee3f3ec68d0c72b44cfbeaa4314b8b0b122e6525e8bc309d55da264fa1e29b84567ea4fd5a52035ec87744b4a860639ca995f22e3bee926f0f5d28f464caed7a09d99b01ef1b73ddb92a3ec3adafaf9484ab2c461164ec1ad2222d965c37b554c03a1432ab71ac8a8c767f24b3fca628cb427e9ede37c6ac556b81423067f9b047806e1655e8617f203839f37a75b5d456de8b04fa746d08711f8bc920911e320f5f77d17dc4e4b50f2431a9ec6253969f70203b88fb1e407593396e6a8f0aee6763ea39ea0f6185dc11a4e1c49dc25acb43901cc7d7e9c877acb5c3a967b00f0e64fd8ccc221c82784fd19885faa25dabd8e46ca5b2612217b93cf666d2308d4a55dba47c49b986fe4e2fb9135ad5380a310e3f6f5d1bc904817e5cd1183111d9e8137474e08ac11d1e1e332455d85ff5e1498ccbe91b758616179af78b617a685c63c0a10a828be48a8ec15048ee75ddbf18e68d163c5e1cc6f206fd4376e463ed1c0599ab8f8090335d2baf0a91fbbf34a74fa299e7fb368f5a4aaef0197098ffb29c9290d2b3518b7a2beb4c0d8eb2f8190cec12f3b0dcc5df4f0a4f53b5d2090a04cc32141d2cc44a7c5391eb229a247885a86ddda07c0d558056112b17ae0d56cc982ed194ba6612524023be7cf3a04b85238b966d4e2674c221e7032b6f2da3a2579caca0755abc8a412627c67fbfbda5a274fcec39feba1a86ab8dad14590c3515b6e2636dac9f7db7dc77afa92715ac369abc2dfe9783e64a2613de1e40daf39218141692d36dd717b5c889a3d8ff7c99dd8374810dc9a5075f892f8389908b26a5821e87367a7f887422da85e12a2aacb0cd9d99968e012569fae969e7ac0ea489c86148bb44bc88a8a6c5c1c26df05ef6563a3ac82639e862f0c9f81497f2340c7fbacc89df0ba144288854b0a4465ba6ce8e1a5c4e0427e08e7dbd7fbae3a61253f7b1e591ed074b47110496b4284351611b779080c36696d8d8e3343d571ebfb47dd5ff32c1a21a13800ac53f241e08e6fd76f56df1ada4662144083e8f261dfa2df3e610ed6f266ca141f0db2a167f2d7f4e41a783a04b13ce927a5045280f0eba55508ca34159362a50c1519003c81f7db5eb1de70a9a8b5dfa3324b9744a804a00decdd7639d7cafd5c7b87fe11fab9fd1fd56e07ddff314e07f04895e47c1536a19d146bee5b895a003c2a8f644bf3e864e71383fa803393953628f265f146c6c351d7f12805d6d56956dbb50444de2c32e5c72592a80e4f31ab81df59ad05e6f3eba5d4199b05c5c37682b9f938be3d417f7b3a1f8b4c365dd97604d2c9309d0c1272383c9ef6e4be379031d4088d6aba11b8e96929fa7b442bb34a41f58821ab2b79ec1d48b69e2c97a49946106f17fb0c66053d2199e480e507bbfaead90eeb592b4a946dee59d274cf26dc263b7393c13a300507a4e9f258718098ffe7bced47696d7556df5d9a9a1c0500f40e161b74281e220b987faada1ecc802d7853c2bc4a06addae0f8dd704baac89f6af25d69dfcee9fa76716b3a409a062c30a3aa329fe60968728f1e491e62bea803f5193a450eed522e948cd222848c071161f71fabc8e83bec03d650be093967b9697ca2333854335e00458a9b857ee1fc5af71de8677d98cbdbaacd85ae45585a1f53ecc59b6ac4e6c7afd6ca4b64954ce331f7f0d1dfac465bf71d7c94df8d39177c605997672cf0c82dc9517d1ec08bdaa804314cda29792f6230913b335569bc12b0791a70d9d64112389ebabebb23282445cc966ca045b064a1720f50cc6e85ad4c2bd1d6add4c435bc9feffef563f91919e1272c191b0be807c43e908e0d2db150cbdf5664556ac82dec7119bfa814021556733b4858d88b0b242133d8db66c3c170444bf1ef8af507170156e43d42c2c7718bc635ce965dab4191e0e84f8a4751b9588105b96d64d317609af2952a8ed768db4de5ea205de733459acb47572712a18f2d9c394bda206f255b18d7607c10ee09327f80b01f205e3b15ae93cf967d51894042ea96e4bcb2ef273c7ca364d7fe7fa27ac285c84606849e17d28075f6e7aa3b148e6410a70021389b4f1b984367de98c6ee2489c191e596e87968596f6397e0ab068dedd4fe3f9c3736f6aed5e653d120800a6dc933805f7344e76808adfc3a86b5b3e0b96b4a737467fe11826da7517126f26474bff19bbe1ecc9f6cc4024e755c59cdd8a4e56a3921fc46b8b9d963c6b7e8c0cb4e41b62674102181e596159ccde92a8a1cd88e995be60cc9dc4204b77ed58b5edb92cef488751e063edc8fbb3262b205ee536a71656418c1eee943d0ae449479a400b092b8eb01b6b237e9dba3a51091aae357d5db602ff6c0f0924d69f661f976808373b2e7552363e9430a093202a726849f9a3d70b0cb481e09222d91c8cab47c9a6ade7dcc0c201bea395f3d4d288ad6c4e1b52e5137b47100562458f624f2c3a08c7a8f4cd3414b01fd8218a3e84d5f8c4850cc7ad199d162c33666c20e44196a4de80ff0e7ed1673b6fe225a05f1f658f04fd6d2fc25d780a0c5b95d88329e23bdb3f46115f2637b9dd20409274557af016a901d181a4f60c742194864e81c44d46ad1981317a466835f20cb08c7f49d433f28e6765fe080a88085ba4709cd17f07df6816bbbecf9029cc256fffd6103c4515dcda0514b44aa3fb4a9d008b117f1e1bd81ee39a7fb55e1633e03350dd5c06d9ef4a2528248a42d3ed552012e344fbe1ee70daaf6a423c7286df3fce1c51de9090fb34e15767da4b20978f87aa9ab5e234cc121bfda0dad9b7fadb3a1d458d58e832d78bc2fa3bac1e032af55ff1bdbd1d9cc5f44fad1d14000a4b770c632014814807f7d41f17f69a9149436a1d0d5cb82a87a1c2ec851223dde826e1a303ef785263b408ac3b68a29107968c93c5419ee626f3f9f7318220ea0dd3c0e28d12b4fbc8f4decda5136f3f894f7e1bc6c4dfa38a271d95aafdc7071eddff7809b2920a15bbf4eee2107d7388a83109848314c0ca26b56c44d0a03121622d59d7caa01a2bd58b03fc9841f88fcb80175bac1e1c21a0e4d32dca7e8f8c914cb812dfd8873150deaf0c7d7f289f7f46a617e43f7fa966c2a4309e6a080f124776ec0f2ecb2ec19c0b41d931c4ec4690c9f043fb6aa582e7ceb79a215adb40ca9915e954b2c254d7017851784b8dd902de409a922dab118a23fca687bd04053dc543718ee22d72ba0bb504f4d38e871ce166339d6d294c2068f825e3c8e9eac60d4751e5e26fafba2772cf364f88c01d86542d5c38cac71f9f13890088dfb9ecb9c2b4a02eee95b9602d8e828848c6c82bfdaf935848de3fead2877e3d57f4d73f654c0a6e5ad7435da9ea53a58c1083a4bb219da6528a758fe194e79d0d75a24ef795126cafbea8fec3d8ce5957e361f42b707c61e2f36345000515354692fb6f576eb58727186843eb9bfd447e4c19e4dcac977c898c5f440147f10db2bd4fbf657333e6d145464ac633ed8eeb168495f56c288acc717ce8232292683e470c43cf881157bcd85929c74678c9fc926aa347130327ecb00be56391c994f78a19808a1cc89eb5729a00b02369c9b4a27a2b91ab8006e64f3e5b789026fc5de48afcb128239c83b93cd137aa2130bd5c094512ff52e928c86dede92d904b9008258b40624f6feb28c04de8c28a9a25b54f1250110e3e4c6e854163164cc4197232f174cc5db6bf6a8a08ff268037e09bc88957d99f640d8493b6b09bd650bfd6e86716f1d0763a2b492b5eebe8898ef32667bd87397f6c3e694af968c6a9ffeb8e07c59d18dfd46e1a3b0cd82bb386f7d07fec497634ba01e823fbf0abb4dd2d9c626e02a87661b8435d2c73de96643f6b535373017225666b9f04ca2dbca22425256ba5db949362c0abf2dba9bc77488706d5c0b9443e5667ff41bb301988c07b6dc1f8f46bf51ff15d91155c45891c9c60c97018549ac717043ab025cb047ea371fa7f2840b7a3e9445faafc60cd5a069d49552acd1da3478ecb8f2dde26f94fcb42f16ea8a4409bca70213bb03b546370a2466d432525daf05324dab83d88149c0aa9110dd4a75c914d8824a1c555c230d783d0f5f8a95f1b7e5eaa3c08a64f492f3197e8ed29abbb2550ced7a65f49d282fab0010f862bb40e8065569ac2305162fa4cb439640a87c03c4025bc69588a943385dbd9cbd0566b9ef567245728a609582af095e292f68686870a77dd14da1eeab7442cbffcf7b6af5c0e88ec86b5ef5d15b64d5ce40686079bdd395752f736540eb39e3b796351af2093a5d96081b0dd098e58eb0f132021fa0a3289fcc31b0fde31793752be11c28733e8392c915be0ff5412e92a1e4f7d2a1007573fcc0182597edda0020f302aef64fcf36a0e718fa0fa06df107079be2da2f1995c83cc88de02c46dfec8d39c02320467856dd1acd5c72bec8d0649455198b6467009962c4b0f887dc914150dd1fce58090aacd3ba6e3d5a72b424f3d45f2b276cfa30fbdc1ca83c22460c5f68ba88959e207a121a4b90f4f56b7640ae74252392b0b3f22570f80375bb0d04d6181ea7096ce32c5c302b94c9147fa095488cc7bbb86abc572e8d2b1e8fca9766a018784f1479c5afd88e1e67a2eb0de5a4a79253081b0dbcf74eb97a9c6fd82ca2349b3f8468e744f84ae5ee33339b02d2b7b80e635d76b455619613833a421e370888ec8ee0c5e4e9eed7b2a44c7df312af036d87b74e378baaff55fa0d7a73919a6608b4876f420b368cb344ca7afaccd5e7f4e42f2acc881b30e0ae8565aff0564252f3679223046338ebee678a46d6ee0d5d2c420915105d9b001601fe04f57fb7476f24e3805b04d26e568d207ef3f29ce01c77bfe60523095533ae10a16252099f61216c1f1709755f857be67a13edd26554cd709d43b4b0d4efd165ba8289ae26ea6e0099a69e34b0eba2d311a05d5a1625a3aaa446aeffaabe153cfb7b83bccfb942b20cb024ddd88fcf238e1389395c25152ab7bb5cbba13b19fce695896bd8c63153abd8bbf8b09e2f11ee0cbcf44e8d4a5b4ffc4392e25d9059414973d980782a9fd0829df10e92ab388af9088c5ef211b6f5cc94e76d00b67f44984263ea012782e6ad14341ddb10cfb50e3959a8a3c18d99b0952230cbc3cf705bcf7444de705817b9ccb0b5ad93d71317d512f9b812a8a3708b8d25294cb6adc575d0254b2d35052f3e72b13b0d790bed526b15b37b1bb8c058430eae835c8e82b5803f9045a35f2b54270ca484b933f5bb6084645c850409d984aa373e425069285d56c2d8d6eda0151b63bc15add5a1a190d3e98b7144af5188aedb32298cc8a0797f0901132077c5057ad6401ca43232119a3f5fbbffd7c3e700fbfffc9dd323dceadd867a88afdfdf0277dbad830cdf7c8b1db0045a13174e889e1a728ce4035fffcda9beb826be2e1a8e0ce24fd1634c72a07dc205cf331dfccd8d7bd633bd27b9fac29c6abda43055cc627ed1c2bcd0f974fee6a4de253b67c3347c8ff975363c4699fbafae168fc35988eb70876bb8a47177886f9f8755ceda3699decb900526d07d590bc0717d403ea76efec8a7df7f4a79e22cb3a238f0e22d9329f384e0a632729df91d627bd8d065053485ab87e09fb140147db8a9d9f975c144b6c05123a903e5a84bf085c050cb3b127ea8b6b55a05185d2f1b7861094f53cfcdd6c7058725eab8e98abedfcb3fd3a32272a777ab4df67cfc3664a1e8cb6d562bfcbfc27595003e51a16a103718abc83ba0986f59d3e79414deab11a81850672da8f5640ed77f51a125e155ce5b3153ec29d70350e7a5d0815a73ba27ed23b540cdb2469e7e2407a63d1efcc159bc603427cc0b0161f629dc5bdaabea3be5d22d1a60688ad76b996d56d3ae4f22e6caf4005cf505773e4232f190ad1bc4f310703d8e78f563a1f75b8d56d7b91fc79b7d6b25c32f5af20951072b971d409242cb9a67990ebd82b7aec3652187b9c0c56b78deb42b4bd36bb4eff2d7e2c020ed39fe36546fbe5a607f2692664b972000d00641ec6dcb91379f64f1ca276e82b4b39c8691007fce8123ba64ce4fc2f2375b802bca1fd614801348f0399ed8719971fca139f8cc35071acac2a86c95b7eb71219bb06d5c9c3b134e0285cd20d617658c3eb300eec3534c8399db55e001e7ec026cd89daacbf9804c0aa52ffba7a312bc6b1c79094bbc2b92bbb8fa8b92ccad55792d1fbd8bd544177e370bc4f568fd4e3bb9638e8621b0014e35139de6e8d923b3ce010915054c0cb0a3f5c1c80278f9dba329e08510ffe12a47b1ec37342a6024560f04db45346c4254413080a12dc747d92e5c9728abe5b4df6b82b39f8962c1998a3b280768ce7416fddaea90e2de6abc2db81765db0771cb40fdd073989189d246c28e0a2d6b3600317a7282f8f13439113c07cdaf653e62f4324d4855bc7d38c28a3366389ae152ca3395839550f3519f882149ac0d69f1261d093c4929e47d028f887c632d79693bfb74558eb7a719aaff100a49d571c8e067576acc20c7a123116dd59c93f0b275a5c8be702e7299c26a10ed0675184659a0cbe888af465d947e3c036d1275d368a75d02487823d421ffa195ce0cb720799b2ad0eb11b8e4bbfb07bab623284b6ee8a3279f9b0bebfc345c280efae1a0015a53290ae9dcbe38610383302435c732c84a0f3dd16750d544d137f1c774520081d4d8c1a7894d589a6c2991e4a586e6a502f797e822318858c9ba467a260651fc3b9a9c3c71f3fae1f997a3ec02187abfc064c95539037259775e038121dadc65d1bf7d5f2d32497c93f632310eafb940612bc125dd3c03d36ca8520e4f12d4eaad649bb411c0ed793ecb185518246096619c6ae28d1ff074b4cbc1761af28c0d93b7ce5af17750feb3f986d30d3e8a6c2ddb0b56c86d70e6d6e2e8e15bf9e57368abc9459c9a6e70c2950711a35a607dd68653539d0e116592b04b57a1b2e32021286a6ef882476626a1c7598999336df798ce21c7ff24916611964553332353dbe84c6b7f3ba50c0a129b65a9e96f2fe0617f4066367d5d422bb7e57c56d71db1c0f437837fbe25e9a4d23665cb6797ac05d3a1da2d29b2fc4603594bb2a2c3dcd875696a7700db1270329007a7b30b2aacc9dc5ab125eee07d96833a87325a7084ec4c8232ba5fa398c0bb01df4c87f9032fc36950078333cc166e96b05116f28fe090f4d478c69a706a05bd50083c6649fc075c136004f8309539457f43cb89803f99b39093330a676d8f5ef6bad2a6bf08b1e79b644afe3ef483d16ad16e50541871f878575b45126bd675ea827544849825f6d3a5843fe95818839650b5e0ac4bc2c37f4329fcc34cfdc2137f845bcc5fd6d2106b0ebd286569a28f15fb07bbe95616885f90827ca58dc99720c527399088a6a12966febd8229f71d1c7baa45bf41936459a13bbc31d7bf0edb5238fb1f22bde85696f0c406b3bc7fa67eef4be9e10ca397a929c4d5cc8ceb56996d222eb7dabf8b47a4a50868d5b8fdb9790f9c946d0aa6968ef94147beb6a3dfd03ceef2c51396478799a48d76b41452be3efcc211c23f480feecd146cc4c4af933e23bbce5d2bc3d3fb9db2a06ad6a3278ce30017ae8b70d1baafccc9bdf7ffbdfe39fa60345704361680b6b528ff66bc81ca2244178db77f56c5e94763f6deeb5a2c1c7aa29695893e56ed0fecb65b5d00bf400bf695362a1f02f08f2e1ae29f9870a134196542233d690559199772b1b8c2d87da095302466754e72624655da402d4fd98b746cbf8eebcdc5d97fb33206ba2580357bf95ac78f58bf99746de3040455d303a28a295b59744a0eb9955ea09a06b11caa910ec1bee6a5474d5ba8fc57fba83b79c54ce1ce349d4382a5b73d3fd717b7b45347ad4ba3be17607355ed7fb1d21dc12a0a1fd1281f040d36de1ec8379fecf385d71048cdd21d00e5f92a95a46a60a57e7d5ec1633c7495ca8acfa6c1ddbe7dfc198cec96f1db9e65452f53fa23cc3a0f1662b21be87cc81af633022eb264d7d4d7bf04da4a811b617e7d8658c454e4f7987218b7b52e966bb220186cf7474ec58a7b234f89275a727bde27ccb007e15fb65419a3b4ba1da6a3a2b00fe86998831de6e4b52d450e04efa03834db32da3fa8071fda2f54e7f47815422c868740ec78036fe664d485839bcd8a0e1a3b203406eac3b6d8b5e4ab84f8e881b96b6b58ae2f5268453294449a4f175860105f57367162707f5faa1a19e847c3f4cbf31b1f4ad3f75390ac8596098f59b483ba0400aedf39d5a6f156045a54795a4325d431b30b32058368ee1fd75e9ad4ff612de6c075cc8f89916ba635373b170b7c70d7cf5756591a4c62cca6c975bc1fbfebff2f33ce8b170a1d9fc70615356d77e8be933be696db19b7643fd452e18a754c6584cd896c412442cd0e6e1251e907651a1564870358708179a1543441eba472acc6578c3214dacb380e68548e991c3160fc4520f9815d8e1499dc5cf883eb9bb825bad5cc237f4c65f9bb687bfe1ba80fe90e69b0059ad00525cd22319e7cc4d322cb1190e35d73ceaab568d8206a811522d705c6033e5a56a67095770a7b1528b8b9ff56d36513513e204fce067c4904b42622345d1230784a5bf937b5822c6e521ac04811b0760d8a5048163db2f890410a34f02889a224cda8230fa5687de0993e3f6f5f67cc0b7524173356eae25823be0c8c986df9bfeb7f910d5176ba3ae78c43a2290954d7314e8731e531e17c988bdd3834119e0814cebaa7cf9da28848b2e217d363f2d5538a0a0aa6533ecfa85a61018a82809b22ec0ca5b8b9366dbbc3fcf7fef688f01569af94ed57a118c05c7bc883b6faae5db37429cbeccbcbc754705c058e52360679b57408708d69b7312b85c629d0887d6251bf474225728de393f50b53c3a2acc772457e9e6204546504895bb85a09cfb3358093fbff1b8a0fbfbd06672acb06a969bd6ea2c3b6230f7298cdee36c8473617eedc753330df5d037f9a46de4d6dd61380860c38612f244c59034a74e27f5a20d03a4e07d9e72cd56b6f00cf1719c67fafd03fdaccac5ce9b9f022955c83e22bc5a052065372fce20572f7295aca74f30528d585295710a05c5a71dab51bbb30508b9dc1438e48ed5b5b1e2de09316d2f6eeb6e59652ca246507080c08ac07726ca4eff6228d7ac94bd644d24a80c67eb54f59bb1c270da9a75228e543c99a3ece25be5941ae71369951be9d851ee54d2e2d3d51e2062d46d47085aba3f8715e40ee74b27b7cb4afd05d7c7b6e5fc1e08b26908e88c11848747135966fd7d1c1d35e42efdc6f3741c936b126c963db5eafdef9e16126c25fcf01fadca4de91386bf95a1d8725b1d75aa5072638409f5b00d0071300f4a99f1379e488722745be62e4b17291c7caa5c953afc16151a77e83d6c07a40c0d7239896af473918f9ea39a04ffdebac01803e7496c15a1ee796dc39c95d11799c419c4c2e7d991990715d5200a0cfc59d12b94b22775df2c8fa7933f938c1ccdb5cba22831ffbf526db408de4ad95d5ca2c4e9610099dc183db992b3f4e9a12cffd38b9bc7539ce216b2d144ed8f7acc5d6fa969f30c488c1c4911166d07e9c312b36fc6482c3d2a1ad1e64664654847971a9b9daca8f3c4759fc6c65852c51e536454a139814288e84deda2c37ac38f1945af9e2e98c96c4d3d995199eba08a00f959284fecf71409fef39d99c59d1e14d260f00e8634a02436b9f6566a2f202aac19062b6a0a49f3228a2f8ce3b17419f6e67a4cec9b8190d3f4713e326738d1c4d368f921e630f411fecaff7dc411faf465b366663b523287f09f0d743007d6e2a8b3cd222d6ebf59ae1f67ab95af67a356cc26033335fab0300f4a9de501e1bc6e586d91808341ac7b6a45b106dd51993945edcd59a2c46238e1d0ce32c565851adca7e569aac664bea60b14e1c71914c064df9afa41b8671b20e08d3e80dd0c776d0cf1b6dd1225a74fb8e028416277923cea478ea36f00f49ace607aad994a72eab243df515e843b3b5d60661039b59838a2a3a3c751a728a1daa70c2c4cf155893a3b7404079ab7a6badb55c16da736014928aec29759b1328a5d4004f7b18d16507636a88811963b8e86c0818504aa98cd6803e9446043be2bcc531ea28e1adb54fdc70e5892a9e3833a526fbe1adebc899ec8ab73323276f9dcacbc7d66690c494328013b6a79e6fd375fc7803c75b1d4d40796b1d3781c55b2940bc85227b2ba5cbcc891fde3a8ac772b21e12c4984bc30536d63bf204fad8cac418253c75d00c13587c3ec4eedcf12a15267878ea26d08772676079bbc5e2d7124c04f0d6715016b9c68596e1646f8b9ebc68adb5d65a598b64d65af7c153b3151284172bae68c224091799cb56796bb9b7325ab652a8ec491e39d94f1f39d9d7c7f23ba8ac778a68e60a41987ec0dfd5c1ea3b9349ec3027738dd18b6720fa22225a8bee0f49c2f87410f052fc408e5093b01e63994389521bd028f228932e96a27a38e9eb7e40f7e6ecae2e56588ddd4e3025a71de4b18ee91d25ddba384cee8654a7f527857b3056d853af30daba4e935a68412625099d41bf06204b7dd55a6ba5b024f9fee82f7390479934676399a35d5a176190a1b5781267b4b23379c4388a093f3257270ab93d502462206105906b0e71c15190eb48893c9d01578600b57c137e64497347df2f5d642e193c2cf21be305cc2583ce1227c6b89c8034180972c930c21217499cbac81236970c2398a1450e50f9a341292e2b04cda149348ba66cd27aa8466f34673abdd1d72816555b4d924bf32591882aad56649313a8c2460a1b73c5154499b660e8925071c9407b70c94ec058f35686e212a673c264252529a5945617a59496114e973dc950ea9dca54ca1c93de30e79c6137dfc99cb3bbcd0899ee4df76c783fb97a833e28ecc6ba745957059dc8d5afd71076839428a5b2564ae991d726640a9b734ea20aa3739af1248eacb00a933b665257d82db244b6c8ca2ccdd62c120b15a9da6a12ae9676505216476bfb396f32e924ce4f1ce70be86727daa14a548b6c36095663377a81ae9501c16cccbeea529e968b276fad95d6eab9f6f52b97af48b8aae3b0688dd6b5165dbcd12cd0c98ac70a10f0b1c24f9e37b26545968dd4923cf27c095dbdbd56f472b645ca8f9236db02f43c7ac81ded0d018aa35bd2d518f09eb6210c06b8b96430c0cd256505a6cb1ae0e6f2fa6b1102cda25848da2d8a27774c97b556295d4e17e6192f2efdf87da829b29c69497a20cf76b76d293ea012ccd75946480e3a2c79d284195e90b142a50c2453e0c0071c8af0c288511450064800a183289808b1850c033d78c1033188e8c288a12921dca0f8c148081eae4479c2878a21be4889b2830db670e249152f4f645298210323039795d285d11163a890b962c9132eda44141d118a482d5f1ca103c2cb99162c5a644fba0a55ed8b9a294a4dcd11382f326d75743aad2af879e76479f801aa8d7c9ff1790c8cfa71dadc6d94cb9de813ae65f240975882d33df1e5b3cee969b3d96c586c59af6c6d9be15f0eb87c2bf6b475d3f6c598ef39c677b36a974e9abc09a6734e906b6c3623bc0fd356d75169fbf22d7320552ae5ceac21fe130a05fa0875dccf89ba1928b429d491aa0a290d37c11ef8679d603aa7dd66da96689c3ed0fb4c5f873feedaaf7eb427019a6b1a2f9ec419a7572553ea2710599039a89699d774386591a94b0f747777cfd9ad842771a44fcf4e80823da4b7f8437abb7756be4fafa008e47be9ee7d2efd1381fc9033bce931fdf3e9df7c5377bd2afe905ebd7edfd86eea7aa8a947e71c4af013c7cfbb2f1cdb4d1390fe79a84ab348817cff7d61fb0c83bc04f27d532c7d02ed52fc118ef8e4d33def0b6b58c3eb5f387e2e066909fa5c20dffff01c86f7dcf47ddf57144a1ceb7f0efa491c3f0743afee85f239ff1e6a0a7fb800c38723168104f976212e5020f447bbfc06bdbfa9628f5efd28bd3d086c6fe685e051f164de8f675425cb0fa0c8e3f7939ba07956f258e341e11d7933af0a151ab7dea9623e7586c5bec3aa522dfde839151ec9de7fa150cabd5028bb098799e674d8bd77faf07ba7af0bb9f752df299c32477b0ec130bcff8542598886a6a6c6aba9b1b1017df24fb33abfbe1d44c1f4d5bf2379ec8a50b8f155ec8a6ccceaaf76a0b7e1f0b5959a3aafe7e9c689ebc2ef6dd888f237a84fea77047289be8a38839d83f0e4d1d191112d94f64ad6ae731ce5385aab915c6b4134870acde7386e16a9d4729672d472f58653e6e02cb53373dc9c7395c5b974b75ab74465d74d93694e30aa4ee534cc397b5335e704a3f27c84543e555305825ce526a59372dc893b512ee7232e953ae254aa23ee84ca299085c5f33e2fdf906fc847e41b22a3b1a629a14894c48069db78e3c7899d7207f61c4a570def4b305998c86377eb6e32c7926e994c484ce4ede6d5909bdd4faec62c8fdd472473fefd645368939a657974ceb028936cc5eec64d1885297db759b72e8ce674774d60ec766137e813a9385e229338f69922a5ef89391a76402959d7e14e0a8f0e6bbc34eb27a5fcfd642a82b10a2ea1d44a750a0681b13c054c9e72bb8bf314b923d63b4bbaf5cdbadba575b74beb6e97d6dd2eadbb5d5a77bbb4baa2ad2f8b73617901f3297567b274379ab3d4ac9626d3f4bcbea1e75025de2c1fc8dd2ccd6a3f49916f786960ec4b1ebb9badb61d8cc91d125cf209a59c4a69ad9452ca4953f5d2c0582aa4de89c2b80e7fa594f3c9711c061d60f354fc6442d9b9d06b4cd1147695742b7b83d6de0eaffcbf21199c2285511818036d2894722e258214f4a1368719a75257a5c23434a04f957eaa65697d864068ed293581530463606cb66e964beb6edd4da95beace74089e505925cb49e2f927e5f4da2465ed2ceebe3ed649b9ee7b392b25ae14942ce95da977b7c4ff81dd909a5c435327a5b6d63ae2ff6ae85fe71429a5f50e31e7ac01f2d3698d6d4abf4e6bafac586cb5f951f3b6294de9e8e8d469ed95b72ed1a9f36b2a722746882e5fbac8f4e5ac8bad4cb62f675db04022f7cb59172bb6d8e09b7599e97469d225c80cc7554e2f56ea082f675e62af7a39eb22c619aff7505fefa4a0fe8ffa6f029a337d8985241f48b547ca2a05840091840916435868b0048cab8a645ec7cc8fab323fb2c8fcc873fb51d2c6fc289174f061c8600726808055f123660ad714f3530b143370c2444c1246b0b8669921c64ce105141964814307ca7802840d30a002065db8a6f7d0d607683618111912e6ca520b66831c7ec420838c1eb884bc82e802c49632648210c3358d9218a2881522c638c3355f5f97c0984b34107dd445e92749adb55625392bb52c7b6098a9c2cccc4c11313341cc20333898a1214b19317e28b3c50c53060b0e659cf85ae6499922ca0cfd983d892eb097b31b047d142f675ca8f8dc3bb5bdd270fb7a3484c9d7f185d7ebf541563f3fb9c3f908529f60a5f539af55bc54fc41bd5f3e6731528b3fa837addf223ea2c1f628c0ef02eaa78f74c8cb31bbd973ced9f38727716a95722e99a059b36577777777ad554a1d5887470766e1156e56feb1596c379d31603ab0246018a6030303669239d665cb1c5b4d29983247c5b71b0c608d03ac8dc06eee9688c3b7db4d8e215bb38d60980e0c095867f23e0e7fe2844d1d984e73b9dd603758d77080ac796b49ed7f5ce542fbb40b4d2a12dc9e371cbfd4f694960ba7d214c194abdbed881bce371d33301d9815308b6d88ff86adb5d6a26eb81945834d9d7a10565548694c29a851baa16eb8d5a6c1813707d05eb8cca8fce426b83cf1248b7bc3f95c3825ab4ea7f6da79045dade89c938ab0ca852771c6dbb3b94b59beca3d6b73d2185c92b62c97ce69f782c16425ef29da5aad4029588cbe680e7dd11715df6ee0695771ca1cb62ded6a6b9de17d45f13c5b454a3c832c43684a453a3b4aa56c9f2fd4220c32b864986d9f504a7de89e469c8c93c91d36d641384f59e3c1787eb6f750d30b174881250c97f4d450ee2a5ec8134a47494cb9c248d119ae9193c930705012c495a22d9a58eaf2d3392f72472501eb7fac68cdf5154656b36e385a11088b9371df121b4473f8680e5fce8f1f8d7db16ffc680df43d7e311f6a5094b062062aaeb8c6ef063f7e434451bea24f0a199245c6996f4fccb777fbf696be3d2ff415d4ded0f7e81185f1a357f4011cc6203d31059629495ca327e3f2a3471bbd1ae71a3d2e653c1eca784b3c249e926f2fc6c94c4bdecb03fa7693cc44fb1e4db51f4d4824d8f28407443cd112c519d768b251f1a329c974332959615ac20a931453135314ffd154f4ed72fa685af23d9ac60e8c1f3b32a68831450d3730628a6b34bda6f8d1046482995ca3498951678551e7a5cb42eb9c497bd1560668c00512338c8870628a8b8b1f3b20f9c594328e8c20a9c5b6708d1d6c013f76b11a8c3059d2840aa32c8c5c631724c58fdd5047d4f25c631785093298382346e91b2fd91846b27de7a0a31ff1d0f788693fe2a26f1a9220224c1733687103d78865345cc35ca0601ea0e02518c98863b46809bf30100da97de46e9c52136e89269c14aec9b76caea8c6c5828692460ef6cd2911e25a21c4f572b37c73f9beb09befebcb8f77bcb11080c981468416497af0c135de2df78fd83e62ad18abf46d971a669160b68625ed8c96c8841f6dd1370e5b72a0ddc21c1d91836bb4322d6f6bdf960b189607307e5ad99d2d50571ad2f75218325cc088d125e61aabcd06ed556989bac41252c65a24ab4d64354aad06d5a191de927ea44b15a888f623d48a79e4a753a42c3099b402c3412888063b64e183ab29d008b06c099a8d7165a90717d28f548a1d284d49c20623a6c8e21a6950961fe950104fa3b8d064906931bdf482ad93869a56e3f2ed01a81005f3c12f72901f4f8e6f76d429ace158f3584c228ff8cbd3746fcdaf6ef40eca3d24eff997737607c8cf62769c1d7b1665b3b2634fb9c9857ce7a7700cf2a75498c3113f2a448542fe147e35cc113cefc2b1be077aa6d00694aec39d0e2a4ce3c6ce02c779ddd6f33afc44301c63f8c0aff33813d761ee867652279ec4a151268ff9ebe75956301c02fae9fb44d0e509f4ae0345d0bfd02482df0782f587d65a85789ea471abf2adb55dad5d574353ad353471fe85d6711e25adcc30c64bb007ea29189ec4f982f02c2d006609911791a29c9fd52ad7b04a701d387275a35bdef43c51c708f24a4a3bf278eab6b6f034db175ea453c87a70851d52f32ad7e44c74957081d804aea9f982c48fd96b95f9fd4d22c48f0d41dc7bef65a2d41db16670466caea8464cb4d841015f66c0f1ccbe08f1a344925ebeac74befc707106c7b810f343f4533319b935ed6a733a697be15997389e0d0ccdb5cdaacc36c62908073de02fdf9893821568914573a6eb85061d40f3a6772104d9531f57507b2097a8c3af97910f427dbe0453583d15678823a994330b9b9c14051bef02009a7565e334abdee0b75e834514095a1db2cb9bebf27152302d98ccef65b3ba66dd9b050661b1f4d918b07715c0de893dad835b410362be3a0bd5be6a15484b5d9b5541c68ff32543bae1c789a4729767c4e131ea2861c92b3d113ced8ec3d271a3bd3a0d15362573f53debd6d84b9fe0a5d7efa5e2d8e28fbed42f92f8a39dfe0f3ae79cee5b30f901fa5942e3c55dc9ed1e05bcfda68725e3cccb191962be002f67644c79fc95512b83e8bdfa51d05a8ffb6e589d9380fc2a01891dfb687f7a953be4db093ae07abdedf5b329e0e0fc4d8ffef614846014f2dc04aeb738f68feb37c4798943eb0d72c795d5ab879ddf10e3bc0da5dfd0e435e4385136eb43a1bd86b68228b44fefa1b57a0daf7352e2fc94df0ef9c7f466e2732a95c480f1c2a57ae7d2baa4317ac4052f717c73337fee81de37daa22f7a03c3cf84fd74fabc7ea74fb4a6137ed1210a864ae401461aa3ff852ec8f0fa93289b75c242de270a65939bbccba89849a44037a46e439b77ec1c379b8504c7ab593f14c886b616267bcd7f6168fe7653bd4c56bf30f9bf3021eabf305f18dc9de8eb84e5f6d5dd7b67e2afeebd33bbd684f1defc6678afbf19d2dc008595d84b28a0e0e2677843c5117ee7bdfacd301b51e38977813eb7ba7283f7ec37877e1e15a1fd1483f4bbc03d0aea0c553fbcc77d33fca0bc87bf19aaa6bcd77d1dde5c97506091e2e67acd5bf74cdf0c4ddfc57bded7e195e089ba515867cda2418165cc7bf49332e4471c5f75dcc60fd9bf7e4af209136bc9f3b1776e02176e37b0ca6e19190255568d28205b95cacca95e652b2a8e758ad414c78ae5abac5599cc51fd96917934ab76617e9dd0acea5dfda6bbca6a1297af5e69bd63f3d5ebcde656b3f48e9c8559aa5e6c49605497b57ad359e710753289c0093c6e5ab2181a827493250015a1ae219ccb090a5eb2d7eba5046888cb08dcbaf803baeeb92ccb5d361cb3a4d566f2bb54e7b7c4f56b43ee902c29f295bfd58876d393d074d3751b8228d4787a6bd69d224da239d77bfa5e0fa2ad0a4473aed720a019d65825228a62132325290b51510da98c267eac60fe3ae66cd20da8c6a898de91669c792aa3b01aa3ade9d72bd0b5d7e7fdeb262b79ac3a7f475989f2f7c81cd7a1647c1dd73a98c4ee61dab6a2c0c8729603a5c7feb9772fe8539b55c1ea85f2c1b00253e415441f9607047ae78763efe9f0f33ccf037d3e8fe3fcc38ea9d8392a8401e52b184eee3427c332288ede8d0a7dba5161c680f2e9b51383d4c7cee5d04351129cc0153fdc2c2a6dd6074fe28c1cd1d70f5c5a6c396bad7318a7ec9743f6caf27464af5cb558fae0e6894b9eb1096b16972467e751bdd274a43c3bed9c1377ce596e7233e4dc762cef07e7f73ae728afa7a77523e5d9ad3806a9af72eb9e2aecb94a64954aec69569da08fd00d97a0bd096198ae9b1b5aad7a4a9a55633fa7a23c813823f9a666af37bcc200e0d5278db642f0eab3465bee1504af3e6172870db9837efd4edfc93fe7e99d1a9aea36ae721baaacca5a6b63e32a557e950d8dd0056923f6f034ab7a0dc843be1583d4a7710ca640e3128c00aa26ac4f13dea4d0fd4079e7f225a8420d07c125a8c2ca5d340108e10b34a78630d8701f307ce02bd09ccae383659567af1e8278a302fd0000e28d0aed203808620c36bc5de449ed9067cab19432a54356dd1071e7d854289b95c5ca790f45e1091b270ff92664d11c9e127aaa53328ffdea34abba8e6655b7117e10e63005f5b1f88313c5ff70c8236b15ae684ef51a213744e690c823eb89683a15840b44a65dad6e44f976a74184b3c4a46bd018587e94b2d352133fca2cb6d21916367cf7085f08c85d57bcd12b9b87d222579922929bb6adf40a244fc3648518caf302e24769eb88665750f9518ad9d99924ccc774069e87fa7eea740f05fa9c94f2fc7eb2bd5ce3efa7a7f1f77d3fdfcf17e9d58cef486ee7bca789fcf3bc88bb50de9d32cdf9f50e86f927bf9a95945f9476455d91bd17969534ab73578431f78161fe6994884abab3ff0b855262574473ba93d2adecd57f5e28319dd3a8a4ae089554d43b548a75a5a547297dbb0974c08d47dd9ae58395445b2b3ca2923eb426542e22ca4a3ac39af5d3399e985f3ee41195f4ed28a5def13c0925a6774ede8e0af4f31afce6a90a016e4125f89d68cc0c4df16a915aa4c807525a04ac454ea85b4d30c1845a1146274bc4122182ca7312c99688254224a5ba1c4d021290800e7736adf672b8bb1c673a728f983c8a8598e2d522552efdbc5e209016922ae0a3a681159040c0820d9c4373c85a8c532a1c6cb5a249761b502467d047e8a654754aad5594b7014552aa7b748fe8a85434358de38e83c5a2a1a9b19935456e03563535a08fd0b5a1214b90abbc456c6adc20e7ec23be876611b2c5d92614a48a442bcd5e0e83dfe74d1808024da01914034d44e4e93d3d876cfed4053101114a247f552659ae023e34b00212083c90055b0a5471b3680e4d1acc5645aa4873a882e13ab0073e55a43954a7d4a2f6da846c555a956fee76431519e290b826dd32cd3aa7dd8b173060c48851e2b85b154d32ee46ab5938309c8db34180070d4de56c30dbcf1c9a4373680ed125a31c76ce2673e884a19e2fd316e7728b8a2473dab190add9a467fdf2433c26504847c7c68606a7863b0e168b060d9b9ad58d1a5f0dd04788e36cdf5e039c40aede0715a977a40d4cb738b14a29e26edfcedd38a56e552f9dd35e913c50914ee0ad46155556af1d33999452da80397390ac5be7f4c0bc67948901bd8082e68d4c1423414668364660b75a91a4226700905760b2ea56cb2a2d98c8a82d3d8c99a2c41827fdc398a031311d0cf160556da6944e1e5a6bad32164fad20155d27a5945249e935d13cdc3b18b766f7ec49c39c1945ff01fec1117aea95d22492b600bde0881a7c20b20319f8d07d45190678fa01863829922426071bb0b8a8184f29c579481ef34f11828ea0bd5cd359627e68bec9607bb9b07300e608c7711c10cd9138076118a9a245910eb07d390b63a85ac1f37236b764d5cb1952991f735e9d104690f597b32b801023c510b3fbe95c45dce564ba930e6b7e4e9a9f33bc991ddecc9b7fd6f8f9b3db6777f8fd54fd9ce14dbda91d9a7e566f259983ba1832c7cf4a97e899a7367ea89f92bcba9247296bd1251e94de9a25449edfcf399950b6689999439d1ee1a9343cf5f100b48ca73ee6d05b46bec1ad68bd292df58e4d50abe675a648868432a9afa75e7bf650bf71429655efcc9d768e0b8f62e9558e12e959a02debf48618e3205bbf3ef2f0d4c23ce5c2e829751dcdf2d067f50a9156d000b5794a553610c05e2ad19e3a4aa03a75061eee9d11638ee67cd80a50bf942450d902cd912e8dbe1a7d95b2ff5169ad754e29c338e7d5ca6be5a954f6834a115ee2c81c1207aebb9ec933d5708b746660bff8cebef7de7befbd62cf5fc798e37ccee084beae8d2377985c7a0b40a3ac89f072b6c61a718a2798d204e0877140770ab4cb1367ac07d3e83ba7f2c45f379add9f0fcac3a3a3c362b9d73a69f478ca5faf9a44d9610e47b358449707a61bf2eca794d220f5855ed633cd917e437dfe4d0fd45347bd100b2ca55e671735139436496891dee60858e48e29d23232c775393dfbe726c753ac3199a306d731ce79b52a4afa228ed2684495781241b0464a1c7116474c03258ed986d23a71a41c05235baf0dd4409f5323b95379a811e96d954fe26dc45103d3c836ab1ab1c6b224e1bc72a41b156cbcc66bc4186adcc6a5eb4acf268c81061ba7e130d0106f54888186d7b874c160e33444d0878d68130ab9c14f6f32cfa1393487e6d01c7a616969696969e99a38495bad705e3977fb7be96da9be2a508c849ad74bef165c4fea9d58d0753a749d125da745a7a61182f51eeade7b2fc618877154c30fab9fce611dcc62de4fbf787a9e5bae30fd747bab82044bc5d3005abe9f4ecbc84e3fbda57718764b333f3ddff849650bd1e38cb13802613d2762517ac9f3ad58c53153b1c5d15518cf13cdbbe13726fd7a361d42f6500ff510924cdde4d5a91572a71e91acead52452dbe53a1c9408c4f8cbd95bad28d0572432e73d49e0446a9b23d420775c917221738815088c4c1b89629cf36ae55e97266dd2266dd2262d36633336632de02ee315e7d7e22ee315e79707672c8e79e56f451a486c49b7a5faaa4044425cd5a98c521aad4e6bf361b73f321e6b9240c51e720431050264e925e8c05183f3893da4cca997c71d23af381666d1568f66d19674e97cb78c87ccd12f34abef5296358937b917bcfe50681e1f28804a489934bfa7afdb09abc193389e242105d8ab24985eba8e9c24b44f125ae43147b8537c80cc715d87b63e47b994bd68cef5156d9d441e34e73a88f197b3b75a99dc59e20b60949c4abfa09c58a3c8d65712f4d1794f5fcfcdbaee7dc95d88c1165cef09ebb636242921722b82a486e8c3381491bd0477166de53c9df822e88bd8b7abbf08faaea02d539f37d5a528c55aa9b8441354d711c80aa5f4627e4a2f3f6d5c7cd064ad041e1c3a3c3f71dcc32390d5b7cb0fc84ac8b7d3309c4e670ba1d376e1258be95e2fbcbc3cf37206a6c9e3b1851f3b0782735249f00499037d3ae7ba4ebe87c7204d030719e5d57bda0bd28f12511ee451e28872202b946314cebd83fdeb567561714cb9970a73e8e1aeebdc33d9b00105f4c9273005af334308c885720764f5284f759d7ba76f8211e0ce38e38c336f128568fc040a01b98b469461e57282bd4114b0e70ba69042d94fa184bc07fa60d143614f851344c13e76947daf7eb25b2ac719a71cc8ea33e893123dfba1c2ce730e53f74ba14214b0a70a7f544eb0dbc87e720f047d4edfe974ca620b3f6607b2fa93f7f419292f673c80fdc8faeb3a2f6765d8fe2d98c50af6b828c7e129bcc13e6fb0285df8288ff8fb50e1fc8cf27ceab06c56179e18a8044dd65641eb14d108000000000315002028140a0845e270381c1a527569ee14000c769048785e3894c6b324c7511432c800438801801002848c8c10cda80601df3be325309f2ddb6b88bdeec01b3f60ea06ed7a67a3386ef3f2d6d30ef7388aade56c37d19340d1517dde2d80b079439b0526b0363893fb1e47e6a932b47b4d86c4d26207b6bbd7541c00a0df5e9100734af8eb504acfeca5354eb1ad2caf0650e26e17e2d7171d53e37fe85fe86ba1770b7a24945e80a8dcfba7e00220ddcd8a0a9ca6c2be87527b666fab227fc2fa2138188da6739c8efa5531ab63ec16b66372727734c01e8e780fd6d15c15849ec650622400b2d22d8824d26eedc0f3520700512ba6bb88cdc773df75c8a7ac0b841720f4fbad74dce075690d0e7dd50f23b44d73a87a10ba2ed82c1902a5b5458435ba94cda6fe151a413427a418949662d6e9c67b115c1a11a19e67e50713ba565a1f12b8bc94c9eaf44e058742246e077392f0c0cb0c40810206eed355388d03a97949dbaddf6d62e52545e850eb66d96deaf6fb3b44346a660a70c6ea0b55295aef24007ee0c15ff330995979372e327b7b9e39ecb5d636702d6bb6d236598b80b935bf02d6759c3deaa271ee260bb25e10f7dcbdc02ccf87f4a41a942f56c187c4f7912a996e6023f56e0b9554bff9f6bf4a784390e8609a94622ad75014240eb07b3983d302c27f840afc3c32193c52418e128afd6391e8bb2f3fa5ae4ca340b7ab6f03c7f0797614d21021308e59a2a0e47b6a8b84ef12c081483020e15074ae79d77bd0f64d343d7ea2a4d7f48618252863f145b4569097432d05b6d91ae3cc0ee6cf513f7c6fe0112ce707730fd2904f4127019d3e3d33daa48c1e8ebbf89b4f977d322994e15a80426874bb845a8b849ee08efee1f01de7fcec3e2cc9cdfd1076225528ee67b41d6b1bfb934ef123eb8a841888c8112a1c5fc7d8e56fc92a3de8196bc7fa74c288ccb28fe3d72290ba363209810ea54726c5970f2b1417f13a44f2d574c00e402641cd7086f11bc309ab1ef067fcb1a43dfc72f6f79e065746f2731c05a14189c17163b676416be30cee8b611cdc07449dd4723551187370d568e75700661e0d5b5fc7df22b3a6a59e73402ca5dbd6476d9676a381e98117f882efba5b98a45478df10b5f246bac02505e0c34d0402a56154ee8309c03f399220fb237565d41144baa2d88753f4bae61e9ac68cc6742a82bff292a70516003e24c7e1910c83f34132f34b741ee53780a7e3acfe09428a6fb4cf589bf94f2fa1139ceead14399dbce7724a8a58b4849020610eabdc4600d45c84df036b063f4530622c64b425bd110b3d231490b09174c2d5d3975cbba52378764216ec0b301d9d4d3c8bd35bc212d29a6dc03d3316519fc1b8b040eecc72cdffd0b854b8f5df28c19e697e80f84a9ee0ee94be93b6e00d530f1e3b5a64618913e42da29fc10e6404d3cf81485c752085fceddf8f122b083286bdf54d0cc0bb313a27c2405384ef8a10079a5e2950e39cc65f505376dc90f885106260e57d52882ec7ffae0a2288678e4c1134e5d9edf06f7036b016e0bcf4464044d16ef9d6a022d886d900638ec97140e427a8daadc4df42809cdadcc527abd8f87418ad3142cb5b8b4e7859f60d683ba9eeddc7f55c980c334a89234281fcae51b3aa1878c526e9745830bed1edc123e6ed3d920040c21dd77ae8f9459908c0d38b29534e7562d4e5ca24b591dd7242eb495e5da66ee801636ea5131aa7fc69488e4dedfd8d5b1d83da85040469d2333aa360c0d5fd6d98233369e723a617aa126a1127c9e8a850581a5c180b7ee091be08992753fa374018d680f22186b25d7c365225f090088a954c319b3020782840cd60d2fb4bf0004dc128aba4e3d4c04b5b1c904ca9a44e295afa1a0ec5562557002cfd17389b004c81db02c1428dad809f31db05a88f384c507758d971154d80ad7f0fb4147265d182b279f9b7f98de91a540f14b4994e48a7652d3ad79e573ce94fe8e5b371fb6545a7127c976a8e193b1b0b7d26deccd6b142c35145eb86c3b61c385858d604a3369b6085f503e31c3f1623f39d428cf11eec941baebf0c923e1382fa8c4f6df2909360c1ceacc0a289c1951f17bd3fdb35e19f19bb722fa1be946e97f3f2d0311c0f960f18b29fc7216f4cb4ed89c02f9002fa6b202e193efd298d974713470808c8c9eb05985f62800730163493b60a9daa3fc1a67699ac1aa0aec75636bd9c18794893ea9640ef21545846d92bb5b1b3cf5462b23eeba5bf2bac049c1161460cf58ea53ae2ea79b8e86034f561a86c36ea4588f96d798c183980c174bfa936bd6a2038600c651bfc9f902e3de45889f49445f2529688e116c4e26a6e6a66ed62cb1edaeaf61433c13f0fb11a626f3c562f67cc35e4040c37a538280013e92f4a617ac3819bb0b8024d4d4c19447641895242a07b1a1075c1bda72ef8d2bea2d69d5a18da0e254f0de8ed82046f1675261bc9411d4f8142ea54cfb5f64feaebe53fde8315491f680c3c9f6cf3a1f042cf96846bbb5335fa031292545bd864e169f61026a0bbe7e78a3a575ffe0fe1cbc8d0ffe4f4bbd51f1e2429406f9f2b32e96f0e43e6dcd207c95fa2f6e63f67b7f812d10a1082884d36d4e1b1cd4158fdd8cd30cfab915b6cb685d0fbc2c209cbb4d6cf09a349e1237eac86bbee77c0b10fba58ecd9769fbb2e21e727fc7791bc041ed27ccc526f31a79ca86871259c70d75543acbff10a29ed4e7b9787dd8c0236b617b3635e6120c1b33b43388af54c3119745e3379c88debb575463c177750b8f1af6245b96625a745c814d179cceba69b443f3a0915fc2929db6702c1eb2f55f71ca3f5a0c362173dd20b293ae26ba0b6846d3aa2809041136c8090667c84dabf8d3baf3fcebd7c5f99e1b74c06a4900076321bf1b12ccceff5578ae9b65dbe8d3b6f054f9d1e9c70a76eca7b98dc7e191a1ec46e04b9cc797c2747914202a7c346fa8a70e5d3d79e10d9f2d8c4a5cb6a2c341779c4ce911d23d12cb87db2017924672d93aef2593c239e46468aed992fd0f4d53c6f4d65c678a1b1eaf4849b0dc7b5659df364a5b9e0ba56686d8a82a351fe1b258e55bf5fa6c14cdac166f06acdb29f0b537d2b8c7643bc6b72260026717d68b45f78bf50b1b071cc5961e1948cb9e24473a36d2466b3df0424daac9e603caa8a421a12b3a3112b0f4b7be6ce50ec705ad66a53e29adf9717439430d2881555ce921ad37e12fc2e478412f12f5929dbde2d58b9a2d1bbce59b1f2a0c7c992741508caf71872750551963aacb4623272d213f67f35862289ecd4088f29e89536a8344de05c45a0be4d7c9c7814d27007728fb99897b26ffe320b134a8d6b9077b8510b16faa3eb94e6bbcb011e270414bf6325223eeb53c76951ec635d79acf124b22c1a026eaf1161b17db0932518a099b1c2d1301f17d59d9d5a1dee2fd6cd81be224bec2220cefdf09f7a2c0103d48363b1d2438cb2d9d9d321032ff47401a6e55eea6044386964007208fc83edbfbc39591bec349bce40b33e921277d64882729433ad22de4f63fb9fe4f237a439fb429a213785c7fb7a0487e0db86819246b6eb20902e5674b8fa0c0a2cb0cd21ab10ae06de6d85bf484ba85c2a78b797990180b3ebc3915db648711cc2c961ca982804438eb6a02165a461e4fb8c05498a4168185dd1e3a0a6854858b9e46c2bed8829afb86937631b57b4865af3c4d8d9f018ef2718c8efa4f51d6b390337b62071d3b9b31056e0a7af587a07455875dc935260618971f67229bb57728b33ef2c79e3fcf5c7db84ba84e4aa169d41635ebc7f672ae2e26eb0f391440510eaf086b955c7551ce3559d2766b2cee0d84669aae31e6cdeddc91796b646bba31807b5c952201a029339d9c4a71b105ebe8026c9069641affc9cbed54bc5f4b952d0fe4578763653378e243d62111e40af0ae24c195d388d0d4041920c55a5da2d666333b0cdf5a29674239954dd60928133338a3099dab704e5b6347268700ed70d14f76652d319872e92b0d7e6856e2e7d5b137ba0a7486c28bd569327b1d42b83b5012f322f57092a5f18b294877f63f4d6f43bd0db98cf84e6ee31bc06e0691f562d61afaa857f2e653a95ebb471d906dd5557e2e36f66d47ad010f8304321e5f6efd38bfa9c4a264444139851fab2d96eac3e491604122c6aa87525c69be39b6bfef6f6beca7bef1df2825277e492317cd37c8ed551c30038c150a1a56602b575248b2f7afac640327d89d5a980a0508eb595822e6f178279c7775af535309433e5b33eac34b839a20c59654d6cc25cb9506204fdbeb97a7a0fe51d9209c58dd3ab293dece781290f94c9038cb746d8109f4bee8c1df1ee1dd492052260e79bcdf9dd235ea77e7415abbed39263f968cd37f42ba27f37c5c3631341d2d6da96c9d57a799d5753490198ccd25006c916861488cc224c30e4763aafe4aa7a6ccddfbed33ed6da5c751015905fab39205d6ba0ddffedd3f6f798503c4c1aecff22ea7f0c556c1a9d8195cdac829d0599e76ffc7532a2fd3bca2a432f74a5a0a149b8cab4bf1e4b1a150b1418582af9729558fe11491643660e38f34093e35b1d9bcf73a6ff0488b31764581627480dfa2f2ba60dd30218d44b71ad14ad4ab120750276904f9c58d0a8439d9951e700b13b70b09959c5b0b322cf5e75ec57909387eb8b34d002cf988f4164ce62d3a48b1a3fba01c8626c040bbae1a99044713d3254f2715f344690cd35208bc6f34ce41f788d50af75157de6c115fd51b69dda8b328405da6eee5c039503bd9a26d16d530dbe49af6e324a6a93fc0feb281e0711856b726481555c4c6b7af833ebc9ccda73c27319c0e5daf78e4d302c456701e455c55d1cd119efc14aedb1d897d571c0ea6e7163afb6250afdd248546a89932e50db099ad31c6d84ef7b4eb9606399fc4c3015dbe53b03bd1af3aa15c613bc0bd48d94297a70a5d8ce161f62a7d861ee74b24600d3659c82464259f01a34e8cbde217380954c846400ad4657de84c992fea77d8bfe37185824c634eb5761a8d9a02a389c3c54e23aa4ea3702c64107ac7d8e5cb08ec8543a9678d6b12dbdb1587f478188b8df271759c9465edf41e58c2923a837a5d93982f488808ce0430fcd869fc884a970d80ba86be27656103f0560a5dfc845343a7f1f7c0b741ca5197a806d3f164f003b29cb93061fa1258b092ccfb1c4a9c3d78c4e71dccb7b45745f40c9757e05ae305a4c93b6e1d6e3e83337aaf909e4b2255191a0bc0df749c272ea6db1262353c2f6b8101b80069d1f29efbc7b8c09ede91ba3fa524bbdb2d738df34cd0e8e600c7b8c7ad027e2ee6367e50a966ade59eb74caad08b932b7c16ef67dfbca7e20d7cf73109bc864ad57b30367be29542c012ea0a60c58b732e90b63a13549f6bd70fbf22e0bf1b16819f925b917530fcf67f75ad6b1ee08cd915aacb46cb63b8e4b12ff53aec455a9ac7b2b2fd179b022faa7aedd4a3da2849ac09a30592f1142e1a2e8ac0cd5e8a2fa7a7ad7546a980efdd75a5c589894fa79949e0db34445c3146adfd664c6fc4cbc44224b5e4444578459d96ee7b08b1889dee08f359635c9e291a416d8f7b2a7b95eaa5c85a848948a82bc04550e722e4c7a144b4ae715d11a7edeabbf5cdf684c0fe71c1327fe003e01f36239e0b02ffaec00480034fbae6aea0fa49e46f8550f4c78d1fd9cf1576944e7362adb66fdf787894acb07874ad8c4005ff4bb7b39263223db5b641a25c86ab04c677b0435950b7a32100d48d71d85d33e550e66b9a555d8c682cb881d489e5077fab283e15090aa93187d00f906fb8c4f7fdd5e07c4faff758368980671f7cd03eb21abe811aaa577e782e22b2ec2d132200972a0be1ac9254e21166ad088f25a64193dc1333707430f5dd6fa3680cf9d85f0339a7e732f5a67be103ceebe156b7a800efb512025f90b3139283cdae3c1ae78bb40c1e04a91f1655207907b20c94bccf602d5a214b7ee5b085e4adce248015b131604d5c1381b9fe3a447bbada385bd7bf82e1eb7ae5449f9e9a51f9df9e41adb04ed6dbff65ba42dcba6cbbe9c67895ba9801705ef2526698ee6791618e67e8ed6a0927c1f691cd409f4b08aff403a4f16b3ba5136ba21b8e1771a8c465fe0c8a9e884a59bc4d984735f6924e2e1d83ef89afbd8e16f6da9fee0c75effb22d9c8611fa72ab15c75673e998424c7aeb400556737bac2e49e4bc38ef88f64755434c24bf91c13cecf2dbb97e146c702bb8f0afebb7dcf586af424ed99f47e1d9dc07e62822332a81778543d907ed420831690d9abe548190ae64f21237be22805294807fc0d1d3dd8b988e854e90994e2ea7a1712d8e98a0886a02481e0345be788c2a5e594a8bb1e51345ba987609ade10b3b3ef983ccba090d2799ef15116b6346bf46e1e2c7c4460422baee8e1b39056120214e22d60b8021a540e80e8e06668aaa3e5af351679595ef6a88688245c575473703ecd10dc88c7802526f9f18b79452f86e32b0268f1d63a5975fd5c0acb3cd8dc41bd056a3d3479c26f520c1eb0b473eb4c825a30870e7cc4e74adb57e65665045b14f48e2cf0cd6681906e98193f669291396be05032799561441b9702b0b6702bfe558b1db8ff98bca0d9b3524b98d5a852dc193fe747119029beffde7a6abd91324696381ad0211d6fc6efcfb97de87b078eead85f6f8acde6569ce298290f169d1b919090d5ca6a3aead2818c7f1b2d0f883ea073c8763b66247d78c63206c0492a6a2800458342af9164cb26efd2e321c6d1d4143a757a32ed9c982296769b1722ed3de03a2602273755cb3e2259f1dbe4dc67378adea7c616520633f24506f4e584bb5fbcc0304777edaec376c17c065029f14cb1862e890058210edaa1c884af2e54bb81a94d4efc0d109271481d268befb186781aef7cd0c3b67dfebacf84a5d3319dd7bdb2cdbb244d7f8ef5100a9b4ca53327a6f9b930577a5966c0de66e21b33274c1864ed528a8f4370bb0da66d9b59d85f0be243214d103031173b5f6b5e586364297d0b494daa5d2421580e0e2879a24171a7de0c5e090d07b742fedf4587f87dda53347e5415ae32fe49489195e4049c4c89fc8c7d2a35b57f0b37f529bf5e293c757265ae26182100c50c50556a9532047ac370e8f5b3611151a64e41d31790df84411d28dc9a046c8c862e3ac185c7d3edbe6e9ae704028c48e3798ca5bf5bd8a448462b5b243e36cdd2315a9f9a62d66831e8ade9c21d130a7410fbe69570de051317b3a3180ddda8fe608ee41ff7762fcb9138d1ac88e29829a7a44099bb2fafa0dcbcf6c71e53a2df22f364aef4d7c1e5dc7fb512e8ca782103a3742980bbf14293ad37bb7b08767a46d7a9fc5d817a3ebf537976af231860033a10234f401e4cf7c566114b19c878cf27e5931076b1f0e315dcbb69d3b2ec19890ebc030d209df229280cada684f5823d89df732286658aeab1507621fe7e9820ce46a9d851e52e12540b368e1a7d76b5b3ca893441e6d750a521740f56b39041cc4f4ac8996f72e474c91e434cda6874befcde3415e2ac60146961f00746424f5f4c78c576981fe2e70aee9273f10fca225b734a8d7cac22451be9197f309dda0157ae82de0d71302851523b4602cf14a7f3b4b38c8ee3e36a546e08af3edbf390e6410ce1ed30cc7d431e32d4aabb369eacb5414514bb5fe9235c0fe0c829d21b35a9f610f296bfb5563128601cb3ee089269bce695bf006f6b5fe15c2559f61560982cede07213720f0c7282152be05927171e1cfc5bd44ee84552229f175ede527ab1102709205b8514fa71cec19b0aaabf7672d0536157f1a51c355cfaff079d09903088c2160d626667f66284bc2e71a5236a9f21881f757d833a99b2f1ed2bca3610832fb3194401ad53cbf5762c602f65bfddd637748557a8ed7a834896a4a3049898a70c1eb0cfcd9e3e1e0231a0c1f7448b3530dd94f2e5ce4f5d21b3dc9148ebff349257b11d4044a2ee64ad6140ad485a5309daf0132bc3a2cd608749f60cfd19001e5e6a73f1dd76532c063ba68be7e978442b6ecb9e1b779a56a00a90943fcbb6c6e80941f7f03a042cf740da96508ec1fddc22349b94b461e700c571e672c036b0d801314b52106e6882c0155d1bff139645a3f6e0e9e1b767d6762bf17638ae85ad98c49396a09048313e216aac00b91e45ae0d33c83e081e335b9c5b9c7330c4b4efafc75a727ef9510b8773c8d4836e11e11a2a760bebaff02d8b9723724fee45b7d2a9913500c1fa93751df1272e157eaa6aae89ec8a30ee4af752ef86c4bdae7d98a3e6e9d8ed51ad65e08ad0f785fd0933177d7b0a5e53f4b393a70206f8ccc96a1005371664cea8e559404d06d8201fea2267a529794915fe24510c85b5d64178d7bebabc4abb0f16db72127f4d607faa78107edf71e4b4758e9ad82797480af8a5cb45eb67bc8833f5e7723f05a897ac1209ceb7ade9aafd15782178e92ae271325cc0495de988aeff64fdcd568b46849485bdaf4605c68f73006a5174197d55b9f5618d02015180aed7642c6f4d30a71ceb89dc8b41597b9c1ac3f33d2bb13fdce145336b4b0c10fc3de45f19b18bac4634725e357433bed5f68aff3b287d4d7553b5f07addcd22c2c839f1eb4f71108824340430565e45476143a78e3b39e2d34c53c9d76591381fb4304c4d2a527ba470b0d4c20e3d44eea55d54d68bca17fce883db96f71acb69e1e93d5843ec6b837cf7d4299ae899efa7316bb132767a0a613fd7cc585e5fb8813b109e2025cb11d3db3b25abd50425dcb0ac385fc5d31f64405c73dbf5782682710fd6fedffb8a61eb9d1775f7a2c8cf4450937e6a64c8e8f94eabc09838bb32d0e119a041ac73558122859bd6f93f38ea0f6f7e7b6a977ade1b1c164ef1e846b93b3f2b2e6a7be2ff23aaed8385a6a59c280c39639b9069acda09c2e25c94fd4f4c7632d785abf7725cc35badceb8c60894a78822bcc1a64aa2f7659d50d26199c10c9e9d2a57630908491b09e7307a33c3e8d41c5adf2cb086bba29549675d30ee6f08fe842b3823d3acfddb350e2a09557f2d22f91af1751f156a8741003d1ce630f19dfd047a7cc39a67375cf48234c2e024956b62c91c69e4d47ed310f1cad423322a21ce69eded095022cf8adc9248ad42cf6994f954660a4a37819bbf8fe3810acf09b9d993b4baf82ff51963f9e15104727aaed79b184f048497fde70c5b2ae0bcbaec26281a5b7c9d78fb34a937086a38e21d34eedc368936a3468ff421fd121d925ae1a4048ecacf9cf43409c5df5b52811ee3356ae7e7abbca7572f8f8be253b3b13f6c501e6e7763b69db7645a3505d0c08756696f4b8f43d766abadbca7c4742b86307469dc98229c0dd52bb8deba985975133d1a2661746c51975c6fb0303c7e23e86f09f9609272803410249817f3b93e9a1992e7c982d2180ee4308e2690f46bde01d2c1560388b1d073d987e384b96e64697cf70cc1535c24862cb857c9a39881f5fc06050baabe5ef716353b5a9dc8aef41c2c36b1cd44559e206eed251cb5164b825059ac02b47a39f0669eca25b01bbd57511692ddc47cee855f01ec0912325f30f94a8b35cc54fb0a97b516931c566750578e9da14be546e8b213e601b0dfd6ca3a06383430c3c020f10f2c3811bfd42b26f532f5997de311f60cad336b48f744e70a4058476f135f613b6e827b65518860274361cd28fe01be5195406a3a5e52a459e54c0668de5cbf1ad981300ef9bd2a62c953e5d4d46bfbd942ee76ef5e26d93a71ff7c1771c45c294bc90dd863939e15d450476a38c75b346c515de280314251feafcf095a59f37baa284af6cee31f74ea653c7faed698aa4e78e21a010481fe96fd1b0eb4844e84f6015bbae8862f4c021314ec9b5cb58b5ece97a893b52aabc2014fe72e3c8ea4e901033a18e5e0c85463221e8487f8dba61026621f6e4fcbf2c78bbefc8b4c8b83415fc26ae32b98b9c361f8c68977221c8ddaf04f0c50c980c81f9933f979b6e1b62c0af14b576ac69dcbb7cf186faec089bea7dbf45d9ae837bfe1c29de92bc53b936e99840e67030a92b0b778d414e876bf38ca39cb7748e2a659f4e6d8be8e29b3731f04788ae71b04d7bc209adf821b95e5099738b851c05c43b5c48f0e83e92693d0ed75edeab6a87cccc52ae80ed208143acf4189fcc36c97a248a26b4ef4e2e0d137c1aa90e3f8586e1a085a130b842396c508bc3c5e8ce9e3c876b8bc93bad6dd9960761c907d52edb0305b75bdba20ed73ec77ef51fca03255308087e7b368231921ff0331445bcd006e6206826858ef859ee80b93cf9590c940e49d9f5965047bd90b60c0117fe9bcc26e11070c62685452305a8c09642aea72e6313b4f416b0d56f4b39e0388114fa7785eccb1b5a3225b18ce58bed210accf6d9358bb70934b3724ea0fe9f3d6a8171f660e2e565e1909c09e0284e803f7d617822aa2a83b53870e246d5d46b36bf2e7dae595d90c49a33355bfea08d510211bfbf92de9ad5c6fc910d014fa19be25009d8e76e24055ad748be95175050e411ec781a56f4cf5a7632c554408de2b90851523ea29ef2b80840e9716bb66595a2262735b2295031fbccffe83d64109ca18082fb0545c7c4947d1e3753feaa57a22a3306f30701a6aedd68599f74e2870429851dfaf4f4b74455be5f732cd56ee417d2c225eb1ba35ca09b8d054ba4baad8b17e88b8c0bdda0421a27498ff83a9988b4b3f8302cf1b29c18ec99da854002c58b33f1625c173c01af3cc5841ba70aad376e73b364afd3dad99e9bc9b0b67084d9a6630229290ca293a1f98b373483aeaeef86f1427dea284d85cd28e91c05fcfa66c16fcfbf67e0f7956dbe86bc87376e61ddc6b2f0a12d493718d2793d79113dc935107e624706c3ee0e3d4c660c3ea6b05d89ff6bfa61e3fc6c704eebda2752cd343b1aa4ac926768c755ce9f40f34ae37c141ba546048b5b5e6aaaea8781db0cab118f5fa237287bdd55e23b76e2d4df56df0403a28c58e51718c7c9953231b944be72eb34ab2b4d30731990d783db7163c00262a5a5b9db928f7f0e08565085b46b35b556e36697b235a9bb2e3f568c22041451c94f2f908bc96ed35cccb7819cdd3c3cb0ccbd7e558fc111c2eb57142c721ffbe7a92fb36253b2ad2719ac4099112ad2fc266cf6d48ea799ada895e8873ccd848d845e285ea53518c2b17d8718d6eda389ee76b2db59b61fd9eb1817c2ed625851a8d87ee981029693bf5122fa252ecba842227e7bd568da1eb2cf4a8968d9b8f29bdc02173a710fbde6c1c66cbfb948113ac82193cb6d9c9f94f07acb703c1f999ae1b969327d0f21b18f8f96f208dc21abc6095acd0bd6a5fdc60d56a2211cf1037875f5a7f77777f3b675fd46b5b29ab5756f0682d49dd3339f435029dee4a687ed49e7829563e16297b2984aae65cad9c45663ab7106c6c8d9777dd863754208a2e0cba85efe82767d2107279cbd31de87ce015e44ede3b0ba56d9127d274a3f7ce02000ef1af1bfd188296154545041c5d756900837f4760648a92a14dfacff42d24240f22111e1a1cbdc0777c30fb46595ea8fb20d024a65d39fe6cafd0895137f3b1343d915a1ddc3ff5b87fef601549c32f77406934f76e99a27d445f7badec1c5029082a40cbab3986128a4d191869a706737b41eb1610b5b6f88d3d9b962c39c44d5d741007a170c14226f6d9a41c4078e6fa4d563a4fd274d0a97939223f2d1c42c1f0be9f9953c67c7e840c0b5856232ff3eb6e07ede45e4121e3b6f756b68d43c91d5c74b17287f38faa0193765bcdb5aa4e314b1bfc0484b968060b056cfc7bf97d92d5c25678f107e087349f3cab501102ccf5449adee72ac8ee30892ba8caac5d1f5ab1253db608ffd1c3402c389a50d2ef768f1bc0b3e19ac2f337798ff4a679dca0b294128cdd97854dce1c0a82ac5e7ac176afce1fafea756ed31e4d014ac6766c7137c34def9751f50deb6e3dc433854ff6c522bae0e6f2bab8c5661cd7ab68a4b122772d7ed71bda2f35c0e87f99ea4d6ececbf615fa06a11ad07a2defc0e5dd4d17ee42944254804e26ecee3f5cb4d5adf218ce29173b01a4b8e75878b80e9b37eef82a8a6240fcc32e9f816cb36037e55ccdf07729d29df01f0446f1343554e023f3e692e079ec7d13b92650d5fd2920b64919f304130b3f6fcba250e33fb81451f3d0cd4d1e1b5f014591d1c8095a0a10d61a97451ef3bb2d19e03f97d28794522daa6dd51618995737796e259f3c217bcfa3d1566f518e1ecd8881222ba9de0251c1116c5405170a53ac920d560a3672522b8bf343e74829db1ff8401b835c945919e572c68f8776c44ba022eb1dc7fdf8129a1315051a2cd878b4075db233fb8507c01672753bdb511d60eaedb94067ea0ca5acf35887580f09d5bd0cfd5e3be6e46a6be29ba8d0ca3558d6ff469ae5a6c84f4da688ee1eed3429faf51578483cca6c40d86dc663b40aa649fb25fa817261ecaaeedaccdb00ebacb3cb16f7491590caed799e9a8c43d2ea68b31053f2e9c3f9ee4331d4aa80223e75fad11e8aaad4df9fc794765b908b888066eb0d858dd6c42d5f9bb142fb6fc6fe522ef921ed758269eff6d33e0be8f588a18e0b8d913d59398917b215dd390a3c3f1858bd180a5a491bf24a8f996d45d35ea5b852868fa2e78303fe811a7b7d2d167ab89388d805c424fc2171df0fa86e29e30187281b246dfa7b70d7eebefa7615c5a9ec70e235fab0c47f906f5126dec153ad230e3e69df7ba1f79e02897fd9d06fdeadd37554f0dd75bcd65cd7da1926b1c2b9535c1d550d8e6b40a62f44a1defb90e65f71376ef4c359400e70c51f08383110ea46af874ad953bba3c86199b366cc72fcdc3c6c2ab8e9ea7fc0bc1789127da7b351e2ad5a4bc6cf33fe33e4fe7cfdd7d58e530aa201775f8bb25ae31317d9b875ed109f8f2bb825103434623612b4a420e4089364e4c76fc5553c630d5c28779fe97cbc2b5dc0b29511b467a9e3143bfcdd4fb4c2810526dd7aa4a5fbe1b7698f5ee88cc64d94a83bcfb97f7de6a9f525c0972baa0cd4d072532108d3c9b61a8f587de748cea496ae15022ee771376cf0fb0b2d4347a7048aa7ec4f3ab7c9405f89c9d62556d76dc1a7300096ffbcb1bcca3c83d222644cd43e1514857561dabaa5fb8e613200c8d2c660aca6b2fd5f1a8e005d2a6bfe7d2be969f32ddbe748d8925b1f9acdb6c956f954f33794f075eca426149b0a3b0f783f66daeb3568a2aa52de81d8a824503870491f897e1c12ec1e29c6dc2d7f6ae85a68001a8a4cc48085fa0d06e6305530cc78198e926a70199d40392d48a3ba27cd82a563c2cdc0ea6c048a8d455f8d24f13706e78191851252a4b1db797b9971dcecbfdf9b29fe078471d46a90fd21ae9bb9cb9f3acaaac14b033bbb3c7ae5ddebeb4a8e3ab82d62717b80e44d1eb24914527bc1f0e0086dc556d77f2a4fb3e73b95126125784988b4b9c18aa5f00a809c374405fd0bb30a10531e24cb69142136aa7570a557e7817665a99cf6ad47069e058c340b1db3e2c0edd568ca22c96798ca5e62ba6aef15619c67e2fbf1cc506084bb860fa6eca0a2289b19aca3affdb67a6f82826f7cf4b4e3e30560ff5e0ab0c71389c982e7f1f3a4f93762b88ac4a3a7b7023cb51fefbb158e30d5cdb436dfef23af34f5116641abd5600216444936d87e2f9064020d105f2fa9552ac8885d43126b4fb2a13550bdc4433d73fa177c20dd1dce00e9ac1bcbfe93908fbb98a462ca973e810d46f5e58ec4d164d3aa6d2759ce8db39ceb4692a16b01a59ddb86dfe361d8245e81e96ff76e1911d1ff9969bb506e243f0f7956269ce5bd4c1470e928f9ebe6bb871ca3ab3bb1d220cc33ac68ec6270d948100469ceaa49dcfbaf91f5989c6693468c93db2c9ead0239a392d6b5e217d28a2f0986603add534cff0f898ae051df5d93ed017d66043ac582d191e9f7e268a05f53fc4dea1c20144040875b27a9707f7f0cacdc20c1e7539855c19780a2ce071b15a29c986dd61464cf5541284d28372e8554f3a0c90b912fa277864728eb451fd0625174bed4281060912f35d25daef09b012f779c050caac44dee0a137fcab5b2b4101799116c26ae02d323ee2b14646e738866667d8e7de18bd79416dd42b5c1b7278755b80441addcc0a5ec9b54bf96d8a25c82ee3b71997a0baccef383e36781081ccc2c3c90de9b7960a30668cac4f2cac14db893c3bbf9557b269991bb94800be25c6e69e01f0e3bf51f8a86a4775445368d565b4a98459ae791dc6c8289aba1e8cfc9b4ea0110b4be1d9d86da35765368d55b2038277d3657b4b7e575ee359c90d45604177c5b6907f3c9c8883bb62d8dab593596e798b019cbed6f00d74377cd050eded4665cc8de0b450b6b8d9514edc7556ab32936053e1b3efb838470dc632d69983f30b0691e7efd10e97e846577137c2299b7fb1cfa82002a900093cbfaeef0de39de5f1de479828c2f927d85599c2d5ffb8fbe5ec022a41a78873444ef149e3f14b24a16f099e0125109f5079a4d657aeea48d7d30e88e125208e6b98f05aa763be6a97b74650dfee7531f9df2fd2845f2be62d8f21f6dcd5a5a9f70a889e634fa363e83ccafa88a9543d1cfb9b859e3d61bfca9e5f69772b10ade75e7f23391c06b33270b79a7fba140b3df816e9307a8d7affce8b165d1d26ddf66e3b5759a9456b1af73991c9e4b4473987b797b5f561fce7ee6cd7d57a5ebf5761732ac9a5a5d76c3be2185e428d585d6654aa583ecc5e3f4f5ac3f07b6679d356b7f36a4c57aba10514660031a66c4b574caa82a09d20f300b9624a06a06e3565f1121ab87b3fedbd932d160e198b703ef78e7a59a5039db2b4c4312fde7c872c8ac65c334bc69df266bac72ccabed71775555125ffa2a81d70b6524dee2d94b325df8f0e5dbdb672f7c584b2c624285ce9120b1e50eb1c19748336c3134d926d97bcafe912eaa2794969c4ad0172f404e646ca60e55d6dd3a340fdcd8b61c8d2ce0e32d456fe729d71b72f91561e909bc65a7d2c5654c54b64dcbc281c5c7c61da28467f4f892f4aacc60f767435074ae20495bdd805f2fdeaa89d4ae872b1f304bb9ac378be545d9cb94cddd82928c28cd61d3db18e4762a4f4261eb7002ce18093c5c37b686d7bc790cf91c36cf620a9287d56a4de95b37d6f2dce179c975400baca73278bb1e5e60db18d3dd709e385145191a970382e2e76995da0780057af1b02fce4e1b9fd41b54a5181ce6d33319d215db13b2af1697d201acff258299a238876bf923308aceb167f637347cd3b6ba9a7c933ff7b91738cc8ad12041f97d6917fc6ea8c4660bbc67576866751d033bc680c431a9207ceb62b51044246eeacdb3af284ef67433c23ab6ad6b3d4bba5d524b2f5733857292b433ce9338e56728a027bc03b59b8e7ecfd864eaec11fd03a6d8d53a40c71b38b210e24d8214f74638d55d3073fc822c30e6e43f72c1abcb6cbc27dc9e7f019f016f6e01c64b6911a653630058698e090f0a6a3d6d02f5c44830ec52466f624bde7dff260fe81a9755b32579bcb54260afb99f2e978a1ece5cecb5bbd7278d8ee3f4e0333bb1d5188e8ec431ccced0166e879a5c302e6ed7a21a61ded90a0cce0cc152e379edbfa457face0ebe2de80fe5413aa363ee019abdd7ec4054e5582655400c15864dbeaa08457f09a0cf45d9cb75325d54095d2d05d1daa26957ca35245f7f74f097d849d18f026427d2663844ba35544bb75330fe67306027c9b68c403e40ce1c07d65b606eb3d0059e8cbf344a48728cd30bdd791200fc7018a7bfcb56d8eec8b5bdeead4db6af2517efe07e8903bbc98a22c49213496bb91cfd384c426da6831c572e0ec8b123c4f4476e48d0f1a002d9e27e289bf424fee69188e382eecf5a08c8987b760baee3cee9d6455b5742b174b9d7f23cdfa98add39f131bbc5782c2d0fa5aaaf1c9b85f0b4dca14f66f94bd841bf7bc95f61e30b8c6b884eb2ee9e7968b957c543c72451e3022326a3e1f564a6e51f508aff6f91191c9f6511a0b28f06198401cf5efc6f528b76c7b27522ef76404954295a90c2c8b47ff74a840ac0ea3cf7d406439d77773945cfabef774e352814241a7d61e889a4c965767e0f46dfa4311311543c3775fad0d8ec2a07e2e58f7ac08e21ae833340d2dbce34a5fed5a8876b02d4715d5ac8214dd7cae940be08c337f044fe4eaa2b1992323f20fff13a6e35ce1d812ac98b2a5e01f15168718cba4159d21f3c3c0a8a6fedea30c77d05307266173d79568db8115fc688effeacbc9efcd7a4e8e11ac0b0f7a479a978c8ee90c374d06a2496ee50d076c105940ffd74dc455ca94d298cae3753580590cfc5854f004b889fb6829a791be85b11b8630c82d1d0f7ba829e980e246ba69dde0bfbdb751a642708b603766d5bff72b2b6a0180977ac194446303606fba0f6c064baff278f83f837cc3d602704d5d172969095a04bddf4c3ceb573c505e47af1427ad1f39fbcc5f9990650d60c9deb631402085653d9160eb0945a7b2249d83aea4049aa616a36cbbf09ced1352b72140bdf0e71fc53de9656972fe9b732b11559fa5ff7e37ce6177fd1cba72304e7de6817e26ead3b2ea48389327f153cd77d7e139344a9198e1537e2e453629cdfc41a32a1ebd81ed511d9981c2bb48192b0e77c8ce19870c00e213c563c8ef53b21489991c4b42aca539c67bb80f153b354c1a1af6ae80bb09bdf1049a78bbcf17735fe08dd1c00eca3a808e166df9657f53999de3fb947166ffd753f100791b5d142011641e6f3effd1e6d2b26987384d5f119a43ed85e692185dd35260b8d2cec967b352e5c9db172ea11df06becb3f8f638ea83bd1b8518802636393b3e555b6778dc770ba6435c8df84b288f7f8b37813b230334c6ff2439868af05bd341ae63db66558359a90e22c90846f9c5e3bdd03217cbcace37bc353f633e245d1139733f2b2e31a70dfdbbaf3fd4f536cfbe38bcdfc0b25ece6f255c70c1edc056ea7666b29df3c082f3992438102339ce267be26d5aad2d4bcced343e135c12bda1c6d604b4c45ec201455bfb7c99bf0c3fdab8d40f5daa616bb97e34ec42af7e44d3a08fdf732685fe1f3f7ecfbc75eaf856780788a8347beeaa6ba7d28e0d22c2a359c565493ace418e2da6f145cbdf0bf18ba4f205d6f38bc90b0b838fa673cf8cd3f0fb533100233c70da124072eb1c1d31f131c5667d3637a8891294bf5f730686b89ddd6518ecb86694acc9cf027ea5981fcddb6c4e01fafbfe4aa0736bed6c00f0dae3e5efcfa0aed17cd4487fa8407d7e560135083c9b3b2ad55ec2632237c87915b83d8093245c36823b4145da21a04a0f3c24356c1452c5204971484a8b09f7d22034c23b84f81480e7cfdb7b8112b0d8b52fe631b87fcb9b3af579417ce6931d7d8f14889e9329317692a66ea461083db3f51832f46ceba331e20c3ea6f628d2b0d36126f0d580bcd1f47fed4f01e2f3ce306bc7b8e71b0255b0ee0c2df297ee2036b4e97a37cc3073a7476f7fcf80f1f48aaf0c6b78a30909dcc8258c968aeebd608b6435acc3d986a172756fb8a72a2091d7d5e66bc27540a753a2278dadf4d2345ad0c9db15baba0111c2ec155f88006586696fa697452714996d7238df7acda52f2b12a1f62bca9053ac4028fa3eacbb7d978938c095d8fe2b7cba4d6d3c37c7c226dd6f9dedcd454d4cc438c63ed8f0cda80a8443b3df2a4636c4506c424aa73561193ca65225ff04fb4c6b1f15d92741299b5cc46b09d714b97808cceec2b50b289947b5e5accd36f1d041645bd043e27d4bee6fd7d7b918c7b9c8f4c75c523759b0865836e134f9a18111c15b6545f0b1db166ec4071278a25485bf94f3a162e03c6cd87818c11fcf96e64b9b982d361b2a622bc6fd41a58c6efbac032a0dc1feabc4b71c373c368e23bfe9d2041801db95848957c6319473a42d3b81081cc75d9fa2875105c457780f2f537847ec45288d02873951fc88760f073cf820bfcbe9bd5e0c3fe073611bac45cd6b65a702c650bfe094e4b3809126d412a695d2ea3815e68e8a8d6195b4e256d82a1ef3aacf73f78a4eef8d13ff1b34ba2bbce9c621eb3a283e4f2baff11c1514b0c8bbd2196f421ea5d9aed114adfa9c57f6218f8f0200a72b48b42e25f326c6c6641f25cd48b30e1f487bf5101a4b0eed6b706d3709482bd0d516c768f44ec8f3519e6100cde7120821437f170c6572315731afbd641b10962d190425005080ae49271f345aee259ec3c1da21c80df6f78948fccd92ac4ec5b6f81ae063456f6efecbe30e4388d640bbf444922881c1f968c520ab12947772096cce174b5b171a7bc0c540631962794aba60e05aa29ff1a8a36f0072b4b60773e086a55ac0541b0963e1cf647ba0c77f4991675836c504b347c2620ee017f036ce561c40d46047bca77a6c0def3ff17156541dc94bf3b32b4154ae16fb92eb1e2c2875a57657270cd7a6e56aee58ea05b39cb42c33b0a5024772d828dcfc6bec90af06624e14d97559b7a44312266631158c92b972eecd989f6931b4b31e6bf32cc2537d740cc529532f1c9c76456f510a40f8721b3e21838099f9a7dedb1b153252de4a6dbc3c356da762c7ec3622d1b2e9eeb72a75a323cc21f95e4c1e38b46471de2feb84b45985a81ef65cab80974a90e0461e9ac1e9231c88ffead94c7efc6893adc5a45dce82b6d1fb743a9fe92bd6d260afe44645861eeabc25d174214363a2a884ab0a6520fd0b50ab2013fdc7c59c22d39da1c0f3577542ac2cc57e5016bd190f10bc0305428fd4afbe9513180304342c1ddcd014e43e40e79568b8d01b405de0107d52eda3bb2f61ae6cf5243466d83b254e4b67d6093e8b6e7cf7cb138705da1b4bea6a074c2a8d6445d6218b8392801351657230313172f2055e0bc1ff22535866496932aba1f228cdbaf7f8567ab087d160b428e63f78117e3426cac252172dc17f627421c86989b4410638ec0763427e2170d7d850ed8af5f4989d80c0b104681e253d05392ebc8ce73b4e26f5a4cb4422fa8bae4240a4a9e74c3b6df5d2aaf6cc7a4c354ac96b5a933b94b50d037b6c8bb51b999aaeefe3a76f6da6b6e2871d22b96d79d145bf233cd46a22ab7d25818e5f8dc82a7fbbc7af837e378de413270a4f75bb29c2bb92fe1e518d446ef7367c1900403dfbbdb2de9ec6abc7b89d359e87bbdbaf2c986fac0cd10676c6098cf1e5e684ae43e320d31a875ff1834410065c1ef520f1a5f775fb07ce9bd9134a781231fd5ad540efeccfdad7b933b81e1f4e92d8a22b1487c68f1eb5052add4aa74287bfd1f5183836cda9e0607b8a82169ea6635c5676d08b0ac2958612ec963fe6240f16414f3e368b9d4529f35d1b22c97aa839a7a3ba8b8aed7f8f6dabd9c925e13ec432efc6c7b345e570b8b5f61bbd8f4027f9ad798fe14a7d8ad6d50540215bbecddb41259e341988f3398f9541bc576abe91b38206906ac1efb1e8ae8c21fe03344a0f5756b00cf5df265204017fb3c5534a9b5976a4424fab117e2968cac6ab9514125e37c3682764cd9e173a005e652bb3fbfa3bf752366df47127ab7f326c9a46147ddbdbfb311c4102e57ab95c68a37c56cab1f057040d20c7f55a6c08e306a4a3e4406e01f7a29d2229b46bf2206e5b53b789437bbec634bcd569fd44b06b0d2691de2d91619fb60bcd752fc25b521c9fcf817ad45c7951fd132e869586f2cbea42abe7475722ad8b6ad727e7347aa7efc2e750629e0e05e3a6f34e04a2db451ce235ea8533ef641e57f637f47dafea24672bfc87f96111362205430bf61b0a1567c38cb02903352b7d6be00b4143cb5166157c55de570875838e9e0d45bf6eb5d29f12cca06e242b26d84b973c553766691d9645d2e43927a92da33ddbfeb4799a18c6a5d6ae5a4335b8e86bda14f2c2718f0c548de27ab78157d23b96a95591043723c0cbc2504c52999f0b5b47189edf3f751d7cecc0d5cc08e38f6113682a30ce361445c510c87e06ae1d6674d621ac30a66a944089c7aeebda7b01ed852f1685c387dcdf4ee4ea23727ee952444e50869eee9e003d633868a50ca38059719f2141c799ee92c5241e2e211eca1504922b42686fd40a0fb003cd33c8df3e6b5c14ceacc02f1c3f7766b1b2cf84115bd58128b451317cec0c4aa3d537d10bd25c1b277c11ef2b5671dbd0911e52c71f6cb8f6fbfab4087fd4a4b4834f1d059b00d144c7130588e2b183a1b0ece38734836c15110901bd420522a4d0b7ea51c1b6435c10efbc17493b3fabc51fbcce42c08db2e4662c7a97193e87cb7fae41f9315138730077b196c3f91db8571f8550879f90b1d36cfe24c234205bcdf1eac9ae6e493b7a6338d2f92d4d87ecf28fe39b9cd858726fb23aaa620e3beece76cf45b504ad45547add031ca9dbe48986e9667cf40e290a1d2fe8478bbe514368752a4cbd50109e172ecd14e8db88083102f437a5c97de65da709bb409001ceab0fbfa89a409fc1078cf7bdc9e9ad6f4338daa7f64fb980bbaf2ff28efb5a8a2f3812e75d49a70b5b4169694244eed9ddcefabb1929f22c2dc5433a71c100d775192985f7752a70b29d33801683591f16db81e51b3919b849b70e8a7502d6a6c3e02bc3651d840c68d48b23a0b4655487668ece5e84c91076453f1f9a7152d75d979e25f80a669a2ad910ad355698c34d6e720c22f9b6919990b64737108d0a43824cb0df9960d2f6106befc59a425f29f769d2f416fea047dfb44099198af602d894cf345c14e7cb34b3760925ed447035b41b6117266836c9508554027832653a271fa7a50ff606e8a305d570090c726318f93872d76daefbf807b4ad2dfcc2756198e92cd14931cdcff6bd1d1e919c70718fd9ec2c37347adeef6f77a6bb2cac94a012818df1738c6e990490e1cb54538258c7ba42be8769c389dd0c2c45340c590ffebdf484de6f4a1f8a68c5a1ad7c6e0e32188eef7d2d26dd9bd21425cc5d2a4c4c91cd101336fc298458e0cbe44d91c9f4b0a5455b43845f0b251e8cec85c967a3b7d6a18ea0da887cd7f4e06b27b394d24038578b65ac2fa1cde4fb54f4f1c1a96fb685e7d4bdbb4a34837a9bef71c0cdb3a40586199471bd1da216344edf8966d0f547437565b048f3c0c21196d3a4a5dc71417325da99412d9e455cf2a7903159219830ea7a10c80e3ad05290e6a2dd8b8a6134dce7bf37243397933168259dd6abf0b59a0f3e26bfd0e61109070f782d9f45c138a03023891d4e933128db37865b023f14ac54841db5a877b8d1a3a77f897d610d2a6b92ab1116dbf713ca86a02984ed173c651c4a616cef0eaf29dbdb116ab81634ce784d6ade0a6d52a5b933ca9f01e65a68415a021730c01ee68a90b2f31e02d6ac58bf802c53a8470f60b1dcedd0ed5381944a8a3564a377c122628d44d99c86eca7632c0425bc806879a9da2b60c1ba1710fd2059c0b0df744ca164713f861ab94fc5ace8002aa1d1f535d70f211e326c1bf170dd71312b127a7131df135ba775f5cf6b250192c179f5602dca0ec958213c57ddba94a054ef3bd0b3168a34d426c9df5338b90867b8ae13bf2ec309e092870d046d591b02beb9292d399770dc1c149023974e990dde44c524e089c9caca9354a5cd0a6d2a8bfbb8a1d9c1652323ba4b2bb2a9a7030238687aff596024950b3053476fff406e42c1405ec2e54f0c49d9b511ab85f6891c543478ad27a991b458726f2bff1da86e953512fdc148152b1d5d4e6b8583e10a21c9ed408b0b2fe5c0b705ac8594fdcb951961961f79e2a35052a8965200026b59b41c315e573835eb51442a32dddfd6610a4c39f73c71aac8c5d0383a1c248ebcd144b000e2d7e6809e348e27a36e1e81345d360b5a336f46fde5edb37436641b13f7b3125fe84c9c41a8d8305b63ac151bcea03159b1ae03519b4b76527b0dce2be1dead53311850c2066e3ff0403b8ca39fcc229eb5d1c9cca567d6bf32920783eb38b500df9082c485aa24b89e828e086f07b438884134e0e080e01f33aa56cbd20295156c02816b4f7bc38cc403fc563f4fa840b58658a8e004b3999b9bbcd7842881292d206dfa7c09bc501be2f91c736a066ca990ddf4eaa8d268bcffc7757d424ffc48029ca76591c6aa1935649525b509679d8415048a6f53c8e33fa8345add05696735b9ed93396415d0df1d98a9f78dc15167e0ceae40e115fde3933cbcf2d6ccc06981703de225422ab1dafbe8b0fdf8978fd286b3ec639eaddf04ca405bd7e9c42a1630875128ce773bec5ce6522193860484afe519c4d4ff91a6c442a09a230459ecc48b4bf1c9108c2066353eed3bc55fcf512028d149cb2732963d5195c198eb436ad533c4f1710226766b48c69a61941ba38fc12505fb5ed432a5f0b64b1c9d08799c8ff330ab7164f40633c58650cea2ed583c20929ed5740306424407a5412765f11dd87fb1c740ff76659f240f84b956a76d5c281e86a983faed2f089a41c0c6a75f0171411811697795014014798b4f6958b5175cf717d84f471210d9d0891f106eee9269d72f6ebad9cb668c56a72e5bd2ab594763a59cae33e2ee40c9405f372e606f440d775010170498fe505f5042f81c5db60aacc910a5bcdbe9208b935088851e20cfc3589116308946ee44e6bbcdde6d162057137bc6a54fbce9e27a72237a4ad0001dae33425fe3211d6947b300081aa5ec6dc9cd038a1c8b2236640c6a1e2a92b1384bd6fef4cf4fcc22cbbff4c1678ba5a542485905e122083ed0c3efde2408c8792a7ac5f39f3f2ae46ba4e244d1e553d597ba765403764f6b556e8714d62cd8745b839e29ac722fa94495a487622cef41d904623a5b95b1dde355c2d458a1fdc0c6e69d9444554a723f94901536d75e5c80e22fa244072cc55f306d4924c6764466157f5fafd115bd9ee7129e0d55f228f42d55321706e9f7756ad8962da1e8c9f1ad5ad62ad7d6c99cdbbfc10bdb53d25dec8d7ff7c3f6c1a7b31df75ccd1340892eb154b1daf9fcace080ae7b744f5e249a5257d4ec480c5020e3ed28d6bd7caf5e848e68a3f95d35cd290f578cfdfebaebbceac8169a5e6a16d9a8f05dc8d8ee045da5632733391a12878f26bba8d7d8af8e120a3d615bea3b1ffa2220f6f98f46718bb402e82aca83a470c4b9079846ddd80fffa520012c6fc9f7feeb4401175b7ab3711ae01edc37f0fb0be6f015115182aedce08ab5445f85ca60296d187542cc7f61bd3c09ed1372727a9d2e734aa1d02ff4b99ad153dad0a528ec42685d875f47bf65acc1638e1e7e4b445c9c45491b29d4bebe68adab8e2829841ac5793f1221c367506e216e86a3b2ef50f2967b7f0ccfaec19a1c59f630c55d616300147b00aa0a0ec76256c39b15ef3792ef6c5740b0d924cf36b20b3047554c7e9dcdfaf9ec024c55987f6adc98ebbbbd4048f12a8a9f337709920d1da2aaf71ab349ad9a60153e0ef7b5bab02acff70ed470c43b998eef84a5416082939d3459f3a1d730ca24e8705349535ea85b69c78fe8fa3665b578c3810bb23a1e70b000c980eadaea68fdb4d1fc5463211c3f63ac33991a0a9c95967bb73a0d216530c1db4efd30d9de44460c587cdf32ce381569c44394c550a14574e2bfd9c31001e2c2af142db36bbfbefa937388f787db87682fe79be0efa7bed17f2a792ac2430fbd7d4ae49b2d402bf650ffe6e76bd5adb34b8744fb7bbe349c141b1f9bbfe7630865cbe3300f280ef929c98592b61c40dea5136d36c4de6acbcbfa8eb17882a8cd229f1f5968976f1e9ba145d61d03dd2c6d6532f0c85d6cbb34c70cd43a973518699c1570338059b225b8c8383a8de43264289738780c86949d639b8750e7f375c3b2629d7a72c2cd17607fc8933836758ce0a05a7c6b43cd38e1005342377b4ad92f73008f5bcc43cabca478a10bdf0fc8252a1437f35887d0d10d2e9a5761413d61653878d783297d9269cbe5b0cbfe27b7104406d52563c95f6c2055d05e1bb1555420757e6267cd8b7cfa6f61a2dac0454b7e5c7c25c1c0694dd9c282645e6cee82490d6b194191d8553fc2575cd2d6d2d491b5206177986e77a142c8a63325734b68564b6ef86b9cd47dbff3e828387729b9c3031596c13e3a3c7dfe2b411b97727dd48122c853d93de46c6f22b708a8c973f77fc5e9ab92077ca104c9008e253974a21b11ae529cac816fb7c9a44a869c7d16377e09aab97a3139c158ec349b0ae561fa955461522a3adb77d5f2531be0d6750311d0ca6fdce308e26958fe441381343c5efb5930a1b8ecee6e97c71578f8359c4c211844d7ce989a98b5daa5231cf99892a504558950fc45ecf54a878fac0137331161f01578b2d578538b898c20fc27eae5c9d999f154f8496959aa672657b749962a4c01435e2af7bd6022f0c344e0b8110ef1ed612e3f0444db129add8d550b5dbec1657ddc6be2493ca52293a64e70baaeefe416b3052d181cd3709810b64788020f732de591a0b7ae31a38db94f56345531084765f02185389901f741ee70066c4e411ab8f2aead31b3aabaaeff16726e04a0a9a670133b442c5a99eefa72c40a7d23613e851d4031a101f8ce0bc5057221b78bd0dec800c04c4492e93040015785b6f4649247426487eb682bbadfc11eafabe20ba3b5cdf2a151b15821cc5933c6ea2af3fbff0899709b78ebb7f6ab88f304d4bd100a567c50b66a944501683f10bd6071df45db4a55e77347d4e6c4288ba2715cc4d4ad4729da40f6d5f1e7f061f240df764238bd23f1241b43b9be13c8390dc8d40bb71c27e0d5262f422ea045086605a52a031ce8bdb30fb1215043d179f90eb2eb99de5dc6e66d960ce963e82a9a430d0ed236ab47b116d596207840a425b7d384ea8a83ac0a798663797ec7231fbf581c5433008fddcc6f7ffdb479de74229fa297ce38aa3f512dd2e396b651d84e55eaae671574bcfb2324c8ba66f75079098defa38a9c72ebc02dd8f515712ef37be32c29e6086a51cd7f70030ce1e0dc6f6a70eb146826f633c338094878da48e75fd410723e37709714b919ecaad0247d29a27a3937055e8a716e5036d1a8c613cce7950281153aaae17f1e015a660e509d4dff43eed92a5d98817aac334a08e9d48328c84d1278c1412e50011c52dbd7724919a76bc5debdfcf55ec5ad0da6d9bbb897d7a72aa5e556a2c407f816c1cdca191b3526d3c465cbdba54b29edf01cd46e61b7bdbbcb7f6b0ba00aec3650b6399f1e2cd07155200d320921f403d1eba780fac92e885edc5a82a6483ffc394538733bd4fac2049784bde6b1cc5239644ca996fb188a9cb139e1b68dcecad4d7a85c103e676b244747245e1518b65a69fce5d335832c56bfd407901317cd85cf2a1ea81633aa61d9c053a381c530749e765e172ea36df39d6d51e29ee9dce56d96c439c0e801917a56ce1e59d2bf79875e131797cc4d952cf3cb101b8b5f44696ca6c1a3f2080e59cda38a057d22416a3a565bb9cf7958ef9b6d1e9dd1e088ebfc00c97b491ae6ad45c8e4a73be051c0fba1bd2f0e970c5aeafd482c87e0545a1bd025697bf2e80f0346de3b0419fda2d3a06a6a994e85f91488f8ca53affae57fdb6b6a067090999b8d741a8164cd4c862465dfe664a70ea4a2519ff399d24e3f3926d85c328c9228f75df52419c38e9545a7bb05d2e8e23ab44a772ad934697a2cd278ecd553daf01e5baec2c5abf7c1a24afa905ec68272aef59e4e91a19e1efb79e6690cb32cbcfd0cef4747a5dc61bc72850745956dca86fdc5c08bbd7ff5bc861ab493befbeb12132e02f12199aa4b844b682a5d20a139853aa07fa3b2c65fabe67b420114b0984be504e67022c63cf232a62b287b369fe83b94e78275b37134cb84660ef7e48d6452dd41456f360bd6e8d92526ee2980c837091863d896ce16a0298eac0ca7179e6f3f290d14e317c9e98966e412552509e216a10c98ae1a2a6b85f2934905f229531ec790832b2f876914e796df3e52b47f49e3021d433b3f1d584a5996631d02ee1c9cf081ee8a12825f5aa8940f851a103acc3acec9c0cf2fac32018c8ef284d200c0776930b1bf7d30556500829234baf6e6837d0460185adc2f004472e86627a1624e209ab79da2151c4926172291c709af3365d53dc6ae2b894c82c79fb50912e0589bab94641d3c9e395afca4503235d3f109758c8d1a6cedd505e125a58610c93602064a4a62d4c2f7ff88f102168deac272edf2e0882c1431bdf6518d958d2e26878bef0011de00534ca116eaad2094ad31940e46770bc23d23f971f234a539d338254a1301cc40cb49f15d576e405933710571ff206b4466f99e835024be5087b03d29fd70ec70ef31c7ec6f766fdf88faf1842941a45ba505ff557b09df9a5fa73a0a59be07397b5c7ab82d1b28161a015fe1aa0845f1ca1f126049620c4b1ed195d0282a5bdc4799a3e43cb0f06541aa68ab431dbf63969664d9d9050748fd4a6c909428089e4ff0b75fa0c1062cd4655659008145360313c352044d5a41e5cad34f8d4d2c53522f8a664ef62369d55199c08b2abf6ac8251c9ae73d22cbf21bf2dd5028d9082f283b41f8520c26345e8294c07491e7793a4a78c2562b82d74b9b42fd5be8d3743c8839b4e6ee4690ac0216088a582355902cbb697b367d798e93913b3844a4167b02e58e69c40b5ba5c3b66cc8b8a87e33393daae93f5d1a8af5e8240ebc413d2bc45456e89ef3ad04976050ab45db6bea98a57c5d26a1491460623740070c9fb5331fea243cd6862b940a874ae1896670ab57ca4f41d56948b49d08136af4e2786c847315c050b58918be4147fa0645f793cb189d946d8d7efd33157c533b379a69eea29701f939b0a4d9ef43242da43913fa66438001e45b339282a2c664644ed1ec7f51b7aee80b1617f2432b5d3839f2b56e42179164e98dbee207846f13b10a80f266f8e2232ac892d3e25118afec68df9d76c37cebd99ca4956bff233ffc7325b1b6e873a6e80bb44768555a7ae36dd956822d0e6b2772c27b69c86819fa17dd7fa03c740c03aa1d1e6859401816a5033d921eea4341459958bf9f7fcb979a246dba19bb98695f0b1145fb5019a0afc99c49964807b11ed087e47de3337f71ff04e765f019a006d454d435e1ed8cf87fc8a3df1061e6ad1122c9de5b6e29f79632a594025a0691067a066bf58f1f6eaa344c8f51697f74697fa509d3e6f10ee4fa10cf99ae4bcb825d1ca4864924f498d64a7a47eb259dd34a3ac75f96c90b9309bdc4645c5569f1ab2af4d6f35b565551988eae90b6cebabc7fccbf8743c7a0f5d07ad185696eb108fdc89c52e7a5bbeac3864cd06f30f674cefcf73d3ff291393b83cf50180c193ed2a5270db3f549971ef6311ed3da35376652df679a0fae1b9f248f1b6489b9c4a79bf93774e9b9bef1e3ab87980c7428a2301908e90bb0a7e1577acf059cade12e1ac963c44396baf42afa5d7a8f0d61d629b9f81be3aef970752bc9f7a51b78d0ccd037f874511d9dd349c9e3673eb983e1951c4cf89c537190ed92a59dac98ee5da7b4c117a4612a3ec1b6bc1f52a113f57d84417dff74f4a99da83441ae9431ddafc80ce77430fd9df3bfa940d983ae895dd583aa597d8555558555d557d557d55715e8abaaaaaaafbe0696692b5898fda008217c6b6a42cc0f8140f33734ffba26e8a796651fe3200d9b9966fdc4ac0b4a6845583d2197655b9f1ab7f9a1ec45bf9f692c5d8a1fd2be4bf1a1df10d192b7c4a73182462ca51b1a66536140c36c8f43c3843e7e89e5fb638c0f5a112324d284107d4a28244a1189441f0abd281412897c8c5cee94d3aaad549dca73d43f1c68cca5dd8033fbb9562016cc6d77681a669b16e0a1c70f95567296524d7dee679734001afd06840eb84a55a32ef90d0d03df1f871d11468b9262a9d4a552976ee04c2c0de31c9359ec51ee39cafd07a76dee631ccb9930d557d5fb0d38cc448054414c675a1cb7e0b111c339e778a673776fb705b92ceebdd484907fedcadf2aff3d297f35a6cd92b5273acfe73d7ed5b512c6dcb827272727e7e5e4f80deec9c9c9e19e1d253af285757272a8e79d867191f28e8e0eac9c99771a46c76fbcec4cffada76198500d53bd7b0d03e5692bb1ab21c5ce15c3edf116d7b267b69b5d848974c95d5a9870bbc6fda93df6897b1feee992fb951c54cf395deae6b12e300831bbc3300218efb96be7dc6b7fefbdf79e7befdf7befbdf73eea60ba7feead1323e4ba90e9bac422e58d1f2478d3f5ee71340c8d28667c9655bc9a581626d3126232b18a523226636132d643cb2d971f350bf0a0f5c0785831f9a1153199f8317af40cc361ab4549fece5f3d47208230194867bac470ba1d0db33b3cc6388438705c38bc058703d978a85bf53d46357aa545adbae896e2f30c3530717d3584437838911668985db9626e38f8711c20e600ce452b66a5e8f6a88d2504b9c2646eb35e523e6c98eb05d3cd9d152b4cebe5bb7cf8f1676429f7bd50504a0b42a945ba41eb635c6af1a22af52cd55117c5917da6735dfc6315dbd4b1d5f5f30ff946355e462376cc594c22ef6ac7620ea67bc8988ce3ebbdafc2747c8663a69c73d106b3dfbd73ceb98fc22b635d9cfbe080f8b9433847ccd200dbe27e07d307d539f7b18ae9df6e850ab35404fcab6154e2060a3d2c69337409fef41b21fa42618c31c6e875d28da6c68f690b00019f077c1f1a86fa19cca8f017c25ff81b0b84605408e1c7c408238cff3243a9c6b3c49528ccab4bf0fd7bfe8a15e6949665617f651fd28408bd28c6d0af28f45916a2a18f1a8886b4f9311e35d0d4ae0f69206d83f5a218fd2e5956d3d099de90f6c0a76a09b9aec4745d2281fe65d381c11015302106581012850c30ae88c1142a484192290021c7e46454b466759790a1c4a3c8a6b0dbb24050eedf0f513d2f01f6ab9a2dc07e45d37ec33df3ac4d371f8680ef7e88eab94741df96cd87ba6da8f6a3bb0260d3d3816bf7d3bce74791f43bbadeb21dc4abe97e4d188dde73eeeeae511445b90300becafd7d7777d7edae736040f9e9d1310202c274bfc12559c8a9cf79591e062e255c445c9710d7d5a48bb95d3fe611987039999bcad5c5b5848b8babc9a584ebbafafab97e5c4dae9fc9af6454b75dff903183a380114694274eb4f871c2a447c98e1449faa51b49c239fbcff5bbdfabc768292de739caa78bd28862324eed1311e482a6f0fd3d40ffad762a57ae3c23f0a95403a8f73c234852b9b7b31ab0990bd200d86f0288414291105a73baafef37addbe21f9fa3fe313f73dd9f4faf1d144bc410027a32f937c43bb28c247554c3fdc6b64e37f7aeedfa9eb1750570841b37d8b97d2751affd885f910087a97a14dd51fdd699698214f5e80be07e8cb30ddbd43582b7382b9abb0854558d9e78e289142b5cbb6e8493eeeee2a37076779fab988aee09e89e73ee9069bc0b7777770199b6dee283dfb09e7a2028b0393a3079b00d4d5f309ffa0aec8d1f242899b0bf1999e653d4e88b4a61bf6d152af5d2e213637cd3252a547bc78f1fd767ff433ea8c68469d8cf5cd8a43420ca3b4f49edd228f718eb901c2539e092ef1c9d918f519a227cf216aac674e32d94c5210a6975e3dc9104bc53fbb971f8cda152dfc3a807a91e92dca296e53402ded2cfaf91f6b3dded21ed675f63a2d97d293fa3256f79167df27d8cd6a53fb42e8ead2629dc9db92d0bfd3d426aa709b92cef77f4555b4adbfa54a14e850e2f6dbd456a24ea6b4c9646a2e88e1f35261b95234a98d684841f7e0a11734dd6bfb7c04732d31f67e25b946636fcd831c68fa499f85d11616e2f1de567be934382aceefe3247b005732b69c78f7efe50e54a7aa44763bcdefa273f6ef087f517fd115fd2186fa95e23bdea638d89e6e3bf8f9406c9a333b1aa2c5a63aa3145e82d95099b62ce75791f5a97f72def7d1c0a174ebd9448a1a34305ebb04e65283aacd3387dea53ed9d3ed9c0b17163e3546decd8b8b1716a02c3c18ec04ed8a9623bd8093b452de24ffca9d64dfce11b7ec24ff849ed20959ff013144888b3987bd7aa6fcdb53f1982d47e97e1d4a5ae68c758b90c39fdd29f16de3532e4b8e71ce89de664c8a932f4c870624cc6012143ce0e557d4e9321a74bcedb793d73d70c996a22fe442de216f127c808003bd842129c1df1249153477579803831fb08fdc514d5e52162838228cfc20344090a8af8625a75796e86504b48b8ba3c27504244ac5e5545e186dac209e439c20a41de116eaa2170dc1627ea04387e0423af0923aaaaaab630e2660c4e46d0e131010e9030021499244e3c451cc18344ce65441fa9f1c359545e5c2d8417940c000915ff4c57970748134f0d7956c9a9a38a070812fe53a3f42f2f50d4e879ee51315f5d1e1c2fb298a0ba3c385afcc0e108a16ebb840747072f1eaacb8333839ad5e5c12952b77f792299892ec00a9ad00522c248010ea2f09bad1c175730c1134e80e208309c88b790754e708513accb03e4668a608914a06d98ae7c532b77e174c9356c77b9cabd77cdfdd3b68bbabf7ccf1bd0b1d5511d5b7dabe853e3f4117dea13129b7bdfec5eb9fb07519de3fe47976970d76480300dfccfbd758bd325f61a1ce7bc8bc4a6fdd4ed0757a9efe137364e36706cdcd838c2c6c9c6698a1ed70fd5757301b9702e1c2a888036df7a5cd5b9f79c7beeb9d7bfd8637f8ab6e6ef34ef7eeaa97577efc5b806aa6f9829a07605991c987c8075ee5482cc6dd4fd359eb46d31f1ed82257a77d7db1d9ced9a06b677e9d6e3aa386a80e26b43df9d247c84f8c12d53c13a5998dbf66c123e522ed6cf5af3ba9a9d22706a00eaeedcd87c6bef5723f57b90ea4b2ad3f06a6332fbde7b41d466d703601af6dd6aec413450d5feae5c6b28765cf0205bbbd42b82b9d5a8fd257f6998561900dbb0cf698e8cf92024e6f6ef7d84e76687fa823ff43635f4990f99eaaf9732fb755ea48a441086089cd4ebb1119c6acaf7ef4e05bdccb4d04732a67b0bf5148633df73ddf653fef779b888527f613a700e291fa25bf629bf984c0aad3019f79816c7982a2fdf3f46661ad71bb667997c85dad76c82b287984c0653e80677a82aa6c264aa0adbe17dbca88eeb311db36674e39af295b6550f02a5f4a821151d1ae0335c36ec2b6c071196fd7e48eb21a33d546af5f3ab77980efc558c4fad870aa9a20bb81efbad169c1445512629b5ad5fbe8ad6433ff68ee9805d30986052df43bfe8fd377bea45dae6d09f12d2be82400e02bd6332a04cfb1a7a4a66a12ccb34186e66f69e69fd2adad6c674e8c74839601f7a6c7ea66d32291fd2b614ba805d17d0efba641f922fd2e687f80a917200fdf5a0ecaf8c5617d5203f05e28b892fb42039ba8058abba95eace502b1d2fb80289191554f78a233b5ae8603186931a80ba586461497dd2580d92e674c1a762718691ba5870418abab14ee5c751170b33caa88cc9ac40995bdd4baf4061aef06052ef37d854c3d2625cd2f8d3254b03d556a33282bc9ecd1768354cfcc856b42813e952734e978aac40616e7d3f9fd891ec9a2ca9cb6323c5f2d45d720618f58c266730a9bbe40c2575e323ea2ee1c2912a1793591963f64a94d9d03937638cf353e68b66c4260485fecd4fd184487915f794dfba73a6a4bc6b229ae2a24f4911691bacef431fd352c61aa3ab074ba528ecfda3e6316e8c71932f774522ead8afd663549d7f82b44caba14bfc98c6a34bfc9766811e3efc00048dc6365d62169dc9d5b96f9ae40a76ce398703b9324633b30561fcad31d2f850a3e8062b2a52fed8b1377712b942c64a1666145da6013e3fe79e7a66fef7a00761aede69cf71656d7ff739f79c73534e78766e6588c95ffcf2eeb27394a35e6d2c9c53bbbb8efa67722ef31810ab3bf166c3ebbd8abf5dba288cef3d44f9b686bafdf06af56fe3ee6ef5ef63b462b420d424f5155da6216e2f03601ade574f6d40d4a5a2efee5653dffb757796ea2a269ef3a50fbafbd3c197be752c478ea80ad35a6270ce003a2e8c8ed6e5c550df05aaab6c69c443f5a9d2a3fa35af1f7af88bfd0a584ce1d3308bc51447aa3ff5a4c36898c5420a22d5c5a8fed5c9b21efecb1af716bfa4343435404480871f1c7aa0ec8f0bbdf58ece48d0cbaf71928b1ac95192036264e60f81871ec705a24132837d88d28cbcc567aec7284d89c6e156aa1e47268b921c05bdfc1084b0c76808402f5f02d7634f72218de496f42c2d7bd1d7989a75526e54280d1bc9d13172239a59cb9bfe8d735e30b202c3af29fb8d7544cf4f8364467ee86990cc582f5b66402fa2343c137a10a5e1108d424369b8c7eab17e2483fcb3a839a07a0854ff2408c0e7871fd34e9470448c318ad8d898b2173d9299f9f163fcec67e26737224ad3376d2427fed63731c788df4089e23750a2504ea830dcbf6041e92872f31b95efa74142836426e5e3d3f8df28c024fa8cd22099c95e85d2a87c36333fa3342ab47b7e683a8592804d22da13fa35857e6b9d1025bdaf3135e8d704a2a44777fca09c788b7f8d890ae3a7faa710314df1d9149120213900f4a19f017d88d220714f93a33303fa49691c445dc75b9c72e250bcc5dfd2d664fde639160d019219f9d62331854052d2cc636f511204aec7fea234482804a82842be68a2891e1b1b93d3dcb4e9fa20e463160d2ae69afcc75bdc5d4909a61082109ed8d89882b011f54c04fcd8a90b047f4ba3922c991b956423f9f8d41b8fe22d2ef2c15c9365e2ba7914518d6b152c700e2c16ace062470318b5df8b0c41b9bb7711dc015544c10a4f3041c8172630791129c00255a332532490cbe22ee3ba31996bfee4f5bf8e4c87197477eeeedc9d0502bd04815c97e2b519d8306a0ff12b2b93d9cb5ef6b2f79ec57b43f40b646f88a833696fc244882251fb883fc7d79159d59e8b311dd5c727d2a5225deae7cedd9d837e4e795dd791e9aa0fee6e97ad63224f60988e6eaea078186e869b3a49eb34ccd6376d240bcd2727acdd1bedf37dd33831f868ede32ded731d9954f5e1aa8c0f77ce51b2ed12df2539805efed63e2d868f5b9ff974fb64bf98db74946a89b9351326980ecb332ff79b7b3137f8583b742dc6a9cf34b7f1c1f52345311d5d5fd6a5ff31119dda55bda19d9e6898e5410d8a6cde23850e1a8a24d48d993ce73e0db3bdfc34cce636158a247d463dd587c9e828420dcb6344131836a22e6532bdadeab4b482b93d1ba93d72272d05cfb973e7cedd31a4db9cfcb08a7166a615ef30a112a6bbc27c74eba1521dc5f1fe12e2ddd91d16ae8280feebee03803a57b56e07007fb4bbbb79bb779f0a788c605297c708259507757970a2e098dc92e937a2d6035f70bc6cb0b6126c0713f6f042c11dae4ad11edebb5d52dffb7b276b9454ea21849a2fa93b5630b7f57165ecebe0980e3f7075de6e1d170c3c13b30283810873b932e627b9823337b67986c1c2bc8d2dbd4f79b6e1975d54bf071606f6fb6d861d7e63f2b0000f3d1ac6faf73e348cfccd51956ca4d06d86bab1cd8be8f62f4cba4d5046e77c81a2db4885daf8bc6559965bebe0427855087fbbbb32e441fbe576b00d8eb20dd3f0288f605dde3f1bb6a14550df33f5ae398d73b80813e9529007832d3d36b22eef9350348a4d02ea38841773bbac983f4ec09ecc4d05f3026b02c604ac0a8af9dd8df685e93583b9ed4e43f11bd9bb29633a01eb2d458ac0398ad91c58753e60ee72d2bde31ff7138e669122dee25ae7473a99dbeed48dd91cf0dd22a13ad7c5b6b8af4275925a74c370e7ce1d56c5dc966df0816d70da3a3e3607a48d03c9d0860eb8c32be6b65ae88075c7baf0675a9ba0b6155287c2f4ef2ef6468cb7b8878eab4046757c46758e72a30ec3417fd1ad24e9f6a1b7e836fa48a168ced06834a973b475b8a12099fe5c44c76f4038e768041da4ef73df5b281babb3133cf9d14305c893319c701dc1e049428a1a435d9e247cb820526bd4bda28927a91469c73522b97ff934d8c3a7b0af813fff016b9a9466e93641bfbd3cd39ab2a776780be5e3016bc281d25ceb53298c9266ae877f511becaf87144906debb5f09c0973f1327a541c226487acf9594c30e8c9276544f9ab9be7a936332ce74bd749ae45de64be39c9fb9515cfd8bc9903cf64be9bae377bf94efa40ca2fa6f35b5e274bf15dd49c671771f358b2b748a7addbd4f6680f10505b7ffde7befbdf7de7befbdf7de7befbdf7de73878df3dc88063290cbb24d7fddedededddae5d7bb76bd7deeddab577bb76ddce378e6ebd0fa49b6e3d464c9a068d53b71faaea9c531c4d03aa4814ce7b2c1832f2090f57fb97090ebe3b35bc949c6bff2e8de28c194879fdf5edeeeed01db666fd6a0e2dafa065c5748d65f93fac2a7fe96eb90563f5dea354aa5b4737be593a03acc991dddda538ba740405ff4a2c201916dab8623bc86a61d64b0b93b162daca4219102012c875cd7796953ddf6419043d8661402046194885e9c080b00d5bb3c732c917a6d225ff11a5619f3d8b2b0644b5b64a8d4f170e03b90182a36488c9383838d4cb122962a472d67c6f81217eacc2769095332a4c9f5bfb2d0c6e4ce750b1dfe0832c177a8ed9fcab6f4c197a4f613a58753e4cc7fc8a0a19fe2e71e9332a4cf759103dd8f6e25e3656c23a4c05ec924bc154b00d50ea8fc9d827796919d69ca5d4b2393846cbb2227cf11158f2a5dd92525a74bbb7a81ac6e7e27355f590c20a425851d4f5927ed7f53e6e0eeadf26ff92d775496b5d1e97f1c2526ad91cef2d8bbe8cd11f5f6514c3e670efd46ff1adf86d758474e1bab0780f88d87195510c9be3fda34ba3facd7a49694431ad8739d0a00185949b45e96a705dfc9f16d7c5bfb9d8e675698274364c049ec2fab60e1a8c04c9ccecde1f5d9e02331fa1ddb577f77637b18ddca9d7de4d9c73bebbfb8325a46b31d45185c1ad54f92a8dda16976d3e54aaa42ed7524455c2cbb55095f1726d5650955756e575b98655895dae5d5566976bb24ad015ba6295a1cb3558a5e852b954e40b72e582e11a5d241a99d3b72eeea9ea3e50fbb700ee3910d47e1aa076448408c96142092596182244480e13bd53ad975bdc42d5fa2d86baa3db3de51a7e43da5ac66674c9e2768eea76daa3ee29ea7f4ad6a22dcb72ee29ca02a24b168f2e599673566f8e7e2bd2c6e1a71ef5a8473d67ea5fdfac8bf5d49019bfbf2548f3e19eb641eb5df3c1d58c6a7de55e7e33932ead18d63bca3e5db25e52eee992f5a020d3fab678c4a3615cb59ea6617e348cf57cb3398e7012b6e00986546b6327aae52ceb09cb52522d6b0918d57a725344b55eaae5b86fa0352164bacde99665f5ce542244480e13b0bbbfaff0c2a7fabbff4aad2f26c5f3373ea5817e2933b9d6c7848492617d5cab4220a8de872ac84261320c2b4c077ff75e38a936ea5ec1c591cad80ed50e310d3fa6b32ccceb292526fc98666ec2ae3ba3de610bf04a1d6922798979fd57edbe6a6c01ae52947fd6053e35645a4f3d7c4afed37cb0111f0c3ff39718fc4b6b31e6d63715be532e42396705937fdcc6ae42f83311a0b9a17042f830056254c827863540f85490092dfe7108a1eb138809520ce669428c2686e878a1b60fffb26cef6c30fb6f5cb527b3c615275a96f53ab65a9424bf07ebdf4b4a43e7bd455f4d65a95935156a3dae5a51d636473de7576fb1ef69b0da7ef0dd5db84fb6a21cd436be710c8472bbefeddb5de74e1f0bb02e302e302bb0256055f0e25456e2f6298aaa288a7a8cf39ea328a7bd27832e968787870b216049c0acc0aac0acc0acc0aa982dc6c496802dc1c7c7074302b604296049c090507911f7d63f243e2888c512ccfe7529a156bde55545df6c7715f663d5692b6dd7e559daae4b6c773dd657bf7fd46fd6a5df0d5e706667e7b0286051a08ac0828922bce4a76e57ed1f482c0b8659c0edee2bc8ee1878e43074c3ea9e0a95528960284e0b24b30bc3ae4c82ac19435054a5502aef05b7e2305cbb39babbdd3d866bbb6964dd5810246c98dd39827bc369eeeeeb4f6023ce5dac306a1f1b1b1b258a808019b61a0e507d5b2636eab65abce002f035a3fa8fea38ce44b2baf113499811248bea3f4741b8a8feaf4492ea5f52620ad5ff45c84ef5c711a382eabf8306d53f023cb2a8fe3c2c0185eaef830caa3f10394d6c8028b9c971721a22454e09aa2f0f135e543752d9953145cbc405a72718210289113e30b997a0ba1326a8deb3cd0974f1021f2151940083220e8448a8fba116554cf7553ef53496d476fc545247cdea2135f533f1a9efa633d45bf4e5bdc5631c798b3f3ad7c5e1684ddb68ae0b3b6fe7816f53bb4b7115d35555511535611258db2a2364b9f0572e5c2b52ec98995d64e6202a079c25a8444ed66439ea188d00000000b314002020140a8744e26048241896ecbade0114800e8896466c4c1809b3248761140441c618638031c000039021304233433508a0589b83ced1808807dd793a69613a90a775d743463b495de9da9a269f29ed8e65066855599faf8c69906ebc1a86c6bf657e21bd4277bad818da5b65b089e4ca57f43f65d1685ef2be8a3b1c80ddc155c67fa4b1c14208251f0b71e23312a5d0cf8cd76103b4bd8c88356dd04c42aa430badbfaf2ff9191ec6eebe1673cf99dbbc78604219d649c193ee1d900bab685bc0e0090e9211a23827c33299a50b281c3c276d19b3319aacf4e78f36bc43f093eebf0838e487372b2ff37b3b2e8433b3d0aa74175825bffcf7d4f579c080cf3ea2596d28ac7762c77fe40cafd7b002bada123f66cf7aa191dccd3a78c496574a3184953329976b56aecc9a03cec0a9ea87b1200a9a6c3c6b851d9fb078b26e74ba42cf96dc0cbf4a806760f4e9d2210bf52163d194142c64238fa96801cb4ec94a9228ec18c8a60fbcc4afa543565704a205594dece605def945fadb81beff848601a786c8dc60200c1f987bfab6bbd60544b13c1ee82cd5ec1c8566c6afbe67042a034eb2d56f0908d03456a81091a915d6774494d6545756c8de59879db65550c5355c684349d4d94398657cb9f3244d4fdfa60a2113785befb9595c52134a9c92d922e83d41912baaa67c3c433756632cc46091f8b179fc00b38fc1ec3cf7d828e5a365c82ace4b5d3b16940b909c8e739499d60c24ec66c57b36c250390b11f718d9a6b3764fd16564c7b8c0d90529c7d64a8b8d4bff9e8b7425361eb3736bd520bb28bca78538f6fa628172900a678cea7065fca558c3d1c968ade68709c93918492b994b14d43d9873b88dbd96dc29eb28ac8e0fe392820ef04bff45aec8956826e35be07087ed80f6fbdfca1ac0cb7a0cacfcdc3cb4700fd2706eb5221c1dcb607c91e4ad53aeee55b52508a4d11ebffb00035786b7dae82506fb9686fd4898a4cec1fac283021d49778f03ae63fc56b661f309aae924e62e16e5494555b650ad745f7de9f5a6c57869a7b514c2231c78f555b437ba34e28c5d7d895a230dc853cca9afa7d4860309522fdf37f85fe23a5b482aff2478e9cad2d6f2f5832b091b12535e8fc7b66e5fb56e9a2a83636c8dac6ffa7ae27510373f928846dfef11ea418f1d6b7126c82ddb44f46973bf48c92c2a9ead20b4dd5fd7336c182d573defe5ea9846cda14214d7527f8a00e375fdd92d7772ebeb049dd78605bd824d047b8fc3c031c482f1b052c73abd1664c2251933d9806c070e8934c663a270b236e52b521622b5a7847ca9d76b35f881abadccbb06986fce83e0e495bf3f45771f3b3f50a0910d087579052a65e30a5d6a6070e124b1f4218d5c5cc817927254e1587626ef69c3016d1bd1d4b24ee19d253fe448cee583e4975f09493b843b2b8bf79559e9ad14b6b031152b25184dc00af3c84ec6aa8e888c8c34421bc743612d17909035f12a626769a6bf46d15df0aed443e59174a2f33665fd9cc863b92ca453e88abb933b1eaab31d3ab1f271fc248c5092cb6130fe04b5352956dcb941433ebd7ecfbd3581bd1c243b792d175203a520c1fc941fdc1d45f713beec89b2cfc201d3a61229ad72c910c7c45bc1fd8790b422962936b5e81b51f19b3914e30ac83374cd0f6688f3cd7c081a6271a08e911019f6e2f774f55a9417191edc8d386bc0783436b9c37b4b56e07030b8d77b313007f58b6e09a34781a329e98b4a8ae9677abaa6ec6e52a42160cd934ac3f8a27dedd356cec127aa3bbfaab7780f6e4b324205ad6655d7de7253a47277ab214d85787fca4f44c207f79beee9d21dc36fa33f5c983c1cb08162d95c9e6f5ad8993c1e4afd63a981fd026f5ad54a0036e28ccb28856681c924cd860ada9778914cf7ec5f1c2b7206857cf1802cfec13b14c47cb54e159ae2699bc84a5f0e1ae90efa3b605814923e28075ea6a9fccef1d739c6731f8cd6563fd88b8ca8cef969d4f8d89bca01bdda8d2fe8d4f44bd1d42a18657cabd62c8e934ccae51327056e8cd1f02c9717e3cbaf75a818272c938be03948f8a40ba4b54a328857c47eb462c5ec907b1f2ca020500e821ecc8fe090d9c7900974390bdb3e458f6e0195460387e267bee81ed887d5044f60803c03abb154e724936ce9a748d50fc861d617a6a701c92908645a019cd203dcfd914e79baf706674c204f4ea004b4b021cd351c7b02a1385c38f5bc5152fb57fa2c19973cc5b399a459aebf4dac738114ed316605de2ee3a2b5d96348e5434a2644993dfa139814280943bdadc882589411116bad456e804f18790ef78de81d2bf971bfd3dabecd09e10775d75d0e2577c07468b37a475265a05a611636f1f64d7342c515611898d25a8bd1758b45df2fe41bc61c40a88c960be07c09f88e74dc3da6b83bdefe4342a19a78f4dad3adedc9b4cc97acd8b4ff6288c47d11cae3158d53776a23d5c6cb606351dc2618031771ffd2903afca20a5fc83fb94d381f013ce124907108ae325d863e94575fe49cafd00d0cda61f2028f0a93d18c7bba9934710d88d9fb3c30d9d05c2bd0da6ad71b3f8ce9e3afa0d7e8dfe8ff18e81ed46afc41ac039de8d1bf49af5313b4cc90d25531340e7889d1a9dddac3e1a33cf6417e92d3667e4849e7efeeac1351f0d91b21dabcf77a164ebe7126e6c87434752f5a7ba3a422b7b8ec909222dab99980514d9c70cd0bd56117b3914b6140a988f4d2cfc850347286e99b3d5d80374d7bb59938f549112a8cc8438fb8056de97b0217fc358390e7bfe10a9b32ccb0b639ba5445e29c228f90631c69c6824499a42fa9d00117ed5986191424fb81ce4b15357e9497126a62734a89cb9b501f1bcd4c60c73eeb26ed8bf878856eaadd2872a04b8ca5361e7f7f11cfa0f4f4a6b0c483cca244560d141d245c7b750409cfd85189c3276286e569f2ecf07f3a82a86712b69bbb754a3c203dcfa93d84c0736641605393be7c93fbc75ed03773ee22f9d075af6ca5fa1a3e5c1be67e9ed9af4e157bcc4fe8cc157b01803c615cd9067af0d823053b4f39164a033878bd84f088d982f356da43938b67ad9d02df99f32ecbac12bb4fc6c6447bdc9ce3e166b865c42cc483bf0079c00dd26bf0566f96b1c17712a983529ca08baa9a3fad0666af86d27dd71b5caf5a97717653cf12c52ff96a656158eb5b6e626d3c84fe38aa9e3f40d304147e5897ab0ae500a7d3efad2cc825196cec31e09ea301cab441f40635ce5690c97a6654a5b286b27f79b60a0b819f71e8b2ca9ff74fe5596ffd7b14714f782373e4d7475f11fa046e36473efdf417a19310dda41804a1830724a23b7c604a66ace8826b68f735f18bba2104571788f59f965af3eac6477ac0a3bb7aed3c600ac81197004b31a602691776f4e83bc03975c089fababaa7ed26377a00706b2a9908f10e08de7f9b790546a35d3a76805458cc006001a3737b971e441537ab0a59e0aa80515cdc68550fb93645a188db0b33a6004ac23c45d4807966d30f05e0cf8ac019120dc82e53d69284b18807ee68bf7143a0200851e4047fcf950f02ecc880d5a6c5659505d016e23629d40236891a72fcdc49d189c50d0b6481145900a0bb851f24cc58fb700a3c1ae49e9d750c4f40a1ad23920bfee856cdf7ec1c7bcb3700d397e20151ace2c22968798a1141e0c480ca084adb7b7d8585cc576050c832049c8822492a04d87f0da021e3664526a806add60ba0b6b9f2c541ac3e838b3848e82e1c290e0cdfb0a15a67645473ec21f9eef655c619405125d05f3ceab51d33ea2130b84a50e9f216f06e5225fffb4500f2db4c40a625a3be266307880a35e88a415144c47d3a601d150e5793c8e53f77041b15d575d6c3a02c8c11646bd0e3e9190364438338d1f5be9a6d3ea4db7ce85aec94b92c17b5fb03f600311ceeb64b3a966f6c64d2cd828b9976bbb138fe1463ccd34b5604a752980f3f7a4ca185cd70371f5dd6acbe07ce2da7777e7d42e81b841bcacc3fba74770e42cd0af9aed78965680f8f236ff3be5d6a7e6309abd9cd781862abaf35de59fc7130ddb9c02b42ec7574677219c032fca947504c0fca353c99a7c37217b4b3220b0d703283b807a232ebce76d71710aa83aa88c8e28fd19c909e8861a4626d94e1685e6b59cc3b6461f312654f103864953f994bf73951bb98a3ac56a6bcfe485dc3f745464abaa662ed7aefb100e762af2ceb3160c79608865e6b711cf2632ec5d58ec765e88fc6934577e168632aee36de16075733948144d01c8851fd26f424dbe71d4fb8fcac065b5623fc8063df20fcb775ac20466a9b347301a70cef06e434043e49399b278c7c15fc6e382600080b84ef72e9dd62d2fef09b40e099824a7c899965f693aaeb6359d8d89f42534281194fb13442715f76d379ca97d30c95af7eff0552f8f5e5e1d6c93b48b1efd06de40c58ac1dde07ff838f254831165f4a7d4b9c439d1690bd2483990f18acf6ee5245f8e6fa0300151ef940892947ce34de9745a1dfade253235e973c3aa91bf6adf9cce27af4a63aa629c1287a9bbd14c4e58a0385851f6b6be93d3d9fb5816a1db8f56ab34ec1d22953427c93a61c8e2f04fc8d64296b2d1a6ab701430be69658052b048809ef12659c7dc8d29ae04dc706e1ab7477e0057433c8cce517504792d9a75652cd1d21f7e7fd978ad17a9914b6aafaca79cc0b195977ad96b8ab4c0b6c9f1f0d8a4e5fca2b7620c635eb2fc8de778cecce212ecf7ddff47b249f6413c93496411a7019e73a66210554a3b8eb53d5076625dfd8a2980415a0a24d73dc5689c75efac722a12d82edaa4fc8dd4cb621e5d116c6e41e79967126d10f2eea137df1ceee6e8e51158cf0cf82fcbd2a3133e676403bf1d04bde237915955c9388bf3d33fa40d0f3c0490cfd5a9e34b130724ec433393b88e51c377f755b67fc88257d80384203d8af45272670519bcf8138957044d994b43224a10e00eafc0defe0eafc796a3fab6231355cc3cbb0380e53ba29f6fbf7fff0d032ebfc37ecdc29ad090c12418a3a4c4c6b3bf17eea6eb3b0039b62907f7fd3fea9b146778b349674e1c36372c34ed95f255df403f34704ece00b64d15b3416fc86eb8a5bde6d4f7ddbfef9413091b9fc1ef6437c3e3bb8ee8ad43b1346bf1c4ea87a8f536a1bed8150c0440a9fa66601b84b482cffbecbf3412a99f208cb02186b54dfdde030f0dc236bff5676b06160ac98025fafa80f48d1b82db608265204786f99280b34652686164c72e8d0a1270250110b01405708cdcb367c112169f28462acd78688bf2abfc8d301667cd09d092233d53f49ffb41b22df60e74ce986b3b2e8fb381ace1974e71237e6435f807d393aa056e593a18559ba668b80c3d647935ff151fbe7efdb13b74fdce8c01471c13de2715c71b0d0fb8180745f1094b6560a61a099dab11b8b4d965582057114004571ca057df213f47506810830f03160fb7264d351f2529fc79d9f3b309f11208c2513fd2374a4f865d02ff23cb4d6663ae34df1eb94f44260b888f5ab91f8b512ff49602e31775274e3d06fb9ba1c6006a2614b5334260fca867c97f00a66c0cfa79ce0cf7b514f0999f6e3c8c122e27d8260890b8e4604b12b462d69ff1155ffe50d9cacb9180efada4331b081e848345838d5d4c93c0e08a512cc809df6f1514738e8fea8fc1ec99d0137ffb3ca60fb65d627c0343ec80a8ddc3c31a5c5ae6ab2ef4fb126ab320046a3cdaad2934f4c6df98f6f7a83c4ebe5ac637290753e5847f541068d00cf612e4f9328c6d67cdef853b4d508bcd8450a1138df0d345d86169de81cd9a0c73bc16c986ca066263cb0ac5948cdede9268b083eea8750e86f4f8849cd7ad4572b48eaf83fbd39b5c256880668e43a2bd7ac6bf5dc4f9a0fd953fb2bd6a13624f6cde7e18b55a4a794501a904a69532e80c4106567970b27da7083e3e24c1f7f0ffb5b9ca204b5ad4c5a88469b98aa8a44eb4e618f0ac846c1c3f133aa600868c0892476d9bf09013cf5200e224e93ccd03578a7b4ed729c2889bf6338991b3a235c11a8a31aea5603180c40a12ab4aa02584c40511df4aa431846a0510d345510140ca8a20a3aaa11440cd0510d5aa69a834fc8a3ed350b68816b7e84e0b57097c8b5f9df7cda383bea841bad7949576a6584aa1f5689e07f16015b4bc869ba3ea6c24755bede20c98cc7e6b6eb5716d19b299ad3679334bbdde415c9685db90efda96e01c305a1d7f8a43228584be2176c1cb05d74e2acf7d239d5ec4f6676df80079c07406b03e86b2c73be7e0805f641cad0e3d2bcf63d9f069cbc793d64b66e98365d4d22dc62fec07c6cec44e5584dd9d5797b4c1e88b4a9bf4182c76d134bda3f6a2d5b60bc20ce9fa212bc8534c207f37084d2d7d4a5f18ad45d4709aeee39de5927411bc59592dd2eb3a969e05ac005d743b146acd664773cb8032dbcf6d06cfb062ed3d8aafb62107c182b702637f2f63cd4201bd1d284cb57f6d17ace3b66a02938786e294bf15c6689e79a6766dd26ba8b38d89edb5f4665f876ad171c02f27e4da029f048c7173480dd6f6480771bd23d4f6e5ebcd70e8370475b25ee38a18c431bf0225214c004aba820ca0a75aeb2a502f85f612db24e9a6fcfbe2ddd0661d849cb4d0bc950a4623e9e8bf3276ffd85e21fd149a85af8a57141502cd234d565d702752aebfa615ff37ee59e22ca55f41c9bcb0dc259463bcf41cd2432e3d4fbebca2baf528ff111f41f8a9c056b3ea4847d3b29ec5545dd49f0a93f69c3365f6e44a411634ecff73f87f44499506a1816bae70b0d0c52ea26b76d874572867315bb1d19ad3adecd5445e1b191e5644b2abdbd0ed48fddbe043da394b2182cd2d25918b517d82de7f9a1fb8a8008fd532e2552c335177b6ba081e751cdc83dead0a14ec32065870a274a82007f680845d59d4e70eccae8b3bc935fb87ee3620011e5a81e78b456175a2d0d3bd3d49b7c1b8a248afe1c3bebbf2fad7c43875d70368cdb509530304705d35ee3260b08a0d8a51bdad1a814c723cc88ef0676ad2f95a1910ce83e68978e8f527a4cffb2b4adedd9a8f9a6602dd59742e167f2f588d8822afaadd45585a21dacf1bf0756aec0cc2c6423468ccf4382bb0aef11ca86491d7c62958122bd87f37ef1d63eba2c38c0ee3edcf06ea35906d0ddf0ea72549d1830ced6dca0ceec29a38584ea5d271694181be91f1eb76b1d434439493f9b82b63994d78a82f2f1a83f56d5c2f3c872c3b8fcee1be7822694e83836c3cc78055abe76f2a36c33c1826074937182c59c49a175534b017d0a7f63c4ca42a0a2da1a840f1f5149539535b044acbd99f28990a28520c6b6b382d4be629db47475ca8443bb32e93ee913f09c8a988b6641f63f2ee90c1989f48a227b04f633ae82c80a1993ca3e7bd2f85d21c072ea973e4d51c90d51d334ddba6380aec95774adfc37457c0715ea20180114788a0bcfbc9df1273ed45e87afd54ba76d39a89eb1eed0c24f0200019e7528c744bca1c7d4a6ea306eb54831161c27614b1a5e673bb36f9996b9a903e3eb3c72043b1bb4ab97b71c561114059eaf8c42df680ca119e6a9d6d3967ee7e3019514dc9f140d2bb0b16d3b52154f032697c77f458d1144120b1c313e21a5f2a9006ec6846a0fb8a282ac8a6c228194c386789f40ecbcd16c9d5132cae0b2ecb437ed3a291e6e86b6e31c018b8652015300dedf713e03ce370b33c309a049631b3fc052aeedf0dc1f1a711beedf9522cbe2926a2ca93bef4260b9aac2e5b87bbeb5e8bfd284a52bc173bc19ef087beb70331594b63ebe3db1e6bd7b3eb0372556c3681f31cd63464363b3a3b393d22f35f22b92fa5f652121a1e0c076e8489e2d772cba8bbe9215c8363ca9fa1a0795275d418d4263ebb9e5abc001e026be43009c904955bbfe7394112c34c8f888aaff7c516e7f0100e12d701207f137d4920414e371bbad3e28783a3b61880d2eeb072501247db3545d40b207b30a7df9f27f8fb8beb01e052b548f606b59ebc3fc38bb654249c00974762311b0a26673535c9532d9d4a8ab45daa21b11b10b28e7d11be8447b5a2be1888075e2afe0ab8a155cfc801361631a567362cbb16c72c44f36a2c5842cd5b7af87d6e3ccc3dbef1fa006dab6d4774f898d6e8c17b6d0c1d19a456a9cf12d37097a54cfc82d3740bec8aec56137bebf857c26a5e18ee80fa491766744a55759905406c20337e60c48f6602abb08f6d9f55d6e1faff699c3fb2815287e39ba6e1eb4c59927e628e7d7598fce7c97c876b94be4f49d43769b3249eee290fd5b670b41f4b5973d5057042efe841fe0d6276ad9a6aa76421d6304684762b7c74a5360d4775be3e4c4e9b3c771cb708b2b6a09c0101b210673b0f6ea890adbdc022f55998a91ed24d592d35a5fb3d05ecd8eb63989b4227f3ca65286937966901fdd98c9b1a3f86de1748bf89744db90a17e0321137e1c9afd059534d25934088d30f279ad9ac2cb5a1be7c86977484f39d20723b79c903739fe66c736bc21f01332329001724772fb00c1f1f37cfb6766aa2daa8c5b85c34753a1346dfc31aa2da94f9f78eac5873379fed2d373cb1b4bc5dd103511612837301f30985325db36978d0ac6bdf6c5f20d79008491a99e28d2c92763515929eb0557e106d9e9b97c6d476d9f08a13d9ea8e37b245630d85c0f22d00285d6a6eb57008d498e119a8163ca4aecea012829588776133e42e7e398d0ea99f433ceed83e404485ea058294833b698553d2933d078bde99dbde27f67a33bde183f0dcda9e015f6af23f04f5deeeeac31e0c30a9acd70bbf1669add5888bed1d6a7d1f0fefdd2c38fe5ce987c8a815d569505c6b66fd141b4e1f2b0516f8cb648fed482611b63b1f0cd2d31c79a7aaf9aba80f05e54cf9905228fa931a270ecb343578f347a3a6d6c670dc9217d94b921ae74f8ff9e78b7f5547eb23251d18cddf2aabfb7d8f28f75da375118c6ef43dc35f7704d862e166dbbb32314bd35c580d84f9ec646935dcc1aa4803a1b010637b1d0f01bee0a026d04d53e1c62581a69f71d02c276ccb0e9387b1566f8415d5a5a6ec2d0f169e07c37baef11bc1443d9c704bfdf452a30ad86439e6ac447d1c460d59a8e1f8538d1ffb9c3bb41f8ab885353e31fde9d7510578c51fb7baa84a3d4ddf3aaa2fa2d756f01dbe10eac1bee42e8507dbad6262d4c8600a90ca31da8286359725f6a40f79ff1cee634acdf03a2b682cac05469406d5651807cab03eee79469e0ddbba225df688ac7ce6c50a64deb36e7d623a0b65766a91b15bf3b18dc85b90664e5b1dcba80b4ecedbe86f3d8ed91d0a61329d8dc12619bef2070f9d82a09d746eda5d2e73ac27c56acd386d75aad96216022effb172b6518b8e1651f0d519808e653694d01c455cd575005a6e6a1ed0bc0771d04559e4ef8e0f7e2506be7c6b704916fb55c3e0c8a3c63e2d888fe7c760fedc18b35f4d0c3ab3c5b0869a2b2e2076040652f5428b9f56e9093709084702b1fc34dd189f684e1e5a576fa2edd0104369a10442bb08b87eec233cb8d8b7f4465d0bb494a485163a0f48230a29716b70c091ef135c00b96240308bd1a749280e494303e213ab19fb89b2fd5817f765a9eda49402124bbf9a9a504115ba91f7f0d46b5680f64db1b32e7c71f8a28711a8daa1c32089cd91dc089571cb9d93b00f8525e329b3f04a2e4790d79181be0c13f2095374f62999856b39110db3da03e4c4f508a95a60b1596983bea6e1bdf543b2c6f14b185ad1d93197e9d9b12abee2f013ce31403437bb8f9170948c467942759fc2440d4cfcdf6506708a10dec362b912b5eb103128da61487643a52080e98e98d7cc03d37d397593a4c3e9213f6c5dc223393ad6e769c997b27da4417452d386d0a4989ed6051728e2a0306aa18216924322e30bb1c31503693f58ad6a5bc8370f27686aee42b07a1f9a07a84d406b2c918c1cba09b4d6731803563dc7a2a4e52ac637eb31e10c2478bff627162acf450d5d4d169231ac2f7a888737e002229ed992a4a6a4fd11f290b1d09a352f6d52eaa433d8264f8eda7bb4e47d818eb2c7f5b489afd16cc13794849b09093608e036290ba16c9762d5034947b958e9a01c05da8d14df99358ba245f04072a561e441ff6051208a0145beb08b6f9757335a4950ab29e0c8caa2a23085af116db1f1b62438e0196fcdc31abff69f5039d95ea2df6d801c55ed5e74df920c2799ae02b2a46ef3360e74a226e64c6359131d060285eda8552094bd11c29223e552fc565674783a6ee28e315c4339b7ba37ec3dab5dda8e5bfb07e99285b0737f0612f1b05c0c6364932036073f84485d834b5b31b0bdd66e9a8efff024faef1fca26559b75c3f10ce2650936d97607be6364254adf761072d85e40d0402897aedc448f11eec9c031c613f3998474fa1ffa2c55083b97049d25b96a92a9715986339b1b01c3caf6ab455045f9321d313242bddef8b7c3a212c4d76f285539b3477e08f642f3ab3935d306f0d14760c54299f4c7e92ec3d6ecbf4e3df641b0a0cb0381c782d2219f3111a5644bab54f8ebbdddee268ff18202678608535c8b14ce33466fc5c1f5c38c9140cfaff865ed12e4ec64c1ecdd8361d896dcd9fcbdb4cace3d6c8aec4f1225fe2bff20dd30492bcb52ad6ac25e34a1e16f51085efae85759dad6448aacd80224d68d1f5aa2e72ca019a2b1f7fdafe9ed41b43e4d9cab170b5c21eecf5ff70f6deea44f2b14e84503f3d8069d3e95cd2e7b88cb5ceec5018e4e54a2d6144a7cd5db3ed1d2b1d67e26f8a21bb548af17681ffd4a7c6a8b760c7d331964c23ee8d755193e54762b4f72c81a313c15def1046399048350fd167ecbf754bd9ccc3a560250a7488b53296b697a65dd8069ca1bf2e3c8835e4ed466ae86a1eefda42c06ae57e8aedc4f413c2ab56ab898da43df1a3c19dae25988cd5e208323bb0bc85c327e5fe255b5885a3e537253dcb044970135da4db493c64d81a9ab969dcd21470a3992562021026f1e276c1a32dc27af8ed3c8e1100d8afcbb546476ecdc81db73486fb1f1dbacd78cc141687f2bd20a767c555a6e943ee98d30c2d734603a4bb583d12ba852fde202776f84c75ea81d111ef33af2ae48f7d2aa087856d79d48aa4c30f2aa042774d08c79a4a7661cc297db3931f0b86ae0f8e723a6bd5a7b5697756a5e26c8b38b20f38b3fea9091aeb6b92ab55a9364cdcdf59b8bc2e30126d1101a7369c85979a5ed0cd217237aa33b805833e63e1c09228761846921deecdd0b80e601286f5b4832e41da0c8e0fbd1903dbddd41da51d4710b6922e1a7e87f3083a0ddd32e76109e68cfd9073bab47569b1893870be566251940587970182d5bcf9b0d0be93d6fadd5d53c8c0a24e7d072602a398816c1efb96068592e9574e1096cd518d4a4e339414dc21ed2a75c7105badca0cd6145f1baf7384b5dcb709628767923b95317199f7569cc1f12fce8bae1e643af90b343f185fd8fafec5f79d71f144edb39b53d50418fede318203d01ddab3bc6ab734c4ec29c32f1fbcafb3106e4dc457360d936a3bd9088c838b2d2fd23caa549dd35816a02bac7089f821703d9903a09694cf4852d8287ba1894870ee72f007cbe0da5366fb65fd9ceed479ec818a15306f08dc0f1d50c28ae5010d4f155996423189b924198bf83193e2b255b5665b00561542c723a1cf95b2eab1920e6912226c155cb99e4c9b0ad13ca26cc3e9a20d468b3c280a7fb6d48a4154a79fa0b8efafb1140e2772d38d08b627fccd3158be2891c6529694a82156a409c85284c93359ea83bcdd66cb45d9b8f655baa7e21f25f1a79672834e56173cf5e20f678992bdca6af260b83bcb8e0b54dd05c5a7301f110c3d990db9072934ba0647df8a02719588ef63527b76efbcf94bd3089efa4913605021f80b121331b30edf84b8cb015f9aeb5ccb27def315614f5b8931f851744827c43d0892a0c67a570dfae17d68d77663399553b3b19179b0965d63c1ffc7d0f40b3049db6dd32990309cf61603833735d7bfd0c03322521b3e011a97a1cbb58726dd4370ffee94fb040e49649c396b9f1410323dda62b7591995e8f7c0151fa7b69e8fab593a6f82cd7cbac0ef01cbd734c622b943ac606f4d03b93649abd7c2fc2e56d495b9d17f9033327f0059726ba59b6f1fb9bb045e920be1049170cdc1f0b14fe063a5cb827c370ebf8284afcb8bcdb30c0e8ccfb148de801747afa9ae26286f7dffc8bede1b2300f6399a52a9c1984b2503364e90e0e61c9d1c9b448f97e5b8e2fd4856adfdb297cb084240fe0946b72432dc7355a46e02753cd8bbe7f0f5f76e0edf6b33aa2117a698c836bca1db3ef2c9262e617db64d4f6328fe755c569ab5cc5b2c3b6d8299036add3c0c01b23a34715a2b9dcecaf5a2f2e69ed623292ca1b81faec789193838d06c3dc5862e9d86f96ea6dcd3fbabd8e006000d1e275441f560959c0612ecadce24cb0b59a155587f5284d1be836dbd60ab499c126622db8affa7a2aaf3d4cee1d0cc72817edb8a2f9755742b22a7a7b36e44b070d36192d33f07ef78e49d538e0fb40140bd2093e6fadd8a88253173d34ba291f4bdab14e7ba88597e4db03845d66a70ee9407eef4dff1eadaee77c9f44ad632aa49c504df5a8a9e7a92403573206b8dfd2f35d82293bd4370b5e44b402463d471c9fff82594b298a3c9b6c8c352671c9cd5c95524f58bbf80a3e72df751313a3cd431ea929fbae8b60018c62353b3238c0d24aaacbd45500db4c06a4c5a5dc045ab81fb89808882f14f403c4052ddd91e6c9a0370dda41ad732af4964381692d8a0e3ea7496d9ab047d92586adfd6d11208caa4f6277647d0b4f16fa648840ff96412c5214a93068afe1751b978835bb3b5647fe44e0489440d4f89992575ea00fecbdf4bb73199a2fb1e59615ba14f401dd09c014b4e07c43f0c5c24a822cb04b01281a6a9d4c4f2d0ec530b3ea3363f7071a8a7f6650d2953f56867cdccd81946bc03f1a8be3cda2b228b4d5f29d65d47bef3b86b514c5bd265880aed2895f78b47ff161b67b081b8bb0506ad00e451f16c8a8dc093f779e1c59480795f8bd88d9c76e29ac74ce124775cb600d36d89402ee12fd117141bf99c55e50be362493bfc86d4290809610ef4dc023fc0725c4714dc079655eb79610b95e6c5210ad010b710611640ecf32d1a1ee2f88aebb9f66c7875beb645215aacf56f5bfdc2e8087fcb68c860d946b58af2cc6b72f79bea905d75195a321bea7a960b75faad7493e0af180dfb92fcb37876977a54d52d8db374af2ef32d5c17b06be145c263e15c2dbec0d1e0aa315803df036572151d5aa2e89ba8f7112413255088e651adb00a5cf6798c0c3643bc5d392964d6d1c1c9f37c92c7b33a9d881da0b6337a13838665f6948ff70c49bc20ac2382a6a5307757436fd1f1c5ad37c8283e56d3251e8756862834e8369db8c662113ac20a17302452a7587cfa8ffd0ca2bf3e2d6960d0903a16b7f6a20a72e96e934c8a66f6e620385d81b94c1e48464dd25f8dd729298a8f0aa1222003cfec1606b58d28ba4809140523e8de6f97dd7803a58017a685153e851c3c6ba90a2435caebdc4f21015ba2c78df16dde09140e22b5eb6615eb4c741d02bb8726fdac2a0220e45ccf6b543793927d73953dd265b18eeeefb5f851475eebb60ce058acd78332221f14ba4898f2832baa152eca792e53edd94b4ba487104c2ebf399ba2b7d85f08f55a5c5f020619f0dffcfa76dbeb885ff63ca46f889201f9fc90acabb51c84f86453d152c71dabc1cdad08a2f602a7d11587e1927268565292e7243c71f0f2e8d71197d5af25acf119209b892e756bcf5eaa3ffecce075916f4575754e3e4a5a60c17c931481cc0e882644521cf46047b1533424a86c1eb647df5437a11e41a47472b7d9dadf46644409e2c43e9ac5e9de55e8fd33718a65421435fcdd75853e9423f998ea6e9b679f8cc22a79bb49a0d24fe67735d007266e053981629615bbe8a51b9b7b5a35b2492ffeea0301b6aa5b46b62dc425de9e86cd419ce2e7b305f52d768aac1d9cd1dff38e3fa07a81c2d642619e32141e8d0e2dfbd23c6e62cd68c7b81a8f057bd513a9c6125a45d2b737b0ce4d9022163c0af82e1c4aa3b1538c09660905e05c015a6dbfe8cdddc0cc659d5937d8807b5b0bfea8c6d61ef623112396ee63291fbab5ce76de84e631693dc298ed35f708e3de37cefe493462795984478f76dca4685ef410b767340225ea8578ed13f713b36faf89dae9624b7c09b97aa3858c4d11954233e129c487bea9bb066a82328589dc45804ed669b8fbc645abc306f639b36a227b266c0d310c8c17243d54fc9ee491a0cdff566c2c7ac7501af5db6ff9513dba0bccda6b526b7a6cf89f6507d58fec0fb692d7dd2493a51c29ba171d0cdcfa6baaae70ac5d027d22f6ef33199d0e1bd8bf90ab1d7c08b6a22d8dd6a450321ffa641d97990ab2424ded2245021216352f028dbdbdf15fe96037427ba43dd988b6345a93d194a30f1950fc042b69fc5f63a43a8d48b61e582dd8462e4a8167df1da6c27bf37429defb8eb172df8daa9ac9fe7bb11fb9287e0b76771444715ff6744bb1e8e0225c469d2e4d45dc5ff6bdc03e634371fddaf4194f39d1016b95c0d9fbe66b53925107017d94e99d8b2fdd594b786d89fcff6bfd970b5095aea31c75c2ec5e6c98760e18ed28c3e6c863a45c579f19c2b525431772da5ec81a0158ed0b95222be18e93180007c278a38dd01793f65f4457e75fc82f0446207b21f989dde3a55477a2619580160eca19d4000ec395667b517a32ce5bc5c13ee2986ec53c0e93e51c8eb56eeca0ae19af0c3d4fbee64803dd5f14071682cd04216b94272993d80fddbf9b7ec827929d2e8ddc3326d3f752975cb3544a095713282d8497c49b412272d2d851556eb34bfd893be78b8c9b664ac228ef455d2f1db89babd58ce1ff9581fccc07d6dbafb2e110a8b239b1ac9a845b8ab35867da099982f6461fbdf74fe915f0cea705ecaf17c63fa2d950e9cc2fa812298224478b54b6a9ae642095d495522481a262814f26544a75f352c79083682055c954ad63a935d783915e18b4bc28dc5da1b0e5209708cfb8ca0b252fa19862ae5a15850b3601bdce0763d79924b4db11b79a066c5fa7e87e6a48c6edb4443a6f3fdde012116e96255352b19f348eb4c33945f476307781ed390b7cc8bd1db861801c081419bd1d6fe3be6fbaa61378bb9b4b685d1a14c1e4fcb720a37f20ca48dfb516ff1eaaceb5ad61467143f7c5a1cef9e0cfa1bc9a5e551662dcb3dc48def93d49f7577ca619017d4ef102f1a4ce6ee1f5f04f50f2e489815785d08ead6dfc8a69022ace00eb893e1c52633ee50ac8937127f25775bea546612eb44582b510f83dbc19c485f5cc5907547986239071f9a047440bf35384c0198716c34337adfec8927397fc49ec9808ca082f734e24122a0170c486f0d639afdfcdb9f03a479b30d7c97879385dcc0910a303bd3ad448e7a9d89c29e0d64f720a3ddcb61fbf13f16b40f583ba18a8dc08ddb52c56d79f3a1619ffd8c8c8c84789993585b79498801e3481a28d4f6ec81f7bb71afca779d7950f076a6c9d2c1f6371d531d3138b90435a5c145837d09bf94933f5b01d3bd36de8814468c6b65894c532d142e02090958fc0e4667d6c22ead704e34b7863b18d625d77cbc9254faaa4ad7966a13517c1054ced20d2516a1da41e462668ee06c350c4ed5d9b45387490e2609a983981c3b27560bf68d599e10171c7eb7cfb34ee9e2fc08244e8e2c9bfe072512d7a9c3ac4536121d241f50839f47d2e025d0696f91d2aa0587d5350c3875e3481c4e29cd45e5391386b0fde15746c972c6a233e8b5b7f2bcf809d9a31d4c4d350a3c6dd436325b3097c13e93f044afb352e45f50bc85a96a1cb4c231501b8c924e4ef8634d1338ed40cf76ca1534ce0e70f462e7a28ab874fdfd423226cd6fdc6e1a2c47313f153f91953f1a82ee5ef0faddf8498cd8a6f81bc98c0b6844844e14c5505d2f0128aaab7f6ca6672be953c401649d5ffaa90f4ea043001aaeca4abcc5b31b7fd6a660b2e453d48fa55825c258df7ede74ba191430f6961dad91fecbc66756731358df14ad085e86aae2598e372161f04d0f5af5754eb521bba1d9888ea1527a394d0ce7857f2561d540393af19d246bf905e8aafb114e5d241d534ffe9330ec9e1353a9424c29abc2026216af3c081a6e6c5d1a4aa530056822f258404c280ad22e32788e91533bb66ffb9fe1f0b8b6bb98080bc37fba35fa5e5d576e30774dc01e8a83288e945684fcd406f5495e61f22ca94444ef008e1172fd9ef18bf30f86f12e221149a34c0012db7e324f01d0eb368f41d5705610be0fc4618d050fd007ae2e4339974b82433b4eb3a76cd343e92a8675acfea47180d04e0edc83d49c96260a32e12184e2d6016f5fdebc11e8312b1a7f76ca9c8611b46413f266840aaaec3ab0f12a5e9f4ba80ecdadf1a3d0db27c2ee60ca61213e2e6d1573168a22b6395d9f9abbcb1a852eae86e9f2ffbe281ef164ceff202033f2a7cf606cfce4e63c5d8b6d13a3b10439aa74a24602c6ccf5e40fc2916712ffb534c7bb3dc152a314891568ffdfdcde26a8723b12a3db17e2757343d5fd1a62cb2ac56f521c783999968af23827ce4e5d7699aaf925656a19cbb8d5169a9b367405528ad7997b92e64db9fd281594a8f331451e0a5616a1565da967f60b4623a4c095d3d358c11b68f66a825f930767e1bb329ca74aa2e1bb7f08f6fdb6116161c6a91740cbb3af7db482bbb0d6952bd3d2e807a5229984013a0a998e70a5b63aa07ba52cb8f4959252e9f80dafd812f391bfcbb5a22ba7fcd1ed98946a78893d19a3df12b904c7592f5e606cde0795192aaf49caf8db4c13061a2bef69388f3db492db1cfdab93b139b384b3eb7fe5a226bd3b32bad476604f4d4fffac336cb96b32e687c6932e5a4ba7563789ab517887689687c5b4b69909db9225e62587830c98a2f36b953a510963ece42c756e50f24d92592d65c70d6e961379e6fbbb1a3d7e30f57da55ad321026b957fff0f9e395d24b27b013a1bb28ede7833c2848e07c568df656192e810f674574668b39169d304dfd431de0edb2414aac3e8759318902c210d17b2cdd05a9eca7597e060cc61d502403ec2964ea5bcffa47205e37cda4e3741b6fa3081907deadd753624d80a289bfe05af4ea9c37c2c44aa56e20f19f215ea2352f5db209c66f504e95925a6bab0a8a3cc6c90c66ed414061aea00b2b8d125253410375eb5bae40f774bbdaad6834749570631c3ff5631a6aa781fb4529504402e84873ba228497f7a62384f94dcb45720f81ab4b5791a6aecf3c24ea6bea1240afe8905e3965dab541f8f5b0bc7ed93808eac0d948b281088946b7615f2f151037e1a441f1842a031bab6fe15bed3bd52ab1155f202da3059c974ac75458e4b6e21cb6c7b6120228db007babcbaa797714f8a819fd00cab799c8491ce3a754bd5f4ba0053f0f54ad988eec44661bab2cff4e6ea9558e812a19386458a3a861f5c58e440510a305e6afd8a2f408f3e052191079807a67714cbea6dc23e8df251379e4381e0a27cd1685896ddfffb7993931b8e042e95f380b63350664150781de8faa9cc38a6619246c6ca00666856d60fb294a0856273d9723214ad211ea281c731044d67d092d1854f56f833933faa82fe517fc094dec46e08104514ab61555bb666da69260e98369de55fd6bbbf1b5906ca204c460266d71f0edafd007859cdbf085576cdf0131105e7e2b4d1f873ed8a49823501eaa6ef4d635ec30f50e2051829cf8225d7bddb80a9a99cac67ffa09842f8200625c3550db533436f45e6fdf43274f81eb184c8db69124f29a64a23dbf886723cd408bf5e1b733395cccf670bbeeb0a7b1a51d449c3d518b794d2cc19bef679d0203e4b19c85f5e16cf2bde64803c2299661a150d88cf713fe97ffd5eb7513f495a7f8982853616225272b8c277d88d4db9026ef45dd2a8a90e38ce8a08016a7b1707d56561adc92933d86e49f1738663d7fda433c6eb8f4ba23f3a62ac340e5eec33a8509517cfaa1e1bc07c575c694b14162b7d0e07f52516f6f10bd6e77ac40a105c7939108c18ef5ccea45dbf5fdad2d07346d419588029c140b5f87b221e65a2098c9112c0c41be18ab8e8da90ba003beb63d42a14e2d7109908cb4188a4feafe44bc4bd4b159081de594b959ae7264a2eafb1bb5ef7d0e7b117d03661e57d0ae98655e09b71e56464b3d87f258d7982c9dfa88dc775e733d86407a594e4f0659bde4162b81e5374fa1e083b2c117578f568f749585ed51e9ab020a23fab1352227fe1fce94d120e06daf27ad6dd49c30a1a7e6eb93e8c1112e942a3f0c32d4372775df57fbfb2e56f0b1f3f5bce87a0d853d87e3336246912709b02625cdebffcab1a3d5e5dd308160b49efb5200208e39209a91ee7aba07c864068cf6f89bbbbe1030e8a432b6a5cc2b3dd4f7f9489e64f7e17f586bea74e97ca023f636fe00d9270b93c20590031620907544f8336f920783edb6380e8be649a6355b9f7963518dc25d95e278edbaec27256f6b56ca44c55190689e5700f3a8626c0324a976d9807f24c08b02e02791a06f9004b991f61a14864d00b558ccb487a2b34854ac6039d4084df3a0f4ab41e1af65ffe71907eb48e9a1e8b29d990e4286a89a4f43aa4c3b35f2db0f0644086b6d2078f568aecd2be004ca7bcec462fe5130d7875b138d08ec538d443519142d30374a75e8c1a3ff3320706c18c9d30b42c8329634be3cc4732372abe57664c8296af9152e5703b7509f08a0f98a2def979b08f9a6ca3f842b2a6b44b61a9aafdc6fe90f9ada1136d1e5fd0d353075a79f5a0d38afe54fdb9141d5f23fd985eae0f2378a331b3c2f9d6450d65d973c87851901805c076a3f38b2542829f45311e074f5f714133504311d2da4d5ffa3d1b66f1220dc9aaa1cd810b117fdcfd7ccc6632a75afba17f80620e047508b30ca0f25db099b8e9a0c70b65692f541debdac5c516f050126dc13c639d2e80ce4f1f71b1cc84f2deba4e8ca3f09781e578fc69a2b2c47ae5b343e79f76139e02e3545c914584767d3db1035d6f3f005622fe184980aec43b9882ec9a18a62019b52bdbac729e0229b6a21c8ae6d82dd97a50b23aab2796030da5ba47fd90ddc72dbafbdb1a598d2689b4c4d575e7aa2c984711bbee7ae298023249d8b3f8ae7a7e4738cdb639df92a4b3db2dc6f802296ab52b53d1c1fbf39f880dbf775b2d57e53829f755e84681acf693ad288c88a773826671fdcc3561795d76d58f315943c627fa920ecb36d118f3db0e86ce1352023c173b7ee564577f5ccd34cb1ac2ddfa6247d8fed01df13bdde23119be977c2aa73eb83ab09e7aa349d506ff45b9b8ba04ca0a3bea99ac0c80f8a4c631ce509ad797710d983a6702f1ca4662ceca84efb8ab151509faa93612157d05e905f3f3320f56330c5599bee66cbc7504b2b4fa2172bf40b4a19582fdaed56674b2104f3891e51f16a28577e858e4396be52c0adf3423f50467f58056da0ca9f87b6794592fa02017753316b2a9ccda4a7bd9fc72327b951b0e78431b33e159a7db0e985b774bb0b999f600a063e673aeb5bdd0322a1aecbe8e477d3c8a0761ca0965423afe27fd665eb4562f0ae9b7df4dfe4c7347c9477aee11839d1920487838b3c6a1bed994a9a280d56ecd94b4e9cda5796d781cb7420c26333e3eedf1dc05a52c88d6a89a8d22c4b52be705cc107dcc3ee1e4a08a7d264585623a5a1bfba92e6493afc796e577695a7745434ae0d22c6004178be7279610679175d0a189ae2e081c5e8d352ab359803a280322ed2a99a878c73cdcb453e5d519e9aa5500d7d2274e9671dcef861f2ce3f864cbf18450762ec650dfe3abfeed7101e9b3fa3e1fcf90e4ce6b9705a41bae88674c5ac3039eb834843cc186a946d45fae427379405f6d846ef7700d054e86baf3e6f4d23ebe5e575a2d3daca33c866a733d34314998a533b62387c5968f85354f35a007f44a38eb36dcb485a79912a1b01e23ec79e29b89b7b80f30c56c62fa4f06ba14dfa7051be2cb78bbf6039d24657895d05cb4c313674c3b18c64630ba760434b4152207189fdb53d2b086e2d63e96d1f34461cec4fd8db168ca5b2bcb7a0195113fce87c14fa67168b9bbc68afe62d1bf484b7ed1f80098f552f6af8ea4f9c6c92c3a26bca44cad5564c5bd77b48fe8cc4cbc9bb5a9bd23e0ad5e888a97c4907f0d186b6d6b7ead20719e58a4b4b06cd89a4a017420633533482f20f1857610be8a1a247511793fb95b49cbb697e9d0a2d3c16a5dd48f3c91a09edd3b37c62b2a99dbe688e9172d8071b36341b37efe70ce617a27b2b6641fc21a4dc2c8c6be2898448770efe75a54165681eb1cadf3ed7fc2a58c4fc2fd86ef461a2befbbab90df035420b6eaaa9c2e0464f8af65002cd529d36c80a370dfcc3f84cbac4d8946c80bfebcb7d36997ca3d4242434982521630e7ad955f9c9d1fff8b696697f09b4a06e0569f6ca490d9c42d681448d42aca5923871618431a505f1ee8ebe4c78c66effc9eb59d82c982e0f30b93423da7b03ea5d6dd630618b38484c2a2904f31ec63d7529eeba9e808242b12070b58988971bd8f99fa12a0891af6c7797dcb470c0f7bd856198ba4c70429baa44d767cfbb47411d10fb34b9872be39a2dbcb99dcbd3fc019bd77726704615e2e03858e9642a990011868aa292c4f7fdf4b55cf1a29e914ccf7db5a536c45d7de372af5f8c5ee4bf82b8ef80bbb907d4aa81e7332cfa4dc9e17140be0da5901c7e4de94f64f1a8c71130ffd07b17b6963b008fe01aa4c2c6364ed2fe14f6bf44567459700b28887df0c2249f2b07643eb0a4ec1b5f110f0b40261f988f6b4e1ae5b304c2793ad0edd3a28f426c98274aa82882465ae791412014dd65b3a1da9b5d6e11663f76e48519054ff4ff2488c806945b6740cbbd1e7866b875476535ceb16b28e019989601da8da0c2b388205e53ac9560665106a515a100141a9399290f38f9f10cfa939130fe98208527c520299554e3cc9c2e45f2c7126bd22937d0b49ecfbd5761eed0292f0d58966b793173a9ec314f91e1ec2346d5f1107431cd40dd029e9ed0c869e4899bbeec32f69208e04c59b3c2ddf677d3f71f4c58125693a40726b13c37e37e63a3bc48498dc140fefa17404d20dd9706b14130a248196734a7c890105a825c315145fd55167cc67b4e26757d008bdc059d5ec678931c11f80bf436bb7c214afc0b27cd502d9023fdb6a0e2c07b0069829fa03483580aa114209b8209a36c69c6ada621b32156826849f33b0b9970c67ee6c18112a14b5a5aa4954d1fb7656cb8f052f349dc1caa1e4d61282120601b4173705ff38518538dd16a8c856ab44ab713f4cd3a3dcb8f733326478f8f97be9afea7608a0ca1bc9d2ae25134f03d11a94329d2f8507b068902a593ac4922166093138d305a6a7a35c8d57dc15595324eeca285398d937104cc961fbd78587a1bb5b91ed5487bc4b3814b18ea18e94b4170780742f05f460303548d47515e805d171560c13a4fc3cd2708b8e82f256e072d5f8c0b06686a3ee2317e858545c6fd96714420201abbb26ada076e527015f80f2d0a8dfa00088e19c9f2d016b6b3dd5dd7cef8a445b0529743e4e63840983934feac3a86c14c81d23cc598358d77fc2e8c39bc3fbe47e40e88437df7cf413e3892648adc152be208241b1ce00984d9080cf33aaccf212e2e221771a93055982b7dc7fc729a586da74b42b12748f7d01f8d2cc9954b85763885008166543a01a6da72a757abc587e799f54fa82133768f262056663647d4d9082ecf18a13254469722e8690fbde72a134c2880fba742360adedc4a97f1324d7dfc2626ef3b429097d1cb6f227dc5cc33e7aaa44d447d88bfccc4423d2410ab558a7e15549bbd1564695087e241b4f96792fdb4274a020031d4e94f9771465b787aa9339c52fff0d51512de84b63554f1de1617ec59682d1bc3fe346400b50f4e28d520bb644b1844b336ab361f892165236cd97e804efcb21af98f7ad05d6948a67cbb659fc00cdf876fc974bd78dacf9b5ba40c71f8417c070d582912682ede3e82c47c04886d9590fd813babe7af4030616b1aa2bd2dd0f9add65e6a11e702246a81b5c7b3211663b862e7d9787e5b5d0610440da5632a35328c3ae9214b1cd87ebaf986ec87e2716bffd7187c51323de7fad52abaae950b2a24e070ed745759a158ea42b8d4b00cf73305c0e5d13ddfda086e87490a73df27699fe0eddd6a593258e18681c53f8f5fa35ef171c366691d418c104e5060c7a3b3be31bacf774850e9da8fdffdb81efef952b38dbea0157993f561e14fe0a536f5f4340234fe6836f1e758e0251fe195dd196c1bae8595420487120248ae8d9e0027d7bc5a6cc6b52b5765240e5befddba5f7d0db250b071d1ecffef3be6fed56cdc0f72d9f148c9250636a22bdfc0915c5af9f4f2e2976263f4a704c0262ef28d36f70993d409481a958321c15ef2c8544fb9118b7d8e2f57395d3e2b0f91915ff4c89204f65669911dabe55723b9de20d022a4dd7033974c0d8d65c30fd1d092e1a015af2c2754a01d02b06055220c65e6644661f7003acb507ec47c21ab3ae6c3988be627cf05ecace2dcc2624c2db02a594972ba37c7bb1a53b54519fbc8b0fc5f2c03b33945dd156f1c5c07078ac668710f78686f687bced36167b79805ae5695b48d09da0868fd81e2f3e18a2d17b7bc907ac26b061072f8e00a5b0451250359b3fc2f76683456fdd9380d54fe3139adab88b2267f9955e6ff31a446d44035069dcfc8bbd9c3f2eff6f0e44976a2341c6ef87d7175de9f25058ebd5e8c8708b8b634b9165a9731d9941cf687d385df03503803ea1beae6ae24da2f70affb790bb1ef2d54d59e807e2c723242f22c43cd8839f3d850fb7ec87ab9ee93b3c0b767192a6169def786cc59f30abb7c792f6b7705e77ad0b4347d780094baad79105b82780eece63ad43b3206669c21550b6ba2db777ee7c9e36abd82c27179cd131bd72eb0b8b2c80772f60291a5fe6009e00be19d973b4db64e85541779982c7184e9dd03c7760a1d5b84639f5087cb86b85ba33172ad32ddf0449b7c1136966e36f6c4282659acaee444bc92f1744d61019af79c43126335fca0f6abaff033751beb049c2e649473055e3dfd7822b3e00eb266253e7de134f91873c3fb92b50fd753b0c85f52af3b38519c7180e14c6ac277d4a18f51531d15a7a6df3721c5a0ca6e35e98d847eac3fe05196387a1805a49649728417838941e363af8889621048ad045d77259df1cb7f160129779eaa3085063a632dcb8877e747b2c9b902c18c5aded5a7f8013af958f6d74961c88bdfadc3bd418b0fe9896926c988c1a3c77f9302c8fc4048d090a82053c97180022151417d195833f47410b02bc28d9d357de0e6642ca43e489e23cd1d6a36917794f7c492ecee6c4f20e5420a4b23a486979b71a33b80416f2b9a6b5a8e503ddc78959a6addafb83815f2d387d973b5c1eef0095c395f8b4c8911cc41ae8d52fece0d4cc62570f517a2c220163d1823857413c1a8bb622c9d8e2e436bf9fd45e90a37744b9430433869390cecf5646864425fbf4088d7211587b72d578bf4a2b4842014931191386b8c3c176187ce5c2a8b5be2bd848b52041cf1eb664de8b9704c854ff44403f88202eed984fa5095b1c5fce2c0dac41abe01747459611960a5386f3183832d7d1dec036a1b4008798e26e66de4cb55cceb5d5ae73901774cde43965237868240eaa04bc5e9050de0d8f2dc28a3a095a1774a6f8234fad0eb6a0106a0a90c75df30887b0a26065b7c60ad152d03cf7447e7725d23dd7371e52bf99c70b5062b63ee090f43d78c58c0aa23604f47e341e21ec7c7046b79c2f0a07eb1316b59b970c0e2846e460f26b24c3a6c81acd318de74f4371a7b7f5bc74fe8fafc7bf4259a192434592cf07d70f22a78ba71626790615bfac2d1a92657f88e799e04b28913de967097013f1f686734902f89c14708d4583be1b961d7508cb32cab1a69aaf653dd06fa5c4715aa33b6dd2899ce5da82ef3a3536ba30407f390d49a82836fe320a9b504a7e8fb7e6b43eac81401a2a75eb5c23f8711e045291037c67e174d2b42f2c38dcca2909f1054f75d57330709e0c2804228f49fd5b69e8fd52c993761e9162fe81bc2f2dcc8a082d4978c0cc25083ba16492bd742fb2e56f4cadcd87fc019993f808cb3356d0671955226dde4105008cabfe3c17c390a24c59125f28e7edd68c8cc9acba3f90a929528fa5e54e4cd78de36795d24a335af0bf9c2ee9f20bc6f89223b06b4016a2faa7b58072e32e607e13b2caed6c1750b4c5d53d1d2a3137f2ffef09009cd79b11a2f7d6f37eee14911d0978e034af8d74c1f400d7fbaf401c9a2b1ce943fb2e9b190611d2412ca7a5973da8d336e933d397717449ed09e069979e45e4af2eeabb7ea3965e65ec997897528dfc4aa38b4d326cbe40046ef168716fdb06483fd1ebdd416c70b83ed876d502b8ccddc8fe73d64747d8ff41a4f9af3a1d8e5ae7221a49f74ad0ae941a72f91fcc96d7ee0cd9e884a06aac0449a80cfa2ff9fda9a87ae5e4afd8a6b79da006d7868faded8ffc00579301e40a1c3b29dd012f222196611661306c772542bd462fc04b36a5f929b50bcbef0addd3f1f1ee5d01850cf51bad32ab705147e00674902f329693830caa59fdca883427e3d5524cab78faf860e1afc27a737f41a81e1ce78e287897a78f3d1a4984bebd097c0f96346d4e023ccbdbd01246712a291830087e8ebdbe4cebdc293b1ccc76ebe2d6efa5e5347988f8515560107607afaf5516b90a48f65ee975eda320dd918d780275a96acb8e0935a7f6b433f7fda068e19d758b1cb8977996c94956943f30ffbffff3cec75c1861367289efa30a7bd2ca574d490f7f19b6d1774ebdf1abfb841ddcdc8732617c6480a4ba0a8e0733a66a662761bb93002e2250c83e5461e43b87ee8c900d7dbfa6830c37a6cdeebce569cf52fe956d0a59e55c7469b9d21c7693a57c2b30cd79dade5df07fd8bca39fa7ed2841d031283dbbc972fc7fe6ccc10966fd08c012ff6f4658a48d761a1f0ffcd0949275e8fd08a04b387ce101f383ec7a506ed0e9656f7069fd2b6daf344d2e6276db3cb3c8d114e98b1c9884a2069bb041b74454b00ced176a0e98d26b4f2cb84186d0b968d6ac9319eab1fa3ed7de1e0ad5d876a4c9a23f2974916dd9b1c47eb701205a38907a12bb1f50f89e578870b5e4a52b45c2b5ede21eb39b24fda27f755c1ae948478f31ca16616469e9f0b94885f1ab59205e45fc5bea6b104f0b3e259a1a0468c3174f4de0fbd40751a54250fc92d15c0f8537df8b8247b1d150528512e09fbec93365bef6908ee0a67620fda3763743b1b6cba328a383e7cb8131c02b5868228d74b77b46d272bc60f14f428c22ba7b46f981533a4b3de694312c4b2565be9560a531a54fbcc128a1cf00e1ffa502cc0dd417e7b3b1b5c46265fad8a6e590ae6cef1253db25c51431b4fcc8b594b6e04e0532f082c62e1cabb8c923406999279b0bec0afc1b8a1426a637b0b1aefef7450f0fac604ec98c401cb05245e03ca66de785720181ea503e672997f153315139562e624ff637aa5819d0e91e170af88f1574b18f329154dba52f02e9edb7a5bbc3dfd9267bb30291876a040012ecfb88c06ac6201b75db9503f7438d8eb2609d95bee2db79452a624039b076b075b07eff1e3571363e4fbda099eac8983093b599913ac7486ce9ccf643151921193c54449459455c60cf2aff5e30767ec2f6e422ea0c93c8bd8d56a051926615373ea1a39c8ee1d8c72bd83439c77700a8d775005340e85dee7a9da3be8a46b3239bc6b3129ef7a8c9bee42c33bb8aae11aca468d7774faed28d5713b6a6f6e6753396c6e70497eb8cce7f01b7e391b4fdddc70368e839b7fc3c6693c470e1ba736396c387923074dab85838b7fc3ddc891b2a149c1b7b9918326c5bdefcf41c37c837b8f83e3bfb9ceb1a76c6e95cb373cc5dd701cdcfbeb2f77c30657e335381a354ee328548d57d6501cffdb6a681a6b4771b055c341a41adc1c12c3d278e65ccd9bc460af5e83a30953839bf12631bc0637f32631acc939fb2631ecc96b70a7378961ad9bc468d5e04c6f12a355e3f46b6ea7e46b9cdb9e06d7dcd72a9adb75d20b99318383fe9890f31d7c4aa60eb6b8f51d6c7198ef60ab893aa9831d6cf9401643c832d2495c79016dcdd400db1c62db5b40e61d7fe61d7cea5c37f89b9b4c14c3b8b13671494e5ae635e33f69f5b3cd6912cdbd3ae619976d578bdc7b06e8f8f9a94f0dfbd420c0072e4630f15482ff542197510a5d7ae659c691bb7c7a3b8cdf5242c9401d84710761088f9847ae63e1e30c1aef6e3c9b364d879da625572dc7ef70c73e7bbbe8dea15e668e71d06377c3878587d0df16992384315a51c44b40f2a15f81b403329e90f1845b578c149333ca0ca3363c303eae0aaf39e79c937342f076b43b91428e0d1109b6e3a1f7200fd5ca2d287018940fbf208518ac50831b3441a0f912d5aa2e965f762ba7a2684eeb4061217e1f2ca442d9d0ccb39ccf7e64ceaba73bac82b7a35dcb8f2772945075bbecf6d83c7cbb33942eb663d5536aed1b02af56e5e497db86c1aa8865088d11cb101a03c7bb41f90199acb7459c7971861f901b5dc6c38c746291c024a802dbcdd66cb50e0d4cc29e798049f4f9da165c82ed6a84697d8d30ad56c1a4d9b22d1c2d27d487d3d9508aa6d667b7d6dbf9c024cc0bcb9f65cdd7e39f2cace6dbd4fa4c4a4d19762a3d20355c9e7a9749919345f37c37a55675b1dd0c4be96758df0f955e8f969d247eb729d950925220625529ea01911291a98a16a2304820d1b6b41444365495889488aa103dd4a2441486888888c854450bd1d2d05210d9505dca8658dbeab7072d0689dec451302cbfc98374851da5ae6dce626cc72e271258f4d4e13664ba7422f5b13b35c7c63c2098f748cdcb07699be1f866f628c6f244028b78a65758442488272e6c0c756c8cc4a69724fc57bb71239a5628fcf1e3298d94d2c8c1edbd1e3e3e2f1d06cb3fe7ebb89ee8f1c8065cc61c09e1a56bc71f7f2820e700dd8e8e7bbeaeebfaab372225f8d931f9095d96f198864b54ef68477136b81a5c8c2e399ca7533da3e18ca6f226e4ead6cb30484c94f4c3e4a777383cff5c3f6fa77a49279dd72504c3e1213d2d0a38c04bef76bca47ef2edc6cb9997de613b28970e77505e733b1d7f390d7d4867dc198abad77d6f87bda71af7bd1da6bbd1b8efedd02eeaaf1f1cfe879fde2e88724998dd47f5f30749333a3bc2d2e9855c97f3cc19f798524a6f27fd62487d729a8938e79cce4fc677052a31e5a03100f93115d1c208bd27c20721476854bb2ec618df7b2c1d32f3f5d15805f275bff760331631c617638cefbd1863c482da576394978410c28beba64797d77bef368410460821841142f8ee83ed8429a4a0620748a62d26a320a2a774c5537acd13305db1c566d9a2656b4c5a6461e262c2226a9a0da867d315335c20212151eb89bbabe86e2bbabb8aee8631c2d85d45777b29a2a2df7b354af6baa60c4c5498b6d4d37bafbbfbf57bafbbfbb516fba8123ba8279391c9c86454997653ee1b98a6305d6132321999a430199d4c5ba288c2b4c56485ede0942d324e1a35223659616f11ca6485eda8dd62bac2b26ba62da62d3448a6294c524c992c2cd0e903c2cd00f9bc9352ca4bdba23e1c8f5d8c31d67431c22ef8d2a694524a8d1e31a5648f0efd62f68bf962bef149bf1c4abf2e0e1c4bcc29e594f209cc818c3ad0a15367e8f75dced28bc01b2f4b0e878cf1b61372727840690ee4e81009cef740d77c70fe75612f7fdf4f6158c2cff722c1f9797ba2cb7b7b871d93bf1d21db099897d3de713dede57c75761fdab60145d3c5b8f931ca1865ac4f33f1755d3e2f6dd5f5f047ab22bd1d5dc2aa2677cd3927e6d7352fecf65c4eaf1b2fbd5c7b083b1e8ff3566b2ac58b008c82942a8218ba2207291011034321c3163ab822cb921297283818428602fc80c20bd10c8a50420e31803688e18541c4133000e30b2d9220440c1d81c7850cad45862560b290e922052e524002d68057b06303179039c252102d2d4431f4a00c2f78282308525811840c2a1a529042052254f1c1143c001143471143d00b74f0e28bd197170c757942786364b00232a40083050c86a041d00f3d1811260a6480614406526928647861ae9e220032c8c2085e5431c68b25cc20062151088248081ab06069891f62082ac20556663066095578c2f2814704bc8001163ad832c4843064c029f44541066c0af6e5cb1863b0c3a1dea14e39a5e7db9a64c9d2a54b96dda57748671f434653b810e160c2be2fd2658d875732e33c4eeb4029259d576e2ccbfe94e41756ec73b6f281e752d6da4d279c716ebe6d72c6f7180661fddcc233d5801e6377153a14c8f310cb77d4359cef1c881182092f506802063c88c1f368ccc07bca623bd5ffb801ebdb79340bb6753a0d3ac1f7e80644cf7055dfc90a4d00f59db4d876cdc444fd77744491121c0875f9410ec66461f13cadb2c78661cec077d50bc31cbb2e875e537923029bb89de6995f985b15388fcae6f97d0b40f2b737675eabb62767b456e13c20f8cff9a22074d50302713e881314a72cb6a37f04911149dfa8131496bd95d4d7b53e2d08e27846b48ac6382a428ace73ca788bb0c3e62d4558aa7cf937a3c5f1d20b47504f38e0b73d20e8631482e541076ca0c582af2fd5bce7dd1f1cfe79d75ea5f5efa80a1101fe1d1521e6619cdc740953f30ee19f8e137da8271c58e87dea20c5718589685f4f30cad90e7be0fba99d9cb0f55425e99fbf7842e207878f7e5f07ea6b08238c1046a83dae082edf59c882b70e8fd681451491e5a1d7f44ef37411dff9e0f66863ec9dc7c3aef1111159da637b8b8bfa9a21c72c7272a2d8eeb5a42461bbd71afad15e65173e34cf4c1b564d9ae6bc69f5f2149ccf3829490cc92bafc4b1c1d20422a8a2d88eda50643b1e5a9232a6a30c4d9192c4108d4137bdc23ac22e4c679f375544fa94978578c5a4558df4024f6167d695d6a18e5d9b6bded5db9bb44e135e699ba4dae515c5ae1a29cf0ba5945257d19c1fb37bce085345a0b3c39b2af23df1fac8e12894d585ed9e17afa10336f8dc00c48387e7cc58c30594b0945a8b42b9ab54542b42e55c98f2c27c6a2f48f76e685523417d0fe64c5ad5cc016d441c502f3ae4ca808e50f741d14ab94b5279c91bdf9156b5479bcfb8ee89f9f62390529b14c4012ec0181909ea7ba2077d47f771412efaf0d1aa661821b555aad76badb5191149d476401fb1186f07932c3f7bab9cb0fe54bbfc72edba92dc093bc9b4c78ebfa67740c7deb5170c2c7b8c914e873e9a91d7c5115d1c0101f6f69491662f98df23d304b2dc051fd894f4a04f15911ea9306915a7984aabd86968559356bd00b9ee79c1e1c20bb261df9491d837d51ef4a922dd79b78aa89bc5f07638cfdddd5cc443b098b20b2c1126256ad56384f0d2320d426dfa75d12bbee9714ea7d8a52cf9ba518768c58d301f451454b61515a82d4511051599a59e8e50211a4242e12897875ac5428c85af5c78fb4892652ead820f894beb4c2e35b40aa65828ca104f61a2215a3543aba0f33757f36f137264061aa8f4eed9d7a786593a0d9d59adc30e5338a91f4be2f7bc5619310b41fa47ab989939bafde9b5e79c7332db10047660096852c242bfec49922d1472dc56a71caac933df8eda2f2cd7b4aa35c7340ccbb078cd68bf6631f347fdcab2de60e00bc3267663abe6a57207c902db6d4351481acc59e19c51461a4008a164411434884bb0a552b1c0763f725a674eda97aba2077dbc1d3f0dad52f19834bc975a8766464626536ad0e05aa9bf300d1314b7e6db36e3a693c78e4e9971676e57f333bc63949c7933666ed761320f0227ea2d77e2a66ced5ac748b13ea5d8fdf841a9b52a4ab14ba9b3c056b171eac1f218bdf3c3868be04e0d70473bfd56ba8d05ee74161bb76d1a3616cd08dbf51296aea6c7b050ef68ef3135c09dd74a9109cada293d44df2e763d4547eb30dd2d1a6d6af520da56dbea86981b646e8cb91186a645d3da8636283856b0adb6d526846305fe840096048063b5da84fc09012cf913da189a182d8cb634b1bc1eae631b12c0d2364464b5313da66c43da981e4493e70f34be795dd4afeba21d884dfef25985cbebe9d55a2fdc8234eae736a7f5bfde5212b654a3f4ba6e12be2e3aaf0b247fea9837353de8e7edf86d9891d7de783b3e6d0374162223e697e09b7933f16a4334880e4d3bd8eeb110f76369896dc8c9a28656e5f8b0a1b5946132e3ebe56528fd5a91b6727cfcb86e10b823b2376a005d1cd1c50e41bcb0639ea570141e5ac91bef65284cd88e524a29eda14b0bf5e8bc7a4847983cbb105f68555f90d97d50cf36cfdcf3e2eeee2eb40ec63a1a86450aafc87c534622df2093e34d46e66bd383edbcbdbdddff4a81c5504c7eee549fb78b560bcb1b919a2ca21eb335b175766abd80586d4227440d73da4d1ede0e73ea95f24708e1c519bc328c53bdc6f5408fed91464a2dacd9c5b9c04f67ba19d1f19747666983993493de2665a3b20d4da51c5eb623befd0afaeb76d367d24cfaee72849cdc5402c7461469c08838a08001dd088b09c976f47f72e478be9488cdb312949be73b81b01309cb9c484e4565f76253d4839e12018508a24f15a1bef976bbcd6f882e1d49f4f8b5ab0c99e1e6156e42a06fdb1df28f724486f46fd7837447e47d8f4f44e2546b5553f6e91a97845f8fe94051723decd2bd18ed80f4efdfdfde8448ad75e083a61f2ea371577f855d50c6f56b1c97c1c1c9b3a6d5eca6d8ff621cc66993b3ad42b58a215f4f181075d0c2e789047468c0900cc470c313185898800e1c78e2c20c4774d8c09317785af0800e202062b556d1165e64c92c99c37851ab7822f14636368ca696ed70a67669a62d4c79c678418931de0ebac44199b6d84ccb4c48d6079ab63033c30bd414a9bef7de7bdc631e4f5f0ff6861b916d08333333333384f7c7ebc1ced1941a229f75a831b60f64d5771f071fb1ab61701b926559767b9404c1d0336188ae5dfec95f5f95dadbb4db3579cd2777e2603f79ef00cc2374f227ef1d603af304811af7d3e423f413f778e20f3482dd9ecda3e3c0623787b3fa94d1b79baad7089d995f3d945e46e855647af55ab94ef31436b9147687486782a8b6d69379bd9da6b91c521df3b715c16e874daf939f7ff2773efe69cf4d50eb61092c70690957c650424a12daabe4c95d3e67a2aff0d0b967cf9e97f7a4aff9711e044aaebdf2c908b69d25d464d4a46c87fdbecc4b65ea9ce7151e5e2eea3b35e14486ed24fe1d3d0183ef20fe1d3921e655ff8e9c18a208100ac27c37021ea8389dc8b070cbbfa32882f06cf4ef28cb0fcfe3df11145b78239265a1f43f357c1820fe0707d377404308022a88ef808a82a843f80e688721c8ef9480d1040c04d041d2774ab024fda3abd556e69f770ff5873f4af9c533048eb680f9e8cd5d50ca88fce2a3cb2fbe5312f4b1ab04f38c94e5b9e7beb6d69c8e979cfce27923e24b68f0f56f37c2f53457e66faa083b7422ecf002d5d7a2f4400d3d887bc871df40f5cb207a3edd87dcee708ad81c5f47b0ef8835c49d51aecbbce7c45fa55f0ebd9ab894c9df5f5cd77d7f4ebf443b59af516baffdd5e3c3afd5e427cefac599bc39a89db8f8356a17f79ef0a747853f71fd35363f79c569bab857853f49ee68da1cfea67d798d6bb7dc49beee85a029a83ffaae21af397ced76415956abaf5e4f46b0d54d5c75275fbdc2257c8d643c315fa566e2945cbfa41f0449f86b116cf51ab721ef8b84ccb19929004cd58d5639bc89cbf99a715d374ff2d342dd5c838fb98639d07cadeb24dad6ae61fe93613c30f7771f5e54ab4c7c2d6d9ba66ddbb66ddbc3d9aa506b96d55a6badd51f4e850286518a61188661983f1c8c09afbbfbeabe5e8fcb993bf1e0c403eb117b4084b45f402e7f38d75225f21ea7bef7de7b8fe367eef53869afc7c99b3b71614dee272e6ce6d8890b3b4f27d71e90f6936f0fc8fb93f7298c7a2a72f9e5d79333edd4a14f08e9c496f0436e093fa510bea7b7874280b2430a21843f4dd8e90ffc3e7db1edfcb814744e79e5cd8520ff1e8fee72f6eb4a02a4dd50c353a7cf7ba0c39be4e78559ad1e68c6670e2190f699df40b9243f2d7cbf1ed081e67712ea40d388061e731d3f2d3cbf1e2f3c1ed08748875dd04ff68b9dfd5d6a5b7571a9d2ab9c33f6726e72bdf7fc5d3f4d7ee0474af97110fed0fe814fefdc84c825f67de2cac9773f171927171927657e09c57aa2c3773bab75ddf727c992f9ec4bae5712f47c85f4ccee0f93f9982ac22de796f4f4dbfd34917c35e1ee6e675712f4cffbf27ef1a1c3dbf3bce90b5ad58132ea690bdba677940497efe237336fc06e615b7bed0149c2ad0d6e9a69c9fc072409affea78567ef955d3dfbeaa350df9fbf9cc77a32d6387f3d8a50e73a8e3a67351b829df86be698108e1ce596f033b7841fc36285cd109af8fec04f0d81cfced75f8fe7fc94c36e0ff5ea71fba13fbd9e30e7ed04040bdd86ff65b0f9f160ef1e1034c5bfc7831df320b0493b06bf0bfa810fbf5808bdc74f4ea6f8fe18ad564f809f37a8d01f0ee44e5ed81ee92b7c27a378e0014992f3559e073d2338fbbbf30a3de9c1331d0a0d0f7bcdc7cee739a7084784a677b11d4729c2476ff2dcc21d4fa092832072c0525aad78a6b3d755bc410b6c90831051f0083de9c1c30e8586e7b9d093e6b91c4a0378d82707a5013c4dacccc0de84bd899519ae38c374be4dfcb2772fe9412105565451820f8e0883073c8fe705f5c0250a2080d0e2650927f03c9ee75dce0cbe5af17094d65961a806f53d205d0ecc5ec68be4818957ce2bfaf503bbe93e5089302feff40e5e865cd4c2053f6f152abdc3e13b9f202a3f913040a8753b260f913c2d865e7a67828ff32279605edea42229563cf4de8efd28892c6ff3ef280920be4a93e7389cca9429438507abb2aa1104255080845574aeb2ba61011152889204802809a415d00d0fcc575919e08b2dab250c106a31593d2d86789e7726f8ee1d59f1e281f8abe4f0c0f06077f5c0f0bcdbe4390e4880a801184ec8ac563cf4ae84562b9ee75d9397b7eb6e789b040cf08596321298092308459481823265785e919a873da5a83046e68b4a69a59c5148fb20897854abe48cdf9142e839ae82d3e984281bf2bdacc1a33a159dbf3f156d70cdc8c556827c4098f3d12a6945069fd3b0a3a72d2ccdbcba741bead27f3c20fe7a50975e39dbb47750b7add33b506fccdb98d4a1142ef3e60cf47f474880799b5651eaa9cbe1f7a7aefb8eacccc007ea93cad7e33dfe1664027a8deefd47aca4870e3d3af5f8c344280727abffe94840852a94f9e94a827e5e25d25fabda870ae5e084496f46a8a78ac0787f9a7c07bf77502f97339a6b9bbf076448d077da10ea3db4a3ce5686b6215d310ecbb8c7ceff6e87554ef3fa3422d96bfe94d392ace6d5b3a7afdd1ecc1b7336d28e794623843ec49c1f393ea4a3965eba4def348f946e6ba493fa1ebfc71ea86fc656bd57439443f4ebea7905699d8e5e3fae23248cfef20bf44ee4b9dccbf5c43f1b2f2c84bfbc1f15c65f571825a2989de6795104104b12ca2642b7d085fa68aab046b4beddd6045f4008218c322ac519638c52cad9314608618c114a8fb287403198c9b0127e38d3fddc4d63840df971186040f132264a16fbefc807483c1864e28c6c1dde66f773461f50f977e40330dfa13e1ef980cb736c95bcae9c54b68c5209512965138b6211dc6956c40277686079f1128bbcc4221ccdba7177afd607db35cb392b37cdbab9b9b96996ce0dc7ae59f3c6a2c8c5a25649ea986398ce8d4b6f259e7849ad78e186937ec5221b8b62d114f6b5aa49aba433699584fe76dcb87c589699bff1aea66f246b6a3abc95783befedc8e1b25be9092d39bc6b2b1e2675dcdcdce4b8b9b9b9e1b0b0fa8a169bf98d9cb1ad6ad7e1411a4a942899bc3163de9837e68d796386dee4fc62d62ce794f326c4c669e0054c975e810724ba740b3c9dcca57b477738ef2c9019fedecef576b0cff08c838fea7876cec6b3fb896f381c4c502d05f63d756cd25aa9c61b11eadc614864aca2a266b13aa9bd7496e6d25d8c5e1ea9b5078959148b8a32329be9a4c375989ab3b48c9a95c32bd432a73d3a3c09ff8d1f79a18b31de84040ba7c6295269957d324eb14fd81a8ef21b0ebd68fa0ee7d263eb864b8f49575a67337a29659679b2b128164524220b66a91ff69fd3c76bc3bb66c1403dde25fc47e87da15552c74d8c02062ec11d771a8f114a76392eaeb6c6825303294e39f242a412a7c868d21ef71518f949532a7e76bb13e8f0cbbb37a68dbad54470a7597087f41cb7a37f738970701d3f0e9fdb90ebe785647eb0ec29ef9ad5335aab6878d7ac663d205d522ebdbf58efecd79c6afc6d426ac8d92c486dbcacd465d22ae928ef9a75c3bb37a69fc0d2acbed25830c781e26c7055dc6b7034b81a2e09d3709d767133b824170d12f52ec01dbf48d65a6bad8d4a2b6839f212e5e80b32760a2bc59117518ebaf872d425cc51972fd687cb2baf66962fc6f82fc0fcdbe25f0f96debbe3cd814a2f599015618ba59ad392617fb0b46388c96eafacc4617c3b7f612fec85bfb012549a44540b85c58eba70c9c246099281105870490214172c018416b60939457dcd838eee6e7760bbd347b71142787a4072ae795d56d8ceffbadc79b4ce755d53ce9c290cc1824bb794af0b6b6b5031c6762070acc2b64ef4e835a828a5f429785a2eb643fd44d9f8749536af8bf9e29944af1833bfa65f3efdba3d97b777d74db5bc6a5a4529a594526e1d0cc3a8132da5db2cace3a8b8bb89f0e507f0ef880b560fb8204a12f3cf9f5110b30b950aaba3c6e78504ea16b6a30f5119a80e2317b6b32fb9613c413db2dde9db3e77014025f29e932cfb3b00845750a03e9cb759241b8334d5604802f338ff8eb6e83225c7b7475ef0c656cd67b5b05524499143d7dbc862db598726895e313739ec5880d9a5d5a8b341bdea7108185fe3aa9c3c3b79bc5adfc1242ba74322fe99c7f8d1b39bca5c5e2dbb94fae630e94beb74afa24c19829505a98bd21852a8759a13b2a2c5b919b95f4d1c7f6f61f49a639b1168d4d55c88c4bdc736bb84ed602721f23e7313d78f3d0374d5481b39c157d71cba76bb36322f34ea266f71e5db37089caec62017af078448f2f163294dd1fd825d60d2eb019db01d6cb5a0d19343490c19a273512cabfd5412a7391baf41e350361dd0802ac3268ec2183a52d2c1f6a084edc122818b31620f7013f29e115a1c6b3f233c01afb80012a86c71450b1d70016266cc9c99b2cc848a4e83519eb157d7b8eec8d7d3299ea2f5cada0c4d3bd98cde0e3eeda7dd719665557b9996659af3c97b308faed1b846a3d168d98d19b7e13acc386ac669cc38cae50c6e86eb7c72bee7e4ef377bbbd38dae69de1d79cdabe61d9dae4d8dcecac556655ee3af8613b2d203dde7fa2530e823748cc3b184cd9ccb7c8779bdb40886c11c1e2bd1bbbb1bde193fd8a198034321be2781daaa2036895ca64c99324bfae38d508b7dc24264c13e01ea28811a08dd5af306e383ecafb92807657938ce4c13f6c8059715aa524587578cd44e79e935ad935d21c40e4ee1f6ef288b17f870648598232ba09cca4421d3d1152f7872aac21197297cf6ef884b98232cc86011c53ab1ef888bd21197a1232e5e8eb090728434a64f659cc8e4d0c83991c9810d05a4319899991942d638a42f485efc890bfb8eb4207d7bfc7784c4837fde47485c1ef5580af50485d5846a6c78de517cbbed2c9f1303f9ef488b97939818a3aff09d0c925df40e83c023c2cb1739099508c343efea69310457f8ca6fabc00adf837a828247fde16f27a4bce6d29b53c2dfd8ed61c7a403d1ff796586689eb9f0bede11a01e08253bee89115d7342e835c7bc56e9d8662416c15cf3207d55c738cde166843a735f7ea68fbf7d09fca213e0a34f6f82cb4fbf8ed0c0c418c893939aee38aa1a6c68028ae481420792872a5524aee2435be43dea30e725d582bc70e5ca4bf751f35dceeb920448db60b8e12fefe74013a775649276a06944037f39bdbcdf75dfe3f16ec5b61782a698d99c7e7973f4f574b3c8755346da2fbf6e7782f776f7caedcfbba1b7f3c5846427df513f3222c9d69a49847a778232ece4a9d7d72b7a350c43c5545b83a23e3de8b3a05a6b8a3ae6db12613efaa684e975f5d12713431fbd46af3588350ce37e9a54ff81a7ea3d292397cb78992e2397e972ea15cbfc3d96dd21d431c75aac9e93a884cdd585392c199a81000040008314002020140a08850291503c9867e2e27d14800b8d9844745698c8932487511c848c4186180208000080c0c0ccd0cc0804f699f53ad47dbd244f07fcfc5072c405ba9a41c66fc8bcef84816835139eceec1fa531395527ba3130a52137dceb91e5d313c680e63ba2ff53efa8e7f2a9814e75f09034e1bf8b534aae3b85324eed65681524e5d5bda65528d7edb128cae69ce6ba19be5874e7cdb1385b0ae028945cb04949fd49bb52a7fa5e9ce728cf1ac91e1981d1f307e1b4e4f7e6745b456734124fe8594ec4ab81c4197993886e05da299a930e189e495f090f020d0f89bd92db47192fe9a0329674f360de0f02583bd6774b0096f5922f492868fe27374ee09cc1993347684d2fa669e0c5ed5b82fbcc0da789f34d1933da389e2185ea9ba58a7e9391a84646ca630d59eb363452e8eb6388160359790790af7e967758dc3ec90e4d9ce565a1e6141840c913bab020c894977e120264e5780100d793a46fbf2297ff56e426088e35f20ba23d40c38e7d4a37f61de08fd5c1b3a426f6197ba0949da514ff6d44a888484fef43f85034f00d3657dfc61e7e2a3b14473ae811f9b5f4e1118571533491db437be9bc8b325c081bb2830650e3b9c321f73abf8e4250521635cbccd09b5d9936b8bd39d7165a398165a623016fe47e16411dc32da4afff667de319f47381e0b12dcd829802ad9edb2b7bd61c56c492ce815d10a6893cf5bf9c82673d729b40f2c83c65664b9a30877fbb4c4ef830b209e82e754549c5a24062ee7ea8eba88c5505122bd725eaec26f982a3add8166eebf77fcc0e6ab7b613ea9e9b3f861f8cba5d9d54338f7caf0121e79c7b7f44f55ca4b05182d7cfec8b7b2e7e8ad09b20b4b221d29e70fa18c7dc335036195da9bfb44a20d44b37c8284ffea12641b1da764c1517654500a46bfc1bb71836a4cc90e8ba0d55edf961bce1753539ec32a76ee738ae3da350442b16615c9e1908b8a8e92b85850c082939d7baa57aa95a26392fcaa85b11d90832e958894c190b553ca597a2f9e4399841b161f02baf616136e4dbd0d734bbe62b14a2235013bc2cbf48b9a96b275e1aac561aca894f520ba6abb366224397a3fd593229e9cb0a3877f1b64347076f271f6d9cc3f12a954aa2fd92a616d15bb00898c15d89465928fcdd1754ed11a4bc0df25bbe855e9422aa2cc113845422d8ab322c2092989c005ef82ab04b5d995107f37753a72a697cc092270845dbe99e4d66c16bb7fe2efb4e6c728a85e42d70c43282b6be0a444f108ac3e0974425a816ed1f90131642880399b0fa2032b716d4a2d2d127b4cac38e8553f488de5a63d1ec8200e4770e2c5f4f10a22a7312a1cfba5ac0d56d01b8824267c5a8f14da39121e0714f2e22a9c659b57f80bf9b37ab55c65c581a24145eed0e94b57f83a437baf4b526845724fa0fccfa52143ad44399da125889b02496fdc388f457ee89e4bb143afc6a022117207562dc1199c8c3733122b9365e9f33f84ddaf494a2b7a6834cf59bafb3e48075c29080c53a93d0baf379f3015a2bcd66b66c8024818e00fc000800508704ea110fffa48247ce169bc2bdb9ccb22004b9f01d74654ba484eee21513a8558d655f44e6ad55c492cc82b4b3485272421a5a029716c5b1274081e2da93c38db7b341d6f30844a7f0b8fa870875e51149aa2f68956cdf41667c7ac1f600d383da66fc99354d228bf3f6925dae840517edca880c42ac5f51ccf8fbffe635be6fabe18593f229f347554907cf7c16db3e84fb54c722cdc22e70178e4f7f6f13654861719c9ac00d1e6dd61e22daaad4221ce2b41a98e88a82d7c6bdc5f0130f3be1201f15d87ba5a0cac74c74e63a3585f9d738883695c1e02ee08b86d8b6bc08c360a20570ce0f760089bbb7011869e08e45179d167905b0325e19cd43cbac99d726a16d1a4508240f2089ef3ed2023dc1701042962e133923410266a3ae7849b0ef178462d22ff9cc20df7293fa0baf72c5048a24d710b055c65859e3b5f55834e4629714e8ae520a00749a863fef79cb332379e3660eca540decab08c5c9de5320a2535c70720a85862bbfc2b0011215a3deabaaba20c5be096363d38a5d07d1c8ea49a88b4c95c8f75d660c47d4d1bc91f96e4047953093db05e954b83e29f7b22352b203b647e8600b1d7fd412123cbad1dcf2978d62f144bb80440aa5f17dc7344ea47872163a34bd092b1250283d8a217d768a66de61a3107265a4a3079a976bbacf4ef30622c8549184bbd02b18fd1302f42e8a5ee36f14a097845d7ceea7420f52a6f91d016218de7dd05c1ee4aeea2b3e17754aee239644c901ca47c1410e85391afc0ad04476bfef8860d95bba376414d534f6fef246286edffddd18f678afa4d01bd2660fa42c844227afae4f095ed8fabcc011a505498861800768fa235a7ec89cb91dd2ce056c0fd380733c3aecaf38d1fc46738bd894f451474a9da95f53017cdcb8550663ac05b34adb09dd0f585372dfad0ebb71f140657a7bb995d268893ebd9247d33fb4568a882e5be4865fcc376fd5ff300a33295065e4f44709151a7f19d5a221347a3f0cce112e94b9d44ed4363a52ea553f6bb027b890e260c04fec83e457557a1501d9e0b084b7e8d51193e3bb5b0d4e7f87482e97fe30b44abbd53990910376ab3e290c2d4edbe7b91cdccc01e1853529bec1b457f92b0af6cc2f4d9e9452dbed110df194526ac5e978b4a146d3941e555c41146317abb265690d66e6aa73b91baebb4b0f88e3f2747a435cb0df88a7fb1c602f270310bf11632b0bdc07a0f3195cb7cb9b1ceacb4f745e705cceb060bd317119dc073b36bf338cb1d293aa21f10fa12b317523acc8b33f4badf7591c59d6357d2a71974ac18371f02881897fc0284950c323ab4e0a665b1e97d4db0908a9d7cd3dd27f116895230ccbc48892752fcd8768dbd656ea52ea4360b10bb95bd030ed83eec58502a6969e23ac6bec9633ab260cbd998e473b7d6b2a1867dbc282b5e0888a39d5234f5aea44472d5f06c41cd7f2c95365e8a0e9ce0fd205af8263c3b2c76cc0fb30346b1466a8129a6c0c753b634966c42c10132cdf9378625d94d1791a4eac03f16503133ed7302a5d4cd52b09a8e217249ab3196439c9325116053310c28dd70ea8629e8fb816fd9069028107c42da9c20a177fd99ff63c30160a7d994610a1277708837f05a3e967a24e5ef51ce02117054f26d982b68db59a91dd99d86f08662701e3158a7d6bea9fbea0cfd48128bb48b081ca62a5081a794649e443e011d13ffa2fc518ff214bacf0db2160c70a06408cda1e4d1a0f560f2ddb336fa30808f4ba95fd96fb7501281089f1b5e9b851c321a0751d7ef799814d1922788ab49695ccf0745f4b0bbd1003da0d6f93814204993b35f0aa59e8a8c97a1109ea20088f9b42221c5846e0de91d327622a5e70943696ef27b6b022510b8e6a59f6b9f4b834703a52b9a81cbfc502ab128193f6595418180de44811847e76e72f2b4292e6227ce6f5a1e746d7dac0a1041459a1b0dd9bc7429cf7fcb7b677c938a78b0b45a9e301b87ccd9812a7e80487a8016704d3070c7670892f0c380de6a09309d06651b3575586c632cca4c562c503680860a9829025a71aa56596a649b2553054056a6e48550707a28de01fdad7f0838aa66502597576a11bece52dc62ca801c00f871b9aca38422d9e1f8970e79556a0a8aa3de6d324c0c10efcc422879c61cd7352d25ca06ff0d26db9967db7e257f8af34ff2abaa763c6444423eb4033defd84b6cda9e8967fbbfe387cb405145ed1a49f0bc942cf2e369557b9db00a149db0815df46af1957f2ffc0b6f2dc9bbbe9e99f8ae9be6491c0ea2ba9d46a29485cd731fc44172edf8875c88d95a778300459516b11090dee51ba40277e19049bf50fc613904b1adc4cc1668d2f5dde61c659db469aa5f545bc62c1af311aa97d2ee6a0b164d173aba284b40c55151d4a7caf68fed4ebb0fdfbee0e88447c8a5e28502b3581bfad82d51b0e41b8921b4c432ddab05d0e90d118434b2cc71adbe34f039e9817c94bcb985b08a10c9950d81dcad5a6ab8f109d8f1ecaa7eb54056f13260186b10d29486c182a4a5fc849014a27cfc50d81d05bc74173c2a6119e3603fdefc2b6f0ebe2ef070126810ac95dae0a5afbf08c5d1e4b5400d06c8cbd653cab554bbcbc76a48d650bd373d4b53536d95446925cdb273c69af476f2643f6769f64d3db8c257008b710a346949659fa10f2dcf66a46e928eeb34228b0478b2b474fec2abf748c2beeea7839767a4936dfd6b50d996dac74a024277f0d3b881c021876607ae925b3d681674525441ff843d739f51a76bc1accc2f22717b979eac9f3943ed483ee074af93b343809e300dd2045a29b9352cc125488fe45bab1809f53312dfd2cc43f83c133e951bc5bef7c8c43ad6dd398cd379379ecd807beaa8a5533a23dda6075b40a0cc38c9ba62e25b32b703cc8700d875cc558e1c4f2d07a331a7c33dcd67a31d7a85c74ce05138a1dfa5a2587b69fcb0c8524b8d8f286c4d4d0c3fedd52e7c65ea63c54c470f3fd286e1187047fc6898a67ae5b50e2116a29500526ec833d9d911592a936056441a44ed52ef32da75526c246f9a3191a457ce09977a5ac73312e90496c9515d3662182aa169bb0edefd805a1947568cf0d25ed3127a6e9052b675d62055b7d688cbf398a934eac77dff60b299a34bad239b8eef2cd0004ffef9d2b9790a44aa74b4145fd9ea5cee60184edc901f33398f8944efa7249573a0ebe35af78f2b663b9f6fcea84d7a7bc93f81df8d4060475b83f0c25090589ae74fe004503e7da9e0f71972b1d234bfbf86564f5fe476bfd1cbd5891431dd53f2b56aa195a071cf764c7955651c5e2066cfddca6e33cfcd5036e8f4cdcf69c4b1d5aa873fdfd47204709671fa961a755c4b81c07f08e68b55f61ef56718a3a675dbfdc283fe0ea99282862dd8376f47410b28807caa30c5a3a4e7706d2ee6f6de38921ba175165633bb2cc3abe2d5e79b8d1ffdf648ac0af1074449debc1299b9ee638fbe3403dd0ca01ba0ff0e950128abf3d3e1d57e713498fa12da873a4a4fdf70b1ae5f874ba9d347af6f3b31cad477bfe40fababe5a644368fa28befcc4232e7b4bb6348e9f61b20500888735bdaadfc39d84cb8463296a4242463aec69b34827d07f2265279ba4a2dab7d66125098427fbe9dc03bd85ccb9492511ef09e2e6d04778f524a8ac9e77e8d7c0bf5dbb69cb32abe322eb9a3738b86f3e579747760547a1c8b10fb37cd0d0b3a8a756cd4fbe2fd88e1bf082d1e34a4fb6a9a3c937ba9a6af7a73d48a317bcae90fa820760f756c4ee7ad3d7cd98d66f9bed4c7ab292aa7a8d1863ef1b9facaaabb79719586c8a7a19ae99e698c85f837609b9a2a7ba0ae483ba9c2c0005aeab346d713ebd8aa61876cfbbb725bb3e2a1ab27d90b03309dacfb009809a0ec4dd119115080cb91be00414c8c0c651e1cb96aa9ab4b9dc833d43dc9a742ff1fee728a25e9707d7a2615d57e9a52a408b77d0eb2ddeadce8fb39f8a9959f6e9c66bd2571f10c08dfdbe1f12260eeea4d48aaedf5ab103780218669e7ceeaeef9f8c88fbcb5551e0daf586d5c9ff5d6a25be48afc3872b165bf479fe72162d2bf2d1fd64dc01dc98ecdfcfc812934e595ac7351ddc4ba757a7021894f59708551844f7994390168820fc7701c35a0f0f7761916c2662601c30e73a4ac05c35c652b169aed572624c28554e3ec7dfd9714602625902e826e5ad3b762235215ba95b54d8c2bf581c1e09331eaf4bc2f1dc1021daa26cd6f57ae3748b7273b185decd95198ed94304df51228e645600a6c906597b9777dbc73d98def524d2059ed81e37434180fa364361a4d0f768ed543010b5a4ca4bd9708cc9a090a8ade10f486493b647f308e518ded9048416e69b0649253fd4cf9987f968d0e9152a50498e887831e90cf0786495bf92ac35506cd48f4e362614faca12b6b7a4eb8071c4199421a12fdeba66887836c8cecf076a5c37ac3c922774b3a66732cebb6e50ecf91d21456558cd90225cf5a24ca80169f32363caeb8321b360cd841904c413161abd280b9302cab6fa901f818d6b1f719d5955aac19ecec5b7d191f2b4ac24e8239529c46a40cf88484ad8aa5c07c98236364fecabef0909064c528c906ed5dcb466ea4c7c504ed93216566690ae577d7225d7b5801bae474c7b4bc67978e989f9cdd1715ff0f967a204e6d0521c06f5dfc3f8192feb5af0e688a2a2e18bf65d1154ddd8007c3f5689b782a4d0f1bdda1905b7fe720165769c1a07243f3701f88ba48162d412530a990700a2a5cf49e207514cac6125e71f2501197cfc44fd525ca39a5622eb868a416f1cf7fba1ac5a1702d91f8d1b4ae09009a73f98a312bf288b3b8d59a8e5be0fa1912b82153db2b5081d3f1c053946f02ee9227ac197fad1b5814ae34cfb06a1f43774937739b6b7988ff266d0794f2186c11300813a902b97a13b0a45544d445d3bf39b378b09308c2430bd4f2c90960cbd1993560f6f68dc415fe44d8cfa74fcf82578bdc357974d01359fbea982a36dd01be0ad9328fc35b79933f9cc2a5bab2692de6f1f8f961f122a7397e180c68f0f7538b9dec45c11ea06ac7a3ad1073a4063e41a821ac33aed17679c72c52574d656bc04ec1f711eb2fa77f8f64185c76b4c9a2346ce02a144148f14d2ffb3ba458e87136920d437a889e4c74b46d99a56839f6305ccad12dc82329092cc434ae800db7a1f8ec090f040fe791881ba38023daae4ac274da56570c13b7f15d2841967e6345bdb4091bf0f8e655aa852482595f8e33c62997c766e7b60db66cb80e6cf70dff53b698f8cf7baec03a4663d319b10c7408ab2957b2984b093535aea9c30234cfa21676ca32c42a4cbd65f8a3078d33b87ba6d7af6c9c5571de68dcbf64b75f617b2c0430df53d59fb9be49caa8651cad9c6edc56f601579be0ca8cd033ee2a2019a5e40802fa25e514f5e75200ea72f2b547705f67b61c11e9d06ccc3f9b6833cc60d8c8f7f563671702f4073d62f03dda71b8bb6c6e2bd5770a7f4c2325d041a233bfc9541c877b3402f8bd725f0640eb9d5bec391d4e2157936f3de5df205bf6e8e0cf849f8d48d912d457becf67180bd682652acb99bba90c083295c14c1774b88aa1c36dbd45fe0e7642764ad1851b6c140905058923fe80e5b8c615ea3b36e3f364c5fa6de2bc1a464cb04105a7c26b429537c10dc79047f1c30eb6c66715216e921f58159c43f3939b3c8fe762f24d9ce08839cfa7ac5b4110d35688e1e138bd0c957f23ebd2a779a9c4f0f1e19ba13cb73bee826c99d7cb0e45c08012ae4980a2e9cc39de0680cc97a7aedba73a1a7cd1e8e29398c4861a06be59620c4cc9c0df41972f11156fc0b3d4e49cb06911a3266580eec14b8d349bbbcbc928fcdaa4257f5805300d1d05bf0375185127331c1aa966895b60153a4f3116b5c22bc1fd71e5298501ab4a39e48653ff3b658ab944af82ff3472a9288cda9fa20548abafbcc3d8c299447adab34dec555649811b0d44f2e669b1693a50a0e6954ab63eb283870784fdb404ecc6d1542768866d294eb8b0cc78c7250a6a07149ed7283d35331c721a01ad0ae5779b88a9ac76b9eb1bab021ab3146f258dff172866b8d81628735cd84a7fbbdf5c8dd4c140792087f8742dc716d7ee449fadd5cfeb8b9a5ac93db34ecef791625420710d2a60e3ca871c852db2e93772e9876afd114283f180b09429fd2fa5bd11b60e61079fedc946457a744e327d34ae1c9993fa192c963dc48846c10be9ab502af83deebe374ca14bfa1e5169c4c60ce5bc14d2642e7adac4158de999d9c5e83946f2dfcafe33bfbbafdd790303ce2a621743fa3987fd6f84af2b534a99d1f372b06b9c5c5a422c053db0acd1803549405d00a17ec3deba4b315d395ffa8cb5798c0e0caec4d175dc91bc23cc810475261767aeeb3de3d846fcc84e52926ce81c7721880586022c9ec774dbb421f7c7a223cc7a7030b20bf14f6a2805d68c0f5bb75a6161c724209c26df049f10ec59e33c823c3e13f6f8db6c2b30184a45826d505c2a1bcf1efc2d0b4f886430e717bb27ffeed733bc6889e7320504e25c2b08559b689f7b2db4ac7be0d3265882c2d604310372d0a68a4f4d9f1dee271471cc8db2c268534d885706fb2b85f4426bb25374546fe86d4d2a11bc23d69029db370c05616304ee8d881b4fd8566074ec5bd18068f9e2c52ccbdc988bfabbe9495a76d3dadef02ee34a0fd2db5c0a3e87d09fb271c824a00a7d9ab3671536a2ee3d9157e5ca578adb46400c5ccebd26bb185198973779b7fce450ea29b467a791b2e3fbe8aeb9a8b8887e722e38e9bbba6951a53c274512c196b904c0151c34e6269326a9f1967147ddfd02dbbf8ea3adf8359c8d60710d6bf36d8f04ba6bbadf8122214d11836dcf46f44a48b96188ed692f6b0a2a1c32d9d8008770b49cf4d07214988a952096410d45c61de2d6688ae43d103800f89af6298f2e74b08c0c3538ff02277284ba1fd7ba582612ebe6ad0a7e8e1cb6d42eb12cb43f35966893a3e167ab2c75055289427c27b15b90291598f33a4332fb42538c68305dc4215f24cb103203a2021b0be010939788a4c560410ca74352a144e3c5622671e9390e5f98e0e62008d37567c1df7308a64e9d89c167c3ee9adbd68e2de2a5c83fb56443cc67a10e59b443cdca64c585860a33885d29076dad412a343bbe4e049b570d80f90960adf8c3197f4d42647f0f3616bf5340a552697354dc293d844f3b3f95c3fee58c28d98cf8fdca336ceee5be42f6bea4769214aee2b88fbe63c0f1075665339a9d41d19bb53af04084d65207bdc6d403d7eb7559313307c7621359ad3cdf53ba0f303f165eefa569eebf4558e40c8af11e9c146be2532d90335f5057f70a5615a4b030c8a629846e62b2efa2d8118a11dfca7057d6b9cc2799c41000a55c0ea58b5b7cd7e48e86b2449defdcccdcf9b1c7b496f5fcb00f4696ef6a3b3203991c8122378e02479c501dc53ecd98a4e49840fe3d3203aa12c74cae731309d06294c4a77e45455a3e1c929f67f6ce839ec02b1474a38507a1dc9bea83c259818fd9f9bdd0b3f65ffd81fdbe30647a315c9916e32cccf0bdd870f1bae072b20c52dd3413cfb42d5030b25a19e884dc774171d74f7bf57ac3cbe5ddf77e030ca69c980fbd39e1c9c7eb9b476c5c56912c11d52075304bcfddf8df6420ad3d9df94df1f766586d706c6930cd987bdda6cb3fbc43932d18cfb028b4a93cb282d7942ad511027be99219edbbdb2fff0b21ab62fb479cff6db263921ccac1f048b46975115b5b0c77c0cc808a8a10bfad9ea8ce2c6fab1770be0ba231d9af2aa9b8b33b39209b98e219d612a5a57488f3400607dc0dbfb1c34c5e4b8aacef3e8ed1e8ed69146100f27ad3c7264990842c08ee0a01021810b2e85b9ca5f0a076f71bba6d7f4646cb37b925db739706486a27b2965fd8853df2058361b858e35d3f466bf4b5c4c65bf2eec8f1511fb1bda9851207c4dbe934111c72703a3be2a090e6c62e300be2a01266625d2e2c6aa3c838b3d549ac4918287e891345cb7c6da8ed0bad3bd70fa8851a783f002d67cafc3d765d6eee0f6df7c1d61cd40ac584d0b2b0f30780a322623b8d554f58ff2093d442e34abe4fc0608c7554729ba0659faef93400c24aeb48ac16035081f5730b8070b60cb50419a4383f282e1d4abd357061ef6a802765aad476b5fd7840bef028ebe64c64f94c61dc113bd6524616ddf0933f2915f935c7faf1ac8918001cab3692717f335b25ca709f1ad435361167e368da01d9895c53ea237cee962caabec71ac787378d8e43204c5b0bfabdc501e80286b7082af2d7d7146a2531324c2ec57212b600b49f87d9a4f86d8c0bdffe2a1679116d8cc089b9108a6fbb858b6d1f2a625b0ecb00245962aded100c97bed8165ab65594bd372deca638ddb3bba1f4051d3de73f8946ec87ff195cf3cb72f184bc85b2a70daf860a1fd3fec8b8b0fe4fb445cdb506a0e80ff3fdbaaf01779a7d894a74e0d2c4eb559f3a7f4228f2765c866e1c10354c14644afc750b9ed73c54e2a0f0c92ceab253b624e454a5111be3f654e0310e9215ad63b65d3b239d69f3ccd7c237461454283d68a56c42b92035dff8fc48ad5dd7e0b656c6e6a5fbcf0820908b6e5dad38c5b72d822c3d952041a21e6acde52ce0e9ed88a2c563eb9d2ed699a34398b9aee0b1d19c16b2b46327d4262989a98bc450f79272085c5667673de9be0e1bf86c9009bf054aa4ce237437d9e3fc719a3749f6593534752057489371aea76942452317d3873e54e452f7c428307500658f19c0fdbfc36a1ced857a98620eb19a3d4ece1e2389a52b5a6d5e23351deecacde21d506e09bc70bedddfec035db847b0f8e2541437b4f73428560097c49ad86b94dc12086a5c80fb54fc177aa2ed10a8368338ec57d0b75401d32e4a71f8627011c2a5cafddaa20096b81488276392aca4904c3427327ea43e1316217867811f2b2581ce56c0ea86efbcd0909a79a99ed91b62de21e938f46dd74fe091301368f5e7141069801abb2d27a621772fca072321fb876964e82e320e157ece6b027adcf38b2ee13bf5dc811f75f2249cd5f64ed393dc4670f1f25a0824c05aa6a8bc7822adb286187295a1ada71a31fb675b5be6acd75ee715a419dcd44d26358c63aa9280d1b2550ff9dfd484188e8e787ee808a39cf61e823ccd131e414704042b9379a963aea3c972fbe3fdcfe4da36bb643fb9dfad50e75ed27c7c8481d4ac8e0de2dbc0c23cd60bb7416ea38ba63e1ae37d77682b2acff96313cfae10002ff31543490cff54993eee0a354df026f6c557322faac29a16bd6c56103a7e5cce0739114afce12b47b1ddae70bd6866b476a0b0bda97f0024bfd5937f5f1cdac24de205e1a2e8fa44fe3ae73c5ad3aa7d7347832e036d34ccaf34f7c198b0b8f00efa46c46e82d829b6c8907a4efbd8e6c432550a2b8fa25744d8706448b8ee714f9ae35ecc39cd5282075814db8330a9db580bb38b726bb15f5da4e70a8f1617d0ba8fedf98af058f29762cebbc8761077f74d152b5082dad5608355c3bec62fe6fa0fac810cafb190e384a463f290b6c8e64ca76186ca86f9cdea5ba70ec2513d2cb22b639e198d95500fb0d4b6d2c6ad10d1cc69ba2543055357a43124abe2563871731134e699676c38a434e723c890f0bbb2c0bc48934e4928ccd38d64b6b9040c18e06a7a9bd7b13a2775cc4641add3b99469fe9234bb2900f587eba812f87f9aab2bf791a5f42e15564880c68cc54ba2f1108de18ceb8b3e7f145b9e44ae58dbfaa380f5f658813e69eb7001d8c013eca16b5f90b20f701d801e325ed27af083b36ba412f9b41ad0d01ddc80c7ad4f20a25556f24e2d561935d493489bc1f7a7f61e673c4576948526ff96bcd01f083a8bfde2bc47c4a6f77e135ef508526df76700240ff848a1ab6dd3857061d59479969b5c4e70afd3d27e2c7742a84317cd502d1236f6896cc4e579bbca0017de3d76e05e9f03698eb5ac438f75949072df005ed35fbeb8ba288f2855c8895cdb637f4e40c94395f3a74c9717a38865ee74d6cca4a3a446f8900d09829030bbe0fa400772224e0c6ed5895e21226a741d8151d02cb2d50a788c8bfeb84e87732b5acf41aa35513f05bd6bef8168f7247f435eb098623bff539161fcd624393a58a00cfbadecef0b3c164281662e468c2288c2ff8e99c3797063e2d0223f1c0028f0bd9d7f3e5380803c40f0584ddb6d8196b552712129ffb4587361dc6a7a4e03657f02152b48a7114fd851a67b832046d20dcffbad7d425580b434649e39a3ec845d85afb77b996db96ebec054f26208d28c273b886e6e4d31a062df680d32ce3611c4c41822ce218de12b7b0ba38b1417342c43489975ded07c83a81e812900e2656bdc14a8b2ca28a6e5e822ae61a382f4234404dfef97b9e381db31647c6053adc8da8ff0f297dea0e5668a35e12beb9d8c663acb9c5ca038bffcae0f5edf718f9b0e96c66be5aa3ecf52d57b274f60fb22861b5ed086a6f862b2b06984aaec191921561ca0d6dd82ea070b70ac7786b0f0f8a227bf5254223c4e74c988f5f250ca34fa68edd9918aac3c06750c518e45155322b58b38764a667342fbe1c433c8947832cea256de010aaae45373f6a75cfd0bc1ec27c90d22cddf45edab99007ea84e9f2d49fd9ffcfe49117b71a9c5e9be30880cb5e83cbe629036000f778275b1e1100127806ec3676c558e87367c11bf8de73fb359253a7cb8fa731026270c3c80bcdbfe0e1022eff813e4cb595270e66f7c10ae0ce465235627799f35db45d01b69adee39e019c2cfc0d8fcf893a3606f9288050a31c34592cdfaf2bb65f025c018926fb7fcb85d138a234125572657f3c629ecaf35ab9841885f0fcdcdab37a65289a4cf0d8bf5e8e44ccb6c5df13be032b148343afcabeae36c42a251ef77917e341fcfb79fb6d0760822a9b81a88b301170539169298acd177edd0da01cfde271096b17521e141666d59fc0a0aeb9a214ef4bae9a8472cf11a2795e2f290983fda66138640e44d19938ef6bd66ab40fd3919e52a2ad1f13919e2c11c8ddee3a5a00b5eee3bc3eaf9c90a3b06cc0343154b4afe9eec7b462c4de8e8abf69bffde9de7ad28427765a87b338ca34bd6741eb530396bea21f8188b65ff7fdaf7c6e0ed17bde0e5533d154ac695549a7e1e8d3fa085d4c9634c8995a5a8edef81007d8e9df32e0ed155c43af6c39f441e2ce31e4aa5aa16ea3f507ae8cfe63abc59380d0699d39b7bbd83fb2d026e6db2a54a231c99a76e934714d7515bdc6997413d900a49e6f30dfd3e936955bb060b6ff303038ac2f931a6a4b43147c124bca3e3620ae0b5704db9bc21b1ba8a81f39a516590a66627295ce8dfa872cb0f45f667b95958a9789b7b395fc137159f66b05c8e2b2f95f5b9b66f6be7388b9deee2a70a1599195a74698d6b3aafa1e4bb20688dba0e0c1b6d1af8ff9ae4c798d7bacba2c3bc5a11d8cfae4f8288f426c9b74ff4169bda6d41dd6644c14bc00cead2d3698368de241ea2aacd427d1a92829566a6600b3a6c964f69383f536c04a1e7b66498b642ced84bcb319d0ff36e38ef03ceb55ef61c72bbafbec0210a5a2214f25f1895f6afc5edfd201bb869c4a6f0d1c4f5ff878b52d3461d3cf2bd4a90c88a34b2698b3be312ad36e6eee6f44231c8f0a52d2abd4e7742ac1f8232f5cad09610c7f237a6678a0afde99433ec8327776ceac367d4b744ef142ea9459471ac12c25ae285f2936aadf669e3decfb2dcaf0950a6ed6a68d64d2da4195e151f4c8d8fc2ed9bbc012a495283230af4877e691ae2269a5c0aff4ad20003fa5efda3d713b232de2d7d1a798442ea8dab640abee1d597e4ca5db12ab73c147fb1179c939cb689f251c5e5d0bd4492bea7cbaa84df119c65edd10de5c2be8a812cdf24c6e420d187b5154d0e836ef0f387447f699d3a0b237497d501c32828133a8c183153a180c1ec2d26da03b57706fbe04806fb96d19fe84185f00b5cdd6b9c1b11e80a0934f6a4cc59cab947152f34641650aa4df6f84d36975b2e5eba3ef150419d4cff68354662d983cb6a5212d1b9ae77aa7b643be50caaae406c2cd089d90c2c062e444c029345638a4e06e57bd5040020a8a4618731ac4326c5722cc3dcc4254601161ae456643b127938c3891692aac43e80981279a254c4bf8853c5f04c9bdad929224e9fc8a1a612b5548de89a832176a3f67fe915500634b08c99dc0e5912913c5e13b31de66e2469e2b289f0db21400777ea50a750f6e2d811ff7cb00432401d236b2ce9294f63fabd13ee732bf9cba4f692c85cbd85b302512ed894f97a7465a602165d56b00b463f6227c00fed9696e11de74f086fca96fa7ceb553dff33fd079cba49a2bc77109e90dac9f5990f5fdb1df014b501f428aacad11717900d404b62bb73ddfb35882b7887aab79aa69acfb14b0d1521b49f0ee13aec379ec49d04d3162a6a3cd19188e675945ac4078d970421b9d1cb2d66bff34c8ad0b11fc8f77910f20ae88b26577ab4aa4c4a21abdbad4aeafaf8b50cb557f2a1afcdeed4fef5293ba09083afbb412971e9ea920051812562a11dcdcb702964c50281343beba70ac839ce159fcd7ced26381670dcf54393b7a7698c8cc817a894712c99a8ab4eb6f92d93fedb9c62795c44cbc4422b4fa603040d7c2dc529b18d66a25ae9572c5173fad98872942a8e5c575db0311a59dccf2464d5e492a58ca9dffb23af2669686aa715a74a3d2d42b06b32ea5d58aaf166da1289e8f6a25a0890a165f796751d9cddeead6917c00468a686cee5ce29092d51008327f309007b6353f2273e2437a4c59b580ff74c5b11f4cfe193133bdbb23c5314042de312ce95ff69082b09fd2b3eadc50e5821b2b727afd50d82848273012c699b2db2de5cfc1046ab0be0e62fb606e5fae1f8f3f2ea8a6d47c192e3b9bbb1a4ee272b9f2ae8ec4d5224c411620eab7ef8dae0adfe8592881b8875ee2d635da77784231f18b8a7f703c2a1e095c17f669e4b91d7a89c6a7dcb5c9f107736e3f8570a313034006ed333d219dbbb905ec5680e85974096621a8458eb56ef28a4087991f22140056e2021d3065743c1f48788c20ed48f11284b83b1a93d78f696a66ab52c0b6a37b236abb00a8833c00792b3664a3eaac1c05284ee77b7acf339677e0cdf80d843d482ad06bfeeef32824e27e59c6bae78a9d3e4f6788a2c0f1b8c87a4e1f4aa253b58e0bf9854e2e6d0caad06401325a64cecc89469883dfa4606469e486e9921d75cc11221f11848d14ea4e47f1b6825114b1d92478cdccc37f0e61efee8f723312909add1b640fb16657c832ce609c81e7569450a0a4b05a32d0cf24b841b1a7b0d6dc4931bdccd9dc11b19328aafa550e14a3102a179a500c3400299133b6935e47cbbc7b60a9cbe931602e58e862dfa47406470dbaabee7943495843393cc6bfc4664bf34f84175aa69854577afa65ef72bb256ee203dc6caa8a31742b77b40de3f244a580c7e29799c1592dbf48fc65ec4e5de245ec6d85893a61a2658222845e3eef38ab5829fc9b174b405f4adc3a7add64e6f58713891992c0d4983bff4d58d6c0f4be9b17fe08a09896af3f4ca4d21476d6d578686ab44a57197094e5ba6475b6443c4bca396704fe9601c8a476fd606e3062944a8c72b52e0485e4736eeb3d103b9192fa73d35c3e15dba41919004d30a8858bdb7f6a84b16fe5d91e3e20baf9eeb07cd1573547ff085bf3f2df357e9be9a72e63ec680667e49eceddc64a72b41a4da02d4f76034202064ba367f84194ef54faff2e25bc8bdfc71a78bf4bfe654a0fffbc28ff9fc13b0a1393e581573e1028fd7a15572b6b0e79743f31b83c90a2c45edb9f4ce0eca2110954e46e0f09f6969bc6d266c1efc394c4a3c8416c7beccd34f36c73c5b59abc8089b6ad9766259347e0f7822407dc59a5d51c73d51ba74c3b97b11ae63266cb78378b89578370c0023dc8c270fe25ebc9c403666dc874978f9213f44096f3ad1c3f760698edf3e4bdc32440718560caa67a96630aa85f677587567c780a259450cd2312f9ab06a5e895c46ffc503b0c822d5aa86b107e904543d8085d7caf78be81582ad42e36680cc4267a8253d20ee1cbe17f6b9f6ed457426c0dec348b83288378c3a5de7f537cd4e28fc38de3486394f71aef311dcd72b0c095feedc1baa9a3ac620b8a1faad0a3066cd2af6cf9492b17300b8f3860c7ba77805b785c06588780affbda4a3488da76edfd4e1802c650bc071cb55fd4175c0a664f0ee760c896f36ff420f3a5461d5c83bac52c0d54aa8e153c699d5906659e5b0ad8ace32ae633af2e477063c0338380cd5a24c9193c67a75eb6776e876f333313bb2aa70c588d864fa584ad951389cf93c7c49d1c2a77656159bc3d78ba73048d1351584215eec1d121e34ae8af77ec99f6f3582545bbbbbca6d072e568f533ff60f045fbffc70010d76158101329850376385278ff3a91f21fd80a52927f79e5df6c9df3f021aa091140743d3d22402e3a939090080174ea13b181b18cf09a5bfed9e82a3d6a5f0c00254601f23af103d1bd90d9c2159240bbd22d82807bd2426989e9c62d45bd5599d61c19aa2756064806fb90920fa2e4a934f8d99f4c30baef0c4502a7ab5b52a3dc2188b847c7cd268c4825840102887eb5119025cf5b089d716d7b47c8c3548406922c829007c112989bc7e9bd72a093d1e6cc770e3636e7057ed2c195beaa6d4cb56024f524c462dacc0428ed8f174fce084695b443d851732afcf78c4925697d9e8298da3e8b2b28e0c2c5cba943527e004b0616ec8b62cc81ab73c67f727a865000b13d858709fd17d5b9dc2394bf181225804707c4dd50386a4be3480d9573afc32d2eb3768e88c0f90e127e346d5ba82517d97ca0aa1801d762f474a5a5888065c11bf187011bb028753b2099db98c48720abe932412ca8284a0f8be31e95fad1219428b67df8c911e74407d04c6353d34028ce1d4ef6b85cdc0222ca0e9ba839497d585d09ed185d7d4783828c0bc364921cabf0cf952f84e48faf34bcf02316ea63d999dda78380820156a42ed45c27afa7cd923d91057fc43a1c21d18761b6560c151c508cb8977127935844b23bf25988cd3b8b5edf77c9696b034e218c79699376d5cd65a677a24e954258db3f969fd736a9c55140b7f87a977ee9780a29e4b384d3172523d6a5cb53e1429f1905adc8531de30035fc5049a1118051298081f547512e81af14ffd888b1883ef8a8df5ded46a9a7c1eb382b44cadd21e4371ef6d588a82b02f1d97f88c3e05ac059cbd5ce0e965e248f5266049f5052038a501465fe8fbbd3f902a8141863b65a92311a60c0e4d1156538c2118ba2cb50d12543f589a1c68a6378d1a575d613e1ea2fff30a5cdbeee8c423b3172b6520f682f2dce67af8a95f6605d6816557bd5fa3e74cd29a1bf6501083a37d17547ab475239805ac5bab861569d8a755afc712edb77a3f3a5f39ff58baf916343fee7280f2f493c3e2232f4851127e2ddccca17101d13284926a02ff8e1b1542473dd145ece50133dcbe67647e01c91d95e30d461f30a8016ee520542c70ba0f8bdf33f88eb1af6148f557c2915125aac1350cf0139235bedc71ff379fbbbe2ad91fed7656f8e295bf4ab950cdacf43f7b9a0bf7bb7577b011606914306e9ed742d35869da568b40656f810ceb6b173b4dc61653f3350d64beb28430777126956c3f93610049612f36e98976ceafa459feb8eba102e987852804c932da55d6d384f4962a9db2564f5f71c549c043703a6d3e0a2c5aa73837e71cfc82404a520cd71943797358be747982ca9533d082215673f96b9f54f96453c23ad354ad3e1aa3beaa7c02f7ed0d0940339626cd8eb2cec7245c4a82c58a767c902a56d89f47389dff16b0a3b2fe290670f3a274440bfa253c96e81f2d4f118bec96e6c417c5862a12672a4513a7660d80427c30929a0ccddadaf69dbb2db0665c0536a4bc5d0efe058e390c7bf1fdb8a867df90dce0b8738837ac2e336ca9e0e94e69eab7647fde19103a7cdf8e81a1c64d5f0af24985777289ae3044b610d448d1ebd5f736f92a3a69e0bed082bc680ba287018304dbcff1f0d343d9467d32d5ff35c0108b4417c0cb685c83688a6e212d48fe97ad611f61eaea0e98453fb5c515d6493d2ecfbb9b883ba0b3a3b99cc40876eb3a40475c7fb499f2752ba113c4e94d1fbfe908f4abad4612c8de95ccac62c3a2b837ccee7207c2263e708ff396aaa318eeb292fb9b7f3c30d02639756059698c99520f940f0ee4804b6c2dc6cb307bfe754d081e222776fb97dd9184245bccc774c3d488030e1458b1d75f5ea94c2c0eba866685acdf71757a0f19ef707d9c12804324a092bb79d01ccf5175f30f113dfef52295869afcff04ba3c5531c9611d74dd340ac771c64bdea0f158204174e129822ca4278e956c18e3915bd30c81e1eb6f95ddced60dc4ca6ec094dec7f9829be7b53e948c11fe1819f1e4e6d4f77c607318f8d1c86a17f9398c360b5a5d426cbdd001edd9e2171228cf90aaa8f27d7dfee62d9d1f236fc71b33eb6972f24a15346d0e9daa561e8ce56bd42e7487f5d9057b6d817ffb7c92f31701d2f2714a99b9b3345ded1aa555960f99157acc3c3aae4ac89e199fd87e9aac6f01e4c2ae3d007a8370fe218dc18d30e5b1488a54af0900004b339a0bb1fb7ca6f152247a2e5b52b9d00aeea371e9ebb71f17b266fc5e39e9c5fa5bf0386460a5426e6df4965bcb65cb1afbd1a71de2bcb03de76b24e909c6144724102046edb19efdcc4d95f5639fc2617d51b5955c11c5f13bf6e98d49cdb775cb8ee8e76d4a7789489442a3fd97356820c660fdcbe789c1e077846f1638e588daa4e2d011fb69b1c2c2944703c8ca3f74010bba14a60ca0785d967ced639f79337df67cda98b95555cd9ef1318fb1ab69e729278b760fa985f1cc09b6b589c51a0264a7608e6343a2e5ef95c01540b8d90fcda3a2b532b1814005799ceac281140b7c5ba67a510895bc55957e5596a0bfcc411d353fb1759437898d02d3a704d28d395347d1be695b993506f71ef36a7885966381608f70adbcee18f1f41875d309d9dd508b46b93a5f5c08a21f54c966d625228c7d5eb7c72c28022d905e86f779da0bb692fbd9669ca36f1ab5ff63583ef076b8815958a9941af8411ed832e6d479a26db90631b47fed88a15eeacec985a1e5882a09aeb0a522e85c6e19cb0dfa204fa9746e915b91cd6cf975040c797f7c475c5c804cd45ed2073297214b4b1f05a047acc1729dcf30156992723ef75cb50fd96e7ddb26c0bfc77ec3a8812ccea70f3cdc41ece20475735c962eb7e169273a51c2ec27f3014d67676af59e00cb1bea274636f49fd879ecc6e36a1af9eb08cd8cd549ff13fb5fd432e819d1eb49bf1393f99d1180a1c64f5ced2e0bf3988e4dd8db9819ca4e469e142152936471e28ef6c7dee31743d5c14fb944722927d5ab8050fdfa47419bae738987d35c9c880fa0ef31446a96906de2240435dd5e46655dbda7ba7f7d5a9849c8153a0ecd7baf4ec9fbda42c4083a9ee601bc0aeb4e9618c754a99807292d31f19c08bb0b2d0e4fab2fc8192e2b846d66e780bbee9ce5f44b2513487c0183bd37566415455b8f66bf6d1137b22b5867f929f5c394556e801e1806d43d16de0741003d71e6913a4f39a1a761db4ba1a7c7a71c0f5a42347d133b91215a56d9c5179cdb4b9effda8ff33ea7f0fb33f7084cd3629756d2007ee212c6a2beef4ec8fd839b4b2956db69cfe3f32e185fefc00cd37bb0fb9cde09fa0403309d69976a3c7d1269b0a70104f605602b06ce61a2bc6cf26176efa0338b0c869e284135fd9cd06112e06aada0b43a554fa471735a6b1a2ec928374cd41ce4dc4e49f99fb5dfd9072636200356274f943849b8b19f489b94b0f332e442c7d4897cf4187a949a0c101e9c5d1b84dbc734359f4f47d64f7fc2419d89763a4b58e1c46e05597562b1000c96ab88ed44161815dd9cc42b9cdbe301afac834812ce8ec190836005a6d3931434a5b536fa1be58d35e6b8d142ed7188e1c7b55690d4b175abb725c3b122d46d1223c8a5c3a0547ab78543156424ee9271d79246a2341012248b7ae136a9f0a0a157cf88962940cf5da95f47089fc73fabaff27b44f38540b7bc539b73ff111ecacb0b403ce31e8665d8736c7eebed5a094a1ac47225f9d30990de43128bf5ef682d3a0a8dd036e0a1c678a4e0191e1a535f962e14c61ac926c3b2dd24f682051d1f2d10f58bd108a6b755b1954307964e8a166a776b6b1a324f0daa33ea9e462c923c1e69a681f81126607dff53a0b0116b9be1973a8fe15d98510426e28f3e6f1d94c48382febc554a0466c9e157383947ab032185d4bf312fb3600082c6f6c9c9fcd9bc58c2900c30e0338d0713a9ce3a43f509cdf9e66ecd5b03ead1950a83a37004027d5da43eb068e2933ea3507233ddad265ebf339213d967e9dfd64fde3aeae96db6f65ab64979d09091f3ffa66e930bafb5c223a3c1e43666ec051431f22b00f0ef6355dc04d4ae2a58dc6b0aeee2d7ab20bf24e1bec6e494b0866ddba686fc5a5ea9005ea80db55386fc64bae34740efbda3c730139fcbf29063e88ca5af174e730bfde2839c2a0c1014da3cfa0fb4b3eb24aa5ae754c57a0d5cbc59baaabbb0cd12d49f6e47d66d2e4cd927b3b0a15687cb5a3d4ea98ba41f5c21daa4dd91d50514cf32581c9cb30e4644b1541efe3ca6db979d8a800c4dd9f286480ef1c21df1ff31a39e7a7488f4a586e9990446c1e022ecbac40d280f5cbf6f544e0dff5c69bca54ed27f9a404210be939cb91d5870f25fc933f9b20562fad2cd0148b6cb18c915d6efe63cc782043e1151d29d21b77e7a1a9594cfab98abfe7d6cbd146c2b47832f905577d996cbcdc883533620175850eafb6dbf03bdc1b1116da242740a8bb21dcc7a81ebf671a777d582e182e6ac836906be3d991c0a08a5d07a2010983055f22aa612b0261d3e2b85eba801ea0d3177557c04176c141893162ebcf1fa042e9d3f4a565b94385aa81f60eddd08df69379d6f87cecc83af6d978be1ddde804ef067ae7b7ffd050df4c1577f4fd032f9f36437534086047df021caa2f0c50e724d1a1a48721698bbc4f0e266aa6d48c7a6cadd92a0ae9d6893bc2d85f3e7a5eac13078d91c33a71070cb0ba31f79fd18461f4595dff8efd18e58cc6f858e9c4f21d2ca803987247e072b1919de4283e1deb3e2d1864b79b65b07ff1dd8cb1724e938d8d3b006c6c5812b13ea934f4edd6e04b9be4073a46ec11bca2e58cd9e0022b563dea6f9b0e910583d503af122119d4fb13772e21bb4735251d08046c229d802da46cbbb76af6d00bed54499e6b3af09e05310c9cfe3fa2f944b19c0a66f1d2bc05c737b582b5b172399e8b66437143154be41ef1013ad07bad3d49c878ce9f808fa6f36d538eef1dc66c3fd0c2d31c41fc07c3b1fbdace72c31bf0b8a52145f0994f776515bddcada9cb5d76f6585d7cfbf08aba309a5f37d352a56e2f664d9c478fda4b141397f635c4208a4d66aead4d36b22ad798b1f2b8d7869dc3a33e448a8ca58c27d86358b5eac7ca89b1b990d5e394113b146be66336286170fcbe6ef694996e6080f31f2fd0fb3f03c081114d99ec1505a108bcd8ea6ea20ccfd480825d0166703b90b1d192dd8b6028d874cbe07a7c48ed7bde3214c7750842886766f493a782ec3a69c460cdafa45eaa89e242197d8c571a37130ffae159e8b780f24e299141d3d81a3833f97a2fc41cc95bdd1da142c57a1dd3fc4c117b3bf39344f8eb25ce5f8d382a4c61ef70468b122776c587a95ebe6cefdfccc96e617a29e803bd339ce7eeec979d62cc126ea870113921452216266bca5067013de003c097fa23dcb43d60589bdb916ed82c06d94bf91256d01eca6ffd1cf1d32a93666fbd6ac0a5596069969962ad497c05d0afb476866ba7dff24bb789e7abd00722012faced0506f905731e6178db545a9ae9d9ffba2af4223823ef1d1a71de9caa689ec3e32ace1a49a78025719220aa28b2ca61b35a3baf98ff989b6e650de8e19beef63dd8aecf1e8e2c251447686aa70af737a5c2eced5904986a3d10b1874ea1fe03689380522de7d5c71b8c601e441cdc5c6ed16d2c6d6b04c7a8d9545b288516952d1563398e2b22bfd86baeeffc312e7cc47cca7aa1f34901e77ef5a93c42a2f9036f291a0fa9bb47b4cc5bf05cf15cdb169d4e0fa4181bc6c5c8d9ba0125bcda1332bb5f1b6245e6fa2aaf80cfc792dbb7905e7b4566d3a3dc375a149195d563bb94ee3d18ede06858850353b29612a7546562934e3a7a54e671b702d07b804d8b7e2299fd89a212da828dd3acf8e3e93a807d0106a3ef83a3b78a6c7e85be0483723a230badef8a4f66e5352e237c84f4272253b04738d7ad44c88135255dab2dddfcdefa2399f1c4261463d0503c85462c3166188cda23bd75312251c238a0d212ca1fa1d69fd59ebc058048f63c5b454fcf1d0a9a949a2bad4eae887ff886c05ae51afc3e1844869fe40041600bc18787293fb83f795bacf3360ae0136f2a723e1ccc8464a3c252ec97eed69d1c008738e8f7b6f241a46227dc618e6209e8c55c1a1f705ae4bb47a896e22107c2ef69c1603604d0906d92194992b78902e1621099914e7b7204b0c4e7df6c95f733cc3051933238e2b8fafdc3c46f440dc9d690e6d8c9615f3136479e7a5e036286afbfddb971eb46d8bdb9e21db4218ba50d2f982c5353b82b212a53e93b645334694429820607d93d1948c5d99a477a7a4c74d1386288e2a7aa0b991cb221d07750eb81c8f902022d589bfcc014080074d04644c0972547bc0446a3e42d9b27f099d51282bfb4c72c667d2e23a7f5bb54ce9846c1292938881d952836cde32f89d5fb77d988bfe2a9859f12e858b84b73d42cde26105acb4faa3d7b6c8222438a01c49a7c6c5abf1a42d4510f4294de4bad1938c9271618f4a767e740e23f11ac433b51b33ad39f326f67bd84dbb4cb3fc47b66a9c4f6c353aee7da8e076b521e572778e84151463b79f13cec70e6b7f8dd8fff85b55e75f5bdd910a8266ede48f410d9b24cb658b5769dbbe7bff5fabf616315f0e15d904cd62bbf24685b5f407cee6880b1c826bf012012ce06cdef1bb5f0573b369d024101d0a32f8ce30d1039e6ed258f7247f838437239ba24ce247042028f018adcea9f93743635c709013aece8d4fcbdb7c11d2a578be36f5f09a7156ad3dd463fe8f62d4a0aa21b03d46928d49ff1fca5216e84f797fc5a09b9571e836d790f718805628701d3034ffb6e823d9aa5f75352c093c4ebf3408561d0754c0b05f667571f7a0097cc6148bd8b262f5170fddf3d7236ec190dd1d481a92795ec3cf082d0abdbf4e77528eafb814c11a8a548ecd04ebb2549359ddab52ce79bfb727e7e0e5a9bc999b34a49ee6192258e0cbed4d0cd4b2b3a87863000b48530772e9ff821bdbe9063639a2fcde803cb8fc07642768583e92953c702a5ebb4cccc42de424f8be14a450345003e8149fcf5c6be6523a3509c7858d7764abfc1a3825ddaa4dc89f16c9813a260d1ff9359fd5ccdd59880c383929023e3a6acafc38f797cabebc2fc90c9e9de8320c9446231a2cdb699c2b478dc92d233321566a2f44fa763d8ef012e936f05408a3f02b35bf0c1cb7147b248f4a22ea225a0a4fa50636e60afcb13729035dbdd55db42d4624768e23d5cd35baf4f745914f1388e3cb86d6578bd23ee09a90803c405416cebdb2df43bc60e1c2579344356c3301b87a48f28271cd4f4d87ee50ee90d583e9e2a632a3461808cb63de70c53ed9544401bddccd45d3c40a7ae47ae2bf363a519cbb69826d54c7d640a652ef6c8451d77f704f79803a00d01fa8a7775cc061f9fee52d45467a1c1d37546d377c206610ef3a5db1b1de3f1917a176c9b377d2ae45409fd3a46d80ae84fae6f54ea84ad1b72a9c7fd76b03b5ac0b0550ff7570e4d27a10087d0b8a0dfc331098552165a99468f82c488907b9470142c6fcf574a76bc1c79c17a082cf5c4359915b789cfccb1e02e82f705458cba4c0d663844648666def096bf615f52fd71baa45ddfa5cdfa8c99ba8f40f2ae52d469601b03c3452c201cc7d5a434434d23f1779f0a71d6e4dbab4068487fb2454244a1026c30214b9f1a7126ac4d9db5262462941eb9baf2117cc0109d84c026e42bfd19d381241ae091954a33307e21b05be99db896283aa418ee7a31800bb3763dda180c32fc2c47ab1b2a1166aff986f2692a2e28a2e0522df9607d05646613fa2f59de91e7ebe8af30d8cbd734bacb02d0b3161d8de9f012e3a2b01649396c4b07b58ad11d3f7fc6b6da0b51b2e8eae7d0ebdb6c1d354a0d217adeb505a15603cf08ac94fd2ab62b5ecc3ddb799df31a637994a889bf256fc5c7ae32b129beae79e0eb815e4e57ad4897880735bf92ae84eeb34810e89a199015ee581ee31460d9f46e2a68377b9d0657b8e8d9a92e43d15b8f7ac63187826aba70f35c573e228c043d1af808ba54e965bce3609371345f30545cef467c6015712c608f75a80fb506133b7d48b72bea739f90d2a8c932ce527daf23baa2f54e21c79963aacd3aa1a7dc73c62f57e05cfd1345c5836c25af2e6b115177fed52f5dd9b50abfd9cde74b46c82edb3141947b65907d6893ce818d181f93c64985a025a915c47af1dfcf1f45d5190d963f52da6ac53f9610ec46eaedf73ade2f1e829ef9060d2e0e6767be21108f053f12512413e98f18df0f39d98090d9302a3b619171349ca40c90a369d0a09edc2b721ec67e302d89cc7595b68d7d45a6717c41e82f7430cf1cb08fc88d3ca3a35f1e2a9b0b53aad52dcf843cc278adf469e26995ffaff1d722e3c4a5756c8624de90becdfe3f4985cd1056e5580324e40d4262d0430ea7738c1d1412d4fa79f71f304c93402faff600a1d915c698087c1ac8c6bf22fcd78a5f87829756ab667641c3b2a234704b6f42483e1058ee1e5a950f210b22090da17de64e3b0209d0f285bc256c123535e09dfc07d135bb6b69d4a79e0f376ea5a62b81c3b8724c7848a58ea1f6050926a9be738fcf42559a66f16c04ee3f390e4bb466216a41c41ffac4e52c7ddf3a00673acc7aaaa6d5054c1aba7260dadbd7656a4318976f0668712511391b5fdf1b76adc3f6097cad95383714320e235bce9f3ae8896b5a706128e5e37c66274005af8b39196c4f9cad969730710daf8e115a284a5a10482f6026af47436a990014438562681d732279d6e4489fa837f96ab0d22a0439181f20e7fcd4e520c39659a60ec22158026390a48da22adb474d315f6ad206843b4dfac10fd87362d06a3fe026888ae13036b1c363f08db046723e72ed3d605ed8f61988d9390a0f4b25bbbab46314e00ed157c74620a6043e1cf12f2e2701bb780447341892d23b6ca84422808a5da7737724080249f638ead3bbc8404c0c6d2c7301b20594b73fe309611d11a2d333db002d65854f06e10eabced305e3edaaee1eb62600403b9243eb1042506ff92042ddd709b3b43f83ba7cd4b33925e973f3d1ceb73ffeb7a2857b29eee96a6bce7801c35d0d2487363946c519c255e3991aa1ac32ecebc971374e7ffb692e5c35436ca71511627127d5a59efa75d71c2f7aa495a077e074a5f77f8e2cb3586d8d9f142594f9f7eb645433c6baf920ad7ba4c05266d32fb97b0a133a06f91ee0525e44db653cc8c629c89f4473cb6d12fc15a68be94bfdc998780ff3aa2a0b77ae086099e781325287c93a399bb6c4347f0c96f8ceb4f338447e544c79642d44b0eace3eef9d038c952d73f99ef238b2a84e60864ef8973e56567a69bd4f62cd6c491545de8c73f0adc06562b11f596b7e43940b11c66fdc9cdefadb2b821b960d5cb6bff1aaf427657d5cd74fdd1a453ae8e33d7a3af0307574ca4808380d77085c423e7649a97fe20a41236861153882ec65e9db01186ed312a9a83840d6d1c31a41e3d19a4dc95a4cc1df989e5695f45fedfa601fe346b513a37634fd31fb7a1d1599db555abd4f311f7d84c934f769de52c0dfd5fcafe8f57fc2fddbfd71280edcd6fb1693f4ce652a5fe860895d691dbdb0fba8a3efd3b36dad1499ef7e9ec19ae251835ea3484574048f8826b68db3badbede53c52b739cd76c4532fbd1b37dad87e049c0cc1be419c61a2dc76e840d0038ca159880c512c310dff504225383108d723654c9515e9a349d965d98d11ab9fd554910dc5942152cd37954458120d6fefba9f63c6922bbadcd8437bcef56ee8469b9b0686272b339acba0e9bb31724b267d56fed05983c47a0692b499862e4fc1cf0fe0f3d8e04e06f7af1eb4edfa61013dff6325bcfdab27458ed49b6b41f9b1627cc36b6cd4cd56e30a372f77af0f149c936efd3ea8d076bcc2495658c412df74a95b7b45ef52ed5f2113f9029c7c7df22ad8e7c5136a59d9fe84c2ef44b28d6293b33f281dde9bb37f00f288c852eadc8bf1f444e0be7b87ed5ca64ff9f2950f73b969ebcb3f3f9fdc171940e786f2b763e9ef98cd5aaac37386bc6c0d37ff2ed4edb6f545710661809331fad7269dcd0dbfe2fbaf38a4dda6c9766f87da6871cb076bc66825a40de8b0133dc81b1d3da7bb8275c2ce9d04995b79038adda64355e57164e249aae1731508933325287d8640cf390741877cfa25297f854d415155c15303bdde68da004b7177da7461cd52b856edf3f360db53bad5469bbed47e72a15c498a54be0e88183ed324b137e247053c34b2894c102620b26bb7049451149557dd62e90f844ea391366d5e2868ed02ee36e2b262dc073cc3f1016206eecf148fb827f4b4d342e281a3116ba5debd8a108b604d45d5d1405508f12021b38331d6047710a13027cf6a0b57010028e9526a34333662f5723aa1a4bc0b338b789ba2073f89c1fd05e04fc91fdc770cc8fbdfd63046840fb8ac00e0de28003c05d029f7de84c066ad3fb46309c064ed169d050fa569113805942fec2c67b9a7d5adb435324b6ef83f444f7b042df2c00e26990a22b2b6bc701252802daf5e78fff9a53e1ed3258423b3709252ef305efe6a69a030fa47cfac63aa393136d629dfcaced1f9af0630eb9c94ae1101e01fcb89ddf38fa9bfe05d4594dd9332abeb86750cabb7c4d35093914b3814868d7c21826cc0cea510b80ec236aa394a0f9c2d581cda1615f39e012ca373755b2ef75318fb76e689bc1f42dbe63829497ab9f89375924dbd00430217dab1e0383b7b43a71371c27d03e015c67936df646a9ad3fa2fed89db8140017335254d40648cff8e26ac237e3849b733d1c028d29534a3b02450684f3ae35687093bb8b8d6ecf9280fa0b793a90e57015a1e02625f59df8230af19172a6a256a94920668e5e3725cff8c58aef3c7c701f7bd07331e7237d1c940fadf6844c7fb3dfc770202a9121c1c150e12e8257d6ceef9aca5e31cc186841b41ff7b3e6f558bc6e73c888d38278468b537039a38f18a3c2b6e02e655b31ec809d0ff392251a5011fe492f0f20cce1c4b880d6ab62b6c75ee16026282cb8f0fc89659be719e87941aa9ef650c23879b094161e3ec7070ec5f3ba41c5e53753cc2bbef48be54b599071f0a1270bb0ceaa3f3179aa29e518ee3d6f45c3383808ee634809fed6596566b8bbeb183558388bd95d02df0514a1b15e24b6a2bb0c5b83e17ef8521793c00df0bf87be23918fccbad8aa2a0d5b673a3f6e5086f42a9abff2fbc73a07242b77e624e011d5405ea6f83d9029c3cbfa92f765cbf33cc1af9b54b10e8e3ea224da13dce809126f362783393c7e74cdb9abf0281f3f8fb66e5f6f8962f00cd653f30aed81ab34898fb953e6ceddf400ea089f9cf19e0d8d09db4a36b4cf269b846671028d991fd66b507ed463054cbf68bcb3a80fc2909e764c7ea96578b9b51e2b73f58543f05ac9f47a3fc5c8f2d3ce31c5e738684a97b6890fabc8ec69804cfa782973da50b8bd3a95edf90d124103f102e0572b9fb283382c8c448ea91966a1b232ec786578a0fc04f0a0867414dc783a9b258c7cc9cda43b8a6438a5477af431d2337d347121965550e7fad18b358f3550173183558df29a6d1e2ae022bbd72a6fc088943ffe83a20c0268877c9a1f8480a8d7a25160bdfd237d0967fea524da93be8048e1ee9d213ebc096d93cbc4b8aefe13b696c0b48844dfb90d363c4e03771b3da7afc2e6a7041313dc2c1acc6d8492919460eaa798cc3216a8a48a069ee41e793bd79d82a92eab1cc098ba306808d7aca3b0960d462029a8771525d400ada4a070a7fb518a91e8d9dae0b737400aff93ff85fec0113262e937beb008a33fee289462576f853dadd0fe574370cb4ee86dd07e05f2354a319662ed24e734cbf9c685a2f6899d0bd92818843206d4fdfeebd09d95bca24a54c01110528051c0528a6c078914debc0e232f8d6a04964ad755abf14ea2f34bc8b595bcb15b9ab9072d922f7e32bfca24a7550bca63e339d76e64bc6e6fb8dfaf9c1c25ebc1c4c0477c15d30114c24b4f2eeffc55ef0bdf7de7befe5b87b6f8d0de47b3fc45d70d39988c4978ce9a4b3ab8ed378e4f5e10067eeb103f1e653bfddebc3c12ddcc8a0eb9c634e12f8dbc264c49b3c1fcf3969e589b29fbbbbbd2776e038ae73f114e17dafd7ebe57d2f342008e2e45c25c20f638c43b1b6e50decd3d1d1d181ede00039f1f1f0f0f09c88790a28be9e9e9e1e143e211309be1ff0c59c3ffff30366302500537cb56b5b8eb872d7b844c9b1093e2e38501d26ba3449620a9ef2a547ce126b2d672dfe210409093541dad880650bbe5ad275045e68e8f142848e017839f279810282755c90bb660495cc93bb664494cb83bd1974be769c3001c070e4a8890c66daa86932647440c244080f4e4620b90fd51f7d60d099ed0883e6ba0257471f18334fdb239da0256193ece80c03a172c5cc452bae00814504474fbc0441443fd641464e54474c35cd10430d4410d1ff0e32329244093756926eb0908488feac831ca02304514c471851c31244f4eb0e5ecb4a7ae402031c1cce9f1f2990fd647a41ee00b4c8fdb0ceaba05da4ce6ba041f8e342030c3408e91665f143369dd1af9d3f9d112be1ce391fbeabbe005f383f04c371793a3042b2f41cbed853805c81c6183d127c69f3cf9737d72fbf145fe21ef21e827d25cb192d66423b302924c1b88191039300f47dc61a28c614630cff1eb29c802c6327c812f3903be4646a15f461e30846e0724af510cdf461e384228515206509d50b4b7c4087191070b44604514f8a4cc142a4f3f45de17f3a238f4c5f5c515fb84277b98dd22ae8033a6fc7e38c02bec071b978c0622a22ab0c1596345fb5a30753151e3a649851e88c9c50b4e0723ad11883ce68b41b96c244b902e6a80899defac00d441cb9d0836a4aa7091235830fa82f6790f454d410475b2e84e0c80422fad5f5fda201c3730835b2eb37f0ec4a41a58a62d4984894056d2917496ada10b919d9d2818dd1094d40d8107344f504e5013ed85c25598204932512e003cb1a282246acd121ca94ea13b9c4dd943a91cbd69a525458329d51e8ac87b8dcd96b1734c53701aa4bd520db40f5e90f16702aa7a0e09c424e28620eb86c2a16e5fc2002b40804caa2a47590d18f333e3cc0420f319cf142447f4e75d067c68636688828d1640d11fd49d5414648ba90d18169051cdc0441142481244caef8f0c385217220a25fc7277af4437f7a454c4505b977ba73b1787d3fac87e6b70a777fd7f8f5ccfde9e80de4bf22bb7f19ab408276580d9a4d902df8f7673528464735f31864b953cac83e4958abc0ae8e9bc1b2bba00fb84e3caf4e817c2275eff5a9670b609f1bbb0b50ea1800ec0bec631e18c7806d02949ee8925deb4f4ad9784dbd1fb88480cb95a680d7b48731de75dd75184e98ed5b7bafbd5dccba0730aef7725f3f8602c32e77b911dfdb5de3aedb36751ab0eaa43389e9d58211a9bcbb29d45aabfd7b6d4867b6db56af5c5c4f274067affff6d971decb7a7323be5c2eb556d6762147dd3bdccd2ff7f57d337b2faf4dbdc9e9a0d4a9b5e0fccf9d66bf3686bb586c522d1863dc95df965c471a3373cf8d5d53c12a7b93eb46b09382ef6d6f0fabdfdb35eedadb91588ee3b80aeb0973ad4ef3d79f8f7ebdce3961cc7ca1bc36c0ad61119db95ef63d0e7ce1d9eee79ceeae39efed3e1b96d63a3dfc80ceba8fdd7bededead77a6db55d1bdc809b55860c3a7757ee6f02388364f9f5d8654c06c9911da66ec40b995072862ce02d9ce5ec735555b6abaaaa309dc1567051a9fa644e4a6b75b7e31c4bd98b5009ee70096eb2ec6ed802eeb73816a45ff5fc655df7ebacb5b6c9aebb1c213b9dd5fa62439b21e1e6edb135dee79c95acb9d610099eb4fcc9dc07b214ee04e19fec0bff1f3a8bb58afe3a8651787e75cb719cbb08d5736aaa43835228fb874ef0fccec1822678fe2c5401cff04915da217b2e7aa8a855ccf7826615a87edf2fb34ebbefa060211759a98c030e5c69e1ca8f3c8366a5033ac3c11568babc6f9c1914127291e3fa002e672fefebd384bafaf3aa3384b2eb2bc8418d1f9a9a40c9333a4b76b9c81cae85d0fc2bc52d286731a10a24b6c1fea2162e3b0d2ee79021f40865c13d71e40a3e94ecccf5ede662176c5f83a210060c4204267074015a83b22867ccf27c4aefb7950abeb8a4081ea555d8a763977388d8050fb11ecbe10bb8ec0b88606b7dfbb3096551ce786a2164b9d93de40e3821c2aa2acfe8aa3b7af6b12f980fa3414dd411d912670bb27dfb529c8fdbd6ceaeb7bb3f06fb905417ada2450b7d906db8029eef3364d9ae98c9fac70b5d98d6c99ba6b92f6bad956bda8c22b9d3b68a0afb72bfaf6815968d87cb2f4482699d97de6a474a353ba0aa73ce39cb1dcca0d19f2dba39c9aecaf52769e4b3d2f0326bedd7d996ad689808f65eb29fbac384ba69b1789e6701ed1e3ec8f3bb46973f79862cf70a2a349bef338472bf8fb5769547d70e63c021123cdf4324ac6dfb2da345a8d9be7bf884e7fb935ee79c61920a75bb217feeda99375135344bd4d468d5d25c1999d9bd3a55104eb5345b6a699ad46e58b55b955a1aa4ab22f50a890f9e31646e8ee574a5c45df9d8d1b9f773e6881cc3676c59cc5d3b132597f8bd07f7aa250c3bc32497f86b3eb608a9128382961c984c1963a6898e19292c3000c80f3f0831e4880e26aa9596992523ee4e97ae8808afbca050c55c45e55cd920a482dc35336ecc8ce921534abbd91ded3a1c9b64592ba514e644d471c8808a8ad2f0045c6badb486798a7a616a0b9a1f6a65ac9079aa9149a14646a93626cd97202d4d5736820023040b616a657ed4c828097d849055468b98372908310526d4f165cc6d0c1a098ce0090e59a49a0471c2b03162a2c21d2008d912460b4bea76e4050136726831e103574c1041977089162ef98022c9c2b093e4eeeed6ea08b68a4ab262c2eeee06070799500c1338727e70e51053f5e282c35aeb03111e171c2d254607508c10485b458a5411c1d612969024c444e121c605174f0c1c98f0462301060929536e5d7e20a90a93468c8d1638b0a465a986231d7c382111a6ca8601c3b465c358b961b424e1ad9ddcb53149908c016267981ec060c90ddaa84a4b135777af8d49ca7e83c81d3761adcce42f77cd2a895ce2af1dd1437c31c325cbc99211578ad0686eba8ef626022db0a919994a9a12c585091913342698986098be20d1f2ea5eb11218e7ae81f1013b981db2cb72968381ca37770dcc925c3e4d6be22c3535304792301b99ac8dbb0c4b86259361d1a0266aa958cd0b13468393c068f0179cc61e71f096e97b5f5caa7e99d3e9a45283a932b5e2938e286298f33378e35eb8dd6eb7dbed76bbdd6eb7dbed76bbdd6eb7dbed76bbdd6eb7dbed76bbddf00ddf38167e64166058ce77f7ecc920292304eff57df9cb18d945de122cb54e6a4940e1b2f594d3940513930ea5e92437e994abda115bb96b5cae6a5cb4e01d2655e5610ac113fbc0f641afd5a376044188a82c80dcb5209e727dd708d9fbcf7e33bfc818312a107d6c0653d517498bf9383bdb2f69f9f5f5adf7633f94707aaee32ef7dcc3388ed3c21cc7e3caf2c0b2d635620ac3e981b4c4e3c7c663cbda7ad8c041b612eef67bb469d3060bcbb663caa6438b1a1b130e36b61d4b2cb1b1eda8ca5d6edb8e2c594a4e39a062686ef895dba6834ac75405bab6252a4bb55c3e0d0acef3cbf7de7bc32b7caf0bc692cbf51305da96686032833b7f3953a64c195b92962d89698c131c62942089b1e54882438c2d878fcce5b6e55092c9acdc6561646164266ce5be92db664213ea432feddebe059445773fa52cdbc61488025120fadcad6306545495ce33b9dd6b7a5b8bfdc1156601a92d179620a206eaa6c49b195c6f722052c919340cc3d8b5de7c6f989c80314f6edb0d35b9c45fb56c11d56bf52f3d70acd69f1b5972ad0ffb30088c93db76830a08b2cd6dbb418318af5cc12b59c293fe273266cce8a76405f2fc12a8d1a430bc8eb2a074ce39e79c94ec49e56798504b96cb86fd199597fd7ff13aef6c9b266e4da0b1d175689c2811c414d50d46886a1bdb8d29b61b4a6c3780d06855ba8e269301e12ed33203c81038d234e19246098b8c6b8d126b6d122e2749585eb61b261cd11282ae87b5b9dcbdaf7cd95a2286cb0e1b4ad6b871017433a50715374270dc38a1f2b22c9b8da9508b110f157a3461660732282411b99aec4dbcc9eee6060a5460b96d36ba642fb7cd06962128941ea24f852a108592679506bc96954e042e2954a6505535e85acddb9d541588847b94e56a298d00a544ab41dcd349e4e357a04b65471f0f9c84eedd9bdf24ba6fbf4609f7fd39b284fb6e6b3cf1609e9181cad1fbd728812ce13ee7eff6e9d30bea1185a2b31995e743f978703df0a7234929872467e63cced3287abdeba9d860518dce056d00f8de7b2409e283d5ebbe922f5cecc2aa3c9fbbd59d779ef790131fecde03df033dd287be8b9c5462161faa459fe8903cdfd2b00f7a1d09e177df44a04802e73d255f50d8eb840fe35e87c2469ffb4644b0f7ec48837e51cebbbe3e8da2d7e37cfd103ca8e1fdf739ef410df031581416712f7e0ca4eec5efbb17491f7f1ea8112ad03cf21d120a6c9cf2b9e4143cc62ad0c4c0cc218440a3010df8106814f978f0fa9ccf2149e89e3e8d221f0f724800c5a7e40bfbfee173ef85df6011f89c3886a30f7d23a2ee3d7f7d8e075e11f839ef455f112673489ffa3854df8d3e958cd1f40217d915c888a81bbb96808d2ced44e035bd3fb526acd4b6c284458442bcf1f20609fbc34ff2cd1139f6b2375972b81748f8c31b271c219525b4704a469b9285361ca0092765906200420a2b4d160c5d560d48d65a6b8d9c58015286c712aa2e48b7ac279be584870c4e6639ddac2249a10cffb22d2d4fd7ab7b1d6289e218cceb966d8754d2dd8a4187ad136e6ca18063ebc8d690da4cabb6c44da9c604543553a9a559486c82d490a54629eb0c52380305b96b59406481e07bbc562c2d364a6bbca6b525aab4d434401148585679cd91da9a2639d6dddddddd9dcb9694e15f316094fd723dc4dd1ebab6876c0f55da43b455f4d0cf97fd4e0a7e7d33e0f5af4e86bf055fb8660537e8ba51c67d3bdd1f04341a0d5d4793c9a6b8cb68478451646194acee2633c301c52ef8057638e3ece3dee3b8b2cb93c41d65c16bd9b5cf711cc771cecde02ad0593a0b87b3a287bc97b5f8bd03fbfefe277b859dd781619ea73fc331516784d119f73ce3d3199d8963e7f0bf06ed844f77c670c4b41518d019f7e0a8019d71ff8d1dc46815dc37375f54875a15bc9659f0bf264bf0e783b45c015a96f1fdaba4b9971f59d2f2f75c8fb1d769b18202511d2ce2a72f92e5f75cf9197c9cb10c40f59ba8894afc44460626c8f3e7d71c5e497f7e47be5eddbf5ca48cee1f034630ba7b58a5b6d6fa1403469debe78b2c9fe3eeb5d6bd564a27f7fa6eecdc43e0ac1d5df37e6767e350bdd65aeb120fe45a691073db961ca13c582425b54e49104c9c5562c34b090c2e254bb012271c254a9f4e6edb9225579208825b6c87b5d65a2a3e4f60763c41914f48323327b2ececc00345c431e58709684be1098738454911b927b74dc9edb3a26100e294593d3a32a0fe246bccc3607d3a4919f47d2ae96f948df2acb38e0ca0f565f857faf42b8cbab1a5f0c39684898883c8832d490a498c88340cc096a4882d899398032edf8219fdeff0e72c309d55dc55244f4990b28b2353327d0c6248d1177dc065578150fdffdfc51bf0dd0197ff2fa3332aee80e9977f838146aba1eb6836489122458a4c0aadebfabfa01767b9155ceff5ecdbbddc619805fc8932e0f967c41784e4b0193912622b62354474e245b038131cf44acd9bb7fb089391241e70f7ea386c478ee410554891db56444a91177289df6657d059b52de01667c03dd62f4faebbddda9f6294b5d676f724cf40892bcc20ce50e71141fe950e9135a135a1359129c9a10d563a7f825eec1a5b102b7bebdffb46d9b3e00240d108a6f3001aa093fc4423d873f951db43dd3fc741e5a0031b7896713dd737c10d3c775f7d561c6bc9106aeeb8fb33033206af9b45d3b664b370aff400b4bbbbe912f6dd36642bbb5bdf00570739d880fecba824eda1f63a69105188184474725857dcb5ba788253cc7d1d1e82e7bbbbb7ab87e7f6729dabebaaf943ea469fa8dc5eaee3a46ef4c9ede5aed4cdedb5526e7dfef04a9fd2c422737e4755eba4b5da596bf59ae4b38a4d62537777159bbabbddbbdbab8fdbdd4d7d76778b4d7876572ba2506bcf762b5a102ba20fdcb620596c41a66c28f4e06445ec81db1604ca864296204f4e5b9e4413ee75fac1434462623b01c9d684859d8e4e70ca0d2a7975af2210dc8d117fe01ac68ab96d4d42e4aa21b5e6c0f32bfd39e7a4d5ad5b5be9b4d65a6badb5d6babd5ce75d57e9ec3afffc729deb7eee9dbb5e5ee77abd3ceffbc02a388e8353e9c4c1f1cf41cff9401c9c9c1c1c6e6955a1aab2254b15aa2a53d65ec7c9c9b9caf4318c992dada25be84ca414ca5a6badb5d6dab16ce1a20ecc613b3c27621e8b553a63ce7322d613eb41e1f3e33f3f95ce1f143edecfe712a4f014292a9d2950783e3fdecf0d99be04127c3ea648f1f938018da2f3b7b6a8d2163ddad2a2aab2254b15aa2a53330a6a1e994f742bd3af5af5eaaaad5ad0aed2a2059d94d6ea6e7f24490a2890c93eaf00000e0000543a01108a3a3a30d8ce0e4f577f52d04d5addadbd6eefe5b8ae73bdfcf5aa74be5e5ce772bd5e9ef7810e82954e107c791f08e2e0e4803839391887a1a8e33a3a954e1d9daf865f15ab8ece5761b0afeef0380f4fa5938767e7f3d1c7127bcc7bbc9ecf51f8b88f4fa5d3c7c761de0e0fcf57c713752cbf0c621ffd9e0f85a34051e94481a23ecddcb5dee5fa34727dfa2e12c1b3924a994220899824e290893868376cc2d60444b8656bfaa169aac907dab535e9b0c484c56402e7e2d11bfce5b635c910ba6972017f121e15c7302c465581fa1f37250da13f7bd9ccc791fb5b0b442b5b3bb57a4c854c609cdb06c40a4815f723891f5bee9a25ac5405eaee87c9f6e4082b2233d488ae9b1f53f787103d46d0b9d68fa70ad4ddbdf7f250e28a37b56e97cda8e4eeb654a943333500409004009316000018100a0704e2902447024dd4dc0314000b6b7c466e4a2e97456381400ea3200882188862108041288c410819641c93e8ae044ed0d408025c565b45da0a3e2b2191a9bd25fccc6c1436449d2993bac481e28cd0be39407ee03182b27efe105aef03b086b8e84df497761837716e5035265719b3460098d5cc3e270cd54b9ee7a1bb1d575b1447226a3094795b3aafb1221655f62521fce1944ae6405242c04350acf22fda487208e518800765df257c598a6f33a9e990c6ca565cd8789b4f443eb554436df8e56cb79e9461dea4ea507f5ec2ae2d82135038ca675b283bfd816998c7010225ada796bec098c13fc00d97e0e2479ca9a5ae4c69b9007e6be3731e4b8d4e5eb140b6e68a3d0c68a1e50455447e5298880d97228ce87ee00b1caeea75f25faf5942a040487eed559cf3e228b051991dde7d6615009247fb150a886fa456e4fd8bb6128ded47355a6b8838385c640fff456c9e5572495c642dc54533b5198358e7d9700cbcf4bcb7890877537b4e5a4535e92032073f873a60240e228a61a63bd6a61ffe12fd8114b30a402fde1a45cb89f88ea5915433167f37e9022dcade4b8605c522da61470c4027126efe0623ab63619fff6106c4a36f0271dd67b191d2e88ff8a30241379023cabab6b97d69a28a1ab12cf3511b9ed888077dad94f399501109a590d1b94d63cbbf15675b92001a6c9522eb7fa1076b4bb3be3dc25c440dfb2e231553056bf00b4e089ad2c8ab70875dde6d512d5495699e24e620039400772ca104503c533d085d4d187528c3b0742a88e5be0a7d3e58cb1c2d2ad8018a2d3b0e7c56c0229f6066a825b8ecff372ecd7d8433c04302fdf9d996954974fccacb28eb8845f34d86c1a056698b6257b4bf634a042d4b48da554037078733922105b4630f491be8731e893df0206a156f0381962ff92f7aea40150f7ce0c13b4f9913c5bfddb25abda4f10d55642cc6009a6ad434d3032b99b246a6835813741bc251c184a1a6f744abc9741c8a4c75f584ba1ff0ef5b32886f1183b8248a9262bb07865365d1491dcd8129d28e95cbf838a6f8865235cd839bb3212f83a75e44fc9e3d17b8bdb310fcac3936b10f8e74b9d4611a06d6044c06b68ee34643472ffb8a7bae4b9f3f4fa1e02c7b1a768b5c99fd1b2a0916de6035aa78752816a2e84e8608b74837172f899aa19a15abe0605cd2a82f7b45309eb38cf9cbbfd77c456f14c6ab8dab3d7d75a2bac57658ec8f8f9cd59bc7c26c7075185f62286b0c6e1dd30897ffb15ea02ccdbea15ee7526677d783475d328a1de2150c2db9a990758bebc5154b57e712c3edc626b288008c02e73bc4dc4410113c47b124c31a26e23786fc2bdefc10589e4172763692f5b91553c378c5cf2d930cae25431bcc58581d023624a3ab3c6f686ec5f17c4b154d88c7eead3044c3c6a09ee0469eec6eb7a6fda84b0406a75c542799d279f579ffded05c8e33ba82acc9127aa98f50b64cae2cb34a68bcd9711aa08a1c1453b39f511e735ceb5c14b724c5c9d6e479b7cb94c605378661626f17e8c6493c75a5d2dff642bbfc6a68364dcd7a3187102fd9614a05e85709c28641fca2527d75573a54d033fc61db855f40b22e2173b2f9c2a1cfd39517e2934ddba9baa5c4f06bb1c349839dc7bec347d2fc10e0d58619e7f1776c7705b259a0f561bd3a16984509f5cb20493209c2fd33314f2f912977089d0b14fd14203b58285976b7196fe0727a09e6e75538fbc8571b030d4230df064b0ba00b5ec2ac001aec6bdf3e49d6a1f3fa04dafda655469e86e572485d99db9104f0e7113a21cd15f8753887238e79715a2631d2c3cb705ab1c8e72309c13471572bfee862abae270e720fca303a9c46027c88f20000bd091c0c444e6b43448a2fa90a0eddc07c9e2d56da46c8c19951e95ba30fb6523eb958ca1b87d8a282e46fbb146313b102f25232eb4f3d12203f57e50f2f0c4cbec4a712bc6b6134047f09825518198a25f4ac9eb8b0c714448c03de6be2da2fba5f5f29505f38f1ef007956c3ed590f135ba268fe77de247bd013f3a0e2451c2a93963815a62b5f1eee50c507fa48fbc2d64988f5f482bf5022c6d0256eceb62503d272b362273a345acd439a55a95efa71fc40c84439706d48a5f9244e507db4db1e225b16f18a302b8388d5774821d11228f97022f0cd2c6555c2e75b3b8e3cf546ef4ab1abacd19179fa071728d9df8c2c2379a2f624495ec339877eb85c9c8aeefed27e7895dd6fbef833e827935d8d8bdd4a7e6fce1b573c631333798ea765c4fb8bd9587c2970378b772425922d917ce119275899a93df7f14bac002dedf40af8b299d54ba969de7a9d1e37bc7fca56ad529613fe0f4d4f65316e492a0e8bb2e0dbfa288be48b6a92c4b768ac05962294ab0cbf84f937667e132793966255a9836dca865905feebe7bd64d12a2229471f68778e44b3aab56404ec09d071931a76cab92dd64501b00a1b7c2a7cd6d269d4723aa45e26e2ecc52f9a2c6a0af51ed95c722f37a54a607e42c7b2d3a5979c4dcec51fbeeb53024573c4137f598f33980b5421aa75676abe113fadb7c04443bbd7d02e3dd227125cdac65fb52289ed600829f10f849b57c89b81dee34cab476812d35e24a7c202f0efa9ed4aea72f55f74580c81e67cfa0d24423822a0ca6a84ab1cde2c5b87a29c8c1edac8c1a12b4457e894c78fffbe53b897097e33dc87368ccdd7313467b8170db3e4c1c64e771f1fc385807348d9eeab3fc05afafd77faa8013045c21ffed9739f152f8a86fcba9959b91900e01e0e47180c648d93ebf210376e67b08c7c8dcc40d6311f08fba5badf93b82ffb8a59554a495c19209272fc09a4a1602b83cd03283144ca09c4f77cbe7a102a563ca440da4d6ed27dc385b90a106a66f8f1b4b69c9704d57e8f322d4333778bf7b5e5dc497a2b30cfba19aae26781547e0302a1fc4fb3ec8ce302e961f7a5431c856d204811e934c33ec1242e2cdeb304acdc69763394dfaa57b41ab12870292a294a325ad24fccb9e919016512987ebce03136cbd79abbe2cb626c0835fa1ef2428454483c8d9e83a7b55a4b9d49a17aab405ebef57c26538f976fe28062c9e743f7632024d78095bc532e8f781518fd1f708faea1b3917cc26d7b6a4e09299202a487701d583521b7d35bfdbcd07d48c236cc8af2f489d86e9a5fd6e4213e3a8c9a51c49c981843b8f404c030f90979d8508f4fb9e6c3d686cd9b6e6ab41598644f28e861ef68c5d4f8cd2c8c2f92ea6cbb6c00b76d189e31b7fa0ec75b463f05e4097c6ce542270f1207e023175bfc8e18ef4bbd577555fb32c6b9a962f98b423817df4e2bc3bea07e433156606830a4c7a229b82ba9420a8e62a66f063fd62a9dbab8ec08f624148c5cbc8acf5659a40940fe5629f90848e5a030dff744788f49efe9ecbbd94366365028097d940fc85cb2391ab2c4dcc4e90221b451162085373e027db656d559e3293fe34c6a5570546d08e25fc2b5e77801078829dda3b5b2f32f3fdce0ba5960768ffb7bfcda7d27a9479aba3d1283a6cad026acd298eb279bc59581a4db2012e601065b8a6010b45843dc2dc106fb537ba26a722c0697c7c8fd5a63d19f6c55598201cc665465349681a1c2050e33953600fb651ae0cb750b6fdb004c57366aec2c8436332ad9e871abbaf2e2d84c4211c849f7a071546ca0449d5b955093d63574446cca3426d269e7fe1bacd3a7eb07de0d5474ec93c109e7a05ee3ddf032710576c8e91d55945400014b419c9ab29776bed144806bca3c49a6ef319944ddbf50a001680599aedee73493b6c8d66e323a9195c2d620c8908603a928a4a459d32d2bfa48768234a744c77cc2c05a12f86932b2547888af1c2baf59831093db5121195fc290af06a9cc989e18c8dff032332256832c80237669f845a65becdd31a1d89e121667ca4e9590611260bc0303e69084ce976951a9290baea2e175387fde47e04e71e1348b88989578a82b85c8ebc56c22094f46ee06c646340dd1d88570a41a278feb09f255914df855b84e41f352ef80c48e0728e720ad377ba49546f868e8b01acc3a994de54d9a9fcd142cb6e8c2e479087ec5b4c58961f8cacd8b0343e27a0682f69cd213fd29c1fd30d4b6dc60881f6c57adcdcfb6131d78e78f067694e02d3709c7e8c087d0b30eed0fa0ee99b1b39f088e8d13ef203a509b67567df45eae8319b6d3569dbac00be80df04bcfff0283871f38ff74e8e2abd8a55c83296388cdc87a36becd595164bcf4f10e4c8259687b3779a1e785c963e03c2b9899aee204ca9b105c1ce3bf8297c6956b5e3d4336f29abef8998e3241644c99c49e3896b0fe5349091110dd134b4cb0c34e1c59a74e2a32bd76bbbe87c2dccd529c4ac1dee18f225f6a0f90ee3ea1803e331503a19249d954c020486928ffcd97ae3ee3d8381cc94cd5cb85e7cf33ba1468db71068c5387ca547201018e76a0baed8772f7f65cbad4901781fb6bdd97e93c5f3433d438aa92333c39af3122bb8dcc8674027abd0122e2acfac0bb75014c73aa3b82cfd5d6e9a0d01db6cf933161fc20bdba03e8e3568e9352b2a580622d4dc9475b184be2ee08296e7272668e01327924e64593dd945e6c1f96150a9f4f82582f11e4343e38d72426965769445b790e41442b6d82e09882abf61bcdcdb73388008d1d0e70fb2087495ad8d08964fbd8f75b1998ef14df40175fbd039b61f10fe0efc243204fa13edc8721c467959379ff9478a3089ad12e8c20bcddc97908a413d73003caa02d0fbdea49e3116e0e81256f5347f9f0a33b22cc658889b16edd692879a7230762ef1c601d2a63770a40f0e503d003fa561a30d8b51962bdeb26563efb0883ac65c20b19eb8648fe5edecc14fecb70053238a1db2762d08e62e9dbd725dce2d5a9b4610e5e57698b0c3c409387435c6c837a5b687aea93b115b1bf4a2bedcb2563082f6350c00f9b59b81b8270f5b19bae1d061ebc2e61dc5575a1d82a4368e7213070da77e3ebcef5bbd877a104b6f00971c5d07c9ec4738f464376d3345ba6131fc08cf85e30f155a7bffa8047d94334c4ddf414a2e00b2fb93ba9cc5b27aed71db1a2d51657fce1039948a2862f35d819ddb80a5ada195e8da382f36b16c1d11dc3b74318d52b4caad3eceb70938292a8bb1a8db7385270d001a075850120cc006d34bc86c08e5e24e10583e1c36bd20e0a120311e2e01f545d04c1f2a9bfcf5890ce58bcea68e512964b90d1b72f30cdacb07e06eafc4c5284372558555d562b1bedd700bd72090b38117a78bca244a92aa9d51b4b8391c4a663ca0a971d18dac5358683a3b3644bbe4d7e71ef2aa00b4091088aacb6ba0469058e606cdb061160b816c76bb79426e157a85bd91264e691acf2fd956062d921c04c5a5805b6d4181149e10c486cebc0708dddeb80d6e1a89e84ce6971ba2550e2c7cd610ccaf18123f35d013711ffa0134a07fe2b4f8de44c4f20d103a6c9be55ab28a227db8add3533e9eb19e20a8c1e894ccb26bad791270b86458369da5b1262e395600201e5828eb14da1c1ad62b5698d0bb046eeb2021fba5c3e5608a8b91fa30d44caea180f3e9adf001cca801e00d9d3f9498d87e3fb11d688f29c9af114a176fb5b38887286f59980d36c3c67e384d124b2dd5d50a490e388b91f3d61cca55e890273d9f344585800144f6f8110aa17fc796cefc5836df96c0362766565027990f96bf38f81dd0eb531da2f77967a666d00cdc4f5e1c1c7152bca1dba594d358f04543083fe25a3aa9ba5ddc5454f3b092511e2a44e3d2e6316847a9666389f3bf110f90229f4c08fe86590a1b8d651b49f44e130a488b6cbc15788c35007795797b3fd03855459c7eeb9c6cd5f1773110126cd2192439121fcc8179e3b983d5d6021f9061294e3eabf3e0af5b6250a9692729c7ff38660b77a15a7c27a8282e531c90776f319f3afba737f791f575a49b4316e3ed60526f8f67cbb912d1e503da42ba9efb984d3629ecb639960b98d8cdf79edfec36b7fa88bc8da2f9e18fa1d9fda13a7f728a1c83886f74ddee740cc2100a41230f2d424fe6e75eb647807da97cb124647bb4c289461ff1dcb7adcf7130ea37155d18d3f330820b9ea1db2691a852d2541ca6236717698ae92f3ed215c4e1aa972829d9de4a052ee3e7a41e462e123850c7199667bacdcb88f936beda93463f3baa2fa1eb9f823944c066d7dfd66b5d6ad1d03f9d12aaf9b4624a0609bd6df654bf1fa9e04b07f80ac5b3a199e49afcbf1c178ed60747463d9d101c1a6c104a861d8fbbe185ca30ac2189d169bbe410d4f3ab5cac4083484504084a108f99ee116248ef1a980a061ffa1152fefbbd423207108b5c33f7978789cedd6c881798876c29d2aa72ad05997ff8ddf53d7ac57e6d2b274112cbe1b63dd2ebc1e0c58343070db955462cc806981a835ff1d6f3516ca40d80adb0100bdfd641c52d27f0c9d7a9bc96cebb45891951bd8196247799f68a7578ecc923a774abb3a4154592ab95c4ec9bbae4196b35a85be22bd25f3f2d0d2a58aba1c275a44edef5d85a3bb5444ca8d367b499166549345a645ad12ad8b2f96643426544115f8cd127830a1d76a2746af65e4d79eee53b62104f0c74c9648da9f279095ae2ca039ab84bfbfd445640dd74f2bed10526c740742364d3b43fbd402a928940cad92ccd6d335516243b4a2e4bb4c581799251cf95a0b0930d3f45ada9fce2311c929d5473b6d2f430c755b9f32c52cf274653e34ad9f9143d0804c8866226c93dcd199a7a1892e3d7db6982a5330164582ca4c28992b8e0b462766729a856d24894cb99b73352bce8003f205e3d593e630ec8b6db21b02e14d24c0be2e976ce400802bb13a133a11622d1fe55363f171a72d20d514fb75fd0edf6119add843ef0103a2e53e215021dabb3315431caa756653fecfcf30a9227cc80bea829adedc84b3eed3d93362c2808486fb5a8a31a8fb487e4a89aafc79e66f61add87527a0a6cf48cd1a137ffde5fd24dd8e0e45d26b4a8e3dd66e0a59dd1f450b8a2e4b40e91b576f9e4ab198f4a7e1ebeef3da29c039e83f0df7eeb0c83e9138f483e3ee560e00f510f674b57f19a0051ca1a227ce878f8d2c1f49debc527e5b3e7072f597b0b628515bb748b21906687df2501c813ba3a345332140e1dc356f250c5ace86e62c51cd0bd9b5890a307cf037f4422a9abda5f0994c08bc0f6620daed4eb733dc728c1e64986b25227ff33742085ba1f22dec707c50cbc4e862ae8402c7c651835c956f6e6d0d16627b042e32f85abfb004fb8c18e2853a31400ee13abf2f2fb7e4eb2523782d64180066550f4cfc0e032f014048385f696cee68f8d214102f6a11e971bd0862fa9747de5d5b9df78fd1b55ab63f51643e6bc32205659fe9ddaedda3984fa94a69d49650f7d84f23b7d639b23c5c7b794bfef25f3bb36c779bf72a0300b9befe23b1156322f926e8f627fd6468d62bb745427908219a78aec3523c9489a957817cd0e7838ca5924a556ea4b678c0b6f9f678db2f567002e9dcffc261f877287fd8ab4ceab0aca0642a75f506bf308ed6ff0b001e3cb00f302d77e2690a1a5a8392a93cb1afcac1815c6ef1c1503a39487278fce63d2a2edbcf8199b69970e0543867a9e90a1cac054a5149b87bc5a7424d5a3121d414953c4aff729d4d976c8984525022486d8e4e741a0f3da91fac60b6ee3f5da0c8da3687be9b20c731e4a9d1f64e5f50397ecdba055fbad49ca82ac7421c47eaadc659b3b9c4c5f07f0fa76748032c6deffa4fd36d156b1df0f38647f1050339501847b1e8df599e0ea19e45febde3739c4c64e078c7dbce549108e3c14ea23c80a3edb0fe5c07316b346f41a9b4f2ff7b09670d0bf831819b082095376cd9f8c34a78ddaef1066ff3fdb13f8c58bd670945240dcc53665f7e39c24d57eb5c19fc79ab668c15f154513321ed1c9892755e06654bcfaadb7e8888be9a282e2debee7d72d66299964e6e3aa5c4b6e4def5070e53f5d008d627a31e594e77f761446338bc4953c5d53250546b9ddc9882278d0d03a18c9fa16f7aac817ae8f9d9afa4b72d79239ae6fdbbe6b097c2996aeb7d8eaffd7a52c1095d67c1f2b60da389ec5879155cf00ffa882d3ec6a89d267051ac768874c18d9d57d0daf933aacda7eab278ce1a4162c1598ad6a9e3058008da8dc58ecbd9d4d9afc2798a91b5df4de17d32ef0875efc2eec8ed640411020238280198855a7f24e4f69fec20fd1d8b11ea51587912978c52a7e46bc458230de15b206a6488accff00b44fc4e372ef56f3f82f605a26407162902bd6254520d09976b5a850694b4392d58527d831e9d8bd69243b5bc645e8a7892e22dea242f81241cd351d09b188beccaee9ef89603e46845eba0df652c9869439a4df42d4333bcb7f5a31e20c311a8132d2d55b179762f0ed84625ee30bf32c9bcb840c74e6c646f4b49b2a144d4b634141f900585e322137c22a67510171b5fcb078f3dea30386a8437a468e6d2ec3ee482cdf3f96b89e17c62e43f6954f4f98f5bf62818095c257417ebf39b368b9a0301635d6c64fe67c3bf0e1f3ba71cc74fe60d97bab21b6365d1950af5ddaf86dcfd30925edfbb005739a92d7c825bc3749c085e30c5e586be77fe0a08305671c7ed92e8889401dea20f68ee84475bc381161387f5bbd4ea1f8f8299ddcabf33d5ed13894b5d44d67cf3c4d00e91724677e0e5d1b433b4cf62a93f08c29a39c96864fc5d89d2aa75a0fae0f2bd14a05b3facfe44c08081752bdc793be16a5ad3674ca690fd6c0eb6e68cc3b44c80997ed30207e9efd572093910715fd96fc6373cb2001fad2417f7b95ac2476c5764537252fb51917539d315a9cf2f1269bff34f4da742b65563d6e6fe380b94eb19e8e552e05590a742dc82d4e031b083ae80f90a52f5574fc69d24e9163338a7c58eeeec6efe70be622a9d7dcc780be00eb3e37c489023c03764d28c9ca7f426c777d28cd27993b9280c8bf6c04d5a0b28ba252c8ab2d203f567fbab6e4f720323e27b50a6b9836f5d75da499bd2f4215d08d25153126167a408213d2811a7960f1a0708dbd17bf3ff72f4a1b68b4bab9018a06ca2a424d5045d60015cc4cfaf042724432c4b5adada7316b56db0431724a0f66107ef98ac8a94ad040f068df6e020c14f4f4bf4a7ad4c999bc17b9c56bf3317e091dd500fa4d985175085eb781c75722a22d383d0dff7a58c8b190ea2f58fe856e197fa04c4fdc14a58c0939b9f4288e2925cc90e83e741c07e4077ab9d759ba48bce2d72e25e189a8c9ee4decedb84f4c344f3a5d8b68d0a9df00fa1543560171e27497943429b8d0b8401608875ac22d53b7c17448015086d8810c98d784456ae8aa83b39fdd7c33a0072b028f8158de7b09edc005b428b494024d1d9cb4d0756ea1cc5ffa041f036afea9ded0f056b5537431a33675b55cf551f3d78a0dd63f041bc3b0d9776a62601be9b98942c3925f2ee094769966507e05621bd031d5c15d1f6ece8f72bb8fcf6616fcc1ba52d91df69b6eeb91c8eea27d7cffc51740c77221533ad5eb40645a3a4b5566aac4e755cd35f21f213652977f8a37b8c38c58f624e35d8e4c79aa7ea8d7d239c92a7559cd331b531d20a0634fe2e16d8d93bc29f6aa69c7bbf8ebf1347d5be475f99db404d1816b770c2181633fef4be1f46b510983e995f358a204ca7649dda005888832e2c85d3e5b4bf382d1ad74a16a523d106a98fa5878ed9ccf1926d0d64deb59a1b4613fcd4d10c98e22cc42c1e4867b1e42104a25875410d11f3046deade18362e00e648021b6be5f4bf24694541038cca0514ea0e10a93feae4140476498ac5109b186c6b1660be5eded890cfc28b4dbf2850c17af007f0209fc2833f041ffa003e7c3ee3232846aee4b23d2f6959bf02a4c0d8b5ff20b63aae4219383a2ddf877079b58297ef399ce1ef6f0a34187615188a6b2e4da3ddb296377ed30035891953013988f2e9efa3f66d1996a9d4ad95e03c1eed49bee6bb039795acc247bfa395deacaa611e43d3856ee6bf064eb86363e2d6220d7dbe329d172f6927f1a2091e04a459ad84ad1043942501ff6dd0e623f5417e41a68f0cd7fec061d55292438515ccf5bd2326f3a3a14e66eef546f0f2f2d39b667b5c2f8f726116ab2a520ddab8d024e959cc7516c2125090c813b418e2f20a53299ed35af28e0acca7ebaa247785149d27dd0f16b3a5ddffe93e4c61869d209ee57fc19f77b6d54547316d79f88997e7ba67666c60319d0ee716f54f5157983b8acae663713354551bd8d41f02c8aea1ea92bb43c2228b98c4f92f657f8dd84e18c6815527c4929faacad07f6d62e99ea4840f077e4b430a651589f65cdbb751bf1d7d8ca6c9cd7de73685d15469451c3731ed51d2e83c77ec7a6d6ace1729c1aa32f69d46d8a136d732e855df3a7c2cfed16a145aaebf73953539ea1130be8d0857381fedac44bfad3605581f3d8862eec8d5c7125a3d08f93f511ee64c93eba9ef7037cf4c7c25e89d4e63648a0c1a7ddba3e56aab7d62ffb70062739db2a17891d519a446598c720c2ed5783c15698b570eaafbc120c71d5caa20382e50b1acb5a6c2bdf0387eb615efd70da8f7d4b0a469cfce7da7c157e646a625dcd818122122550eb5f4a5e0c20040aba85b3b89f1855ccf6856e31b810e936850250ab672d494405597a0a7c95ba90121eb89399ca0e81eb5150129bc611e14e07a64d1414615e9cd30aa48c823e7a8876f0edc7e1a88b280dff52d51263a0abd4bcfe3dacd160d114fb7c8e3fcfab48a70a8d0f7e1a8f92dc5d0913b5332f11391707be349d28de43c31d7f37ad1088d57c0a1b8d2d3f043fcfb13016fec3b7a814d801a0d5a295f8268146229fe3e498afd8fafa18f14fa3d130a62fae382663fdc2807beefcaa95bded03ec873d4f7d7f92210649287d0dcf7df5027c5e23fea55ffdd1a99ae2eae56e53d7cb6df82f33906359bf6ff94dee6f1498d5b4550a800eb0b4788cc7be2e2074080ffef97d027cca3d7c969b11098e3e362a13bc62856755e140ae4697d8f590b3203c3275d6aa4e7101572403387bece965e785a0560b5244b057d9e48e7a1c117a4c777c38e09f2891e7f49810293fe4d93bd1bc926f84d488a68ace69380c5931054231df8df1e5e666f2a7a01c11bc1a937933583f2fa287b3a108638efd6fb03683652ef964289d8bbe2cffc206c0f09c13846872aa5a5cf19c3ab311445cb49e31caf4679cc4940fb0be0edd95c7ba07e14220d4eaa6b91765711c3dfcf8f545aa9d1402197a6791e69a2a8567ed5b3ebd8d4e83edc64bac9882cf41f9fb227b2e3b3813fc68a19ddab1c416340f398640fc90878cd227f065d24c8baad8ac351718871b6e88f5f81f3a4069c418f153a21bda70e3ed892222eac88228227340ca6b00d144d44177c2fb7607134b27da50f06ab34ccb627f953cef54856886f5fe64dae26103ef0d27a04b4fe20622efddad4b8ca6c664c948c735d22fcd4d7bf8415eac00283a04402ce3c12eb6369fb2940da786c94202b5430c220cbc29f77b0ead69ef338174d617d81f5a4b223c1d8c48648e69a0440ee14f5076946e514e3706e1fdd4d02c028bc3a07a876349972801ab01b5de298f260ee55f8d88130a483d1c8b06afede6bcf890c42304fb2bc7224417c0562f353847c5124ea8610f9b9fa4eb2925d11a3f601288e647deefac8b86f53da1e49c8452dcdf04ed10a332dcf6cf3584b0f2a8e6a4345933b64509eaec1ff1b09df438e76a0898f54574a0b05c5448c2dbf7c945d1f6198311385c486457bae019615addfdc5c05ec151b2a6e5da49bce73ac83f71b5fe69cb56fb341706510589b950a581c4066af39f7de0675cc5073c4a51f4b5990fde4b23423d7547d40c3cf42bb57491f880251afbc09ec0f373da8188b81b2290b692c45922ef015721bc7f209e0c25fb011e66c2c88c30c94165d985752abd145053c8253de6194df95bd0b414f343e234e52943d9d5927625b672c1c73dc8fc085fa1705334ad2996e4828316de4e4b37979798f78b09c0b6eef1b4cb20c082c99b4a6e530f4a49c2816b833fe3bd34abde072e6fb524a3468010e9d899e38c52d7598baee9a8a613b1ed71c425065f389e0fe586a2df893a59ca84f7a288c96974ce47a604a864df2f2463503b2170b5f46959d367b9c4ebbffcce2b23e0419532234d0218e21aca4c45b8bba01ee88f0a0ee10f2afa37c42d4bd06f8f093b834b372e3796728a0cb73f43088cf900f572841fb3eaa0186441693f270d3d79a5fd10313393055bdf135cfbd9e692031f750585e561062eb7d345f4bf4fc735c53164ec24ac5b2eb7c886b40b97360c8f908c2058944fb078719ae37af3ed8202eb1354d3fe973784436b66e1c8c10fbd20b963020dfb8c2a739913818704912b6281fe0ebc3430523c7b11b3d481bdbc743acc298594c928ad583408e0f8fcb063ee30bc5d1f42d2418f97e25a258ef1203c93a32bb86589e6adb3717e569d3562b031df7fa58460e888e59f4fa3dcc8367dbc628bb22dc517862ae08bbd1cb89ba600dfb82ca0f2c357e81700dedc5187a19fc5c9ce55ccdd57eae87b00707eaae21d273ef24cf7668173899d4b92d676986901b2b53f2268495171b2ba36daf2edb27e1c14c3b82fd013a6464c4efc5e3debe491b8c9bb382274e9c28c13aff4604b3ea2d0b500beb275a35f37e47e3055b93d8cdb5acbb3f6713a56f9d30ec4e36fb9f2204d07484b75557d5d7309d4ae804e6a485ecff2f58aaaae951ae0547262cef64460d21fdc768e85f1057bd161543775fb8cfe99633ddda09e156e98a29c5a1e9190ef09ed87122214b1134a932b137e67c7eba65e1483a8409b64b469563381e2b9c77bea0bf5d96b5566078f06b46c501e030284d0e1411f2990cb1b13fab33b89c3e05e14a347ffd01f8a6413c461d50128d10c7354d06ec2931860ec65657ba833fa0f9b5de0137369c45b96a091b03cd904cc47729dad2317ba8338f1b20f39e4cd63d8e0d54492bf2ef56679e2334151a1134f77f46ed9c04893e3520e8ea0d4ca2fab7ab9c914525825893aa25e0cc635447a1628a99691e989fd78ca2f60e9861e3862db55d9e9610050fade3997b4ddc5c550704744d4a13f5c9f808e132a0ea5408cd92bd25f53a2507e65d87cb20480b9b058b01eb5b1cc675b1167ed69ab985421a35250b52de545264026915ab80658553e126558181bd3c2a82a23646f006cabbb5d530108e637344ab927248173b7f0a1eeb0db423f6eb41114da15244f7d223c1173967eea329a08f0f1b0ca3655db964d23c7a3050b51f32b89f21066a2c3df9655e01bdc0ace14b737ec1e212c362b27a5693edf619a397ecd85948a606839a7d530933238c6e2bc8f3ed15506440656ea9019b714daf34b71abf7c71873ffe56f65569e1730e9c654489156270baeee4a72e3efa2fca723fa240adfefa2846c4feb5186b115532aa1cb20d31b84ea56fdd4743f05ec41a92df9904cc2da27a228cf8c59b2458c8e501dc8aef3a43e21c28ab44b724b43f8b8d56d14929808621f9e38786312cb107121cd228f52cf6e80edda733f7f5e6bd4c7e57a770cede02b3dcb0d307045ba9c6d221dddba1b38de7105870a9269188f98aaa2e039005364dd30d3b7390fd2842ccaf3c2e4a9a36d134f2899404e6c430de03cfa5a3494db286c6e74519bb0821cf301ef537648ed54894c16454de3091dd546449f0cd90c89a6c2803fee9667c17088ab21daf27840e34df8538ccc1e118750b9e116ea2504fd4434394c1008601904287a8ec7b9fed34b8c0ccca5323723ec974a5e166fcd414550580c5806e576d850e91500a44e8bafe686d855e5e1bfe4be81fe6be83c335d91b9e6134bb0ce4e9dbb3f443a4c29c1837875666ae462c8504dce54e40e01e756c9798d8d21ca2be19113f64ac762d258096187ee74236c75e3159457c9e90f1ec69cac91b296f91efb3946038c1820bf9bc5132b6ce62c5b7176d63a2c2e6e2a9a5a0d885bfbc30746ff370e83876fa32bc932b3cbe2d03e160aa81f67620b4b7bfa8e25d2e8b474425aa74aef6bb72d3da19cd8fa7a91e51b9c7298a8e03fc90b16c9958358649723c362127c025710723e888aef1247c6f27a7d10b6e6b7c1a9d8fb93c316fff1d1bf4e1d7eca75740c5ff0a07f25e3ef76b540a740bcf5c9a5b00464651752ea181d42f00d32b216fdc8dc0030cc07462dac6a63f2b250054a43b31291c32ff22e9cbd4653333ffea264b84e27fb59c8f793453cb187566728cf6065a2da481f169965002c827cfe991ec286f8e88d2f66f277800eca0409e177d7567fd5571293e33286c836744a1c73bc00225ecd8260cf3b30ed4e3a33c66bc310d65c2a3169f4e272c6a26e99a454c244d594ab3a41556652ae9ca4a4c8a579fe3a83ffa3a1de5a23ce7517dd4397eca4531a753d728a0a98f8bac864ca6076d30e348f00b33ce897e61c22dd15766dc137cc79c63826f90d9c399e8fb01dc7fb59c674a69bbc21a6c7ecc29f6b979f664603ba24d4ac2649d9ac08069756eafa5b711710b31ff445caae432940ca62d8e09cb92f3d18a304ce30ace40357d9f96758bda096f7d6e2726480760022d0fb694bacb47d6adbfbc5e675de173ea6b125ceb4702967d33ad3c05802fb9c5e1ba2fc860763e0a8a38e6a9b410f7a897f70d4d378a3ee3e0bd458b650659c54eb08252647bdb3c7ce913ac3a379e77ef1744ee81fc9225698d9bd600546494a2734f2a8b4a06666b8727fb62daeeef09028c374d23504a9f1527a6cb13d8100aaace329165dbcb38181966bbe702e9003fe565927e20b818a020746542d1e5f3e1d1f570aaa5a94c5379cc2db1dd5a34351705ac52bdb191cd4c4e059fdb711a62c8218fcccfa718c16c53d430304decd13fa1dab68527d2c87d207c3a3a19bb70a5f5fe986ef1eda51d4efdc9cbaeb8584ac3ba90206748490bee0aa76c9d5555ef7af214f072ba17bcff00d182f2ca130dbf867568cb1419937068ec0ab6132564d9805c95c427d224b19c1c74834128122a0905fdbd041f61882f0d1ad05c074a5c9fdb716543829b7507d47d31afae62a86c8faf791e96e6536f7ca8438de8f89560f7abb1366672b9a38655f44d9791343ed144f493857695eb70520974dbd49ce031330e48c3b862d8f12547c27266f5d5d9a5cd4132b4c0dd71119ec6e739a623087beb0484cdcc05e900dc037b1cf27a2cc3d431f630732a2d63dbc2a8dd1e8669c0cb9f96da7fe89343af51a6744d87ed2765df349fc802cdc1e934e8bcbff8ca8a86d260ffc5af24a5812e4296ccf565b4fd1757ac066272cc51a6daac31fdcd63505a167f1f38c81cf54a3131ca640e38b5fb462bac7b48e6c0425fe1366d39039c40c3a8b4db9623933920d35ed434b2733bc2e0cc296991c5b7eac6e8966060956af4bab3dc7bd54e101a6b5aca2cd146bd25b6c8e654d3a8b584d6b3386d5a752dd1224ba74d579d65b7c8e2d429aab30c6c0d648ffa89b828cc3a20ef477421138ec45f65c691d037e61c897f63c23dd12f4cb825faaa993d2e89bf3e409d2fb5034662b5726c74aeb4efe5ad52d7fbca699c41ea11539895b0558ebc10f94e72e36e2d5ca966108eb0f256ca98527a0dcd7f47f088035719d64c95eee9fbd77760b260396790881cbcf98e5ba06a9a9208fbe6c37025e96e36403b4daf92eac6e2e803a5816eaf524fd63e7c81e85546fa2d48a7d791aaf50a543702c6da667a95b43152edee4f9174bf8d7ade1422ac3c07e69fbd300db4a21c78dc5d673e25e77324c7729e63399f4324effcd6a93702b044f40dcce65273764bd407864f5ab86dcc57cfb623012e3a376547d476e25efd2dc54048533dfa9df536c8d45f1e801d31465444e31282136e332cc2f62772b2e45e977e87ad7e8f81d6407c870bb741edc0c9a0d3c6a20ce2c83180223d53004a42ee7233f9bc2b42b3c6a20ce2883191023d530848f076b05a913e270c27b93b803184142ef03743c082df76cab9129d6718e257c99e424246498085006cd21b1292dda96886dd9d36e8d1414f3949bd9815f51f61aa402bc854849d3a93f062177a69945d5b488ddab9a3dfd6ee29d9d8858abcd74f429ec5712c1379ba1a55881f84f6d70a0c1ef53d048e2b2dcd5028a2c5defce3b9dabf8cb6c9103e4c01fe288717e31e80acdb39d70e590ca5f5eb27096478c406df493df63e711f473028be1880d9f2696626ed4ae4ddfbfd247619c37bc086151717d575bc428f1cc18fef96ff8de20bf9d87f00386c4965296abdca2418343b282aa0dad990d91bebdd22033bcb0c45c817d26ae62917fdd15928a9838b31554393f60ab96b0eb4d8af14ffe95576a557704ec051864cc9c9adc0513b9e36b401326f6eb180bc2604ddbd20307afdeeb55afa2dae197b37ca4877de0194057c7ddc1c8df25a076b4cecdcbabac29e823ec8b9fabbfdd628a59ee6857fedcd4bebe35095fde18856a8234cc137c63a69b605c4ceaebf04f0507c6ba03e15537c0f18084f4f68b88ebe6d2bc3ffc6c8ddd8e662231abe538a0452083c5f2edd84c99fee346d950f2f2ba21bdfac6e3336e20b26b072612ff6a19168b4382ee5259f43eec505308875132ce109a49309e7f4067d12e32df1be25d63ac6d08613120253ab8f4911baf423e4c67c482f59b155e5a2beca32c3bd90e4c21d4438127ebee86ee138f90705c3a541fcc1d798e7e39f5e8a86393bf30c81fda3c35247efba143494965e615a5c05b4ce40b00134528370a9a3e132b1503c6832ab785c7b74286a061c0f956b5c514451c3c3421561408123abb458baa4eb5c55eae73e41afe2edaf3ee14ba9d61320b9f9944ed4b1ddb4ccc804cf43d2ae2434891040ee88769139ebde853da052f4d4bea34f22cb1554244c5cc34e449afcf80722d03fcb2425fb2fd388a52193ad2f1fb48573583e5a535626e96fbc076c0e06373aa6f5b388bed4d6030e3e8f34b32bb534b4db6c7e2e8660341b6cc764981dcd5a2a49aaa557140e6cce2a38a3550ecea7eaf657200995bb5e0b706b0291968e9fc62faac1a4343e923d0203235a6229411e1335677dedcef0890195cc76caed8b27aec33defba682171cbd0d59965e8baec33655271cba39628f888dc4d035efef5e7745edeacd70daf1b7b95441cfa730df4817624d5a076f756a5f8c2431552d342f14506bcfa2dfac2d87ba217073e784cd2bc498c69772ee153fa12989ef127aaa28a624fd82b9cb95a600bf67bf77568171f36780c0299a49cfae701eb44b715ca5851a428b772f4468dd8420206e06494a556a1d317e48425906bfc5ce0248a32d5f0ccb4dc1b1cde6e4f93a9830fb1879be2a4d30de5c92575dbc4b8a769bbc3bf094ce4d1aab892d696cb1e428a5889e888c81e30e58557a4aa09e9f901478ce639f102bacb47b7874712b3cc31de83cc321cff9b7d203263396b4d83dc5cfe3a4fb6b2481e93aa18219dbed99be99695ad6c93410c10ea0faba10f2acab55f0cae89b5001c3153607c47c6145686a4d0899c7084415a9be4402e8fe97ed76c13247836dc9da27affbced68fde80153c3cb5d827a66fa865544e3a141dec0f3641522127b33e77ff2172edc19b506ad1153183f5507848fb825d977db185a9e8310cf3ddc05491e231f79a28b9d49b5e7f17b33f297f8e8ca16f7dcaaec3720a40199084d288b0df99fb7fd41e31ce39ee1040ebcc658df48f75c06287fdd1a6183761fbee2b8890a31fcce72c95b477e963c8665f3e9fcd4546e99f32761068e060a7447d0a10c8267b9f83c6a63932ecc35432cf549af111af018df5603b959ea02f312ad4cff03a527136ad6a7499072cd25844cd1a8f7a95e456dd88b3551ad1279ed046600a1ac26192e6b0ebe14ab644db847b411550e01d3a934c05350a19ea0535c62f8066e73408d946eb63c2865ef8856545981c7185ba15ebc1d3bc3ab77d91e1dea200504624308b0640f04e8c5ae7bcbe0bc73173b0b8ee3fc8cee8bea2e465e4ac07f3d380515ce88a60b5f3da9214d6a7dbe9397ef7c125d384accbb6e4f9f39b9c2a8929441a49b4bd710fa2cf69cc044213abf10ac43a23f6bd6f794a7a71d0fb97e21d5751ec157b0343682bfa9de0b0c202477fb2cda70a6d7b38ae1b94a490bb5bee9905c24f25229984c0d0afcb403996155a605fdba75cce83109342b43808461ac5f7e5f70e6ca7c5ac11982843d28e8fd0818f76d0bc4acd5c9890b8bea70e6b35c26efa3c41460262fac0ff49a612dd08bb23b70521b2b7402a4108352108bfcad5318023ff60ec4e26af9371a3bdd48d2383ab3b904f90f0b394950745a8d2fed370a6ffcd0e469f7c7bab3da576f1d397044b0447271a112a84a60c87189aac6d77ea9c0891ebe60c337e51569678afe830220f1f9bf429a4b5208dec82ea416d9c1eb760f214e1199b7b51f2dae94b6ca488318ec794628a7a04ed1e9194e230f1478f8afa2edae72a3afa58f851c9b43e7e2a54e948636e240bd790457def4272db40f04ef0d48837807ffe0bc771f7c3a43c02c3d6dd1337a7309d98e34df16b17696973cb6ba7b034ea058759cfc0c0933f341714f1990ee327f554625062149d114f0d9960a509493a529ec642bd480a02275a0639d642da17474e1a26d549c29b5c0755955c4ff7367ef2a0ae8a1e829db3c5a5cf2e4cf388e3748481846b8cbbd7a7cd4d75a5d22898c5e8c0bb1737900417faf8b562d8b2a52c8d12980b2e52205bedb1fe392228ef3079233e93d679ea8ee95e76527a1a15fd9177859b930b0e691e0c5ca726d15b303417e8b99b98b124e7d150ca13302bc386969f07d4ea38a087fe6ccfe789b00365c2713d36165b3dfa1f1dee19988f1563c74cf35f46f9e849b824dd44b424d464bcf7579addd0d4f38a99325c9b377553e4fed6e4300d4a62912057f039249edf03910f6a880d51b92f7dd9d8e00d38673e98c82ed730e4c95603621ab137e533161087f67adf23e96fc9297d354ac71e27e85f487cf2c5a355ce04d89a2103cb6929022d3c1cac88a2b98aa2be4a37a6e5a55192d31d0b2d42d030fa8fdac4f71f17b19e23e2b058b9937d5c41550a710bb0573c21f9d098b21d4a04912ed379fbf73258978c33842a2bf2dd21c118f07cbc144f644592bb14b28b9620c037a3b7417a66c7dff85bfc18beda9d98c62b56436e40d8d4f4e011f3782c42d4372c20087a6d3e8db41389575063674f2d90615dc17e28a6abb87cefefc8ed5836853db578902f6ac6c6bc6abaa46110652b246463434d288dfe3aa44fab42a0143edbaca1aa8e0a3879959f33faba1716a28f6e32b178e62f0e2cb603ae85b4e969a56017075e4bf50e3559ad1f3a7dafe6734e60c57cb2f76390995103e020f739684831f4f2de30fcab038e5d0f2e7eed62bbb7d6928d35c79e5910aab3233aeccc6441faf57367190cfaf720919fb84d31879c6ef650ba7632f7fec2670841882b27b3313742eada7d623213578211c586061a5e0bd678ea327bd3cfe0f0f6ec9ba43bddb6e8612cbfe5ee5126959774a2de5c771fa52996dae6d2407a9bb5c42bc11650a3144418cead7f4fe01f1a222933ea1f33a31314dd52bdd8e42905125f3f622397adc4eb830691a91ad4e403dfd1fa169e80838b50eba7c1b65b51eafec8eecad4baaf174dabd6376a9da60485b00984b8fb3aa770892eb4df6e749969c0468d85d8541871bd64280ccc023d2cdeacd0ceac6c22c264935ec66ecc6fcff5a6e8b7f56fb3f33df6ad2405ea6648a7392e1ce7d5d9ad9085ab8a01669b20b1a350403e5bac8a694976e370e1238e8eea4c13a8d4a7bea9d331fcd067b93fec212d587fc6a97972ffbb92af0ed0cd5f1c8792a63c7a6323e12eff0f3c8cbd8e193a1ba12114358079602e231662254546bae8af3c34151ad605a612d39ef3be3647a734e61291d7144a2a8ad9edbe7f1502fbc31e6315cf0014a5735465c308e4a4a0717144bbaf9a0a320ceb3ca20c144e60a5540cc03b2f5a5a05ad7dce3cc2c8d3425c345c3e21040c56818b6ab430000c24887fb8932af9d517519cea33ff250601e7411278f81f6b9df1a21844842f6de64cbbda54c32c91004f90351043eb835cf86949936593002373cbf9030e60877881b4a35a134d3016beffdbeffd70ef921ac6133869c7e84848ffc598e3368a1a129c3b21c69c09259a0261b20cbd186a5dc3be68fac6fb3d0ba57cf86b6c39dfe0e23694197f7ccf92d216e3fccce9ea50ccc1f29b5e0a46b86dc7c317f525f5df347356ffd55875749dc11e64f285473eb715a5f5fc72ae76bf7abaf0f7463fee080df9bb9ddcb1cdabf791c6ce7abfedce06ebe56445c995bbf0273403939508172beba4f758f023b0b86dcbb2bbb3634dc9d594dfaa3431eb07c7aae4fdc3b4882e4f009f4002c8723e4a0d307696f4ff8658c1b43f52f15f8de23c1551377deefe44fd4e9b5f0cb1c874fdea437dcf9db9f5af60ede3edbdddddddb97f80a40840d653e1e32564abcbc206345e6abf5245664bc5da8f651f7b4297329d9816afee904ce9fbf2347e7c31bdad05ee7b86edbb60e0c3a49bb6d5de7e2fb3d07756c42a1e996c3e1f40ee51977f719cac0210f9f2df40f79f8f887db3bae19d15065f2ef4ab7c861f6423308e751c80e869e2b53cfa8af85d48a9cf58683fc45d8be6a9f8542f385264e53ceba8833d7884e925e7ac01a6738da873c7cb4fe9c7e9cd73aa987c7f82b3d86f78ec1d005def0e9b5cf8c7674be1c8c83a9e310477d7fc79beb4009759ab216e48ff3294f842ed7aab9c0299cf36123efff7470aa066dd87bafebdf97dee30257ff0fe760ff54fb7b9d1782568f32d78132bb77eeee384e996c547f20bf0155df02b5afa86f30bbe0941ea38dfac31c5a6fcc9fd55bd5cbf0183d9a6418b5d30e6179dbf0c541f5bbdfb8d951363d0396eb4d0ae5849de1e1c3c307d6751da66c36300cbf07939c7bef75ba7de693bb0f79f8e4fb5ae7a9c0cfb3d17dd0c5616b9e085deebe933c860b1a76113d97f2f0c9dba770084379944dcfe87068021165d308c89e36e513286bb659aeb56a98b2a95f7f1333b9cbd9771293a3cc4196e31235795c32655c62342ee992b9dccfa178b27450e3b8c6d4667647bf3d3d0ab9c1d073f63bb2777c2de7a9d3370e673e35bd98beb55cd6dc9f9e7e48b1251a42a1b3f004efb0bed00cf247215390d6b7fd360ca2ef89104e397f52dc87db6719961c169a59c3599675e6594be0843fc3610bf9ce8e0ed233e867d8411aaa1e15e48960a90a5f9bd12eb33b4e4999e34e20a54fdf33edeb2a03eba7c06c47f7c96a6fdb9e7090d6ca427ac6128d7285666e0e0751db1307875b88ef68ef7db55f9bfb938775a05c21cffda19067eeeb6fbf129ad9fea9723ba811154eca3eb200104a30a5199a284912f3012369be2481a58a111e5698c14a9030499832cd72546265e2b0a912197ee4f99d7f39c952123379fe8bf983524a2b8de93fe93ba59405e43aa5b4be099576922e39bc2b1893fd5b6f266565869b98409441b041a69115550810e529bde7f698d03f9f05e406328a4818f357686eab61f07ddf9715c1c905dc6ae7572fd33aebec41145bdc01e9a1ecdf03091b425dce7c503a576ccc382992e9a7a6f63864079d3b7b0d468300243b68d941875a90f64381284ffdec391668bdd55b50669ef99305c9f57772d8cfbef575f51918da0fb3476916b47f13dacf706092eb6b381cc9dcdbd55bf03ecffcc970fbd7b716735ee7f2bc1a4459f5d47b0aeeac9ef5329f5a7f0386d97b0befac7e2707cb7bcfbe3fceb340d5afc01a44598571400b06a5302863be1a7738cbbe931d98d0b9b6b5d65acdf6c856b31b38d9df34abd11b4054c2a85e0838248c7e149aa835ad0aa856a5f44707ca457df7f4fb532f3d54aaa26a455509a3bf5b315d9aabb5aeec99d3e9a8f634f753f4b3d679dcc99dc771a87d4dfdf6f7a597baf45398d23e5d4dabeeb46e906a57c24991e55edb4007adb5d97c4a6913713db7586badb59a7dcd5afb9b6faf819ba6b9b46ddb36fb5986ed7cd5aa7160f627ed331add4a892be7ab6221df77c4d73f3669216b598e3720196f30bac19b46e30d40b22335657f9eee9fd5574d37fc90e617199192b21c9b2820cbb1490ab27fed6a67af98b8fd99cc137ccd3e0e85bc96b9f4a9b8e11d41c78e9ed1b9ca90e93b19829333f5967bfbdbdbe7c9de871ae48d7b01f3c95f0e6faef36a985a144da5dcfdc5711da86579abd973913d7b1deb85c0bdf42c377d6c76a3d9629a359f79033bb0a7e0564c37e4c9fefeab3537ecb2eb40b9f6b3ade7bb90e790dae4a2514bbdff72f6fefdd2a2ec7c65adf9caee7c6d208f2f675328abf30be7bf3a73af742d7be93274cd64fe703fbde7522f5fa552a954aa7b6f77efbdd8ce97ea3b950a447d0a0c79b854dcbdaa47a150a897a86fd5f703cddad9cf40707217873cdffd06c15437bfc3e1555d30f4c91794f3e5812151f6debd103c55974a814233a3ba07724e86c7e8205ec5917b43c347bccb91cf2b27ee1c9a3df3bbe85a09a37bc14de286707564419bac3d27a77703284b6c4267af2009f4b5b7814bc0712a81845e22d7773074123a6b58b24e265241ae5f432e912b961206c5261065fbd6bf7b2e07ac8f033ac86a92b5dfc9e1afbd8bd742f8be82f25bf51d0cdb43ffd4b7278255cada688395ccbd7f08df3b78f31544c198f6dd7148c47936b467bd0559af0283b8577d0a0cb94ffd0adcf95e669c97f729b8f37dcebbf813b893837b17cfbd0bbcf3e11a4479f53b3972fe7ecedfbf2fbd1154681a41a44c40583f7b1d1bfe36075c3d0eb8fa1b30f4de7e0b0c52bdcced8940945938e4de3e90ebac40171864ff62fbd96fa00c30c8c3dfe1598356d0b726fb4259debe84ed85b27c3a93dd7fb31a9617f6354f02f435ea24747610e5036b6af29393f2450d1dd37028d7909f81e694f225a9f79fb8d4b74f9968533ba5ad38cbb1ca15596ac0496955368450335fb24a53eecc1a6ff8b9595b6ef81d6cfef47b307f6892dced93fb87cc9fd93e7f6e6833a594ce1fc73b6ab2cc1445e49d812934edeb13dd6e4d7b2f8708c28a833eaaebdb989928eb1903b7ba92aaa44b4a2ce5bd454815fb4b561477fae0ee8d80f05fbeb2bf982fffd77cb1d4dcf0955f5459c1127ace9e347569e06a74465da971353a7b375cbfec814c96a39531d927cbd14a0c597a38b22b81386eacd225cb972fb8d37651f73b160eb77a3f054be8ec8f97ccec16db5b84b469f4b5ad08a9a796e11dff2c9c768b90687dccc9f9418ca638bb8e42f70338e9a29fb188b8f56a5f8454b377592a5d3cf355596b6ef87d2de9d325d9034d77bac42f6cfee06a749e3b579464395e29920f90e5d8039a54053b8bc30d6dae0eca2d342ce50996d0b9564ce578654a9e630f68b2f4bc6f11d2f6728cfcc97ebbb20379028b90bce69f6238798b90661192fc15febb8e63d65a83b8a8ec7cb5584154acc8df7c35983a73ab14c9598e5556c8fd57e239a7d3b18a92b14a949f738a910a9a7b8565839127a428a9202e21424c8c8a0a28307933820b151f72a0d2448211d720f9e185080d4a8ca80c0972b31ca9bc4025094b05605c2e2394ba4af049d4e7059a85846a4c2e388201054390a0c9d10c364c21b20590cd092e3ca0997205eb88043c58c182610a99295e8ab88a1419a71c8d3b406189748a1315584653769802654b8c0811998d3a9819a544c17221c8d20a47c4b81083114a5cd0410d9121e30e2de42ccb7187159868418810188cb5022c87a5274d2c161890035311eb87942879cb729472467bfbf94b4ea67e8243483a3a8e9bcffd8675a0def150ffc4f7ea48a17fc2fedccc799c9bcff99b1f42d2d1faf9fdf475f453fafd1bd6f17d7804efd11e070f21e9c0f9c643b01c8c838780bc47fb9e78e8bd47fb163e819c0776780869dbb08ed4a3f0501b798ff6a9ef6fdce1a11edef34348130f71d8687ee321e93d130f351eda80f768dffd90775f2593ee4b1a2dcfb0be296bab97345a7b203f5990050e21e9e068709f7a1578c113907474f804e93d473a48587a0f6e27dea369af23e5e2138690262069d4cfbebea411b693ac414113c547de1921fb09481ad957a0695449a353443e351b5845aca25416e3933139a4e3932e36cbf149d2f8e40c75819353e24075279bfdf0a0cee0dea5b5be9f36ab60d34927a5d4e73725c1017336284db0a31ae54eca4093db9119d55aa911a54633b0429b723d5a617169538d8d35288d4c9cf85026ca667ce26474a28436d1a66f8542dbaa88bb7dd8659dd512b79b1fccf7bfbe9dbe7eed3abc5381f9de4f60be8789c0b0b7afda5ba27c02a599dc95ce975321e5ece9d2874871d4fab5ff75b62444351c76d9e299e707db87b63dc6b6652b296ef8d95db65bbab64ae282f0747bff17fe777e666ebfb48ead3706290763341f9cf4b94e92801a7737eeb41a2c044046dc1e4920d4e8be5f46eec06ebee498efb3dffdbeafd69e70f87d9f5fb010c85829f122064a350ce994a208e15ae90a0b2736f726766fa8b8fd478cb2cba44289d1fbb59ab8f286596221cc132d8469c18f36d4cb72fcb20517e4337be26a88a274c5dd9d56325e96a312972ccb343b2a358d4a684eddb66ddb890be2e3863992bff96a300c93305052a954ea5ea54c4b6b5b0af344fee6abe585d06adddc846913a605dc92521110a5212db4a14a46b6e094a05691242649bd15069635154b530af8060b6b040beec3e2e48a161c185a672e0e375498e49b2f6090e47fbd0b8c918cca7204c3420e1f5603aa0c9a1108262e48f6420c33744f80e801882ddd048723c312578e60acc81ad3520e2d992c47305a463058c044c96dad52d1a83444c2000167c8f87d375b58fbc160375a580b73b96e6440a9cbdd6bb8e187133ee46086852d34e4111458c9f0c37cb9c86205139c74e7de7bd47b8f72659eb9d990f925614c09a33d97c6e372d1dfc22ee4d1e5ecef17032ae74bc34119961ec4d579b9f2fcc62c4bed0a87c0c235ce91db38e20d01c04957cfa03f62501aab28ae7db93a039ccc73bebf95c098a54866cf49e1f6bb4be1e4fc318b1219c62c474bbc5d4a7c3757c05ab4757385eb07515ac1842880980edd650b2552a8228b344896d020264c0a4290b440e420468488634ba213fd435ef1436b3823c2625b885424180080e9240588751b5984992c5699c82082b440ec618838457e49424cc50c102b42e90430acd9218b364e944ea0c4882cc4178837b1198852880a78115bc108c458a7d0840d621bb9e163045996e050431422982424f10808b1b57822ca2c2a70d2f363fa4b1507884933524936a146ccb22ccb802409237a5942f4c189717181888a1d110314883d83d4d2a3d86b2414ab51d460032ec602d10a2b85e8a10c11a63247b460f1a50522487ce817122095904d04682142883cb124b1a16041ec229e62604c6ad132e4c4249924fa09790606509a040c884927aa6829a40c8e884a885f6c8cb8612066c64a0f5fb2a84085972ac4232078a85aa6699aa6699aa6d12e58820072b36d144b52ecc607227a4b097462b2574023b69c03499018220a1dcaa89961c472c590a32d36897cb0a026861fac7849b3846e49c26284e4042650810812118d0fe28c51d14388915e52d05a584baa985c82a9d9d09814e24aac69904c28119110031073c5fa073985882476941b984404a45123b2111b100346ac8d48467cedc4ca5419808f1db6881fc4ae106d4c06511cb9a08bb45807d149928b5c93030ca2521671460731173199c511221607e03003910ab17a31a36e8aa28b492496c420b61519a6a5f414372663e002160b28a2852630103d06a45f8085289f28237a1013d345a411694419376d60dc607124480e612fe4527d2da391232d39c31fc5ae25d7bf9bd6af788582db9fdbfdebd71a40b8b39c5cd61337b5664e8dfa94cdc9ee265a4ad922c84d275176d19d1b532f87578328d3ecf3e7fb572f870632c601e620fab37a38a6c75850b0a0a05d2748827fdfebcedfc9b0c51f8bccad780d47802b293780fbcdee8905709b019ceb4a9ad18c45c40dc0ad11c054325db00d57a3f36f70250580063cb708c9034e4e2ea5c4952879ce4a79e6ab93e28637cb6a3753919c1c78376bd75a6b65a5b9eed33febf9ac3433ab8d79747952e17674ae7c99b9bbbb3fcf7c396b0dcfbb5e2e2eacb5e0be1c1f705cd6def8c8ef6be998acebc34956973b7f3e5177179141a8440dd775390915d10c0004088200f3140000200c0886842281582498e512297b14800a888636664e28938502711483310c03310cc0200082000c02300002300884610ce97d6b9b0c5c233e0aab658de962414de770137cb6293b4cf4a544878a98bcfa46129c160ec67f6cd7aade969425ff8068e99374eb634578837dfd9ec3466d74fe91240d1844eddcdc605d8501a190f694abc0d187313d16023837f00d6de8656a294692e1b5aadb782d8083ccfb8f1e12ec5f5b1547f355c843651c0e6a1fd1a6c1f31760d5b3ff0a10e8c762f2817ab6563ec468841f74168a53acc5ffa4308eb59b22dc5627fa5f7d0a4573523a5d4bc2ba37046807528c71e846f8bbddfba039a650b676ba1117d6ffb1eeb08071e27189e110d3101ee7c5837440eb48ca32f5d211b482f83014e8f0d078c4f4331abd9e478edae71dad9f5ff31b65cfc73e938a92448d90ff8448750ef20d59fa2c7f1a29622654dc9a3cfe3585ebd114eae5f4dee6ca00a8af002b93301f0a69726de18a015867761cb62c51ff043dd83e1f93b35a69a623364b1a086d2af48a8f017302842f269f04dd30180f89e90387a19dcda32294f2d76531800fb2ede7354264fabbb2f791a51a11db0f1c8526cdd9ef19999f41c91e671b4b25a2014659fccb9f7d07d0105e8b7d5fc5c90f3f236154c33a0b134ed16d71417590ba64662c15661fb1a4cbe8bbf9597c40e36d89d188ea41a2a8aa0da846271322babaff49dc4857f535c9f81fdcaac7be731112a2de4dcf99d468737eaa9eab7bd2938580d645adbafb3243f2c450cbf66cbc927ddd0d492826b8b3ed20ee41cb713ce76e8326dff3fd9f49c62ff91af1991629ca6c3b52928334567d644b0e92528821729a23d6fc9a51daa0b389af8ddbc22cd3b3d34c60d7151a2e3a58bd0a8c197e1b3a2d7945b0656c0f995a013f415f7e30c6c032ba4254ed414fea6b6b589b4ce65eb5face0ce621bb0253bb8b30421ccadf0b1f3f7571ea92cdcbdc4ca3f15ad3f6745e082000506231a35f6bec2de79aa7b4680568d50d7a3ed55c94442f88e162a28a5da2a2e565bc3fc82575849214159016c0feb84c42f176f9969b607a5cc73d6a3492a055e6d970429ca693964241d838404c8f207d9d5e2c2861726a7189c02361f29d1b640529e72bb7d7983fa29b712d69ef2aee56c09e5d114856978ffcf834041cd8484e0e0418cab2367c86214979f43be23d745fc5c79107f95d72770d32fc6a7e42bf29a4e6b5fdc48cc2dab383d4e32d0c7bd247b42d168fe5e588af4fb73451c1ef072831505d16212750640b419ea951a22a9cb9611fcdcbca93ba79aac560755c38758238bd69bae0610a14160477b1586a2830db253501ace5399ca9bfee7aa541baa43a4202ec95707e5f6d95cd5dd53315cca220e414bca4e9cba382097e0e704314422122079169739f1dee1413031de94bb09a5479ec0c896da354798b9958e0dcb7b404853a03fd6800947edb975638dc6c2d1cd8d9f3270bd3ddc213a4701c763b1ec482cc7f27fb519f461aeb5cceaae1f146774ac0610a02c5afcd80c4d883e90c39bcce71d8621a6d576bec46622caeb764c6d2c8cc1d8d0c9495b2d2bffcb16cb27f2b39370c4025443b277cf2da50cf7189fc1fff21e499f6fd7c1f7b445fa888513be23f57162f1d47fabe110635f84778c1446d820fe9b0e88283a8c6c05646fe1a402cf2b90bec9e0db4f1103ecff0e4db2cbaf2341c0e0f6610b542d081e7229762861141a8b436f8e254b4f350b359e8f464cf99b5d3b3bd66c1eda1be5b91c3b3e7fa3e90f7f0fa01f7501aa86dc8ea4c87681ca40719cd62a767786e056e0fdfedf060fe600111dfc36a3ef86c7960dae07a704330d447e569346db83cfa2d5da822bacc11ef010d5109623963c522783b1c43ccc2518614cdc0ea5a78001ac4a24c3c246c163d363e5f13cb6c3c6c3daf8eb00317aabdec3cc8a0054db11c3fdc88204081e6a9a95351d673806621d4b31f7701fe03cfe001984e7d5a4fb586cb078b3e4faf630ee2a26ccfbbce82dee3e78850ae4583d88220efa88b1d90d7180d91a335212fe442b12f136e4332eee796e7bab64a108df3067b28ab4d41b043f41f8eff38ad0b62210f6688d27b9022c7239196ea015b0fe341a4dc453c2573382ca68e35d34106ccd96b6e00b0521c742fa895584f62012bb7629ba7d115071145591e6fcbb7070b8287a7c31f8414ab3c1b6f16601e5ec707022a1017a99ed39b191ef23db8663cf03ac14b33da43fa811420ac85eb91d4500fccf260d1e7795e27868e67afeb1e48a69ec665699d0ea8e2626f2839d41eb01f7c7f18f7a0f2419a875a86f0d9f51c52b398f28c81fbc9e4b1bd8d09a2ac5c1e4fba9e291e3a340ba79ebc379fcc3c76daf3c7cd8de607153b3c913554082c1efc7b1843a88290fa4c6f2ef3a002dea3b45680a0e3c32e0ffa82b880f650a35391eb39fe66a1ebd97e9733c783b73167c8d79e6785e678f92383b4dbebe782c45111b4ad0213e0deef2c040ed6fe44a1a092a2acd2d004b04c4b987f7f2adab27c4462548ff2f56b4114460fb7fb93740f28fc9c5a41306b07ca8ab8bbb9a1c9b9b48f81db1882d01e7c5a786e1a9310ce01d1157a6f27c06151958e0093e6e2e136c281412591973349489c4819ef5e2e989f010f6f39ea3c076da3ccef37b7a6a1574317e1087135dcc569d70aa1019105317e8815c43d6e372e089f0a3df169167f3d1fe7ad870284f31fec21ba1fc936e9871608f71f5410e7f1d45e21103fbf36fd3da850f18cb985219c40d8f1d0d583bb1017a17a9ee97aeef214af59707aa8d77ce6f2ecdbfa3d9041ac15c485bca7849608317a1052ec78125a14c4b020f0fce3d99e8382cb83df701f4af66061e9a100479b700f7addb1f8f1781abc3f58143dbf9d1f44e58314844588ea40c0939b87d7cd42c14319a7279c87109a4594e7d0317ddcb913844e08cf0f15f16056bac783f6df83ea1f503e5480580ec48a170f95c305c46cfc78f45af61e2c643df46c2aba7836da8683304b9687e3b8fa345a3ec4ca20ca62f11880631ce4e1d9d8f760a1c21373c17978fa08bb103da888e239a5cd40100ee2e286e7c166c2436e0f5f1fd55a281e54f4f7ecd3fa10e410af1e70103520b620c80b619698079dcde28b6793e37b083988152d9e01b581217c3e7b72a0591479621dd00fce7aa8dde7e2764ef078278f459bf66cfd7017e669215e58a80be62241d42cce596c8f0d5b707b44b66317553d86d2a7c050011ddd792c5eeebdb4cb13974c35d4ad68b1a237317d3dfc7328eef8c9d090c0fcff2025c07d56a45bee0bbb946dbeaf551d0c2c5abf918bf8cfa5d5dc9ee8654cfe2cc3bf0610e042fb460cf79e3800aee5fd43409345a9f3be36787e1faa5ec1e6497a976a1412dec989ac599c05ba9c97d6e06539dfccfa25d82bf1fb1b74230b7d92a747c1edb7481b6ad021e82e05c563bc42256c6c22ab3b7e1409bd76b712d23acbe076a9dbf19868834cde05a462025869ccbd15b34591221ce7eaa808ca918949e7d0dbc35140813f4455d92b27e10c40fa09ea46e27e9c66c164963f2328930c687526e0756e074d447e501fec10ca572bc8c57cc9bfbe31fac35877f0d6e81f91906b6a646c753d3eea86bf66b0f3c407d2618d9f6cad8e58aff1d4ace736b49af940824c2905b90888d4d699eb920cf07cd6e6a66f3983f0eb77e91b987a807e021b6a87f10031876add17aedc09853e4d0ee83f7ffbf3a65c98319c8f1220907d8ba913b7f66a698bf7fcc18dd3b928b1782febaffd2a2a94936655ebda17ae8909307c6c813ec5b8d0b4f25ac4b915cc85ab0dfa899fd6b2528e927c6ebd9e551face955204a0ef65f2295a6f8d8502946c0fe9a2f053e439383fb0a31344e69d164bcfb0cf232504cd00259096fc347a120e49431e5fe36126bbcffabbea6b6a19581e4c97865384f825b56cdada42ac9c8021f004846f5e8cf07028318040d291d309519963f3f3c014948a09cc6f47047080cca5fbc593818684c36142bca542180c7d5aa98cf4f2e1a5ebcb16bd40e79a56be6172f699d224bc0abaaf5a2bd072aaf5deb7d548fde9295ef63f2e68adb99bee5ec7a395578ece7c74bc2152c9074ab8643b396611370468335352fad3a926cc475306bfcf231fef7c8853fcbe398074f20d8dcc4d20368b67c92899d57986d582a5da1da80a6c50c713b4509279105e101601742f9b72d5d7721c262815f7eb3d0aad3c09de512411340e7d7fed7fd6677c259b33ed6f88d2423e0272cb07897f52b1c173cf02b1c2c3dbec0ebea67f2d439e3cdd6ca7d4ebc35574a5cf99e07b35e4cf577906a0960ad9a8c2ff04d8b6c43642af45fa99c177943bca31bb13eac95ed40f318d82f38d7eac72b9f36defd5144f2e2c3aead4fe0e700953754e9fb29b7fc292051b3a4ddc88e3f3b0c9d0349033b8a86244f72892015e3563bb2f26d8855703081ad2a3651464558227bcbd47ac59102269e7eb06166622fa0d3cf706f1a37aa92791efc1e62d3d69cfa21597201bd26e049d997dfe9aedf474413eadf9c3d351f6de564bb04b3f5da92da316acbad2ab9a3ae310e020b2647279e54db68ee90741524611a54747ae2403b3024ae4a461464f3badb64d76bb6e986336a3f20450e8a1f0f78f6e16bd074f78ad19f7556faa4c9b5478ed46a078bb45bbe90d8bb23e8d5706ae21dd60be994ca980147a5030bb8785bad08609a38adf71ca4bbc4d4eae2d190fb28a310d255ddd62a9988687c4a0e49d0a0efbcf81e6b96a4818481f887566614720f626ac928ed35a8a9407527c3422ae46629edda9f22eed242ec9a9576eb1bd128c3d2e1004e60e38ab14ab1791342e0cbc80ab30e89a50b1680ec833be30852a78c76e7a53c92de67444f53e538b91be350494ddc4db2ac6bbf953d6130ae036ef986e321860d328272bef38215fbc42f41bdb46d40855b72c5b61d573837065c30aea43c55f4207b058f0d136296416dd76c4aec7d2be28f07cb9453375bb86fb2926b8c7ada84a6e5fb8296cf40a4820a07ee7d68d6121f5015e75a2df790d3b21dd33311b95789909b6421933b4184b1496c40c11db978fdedb88fd58b5222d62eb44f48df8ef8d35c262186824efc5da1f66061a0d7dd545d1e3bd597382f915ef370fa6778af8172d1790756e1c8f6d67d8397ba487c1e342e500891b09447e0b4442545a005ac145807718de0444cf70fe23e60b90f9ac8d1408e9ed6ca4485ae5c40fbd2b3244bb7bc92b12768aecd405c67f40b19606f95b62f4bea79d12dae5c642f256eb9c07b43253684db723dd74b417f721ded1c8905702da7889a97a2178202053529d6a7340ce26257339d0a85bd57eee46cd0b641f2f4690a0d25e8897198d6de70c62ceca63bd99292b234228ccd75621ebfab596638a2559be7715114b2aca09e022cd77a1ac0daa9063a74e265912280a30597d9f396ac4cf6948d2a6d2ed7ad4e9990eeff8bfe0df71fbcae2ee5c6752ae5c198eb38ffdc583315111592de61787679eca55cf412be71741e80a2567399b9a1d57bc37b60ec36ad2dde58ba614caf64ccf6e6c8f580cce626c0ec50a90dd151f7279402ddd08381173fdb702df5435ec6a9eab2f5ce8cbd909a5c3248e348e4150aff27ee40641a8921792a89da696c6d6664742b90d5370f52514ec4d404a444d176b883448dcf094130422e84041bbf201d75c7de194e1141f326217449a6ce18d19b43e10442a0417b8c5278191f4d6468217a1b494a7481e41c053497d965e8f0aa3713577a04d60976f599d899173f51577a593357547a90b727bce22a5ffedaabe1610441e1e1709b4fb8bd4989d5c9a5ed3188f5e46446a6b1fa28bdd5934451a5131fa54bd2b9016ffa0427a8a60cec33210b16b16e9a6c282ee7e03485e03619e36bc8f19ccfad7d390423cc191d0dff64c86cca7d7abbf1344eb65321577bd95bdc9e2ac554a32ea7316dacb3fcc7b8c2e8f66b531c4f968b126271b71f44fd778098a48d2478a7197dc051dfa12efc25f0f98b6774b1b72a3ccb1d39f8f9c130292107ff0487b57d8049ab21ba23f6d793a74717e61a30b0a1948c7b6a0734fed151bab7db75f410ed2144410adb60d751d11b118661299712396ec73583e07729b5d2961dee4bfc086ad13f0821fc53661093af8f082580a07e02a887983f956a3720aaa51a8ac19cc4199febecb87808cc8525a6d10e616a6d0cbeb5657ceff4dc1516a8acb0ee25b9883e94ced790c4f8e72f98a8d7471f60604a503d0a5d3008bf6ecde67c8bac8604a9220d72c613f5c051f1905d4aaa26742ca52c02bf6fc7631c1363d7cc81634d5b328d07f1c8c230b80fee3d11a6f115b9329ec279f3f507bde15aca2923502f154aac910c45543520101a62fd1578689c4a9eeb9496e83c3c73ad157e5cdf69b08271661557d840b2a5b297672475727c82e65a99cde1c7d39b308195443be0ce2ec6efd357b57467a7373c99d90f2d6bc19266c7325e2caf94d682d28bfdaa9125d5b04c6161fd229fa98aeaa2ecebc26f2c3dea0ce5b243a48223377182dc538adba7eb3616ec64fac692f5d96495962ee840bbdc991968283de1baffb1e98506d50105d4ca99bb9ec9be6ce8b50f9b4376f2bea95345142d06beb8725be59c1796278be652a6ad7c0739874ee1e5904869da4808c651fb2499bbb9ee8b30c753ee393b1c00794c48206b2a07a4f977c473efa9b87ee10e0d61d81eb814a0cc269a2db9a83d42f142352648cd2400ffe137f0e2c7912c588fbf083169842ad85175d581ad46dc88fbe83a92ec0b2abc86bf0d480c53ae4da21664ee616d3831c3ed7fd9920e12b5f0f466a8438c08905a2d4bc8dbc01a890a70c1b818e618a1ebed984b63d743d9eca1b7162fc1b92a492d7f6ecd0ca6d657d7de03df5184daf9868470802cb58fc7bf20d50eb173f11f740c59da9d4f4d66e6928bb5e14ce9ae98601df8d5a5148eadd98ce3a26aea8d4db7cf857bb9a9392245287333d5e0b0a9df9bb58885fdc8ae8a537be3a44eeafe15e86f9769239c7e110d98d8dc8648f28bf7cfa154d0dc97f1c24a593cb25ba4bf36a32e40d4a243d529aeb0e1fd184620603027c6d9ab21b76d3bc49c4f4f3d709432f7119ea30f6ff56871c28dfb41d89fb7ac046b60f045eb3668325b14d4c31e09ce94ad1f80edb76ba21c801922e52854a3d506c8fcff115ee658800b12f2497ae96ebdffc4ca9a90d3319f550b60f8e86299f91b184818a26f8cc658d439c5432e1c4801ec0320dc2fdac645010f7a4717b844ca29363faccee30db0d9346d921a3a13c62a632e970e1d1a01e4b8b05da654fc7b87ddd2a5cc4573f82e7c844adfee4a0698599114465f182f312f7107b198db1a585f18dcc0f08be75448653d65ac18d3eb1796b66d67ff01c4d150191d3a3432b8b03eb71169eb5f80d3607f4a282fa46188d48e94709cb55daeb21b8a6e1add4c8c295193ecfb0c10ad705ad89f3638768eb7f4dd74a31547d9a1a5718aa747ed869d9150c2ccfecf0367874a451269353fa0aa07aa9e7d5ce810a382c0f048b017db7bc95365aac116584830d23951e0e63f60e9ad004b5ae0e2961c9ff43ee67c7511daab0ff83754441dcf0de36c8d281e2c466157ae2005e33779b8eb7b900d28b13aad64d5b9b9b5fdc70843cb05cd3f27750bf888e8ae02e45917c7b040eb77103ae20ff8c775d6f9c288e839fc2ae2a46098348b4b635bd76e62b79c07cfb6d9a0bdbb055ea26d6c71aa8e9eaddf9fa60d395d072c9c2a8a34bbfba3a1ddecfaa8f719ec8c00f4dc40c4883ab610ba1376d64f5b8289542b9356ecbfb0bbe83805e5f704975bc2ecc9843623cd020469397c46d64599ebaacc995f272004118b7ec7c31465659cbcac6eea19c80d03935ed5d19c6d07742612fd47f30ee59835f2d8fdef67dec67e027b2380ee9e897b43fbe353bde386fc8991a48a9afd9108621caf3781eff519819452448dcef81b1718f15a8998cb53073fccc65e1413e6650779bbb70e4c80752ba13aa8b16c235aaf984f51f232bf5ed025d104435ee4ccd44eef894fcb8bca847fd5bb4c3e4e05904dee32e7cd915f7a019653c7d7414006818d197ae91aa671472079e82e89982c5c4d407c3e6402634030218edc364b24042d91a96a895c2164bc6d321bcaaa6e4b83bcd0b5e395079a446284eee20ae645148c270523521c34a448b06219fd24544f2bafa11f59482c9381f4f3f07e3d8328d6e3b0a12aedc895a60e7c8468a16ad7f5ab469a2fca2db9262435b1b9e0002f5a082ee186b43440fda8df0494722bed89480a495d1d483b013d912c01ff462f983d54228b51424e00eb5887b8414e7bb36a7c06af71297af39297a2adb7c591598342f52ab336737f3a75b894d4b2016041468148230766257bdd11600865087a433279af7ea57d45eae291a504e4573a28605ead210246714309a9b124afe95dbb03de7abf5728e687700f2b9ebe7a23cf8f05053053145fc141f263433d5cd27fcab3bfacf963012b7f186505bc103e128dfc1bfd468199adca07828bf03c2916f57684c97d7eaa2939532c69ed0a0b03fe451f4dce4384d0ff1439166ed324827a038bdd0d3fc44690807107701b4e4e6e196d1b04896a8eac54ae557e4a9843146dbbe95972ed333f0af367865f41ef93d5f79c98b2d975b87f76963d82a24e5bdb252d39a9e8911bc5ebb6a4035492918d5ba81d8890913ea12ad21d279904d87c024566c9564680ecca6ddc0ea475485cd1470d2ed45e4860043b72be13026eeaed0134df7e522180780a87aeeca5059d7a700f0d5d9055507b6f788ea83d226a41384f97f438feaaa33811daa822b4b1f24f4fd306c4b26ecdef73b813a48ea0d9a7cbe0acedcf6a6c39296aad5d6a4e78b9d5b1c5c5de092581ff9efc7348e3f40a7383a7f17c88c42d158c2dd69f6b5982671e45ca886c26a7acf86724a7744a58f4eb01684969abfc924f243b60e1edfacb2228a471be2f10c12137039037a108eec9dbf547dd2e10d234b8647461ac2f99809260af1f3023ca11066b0004b3b5cf88d6e2d632814464da4ba35aa2a1e02c70b9e8e40481bbb66201667606a57175d37177be96887c4be6e1b9ff11d01905eb9d49b2c7d3be2b1b100e39e8ad1dac6cdd0872cd582520d64191e723d7426fd383ff746e677f54619e855348fa3ad368b0269c221a859b3d8d6f58efd77f4d5a5a9a7171313e01b135e3b9dda2155ba4cb35653c115152b68d2fcbf0b2dfa908558a1966cac1f06e511a64774ab895cd155bb8651e261d2d26beda9b9c1d88e2ae4095af8af52ed2e55c4c438dd1cd5b4a52c4804e23ff8c68143c6bf01223dc1acf923d47dd7d12f13c96ecbea4fcb61193cf1c02bc5eb2177ad4dfba44b350110b73277b69d4340d9a98a00638bbf1642d8724d25f5ac149c706224b8317f49401fd1e9a09ec952e9a95a02fbab10e41b5f7ea33c642bb8a96c7b859c6c44de8a7f315ec7d8256c5ac68e9b04c6adc7696a0dfe735123ba41a311bfb38ecbeec4240297d0c5d8ac4fb4baf57973fb81f9452a9568c4640879db2363a304e96ba85b3261f26d1ae9bd73cc3aaa1c70be90b289e3a0ea76189195769d61e2c0bd7e34a7166b005d9220ce5bc8981a7100dae9fa88f7d48b4826e37075732762e000f46ef19e162c8fcbbe91b12e9578a2ccd4ec1397c843e1a59bf24e5e6a42ab1493bc29f5ee30eb5b5f9d598a6fcd9011e567d0dab88c68b213e6997d1712ac7a20f09109f134a2889e6696d841e4b766a090865427ba979c4743b2c544a963bc0f185e903c72374eb270e6ca4d52eff5d0248b60d6df0a22b50a0ada17813fd38dbdcc1839bbff7dfc00409160f38bcecff6a1c269b4842eac3f8c4e94f9922c43eb75134cf1f34c60d8d1ec20a345ad05aa87407edc5583d808ad312a0fa797960bf58609dce87867790760122bd8ff351970810c058ff3cf85135392ec988482df5118341a9a2e6530dab438a6fe8a69c796f9e98dd0bde4f2af3647353afa7af85bc49dc4f953694251e9c4d95264fdfa0e70d83332ae5926dbe0c404db40f4aadb8999dd08b0ead43f531f44e56ad9498ae33b000fa282dd3fe54b8f26af3feae34ddc8e043896b2a223c13883b220aebbaaea0b2a7a6acdc7c9c01e5191a0a6588094c5eeada563a428fbc78881dd9782e16a85f89617999e258e68892fd9f00869bee29cff25d1d84377b3cd76ffea41d24f551ea47d51bb46f71de928a361bd7635e8fcebd9a597442577c6ebf3ae8d205f1eafaf8fb35b4333a41ec6f00a07d679ef29244d6878faefc636f1ba1ea2c398d40afc9df9abd82cb7d4a71d69976b8839654fc0b749acd589dc9a71daabae1349a3e3b22dac97cc7e992bedfd1a215a939b13bd2ae5ad0828efcbc80cb16bce01ad2a659673f9be146f3fa82436d9da4a58fe67260db3b62ec3024c3a0cf39ddcf0d942587e227c37b0780e19a0ff32f2b6b8637fbba7f679e0a92a29b8aa3702dea44956d0692fc743db87157117ba1478f2f86f2e7df1d3585b6ed318b50944aa43827df38c11c96c5fdad6c47251cb314d3c37ad3cf0300165c794904e07a464c7d8fbf6cf449b5ba48b153cac63d2d6a280f4130085086c91f0f90c741e8db877e84e029f81da1962654c4777641dc8cc9f266de5f967814cc62f9ac87bb624397c11f8322d8758e35b304ab862cfd0558f9dba4bb128fac3c1700bad16295f8e31b455db3021cf4f34b2e50351612ffe43612f142f771fc262b033d8948b2301aaa259ab8438a403e0b93d532cda12946f806da340cab8328bdc2172b5cb4b108f456f3752079aec6839beef9b0987cecf5f584089dacce27e5021a56af9adf9d8ddb0c1b15120a928c6f3eb006da37db3dcba0f8499dac1246362052e0113df28f037f795636fb808bfd42340f67fbd54858414be26ccd2a238e7ebaccef15595dc72d63038d3535131d64f1c4decf13c6034760bf6572d8fa0fd16bf5fd8fe0386f5dd7f5f78a3561e7a754d54402b2d193154d214e0376b298a176ff4b200a51362ddd26be5f122ee97f42ab4383d0049f6f6b0a334e646fd1d1b5c52d5013dbffc8d880fef321027db30e7132d200c4ef8387aa08376e791f2dc93bc80ff1b17a4dc68a6a604c3e6073be4dfc82cd68719a1bc46ba240326aed62521fcdd0b94bbf1e2f8ae4406b6ed91930035ccfde1d14e143f9ecc66e3b153ed304e3f18b5516854c37af5850c160cd8d06956e088af4ea7134adb3f01313200b40ad49e940859c5e5b1612ba6ceca6d58663d8cf3f23a1484de2f77ebcdbc3630e4968ed4bc6c6712a1e04f44faad0bc166fba349de121829359f22b9dfe58bfbe69d918fcee991ac217844cffc732e6402afbb275931092e14166bfddc66a08f351ad6f893c72f88639eaac48c3e3b7f3ff9752ec53dbabd9277e1087756d94205369186a9d9f9fa606ec196dfbe8ecf7f563b152fc2a6bd733df9ddbcf844301e04805856b03e56e432b72bb7a261e56f77a460e356c3c83d8b0520b58b3ccc1a7738ae17df41eb1e24a8a354d2dde2fd68244eacf496b9a6ea8da46384f576eb5b19e86825f31992e4cc9af15a5b66ac2ff1ac2a40fc64b53d9668f575f9574ffaf561a677df1dab2fc315e84fdc97d145940e671798d528d2d42b0faf568301f3b1b63b1618f76b4e19c008c4d3485a7b5c571c613678c74d65f2c90cab504e8fe14264fa02c3d883cc21cd765c5126ef62ecddb8c1fd4a25d258ef9369e7eb9528c45b039981657cf5b83ce2134b7fc430f1830407bb4f81f7863eec5210e0db2080281bb7b64dd4e51cc9ea06e4326174bc2c5a41881aa662f066c9212ed02988eb1600d8dd6c26c9e90e79d3008ec03c9ba6b39360eb5977b9287266c26ac77a612e79e32bd1ddf1398160448540cf6dd5a3d224b112a331e5830040ec9c0630e460ff05fbc6ae5d5cde422ccf9d4e69a2741d4ec7d22d028eca9318aa3c13d2c2dfaa2157ad6cd5b71c864c1876839087771bf87c331f3562218ce01751fefc8fc7a893a2631b3e08f61c05f6474359a5c26fd7af11ab761e7b5c7bce1eb3d37d9edb4664f3b03eba5cab4ed1f299d0d044fc5cc3ab903e8619c70af120b37cc2b1f89deea46bfe1d1d571568ee6f2d2a822e42cd36d917afefca6f4d0848041c52fe44c21af217f5a170675b997a71eec48cbcdec9773e57a96b5e5ec0f84800130d1ac4d505c31089f12d4338dc7fc4f24fc6aa1d62aae80f757e4b61d62fc6a3a262e1f266e2a1cb144caca308e385a68d7f9ebf90588a6b19ef6858cc5765c4f547f4b10206574280ceaa18755d378399d979c6b0834774593b58cce978619472abf6d54c699d948168c7910a0944d3f4ff636a5cd1ed2a94137b327e60c79e771382f4718c0e336e916342d42ded97ca780af23f4e7243ca1abbc5a9124ca44b2d6239e336dd8503ced38f7d9aaa7e1c6b90cbbd412c7cb2e5aa487c298ac87b591fe5eae8dd0054257ec1826a75c1542c4fee3d606d4f83be1628cd3357b416f922bda6a76b635927a343d56708c0a9430a6e20318651531c7546fc91ed3ba21507633dfa14976aaddf5ce785be5981b63a1cd3deb30167f3efb49b713fc17fe08f3bc2d318780232892bdc7785f53335c6d7daa9a1ae64e870670406e346aaaf6944799515d0042435af455c24e3c9014ceac466977e5f00f8b00d3e79a21b99049b600c621249fca5b98a221015eaf3909ce53f3d7317a4847cf85375c40402a5a92314fe91b0e380a37571249a6c86d73aba5cd8c44fa4138657e5853d8b6304e55253bf7c681bbcc93a5f8491506b1b9b1004a06971d61f3bb4360d642eeaa6081b583919801f9bd4fa53d11e761195b04f3faea53f3b8fecfa3e42c8d496e4112a0932361ec218a4bc58cc63d7a0e2be099277e1cbb37c74384e593bb3839ba418353a0e26dcd788c19a3f86a259a42972adc28e369b5ea038e0d7f3cec1be845505c447451c2a5d12ed1cbb775ef5e1423143bcbabf65865ff325f332cfd907512c9a94839d2bf3a4b63228e5a9e55329f1818a910ff884a78b2c32d131c7b9b06e1b8e30eb1ba968edca0f9a1604ea6d9446497627171f06fecd60a5ec4b11f374f5fca29da50e3637e93abbbf4846a26dd6639f6933f65b5851966d899dea870f37fb7e32e6a43cefa4e3c92959c264bb83f4b53cfc35dddd0c81db20cf8cf907675599092d02dbfe86d5bc958d0817a372d88d57c7d629b5a129117f6c1fc70fd776ea2dae0deaeea6b18438a65ad9d5c490655fce2ab395dec03486957f6833bffedf660fc4b70335fdc3e581035811b54004e1df0c7c9917e13dbd934555dfbd425c9d3644023f1ab6db73ae1431ea16cb181c738ccb3f114afbcbaf5cb848c40b1c8454e25d5de3658759c28b50f698888aec20e94784e0da2ee6a763171c6f9e920b25b221ea7d27ffe10c5aa5a1e75570601e46c52e012a352e3534aa564d43c5780b847537264d3cdab7ac3800742df15b0a3b7a94183167c317ccfcb3a63364c85f96382656d215eb0879f4b11ec86adae7d8acf3383dd92fdcbe008c24836415bed7a7383d70810429030d6306de482f3ea903c3dc5a57b0cc7b917345f55205650a4e661208b0292f03d12c143cdb523fa5e6c4767eb3f63077ba6924ee0423eced9055b8c48fa1a4ca4081f67460147c429e619e20414e14e2f08f4b0a0f57421c8c1b7582ef5556a1df5dfadd2f0ed11d455bbbe0b868df374a876726589fae8fc14856bd5230e955bbda2387d52b25db45afcd9595b88bfdd7594add18c0d6611c73314db14c1e0cc1b888ac8b4a0798627de9fc40341b3f8d9bb75acf9a68eed46d404312ce31c748f5ebcf76a4cdc14ed07dd59fd14f83afd77ef774c075488571209a4ab706182ee62622de694d556ab649a5ca6a92f7fdbb93b4e4654cbd01b8842411d56ef38a8e33673eee9b5c14f2d9b85d65178ab33e2fe54436be1df7d9405e9687eb6b963005573c6f8ed86696abd86c606637a8e13b58617ab66346ec1786065e246842bcb35957e56e6a97f4e8cad3659c754c8b1cccdd257d9f1ba0326485fa0c4ea599ccc25110a47d7f6f8f28da9fbe7558134407b824f66a761c3ad1da3ac042e90f894156d777872e2baa55a63ac6ed60d94a6a421899ed966875cc48c128e2f0719f7544aa6d86921901691227b5c19b26e09e8d180d86d9cd2c264aa52b2d72272ba549a49c78ea9aa6f6cbecca0b4bc97cee5e051191c9ea7a1b17f8ceeb9ee884035ab76884f8008bd0747a78bf5464c1c6b04df9163589ba12d160329aeb014f7e5d1a04cb8f5a977c8ef82a94a08acb19e2279cfa9023971001152886669d9730c9ff59d24f852103a58635bcf0d9a6038afa5fb40065d5cb8e0ff3ca6f550f31acd714be1bdad09ccd49a70d59c3ac013919c05fb69a2706d99dce0280a175b482d257f66ea052b86e45fc0348df4adcccb92c14ac2cbca98baf95b64dd8aad5c3f4164d849c807c4828082cbc5cbe5048b934c92dfa51a2a9441603a36976939e2414371233c52f4c66880ecd334f0d75e7da334be746032495061d5a83aac4fb980d1927159c9731b1a0230c551154c3bee3aebae7bff92206ca9e420cf5cb0d9193950e8b6cf7fdc48a18753d1227d3050e713e710a3fa126b28fdd26e5e62f88e639e58e1d082a08026546380f89aab1f198a72b61981c49fb8d4e6e7486d3f188dac48c2f087eb87772fd967f1f9597bbc7e7fd6ae4340b4f199131896480258fb26becf5881de90de537288efa1714b4b8a5e907b23b51e88b3bb69e27c10ac509fc6392bed53859dc094819295f1173837778c6a46bfd5d1a9fdd5562f869b8798e1a2c5085f3066f8334f69c295ce24c309fd166495974365335afc8ce95947524f0d5525442a728730d8ee2bb5666ff913b5490dbe11ad4e2b8c3f61c6b28de3abcca66f5382fb3fac7c88c95c509eae05fc39fe90c7226134ca563973180a817318a65c05f67ace757b95df27a441933cd587c6c43f84b8d7a262522159d42f41c5907edc10d86789611da40d1b6d46168111b9cf7b3430c6bd38603b7f6af80e40498ef93456275dd6e417f4af47f249c2f19c447561ca7635ed42f1028997bd64cb25cbb5794b2f855e3c17f9a8ef08c9138ae7aade8ed287dda0bd2981a45f54b3f0201c5b446ce22e97925350ae8adb6b57c123a2072b808a54e176189371fbae97dbc64e8f4fe62a450a26d1170f65e5f43eea68cc23d3b68a529f1e69a37959b20d7fd87a3265e563af1f50a2914040dbfad11b46e3ce54860e8e6bc9ce613161e0f7a935c50ca79afd8a48c89173b83dce6e217ce3dc9bb95e5285205ea51734d07014274f18481a35dfd36f48ea27ca46fcf4f4525750ffb1887e4edbf85fdc44eb15f4bd910d71e4e5b72e06549afdec2419d49f1868c015b2ce6b87e44faa92b6a327d6391c66654ce77a927d409c6a533ec8e306645b441403cba29e0ccaa7d1f8c753d13a959670ebbfa23eea13c41a0fe97b5f7e5d881fb5662dc17f4139ab671c761a55df36ea81753efeb90049a13a5fe83233df703a942afcb848913abe1076fd2c89819b5b79671c198b082b2d71eaf08dd7535555b75860b290de5e65f0d7b2d34f1519607e1dbb2786a69b372a382492bcc4b1bd6817010092df5442717df41ac6c8eada4aeffd30d3590ed50a4c6a53f6160430a96b2616292d4537963f27e37457ba9c36f6bbc71c408e33860ffb084a1cf6c21d8146726c91f191ef38aed153c92c9deb773104ffad953be4f2160096a5c63be77810dc620ba2579eec6ef0521a06d7c3229b7699bbf8023eb79521ddff88d2ee56fc3fda04ba9836d2ad8dd52e9963fb9e5b700c07ac2899b37ecae42ca49ae44f434a70478afea014acfd6719cf6161fc8aa6a904f6b83f162cc1031a741a7d5d40541aa5039a44b36d6a1960fb3021d6a5eb960ffd2febc3d9c652162e73a84f8db9bb60915a130bbca44af0003251e1468f0916ec9dccc2f60c05f2daa85f39b9f95c924d2cabccfcb9efa4199246c8b2d94d88947b4b29a59432251941085207b307be1aa150be42a1700ecec13938a72773fa83bd980eeec4077f76e6b7c6fab7e6470bb93e7c5dcc369e1bbe949dbc80fc7caaa8328525654ac620ae5286b201f2f391d29331bff36aa4c76f599773df71e7ba568ddea9cbd35c3f6bf9bbcd68e1ba98b311c78d30cc61393a2035587cfb9d8f1b2b57d34f299625c7c19de9c5a83b094986cfe0a779d6f89d53cef87a655faee09c6f46db4554a6ef8d1ec3dcdd75eec3dc67fd4bea897567a48cebbc57b5defaf73fdef90d73dffee5de598c738cfcefc892e693708eae21d7f9b85d1c61f5deede55aeb758a358e8c7aefb5b4e51fd75b6fe51aa7ff1bc75e32b7beb9d2a22f951d822cfc9f003368adb5f05a0b21b497ab8123dba445b05fb51f719d53292595d0da28d6ad907542ddbf9bc87feb76284f2299eab0e645eb094198db26f0b54aeec275a86c85acb54376c8da268d80cb7ba0a98548d23f519213d193890bf2b64daeebba5419831042db84f6d6dddcdd1c5b413137de83eaf19eaeb3adab64af97de6b9bbc28f66d13ef41d55874ddc6094e64c389e88bf2a2dc7b512de3efbc28f314fe1388e2db26b6c9755d76285b4a29b54d200c157d93dc55c6481aaa875cdff232327efc5475535144acbb7b4d7d98bbb5d4edc56911fc69dbbeab4ca5949293b5c65edf9436bd3adeddd75f558bd07f5d16f5d553ca757745297d1b4a9d52eab4d26f6e8350a5bd0b07a57c49ffaaa8fb5dd1bbca17c9e572c8499336a20d794826ae6b157cca753e2eec8b735dd74d92316bad75eee25c55a67d51ab52354a42958abaaa5e7aefc569957cfa5d2f5b2fe52ecec5c3d2d1a1d7bd17e5a1adba99e25c9cebbaee2a5b4a29bd383b2f41487e392b63a4fbb8bbbba6d2eeebddbbf3bb45cf71568e2f7efdba5d31b9befbbe5dd263d8f55e6b7d5f55a7ef428ea35a6374af23da328af4a34b0bd779a6efc275ce451a49a09cb70e684306b33ba2afba56c73807e9237749b3258b2f2f1d40914433bd95b18b5ed7457760b9d6dee48fb6f938a0f763f176e703d5b5e3d7ccc4c9f8f5f8baa36ae25f4f2bfe084365a00d1d57e63ef615e7b8bee672f67a1df7c6ec392dc2c57596f39c4680fc3931cd74566ecf71816248bed9e5bd0a275514c95458a162491541302bb776ba88cfd04f7d4c95f8710ce8aa2e6bc12e6badbdb69afa306bafabedfd1c4c7e37c2acdc52caabdaefa4e4a49496abb9bebe945c17dda574e98f03fad661226edf852c1d4ae9788884de4dfab3625686dddf5c6743bbadfb90dccdca33cbe0b7f50d5e61814775ee7acbb90ada803a254e95e10e7f89572d82fcee3066653887cb4b9cd308a01096de647a8d93fedd49fb2efad7b48b43a013ec2ad7f940c52cbb7c97dbcad825e725a594d57238c71fe380a38df477cb1edbe8fb7cbc5d383e0bd006d481ddbbe2333c990475e2673d3ab6eb738d31ae5c8d7cfbf83b54c63952d27c7d67431d952fae46367d2b7d60cc61cbe11cbc41dfb1a1b9bfb3a119ffe83b5f65daf86fc50d8172fc6c236dd186665fe5e903952dce69111ae76016ce89a506801288824f72f0a4881f4e700325321c89c1143a44203ec9f1b3a11c8d7052c31324b1bbbbbbbbbb7b3cf532a7f5a513c34addd6fa52fdfd903c9f27453276611a8b7340f8dcd4026bee559730c2ad83dfaf76fdf36084f089901c2084d0b4824ce6e7f32486264f5ea0a20b2a191619263f9f2984a6d081091e9e6442800ce8a00c037ca60822c3fc7ca6784166a92077329a0a76e86148d114424c48a67801a88bd216452627a4683c51685e3051e26289690447a0a0065bc0c0a4048f901e9ac06109110dda0b444176f085c90440b062859602220d4913a51f3031c580030d4b12cd0921ac60011127b0a2638222450d26154811839605186058f101154dc9939d1e987210641afa296129a2a4450c7c60440bc287262630cd10850dda4e142a2cb294b2e0e28a2b78a2682678020a257a72f0432b8b19987c7081498714584144891b6c00054e0fa008410e577ac042bba18a1c40614a42481301122eb801110daaf4f0e00720783001810430385911e10406ad0b2f342259986630c574440a1b9a684976a015a1a4e4c5103704916405a6283b26264aa0c9f044cecf1322d8018b86032d4c4e7c60b2c114da1343457810031f6d09224c3c1c31dd0021050aa2c8418bc10916109c90c1344418da942d341daa948aa0986a70c2882480805646684e64a05d6941294b91d2173a048d00a707339844d0831bd312412805e1075450619ae24443c1121a143a301561831612232f30e140059a163b6837434c530c09318560e8051274510aa34813428a94284a5d3061fa59b2c5119a0f3578010c4c3fe031ad7aa8018719344143ab8920da105fec00042556e010b1a0098d064c4c39e0a06425b349b4289915820b204c40f8e0a383f6c50d1a9326424c343481c1b4832f82b4d05454b421504a583c616ac1123d40e2054798aa0c1186105a1540683af0c124a4030c6e60820921346002062dc81746b4304941850914a127822cc1031225384263c1104484e00208960f2619e86092e186110809d1562004830cbe2801410b1d2a5a09a004e189d2154b683140a28a234c570c9102214a600071840fa61c1d9edc50832584b8600918b4235fdc400b24a8989e8022c41330584208122d38c2a4c510da0d84d08e00828a0f2fe810c40d24504248144ac060c2e10b934a8b1e2a52a0e0f08456b4849605095391234c3e43685084480208938e0f1a0f74d0427083694912424c274802068d862fb419b4300dc92a15130c5985328513ed07264ec0c4d4c48f96d3428206a52b4141e44e461b0a0222772f63445091dcc9bc27e3414432fce810ca401bd1b9d601c060d22487491415932a3390f2f361b20513d56472430c92490eabc824052bc804062b2644a898e040862b3f1f264b2a1159b572eed5bdb67b7db6dfbfedd4c42677efabbcb097bd77fa22eb6a7e000e4f491a065c97524aab42cc2723322b65e00cf932325e4fff01f40ac17e6dda3798132f8890ea3c4d91cd11e2bfcee67da068de3673e55673f07e6e32536cc2cc73ce9e58e663f4f6f6f27cc93a11b93b2aa24e4450cc2827a0ece4249b73da211d50cea221c07c9b1b0621841342081d6e0e276e1ceeee73ce495714bec4a6ec2ce59c333ed85cbc3f89faf97bef45fab80e951f7df99ef6fb46ff6dfdfc3df507a194504a282594127a7def318c854cbb525ae97c1fe95d51f9e0470b05ca108fcf13273e51747ca04c09c292d3133b0fe32d53558cb9bbaa2422994eaf5443641dc9a248d65a8cf1e77819e397f8e5636ef4f38164ef6c3236c2170392b1cdc7cd17e7db4ebc2149def2f3a142c75f6f3f60f4b1c7fababc38ccf2d4005e0df87fa48df80cf89648eb24c9ba015c1f8011926bad4e61c4388191c5aff1b5887d74e7b0df468fc9276db3d67aeffd1c2f5f0e067fcd7dfa9703927deb6e761bbcd97ff8b2f37dc30147d267f85f0e4fb0bd1ce39425ebaa8d16c077d75031291a95a6af754c7365a88c7f84655b0e1d107ec6c16c347f343fe31efb3b4265cc7e6f38e065e9cc3419e80416ab0c9f712b1c95f98a08e39c05a3434cc20bb1c739e99c704e6e4e19d4ab18db7b15679015b24333c0fabdf75e9d89113acc9245047fa4d7af1b0ccc8a112b447cacac32fd4b0b2cf42b262f4d96f9d74b67bebbbee6a05c0d5753afa794cb3e4687aa5366140020ca51a87703bb0fff527a29c775d3678b235b14c16057fbfa5cdf8d37633f57dbb9be1befcd9f7fbd0b0a7abed72d820a9d618eeb2b07b3a3ad676c47f58c6126bc56b68f5d1bcccb1c73e31d7d73936bddf178c828e7dd4504f6bcfbdde6b0930eb2ff1393cc5f3ef7b88ec00cd8b005c1c09e6771243f9fa256cecfa788c7fd6bfcf52928f37f30a05028140a0a28e44309b95314d76ff5f7f7d12e057b1eebd3e8d6fa60a1243f1f2c8ef860a19a453af9f3f3c1e24ac6e07d58c60cb1246156ca638291e73bae12ab97fedc7eb838176e045ae03ffda5cc18bc73f3f7f951e62758639a0aefe90968b9fb22a6b196cbefdabf1bf6b009335fdc43c9c7e176a350c87794633125b7e4e783855076193482e0c4f6c4239c9ec8e8cdb546c04a9409749b5fdf6ef3e539390d0759ab46f1f981cf155054d90ad9264760d8ebfab2b5a756566d5cff6bf36fdcb97ec5b8fa72d2930d32f8746e75bb6e2b83f5a3952a5dc20470092fcbaff2ebece72309dd47b40a4faeb293e35fd4d7c7a8b78fe063f4f995798241081f76679369276b24e7e366f83e6e8ef00aec397dcfef3d560e2687fd9afaf6e7cd0d23dd80e4b9c57a73e41e64a2afd163a82dc7cba3bfff3005b811d761ef2f47a3d1e8e7e8e78fb807927178e3ed0292ede603952b877360dc8060ed17c7dd5a0e46c7cbf673bc6c3998cb7e7ccbc5bf64a6f31fa64032dd7cdc3c1dc8eceea2a54364474752cca22d297dd5b24fe556b51c6f300caf70ce911e4fc9d639d520f3c73935684d1af4e48e1eb9d7943aec8930c246802ac79f11c6229e82df3a271a649e81c016381c50e24017f2ec80d020f3dfa9b147f6dc81488708776b102d25404b8284864e316865adac9509d15202b4244868c86730380487a0132459a6a1647c4cea148495988524cb34948c8f49099175d650323e2685735a5950a67d4b49d6c239594b2777deca5aad96b72e86b55017075119ce211a623533243787bd77a36d735a96c1e03ed697367765d048e00c883a1dc96aec4bec91ccef251de433187df8100802c125146b1262b6dce380b38d788aa77b9ac7678c74cf0906fd569e6690d57fb9798e649d3b548e49d1c85de7eee234029a63e5f93e54a89aa7817ca66b9eec4345ca4986ff4286cf274a121412cb4913240ac9aabb8e04da681e477204e3babe2e0e498696abf0e77661d02dc14e09af309152090f91a5d2aa542ae155a954c22c5f7dc9578f72c932ae7329c9c8d9bb7c75698919cec13938a7eed0ca6d437e3e5618c11e732e19fe2ccb32fc59863fab7121e3996598425ab369af29efe3ccc52573f9eb923d0e98e1df6a46ffb26fc9b68d943d09bbb83c0e6f197de64222e14922b93cd7754b0b094799b564d485eb3800a4a525fb889f447fb45d9c4600be97042c5f0fe39fdd788545fa4bba382412e9af8a44225d158944baab5691b28b472352f6a08d7b712ecec5b9382c7ac40758f201f2f3f14150c64876d674f4e3bb905b624eca2cc3b47631c36cff82f77196e12cc38f03e2eb1b73185ffcf7fa0173d6b9906b4cc01e3f0e7ffcf7ba9f3de3ba1e717dd1278d7094517fc4e1e6eae5369cd308b82ad7d1c935a9690f76aeeaaaaece555dd6bd3b8ef12d3d76c12edb2de1ebadba382d5e8b2084b6ba4318fbadedb735f25feecb63e46047dbe129425901f9f94cd9b18288b56235258ab5f6ed773e50a48fe17fb327b57cc4396a9cebfa82ceb5dc11bef75e77f79696378d5a5ab82ee34823ae8bd9b98b7136345f9ccd416596881eccc22bccc2ac9e518f4ed6a393f5e858aecb4a6f5fd3b2a5d56a5b6943f940e5cc5aae0b2af477f4299531efdde8263d92757ef067bcefbd4ce3d5789e440e5196ff82b27fe7a01f7beb2c7904981deffb733c0e6685787d7310488ed80439214ce576d09a5903fd8539eb2a28c77fd63d6298d1758d1c6212e6dfc9412e3008b7116c3ad37f4941e63508b572fc6849e838020cfe15e2f5f5ff07293f0efbd13c2e6e85ced884f88f5ba1f3e5ba86dc08fdaea695c6a673e4e28b7129d823e9c07f727e7451ee0cebbbf1f2e3a2d7fb6ebc1b5288f8307ebc211f92b2f3801fa1c76d05d9fd020c12e5f9540756ec64f8910616a93ed73dc5392cfdeb617e747ebf42ccfd3f48139b309fc2e656e8fc3852275f851d59e680bf7d6adfdb66dac9b769fb90ab8935d685fcb68e3bec7bd7b9e21fa4cc81f76a74f62136017271856e981df4e153ae66d6f8db74963f3affe87c75040283f1e9aae891a8c4af34dce4fa33de0a655e46aa5080dc1c0362bc1091c9c40cc14e66d8c9d73920431a19768e33f299d031ae8ccec5ceaf00b9b99af9f5e38e49b9ce57689b269a4cb0e7333feacfaa6220073888429864527e3f4286b8e0e147c8ce0f8e102f2718e28241661205a120413988c0891958f003213df5470812185e7630e5f783c3439ef9fde0e85c692102a32082c3154332f00215254ca00ac21652ae98418a4c83f9fdcce0248c1f55921f19825e708801bec10b72061494628c3a5c2051c310405994e08980ac528238830e32cc2024cba5d282e5090db08b25f647c5040d2f43fe637e66f8994149ee5e0663823daf1ea9e470011ed45004c4cf145818e10312bcdcf072c30b0d3cc28862830c8eb06088145624b97e44e063c34f9015e49bdf4f901d827e4460e4278811fdde0b0df3e3941719e0d79f204432ea27c89038e79c35fe50e2d890bd8fdcbfe464f1dfbcefc6fce1c28bd5e277837e7c547c8ccef910c830f45fae99eff365810f7578c1f97941e8e785a29f20417e60b02223f332838c147f89a161143c7889e125487cd09df329158b37e3e58e6423470888de8c9727575f4490bde4877768c07dcafa921b881064708501640e006922fa898a8cc6a45cbacd28a55f6bb5b6730c45418bc8572f6a394ae9514a7f8f6e31cfc5b46262aa0559f75a2dd4cb788e6f31328864094e3d9dca0d217427302bf49a76939398842bf77b2bd422bcfc8620a679706b211579384fdd9c5ed0de3cad8236ae2a4a843b61bc7a0223ebbeff6181eeeff9db804d8ca6518157a3ff6d2778aa3fe6d44eb0877adcf5d40f5af006af5ea7e559a74414cec12b9c83593c46768868f418c95e033550ee6f24f0df53aef94a460cbc09fa0941d0cfcd112ec8504e4484e6979b2cfedc24c98f8a4cfecbddbf7ae56b33ee495eeacde4b831e2a55eee60861b919f9b557e3e59b0d8203f9f2c48ace4d749f2eb9e2bef465fc9ef84598177a3f3ab4103618411c208df8dee219085f9f364d10901d3bc531259842f3795305a18c9ff34a5487e7f92226b955fe95be4a9b6e2a9a6ad33e429274059fd93938cd544d6f99529b96fa2747ec5ab78d1494ad696868c4d4d266af651123949c91aa6e045249da491744fbd94d3e24fbac5af9bccf37a6a4e199e422591a542a021f3001cf3e51dfad1c7c5dee71b823f9fd05b9265ee426e272bb2e95f2194524a09b1cbd66a6b103078f281d739b50b3ff639e79320c4780431a5b609fccb56e83de98ca72c64b4c05ecca98a4cfe7c990cbad3ed8425bbbe7e9557629afad95f928c7831c674b396d2d13f6cede83e9517bbdcfb085dbeba4017a984bb3b909c7a9e8ab2f38c32c2e89806c61861742f22cbf2fbb93192a143d5abc185163745a72ab23f6591bdef2a941f427e32dcbff41aa49452ba5ff716b2bf19ccfd97fdfaf5fbd7efbd7ea52ce2fef5f26d2fe3c7e1a3d168447fc43de9ab4dbe7f6da4d1c3176f40f2c55279b68e67404441444008cacf270ba11cb35092a7ac2dd07f704677d64247a0c219dd0d8081ffe44b095f1119fcce96c09e675660199a2f2a718a92511d259c4029a5f5b1cd3ea5714e1b02b4564a2be5cdea4cf78632fcf931a91955d8fc17d3bda22cbba892695b099eda3afb3d5048a16d8e97afc76c3777e963119e706dd6d66a2b572d175f86a734d44989540834641c26e78f8956a2d05182adf6abf5e1294f41686809d04dd23ad28315e121a24357ac2037362cf848a1070a3dc8ba072465b552fef5819234f2b1ca7517beaf329431c66ed91d89748084884aa0b1d7add85fddb5a6bbb71fb08f8a6137c4bcd6ae3d309fd17d7d37840d9b64dd03dad0e134fdab5abbb3a1d987a7fc53e8713242071e8d38aecb548859f61022c2bc250b26b100e566223f1f2f8a32e627287ca04af094ebf054fb1bf154d6ac966e550b2c541f1b40a1c75f6f810efe2c41870f54861270227b70e4f2383c46381ac98fa3d18da3d1df7befc5fc11bd2bcd6a9ecc004f39497e8c11840223d7a5408ad76505718c10ca147227df07eae1bbcfb8a811bcf1f290f13494c1c7016dc8702ad0c0a791f731b869284f3dae5a2b310d0643fa1a924dd737f992a4bc3fb87cdc7e8098c6da70e124e033fc7b89acabf06120a745ee611e276071436d1570b9c1294ad63d56370e743e0d65f449d2571a29fd9317997cec554a73b3eb334e22913ec7cb240e26fb1ad2d32771f4b3b70f24d7adbb9d4dc6d946c2a30d48c69b8f9b6fddb2bfe83ba554267271d3fdbefbbd2725a6696bdbbeee5afbbd6afbdfc434dd5c7c9bfd6e79a57b279e0c9f9e8a643882d9614f3b4ab2aeb493a165b15e96641d89d4c2e876aad6a6b22d8233e0db3f61397b51926da79da2d6b8ee4b5c87ea3297a2548e1fa30ff90cf6a154ea1f85cab2cb7535b37c06fceb63c0c7d76d65f8b276d94e3e15e948ad0c2d2b430c6f5e8dd2ce4b5057da69adb4e3a5aeb4035d4a3bb1a5b423b3aeb43349a51d5391cf8c32fc97a0acbf2bed988ae049eb4c0ad60f5f78f0a22423d241d64df8b58adba870c6149fa116bb55aa950c1f562c19625c678364f8975da532b44332fcc9592e46377532e4ea144fbd30993a76e78522b9df483d922551927b490be846e53b9eeaeab00554dddd1d42c8d2d9e1e94152ddddbd5950e64655dddd9d48d502aaeeee0e617577f7f6eeee7677f726b4aaca585ce741dea51e242d7729ba72035b5a40414344ac1eb0678aaa887545e6b9bbbb7b08fdfaf5eb27f3543cb41290df0f0fab7bef92abe11276c12d38c3187bd2087b8acd7baf77edfa924b4b86c41c71dde749eb9cf29a1883d9d15972fcce922367c2cdbb21391812b0972f73df8c7a4389bf2dc63d58ebfcee217c4122eb49fda3505976c5bf2076c19b4cb72cb98337af863f0c09f2230e27a14672f086ebdb022ca82a0d244b2c8eaae2515c689465dcdd1dde18892922838836247774a1e646c07946880ae2e1e9e94182a4d5c968d9838688a614c1f71d78a36275325b29fb4e0f9216fc2e02020a0a1a1a22ea643697dc4557fcc655ce721d1d9d9d1d1e9e9e4e666bc9dd6a1650d010d19429535e512793af5cb991a1b7595e75b21def31341414946b0f68e3c9a454a82b581d492e72f086004f34df719eecee5ce7410e94bd4b45d086efc019fd3cb9bdc76f90b8aae52ca0dcef2eadbe02e42cd8d2403a413b433d533c663d5c67ca4e11cfbbd22349b987ab86aee47677c7e628c583d209a1b63220d47b43f7419e777d06e717148024ac1db0e4f7b3c3ea00f9fd1021caf088db88f1f1618fcf680f9de4088572844b50df41251900f12711b411839b477c467c002499825252f4c25dc9f19fcfe8a6508e1167ed5f9464fd5afc971c649d25b2443ea37dec523fe34fd3e8f95fb2a30705f98c296a442f4ab21ef82578535bb80e9565f86253997ea6a84c2db5f46990cfe0ce8568378954889c0bd5dc5dac9253235e9680b26315cc1ff34de611b15a5dd4f90ecc0e9c3de8b100744000534638ea3c3000ecb2358eba0fbc1c752d6ca89793492bcd510702ee07208000c8808941479d0b04e06a6e2ca63fa6c0bf51e0f175b70650382213020e1d275860899093202dbb55a6bbdd6564106542c0a1e304254b847c47cb6e8d316a204a89420a40af15824ccf4dee1e050df44801494655991070e888a1c1807f3f3d14e9222dbbd54241693568c94069d713549266c9406153c82822f77f0f196f23117d0f455ab9ff1f86cdc06eccdb523f3d14c93133de8d977a377e7ab8414679aadfbfeda70725b9c86585bdb4b0d4fc7e78b0f2c34394ec3c40f1c34350162cbe0d919edcff88b06ef27b1a94fb1f91ceafb32bfca059c6abf1ec7b9cf682a4f3fb4ca7c5a47cc3a8ec09b78efebc3ce8bf7ebd419b98e34b9be34b6c621e5c7c5b16e5778cc9329bd00f359f790f955cd7dbeb7a5b54d41d94dffb18ddadb6528949803b2c173918fb7704cfd931093b2aad57d4a72d2599d24cb91842644ddf65ac35f42be560280df51c1444441424bf52814f6f32fd7a05fd6a82a22c7f96a69d562bd9924b1733d3ed253e034f78846e656a636d97965a535f7e4b8677542e7230d7c58de0993ee61907a4dbbba8189907e8a8400f1f2c04611139f222f1bdb6a2eef39afaf46f2ff1998849e81f1d58d78e9aa1f28ec945ce633f28472d928e4fc96128bf1f1d2c3a41593e1cb1ec4fb364c96225bb8e973d063bd9bf0392757ab293f0beff07cdaf86bfcd0f9a79f47736d387f273f398ef1448f4f7dd5eece4974bd083d5792fc75e6e378bc970bb5e6eb6831fa3a5b0337cc875f3e5941b9415d60eee8046508c0c4d266e166219d53a99f93084ed019ef2fabdcd983c01f06af8d707a0aeb000fdcadc5e0dffee25880c3e4046a668bcdcc9f440210568e3b53620e333efc6cb326e32b28ac09eff0c51e5f773c3cecf08acfc9060f533a4ca048044eed6d4e07b5838dce4f812879dfcf2e3e1af82cd0f9aebabd10f7f851f34df57a3933ce4cb6f58b109f17d878cff6af41f417f92fae38b910c7e8dfc9eacdf0dfbb1663ec5e60fd2fc8bb3dcab3ce66caec6be2294e14325478ae4978138c902c8ef6748926cd3b3bbe976bfbe57a97dfc3631df39314c33e77caf067eba5d3326d35af1573c423fdc3ad95db80227bbeb7793c7fc393bf8f34856d39dc43b9a9b133efd38c2fbf76224fb41cafd6a98c04ac6be03926d94fc32368220360829c92fdb70245f6f47302463347ca61b3d965d0dbbb6fb18c337268fb60efbeb2da6b1b683a4bc42ccf76d6296a82b032525e9729d7dfc16f3183dde2a09f3b81ee3807452cea9c28f0de45763f413fb51f7fc51631e187b8cf985fd08c31cbb8f5d1bfdd156df8fb6fad88671c43cec6318f7ece41e0d4fbd6bc5b292fb9d1525bf0c244fc748188d88699a73f934fcd5f8cba7f3e38e02d4741d0780647f9de46afa9da34105832f94b9fc7e583db9b71fa4681fb32d7bcafab6726f8bc9347c6662b11bc6c0dac937f2fba921ca1023437468d0b811a5e0a8342ed73539542403000000b315000028100a86c322a1501a4649b0ec1d14800c85a24076509b0ca52087510c21630c218410018101000090d1b44901f25cb0ce4818f2a351c4ed8637245a6efbb0fa705be79442a623c1b1f0d1101171e8e025519949a48fe499f0688ed637308169c40e3bc9a4d922ee406a0c0b81a8eab89e079f9c1cc7d6f59888442ad1220148dac132466bca10a4782496cec31ac4e65c421e210425b35ab84046807f214842c30cf40c7269d13306a4cea5a9675f2960dad3fc7b74a6ad00cf2174e400677d84dea54b3bb842e6255e9701dc7b49245f17ba9a4bb16eadbc38836890eaee55d2537278f8e927f3a54ca64e2497bc24b1999d94d14fb46afb9fde571df0afd608fefc72226f1c10ccc4af9fc4cfdebfdae395581db31e70cbe94afc2b5356fe78efb67365745d3f2341b727da3ebd7402343a8e6da3d899575409c9cc1156b327c1bb9d43624681375b5e8d89fc144c36379816e2df82b03ae375a06599c884a65e14f2dc3c537d66a35cb2799d855c34d22d0b546622dfd434f7c81bd85c0474a05e0ffdf377e481278ad57d3b415ac33061fe9a5497519cac514807aa7462082a3172f3416b7c77a8d1b57ed597c4e1ad0ac9d7c7e5d0177ec192180c7dbfd8aacb7c97c1e1821914a62c78a51df3077424229356bf685f97c1cf57aae7f8dc8f0d8ab39c88e14e059f246a5f867660a66d356d445c2bbe78bbde4e08cfa7d2e5982f34e42f4ee0dc1a49605121b208c0516eb549367c1f33f966b2c37769aca20b1d6e781a36ec0936b2904294296073c845f5e3bf217d03f439fa9774a679980e53831fc2687b0d697f3818d9d9008b24eff17671f7239d021667506698a64728012a32288f7cded8a1361f654edaecd6459b144068a3b17c368b9a79c23b8c3cfbd1dc7655ba3054bfef97da7136543353514bbf2725a8a647a384c3a3a90dc47437f38bdb8c1bc30aff3a413d7b50e016d40d4cbc396d4db154d9d954b1312db8fd4e7aa09a178d624e8c426ab355cda4cdec8ad1a94fafd066308d985a3e204f318fb05fa53db5f5a3f05f0e148a9d058710d3e79e0d7242861bde7b4cc74d9f0227519d82da20b3287c49552a8fc985e5c1c4d975becd7b26c881cc41b4dd26b4f109c6693bb219912a18f20a6d6e160a14a2ed551c376d8a9c443935b5413a73f8b63e5fb34193d96f4d1bfa797cca223097e15a1df7ac7b8ffe24b42912643991641259e2c60e0f14d246033f6941e2de233aa68d4d1325f55dd3308c9bdc8f72cd8ae737cd287210e51b9adac049a259ee3d3db341f7d9cb5cf9e7b459c527b5b31924a6321bd1ee1116a791b2099c976cf46c67735ca3780f37eced1eb979d9e536ce72784847a2fd0b2e4f430002cbdad98c6bbd8812ef8574011afc940358a19a806655514d17cd04c50a6c252ed1f69c8d940a0be1022c164a59d6322e8312e92b0f3c8347b621f6b231501daa6cbca1c13480264e1b06ceeb25b5f9ad1971b0f68c9413ad30c668578d1e6d46dc91a4575ae6e7643bb1c108e846cfc60193dd9cded4e603fb149dac9e0c2fc9b122370fa08525d708cf117f115bd567e34dd7f0684089dabac1a7aa49dd9b64a19ababd20b5894af6c2e84f65d6de4011411af732471b0777efb07ad0c61f762067d583ce263b9b241860eaaeba064d97971b097f5bfd284fb051e50f9ab2d8a8cd1ada8527b78f23b1a709155e95a7dcae95f8c24f71383cedc2b8c90f2900a80d552ece55bfa3e3f866ae44a4dc68289dc33ae55572b2ffd4c61fbdc62c3284d2c558183d2cca66941ab6a64d7d22374af3f9e215c8a99b3921526ae382a49138ab130d41a92b179b04737f7b6b076380fa862538dc3bede4038661f213546c8fddaf4b122ce005c4a26c454bf1ca730480095e5887dc00e62f50d2bab0617191ca0266fe0bc4a5a25329dffc1a21b01048c6d2eeb9d99498f0a09775eb0599b7e5248aac508379c85ee4bee1a8c8cd967ee9c3f154e1036de8445fbb3cf113458ccef53aeeb81192a0254b3c8409c1bcec5452262adeda413b1002cfe7ddf15c8504e12355d92473e29cb44431c31dc359c4fa0c7e07a00eda87f788212b7412f56ebc6a8f30567b6aa02dc78cc4c9a8ed74f1c01da0c111489f75eb48ab0ae65909490ac155e1b9dd24ee58f911d078c4b240b0d571027e04be646dea6e52481bf93c0e2325a3a3928b98f2f6164ff641dcc211262844b59819ca8af3db53f844701835656f7a841a025a25c9a6af7ac475b193936c217ba2788044884ae94d045d4dadc1208b83038e60031f15f26eed003a3cbda17680a215f269fa7fc515f2861941e51cf960e0003518237ba7219bcd86370a8a5f6cf48ed7e741c482e52b001cf390085f5b3f79496fe6644fe8519a881f4fccc08e0885c62caf8c1f4edb48d286b73c2bed62368615b5b8480facecbe907b24b8e53c4b7817057c588d6a8f7f4c43cc4f3523f2554f8db45c17e8aa7c11387bf98098281f56e3dd92c90103956a921bcbf5195185afcf8ea5ca93a7c8f11c16fcf2800e2b2a88b7fde514139611ef15d662f5e2f28ddfb516f55ef71c692595ef4d1c05c23e4b3841263223e7b6bbc05860446b027ce24a5cc2e161d1b7302eb9b12247db4e695b607c79e5e023f87ece7967a6e64916ecadf482c6b9ca6fcce7c449429bfe239d1f21020329bd09d6951a8b45e1447ecbdaee6954a3b60f716055f5c3441b93231f2bf4adb65ffa6870c26a3eb60ec55d62bc1455f96f939e8aecf58cb8886e937b980ebd5db4751b27544a9bbc149ba47558b469e8ec1f457f0933b06daf3c8ee8899b359165804246f945b219627597295a5c4c16c636532f392735be48d56012705d9b364c6e03a541a0cf032870b140684feea215551b6b8c433445fa5dcf5be863a2ed3f7e4d4f3ec6cd44d1ec7d3064a463a1adcb6b78909b168cc495479f25923334f67204edc236b9ff2a3060939b5714f46a4488df876a4293c4ad33bab5c13206238233f25f167344de87ed15b04799a96646fbdca123b2faf25901eb04a487c61954d1668b83bed775fbc3323f1f31a6ebf63d0aa4310d6327f2e6bb309c45632bc6499448f550e71a49d0b9a1cb863163ede1e5f0238c896fc48d33319b92043d30bc1ba2df752f823362b0851097ab12f0c68e8a548ccd83cda1ea309d41f0af2e0ea3879aa0cbdb1c16f24642dea66321029cc25257c3f3e7cd6f5582df3d768dc1296c9e135296089b01329b9e0a398ec9abe468ef8ca912e2624506de0d787818d575c1ee24a114d45678e5c9a4a09eb49620244576c3302b9158a5e61fce037558ad58d03d7c625a07b476af2bf603fa2c2c0bb5fcb7cc041734b58f96fbf61f08d771504403a47605822ec5c64e2ff6e98ef8387b01854319a0f04a8cf6c36426a6d5fbdcd630b91b1fade68f150caa181db967b835a894dbde61fb8a5b06854476a4a0a9429398e1a95eba88852e6e40f7e13ae12cfd713a048d62db9685587d947c5b2fefd80658c96164b6e38e57aa0a8a90e56ea465b3271bfc76de80c279d81614e9457df6f92fc723901d588099f4dbd27f69536da053d978811813179942174ee209edc57aaeb2dac4a90f38680c4e8c4efba14d3b6c5515b132eeb850f9442eee247a5616fe743ef570f0b20df22215caca3d9e1ad9e0197c691a2e0ab250a314bd6b0d62a941e3da135fb9a0bf2ec8b06c99dfc9c7f01725c9fca2afbdcbd5c90b84d77591142e249281fd6a51c870043057bd5e0dcbee97200fcf52352c8ce44d382e6ec0650488e8cbe99d3bc124b41d504139c35f83e7949eb38b49aac945059abc7464d69f301f3ee71ea35c11e85dacc23f3a6e1e2e7ef21184eadf5093c94f6d933bfca8df1385c4f19c191bc5f7182b2b5ea44ba9dfacecb27800adcc4d00df8b9e489ca508d9c700dffd93febda2fdc4275e70b6537224847fe89e2054cf30728b32b5bd6d35673b4baca9bd21682ddaa311d036153d23b93feabe0b3eca51cf449177b55c23fe0cb576e4cfa5fcf6f29caea09e727dc96097c598fc4d810bc6b94a4975a70371a5f1586651131fb2d4cdd045f5bac49fd51768e49e0be81ac87eadc62e91484108fdddd80b45c0e4a39af8f83e42941fa8beaf6942f0ce8d1a7ff2fb07528bef0c3ca5cff99fea8e9503bcfbfcebb8061afef1f9786262e840cb26c9cff1bda90aec639973fd878df1a87944c686c3696c8483004704da36f1ffbd1a48a793b8138cee5ecf1262cb8ade2688235081193dbce453a00c47304ac02880b6c15dcf952d469c19bed244adc5c107408c6b8270d535f14e639007529f78e51db25c0bf00c00322c4d234d83a83a124fd563366106b5b0ce73bc710448f71b849d152d899d2a99f3e0a3f0bae9bc5abe9bd1fadffc70aa11bc7ede84c4c18e7d6f1faa254f7e79473a539ccc5b77a02591fd303125128912cf64ea0844f980b715527fb05569eb5402bc8b964f54dd7f295c5585ca3720c02486e7e8ceddc45a0017985fed0b42a53a23f0da464a7555b8266798893f7589bc0268c90587edf21bfb623c9c186fe988aec6b2b3adbf2766226ee0cc2bc8ab9f87e7be19edfbf27f35fe5855fb00d6a32749a5c9329711b00d3cfd6c3661b5f9885d2e509fc0e2d7845ef75d8b525d5cba1523bf3c4d7c528c29adb25ce368ff3c5d1e933950283ab0247750ab40714dbb076a1671534134a20a2b7086b5d5634a204d7895a1857dbefdf0eff7a374e13735fb6d77f089f13f9f0672de7fe1a9b6fbc1719a70a6ff92c73ad7769adfc42450d918295d42c843859d8d7a20ac30e2c6f444843289d57759958182bb970fe6482d62748cd2132217594cc3e1728072a37552536854d3287507e8df5603be11053a5580d57be7c08b1dfc73afe9e3963e35bd188a583ee8e3e8cdb0449036f0f78e205317a164649e1e9ba93ca5504b7f62c98d8451e08266c4811cd3a4be39c2c6e6c166603ad239ad1f6f478f0bd1f89f4238487e185528085bd03b5e340ccfedff625c1c78d21dbc26b7e4ca79c7d25c83fca00683a45db51713b1ac379d78baff88d0dce1127c068028a83b77fa28c630e391540199f07e7bde6cf866bcecbeb69f477b8754261614c51c5299e54fed6f7b4ee11427071c73905eff11e84f02311fd8b0a5bfb7851b55562b5527785a9f720242d1c80be7875aa5390ea6a2b4001be808446838b2b047c2e5a40d4f8a05669502dd9e2f14cde475469daba8ff4d608b8d2f936fe9369f607e05a7ce5cbc611272c7f941c7b0325f6e8b7a99b9623dbba4844b9765ab2953806eab59417eecc7d6416e9c18c1beb1e52d4951bd2c793b2fcc7fbaaebd8e1b8f0681615e3d8d5018630d103e831b25093e3208cee556bf40287da34870339279ed3732a9dbc75659113ea6b50c5afb01478031baa5393749e17f1759a984a9b3932f1eb3a210fd4e11e9d9d814b9e718ba9369ed4ce33cfdf2feaf4aedbc5a3feb95c59cbebccf2c7115b4f974b03f88f0a8f335861c2bbdf1c88f25c4cea964fc05f24ce4a327259a8d825b2fc5f1f6c722caa57315cc09d821c70bbfff710b07cf43e9a4e674769400acbee36f9ab9f8db008758a9cc4b1aad6835568ca990988e958be823f55bbebfe0a2ae4873b2b38ecc8dc836b9acb92eb5897f0c2871b8e5a76d2d32ba678894ac22d508c44ec5045f5a611a376b0d862839280d42dc7e864be2604b2166a9936020d19160a4e1ad24e273483663e2058a24c1c35cee5124102a971c1bc6259c80b9312067a269d5f4611824fc93f16ae05c6b404ee780e50850d8985286160344e081a403c384c7fa5227500205284548cbbc4a040e484945ff4b5319df11e3a76f5d071181c2cc9f59d0da2b16265d33cb15aa7217928d9a0f8aceb290bc40061905ac865fd00951857821aa9ae3f80bca4e56de8225e0f165c23f1bd2a701afefc13fb64d9cd507ee1e717a04aad88087c2fd27864f7587ecf82bc8c019b17065677d6d12c9626505ceac66b389dafe8935e9f8693fc0c768827ee4dd48bb2fcbd3c247c72d8ea842fe99c823715f56095b7092cab8770e2db6da718793aa74e8e0286b4e12e87a22c640cb8e7782fd54db62f7c5c026561f117c8b54fb60f7c78ec104d3d170f2f3b5872f2fdf838e9fbd1910aae61a46009a86d16b18360e1ce7c86b8d8af5cbba09ba90d9e1a3c892fb6d6176fd2f4121d83d10db3883187ac2a3e811b277f6dc3aa6b8f6fcdb4eb16063a2d0b1da7de16d0f35cc80956cc43e04fb0de3966ed870ea465cd2453ed12aea9e652df6215bd2abf4049893d8f47ac42a326fb64463db0abb61c67adeb62ee82e1fff98f0a046a1120a52a2654d3c117c2b83d9077b3476290192ad7cf244e22bfc47e1c5d4e0ffd15f6a2b37e8e58fac39afa4d506c30bea003919914e2a58e5a1911cf3045ddecfb5adc39071df2b139d36607b72670223520f1fadb26176b18954b2db449e5ba9a8667f34b51b9da1ac2ae663f38d9e4a9ebfed2f90358b36d834a0ff2f564363faacb7677dc46a8379b4536bd9050e98b9229e9aee5341a4055583566a20cdf4e3635306c33d691b01dfbafebaa77eb345593bc02493c5dfe840e40ae65a7b5a81a9d43d808bd0d953d376caea17f518bde2501ac04f537adf58fa214b7fca93114b1513cfb38a438b96822f61d82439441f821421d4e192b8001f0ae86666d15c8ae37fc8b58915757b828f54f2d7e21500f6c65ad629509e161e0ed1db0ab6246278881aab7ff6a81cda1e846f9364431e8605d187ce61d0369569f46415099256691cb76d113dfbd0a02037893013481442aba152d4e6b993d51f1ade33ea10d05579da1e45584d27ff8d1ca876f62f28709ac80873a6714191f0adc8d0ca29038a876a1bfee0aba6d632c46b53e1801bf3c38dab5baff1c6d610a634cda6aadb06e9b5f4b5857820cdcaabafa373d61d88aecc2bdaf52a460e80d78bcfa403ed23577548cf97d43483dd2188aafdba1edf5fdbe06ccfb822f00f97e5b87c926a4684051022563b5b9d500d2f97fd580b853197dbfce737b63e66d49be6abe3aca8d94ea34c1792e92dec9fc832f4d9047b1e4c1a174cac62c59e762d8f096a2e6bc84288180c58be7b9ca7ed025bec1980f3827d0f00e41d137943902afb8f271e77c865fdf8cc4969ae253a1c2a4df6e5dd8d749589a36b85e723558d5810a09875385eb61765a674acbdec0d28b466d435128e8f21a890a79308af64c3d380d430a101db0cc80c7ec75731ad131b3d49ba05bad76d4c6b00bb902b141909b6c69741aab47cac3141c9e9e3ff5aa699d242db111112296dec6958a9e8fab17a6467590ab3a0bfbceb748fb5aae95414620a81e97890a307e3d157d32c97a99bbae3945bb938f7a8ee6dd74438cbc6bc1d7be78e04a8171d4963a0d8b08dd41522c75b788f51050a6c9413fdb1b8284d5faa9b137169f31c6e3bbfc562d6d7c8f0b9607e67950f53215c39536b2bd6ecc1766d362de522fb6ae265672e2cb4aabe3c428a5c1d933a33f3e88eadb8e2e2b0beff9d1d360e2772bdd232a0f34dc23c9f99092ddc73cc6345b348310a8c9da8f8f8cebb15453ef9756f4e1f1e60d99c00bc15063111202e332ec10538e4297ac7b4d2d1ee7737579878847213641330cf2174c41ef5fdc25a1d8956b26253e1a338869c5feba990887d92f932eca76e22250fd0b8b6ae1041166f22d23d403fbf85d30f6cdd2a93e0031220afe0f8912419a16bbe3e8978744f023d9f127f83e66d5b1529fbbc9c0db2c0efc1b63061da836a30a154362ec48fffc0c535b4e8797c873c2d051b2af8ea71d4ea459aa8941c1f0246d703c00c6dea6559ab47855446f56eb17cde2ed0a8108d513730c09200edf46a63a74e611d9a34696bf8b12bf9b4bdf9021a8ca865244615a3d6910fbb23dd590cdd9ae83f828cc3ba3cd4f417d40b5812a9bd5da61d4f763041ac25534a2ae5698fc68560d0bf633549ed6c64cb7a700c17478cf0bf7cb43b6f7a03548616079b35ce29fbcfe11258cd028b3b6df60d423fa48ac23cb23abffa6aa637ff88255d6c7539cbccd8d366c147b248d7559348a354fcb8486c7128f728933fbba08a8aff813ecbc055b46d0dbef837c717ce464bb803415bc9f59b699f4c5c41ae44b03a90afd5aa6dddbf7d35f5c12c3096fb01fe5e272bebef2dd20ba17f34c8fdc5ac990a2ae6e23ef01888ba80fdbb395ff7fdf004d17d83d53060bf29499a686064433dff56f11712bd82801e9d1b7fdeca4e9a5dbd562b15b8c8aec4f0dce08caf0ad4b441b5a56a865ea910319007ecfb1f7ee27c58ca8ccf5ffc45f0cf6d9ef246bc75acbf9b48c222732ec9ce0693915cb86c8eb13057f2ac97798d5364833a05c67e02d6b04987d28bd196574fa9c0efb20428d6b399be6879736bbd15be228ace47fcc900fed5ef1c84c485f6574bbaabe046da58d2edd90b3ff800070b86c565db7cec6c10cb3fdc8128456aeda151996e706456885391b0aa82e05331035586bfc8772b92649bdfd419a72c0166469e3e59edb9b8aad110c1d6c59462768e6e47b8cf3b94cdadb086ccb0815c84b48a176168284fe141684958a5245acfbf4ca592fd33cf6f4cfaf57954aca4a234f70ca5afdac9482306883814a41f0e0d218339829974c1ce35f63cf734c0ee010a2ed5ae65506d6d8c3a37bd0adcaba2eb50954e51b84e8408094128869d7591c4ba529b006cb957bfa70ae02d6d8cc6b55734528732a722dca703303d803cf2a2176d6ecee04436ea84eab421790d2a585d4b6bcf3bac218950d2c52f30911e6f621e0e89a068f077477dea060b443aae1e8ed227b22069629275a84478b686278081733ea9805057396cca3e4cb0ad990ec1058fc99aa054ca32a61780b55efd290e77f9b03cbb77aa384fc48b6fe083d06587229974b1e4755609dcc108724f9a14fa79f26b25dc5ebb853c019f88e72c300b0964764c47be871f9425e63988a950cfc9816857cefa4a07fedfca4530fbc3d161e3df1a027454aec5ffc09cf3b5651371248f0712e3d5e8a09318fcdee37ba94c91899d27df2c5354981a3d04b7ad002528a8dd766f761321c84b4e0d1aaed152f7952bbbdf683b6c93e595ba95fadae4e936bb21198666883919b10636d21bf7e3d72204f0bb3864a6aba7dabe56dfa3935cdac2d157a554388099e49d9508e6b6aa0eb38cb779331ef05cb5e48493183c05682acb182c3774d8680200810e8bf4e33ba7f29b6d79838b2c94fbafefdadd30ccffd5ec8cc947d16225137bc0bea10e7b81e914072757c5ad9f8f80dd97dc34fa0395bd0aa73a893ca7924f073835adcedfaf74e171bc27d6fbb8a5cc92f01760857bb515d5afaac014eaa5afc56dddfd8b2d2c9b21b1da4b5fe78201223a839eaaa7a8f59862996e2d6e0d32da5ff8c3500aa4eb19659451423f67919710fe7a44f853cffca79670958a9daf9492fa4d890bd19f8f88d5d8a890f718d0e3546deceb3c4e729e8686ab58ee79479a17c896a79aace1eae5a161b5b93cd297f58b1e4cd1295e9b9900909b1aae64f218ef338250864038ced50a7763895e00fbaf14c8be768f77be5ca4af9ca71fcaa1ba721b00d7b33a6f6436ba397780d5a0a25e3fbef33e194f28dbb48b81b20acbd52a914c45f552af61b6690b5ce1ceed63c49b6c8f2a973af00e2ceb11903e7280f2950dac57f749e817f90720e8bf586c7a47564bc11c94c650aee67068f73f326ab1677ea4505a743c74136e0b6066985101dda99fc10b5e89815a1f20d98cd2501c804faba3fcbba3503a0c214a1fc7dd51fb80cb89f9e90213b8b239bf38aed73cfc7a29794595d631876c8507e6faae684e2d684cd5e38e2a961bf46de9cd5d7a0dc21449dbfe95dcc40e909c40ad2091dab22e6aff5e5fe5723a447bffc2c964f890657959ab2b070af12594dfaa44888035d9bea6fc95e6537c69dd218abc1f2ed54e6947dd2b48200948ca1b7670a0472637b503dcf40d025c3c02e3e60b810318904eec19c9f285c3e6d3a01c33ea648b80aab6330e8d419e87e57a8dfc73b02c3b8ebd1d58671d964309830522ec50d8695a8b072cef41c6b74a06eac6ca49f89b3ff7ad7fc0fff9acf99008eda8ca618df50c520ad8ed287f2434c7d29c893dffcaf33817ba259745734f592e4f872bcf65b4b6b6a6f73890dde44f605d551e372472f5e2ce98fc8fdcdbfab0578e09431fff75f4831d1fc115a0a1e52ed704b9cccdc17e794d92bef4b7ca0acfc4f458ea802ecbad825839283239c8fb09f15e90d714c3389eb1283ddb3b7ae128fe53317a0b13a2d0e7302f08b4ecb532216ff5f5d673a1e7cde88f458bd55f871fcc903035a9b88b878f3f9d0d90c6db554d68a78d5239c01a86ebd4ba9dedbcadca71c3130de459801fe8c642ceb5bb58f4a0a0f29f2a749a0469c5fc29aa8624650545846c01ae8470eb15a23fe3425de3e1ee989370a0ed4ba74033155d750fe146c6fd6e08451936e3d5633c50c81c38281a6eea870c3cac232c69ca01c0a9291736e327e12599fb89874a1a66f2e4a0573c75b87a8507d89c76152383e316df89b252ff32df09d64474d34706457e90784686317440ec80728c4b1655b8437b4a18a308d207a97cbd637493c67858df057cb495af59658b84d54f55ab214bd89a6ecb7b30d0dde55248fe25342e1710468376a63040fa057e979130d7003d92fa01b74c0aa9c67eb965b38ec2893e8f9e32d82d39861afff3025f98305f2da4d9dd592742afea653bbed1d41d46bac2313e3d42d94a3e10d335901da4048004f1858a2f2ac80bd68e14157100483362dd92f5e6070e11c4b08aa4c120cffcbc7063b9917fb9ec9ff65e8b2ad57ca1419ca7943772913a1b3aaec8a18358f96e988952dd643cc999b33a0842fea5e9f58981f78fa902ebc89aad365fe46013012ade95e2c7e511aa1ec68db1a0275e9718325c59a8399444b2a3aad412f673c295311fcc4222d10c70d74e7c9465a44e16aeaf6df4892ccd8539ba3cd1f5ecc60732af01785b221b9c7a80758db2bf821c2269a7c2126d222d60135910dba91a488177402134d96d8010417de0bd36636703b0e265b7660a50d807866afdb982e1393f2e3d44802bdda7e10387fc86a2ed7431763c6e007f42df5f91c7f7fd8e97139be02d032e9100d2f6ef7f0e981deadb8dab12d8226f624dd84ccba5c4f8b0b0faa256b22a78ca6ae81e3d45dfb4ccff1b3bf6bd4855baebbb1fb85c3aa2fdf12eb3c64a275fc2f8627c95fab5422cdc0b784399ed10064b71c043965c2d82a523082581070eaa23abaebf72f6793f905765b0ec484b71f0010502d487819a516ad3b406b1c18bd34142a945dcd67593c2601329394e8c355dac96dd179b6327062020290c6f8254690fe86c07390e3cc24a160583cad4621033babb71f1a193173b2127a961ace467545a37bd42e88d98897ce5b77c78cae891b20286c5eaa0da07c93faa574d36e107bc023d6c8d654d977c37e3d70004f683cb8ccd8186cbeed49d4d03f7cfc120482c68e7214ce71ceadf38472103f2cc0aee18252d3a0ca875e47a333f769169cf6f9de2d7450ea1d08da46786953bc1e02b2854758c7151b98042b5470121819f3bee4c0307f90496cf65b62553e553372505c23d5705cb3450420a8dc5490993b6b3b2829ee798bcaad180dc8d02ae9d5c4aad52a394c4da73181dd61366adb1fe04bf6a9a91e31497f0efbe6fd8f50efe02c63d6456c639a90a8a319e101f9f65b77e37bfe43640fdbe990ec57d988f24b488d0fb2454a2cf274801fc22b804c4b3ff2a5fb4a12a2438ef5696bcc54bc30a0c43bd394b28b43ece3c5db811e1f053dc95f80dfcd0925a8e075bca2ed17f1bd9c2334c944bfbf536827581229d1c010dbbe444f8e2844338e342789121fc89d53e8ed7a9c33c5e29ca92a2b704e4c825ac783d12129c63a9316996d93d8642746c1596e3dce31e9e083baf6f85765c801619207bc11c1e1ffa423179186311d7c98880a246a4489630f85aa4f2137b993d209f4ad42fd5422ae69199d8ae84a38c8ebcff70df9ee0a5047eb249f3b3753059b7cc9c0d2fad9cd71d3b764287dc2a1c6e8498eedc42684f80b77353836abb3adcf81fc6c7a0ca8a3f41fd18dee105f64de28ef192a66be395d86962d4f1b36cded40ee44ca85e81dbac8ebde6be918afef2cfbc188488f098d1f4861368ae7415ec27cd1de74ff47697c32da67a964cdc64e78f08319230196ed351a99ac0af6ad950d9e8320a4ef175b269f16f699dfd83d0d84a4183a5398564b387b3fd810efb12ad3c748cd282fe0fb124d1155728bdcb5480fc17558328f668ca56428d9728401055a87236fad2780e1107dd586f7a3b097fc4d6c37fa32cb0d3dfde5d7a4e838316c6e14815ff92ccf434162ffc76299485a1ec3a28110ef3527176b2c0cea99a0b9d3a3edc6c2cdf8a4bfd6d8ffa160b9a694da74c8d3893c8687605df6a1a8cd6224d5f0991a26372f3154b0843361fb906130a0ab2210ad5af83de2b12bc97bc5e4e5d3a38779ea32318d2fdfaa3c49e7081987aaec825d84d0ecb1e72ce909a1b785665888c00c4e687164c27837bf684ebc22d4f0b8f5b0bfc4d038da9b8040b151f575b93f161fc1f9ca0924b67422f13d034921983f1bdaa972f892a4d47804e533de21dbb1ac1920e724be9c02a9c639abc05418946bfedfa9c5a2ce809bf94d89041b5b66bc1842a59ae88404270a9b6c9363dc76ce8206c512494a4794c7e472507431e04cb2f376c0638e410c7f2918b1fd641548a94d4dbd1bb07af912b036e463129cf993fb21a81383c28da1c01ee890db7a4a9e7efca529d59a5689b60651fc02970de8dda258d12709c103f8a941299b9f7096aa4cb1b7a374adc52e4f73eb032aa54dbb34a252153bcbcb85f80228c7b9e425454b8505118d5527582e385e3b9be1a2ce11ea336a7415b3c5852607c3607cd6ac9872dd32875fab615a8ee33f81c6566f4340b6f4e273d3c4719232e938ff13b56b44b8e8d976698f35589419036553f761b52d0f1868a06106bf68c32623f26c21f657a641e7953661d05d7f277021d5854d060bef83ffe99bd4ac6dbc5d5c9782a073561778bb090168a2dfba80fefa375f924129d7e362718b115c67ba38e903a8f8d83c020f2354e5970ca47106d1a05f2e9bb7ca693c7665c319125756f8d7b7b21b62f802959125f6e96c53e083896b7f9f1e8a9bf0b5a3e36054b45dc57b8b4d47d74a6708e3637ef15ab293d36976eb3bbde47b68e8eee4ca57cb58b397cd085131b4a32e5680a49abac0204c8097fb6fd205655e012735238bc6aa6913f8e369f360207887e530bd49510541a3018dbb3075193e5f233d3483b30b327f7e541bf54ae1c036628101d26e896f9dc271fb7985083a3fd6eb65e7dec8ea4ad5fd830586f12dd22d1d3627ce4602247e840b759e65aa8b6af6d1ac663bbcde96d36cb09575a872b5b6b74742ecd88d93847622a78a4709e719d23f96ddfb9bd035fbfc368f6d9ba48c437e6950d402cbf14182fa9c6dede5b1a3e6399af87ffc33c47e0688782cdc9aa55baea72a4408114a6a399dbbb7033ac58705b3a6d704c59b3167e3e9fd77cbefe8d8ad3a331742431b38eaca3bdcf59737b6d06a99670c8cb005b693361e0ee102051e6de07621e8990a385544151b757adc5e607503266d8e2a22b97b7e3ecfcdd0ad5d7b8d6a0483b44314fbc97c856d9326663e4a8a420d41694a258ef478882afbc596f543f0b9d7050a20a0c1a80f86efa27e74ea2d31228899c6ac540d4a61980c6153020bd442e1cc5307d008fc636e3a95da164d8a98d7a5cdc1faf040b27778a5a02adf27264e8e372960c30fb45d73db86c31aa5325612192d4855c9cfb19be412dfa544f998ea5e73ea859cdfd7d4f14cd9bcb9f7e99cd605cdf4c3d01fe45b7de38fb4b58c1287a5d3912067e8f59a2041b4f304c3e554361b4446489431534eab645516a49fc56ae48ce672a74b66686ea0d2216b7443d49ce1bdde0d60031e79fc918bbea951d46505e1dc124a0c72db629bafc8c491bf5d37c998c3a54594736848a84e5ff32c00e52082a7360944dc5476e85285637e37e05fa7e392c01fda28384bc2d524bbe4e26a8f7e91e9890cd9ab8b9082520af3a5853b678216c071d7a1f95b269c44d40afa372567ffa052653eab4abf83d156e39426a5f102059a7801dfb21d79e02876620e4bbaaf9b82b2fb8d6d4dde992f56ec4653be8258c6c5e74744a5e1ca8c0374acec8b274746a5b69b26c7f988cae2231e84c8c185ec17f8c739d2e9192c2392346b222ad16490220465f4090f7811ea62dab6ad4d5e5666dd02457471517020a31fd65752448698c8e77d20581ec2d0992bc045bef7be12d044b0b4e3124c991d8a0011c47920e3e33a818fb742f3a233adcbb613ac202b85a091ea956f073d3feea14d612056ad664364019425e8cf8a627d398d356916383e3fa451327bffd8577e809811b80f939ee30c9986434417ebccd123ccd4ea9ba2274ac398bb824924406e4dcc28eb22455295b9862d500adb101a131186c326cf65c47df8505daadf257d9b288693b5f3acb362c57231db966e016298730a7c4b3b46179788b60d74fab57758651398086aa58040e420a0f2ed556ed1133a4c13887be8309aa4f781e04babdbe14e9c862d1982e34c3b97a4113694728dafe8faf697919313a4785697d8a83153b68881868f83c902865d614afa516f1b031ef00718894ecf116de16328ba4823609af6e0f8b22081cbfee3fd4230f8d56b824e8335533174145b7ee0accc2b1455e4ee50767bb42901f5c48c597a186b565677356ca967d64148d9c78061784f8843528813cc7a1369fd8c49c37106726b63d7cb4ab9e83b9bb11495eb9b5ac0dd1cd204b7b7d32981699c6ba2155bfc5d347c9ab430eeada285cb3c5346cad1f6966ee654005032a2f385a422013016209d50885fdff868911bb004898782159856c10f8273de4709321a9778099b7bde126490c9db005c7d2b11b7792123b581ee61489d5935027397d405b1c9da8553c4782b9c79882a8c8918c992b7d712d9a3189ef9c6f40c470fd2ec6daefab0be969a9dfe627721b63248f1d2ee7e091a0305043ea627b1e02ecf9325e6e1c84b0fff229c1b1c954597037c426b84601999dcbf2603d519b319c568f3271c5db30f23418a83d77a840783f5f6570a7410ba271a6e4e5d51d73d99f6b9e0c81e0ebbc08389dc761a21be86a78ab3958683a6334ef3586502435b77528f0610ebe235427b9e69cf69a9549a27677dc430643dc546e654dea0ec1e482191aa8a6934e0c81dcf595b153f6c441e212c1892259986774e317217ff6cd50c4fc7e8ea4db6ba57159ce4e52dc081c32c61d37c1c63c780e9f54e106f0bbfbcef91d4e14fa14d7ecf423006f4df0048cba03f1aa5c1f8e6151e1c052b6e95fd86e4197365e603a4ddf093f5cc4a57495b3a10106b61b46dd5aac688fa1708e3a5cbcfc3926d613ad7b8b346c2336bfa63bd988b8df60738e7460a9f7fccb1f8cd353295ec6049a0b78734f412099e9c45a5d62a7c278c478b1e5d2fa94ac5b471b2260e1ba54334c2f800b9efb5b078ccae274384afeac2d0082050d0be4b8ddfc54ce489ab093f109a20004ecf7c22ec5b593d3b86af9918dbb66c979a7d490ae8de820ded39d1c92f08509745c8c938f3e35f44ed0b2798103420e939ff7de0cb8ec13848dffc1ae0014c867427e485e614a6f009b31548ac8f7ce0126b947b6cc44dc8f7ac4bd0ebefda45104d37b46eaabc29c92ce3f250a6e24efdfabb6c8cb653e487092c00f6443f3f5966e7415f150b1152195c8494b61cc1a28bca072cc11fbccfe836f3792358e84147dc9ed9599ae54599559b3abac96a7c59d1ac0b5c06d5147040015dd33f4f23f598a11f8a3247028c4f2bfdbfdbf6aeb59633f5c062b4c7a95ec2916c1a9a34386cdd3fdfba21319048acda2bb826ddb65ff364244c0ccb8368396471ddc0c6ea97979ecf5eb9075b819d06c53a439bbdd60812aff0a0b764b8cedb3a0ec0441f70216d40ec576e988533d91c781b40631a88036e22f602955e54a624706beb4e0822702c05be85a78ce8d5b38f6b685efafa672125ecd707b5e290c33c653992c9cd760387908e8820e20af518ee894a1df464cb0e80b4f362864eb67911b7d7d514f8bf15bb9481f511b395b99a31c2ba9543126fc5c68e13ba86b25e65c85091c52339235f4dcad3bfffde7dcd4352723396d0068052ed16ad54960e1f84cb7fb0086a2db2d28e90f195e601978172e4f835617566e072d638f9c4b3e742b26e462816f1e75e5abae83b9f8be67437c5313c7194b028a177301bbba8bee946514e1d5b5dc4bd7e01378c8c388ec313fb327cf372d5ee193edf58b76ed3593274622dca5a0b60838812e3d4e411a4eca4c9af927df6c4df68431b68c505b1cca965c1a794d76d3c8278eabd8f19dc8e3d96a5036f5141e19f56cac741e2afe34c45b73371dd5a555c81ee6d42fcaef2d587388b2b8135ac71aea71350938d94bc5c4cf81676df22c8c296485d772ac3c9705568521f159a444d49f48a0125d04081e00ae5e4763e68a894bceb3785d4f2f7b5eae9ffe0e096fd77fb10e70075ea08afb657df5f246ad6f9a0b134a46e4c082a992dd151306b0b342f9199602a30a78dfac81d344bc2c34f9606a92f9f5e0f5b595b354e7dc4935a4b46904bae400a84e12334e803f3f17c6263798276bed97a19d3c8ac72538b0934b747d9f439173587eb515f6e2bdef456813d529590da861272adf61a61975b371eb3fe6c6ebe0ba97d8673537c85ee21ab6253bc90963fc23a35b93af0bf4940f677a5555a0743efdcb7ac038408f524f6941f6016d4fa18dbc5ac004f59d171d2b876fc6cf237b9c4d249a59a4f13c34116dd5d88aa4990d0f8f4fb254253e5f7e6946b0c5cce22602f2327e935d48f79d3b95470bccad4adccd1e29004a9479817d0342fe84a55b99fb8baa18d795e0f903bfd4875da98bda965fbc3bb837e446ad4dca4a04a5ea9606dfd822536e62717f3e32d74e9dd763c590d5a311d0d8a765d7ca036bf9f17976d490c78e7b5f838830899bd01cd1fd4f927e1726ba9cdaafe64e8581b70efd6891b8b9d1924f840707de7c11592bb1413f3132d5ce96d762c5bcd3a311c3d8c372b1ab10acd562996e363efae2e73a2bf50d63d990d2ff45133fc8ec5784370b7dea423cb4487cdd6448270e1c1841590d4c37a7c9f5ee7c287b1dd836a2ddb7d0ff34ff04601076b61a03a2838e7a48d5b1b256d3c455638091f71eefff4873667317f18919b127eba329e9cd4e29ca40047ec81507220a6bb16b4c2370d3c8e4badab9454c6b44af106c5f96b8686e05aa09f245f44d15efa12ab2212d7e5b010fdf20086b754594ae445d726c2ce3ba7a0682751ff0d1a5d9410f1d822a8fc99c887dff2b079b31b38cc29988d72bfab90d2fbe6ebb34c8736bd460b4c079fc351893fefb090fa3cc5a08c2bcf9de96a32c890e376e8971c326b406fe71fea214b3a18f4ea767600485c0b6eb7df2421b63427b143b01e442b530cff399b4f8a0b6379ae6247998761530be82eac16d7d01cabeb94b9e555b79b08c9a13c3726df07b15cdd53a654a353e600c5cae1d38cb8a954a371f58463613c039c34930fe335a20243cac6bc7bc3874dd260677fc0202ef389c3a14675e870e0fe450df42b09f2ccab4404e3c51e2c031bc2356a2a68a4615373bfd4e55c17016708989c34600ee261b107d6991ebd43cf2b01124d4a5eb48c34fc8ff7a36f50f9e81d218f2ca9e3062820b68f70ad6137e7ab401f63ff983acb31384e81086fabf40d617adbd436f08c6c3f5885d667a38249be329d0acc204db4bc6d6bdf19199cb8d7118e053dfab0f64980a33a43a0066d0604bea61bc4b41779a7618d273c0a8860425593bc10d9a0538b10602810db8730d6a78ba05c05b67f630b3779fd712a2b71e4f2e3fe336bc8208d1b2d0425664f8275e570a8ae0768cee94dc4544b3ab10e53cd2eeef149de8f7bd620cf0993cbba855a95d4d5ec121bf7bc5124fa4936e7e8b2aa454b2362fbcab2d2094d0ec8e7acf8402d208ea2ff59930d593c16d512b59b37f1751bedb2b0e19ce7de4bba0c30b5043eae0e80f8c414d9148094079d1c26152f57405f3a346f55059c83b8bb3dab85c0a9c544d4a0c5f849792b337f93e7c2a04a077627ed066619623c0f9e9a93829d3c2c905e744ec067ea88c7845644377d68256407ea3a71a7807247699296b9d0540ccdca966021a032cd73c0a42cc9732d9e5d3d558b93dd40a6244d188c3b839a1cdd7fc17a929f8a7ec114c5044a219b7a6bbe4b1be964d94423db88222a00e8e1ec4d68dc4ff961983a1a47ab95bf19cc1d24619ccd197a94b1fee6c33a56b6c10bede2c43da4cccd566d8eda027e3ab037978775126ea74854eebd2b2e8025d4cd784e17d7c08345c2957ff8004fb1dd22e26fd38b06cda097fbfa7bcd56ffb9ab428e38b522fa8b0542dcd76f003228cf32315673ec1c0810847186c2937f6076560a74f8cd87a1b1b0afecfc38acc1f09c084c488764b2366a1f33e600b9815e950d44a17c722fa6d655d95597368a55cde5d0c87b4502e1dc375a570911b418f463e91ce5a81d1654fbe78e31cade2d50c57be070f9742cb1cd4addcfe23ab0bb2acea917b562b319968ff0ed29b08c89a5bdf3afb279526959e85d5ec46fbf00fe24745df65b9d4f8992e85fd1d4cdcf701ef041cf05f45d3c792c07ff41a37a08f0aee817fdc44422f3be3d9c233d62a0a545a69e27cffc1f78735cc6129bec59e4a857e0ee613ea7df05220d3fb551c3f16a7f7a1977143faafe0a8de476e8caa66a683f6e72740074d0597036037563d4b6c5fbd7205f9bdda25455810990344f6100f44ddb7794bfa6bbd9e57cf9e8c05e53fa68241c0ef5f5730d3fa2f070464c81ba9aefe41dd0655f110e01c623380cf753d2bf7ca754556d11f21411c81acb456fcc54ec40f84dcff9b135b05df0446dda3c64512b896e8a6a884a6791562e611ff985fee8f4a64ee4fea3ee03b657a40c977e413e3f61a0ff940250d41b99120c1c5f681ca0615f3e77f76f066e213d9e8f8db406b107563f9d17ad8ff9a819cb9f05b37260e07b0d2a9d42cdc2c79fa5dcac1b20bb8e34bffdcee4ed6b8adcd50ce48467ab40f9b6876fc93f1e37136a3bd963e70d8c6fed04aedfe96becac237185562ba0e4b45315ff83ac25d77c9cd64d8fdf4756e84c003b930e9b3e5e7951d59537aa741f021018102ab11e131444eacadf48e55113d96d4305eec5a29c4a08b7771acf7a7c03694ebe06ad710d2a58d05bc6bdaa5124abd8bb185e8924f93fd62258aeadba682d521fed253bc24881c9e65dda063bf1f23f2b7b3d0aed799db69b3af4bd735db30eb7bb18ff5af40f032b1c5494634acf06d9776b05fd867378660318a5512d5bf3a0d58802b59e2f55278bffe8269f39c459b26249d981c558ba3e6314e9e4dd8ef952b0dc571077f32e8f085807634ff23cdda3893b1ab8191158c87734fdbbc7ed8491258c9a8f1857f588eb9b0b62400b598565afc40fde1e56c64dc34ff8fa4ec4945af1f8df37d8ced85ee13d189fd2352329df84eb8c41945f92fdbb0958f7e6f98e35bee4288267895890f18ac07b765c4ffeedd5c4672201bbaa52db715dc3f106a22e57ee98fb84080d084a0ac7ad3adaa195f8baa66034aa709bc5d76b39b4df57b3339d6158989c5df102c4e387bfbf5ad476b27f7310de470d696abfd9f5aee4382814e449fea89167760d9cc7ec66294d20855a172dc247fcf58e3f0f8d0caa4aebcf0c14c7e90dfabeb1c648332c5e6baabd9b43181846103b8345720af7045ef4ff3a18d6af4e22dcf17720906cb7a4f26df3bdce71bfd483f52df1ab3395f04d9601ef365a050e401e0d3597a647362debbc1834a379912e6dd5c922b41fcebe2f2ed5a0933f8253d3e783640478befa3fd6348c22c4d45c08c5f2f1c65f601cc01dd15f60ebc9e789f7d79bcccdb5c66301b48629d5e6cae6b0c48b8d8f95a6a828138ba58f702aea141ad9eb8f6d93ea64e0b38fda1d4fb8ddf5292e6f78756396c5dda162515699134bff8ac1e764cbb674b991a778750ffa662715fd311a0b5d27e6bfe70434cc99aa581405c3c084236c8a706f669f4665f61a293d30c9f2f4fe89579a8d5fb618b683670637355ebb2825aea54ce201f59617d4c91588938c8d5757d8f31e8bd21f207f9f58a8accc1859de5725b052b223973098fa2bbc0a9032e6fbd70f68fc0f3a79c2c0137351b2d49b2933468112088a5053abec0fd2340aa4e9b21b2d01a879c35000c68bb63d8783184c483718dbdd59f82c6f1ddba778a6da52f4c1caaa2fa530e254e0b2c78e10798e412079f98e0051a185d24d186e7e57d0565cf88c6acd54c5da97060e410139461d7d8d0212e71bc47e54e1d18742b5ece7dd0298f91cb4775cb1df5bac2d6fb0863a10c08b039b7213499b4d36a4341c6ea55ad0c04917be77b73245078854cc074f928744f938ed1a7d80604e80e67903e992b8a98a5a8af32f77f00da3b0353ddf061956a2d214852251fdc12e9a0d899c3ba6d0cd24f3ac20cdc78d49dfc9561c4e3b9f801f449526d5b8449939435562ef856fca00e4a5d382e3f8609383d4e56783ddef8db5d4e90248bf55229822d3827671b1e859278e845471cde893db152488b100460155f59091444f706676e3530c813ae89e4e8d1040a4c547b1fc794d39ef8825d6ec0054f0a2d69f45096ad62b260b3e9e9a7d4e039372c3d07460e8eb7d7376fb48daa91a2582641f7f7494cb5dee69def87cfe7750c229870d3b038a39f13d3251767ae6586076ca7d5834d712fab70a81c8c8eb52d0b8e13331949addb12e37270b7c196e01532d99adffe1c16f3de7c728fcdae8f9083bcef99fa40401615a73371224937d417140a417d442ac458baf435a02eaa8560c8ef3a6ff8c224aa092a49e3a1f46f5423dac0518be427f50f4553c435eb621b85ba44adf8794f29d3e7efd9b661cd464d213c2d12ee49bc6c9d30e006f8de4426525d145694ff997f1fd8ff0d39e8fc9d844f9da2cefe077502e7bf3732b161f157f1e998c9688ceb26611f3258712653439ab9f96d4819b9e82e15670a7218c6e44b6b4a4155b789d20fd49bab5f5911a2397fe444df62453de29c533a123fe2e7218ecea3361f344625796df60cc19cee827b8c0cca904b60b47dda598b36ff477430c9d9a1acacf7720c9584caffcb0436c175cd06a7e5975f3c99714975faa5f6df5a86ca49abaf48e06f523b4e8b2c69da1a9567a94011a5e85202468397fa62c8cc93754bf43a82cc45579d3525a6d4bba24bffc39cafa32f015e47a2dfa45e997242c3970ca90b7e27e1ba75cac78992a47015921e6837258d8691670f91076730f7396429f8c40a62781b1ee3a6071b2b07e842b00885e588623efa034f54b1a619e4e331ad2422fc108c53f48b2fa9b5e2c9b6ed10b9ecb6d7e46000933f5041445a29b32f4e7c2b949f27c0fda3a6980c5d80d8b7b63e6d151eb36cf4146bd392f14dbfa292a9ee096a16bfa3779992e5dee7fc9b3b032138cc3f85739c11b357375d9dee586adad94c80abe2da1744272387d54556884f84d3ffdd3ce752763a055d5c32515f2d207797b17b4883bdc054d52650bf34e0ffd9966a03d7161b857fbd875b6d90c8b14a21bafd4b8244a29043923686356a109ff2fcd56494a28b102fa822e91f73d87a1cf9f81514cc9b6dd91ac3b5c1a0346458f6cc36f9c0038d360e3585acdfeb381bc1f64f6296d3860a5363019280727e6709d6c1ae3ddff10fc2d40bc5932302430381b371a7600af0202ae635d5b8626c6f76443a80c3cbf923fe2fc355bdf92bfd9d68e5b75e4a1e074e43edda7c2c222a0a13ba9751edc91b15b49508d07986c57e806d4acee2c9911b0031ec072f7b3440e7787801e29836551a3b4b3ba32e49ab97732192ae5a92e439cc4434aee03120bb0f3a419ed985b7cf326009447067ad150974b7d82679334b6432d11bf1617b9fec46da0a907234f771d027087e01d42ea33fce63767751de96816c6fb51644795d76400026a251e82102434871b17ae5061948af7c0544da45d0e07362a928558305d7018fd2d12e22b1897992423a66d447f4693471b8eef075652f863247b5c80d21f56ee361b7ea32f1880e804f81c37622ea070f923ca83d3d1a957574879aca6ca4a3575e0a5641e5163615077e968b13a801e00f11055ab073160da7c09d83abcd3bfe4c530ab42d975179f65d22d6a8665a5b867831acaf36e775cfd46b32702f42a207b05502b6a0e189b433d17af597a252e71a994bb435718c39d011a218e5228ed5f7c302b8167c39fae457036b49d2de97db45161d9b7d722420d5bb47df379cd30f292a337d54d34dcf5a3a227427370e11753c161547d92a46f19a7684a2177046c1ea150c47ac5135476ccccac5988bb4fdaea710a30f8ef3df17ee866f14d20b6549803e225474b7273e7216f4d716138c83deadc1647a9091b5f3c89a4b89d77ef503c6b9a8d83a52ac40eebb4924ebcfbd3290934eed5d81a8eecb2ca75ea6befb68c5ca28353e02150420bbd17f5d417a57bd678ce4f09a7043a4243559dc46eb9097b9320cdb213e4cec6cbf64c8b89ddcaf84d1e3edcf4456aa1c6e05ae1b2fb4e1647640d14c0d49380a2503e937947bb419ca849081cb0609cf719221c7c38c5bdac35926bf34b28e32082eb4a975f7cd8c115210e1b76a4383612a91285eb286ecf4dd4de0861a729526181ca55308286b8c0c27621997377c74ecd1b3c0185e48a9615d32b675889c1aeac788e053e40ef6e62f1c8e8185f07c76d34d624e9d8b562e4346ce661f907b713de76d9acca5a1a20cc1bb3f7808bfd022f05532dbb8c8a8114236d983ea7e037c4c37abb2b51ac2a7960ec88951e41dd9a8e5a7713ea150cab79605a778bb2140362a0b61ef04688ead5f562e111edb6f7f2982791c5aeb1addec696b0ec94ce703aa8a0cc8c98ae7f1a6f10fae872adb7c52e6bf918db4c3a8ed08cbcdc8063360d60606f012d4a365974496828b573e52e4f919228d1aae7596929ddc10c9d8b58938768fe9840827286d26013590c4f4e233d804b5d02e29792cfc64748060942e5e4da6edd2d1fe05f0fccedf61abd2bbaeff891947efd0d33051487e5876749211a9bbdb2b9b60f764c2970740d1587ef268499a8734561b9e01ea2c7f3c41ce38a9dc44514af2552496b21022031c8c2e1f410877e1f2ef13765d3464d18d8988632e08541d3f8118b9a328c7bb13ea263fa367d4bcb1d9cabb4b8c7a1b5e042520a5290399bf9010dddb4aba8edb39a7b83b4bad9de675a1e6c136c07df59ad820a903613c42d8287d06be52835fec0693658918dd63ecd82e8bfc33f7113b63908d8f576c31fbddb9a2243fb08770c1f7378435c124d0c5f84fb3c99e974e5f9efca161ea888af7630c29dd9d433bfb7a3c3b5964d4a361588f612a825217adee8ca0cd8bee505e978298c8be1152841e70a5c2bb83b829b8254c5bfd02780481cf6d2848a9d3488ea40a26d96eab1664dd07805eeacc35a23038e9dcc984fe381b46b2619c211368f6513fd1b5d644d5ee9a04fa8f71dd99b461c82590e3de4e25d37b61f02b9daf3db70c207fd1d2de3896d644821bfe7ca94ba4b0fd1227b90a9937001124b64e24913fdbe6fa3d88faa59d924fc7c7e241be5f2224bd176dcc53817ab8ec82a93456eacd9e356753af2added62098abbb28df1471a5515f94416110ea13fd23cdfb5d4fc3a7318f317497a56c32376a92326351b2b3ed92356561897f7943a77c57bfe928c06a50ec5afd83ec671cf52277478fa6d47507bed25de89104f1d932fb2a9ae87d0db160345dd1b4894bf1e7172a59e50c93552ab06d50247ea65082fdfb37eefa491be6031057cfd5c4d6ee6a476f956e6abfc7ab6658f4a2134da1227005f208cfc74a58b09526e023efd092da3bb8ec2c67139d091b9d554473ce88a35b9780d66dc783d2705e6f61ae3055bd7624e5f1fe48d7aa95dbd0c2f0d04f394da338266afe17dee72d58d60525fd620f4a537098873eff0a8cc47bf5c98b878e4e78852e3fc2657795a01239be79968bb0ad54a754483f31ea1a9099b156e24b48320e5eed43144f279c6640cd336a42c58839c8b928b38f20da61502a8a76533e4308acf146142528ca114490a985918242249634576fab83909cf0bd03e5fca4916a8f4a90c97c7552cf9e2c556b04cc9d8ddb5bfb01ff5664ef6d9cd5ad54f5d0746544ba4f50bdf0a06fd0158f41f79178f6e1e5cb23f54688af49c3f826730bc097030277b5cf279cf5c4b773360b9db995e731ffad683412bcd19eb603c4830edff6c8611723ad92c466e34df198617305adb39dce279493f795ca74b9a9ba22f1a027642dd10fc4031090b59b0d12a4fcbc80b29122789b16468002b52c7c27dc36e29ce3ad1dffc53fb534addedd10411781b9c3e42ff6397075b8b42f303bb57249ac28015edb83af8efd26238e168713b523d6279dbed27e39e39484f87fb924a51c914887b4c5681543bbf3270e0be298df15d1df48ba051bce2b5571dcf41b9e69b0b51872388e2b73b5d03e83e2505b92afb232afd737bb969eb7cced35995ccec1b97eb56f4c818c28c269cc99b72e3a5bea9cad3d50635ab074c210ca88fe7e899683720157e53140690ddc547445cfa6c2baf4910f7601596f6651148dca93bd2d9d3170332bada2accdfbc55c883814578dbfd9fd9a0c5d4f016d6981a32bcb71a3ec86e766cecbe1a472e2ab19edb0e39a20da07cacb99be3af986bda566b6313fa60c3a0f5656e66ec4607dfeec71236c1b7a481bce39458d7db44eb4038f6f43bd30b761decbed5f3f9f5adce6e7d8df37bdec44efeb5d9d65d67fee4fda83c5f7a0fbe81e86970173b48c968c6bf7a8ebef7b8d8c75956fc54d7c212a99c90613b83ac33a5b81014fe4900620a2cfb345e84240d73e09e64ef3669c001dada3f207f0be9c71a329125fb213160ff72e8daf661d78c3cb2793d4e97e88b33db5ba2decd3e5b501e44398c2839cd891f05d4801ae8ef4d5f67a2f4f32062619abf3f77809e0d4e4bb5622c935b2ac30f652cf3d277eaa7c19aa926e46eda7f67e650f986f168bf2571289f79646d8d68598db00e51671f48670d272ab79dea30103672491d5bc0dd90ae006a0d461d3dbd195195d8267ec6ca06ef6756a4dd51efb09210dbcd80a81eebf71057e3b7ffffe67561fda4b98a4a9a718a59fa1f07e7082c11d2f68085fa82749ba2a328f1de02e078545fc306c7696aa58dd25b3d20026a46e1d8f52868d2147019f811b447e099c926e7feb9cac3058692061ec6a704e956f6db5f84dced3640c14607bff886eb4db99c0c0a343d257fe7cc0a0b0c4d7f0a08cc35e1f8f391ecc0e183bfd9922a852428c31549f8970bd62347c277347657a6d8d8f01f5ac9ebec4b34699e4b6824b8f078ead60a66c2dbe50cf8f63db24e2b7b4518f12f25d3323ca42aa0ea527edf67d4519ed1a1eaf2ac68dc83cc00678e2a6cb3aea0ec27170155b716936ed8f508ecaeebf64d260eaef35ef82d1ca191ee42069703c74104b904dddcebdc8bbdd5aad77700a14334994476fa37cc3a1e45d0f79d6bf450886e5f73a9c12991de0644829f6a01a436cb7f87f1e0a5519410f80d3fccbfca3d76a0e3ff3089168dda0f368eee8c01e1465ae7e540a5cb43199f4342d83103dbd0e01e7d0227f10a9fe5e1dc070d0b5ed2077fadc2b60b8aa183657154d623730d4bc49834390cd6e813da8d9c00cb75d6f9445779100604bc74f04f04c8b516392369e5607505633301c6ccfc4adb7bbfc742f2cc8b6d6afa9bfa8c883daa35a8105df4c055834f6062e43496c53b1f0246c41bba89068a2edc53ac8b6c72b8e2c7e411932364a70e8f3d1fe3c826c0d1aa3c5cb524bce927fdebc7fe9800f70efdf59398c67b3599feff21b0bb2f8fa03fad401db48c82a360ce31a2247f13b434853d92e659194cbeab1851ec2b7999efbbe152ae6469e50ad26e98c0717371793b65181b56b749f3de8f03086d4d736a796cf0b6c9e044ca917408af64b3d9c430adfe94d15664e710ddcf0eb6ae4c49b58b44e5b32e0205622654db92b4098821593f15c0b7ded27981ee3f9113c342265693dcf7566db2bfba216426db2401de7764c2e9d06095deec280c2b429e9cd009927b0867fdcc7382c0f2c2eb404513367dd7a28bb62c222765a0f4058c4e7cb4bf90bbe60c8a0e9432a868b777ded3d7cb018040b2ef687f5baf931f545de19ab4deea0a6e932318388b6bcb8745a6c1c920d726ed921fc5bd6a136a0675f982361965a8152bc27f164eee0f630ae787aa6ac673b5d02e64c88b99f2a689bb379143c9c22070c55a6221aa28f3f5965b96ebbb8337cfc5336447a5b416188ac137a5c873104bb7c2c22b41181914f266d48b9b0073a9a1065aebf0a9e2e811cbee86cd6cbc76a7ac6d0c534d98da1b6eedcc0d25b02f12e3986fed5eeb33093f0fdfa88459cc343eedc9bfcdd47fd95678d7504a54c923c0ad16d48a90fa55bae2d1fd3a1d937d5de0bbfe2ef9eda28b8da875df4e04de887be1d83f94368a5525b3e0b890b6142aae45baeb2ef5a3e85d63c611f3c0ebabba04e55357de4206601ca9ea9ba239919dff4de518d905734abc54b995c4d08ebbbab80d388118a1aff2be8c9c60b18103df76c995a6a9508b637e8206078ac97efa7c11fc379817f7ce3bd5a24202ad81be1a49a26a3a739aac45897af1436947a54063996d3e539e3f320089cd8fe711c824670a89e2e51b6b87a471e490f21157ada322b3d9974b67baf8ffb20a7f7a778cfb87a603d94d4b0bb04c9d10003e4171f648c4fc540dfecc6fda1ec61a28078c4943373b7a94911b554b266721fe2c233dd7c6bc583bc71b4ed02d228f102a602de27e5c5b4256ce797a8f28a12fd7076ec52874614e6a7523883f04ceed876f193f42446cfa236eabe504ca83ebbeff01f9fb4a58a9260da7fcead3bddf5058482128f3f35529a0a100ecabd3f988384ca4b01895927111a1636f9d83e62ee2be21cb65be884375e75750dd9ca0eb3518d7b1601d60dc03ea0f8029828c418d1fb0a48020f89690c2f5e581986262c2c350cde34682876ee38cc17eea155a0882e22d1898e88352278a132370368240062184a8a2513b041c178346bba8839dd9d4c4cfc9bec548002edcecf33d5085ba7ca09a096b009191f17410da743dbf245e7703328ee681d02d95afc1870eb7c725b5badc66ccdefe2288bbd43836e6183a4e3c71288e6efd1d8d73c0a0030b98886b68782a9db129d1a91fa8a04ce12b7d2f522a82a970f11895fb252d130b760938b511cdc7982606ca0234f809d6630cb36bd795e49a9f82799a0551c378d7001b8a7943e5d111b6d585cd685c95035c1939bc2a9dd0a124549a3a78d9d9f26259ff6824e96d5920fd3e390a48f5c43f7b123594a50df4174af297b3a025802c13ace11b2adbc2ea50ca49db56de5711c15a9b74676e345678ad64035eb88444408f5396512727b403fc039d16fdd9371832398554cf8fb5e1bb9cccacd7e643aec7a02353a279f3434a89a9666be0ffeb75edf7cc2e717a0d4e1c5762d5ae5437861444a3384c0315b475787166728a838cfb41fc06c14566177732e4323290a120c191d44b0a2cbd4b65f9af533255c27b4d354d93ea5c8948a9823017922ac08f716b06541d12cab547d8ae521d9fb080e9168586a471ca506f09b74e41277d4bb30021e67aca5e740671e541d4d750b80e16498621f0c08a87812b8ad34712efa8421f7c0455862dcea12a755d2994f07bba1f74ad6430b119fbda8fb526906b88c61931360ff6181dce6672b066b4d0efaa4282308726582a8a34e34307f0c9b6b74866eabd25013c287611dc3da03dbe14eee764169b99d5c6c67666d63cc3375eb5925ff22944192c53f51bad9ee611d5ff53c1d52037081a20a0a06cd55b0ff04bf7d16d4272e2ca9eaa5f59dd10264eb916e412ea6a91d69e0f4226e64005a96b8a73aaf710f7647f22e5c3c7827170f4c99de64d5f36dc510a251de0f7f0195fadc42fbb3009cc2e9a7a6298ea466e6e8912662ac411e502f3d44c0c530cfea5773c9391b11199c573d291beb2cde4936050f458826224f553da5a834efba538140be2c859c1a75e7f8d0d5085098cbdb8053038ee70842adf2e91866b8e73b142be759e4fac096e91758680cb22bee049c103b68fd9790e06b7e8c28d12d6c0bb52faff3a53527ba4397989e0dba7106f68f144cc8c1881077a032e85afdd283784c6039fa7a1f201116c93d31b747ea68de8fe1762710b46ecf01ce9d2dcc0e940644c4fbec1b953fd142ac62cd1c25d0e7e9f82249c4dc1f898580543dadf747c1fc26907c33ad22ab4e91b893af8d1afaf5b71c3d6d9f16c805731acbf89e6f3e05d99fa997ff43d094ad152d6a72b35e5f87482d12916cc0d0925496b4bddbb9f10ce35dcec32a503ab1eb11bc0e88418166c8a344af998a2ea2d48080c1e8f34115a09f543adb148d402cf576b5d4dd9fb55835d2f34673fc37eed6f067612b989e00a45582a5ecf00e2b17e901fc42081e47272d2067d34cc695389bbab8f28b3acce6b1f58f05bc87d6592b7fbff06c361652eeb0e771db51c3b082757d2dae46685951608ae67f1d7da574aa4f62c3ebc9949bb7dabbebbf3773a215554dcd08a56cc165de607c6aaba19fa68b0925a4f25ada0fdb61f807d43f4f3616695269466973304acb92ce51537eace3f8a5e509cfbdfddec5f934a905f4c9f4dee9b6159fe03bd9ad503bcac0a824bfef349f2cfcdd8869694ea07062b8efecbc7168e2ef8383dbc078c4da91943d2a50071f16d077d1e78878f9fb59089879537b42ba83e1f6ea30a3c52fd2a15ef5adeedb2718b9f4e94a32f95e2e3eddc5d85d9cad2756661c3c4463dff038d49c446020e35629a2c4d50e44a51e18b8f822f28d94c62ce02c60dbfffd741838195ffdfdde22a9a1dfa74d70bac888d55ad5c5ed29c5c1bc47801af5c1b53047d96f85f1d230162ed47540e56afb3cae0363158807ee3f8c83c9239c68b031a56531d4484aa4af295ea7383b0c2a08435f99412ae07f13ca5845142a71e2f6f365f737a4890ee0ccf8172db519f847e729143da411777223dd7dfeec8b1c04837b7e70c350d3d4f0ca6e88217ce212d2414e4937e0d1017d97a882e027a6625983611439f95706ca46f3d44fa55e52731930c83895814d0e67f44401e42bccd464f64611070eb39b9eb6eed254876a683953d579af41c887d904b2708f858a02b7438f4bf98e059debb2fabece36e1d61bdce2443cdba770c989449e8dc7a70613da5db62ea5f2ca160e1624227e4f962425b90304255e17f26a3f85e340ef2984024464ffa857b668bdbda03b226812cc04027c34a845d047545ad0a9b96303ce67b98604b26ffc65fdeabf24ce93c1bf20971a153109e1908ed862ccd3775a340928d45cab4e61d2daf7ce1ec22a5671f7b1d8780c0b2e31c0e727c8a75fd367c052cda11ffe4ef8df40ac88c22c8134b55ebcbd3d9b112dee2570bc63a61ea97a7c56adf542435f9dd3ce488c2e17390fe8a6b330ab00313a7ffa3b3086d0d6c0215cfbc7d202b594b9eac578ebc201119a330e55a0fa36665161bc310216343ea2c97dacee698d631a2a548fecd943606aa2bd02006d2a6e61ab44250d63f0c36fac549417ad143d2f2bbd029b4dbd984c2f7aee4408e127f61c4c5d76ec92eddb8f4db97013dd2f6d1ae6ec4985e4a5fe70eba9620fc9f2561d0cc218aed2f420137d28121a6604a516fe9c6630140f2721474cd1016bb048829e071f41f087a7247f7e2beee9bb6064ba1bd0a1dd7ec37c81b3a5d09bbbba8033de797db36770a9b8ca14523ad85833d6596007b8badf9279440b034a8a8c3af620c61334daa7df16c860e12f43eff14b434008f1db6c6fea3837d8a07c9fd823855b33eff51b5052a876b15042a930df7f0a5191b25b6ff1a086b05a9c241cf8deafc078e1fa08aab6ce3023c67d95f8bee077dcabbfae36c254dbb656f6b0fc0065a7f171eccdf231d59cb783f6eee38006872c5ecc3e255218bac02b732f12874297f368909a43004fc896b5b64f0c301157a8b8c33043ca4154c706105d2dbed6eb482ad1b04d4542bb094a8248c55eb1c062cad221921ca45457318b32b92541496501ceb286d15ae7c2c720a12056c0434bbb350b8313f5740ba8232c1bc331aa9b419ef00895b26877471ab5752f9dca6ae4d6f68d415c1e5e8ab69c95709fd7767cb27c7cbb75980450ae07459ffeb024609314b0acabbd51d1c326d38999bef5a76c33a58662d386b8103f25d754a1b5a291a01c395227f42dc7a6be1c0d75eacc2429c3a83cd0c4d0cb3d5f333ab17292f173412ab438df35a339ffad1d1a0ac1156341afabb50c627f1655165e542354b8c6679d1d10a3980951063b68c5c26218fd0eb1d0cd2c477d3f127dbb2e5cf16568d23d2ba71837d601c4a449f9dc020d8fa80092319006d5fd88fe0a2186f2548e20bbcf0f2f9b1db61ece9d99fdc65e6868502e6051de68a3c7551d3f0df14371477147c93b909f3a1c468550b32c3ce6c2c05ab82aec19f27e6cb472411c1fd48583fcaadcb1465162e7e080d49f03919a3d8085e528fe85f790d56483042625382a6b3fdaecf8ed8bea2e239311a97193a410ea10c92f3d0e99291a9797e90c810edf89983b80d1e28a5a685c7d692534c455a90a14275ab35e5ecaa2a49f62fed20f574a1f3177b7b3a4ca0147eeaf4573b5154c32014a418818128019f926612359df170c04b6e34db217f646331920d79d3cd5a15eb817b6197d08177c8526cbadd44016a0ce5891a36376eabd9888818271aea283684a194cf6d7b951cf58d2dd20e469a29d14111aad0a50276842b7e8f64e97d04352449684e926e9d048e02a7415320438005aa1a2d0bf5d96e170be8668b85c232553625929e4a550805157443b0559e0266c6a878c563c9eb7c161b74c20358aa288d9a0219022cd0d5ba76b2082e1d3c1ccec4f6c03aa98c9789a36931eb62b19194c830d6dd62625db8385d859407fa5c57bc43df4617d86e130b7561742ca2d0c8afdd67c77ae155a93c1e5349b10c0914ea2aa43cd01f2a6e4fe645c1286d44240a9e9e4ef1eb41bd9c6c8e2aa781dd31ea5e31977f4e124595d3a0299021ac9bc742ddb8207a4d3cb3dd401728d911e30145bc505c1f4b924641d39029be0ed69f934751e17449cd51e549b9b03750a0aae76df008220ddf05a37591b06828038a30a46623c4b41249957c3eaa169c29a60c338494887d1b5d182ee4484ecc4d08b35d908e5c9b36021a053360f43db248db77c502d7352d16d68d8dd18580fa49b294d622e8929b6b5267e9401746a1c5c3e25c48b0362c2dd49d9288f47c1788864780a3c0ac5c2fac87270969fd2e1cc58881d605fa6c97c74453baba585794e8de515cbd0d1e41a4e948aaec48d4b5526ba15934c0ab87f590a45894340d998218e21da3ce781b3d72546c506a2813dba8cd8aa1f5c3e84da498c6e9c4057843c962103956673495e8e0850ec250cbb9e1b176655ff0180c4f77edbaa1ba083217d8badc0a75a8baf68ec4be4de35ddd53186a52cb0f3098cc0dda214d62a1e83d1f544da553cabcd671cb433573b282778a716dacb7886d39d8bd2e15e24a50a1d478b6a38d7491e8c49b9d2aca524b3a96a7156a1ed50c1d1bc3448dc1caf61301ecc7012a17f5385f60ce1d3707c650dfed44e44e3ac33510bff081d5c1baeb829d0f9ebff2680bb3cee40ef48f566365df07f8205ed86f46b4935f8ad529475870036df88bd4079fbe06478178833c4fb851728359e276aa539fb3c338592fd9522629654a22773d032103d5032ebe7dfc29f9beefab9f7d2c9f524a29adb5d65aadb5d6daffffffebe3eeeefe19b65dbd7517f316c993727a6114d167f41f10044110eca8386f984a2693d9643ee1ac3c735efcdfa1846118d2b834a85803e693c12e5a65d751a65229b0090882e0e9f16def7c745d57aa0101fbd7a948452a522a622a56fbd729a594d25a6badd55a6bad9df7de7b2fc8f2c92c1fccf2b9b6de62626262622e13b0e63ad0f2398d2ae6e89ea3be25606a042bd8755dd7755626cde4317d4c20544a1061306b64b5ec8c30d809d80d19cfb08bce779b6117ad6ee50fbeeddda454a369b57f7d745dd7792769b57fffffffb1adb7d4e9743a9d4eddddddd709988d14e38f9bdcc63bcff33ccfab630541f9444291527aa634c9baaeebba0e4a1886a114455114e56317ad1607fd3e1f33cf68b59f2b589b54b08215ace0ada0cc68b5d75a6badedcdb7542a954aa54ea7d3e984c265076aa1284a16493edcf43ccff3bc3a8e250924472ae12ce9e306281f0a165e210d6b6851c052c0eae8c964dccffc9aa8b792c8e5e6e5789ee779262a564ba58e75ac631d7f7bd3ffffdbadd65a6bc5dbdd7af32d954aa52e01602860de00e4cf443940db5ce8a059e29f344f842291721689784cf141050837ad1ceb066ee607ec682d3bff9a36cafc36b4a10d6d18ca0a56eb4d146c4ee1694cd63359cf643d93f56ad8ed4dff99beada4d12dff4629a594e2cd378a9aa8f9237fe4cf8ffc1900b6a3c9d8b0479819bba8fdfc261a4cdb4a2c2c3060b8b86c7562d746373bc5effbbeefe3667b0a3154e46606590c63f9aff45f8d5722b7ff449f569ae247452a52918a54b46426738d2e02601d5847cf86a696156862cf39a9f8d5fad5af7ef5ab9fb56fb26fb26fb26fb26f0affc30f3ffcf0436e66ebdd6bbd6bbd6bbd6bbd6bbdd17df4d1471f7d0431063188410c62f05fd344a29c6b5f1b57eaac770900b3aa7deb8236d10e34f9a22b01e59af99a259abdc5c902bac589d6f900dd397a732991887ea8626fa51870c652a3a3fa202c4b0ecb23dbdbc8faff87e916efbdf75e6bd4c202ad738b134d47be2db6c905e7e6bb252e71592e251621d7f9f2ee3a295ecf942596b5809a2520af5c1d9681421ac875b6db2576fd59d358d48eeb5205bd5928e13ad38feb512d05f2679266b676405f816c6fef7ecffeffff1f638c31bef7de7bbb5b94a7bdf8c2b7fbffffff69b5dff77d1f0a8542a1f0d5593fbef7ffffffbbbbbb455114452c735b31aed8febf8b08f4ffffdf6432994c6118862108822068d997ffffffeaeeee2ea594525abbb548bdc86432cef3bdf7bec05a7660c4e84000218f36192eeee2d253bab8d06f92668fa46ca7d885ddb10b638c31c6f7de7bef0aa6adf6f1edc618638c71b5efeeee6edb7ec5f7efbdf7628c713bf63ccff3bcd17df4d1471f7d0441100441192e8aa2288af7de7b6f77778fe3388e33308c31c698e2ffcdf2182080f02d51d204fc9628f928153a5291fad01e2a8e64b88830e3c55f5e7aca97976ac939bbdd699d92f6ccae67d875efbdf7d26abfebbaaea375faedbef7deebd7ddddfda5657777b7bb93eebdf75eefeeee7677770fc3300cc3c6b6cd7a2e22d86fc68bcd213989d4539248524ee9dddd2d37cff33c6f767777872e58777777bbbbbb9b4c2693a965c8c82288f0bd2869c2cd4c02472041090da741a3a7a441c322c9d9fe2612687c57239391d4869bb984a731c14d30a1a734c10489c3dddddd64329966bb535aadbbbbcf6fc68c17ec858459a30b3603ab0113fa371980b372cef9c6550256ed4f2a73bc530c40cf24b90d1b3da50d1b445264b15348b15938c4cb3e006e0f37338c3849d3053f21939151b8990360a1d8c0d8952d7983deb8e13d6fdcb0e12459524a593dff886134dccc9909b3462e8042542669b46628e38e5ddf1285160265161dc7b1eb585f13650c06b3402704c00676d9c72395711cc7f1eaeeeec65ba8af142a54e47033b37893b4229391d688858f496ab1f2e42c6b8594e0d81828e548651cc7d1315aed834d401004414c628c31c6ddddddbfa17e63f196169516172f52f0cc1f5fcffeffff31c618e37befbdb7bbbb1bbbaa6de17dc528408c05238ff2680020fb3877157b44510489567c7cfba3ffffff18638cf1bdf7deebeeee9e6ded93713887df5e32b03bb27027006cd6c022cd6c85d4446d68474fd4a3a8b0ebbaaeeba838a5f44ca16205ca36031c1d8f2427be6024ac00d80e759b6117ada7d3e9743a814d4010047d7c6c865db4da8f89c9ed01b2eaccd0541a5fad56ab55adb5d61e463cd58c11194ea070706408267aa2501e3849d060e4c73cd9d4d81e375d83ea233637abd56ab55acdf48c3700881d3be8018922497ea850674862b34267c606c9f9c0030f98a0e007094a403980a382c67952030c71044bece041112910d09b1f130705d50bb2b251a9542a954aa5aa4270e880109afb831c3c133d624077fc9ca9427ee8c0f4a8ce4c1335b6c7cd0cf4e76423abcc78b26d70503b64103d3861441035f8c1740215ea0e0f482b8326d25834cd5a0bfa8fa952a9542a958a96b001aa52a9542adbad56ab15a6410f47c01234988cfc844930a941f5111b954a6557ab0c739d5c054449c202d30b503552a80c3f70764713692c9aa50d1105e504491130508107284d0f3542ac5674062748102147d4f0b6a7ee4063e5c70c6247d30d785467a6c6f6b8e9d56ae54458af79d060c3d4441a8ba6699a967b47c69004c78a0b7818a1c38f2134e009e1552b3bea8c0f121b00b1040e4964d881042032783f6a6ca82a954aa552e130a528d1c50009243a1451859a848cc007bd1264079a0ee4f00313102488f0e9b970889881d61d469ec0d95143ce134210e9e1e109211ab851a13e2124fc40ce951d21010edf103de10b7ec0d92039e02c133d3491c6a269453640821e78e0b33952c525063dac04b1c3ab576c82a0c0f95183e3413440679cf09e68afcaccaf56db6a15c31226c2223270d204a705ab23603cbb4c92762593b24bce573229bb642d3391831920445045c5e3535db1c939c350150d8448fff9314f365eab8f3880c313392461e5881c156c139c0d52c359dbe3466444cf4044a56508ada50a0f22102c1101f161c5a485075a0b15ad94453468eeeeeea2237276b99cc563438a2b65181a0fb40106a21e50a7d41b6024053ed4d08220277062c389e7113273c38343c5f204d14164c4dbc0836b62f5f5390b8c2d4c1204dac23806b39e240064801829d3b2b393c9c4a0c8644e17cb9fff6da26e0a4cc50aec6a6949b578e222ca0b184f62788c183d658c18296bdab468214f2f6048540c102490103c84107aca104290383a739fd80eed961d49ff62de6e1fdf766badb5f6ffff1f638c31bef7de7bdddd9d349d76f6d8adb5d6daffff7f8c31c6b8fefca452a9542ad51828a43dbed75a6badb5eeeeeedddddd524a292528e4282cb66fadb5d6765dd7759d288aa2d8dddd9d4245c5f61f638c31eeeeee76a9d65a6bedffff3fc618637cefbdf782200882524a29e50c6badb5d6babbbb7777773fae2c2c3099e138a5dacaac3c513ebdddb153cf9373fa8d24d758cbce4e0b173098cc253d51fedd304979a22669664b4a69490b460c094208d3264b2bbe59db26676f5b499088a093b0e0349314d14326d1810d4f921f8e72164f921e70252db78842c215123d113d113dd1b05c4758be442ad04a55f43cc3522be128a5d9374c9c249a5bf8d0c02a4e141c07c6ddc0d50b772e38cd3703399a1f1be70fa40f8cf8908decdc7c26b99094d0f013910984b072831f23e3a881ac84e00807668e80e088096a8ee4d010a1893ea0d968a53c02cd0812197276317202ae94615a49119b5a2487192813777777f7161c683d34d5a7c7a7a679504ad8cc161d684578cc1ce1b5c889ab61061976e1fbb677b8acf945e8954365c289ae1377a7b4880bacb5ff8e8bf470a249b254c825e281a788121285cdb4baad196ee636bd08ba2dab8b4041619991209cc808129bc425526259281f1e941273ce6e1e94151e5495223c38d1243571592ea5beae962eb69287b28f2e1d38e49edbb792556aa1b1cc97151385eb9c2275ad20b91c01ee85e67480f28a6cb19022b328619925f75652f15907cef28547540732e3bc84c399050ac5754e9143cbbd955ae84c6570ceaead339c1580e5506ebc65998e7a0514d9b3362ac110b290e5de5e8472679c7df42294afec2f421b0e9caf7c659cb57ce1be724d008acd850e9a6f78d381e5d0a683856f9bb3584166169bb5627ba1b91499657315db0bcd81b2e7141b6854ca0097e3cad74866391a3f800be59ae570164a59be4a2f3407da4a18e03a4773d79685b692e7171a9762e0ba27d779b6a847eb3c4f276e0118061797a6e1c0110ae5d016ca07688d9b287268e4391b6128b49c6559d6b2edb28073dc0d5b97bb5a668cb2e170ee50281b65d9bd02a05caf4d47af70c1107228328a516854bab28742a3c965a31268b318e709c42023af703d2ac110b6e8b4ce99e39c017985ebb46b2b6580c3d9ca58c624772f05c60b781c0c2167a990c38bf019c2b5d01f5701c9c9227c7456ac9021212eecc2dae52c8c658e20b35b6d8e5049a49cddba8f412f72e0b99560e01a88cb9af5753c1e1d209c0e0faef4263912cd39bb9b504a69ad3aa2ceff5f04f8906c492bc13a160749a19cc5334408506a855502cb8fcecd909c2140585668210c04028142211e223e42415c221cb25b373a26ced2f9b8eeeeee6e510d1aeea1a547074a097446d10f0de32c9e219da846037116cf90540b0db48bb378864c11f9d02e67f110b1e1217203911c1f5c63c9224f9b727371164f8e0f6496920345f2e44c6180a5c224b203ad0509ed082d2795b30b13dc73164fce13ae9461dab32ccbc4234425a59cd30b75ee2d5ca39445c493b38427e7cb4971b3de5cd6ac3d0296a0a844efba53450310820603190000c3401885a1400c83925178031480083f62523a582c2a323011c843715019063110c8300c000001600c008620e390a60554b4a996e1003fa363e39bae96733ff4fa2c7e1565165ddf5bdf0b4c3ad85b0857bd88a23c730895e38daf2bdc670adb251678e7a5fa3704714b0971a2772283370266748a4ecc5070b07641031ddbd50b3f5384828e43bb56026ac2cc19c61ca6ce6f7e6a49149bba9b6e4b362062764dc55d700eed4cd040d13cd3d588c5b03a3dfa2edacee10fa83946e71cce91335bd8ee871e36ff2bb87e645540601bc3b724dcbdbc2de9a254b6a2ded94ca8c972066d4ad9fda6a3506292ef1ffc519f2a3f8162fbc04fa7694c5d2bb3e55904bd042cfef424e74311418a33dd28209ce9710c7110b628a719c47c24351a5567f28a0b6a1f9988b35ecc584a4da4c5cdb25a66d6a113054e9c5735eb977b750d05ee72b51f8210810ed43622f7debd567302c1b5b25dc9a312075c4410c4fcc7295010c47a8bb7802b33fc08fda08afd24782382cead84a86b11e6f10c635a3ed708229dd80234535dfd2dd12c51a32a8c53dfbda6d1ecf73a7f170798e47bbf7f6401174cfdb1894f2246d0ae9dfc8b697afe77ccbcfdd70c8cb524272d5da181d3c772d901eefae308260435f59d7fc9bfb4972b2bc2faf6701aea488a4088e8afee4a6bc88bacb8f2a57ac9a285ea9ffeeab62f577319b041b67e2bbb461b85a8a34633cc2580b86e28dc6faf6492d18d2c838d1ef8b05d09a9b5d1a358e48f084ae006b0127db0ab8d671a91ef528470744e7d9789060be0fa2cac47200d13bfb54b318534c47caf302675a1683467c93f387dbd6c6c52be22b7a1d7f71dc593eacc710e6ef8dab0743d0895e4102245dd2e0d088059570c7e3a25fec111e6e4e0662cc5b54a126dc8b2e7ad72bd1d03112ef48b3b05908e84dfd2ee72509dae7a9788e5cebf11a6949611234ff705ab1b1db65b8cc051adc9f1eaf4a2414d1451208b58113102d812305653f35c8869a55fc85f5b2c1792bcae142db3d454c5f6ebee775f47fa29e2ccf74386102b2aefc3752e00a7966912d5a8ac31a3aa266a4548fecf79ffb71688807930bcd37d48ce1d18d06122f94221dc831ca4556eeb3b081c351950aa2fec4e8ad4a2428cf59bfb5448d26e4bd986a08f2786201c452773be861152495df817b2636c5ae626682c69cc0a46f90beeea294217e7c671c15b99be8b5c56309edc77d7c3fdbde6702778d329b22bc3cae8ef95d512198727b911675d3966d9e2fc0f0565997a591da704df9a967b66a5c8516a874585804b8c543fb78a2fd5e8055757f04768fc550d0bc311497b2104ad1ee5cfc89e8784d4c2254718b19327c0ef4c94f705d2a68badc57055643bb62063da5f1b70f5620620965627c741b139286b55bbd5f200992ec4825a89ab094089bab04d41148e338cceb536c85a58ef1f51955a3a68400644fc78c63da2093a0005450fcc5b666e7cfaea8bd1239679e925ececdbc8a9a84756e7d9a481d29321ba763c0565052fd3935125f4a1683b1517379cfefee8a3dc901c285a2f42b795b04c2fb2fe9973fcd2121f1e9fa8c505af91356b218627b57ac044137394db32f0b93d07c28ab5fd6c3e5d2d6221699b4c877bb1962c860d8bd8ac6c2fca7e5f5a2f214a6d356e5e029980d65a91205a9122dba2a27ef53c7208dcf1d9694597e83be3675bf0a714ab32cac35b85eef38afe0331075bf2590c6c0626bacf847210ee45a40be95471ed68a1116b2a7403a8a9931febb2945d8f9ac3ee9e4172b9ddc7fbe0175bd28440809133e6ec0b5ce266f65d88e8e22c34c6e838d8f282c9d5704497aa29c805b0e084078fe6bb73e5e8d8d780e0898d0d6cdfb3edcc89f5f5700d03e7572559f80a1897aa8ba57df0475a94223ae7ed057d740f0820703aadde72ac30635374ea0addacc06a839d93e397979ca536d6f4723159ca20ee3934aa86a95b4c1c1e91dd3adb09bf760ffada4c03e8fb4a2e909de84c997003dbbaf4823308b5c1aa195df11b2d57cf0b2adb7a08fb11228efb36a38cebdfb061dc6c6790dacceec4131430a729e18452c2e30a922c972631604f19447e6754f0666ecba0773b19ac1f1e58e18106e2b286abf333f5caa199702ec950863fb8026a45b797fb56de791285d79a8462487719f37a4536af36eb09edf62013880dcb2cbcc396fb746536867d4d589e1cb413b21c0af7caef77e1a467502c8032fb32d88bb00e7fc9f2574e0da566b84760abfd87d9da07d40a861750cf198d27ed44ac3a376b57da3d4ad42e96b74c7b4ed073687743fa2a8e08d89fa007e422556a585938e8e38ef2abf4987b3f34b143e9eafa41fa50d0a919d6e60c1d9c6046083682db3238be820bfbb16ae3983e26e4a1cfdd3593df00a3813fc19cdcedebab2aebfc358daca8e5511a280ab0f2920c932ffe7463a0cb395f861babc6761252aa82e782e457130cdcfdfa74f5dd4834ea899b23f9435d9b69e1c04ba9d0c2be86e1911d47b5f58320211912dadf2495ff1a070955942d481a0a034a4d75c3e7c7795310ceb61f8e0a289d5394921f9c11bd3499a860bd76fd589b4699504ebbd6dedbb09e0ac1347b7f69309c80affbc109d71eccad935a3e0ff9b271acb97d0454fdbe008f25b35ea37aa421729b5ecae10a021c69fcfed7575c8d485106e2bf594fe991ac98494f09253b25b4491d876664b6600a3217a28818e267bde6bdadb37b66a3ee9f5fa22385f355b80ad046e32c62185b653b0365286566834567eab4b0ee11c9aecf3faa83bebb84eb9106f61ed5cb12bae0cf9c0acdb6c382215955207a0a31dc96117b8363264c146259b514d2f47e1ee222f54440017a05ab483db2b8c14e227d57dff6ad374a94e78f6b1f1f3261d0c0219e275ab1ceb6884792f9ab823ee7ce8388ecc3939895f9c67110a3dad0ad54004429c4d19e6ecfc74c2bc13a114b36d9d40075d9eb66885a2168807f0ca9226ba0fa90ed53df5d4324348e99c55fb264e2b670366195d886d31ed836705116a9987b45c70825cc48107b095c4e2cc5fa9058bc3d62906d0265fd0be34d6be28dc0e702e962be4b9feda6e5fae30fa32873dde493c6873ef83a538a33a1b9db068e75410b01ed35bcb18f022cd50a39f0be68f5c16c144154a879b9bba7583bfa9e6c30c8dd3d301d2176eaecb72594391af9e9ad0f27df452bc6cb350571cdfca1dba8bff197cb50300a49c707640c9376fa3c4721a570b898df4be776c3743c716c518b71415127510eedbc46159adf6e0b62679a0432a81c67f0f40eb24de02282f91829c4aac7b09bc315d27908de5bab11b7835672db8b74ac46c78d0657e6ad3630e1afbea21d5826bcd223bcac78afc4f708f29a8d0a96d09937c82bc678d3243b12f705328609fbfa3c4631a570b898efa573bb61753cf1a7a57c63a9633689c9dac3af8f5e3162c85417022fe7acdd58940b3184ad62189b87aa130567d5dc9d75c350adf7e24b973dadcd0fb2d0a36f26a08ebba4c1b0a6e5947d24e7c724554ac5252f86693b8ba1ca3474ec44350629727fb6417d3a7e11777259948d1cd817baaa7d645aa0c6d447c4b88f0a3157ea762811808166b3c416a812b5f511ee816e61caa94cf6ed3b29dc63d412348176d4014cdb770d9a4f03bba6dcdd00afcbb1ccb28dc10c93694e78a5fbda06ea90c491b5f9a4ab76822df0f35ceb1acaa33054a14f75542f0a471c66deeb7c8ee094027130be9726db8de5fa93afb2aab108e5447b10bad7cc7cf51352085fb407d1655a0cfcca208de93f3a13234546812c18f3aec9cc26ecfd39710f0199fa51a80ce91d0342c5a0494d0637611fee40a8e1a860ed6b7f6b295550c2e523b2dac7edcd1dbe0d96e432ea301b471fdc66cdfa5434f74ae3ba85aca67caf6548a3030eddc8e4afbd0422265fef1c8c2e9e3be8c8b01458d697ec41d3371f0c5531d8b240d3e5818d7ca7255a957860b966dc69a1e2811c79d19cf91de23754ea629adecec6641e9e8b8b82800a3514e46ea866b0850fd1e4c3ba4575c30fbf1e1a684d2580a20ef4e09cfb549ce2b0514239cfb58d0d3424e03242f1275df8b4686562ca401681e7a35763eb4ff0e8183c4393ea46598473b06fe782e0a3af39ee67002e177bb130ef01097da24cb980a9ad7c3c5068a00b4456fc2521f0e1ef6c8a03d34966bdf9d0422d945461a23b4d0d100a2ebe33f90ab918f6c84e55244a0e9ef8f88b126d3a3b9938a632d4c113101e090120e7c220e009960246f4d5b087ff7ae960a67a3858db8f033d844d16a44825951f46dc69728ee09402e9625e973edb4de3fae316a62873f01a30f8be561b77b8ab8135ac30b6e3d5a25558fe7a19a9a8d6c94ebc841c2574707482be99aced57a1d054ace9242fe83c6808eaa54a5065f013a9ff39c8e5ba14c16454ce45040270f14dfc803121d58936a1945002f300568b81ff0979bee87ba2ad2af1c8d3ce02907826ac12726404c70a5e281acc52d657fbe2853e54f576259a152ce9bd8d83de6df13c981080382718989890a299f89e7e7f226aa3722e364881f00348c0a0a673a52bb18f7f19a837a0cad3e7c1a185f694a8cf961016e993ca9ea0680c4ff89f937f2db3c9c047cba7ae0da54406c74da888e12a7d0647e3ecc20c0f48054c5ee923b819ef4d06513c057f03506cdcb58e669818b09f500df0034dcbd89814887267a1620f7c5e505179a0aa98e6b58de727614130dbf7e446491b2da3633089cdee7b6253a62d9c25e54b0002503d1375bd4f184f130f1372ecb3f56f764073255c19ee2f14aaec6c4e3ec1f64791a1c1d6acd7171cb7c224108675455499104443a6f9a4f1b85599245014465615201078b6c1fbe34b4056d7fbe91620fcbfcae3ea6da3f5719da01033a8b3a4376dafa03acc804c6ac35555a91a4a0b429f6f19ee55d5256d634b5743239dcbb63bbd69dd83aa5b5b5a2f1bd60f655513be8fbfa9e2819a2fea0c0e5f64ecbd51565c7aa2b7c910c9bff0a1f96998cb7f5efd479f229b3ff74a61fd19b8a78e8ccb1d608697c78a55c49239af2aaa1f53c86b3d6dd707bb404dc9bc4f93433e713d77ef0eaee2bb2cae2967f3a29806565fcaea6c7565f595c78da6fa1b64032579caf43180624a94f6e92b4d2464c2e991b04b7439c87f2f3483acc5518e847a200e88f4fde865d6a24cc867f4c21b60e4c329340be9770cba521c3ea7db07de0b7a0e1e6045cb1cad6890dbf370f9e7854d3c958590c8da30d6f71911d2cec0da04e7451efba7fe67569c723e9f6168951907081154cfeb669b4bc533f3ff53ae76a61ddcf25c517206dbacd11824c8898531337715b3c3159f9ef5cce8edb296bcedaeb4cebbd269c43c3d31a39c114d668cb64e75f29793387493cab2b267cdf686e6829b248c998acd507b37dd6dbc825876a8aec5deb2fc63d6d49a4aeb35888e63e3928d172584de81c5325a2606c9421598a86d2c1f0ce5e3bc5ad6e626f9d31d05d87f3438c6ebdd9123f32278976090edc51615340b4a7ec50b00ed301a48a73d30870dc18708f0279e786b05d5c19b4c245b648611cfcfed01675c5822b889cc01670af0b686c94511787f913b38eadd10d99d6e0d17bcf8d2095a717ce997dc0461d69005bae7b1e7f6405c3cf354639d1384088f42810d149b3d90f310ca1261ab0947d512658ced188a6ed3aee9282fcbde14069a58bb497520661794ee1e320ba9753162d1b627177526edbebe0377f22ad42eddad8fcb47159aa029666469239673d593d7cd0f080e3abe8b3a846480fe5d6cd5ffb8e073205ff598a0e14f3d0fc6c7d64d9fabda0d4d607c03880d2038bbfb7e96fe18321b4c8a19cf412711fc423861a54149443ca1409869481891b7c6751ade4547675495526d3e54a33f39bdd7dcb9f7f0de50ba158da097be3e7b7ad524fcdaa16cf9158d4fa04eb477fe1873a0aeeaa175b9089b48c58a40c85ba6af8bb26877cd22ab211960c79a0f00e8e1fad227958d03f214935d17101723159445cc0b8b244301645570ad21f02cc3e9aa50cefd2bc57bee0cc5ab745f99302bd129e7f6abab2120e25cb8aea1aa23b7cbd480610d38cf4d02ea5cb507edfae2ce7a21e8011188beddd3886ec1a439e15683a8534bed5ce61d1b08acaf8cb423d8b11d986c8be24bbf27c999d81c197ae09b0a7a60a4b653a02c629e8821d0553cd32afd14df76c38aa1232b4f7db98d5e2a37e863eb42f41b630f04fe7033c77ad9d0ce61c0783872b907290c014a406f07e98aea0ee6a958ccc86b10e2df864778fd93834b689b34e6b5e21a3cc8c62cff191d20574e964e9c0782bef3cdcd605699437906e158805b6d42eae6d29c51402964f3248af870ea15f07d3f1290a48561aa7e1c410e8544fc8f47333919d59341bb94a41d4eecd405618a4d8332013ba1427150508b1399e15511a130e5cdbdd0ca4fac2eb9e3678f193527e38961a9f8b6a797e6a4f4f49a40f48382698b2dd258288857eaa4821a66c4e2726446a4b0d6ed4d33c2fdf7803061595a47831f30d145950db3d17a25df3271413b388678d09f0b5f5cf0f5083c97d50f7bf96577a9f4514d7d1ac086c0345173976b4f4ac60c7704a6685298667f874991ebcbbfefb69fe023d0923db4620858adb530b3f221feb395969b2dfb333bd8cc0643a4d91b1b855c866daa27a5f25c2c0b92a281ae796970aef296a0ad574721b770502e3823a0b08bcb835f821ac720b5f4572195c8f376c4cb946ee962d8fd750b69bdac7d699082b11497be15462abea5d9d3f50d393974693ca20cd5a5137642ae41c48334f54c703352da2f98d0fe12d5c1bf78ec4ba0de87adae4ea67f41854974b8d5a2e95ce04f6c35ab60e04064dc58485c67d2346a4b590fc804d565c9c2fbb35d325131a8fc301aee523ca96eb6e2d91ad269a247a5078f65c4a6ca0c6f9d9b6a565f466eb70fc44a8986044576159540f7b6f07f57e2a7219ecaadd98d9ec2f04101e87e006e39a35f503cc804ed94431aafde055904d80120924d83b2b59826249bd66420d1f837b61d03ed809fcb4e5398728aaacd6ff939482bf9dff90d08bd2d228bdedc9be9fc61891d013149dd0eb1bf1bd2b9243b3248acad387947b1639b23e431b313797805200f99ba9f35bc37f2886a4a1462adcc9390d8fe27444a1088e82ff93bd14e96427f7d45b5e6536a9581e2b6bdcee8e5159b2885f30f809eb956e9cab675e022962b018a9af24a4332cbd9353df8405e4530405c5ecc6c2b12188526aa875f37677d2df8cba8cbe8054d969a990f00be5c80ad54bff36dc61fb98ecb59d1f1a80e4e8c267a3303ac27ea1b8d4cef39b830b282086ec23c573da075cbc8c0b2a7f441c6c7600bc1901f30514c414d38677770f0a3d512783bfcd986044ce5961ee385b5b170d37f26920b9ca907d5ef767963e27a6fd443f00006de1733869e3762f5ef10d158ca9c7832edf87bb223406ac48f70d9703860644018202103abf7b1113310c7df8e3669e208441af9d6cf940d3e968133ae044a06c9b6e74e308303f5de21c6bda5b374d11034f758c972180e6404ff4012dd16a8eaa71a49ba3f2fc1bf2cfd8cabc68740f967b52852ba28128e084b67c34601b2e4cc4b7db1c423da5b39898fde5476acaef8723d9e1f6090bbe6f9bf34127a56043aafa164b0a1e5ce6e21f6a6885564a541ece83a7d03edabd1389e09244ce84711f11250ee256f9045a25387325e9dc5344c43426910087f2dea20dd664b1b248c376dea1a18d511ae9e070d8a5a381d53b46def948648519d99d097f32f809eb9424961fbd75e0fc426c03228ea530ae415c7811286630b81c8dda4389469f397364dfd9a0132e7221d66db126b0f866a051963284da32810f292c1d2565ca3042d69d64e23a12974cb9710a8ca576979e68d643fc68266232a51db398fbaad7a4e73ad0bf93de47b96d14d994204656785e8a9f984271b4b1a0f119d859270504dbc5fa48711174db9ed70f50cbdb7e8e947b11451a196aaff00ec89938094e87b5856451afb19a2d248f8dd4a2450a2a15cd13a7baeff3f311a4b95114f367e09502e53f13fff0b8f9f45739f1f9d1917fafc498ec0012dbbe31d12bffcc637319f8113305bc36265bfe09dc02e1439d18956642deb09c016332ce85d08f0f088a064ad26a327274d6c63fc094bd99ecee015d973303ebeeb3b2b9232cceeff7053ec2c619b9667ced61c41b493b43608d723cf091004a8d3d7cfa1468b7f8f25e9ebc9c662cc3ac9d5af919044831656e06c5b9d6fa06d9b49d698243affe45d2c320c4822bf31eb171800008ccd30087d082c465456b4f44b8125884d37e459382ac091727dfd12e66558131dbf5789ce26de4d11ab982974398c9ad4d4c9abb6209a42b7a2811a7ec2c1949480c708b3286c122561f829c85c22326e394022d39ae5311ed16d8e030691b02c2386cb0683165e0e05f282c8c8a5d8491f67644284cb0351c94575a9452ce616cc80aa134526d19662ae87bebde6910c087c3a854f1940f63bd80a78c215bcfe61eb649f76376f86f157ea68d6de65e3cdb920430c7c84ca933c38818284d1b1f0085bb0e03cf290436b8b5330776cb6ec81912168bd8124a4401d7e2d890466bd0dc26862234e865f2b4c92775873d93f9bc5553912752035a76d2eeee75462554ba3c3fbe267210e47234bcb7ff28025c12444c258d213061b09ad97b9582224f29ef5439d6adbe00109cf44c28c8328b627cdf58823ba252d468192daa0c8df076e8a355c18195728c734f2972dccbeeb1f61aae37351c8cfcd52576584ef9736c77865eaa9ade9b2152f72c8ee425d1b78e5611ed72392e05da4dc5f48fa0660718a1b0f71234c225d82e3422313a8a785d2b14189dbde228c2344db6779db3759220f32170f0dca5062917bd64be3c84f9946601451915450cd27180c8396aa8e1b2bc3019cf70905f8ca16ca582f5b292c62638c274b1cc2e9446fa3cae36bbcaeca3be41ba2822748610cbc5279ce3b370bdb12b40906321dd93430e0dad21bb661c5f55f38804562311519cf09c96a8ec4a2efb316b5e188143ffe5b88d304ecec17587ab8e296de40d408a904fb3f29edd2e7df604404607e550ff67d03654c5ae97ce925e2ce5d9b760605c24b02832096860e9af1dcb41d81155942509633c6511542edda0449d0b7ed297ba2845e786e71ed49740892d0e0dad36aa3ec29ee8010a308842f4d3291aa031032c91fc42f3f9f70537d2cbd5216867c6c9712537a18f3617db2a64b71560561a3b9d75a8747c3f40f603b1464c58e14541e781e89b9f0711a17f874bfdafa13baddfb2f0715a07d5d3e3c0a730d742faee8c156ec6fe4579c50c43cb7872f6e629435c4cc55668483a95a06ad76a6e21b756b68e8384044325158393bfcba34173934603dfe242020b26cf2d70185c4aaf1eaff45a6e5c32633703caed9721552ebabb0716d93e476c1aba39215bc40ef4d018140c68be6e5b4dc328ac75f462b1a04a36b6ced3b818535aeee40d4119fe7e7c7304671ed53ea9d84f0d52253ad674fed121d86c972119ca25b0613187ec8e50a516286f923a0f58c71f3b484e134774047226a333ff1e1b5d75b4b2d3dddb5dbf41982cdaedea2652867cfd444f6b30b4c00604849ee1e03db641280a84ab944dd47384c4ec667af410aa984184caf58a90f7115da1b61de4304027001e2346321a5bfb1e3371f22f2b11fc77dea97fae11615e038ea0fafdfb6c7c3fca604eaf84d25b1f2b7330d29d44920f5f8eb7f330b2930ac11e95c0fc41b8a288a40ae42e967631c285a74ee6af2552715381445c7ad70bbddcacd703de446126ad76ea3c8c0b0576a344a4cecf851a29e9e114b2f2980ac0b4a125df321732dcec2fc74dc1967a2c51727d94c24e3479023bc00b80b803ebd91e89733b96eae3da3566ac052a75e79a3cf29302dfceddc24e3a279344f686202a04362440617eb5987fa725f6c6e9c45519a603bf0c10c96e966542ed08c18ca98610bea32fa5558197043f5353d72e6a6920831f602a2bb4d76000f12eb1120c9780501475d6c8b3cb0ef1c344791870554cc0f525a534a97d8af1473cec2b79b658211f331f348c0f2e28a68a014f92e90800ab2aef0e89b7cbff773df5e6113159881b41965021e26c7eaafea538a3f032d38f5d1e507407cc3f1a2be9c0929fef2dc4df5d98f49f7bef369f33bbef5937c6a6ce29f88920a11c7060284ff2b135d51665eaaed4c8f83d0c4845a9af7ab92e97c77832763a6d534e5228683f09bea4c41c4f9b762b8ced0ef4431248105c01de40bbb8dedf6bb1a57be03190ad80d23d44a8325117b824c99b2a4795336fac31b31ed9501196d3c203b2d22c62f35e014e75eca1f3818e3e4a10ffba1b2339a4ca2f03378fb1a1b47e963e3fd3248cbc5b8ec642e43715648350ff2bc9228c48c1088ff682a6adc8a95eb3fa7ff7ef9547381828f276812225d99b789aecb879d9b161593666bc6ede7826062a580b240798e8b5f953cc8618d3d5c692410e7c22938f35f146e66c543eb407a89c0ee7190286c299bd8383181532a88ec2c9d373350c8ffc05218b382aa9341d17ee702d7c6c0ba4c3b2d0f003ec0e17d15d2f270b0aab5c16acfe56126c2c165803da17375f123e9e1c742ceea6006d2095e02c6540d4473fd2a1f09a510a4bf618153e70a14b7f99f0d3ffa1172bc1e2e3296e402e8862a3b861c8f71a425f38bf6d84cfec7ef16284652dae3d10124a5b58175c83c36b00b1a67747cdb0b83fbca94792270287f76097efc588cbe9d746c78a0da0384d7f335c29a8adad345c6773ee5a1b83f08166a4ec07a4f97ada918a6837d16541cf7c95042d038905624307b736d2d434db80bdb7bf5adff72d48ac2cbf32ca2375005191142b24303a76cff05a10e100302d777fba53a1ec35c259c22692ed5db32c8e6b32e87430a657838482134ef93a3100ed7901e2fada7f0a265e57d92c74d0890684e6aaf77f28ebd30ffe9e53c88bae224f4117752534fba12d55d2064681f396f3c92989e9beb65663cfd433be4ee343bbe04c80ef2e398db49ff43466d66a331c8f014a02420ae7024ad34248c088b0045489b176c9ca1f104ddc0ad2d5a7b72de0a876dd3c055b3b6c112d7919006e3a467f3dce600caa9d5fc6dceacc18309d7afb54944d0656b9cdca6dae21a0a271ef301e36e14c1ab35cf0847db08d228bb29f96c8a0c3d4d0fec64b7a34efb45e6fb1f28a265478489201bc9da7e15cde12f209597522843aeb566aaf7931443a6e70c59b42b7b5b01e7fe26225cf1a209b8357aa6e80dc52e0315608c5039e04ec4f318d7a379776aa9021fd20cdf5865b8fb1cda6813f70f9f224f6656f85664da9c402f4552849f586bcc11966e4ed4b91bc184dfb669532a83512d82e3da4b64d3908c812d0bb75f0fa6c84e98477bf0d46683aaeef71c20f3ef6d2c722123c934cc059c17654be4579063bfca96cd3aa8b130e06797ac8fda37c2f089c42403a2b168c10135b4cce37f09e49c2ca424ac3b71be02c49145946ab09161499e1ebba33a5fa1b5a747650db5a7b2119257594b72a6c78c8a7624937ece0d94fae8dcc0da73e706427e3290e00b1bcf32714c095e09abcb4695cec8fb29397180fbdd860c0dacebb98aa35500e04cf6c855cf799bb3f67766c9b3f88675668f258016b1f2a526acb6ea032bc82c6c4910ddcf0b32f3d8d1c6e5110a8ad661cdc4ec2db1f5a1b3058cd45ff15227460c47c5ced538dc6577b61de2c4e179bfc499ce52024829e4390c6dfa147614b8d6994f120108699d4cd009a10cd7131a2e251c8e621f0e2a10375a23750a3b5e9bc87e5a884b46d97cba7c42e324c64f64737d23f2742c0733901e87130a49cfb429d18c2191d649ae839ff473a4099a96cc5126d7ecd8c19b4447876181001228a0a80930761c662f03cc1d55edae9f2d6567284c6747f407a30c0225ed606a59d90a8ad78d8405e8e905e09700eb0e96080a8b3095541f21143003ecd51b547cddd02fcc88123f28ebf621e02eaa9cc11acafcc2a61603cb4b54de85aa63afc34bee07ce65481906288094aa2685419f0b2f10ab47b849fed0ed0e557998597e2fe1545eebd8ef916f6cabae1d3afaeb14f884ee3c7f103210a4a422e4e68d47559e644cf75af2b43d54f9c034935151b533ce228e17ae6433f5f0971965323cb7a27401e3d923d4a1d8b594d607c63bd793bf60d8670fddc196b03d47096b76f748bcb09bbf87d37c21512534ec65e78515745f604ad8b4c724a83b42ba83ad72e67eca03ac8229ff2f7808cfd2f006286584220392c15f0f019641f73c66a935fa6c2ff0053fed9f342ba5a5bce7123372c8d1003226524c37646689a12b0c489b35806888e92e1868034439be4c7c8faab75862a1ab5f0a86a0a664a91e45022024e0d6c2c3b9ecadd129f7b4a417a8ca8b3f50798cbdc2f3b6ba98fd22b7136906c144011f64f0c176583341d5b00ee3a213d1d30fce3618bffd10b93c0f7a2de6f3451640d4fa90a1038a1ac5313a4163d2f32ad4e23078abdc26318c136bf26dfa763ffa48853f21ed1f4d34cab9a1a300ffd445a1fcf8bd40a9641dd452b910e30ba21c35c470fc6a8f65c424100adceac2f06fead6197cd9c2c0fe09fa27e575c67be92a2464cafdff8045f773a648803471259b2b16eb1345b1e687c40ad921d6b6cf8a68f62c95d2395c1b633f8436b7813122da7233bf8980b91b632a427f6f40bc8844826e93d9ef6f74a6f4c69900afdc4d2b5530641b02436e1a7cc08bdfa6d9007c0c45047fef556d11d626a31d8fc89c51044ec8c309ec210ca63105bcb33f93b8f2639c07e94687b6e6438026e2b0fba718a3d4bfe689643a22367431f8b8b7a81c5fa250398df83fed2c9b945c3a92652b6eba23a05662a706d8781ef17f4cf3a1203913c8e10b5af7a7f15f331da8cccddbc1143e013453ff442112083810fd46b0ed328aba4001ee2e06ee05952fd5e6ddbe14800963b6548957578f3aeb458a90242003a73e6164f426cbdb94b5f081b63043b85e90fd17eb31bb9e99de8bc52571138804ba837b732d16c21480ec856e97ab06db8fa7d4be04c7a9910750e606e6fc3e79f1de122e412f92d675793ee01dcbc5727b12f6234c9750c3047d101ea5615503d0aa0fe30621abe517315f7194a49d76a53be8475bbaf4c00f5cbafc8173baf40f82ebbc741a825bbe14391dc30d6716c1a93aab87ea53a962970fe13c59e7ab2004c93af1ff00b4d589b907d0e296202836d7984a2ed64ee41919a3458c2feea00a48bca56a4dc0e0efa078d0fd6d8a7996cb800da5205f811a826ede436dbcd02e098dbd71a5fec6583ab0b41a2f9ed622db9181fff245ab11c7f67101562404d2f35b0da1787d66a1ee99743b721f8ff197d176845890c575196124d3cfa217a124bbcdf16b0901fba5be6d5ac6fcb6cb14738921d923626d72f5ea0ed563c31505a7bb7f5f26089b58ecb949cb713cd5c8a8d3561f7e59ec8f9034f3f6f900c14d87386825dce74e2ddccd3908d16ffeddfa96daa169d56b6dbcdbf4594f15bbcf896ed121564f8eed66e76b2b7370b75d69234e5862cd19acb68ea93d7e583fbb719b76c288c3728213e9059d126b33c3f6769cadf3d103d744f9c1aa047f777834959d7a5fafb1dbba74594d0cdf94052c4a589573c77af1c606d090301d22be868c7216e54dee40a589a93a8ca702a44e474e3f5856b6e245571d3f7c504d67dd3ee7e729e0afb9201420cfa3d0d5f2b3a50a2c2c49951580fa6627d460c6475ca49d822cf72fec4658b2238a674c8712ab4a3ad4f6ca4687daf93ddb91d44f749c9c292f73955f9b953edaf9336243ef25791f1b9e5b779a03e446aee3c989d012e6302dc98fb88e1aef65615d28fe85f34f4872c4ec2e227a3afc5aea6a1f222fa7ecbf2ebf4f20f6195cc91ab9833686661514ab7cc3f16e752cecf81e2176d07936e4b1fade41d8292a7904b9203eba630e8d20386107340b44a83cf199a0b7d3793af8b0129e879d5a88ddc6339d5af5d11de2b25fbfa76a9f3a4c59c82f4daabae5d1b29f49e243452d0e1cb7f6f7aa25f4f0f2acb57e3f14c27802871540e27795da07ccb7ac5041986b5769ed2071c68b0c848b53ef803b736efe377901f81f3fdf51c4d26d0c71f301ca9b4d9e47225e27af184a8286841ca23874b75d99b6a6ed6ac7aca012e6ec83a38b4bfa1689c04b97a12d9a0e500df9291f0cce2a512733a2a4613e9a076418c04f99000cca2757eca1e2da2ecc082560e5b222d720fa4c9d5481183372513991ffc88d26c27aa283145072965aed62563f06f2a3b0ba870bd37a61a0c4f397605f66c0c6d2f13108d12c1a59c60abcbc3bd3736a03fde0f56b47fe84efbef347a2159a9be7d9eaa688f30d12c491709ee7e29f858278989919fa1e490a6073ce1eeece05eb9660abf05191c1a8fc7564c8628987fe8d00178032ebca9d2ca28697c654f0e6982f82aa1568f42c323163f7180d2029cd98301cabb4e8a70753b94c23f3e707da2adbc3d200a380c8205ac48392d0c1f79cd05c063584fca5fed0f07db7591879f5cbfda41f49380a729ec8ddc2a40f615882e87341931c98805bc696a5fa3b416f6e996c3c16d2d4ccc16b89d9224d914a415183561e44365e47f99b2e1f5ed5541f38c7cf762596a80437a13f15b2d1fbd105ac8389dd06cc00dba7b0b864169399136d505a6fdee69d8aa145a5deb4a1f54c59284dd414a6b3d1d2e9d9990dc43060bc77534af9179f44120ca8d753f94dd38bb40c1ea17f4be6afd3f52fcab1b0adaaeb977fce60c2fd10566342f831c4596ec25a535537e607865da71f95a11cb21ae05d0d418a288aee6908f7e7ab4f2171e12381650c9d302945a984640579d2f9032497c840d5ff69adb76a9f0e1d83be927ea796be9c134ed19f1aa9a8e71d8e6cae1df64c18b2d8e1bf30a4405cbef73ba6a370e29576bb8abf7ae3812abb253d433af1b6b1412c4b587201a6c504a34245c4fc4be68de018a2e4b96acf0683321ec7d537d563b0ee0fcaa0c61bb3467b6d12afb9aa81dcdfa719384e0af934f7648d99f687d90c7184eb3fbfe760d10441f87d2a6fca5ff28ec1363fefc1bdfd89c9fb5d52ce7603d9455dbc35d2b3d40c4f90c54c06aa9d4d61c09a542fdfd116202c276dfa081eb765d1a046a648216287d9056b1d9c90ca3ee14a91f8de147bca954e48884e9853241e55f57b703380e016f9e07dcf449aa4a8f7588c50453b5bc54e1339ec9c89451b83c8d71a123c87011aefb43155805811e7f880b9724460641036c3ae9ac9de022a4790d440d73cb3c4cc606b27de18ebe671b96918adbe41d4df87e91ec374c7eff87dca10124861589983f350cf4044225c05feb7ad8444325aaeadfc2da594520620030703dc023636958ce2a7925439ab46f0be7cb55c7595585b51c6133196a6b0196badb5a19b9610d75969d65a1b961850c6133104492419f37d9f0d0f0d4bc490b37c956821b12b87b6dc016cde4cce4c579866a310f956ed010c3fc01b83abd54bbdf2d0f042412693c96432994c2693c96432994c2693c96432994c2693c96432994c2693c930c0804c824c42ff207d481fd287f4217d481fd287f4217d481fd287f4b1b1219140194fc4102491f86c30e730be17638c31c6648f0efce9c8758b3e4f8799adc839674fe79cb3e6721e89f2b8c19db70e578c452aa33641cc41b05b9d372fc72877f8ca647323c1f74d852ac6e0b53d80d882abcd2d6792c956b70d30b905e6b90aaeb6a844ac54857bd48a714acf749c79add1bf6d9cd24a7ef4120db4f5c03e74cc740498bfd6fc608c453f3ae6aa988eafa7a3d4adb967641520690458ebbd167f978b58bdb26810340dfcc2e5814909b87be5719510ea95c7a5c2cde138d225b9002bc781ef5bb0b9f27db93fb41fa0da0fede7ceeecbeb7ceda0afebc2396bbd6d21bd6da1d0dea25a437b8b449c6834e2388feb3acffb3e52f791d0aebebd275cd6ed717ddc1e3d3f33db6363b6c7a6af6e3976758b6385589c2020dbc3ae8082806ad7beaaeee81d6befc538677d31ce59eb4d6f5b28b4b7688b44a311c7755cd779def7913e120904c350144fc61105a55432d5578d27275db5b7d75e4d1506fdf6da91be6b71c5fabba60133120bad5ba9dd4474d54b8f11d3c1912727a727e1487a16ed2f47041ed618393fba4aa5c9ae61a5b1fd5e194b537be519d26485227298b8f762cc9df4ca93d3c5b66d5b28346489d701f9489d7d1e9d1c1d243a42e8f890482410d499f1e8340152128398702879394aa592c9a4b3848708ec4444092252a41061a282e2b112b2507696a7880ed92b4f9120c82253704f078e0c22870528ac0cdce515546e6be7c0da9ad00bb72410b91a0245dfb4d6439ae85a6b8e8730c13344099a538409a79cc3840724143951e4746142892c01ccbdf2e88c00e4c7e8c2490e4b44324228c40fd0070492ceec834fa7490a1e1014ba2040381c4818c150102921c22622050921224c3ee0b14211164ac83d9b18a241fd9eb5930d55716877f17404d001e0e908bdea53f2d2c1780d0800238000d76201349fa59866aaef8384fca3e1d43e3fd897e49be1d409bffc4b714ae45fad7fb11ea69eed2ed7c3181ef5b0a7d2843f23bf3cfd6018e68e5c0586e99509f5308d85339c1a6d98da300d69614f986e6efbc6a112caf8c1623127bfcf7b92518029adce79b6bb5c1f6778d4c798924a23eae392905faedabbdf14c3dc7b23e42a708c5d99500f75636c36d2702a1c6363acdfb136ea4c861fa661caa53a1801061880000262c42840469621035f2b83801805142043464c8c0133f28c19f8da1932620c3060c68c030ea05123d7a881afad31e3001a346ad4909149cde499197ced4c0d99546a66060104686c641b36f0b5366610a0a1b16123810414b8916fdcc0d7de50e0c6020be0c0d17b0d03990106f0b50c24c02970e346a77f81053afd38381c9dfe5e936b6af0b5351bc78e02d49cb3222e742fbf5e04b526e506c3dc31a64ab9e9978f3194ebca6c8eda9b29e5e6370e48f7f63882e5f41cc628aaed7e924b40f085a4579e574e578968dd723b45af3c35f8d0ab07810b76797c4e015e99915b8e7f5c9912cf6077d39549e1286e5fb80d805b8e5938d54367e5c46d07bc464785eb94fcc69e85af7c0b3f3d8bd7391595141573bc2fb7a585735e8e1616be790f70d05958f8c86d6f6131c77a435fc9cc5de76eb7f2273e3ed7513680273ef252e9c443a7d2a91b7fd4573e080c578131cb0fe2628e2feaa5cf3546f9cf57dee4a77f6efadac7df5de5c7fbf27ce4a6f99c7bf3c15d4a79181cf530b8ca733e7ea8af981b061f39e730780783c35019c7d21c3fe4a52779f92b1f0400aef2298f7af900fef44148ce01f03d5c7807bcc6c5d419b9f879e287e3eb6e7a0d762f9959e4b78ba66a831e86dc721777f646732e5f1e7e28fc6de4b78f3cd4af897dd0c828401fd6a24e520a50745e99136e4522914824b2968ff745e49cf8a4ef3dcee14efc8e73b9139fe39ceec41f6d287c77145365d34ff89f9837a6dadd866605bf87a9ec4da56d34153ec92560ed3576653e51ade582397c36363636360159e35a46d147ffff1fb32e8a865398e5fdffff0eb7f8adffff177da83e7dd8debe855378a5bf856a82bd061eeb0d450b798a0f9cc22b140db5246585aae9550a0b15d4ffffffffffffffffffffffffffffff5fbffe7f5d99d0ca54dd14c52846318a51168bc562edd56a9fa12da73aa7b9955badbc370892246f9518d7ca97b7895bb88968e9eae20d66956879b6308a5398857fa75f9eb7777d8a5398f5ae7f3dec4fd67fd9f2ca56d92a714a2165ab1452e2549af255b6ca9690d2552a71ae4ce85d7a46bb1b6cb95a670dd7700dd7582c0e72e83f294cbb47d13af3e346a2ac57abd5cad37b832049f29576e5749f5dd9c2a99cea1d6f13b77013734b0c83704da71ae66ae1143eb9ae7cf5cbbdaf2391ca5689e214ae95ad12a73c4b2125ac749d9e7669977ee953bbf4f9aa347a676b97769d1ad5af2b13da672d68465bad56abd52aa739cd29aee1da8c2fed1fccb46d891b89320ed36d4d94df1b044992a33885a28d1adc493c7413b71586116739ddb19d9e7a855339d531762194528752ea4c26edd2294ee5546b983e714ae41aedfbf4f6b9cf8d64a3fbdc28924ab393ec739fe88695905c99907695b3ffff7f140d4543d15034142da707ac84a969669a9966a69969669aa970284e95ad0f9652b6c0f3e47abc4ddcc24d7c9788aaa168dc8c8ba1efc22914ed533a54ca4ed22f5759e95456bab2dce78ee1148ab6cf8de4ca6c1bddb30de3508f43b91d0ec6a11c6ca7d2703d9b433914c6a5dcce95099db76c95adb255b6ca168a86a2d18db31e41ad196318863c3f5898bebc97038290efbd4d150892a4a9e21ccaa19f126f13b77013b54b0c7929a46c7db46f06d32e9c2a5bfcb99e7eb9c9d2992c5d8bd74075697171c1d7ba6c0ee5663855b63894dbe1621c8ca371e907f33ed807fb927c291ef52495e653f2c1605726d43f58fac53ed807fb925c991087ee7383243fcb56d9ea9773353a13ad5f5eb98b1741ad31cd304cf8e39d84313c0a675bb8891caa0a67276278a203a7114e239c46b81b8523425ae0788933e76c69616dbee1e786d90d4d6e003ac1c88f1c9cd168c4753b46907c9de779def7195162a407ecec1b5972fac0f2f41cc29eb39bde1a4e5657e5f3c791264798601f5fccc0a3d693b54792703d586bef3572444935f14c67ad73164074a082092f6e8044a8d1383ce0177c08416bad3de039c2a38f7ae53962c569c769c769c769c769c769c769c769c769c789c789c70da209ccd662d6c843915f132ff1cb2b09f28fe30faa0d906f226fc4b9f1454efed64b62289a38d1249aba64da5c396fae7e3f77f1f14d38b21ef7b0d6182513ccf9f610f007a5af5d0c4733c8c90c7968d61a83fcdab18fcc2f66f5d0114dfcf291e428a293d1b543def1b0da0839e736e74a6fe2e36f1dc5c4434e72d1449a4ca44945a3902376d18c9fbbe9515fab012a2e96485cfa5a63a09066bd2f28b78b5f3bf99987273d873dbfed285fbbe9c4515f318c5832839c4c11e5c7affda40345300479c845917bde031c74103443babb9cfc0254ed4d83a1ae82fc5e90879cebbc1c6198c3bcbbeae520711c98f4985b1c42bf37272abe55b8f5622de63a54e4050435dd500520624e45c09d4f45c00bb0ab5720e29bdc01cc2ab0b39dbd025b7bb30e6b7601aaf00d139db79d5bd654e56cc92e4015b8779743084976c184644272c149264c828282825098e5c1c1a5753ea2a5c5899c5bc82724b813fca0c214331f2f4ca02d1033d3778c083611927841445781fc89b4ab38d8c51149f46ce1b324a6c44bf65292795e54bc663feb97f7c47a7e663db11e9cb3d6db16d27a6b3dd2a2d188e3ba6e071d755cd779df47ea707034c9a51f0485e0000501dd1e2ba020a01a6ca727dd81eda016a7654fb037275856fdb94056ff5040e3aa68743bd36d0c29dc274a1843713d5ccac1b81d0ebd2f9797ad7d720eb6936cd84637927dee13a75034ed0a0045d1b44bbbcad6cb48b9e9fadc6798a6691afe84b3300d63614f9886a9aeafd2755f36ab2a8594381bb77db366d9fa6038656bf4ef3cfae7bf3e6c820aba2f0dbc0a55432db92fd744c570cad6d0f60641929cd12e92c789c207bf6e94b7bd4dd20c91a6a874d194b68cd5cc04405000b317000018140e0a4361a4c3280c926b0f14800c4d843c5c6c442a0fcb23a2200962148718630c310611021021c418648aaa34022f6afac4071ba8ee778b9098c264c35dcd98662f8df1378f8f03da19433bd1b6b1c4c4810b83cf25f78310993fbd3a618ce53a8f98cc758ec8190baa0ce5a748e0412fe4023a0818ae4befc91aab9b9867359ce2486525e2db3cf52a3873073112f22de0a7c09430a8905d16253ad7e184b4ef232f66ed488c320b502544c3dbb573f94c2945d4218303719c650855268019c78dce4c24990bbfd3ee9ea3b5ee48a560b8aeee4ee0cadbd5c980fc9f46e1ee2427c69c0a2d4e8416f3caa71ef2c99501400e6fc8a764f924b249556efade369d47c8e704bdcf0ea08708eb62f066d9749fe29eeeb2335fdfed048924d02c7803e1398b3f74671bbccbe9c07830cdd5297e22fa03201a01bdb41c3ac4bac222b2ad8071e7b5acf7e51fe911d6871c731fc1a31122734f56c7b7317bd2fed53851a9112737966f2b67d418f4af7395dab44fd8ceb59712900039bd7a28b28335102d86dc2d82310868173323cf8aefad461d0e890a9da0c6bf216e61c6f9450cb0c53e1558153c6fab0b9f6cdd225046acffaefeb50d832a29bb935ecdf94b93d9004a86eba15c94c563da865bb99d790dd33c66749ccf7ae202eb830f70fc9115ac9be6d99f11663783f81101fb3633b3d268a3cda3d1038a91ade0c2e334c204259c672db1684e6cfa281a0674f1161622bcc7624e89a87f630c26a80f9e134be0200492b650f68036729ccb7700392cae7f93b45182ac14f39f4c287419358979b5df3b5899d888bfc8a69a050414a5ffe018d05001fc509492528b5385a774cb9f6f30c016645b96c7a8c19672b0e2eaa2ecd3fb26eac24cdb89d6ab6127eaad62cc7e1b9785cc9e191579596bcbbe5c1f06c2123dc971fa707a185edf73a54fbeea10ca0cba7b57315dbdb599fcd14c4ca3ac989c316c0bbd55e83e8eea03626e7f99053c030401e15860c11e08eab05b1509fdda93634033cfcb601bfe6580dcee32116fb154e876669649f4dfc92d3fa4f24c1787cfc2f6ee3e3c3e721c61f42faa96f50f78863efab64a9b9db256242d3133f067d366b78951c7b2a7100f6d5477ec410f1ed02154580b46ff2cedc343ac74e5f03df3728cde8eef5e16d38b2cf04178e1d66304a9e594ad266fa51ffddcac82bed9464ee99b1473b0c605b1e9e1977103c6888fbafbb1bd6588fa807f41776658301d15275403dd21f878a79c9510d3e08329382e449182b6e929463a52d8039f94fec47c767a1a787bbc0183171eaa66ac7879d25aae02077f67407a2983b142a1c66693cc5d9b5edee85cd77a9cdb5d8c514e15353e9c2747140a91ce4f9a06bbc39ce7179544a0ded4795b9cfc7b5d78a51515a9573d2cb0f5222cf921d0e0304f8e09a5ab164bd98cbbeb80d0595f9c01195ac67e6fb622b748894b4785ab56925ac560acf947ca53a05d992b57bfd5341ab6319e1e30d55a103d23e2c438867be83dd76d15fc784ee7aba6b79855d89304ce5fb157e834cf4edf650a9d42de89615607d45ebd4360c6d2d7673db443010c579acc5222519bae26a8613d72163163178e2a65ea531614d5765e959db2af427b380b8f257f917afc2467efddb45f23b947ef9015c641330e4f39e336e66b50abc747466507eab06a4436b64e8c1d0b1bdf0ccea3aab4807e99bf45fba337f9914d2bb4f5e93d1912d791226bf26df45be01fc0407f089c5401de13666ede8ebc3163d6147386b3e9352b7427030ecc73cef8e12427d568cdbbb6c3d97052633dbc679f2d89f639cbb84acf87642a59a61ad237a02f1b19e0597342d21ca19259c96b94fc490dcd587bcc03754d882e4d828735dd958905edd3349aad21e230b13cd48ce7b901a069bf6e471246b7c536297c9c6fa6e6dd784a36850431bdd226624110123ac2d60beba371cb256d2712495c04ae10440c8e0af9915937d88e4447f50f7981cc3b3c910e665a62008b53dc3e3a15248e424c8baae053eb93d4f4151ca824b654406037b7e9e4e09ea9162ae62e1d3f2ae852b08e62610ff10b4e28d16bf88f08f682bbae609f4fe00585f11643dff22106ea8231379d0146ef9fac7102d46c1dda09b5f236a82bd03776b970df958aebb006241d7e84219c7d294c36c05c1b0258c14af69cd8e6773d73b0f0f67137382451afde9aed4e96f95ece35df45a2a11bec3e2c9e5555237f32595b707d5f779bae23b6b2ad0dd17eaf882e5e77346d1abe24a4fee74deae7038c65e816a53cde3d1a8f739910d00ae098b757365e9d01f2ec566a92e5772c1337d4b4bd38e64415dd4ddcf120476f5d67a9c77946edea621caa74c3db009520fd175afd546eea28215c32096ed630380ed5c7e8da55e470f2548df452cc3778d261804c17ba8af501ecbef713b990df9c0f2290a39b4492bb226dd5acf12da8c0c44d070c5da5e5f38bfedb7e07574c2b503d04cd6f9501d8eb6199960096a3bd8495e300881c567d05966ec48c4958f06586eb10ca9e63e5b0b157ccde58369c57d5101305e06802496f80836ba4a43db2ee0a654279470048d8508771d33ad70333eca7d7bc0970c050e5ea6554e61b134e75a8b05e75ed831836a9c7dc1c6542097ea28319401d015e60d5ac3ad229f82eda637a5e43c240bdb5d51d60499d84401e328ed0ae23ec6570ef33d0a6348b347d6162765a664084cfbfc15085125ba0c1c9b3feec43497031f78b211c173fb2004b60092c37a85ba3e36b1dc66c295059d4229985b5599c1a63ccb300cc1df6af0a27e86f34a6e1de280f2d73cfb1004b780df78cd36132c2fb46d04070477f08497487c47484c620636ba103aa2cfa47f16ebfb640bac4d10706e400eb29e0002a53b3469d14a0165709e71d3ee079b1b626b5004ae09429e8c6b22b745db08691d2d9a1f560f91432712892f442d14bb0bb35ba68ba8c63d18ac76d839e0e1b3325c1d29b0c87f72fca3137e5ec60ecd0898b8d9c82e54579d25e8ec0c361db1c90fc04b8186b9a3746a1fc8ff1a51719d7b89b8c1670030f384b597b92102b01a454b72a5a3c0c38f24ec760911a861349315b49e161aa99b23c92528b86d34046487320cdb72d4add4e6faf774aa6ccd499b2046c542ad1abd81ffe4964b8952b6914e02797bda803f6701d0c83a53cfcd8f70505020cfc6b0fc195ee14dc251383cbc3053ee39c34ed40deb62440091894e410852196a4872dad591800b1fe93ba4dba81c11c703dd1e37b6b9a8d6f87ccf9161aac6f8f78f7ed85c0c0f2eb18bd460e7c13cb107f4ec5949705d9c6b7991e801c3e311b79b68c3d9700003efc91acd20259a55e94c86e7fb5007c6b4284492aa48781836472e86916912ae365b8b0e634efae3648c4d8caa2b8709453aacc0415f70693453f29aac8e613dc87489bcb091bcc2614651619a4f97dcbe2385571179b07eda9b69b378324faefaebb6695204e453d232200abca6ca5f7f0683fc124c00d2cc858e8555452b980ca311c161ae20bee14bf61323e1270dc211ff28510eb8f9a8289e1d5055b4335d0ab526295b4cb23930f24b0239b7aabfc7e2fab824985fb97f7070399a1dbd93c4920de1deeeaef092039b681422e7748e5f8809aeb08f46a3ca68d26bdf3d8b9301a9ed217230679486e8e06d6732c6c3d125973f1e3127983cffb5a9848f7ee7a0c34d9b5e9d6c2f8afa3425f8967d3aa5d383bf9ba47b8a0d02a670329ae577c53110f87122bbc3f906f6f7ae03ff0455776e822febd7f5bc4bfb02eff3593fee50e814bab9c74dfa786c17348f9fbf15c8e936963b734b864f5f5d4f2aad1eff9f66504b8c49011b2737f1d8835736f79110b8f4078f5f24098d8e0be37f0b406c0f78202df1b3b4e5fab7c1349791cd1f821208b170fa76ac71a0162046800d605073864f600a94110f01fe12149994e00b29d6cbf4252167f2654c83e5fca4f9a4103d9e44a99ab3205213b1e29434106d8f500a70f3a0f2a8197f582e2fd91c1dce2836de5033e4582fc84077cc939e0fdbb2b51e052606aec2e164c806585df3b4b85deb93205cefa6afe95a68b4dd9240adf56a2e58b83a858a17a59d747b66f51d1c53505fc7e337de49df4412520f64a99b3b4c753d64ab96c7ce3a7843798b79d59cae1042824e952a39bd847c505d7fdd7fbb3ad230100b941048d3d03f60176c56c207cc097f17fd589344ea0bb42588a8d1cedf352563cfe840854b9894805ca34430e63454e00ddd1184e3f81ee9472fb146dd8db556bfac8066e71fdeb381deeecf32f9ec0ce381e726e5f08c02bf6978e3a4f0ab6197139cbc7f7fd537a8ea124983fd48f42133180b6b373497420dfb8c6152335d39ab5780bd44619a46ebee6a781bac7a8538066e1920628ab471844d523d149bbb4a65d5d66c65e3eda171829649e3b78887d1eeccd0ae78dae0b682d5099648607910d5b7e398ed97868bcf1ad453ffda59f4655504565b89193f993b432bcd60141155472fb90d64948665b12f5d28e1cfbfae2fa4991a767a30b747029f21e1de63babcbe57d4b97eca7736e8e31410a521949b1c81737746a94d1e7d972483ad25fe59a9fa0351e19ff8c65399b18975e7ca477251eba9c08dbea3f9b246145a401050401bf476a4073d633f0cd43403ceb70f58c04cd671a919fc13e1d907694c2d887a52846c25ed11b583e4c048115a50d4b2e5f2cfa1575064b1b2ab6c1e0a1b064254879ce51f01a447f92f93a7680063ca2fb5cb267ff541da1b48561298be92e42d015f2603af320e5c21bb6a473389c9753936038695e44e942151257069003cdf625a97f082fa88943853dd42d23475857789c8da4c6f81a5bec9836a8d276585a6f87a5e17958e2b91605084ed8b65cccb05c66bb60505c2adebb0fb7d84cc0bb2f39c8b649c8f19030d814b04427e96a87c8dec81e218dc7201602fe5f3b0e4bd312af0b6e6a65768911b3d1ac2f92836b1e3d02d30d15246299ab9a3f5b00d8f0aa4483746817ea23d703caea5d1e4e3b08cb4bfef5344fc516f2b00ca654793d91118fce2fc1baccaf8b9fcdc3612e115d296c67871b96571e710e578c71c28b803e7a904a442deb13bb8a866ee38d5f6d16396bb9a5800296dedb890412c0156e530b2df1bcdc2038d703cb7f153edd374f8f879a139dd737ab6aa96f2e0d0c6a1eb60eb48975135c1d5ed28050054cd961140681489ac3b9cbde18a2075e26e44656a922b7aa9eafa4f483a63b4dce838ef783d25f48da09becae71dda92411a83dc464d301773814924b65a229734ae384917ab622cabc25ae8394107269ec1606cacaa89f4baff6a2177af77d552a394dd2e8f033e8d291275adeff82e6fb51675bbac0e8816d262c226cbb0cd6befd78e24da68d7e32340fbec880865fc7158bb721a554e357ea472a881ff9463cc73aaae50c2c2ed9ac3d2603dcf8f7deb9e61fb3200d85825ddebe89a3d09a701a25d12d60c740ca71e59c5531e0547d97bf88467491302937e453cfa62d2b93ae275bbdaa9e3a6f0bd5d18d8954d814bbb8a38d77a0a3feadb3c93db05ad614212b960218e3e1c674571b3343cae3f1990dc11820342edba4ff314499f7650a646e074e9a95d3b767189d12f4a0d2281cb2bbc6394152da016c4cfb7c138a3043825de8bd2546fd28fe09b245dd43e8c30e83ad42b48ee9ecdefbea2c2885a4ed7af3a9a1e9047cff5e17c502163871559f4fde276155392c73f62e2d5f9cd5e16736e81b78b89ce69d592707a269ac0a762bb48316b0f9a76e8e2e511c047db2590afecc546ce5ed3ac8bbccdacdae2fc98301fa92755aa98ed0267a4ee877e3392ba53873826e560a175d2f31cd1c4406f995cf916815c792ed3b8f26da0df1828b195d63065049ebede9d0ddb0800f0ba6b30a0bac641f2091d3d5729966a468c58bee79b7407a4281f3ebc04845de3575cc93b12369b6cb5cfbfb0cd3b31c9dba564ecfa42e3bc28332e02db5111257f86dcc16a3cbf7ef53fff7a35462fbbbae7af5c0593b92f40e25b25c8f987e32c482d14327d90709e766012c27c53bed6ee584e4e29fab01c7c223bd6e2f12b93280514ce86025d91d32bca1feb4b6df2a183bc19336c4c49f713e4d66c81522954826477651ac1058b9436a2d3024abd0b069530504ceb4533ad4c3c445dc1471d5043d5f05d0911aae37f58c3a77c0858e84ae99db67cfb40574ecb29b9ef8e986d7fc05d819604e98c79767e172ce8a30fc77346cbb9c0b83b52ebc9951eef60095ac40e87f68fa4ad9d3a03a23b54baaf9a65ccfc7eb578af7ba9d411459b184abeb541a7565cb7a62bd01b3fe6cf62aea51d5190e0eb31bc2b3b60bcc72922f691e9011dd5f3ab9255582e37db7a51567b5fdc1b2e627c8f8b76eade581cba6283d27e2490b786ee6bdaa8c0b767bc2b260318ba42069de0efc160a82bbf3c256d23871dfc0aae0429db7597eec0e062074edd43bcc83eb15596aa4521b4790ed1ad073a035b1a0cafaa51f7ed8e9bf1d498a6ae58a8b425bd4913a07c11332d45c7d7f6d43cd2cb745df57219400fa889ad7f64b471bdf17c51ee199fe850a8336fe8166d08988972eb75393cdf871653d6e704eb5c0b513f21aaa2d211f838949c7991d2c2c831d07491e8c6c8629031b3ab5a604b6a3988141bccc8c64b90c8caabf6167f1e2fa6e44e431faf143921cf0d02f90d09e8c6d60ea58beaacaa709507c8eaf81fd60e1445420bc895f71630b343e7adbca1bf8453e1c238b6d98258b935b604f0ed52a1fe7b38ce66049873cd417e4c42ae038a0189ca2573e14aeab11d0411b1e61e699ff66359acfc724ce5a30271bc35b9dfb6d079ef5e564281d3cd9daa82bff23a79aa3de8587ccc9d9bd8f420b483477eae966cb1ed750e40afa1531f35ae8f03f5c6af2f155e6764c4d7d148cd6dc434a5ca9967e30f0e346c6d11bdfda671509032c6f94eb96ce4642631eaa2d2f86311219602dd1f6d5dd9fbb9ca2dc8aa0546d1c15a64d5788adc09f89c585a53f901ad9e4a1d59eec459390bced55198d6af8d108094a3809bc75180cc84a3608ccdc23abf51689013bc04bf5ea635e21d1308c6ad5a0c4914114dc83a2da08010ae838f0636245e4600b10b454e424b8fac93ac4fdaacb109359ab85f0a9ad11b7c87212c8305e40afc95674ba961b83a59ef5e7adf88d8714e687657f461e3932fc02c7bf3f04bb205304d047678c4282480b54bc8e4ebb2712400370802e379a701b91d4230206493fcf1bd48fa58cec1a3e6124031081c35199b6e39aa1ea5d5b7ccb5f1a5f094ed7a7e86e1a81e9e3ebdeeed1f020c54e7af57c832dc82d3738fa2d6b0af077f8a5a0c49d74a05e5ffb9303dcd1c48a777e7d2771590e19ace2bcd6e0bbd80b42fe446d409e575f93258d2465959e8916fccb3b223f7c89a922579110a5951d7bca75a6f4cb9ee7710daa534e0cd5ead163de36c029ec1fd9e85a17d42e07ae474a79d80c5bc965d65ce74371497d80f54fcf637a248c8094ea0cc31361108c7472d93e00c6f5029cd913e7c69b1d2a3d7fbdb90af394eb86483102698ede2ca0dd8dbca510187f5c2b11602b233377d1aae8dc5408a7eb47dd001a1a6141d7eab9eab278e1d41ad66714e3242215d048f17023f9c36321db5ec2b8e11187b503caba6c81bf7c1bf22302ddf2a0d59c800543514a55b06761729bb24e4e68d7da0684fe66c7ce7b6f2dda5f486b6bc6e98504c2fe7145b76d444c498b39bd51db470d8d0016933aafac2e7fcb90750414cfb538b590bd15375fd31b156bf368c5a0822e9a2b2a83fe4e2b9ba853e8ed5154ed05b98defb1c6a79d2a01744b299d7ac75b05ba74b7853e1b9212de3bbb6072544d3b5de43aaafabe40a9cd487d22528b1cbdbe8ea32bbd0ea6b9aa054ccbf3ee6e3ab0b1137b520da7471f3610a78171a0f5cf49fb98935f177555db6dbd43ad3a833b58bef7d484e09620ea991723cbe1e8c9bbe5367d14aa145750a2117122f9cb2b05a6c0bb22a37cafa678c3e2a914c1c1c85ef8c9675f7ddedf459c9a299e75f70fc9bf6bd595df0837e87d11ee150ca9303fd618cf55b5865b9d6b057b6dc4ea3559a35666bab6aa23affa458f49254383cea091c0a6f99bc2276ac649be81cb6d80464676fdc5e09318df2a1185e2c595b9fffcef9e84c4bd58e2632aef1853aa93eb35a1b884e341c8c04d7c325fb946400282282837a19e85e453283f2bc3064119d29174966e019e2ddc93e0b23038e9c6c30e0f3a9c48b672d56b57dec7c74d057506752ec9e3d1b1bf40af8ccaaed63e7a383be823a9362f7ecd9d8a057c067566d1f3b1f1df415d49914bb67cfc606bd02de59827fbca5426bd7141defec82e44df004f48b784c2272435f8afea941f780f842bf331f9ca524b20897b4dbed9a2eee47271afac1bf6dbd3ec58264dc3a1615e3bfb96d4cdf6f735e07f8a042ba497bf157b8c4f33909f141819aae26562304ab810bb94499435b48f1c2590a442dd8b8e18cf9b1c121da3539bd5d1275e4ce4edc401481ec9c50d48d0ca77003a29e45b148a23af59f79ecb784a2a63ce6fe9e604c4db8c735457fefdc1889e23369f14627c0999bbdd09588bb55249ef26b46be366027292e949a29931a4e9af879326b373bc736ac14b65b591f31f76213e42969f81cda415a1d7a39dc886e75c46dc1f81178dcd94f339ca9c4ca7b721ca1aaafab877a707053b2fbc50ce2e8d63824841c74e009d42681ae637d51dc22e73a0d729bd57e32aeb897c7215a963a830cf44f91c81b0c2b9f5bc296c0bdec9e33fcd287b57ce49125f5a2fddf8da3024d1fd79cdc938064599438e17990f488eadf478ee9cf9ef42972370a59799a1bae082f68884dfab25dec445cdc3d9f6fa9acd422b564cfe537704e4038c46003c61b96773bb8a86be5aa70efcf36f1bed1a7c4bcaad864d867fd87d90d70c15a889ca7a9db61edec64005c21487cc082b8bdeb512f2fd3668304742681f5b8e42709053e705256f90326b17cd40921504daeb9af5538048b12de734d58e7ac3a0eef241d86fa8055c84c3832c424187ba0c180d4fb3e9b4002d8ac5e42d8c8a99e5821d76ac315615e2e0f63ca1707eab8dfd6111a55c86d7f1d64aac5456c15e6b32699cdec6638b41f0c7ab26c16141217ceecf7d6012a4bf35b723a1a0411827bd30de846a7706a3e3241ec41a7879762082add7f3eabc08404f36e9bbd6e05ba661701ec2ea6cfde0684ba3dd6e61b74b320e028befaedf2b97051090299edbb0016eac86c82ee0364b63fc4982d11ec8498cd641e40bb5ef6868e32ebbf503d50ab16d62dc1f09f119af420d3ef290a77d24a0f68fe52208874e0eba659f461b610402838db4477ba9e53b1c931c398710f1743a89508f7ee6fcd27e35f9d0b61cf6b5d45514816c2af3deca8a61c0603c44faa47d284b8db5208f96c5833ee49c7a3ecf4de09405c3db203be54f534a1406013e0484cf8b5f280a84c2fcaeb68b98c8dde691a342fe1531091d15a1ab035427b6b0cfd78058dbbda13170dd49d3e41a169b830195471b8ddb6497546c92371bd20d67353bd2644fffc202cec5cb08635da52f54d512edc20f3259437291c3efe5ddeba56b788b986eafa1b470e1c3aaeb9df5076109afd026cdab52b0dc248c8dfe0bbc90fc23c902184c8dd620d910b7790cca1b1b9fe9f7ad79409662df57e6caf61f462ff8d95dd080637e7168e67dee0e896bbdd866bf87b92351773b6dc201ca52aaf0f90cee71f8408ab9047ea35533fc65f81feb82a0b963114a14f5cb789bc16a69213e2179bb0f79993ec3929d2c30fb6d1ef3d644f8c608aed5144b70f5a1bc902dfdfccf22462f54cece21dbdb8332d0bbb81b6cc248b8ddefdda5091cbc31650d67d5387b232301cea9b5bddc9dfcbcfaf6fe20eba829f6389f2ed11d5a8223172a410ce0ff03a32466014a7dd80c487bd310d9cef4c6cb76f579f9758eec71ddb4b1091c1a4e83bc1625abb9e51d74f05dd3527cb6a2f0e724fbe5770d4a35dec58bdd73ac760aaf57263d2fd8ed57bbb89e5b0a7dcd57add8e75552054790319337012adb59ddfdf84ab76bded29e31f057c10583b7ab204c47f77d1ad31a20df0db87122dd383fcacbcfe6be78106f7260acf885fd8978570c7552fc71d64777b21703719519c15397d57688f9e84ce58533ed8a5942fab5ff2894dd5e099c8e6c58f5a0585fa7e39d63e976b16a8556cd9d16a05acefcbb1deae91c636b5388b388dc68845e167d3a2e8a9acadaa0362ca08d04de0d0fd326a0014f47553335263b4a0a272466c0dbabed4390c5fd1fb5583f08e4f327e3adaf529497de6a9e9c8a83a4d7b845e3d236752687913d2da0bb2f1d611eb6720b1d349745ecb28ec26e05e5f0e5b1335c60153d7da545b25990025c2d512b1905361687d13f550098fa4c0fbdf169d4eb2d11154fa2514ff29006282f0cdab4df26b924a27c1ff5b4dcfbcda8465472d704f6285abb47679df8b8bc55b54cfb473bb3b37985965df740224995f4712c45a15d20018c13b1beb23962f202c16ca4da595b6e88620b3008ad44b25244db3d30b5c10da6a204327e74d8490731eed4102b16117fce7fdb0de0c82847fb007da9b73ba5b6bb570b0906d4f9fc0c75290b4a3782c96f29557a1ab5e5a5d25d0effd49b0a80e696643423ac0597799b249a47998411036d516f506b723bdebfc9e10c8496350abc6b8db0ee3fad8110adc695fe9328ebcaa1432e1e10372f5d4ed57ca45f188361c06d818fac0066d1e9dae0e778c54e96a92445a3c413df081352485e5a71dd5bfc242a2683959fb31f9bb45892f09fbec9298988815d07a9367faeab0171f65ce1ec792881ab710da5a1da1ae379dbefe1b4495fed9c5cd04b162343bd9d4e618570335d1ab67faf7e0d99d491b744fa6aab487303da1f5aca0e85800cc86241476456fa100b4936b1c86f8eaf4919203d569977988e8f4c364bcfdc1c891b13bab4e7a663ac28bfcf86952ccd1873abfd220037c8989940794392c57e4e4f9251e5b450c1ee10e705fc52e298e215a7e25f51894f54421ecad52f741622febe40cfba706641c694aa3cb155d7cc0b594005beafe944d993295a6672510efb110869b92fb14471004bf1b748284ff575db52ec0ea8ab09826e80cb910086bb7b0f612aa41a25802714bf00896b3eea2a064dd9ad486420e1b22977fe0bd5d473d4310cae423f408c1c10aa7f62206b4c132c9b8a9e0ab315e9de95e922e2026ae8bb2699af138212f59a9fed92e4c17e8534bdd868130d2a39694456fe433ef4d2738a078b44208323d5ac820ac9379253bea9fd90aaa195db3d820744b0b63a44ebe1d3e45f37d922fd66afa5e55fb4eac3be117d26ec51a1ae15baec80a006b88ac930a3fd7cc3439ff3a3e8b2ab43b87973db5413de52e17477cdfefd774a0bd64760abd6807ba46c6df65249ad93951d3a44404bb633dc32f824b16e8b5084533da338e0d3cf53752d8adc8116b790b0cdaddc4c24eaa824b95e9dd158a28a3c22006cc09119e0003285619362b13689b86bc59aacafab005029b8862536b68d7feb7d4fa29a9101325e1880098ea250711a655c088983f807704e347924e8ef9029b4d6c86a70a802031ad3660a4a02de88ff1d3a9e9d74406ea6e2e6bca50f32df5cc930430ff51611c50a926dcb7547cb66cf6c6cf3d2e03fbb3341c2107f4c001fc58881de159dedac25d4e70fc22cc9ebab2d7feb338a06789d501605a5fc059770534fa5bd3ae41f6ae953ccc822dab8bd7dd1792998dd7e60930a046a072006cda47c05072e441ae955a4e2816c4484658b11527263fc4546d9722e0f1a75cea9003d49eb218eb457fe471bbdf6884d13c55f94ccd61b86ac21bcd3b5c89cfbddc3cc89f86f36da75e559a4db2374f9e6d632358cf7f6f41b37d86aab1a19f9f3624c835bfc5deb9c8135fc669b1fa53c34623a8610a067b497e5ff0990ac9a5e43558f2f094bbf09661fbbd3e37a676117955e0bcdd617a1c410f41ae1afcbc92a6762fa92efea6f0969880049dd919a4bbe27eebd01b6739494ad67a51a63025255e93ecd895ac12073f32200c0cf1511c39c97234ec9e848864704e0029cbf8821b97c403676f2ca35e46928bbd64550be098cb3396ca4a7445c777329e529e4920c3dea39a92bca55300bc531252d13e1066d622c7a6d416de1685d088352870ae10f2d656c5fbcb9c9f75c944b024befd949397eb1b59f24f80e34764ed963d41c10937a657af5ed573ae0f6bf01f648b555fa0c9b87316719a4644244232038aedb81d0eb0d663ccee13db3177a25a6ce05b77ce433b761e5aec01040aaa68b80d595f5ed4b2b497336b387afcd9cc99fb4dee7b92679dfce28e85df0244135b492731ce12c96005f4175c2e252417259b3a51e36d45b6828627f76dc216512c0e22d7a202a6357e112210810e3fb83b30ae6a7cc848fb771b6f0fb9060e6940de0ed488c54696531d062bca7240021cba4b49a441837f93dd5297514142eebdec10e39f09df56e21c46c2952a12c4081fd8a3cd809c772e8d62ac817bf8afe3e7dc0d4453c7c72a3480ba2c26d7e00fffabeb8ae539c508458c008fc9a328115139dc87a55c2eb7f1024646ce002bc0b2b84a3ae1df81f2a07a02d319232e823a160a0fb3aab1457f04409174c200505fffbb6c5a72b460c166d0f716679ec7c457d911c83c8f42acc3e46863fd02d98b0425c3a182836d182320d1c4eea1b52e00adb207f78912b329aec97d8fc4aa45dc6a14032e611d987765ada3270b46c6f9d3b373190d6617435b06d89b109815f141da1e41c6409bfaa481e0d0d4b89bdab2811a8cc010cb6c7a883f823830c6f500c8cd5c451423e524ec00069bb5c256f7e11975334710fd04d2b00b894ea49e81747cb3eb107159788e566f477b06e00a943bcb0c7c43ac2493f1bfb91aa24b1918ff83fb52bc30f3cdf9e46a8acb3372fe2f97295e9e8973beb94cf1e2cc36ffbbb834805265c8911b64a22cc341d6590319e55372eadf4719f05e9c6f99ac97024ac2a9575b701615a70d19a84fe11cc1396e804958f910cea0b01fee37ee43a4fe6a15c5918e82186e44ffdaafd72602ca425cf12deb466142e36242e34a311f56e56ba0806e1f1b7d047f1911b4cd80afd16861c0bfdd44846c2291dd9b2b776b054d05660514093257d041091ed0810a24393973e0635af994c0864d0d78d8420d8250839b14af811036c418fe46063600ff060c181f03cc0d11dc20c5c02143dfefc9706f8c1a0e794e4afd6b0aeaafe1e01e611cc2f5934b295dba942efda5f4d8126bd45a6badb5d65aab44c09c2fb55ed256b2aa3cc2ca62945a3caa5c6ed5bdfc3196c92cf308b32bf3d9c96eeee011488888bc22fe23352446a1454d930e35962ddf478f1e3d70625e74c8bcbca4a009aaf84bb983428cc2e7c4232847549675adebb22ec6b02c77ac4ec723ec641d109010904b64c41a19f1084742463c1e12cff5d12c4df308350d042a015d222c17ae12175e78018617aedfac6df308371b03c7012000fa7a8c42862eb975a18bc323b8e1bf3b5f0170e8d00544808a9823c83172de0f460716940f544e8c3a947420451922d05246d56c80a294e083063cd840039a99ed0783c2710339a59cda0c2a00c1e442031f38989073055b4a1000f14141be3c7c6ea0b93be03c429ec9344051276418f923825c6764205321db9067c043c60caa40a3d180106631e2916f7f6b637429e38fbc74e5dfec4909618c565b2da374faae173feed831c6f834c9963aca6824602131ffbdab4493cf0a6481efff24957982eff8f0f81e2424da07327c9047feec87318384518c6ca9e74c14c52f914a9404faf6b602629c15eb50f62bcd1daea4f49facdf0999211a447bc6f4658da896c776e91de842b82e012b8a88e43cdd611d492d514a54d8af6f55316c4559a141a82cb5cba99dc05a3aa2346efa92befc119deea3f9b144a454fe2b19b97e1db8378b53779852cba29452aabbc9c24f3b3e6a5437ad0d78dbc23ae20d83588c128f7c637ffdc29bbb4f3c921b9352ca8dfd9d17dee69c73563ca21bfb4b2fbc516af1a86eec6fbdf0a699f27d2b1359260b0e4e2ab5e5abe9bc66d3c75a33e5faf42b4c8385bdf523ec7a4b578fb253e0b77e84f5893eca86d8fa87b12ec18f7d89f5281bd335608d62e4ea8ebe4031b2b57c1143eb0a1a0c607c4af2d443ffd1771619ef4444d294520a03fad557ef426667ff89ae83278a328ef2eb669b0c493c9d9fea26d94aa0672b814ff22826eec3a828c2381e55c1269493f8b8890edec9009ec7c40842e591c7d58e281a21794c238af00908c088e1f91898e44738044f248a58023804cf247e95846782afcff8fafc974e911f7991f7119d4951e4799257e17912ed0207f82e3eef79a85590909064b0c9dd24a4c3a8ad8920cbefe88c88c6a56b269e60f06375e32448f03b19c013c5effc7b2722cf76da61960aa74ac28e9f611d9da97ce010e0961d6976fc8f93701651fdf8037827efd5fab3d627d9bc54bfda3a8cc2b3a30c8bed1383ec71cef7b2441189d804f75dda4a8eafed90e39352b07ae8d9f1452001621c11e30f5db793dca4547765e375a2059574174880f85484d210d518616347ea8203254322f941ee686a73d2e69b4b8bb3ecddb98bf681912db7bcbd67373803049c848c23e0779e0da37c2eb1ae0242b812c2f7b493a006820c25490ff24842696f2a2c4b99e56712938fe525ff4a4b7e25adfc2aa9fc29535bbab6373cc8f1a554b9da0dda0dda0daedda0dd502acd544abb41bb41bbc14f805039fe1ba1f0172ffc491d65a8166e7c125071ad1b4544e0a3221e534c2d231ed5117ca8a5964f06c723bbe9c7a8debe545169abad9b483caae2a699a07e7ec8154e3125c5a36bd387305bfcf9a1e2510a8b479006bb25b4af56d8fcf943e8f983fba4cd2054feddb98cec3d5de28eb22fc53a94518a09c02132093c133062e0bf3ec62d8900feeb5560fddc44c5fd51ddf247f1c25852bfc6e82ea59c73ce8d524ae9566badb5cac8e0e0a4525a0b418569b876fd6b611d0aa5d4a6a8b4bfd034ab01c5c8ae8f62648fec915d35dda28cd30da3a8523b89f464d85708440124c7241089144a09a584524229252cd615bce0d802d80fe6a5b46f86ddddb13ae7fc78712b7e5d16bc2c7859f07aae043f96f0cb7a6c5b71afecafcb7aec7a2c5e11bb34663d089443f5ebf176c5e756b8156e855ba13a5cea5c8953e16a702a1c0dce44374badd3d596d61d4aaddcca8762e172ead4a9530f55141735440ad550156328546b0d857c50d906d80fa6871a1f68aa0f397ca87189b8d4a71bc8c5c2bc6a71c97befd5ddc5340b27617cddccd22de4ae429f6c4ba57d43251b228566d850c90a953eeaae7e75f577f7b3ada6a3f545da58c7c24939ab5ac85dbfbbaaab5938c9925f55eea194504a28a5842355899c09e6b82f0b3f7a9c3172a68a336dff9a7d80fd6052367a90e9a1655fc711a607d30ec07e30291c7c8944d1abbaabefc2c24f96a559d0f74a732bdc8a6b21caf8c95de2897cc7e1a90cb918ceb4af65299df152caa9dceae1fd6927a5d301f2a3bcf0094bb719310a774171c1953815aec6dd56581857bacfa95c8ec6c5b815ec769c69d397db33eb421a2caa4b2c68a970254e85e34cdbe2518ed9d28a76960aa5b27231d2a23f2ff875b37f2dae4477a4e6a49306fcb1a33bb6d754a9831b3ebe7eba3fbda6a6bcba63e1270b67fb732b70066e0512607ef55c299e70a66d29a5945bc11804a1a1635fdbbe4da568ec04ec07c3c30e1e5cb6683f181e66f0f0b2efc61f2a5dd429a594bed3c09edea7f41f86b736ecb1b75b25b920a204a47d3ca2b8b02c7d2b44236e2b2a9b43f6a395750ea5ac885f91644da2bb182a6dfa904208218410c2f8d5c3ef28d59d845b9737ac282eaced2eb0433456e4c7c0a696b572d7c7f0b17e5d4865576be587f5abee42a55dbf45b46f9d84cb16b26b61a1756badb5d65a6b339e93a4d221ab4baac75fdf49f35f7817746745e82e8bf812dd7d4a1ea4bbd7b4f61f7d2fd51da51fb21f9a0167a0bfad2d540a95f40afa19e217a608dd7d4a409ed7e8d74ec3d6c29aeeb619fb2b2c6cbf327946444240fe7da8a58fafd4be3452b9e346b3c548b6ebb32d3fac8f6dd6fb06c3cbeddfb38d6c225b48650a91a2a87e89483d8af69c0af09678d2f9eb69c9e7dbdce58f2d8dd81d2d4188e1efb69b8d7587318c752805ced07568b7d548b9adef5ac80eb27012860eb0cf02864aaacf6f726b73fe7cfe459d02664763ec57b9f1772de4c63efb6e9bd9598372c82cb0afbfc1b03d376921b7995df1afc0ec5f58c7cd8f9a1e334eea2a993d3f940267c0baab0125743f447a8a4fdcd2a693524aed46e17ea1144880aaedc5028a3f83ab23cee878efc95921a4b582d0561742eb62082f9c5dd8fbece5f75e7cdfc3470f1f3d705e625e74c8bcc4bca4a00a2c3df81e7c0fbe08df8befc1f7e07bf045f846c018dda59c30ba4b39279593d25aadadaaad2acbbaf7b2ee75618c6119cc72074464840424048fe026f26ad8f0a11662262157210a598071c3870df88d1bc8e041e959f98ec0819cb3488dc28edde5efe1ba0fd50d6ef0e0c611760c6bdd0af9bd6df7add4ee4bbf18e4ce4fa0fbd6d317f1e4fafb9e7d69975eba513edf3e3f443842403a39c3f075adca563aa54728a5e7dc4083e10517449480b40f8967442404a493ab09320c5fd7aa6ca5536a80053770b87163dbfd606ee4706b76fc1ba30eb995c83df708af74db8826f169ec8ecce33367e68c68ce40db626748dc9678e2f2bb4b23ed8cb433d2ce483b2367b61c796e4d0e9e0272769308b3977212359f68b1d8238aa2f511a7a09dbbb32de26cd1f2c41e3127e23c06cc8f3e9c8445ab7d6d96cb203d06cccdeeebadea336b671abb23f3f8f4f8119b639bb36cd746fa44217794646966ec77d50cd18feff1e1b123923a4adaf129299ecc8824eec787d3ca6842aa2a941a2f53d816f2f963807ce71d974420e4f3ab08d12a40aeeffc8552c6699d6659afb7b801d7fc6b3ea6af9f7fd91f655f1da7c8f47b3254ad09215fd55b5f22e2ed42d955d36dfa775cfa6340a25c51d6e0fadf92f72b62bc994b39e7a494d25a6bad45a85c6b45f8f91ef5c329a3571b9c4c5046697da8f42a296b959a442291423342a4504a8d16165aa2a63d35090824209048334aa79983738232cac9992a67aa9c0a57e256e80e7a436ba2686a3ff093f6033ff969da119868608fbff31209e6ea2077ce42512816168a6289a1288a83a6e84b0e2a134feecc0c4d88144a09916cb4d0538b0d7acac1d2c252a3c5c6c905454f1a4c3573b0b4b0d468b1717241c5b0b0d468b17172418552422a14d5c242635a586a9c6c5014c5c14251a194d00c6cc39bd52412892594426b2e1bee8ba1aba7edf25d4e2afc88e40cc4b55a0e72e731d5da1ca3e120afa87edeea5f67d452558927b4d2b8f6fd6b4bb5613915aec4ad404d7f501ff5059d2fe24985557da10101bf9ada0e72fd477d6838c8d0fe097d7f345ec3ad7034367d981d62a88f6a8a271df5e1312912d0843ffd5149f1e4c1ec50c3632a895b995d4c574307a1f6186ea59e6e8ae56a40e415b56ace242f913725a5f44f2e57bbc9f2716cfa1056932bbdeb07d46dce9539abf7ad82b5d6c795e60a67aadbdbee85d225fb69520aa59cbaa45521d3ef3c25372d5fce67b1582ef5c2467096738647b06b5e57c4d715228d7cad233f3d33f3ec1d07f11017717af228334726a6233dd9b736e7cf7fd69d28c3b4a7941c3fb6e1abd67a85481e2acdeaf2babc666b307905fcb969bc204e31f7bb7d2a82f2ec9788764ee085dd19c9f810511a37dbfe9cafdd643759d35e31b5b3d488a26bea10a9ea10c956a1dcc4bee742fb2344a2ffcf27677b2f7ad27a64fbde626dce9fcfbfa8beb5fef6ab1cdb6a50d49163d3f70b1f1e552fe2c90672c9ef65fb57f44b51c6dace4d1885d7709628a2f0e9c32a5569500e594f4a299df2aa011922e34a95335508b912b7c299b2af5ba63b146e852b3d6e853371256e0593b4eee04a1f19203a38dc0ac88b8e0f101267eaf4e8fc0081d1c1e15624a43db6c4d9f2eff39cb5d7b8096846c60f9a91bb6ada12fe8f281a79114552c4c793417e07077bd991b1d81476554452f104fec5c15e4870a22863d9d2faeeaa88a4a2a88383b3e56b50e8380e1c921e5b7e0707c74b0e1d343a76676b6ab815542a4666e6238379bc7862831b1c34768c222831c2139182bcb5f4ab27cb9d90110af280bbeb484827671e093f44b229a578626109777c42e4eb26624fd8fbe24988f436a41f2ad9edd11477fbadd77312216d23f4e4949bc0f050835c7294d93925dfdaecd15dfe88e8eef3b565c43e417588743d38fb6fb6b61fcc4b8e7de1a5c1e415f6e77ec0dc59269ee4983c134f5e728e78a223a74229da0fb9fa9772131b327e900db9a3f061d8e0ebed3fb46dd6c9c60a22e2a142c62837912f6d7ed10bdf8d905dadd912869052488c93d85e92fc8b239d9c9dfcff7303c3e6698922f9a1cd53e326f2f58672f9f75fd0dd081774271281511784511a465ddf619c2d7fdb4262b690d21622b3e55b2712dd8dd8d67b743762445b55771fcb3a6d295f934296efb9d9f2b19cf1d8d8f2adad0b8111eb8c2d6355d932561af2ab2d9ad025fc55eaf5993c3822e2084b961863493196d5e36c76a4c492abd101c932fc9dec3b137010d9d11d67aaf994b7d3493eb7c2ad702bdcca490b2f607ce0e119c54596e1cf7296d51c52c9e685b3adcb282eb29cb32fe119fe6d059675b20c247b909cb30c02821f04ca81ce07e9bc751222df01a9391301f910900eae19cb3ecb42a1d0d45e9be0ee9e4d3c1f8752328c2d9c61185b9f5d9f61fc252286b3cfacf919f6d649741ed35df659f6796b21b799256289886ddee281ce0622e5ebb7996d66db904ac5274229d95e365482faf2400e95a20885fa702b930d66f688fd606cd03273e0b0ec7c6ec55a6b337badb599cd5505b1b9b2d65a593790adda3a2b23665df52036e7cedbaced5b4c83b53b9daf7f3bdbdbd5631e03e6fbf61af1643a8d78d2c1273ab333339c1776a38ccb49bc67227d0432ee7416276102e52c5e9bcbd8163ec1ad541cb4169eb020199933c9bc00d4015007b4293886b37f7fa109549572137fac8ad95e9140f0f9cdbd2a7832f89788336a54a4287294ab0075134f2a0f9c77154468a2aab1a294e1d50feb45e5a37ad9a0e82f2016393567fa01a57a79a952511471341db9f31f5c70f80f27689d3c055dd69e93909bf5daa62908e4829923d217140625d119f124269e7c7e8252717efce12f1c06ddaa8f9e3151347fe68826f3e7fcb1e77b668f3de7e4b1e79c3bf667cf49b3e79c3af6fc69b50f871145b3dae41099461ff5defb5df4d1594fad88b263853186396770eb8b1d29eac930c48f17e41aba83def0a0afc671388b3fdc7eecf838da1072e7278a03c353353858a2ac14ca12c00b3e853de04adc8a64c27d31c8f7a209e44196df8976a5317ab4f355555582f6443482eff0636ffbc1ec30b3738864e910cd5ab420d479435508f9ea9c64fdb454c72ab80c0a47eac58484dc790c484566880b3a9d38d3e662b812674a5d27450d23443a854a3f851a303a9081c9010b42251960415301898e3be38497a2c86a54c8f6af77f66358ef253c7a4f24b25f6109bc67e2329e89fd2a57b8b2de67e091f595769528b23ff188929e0cd657f623d67a644b97542fdf7cafacaf6c65dfaa7e6e9eeda878d2f9c9b32b1994cb928db24221515104e7cbc0f7a9845b03bcd05d4a592acd39672a4529a5b4d65aab6fda15ae8083934af97685e85badc189c14d2613ad733351b7f83402d1c48326ead6b969de98e6cd8fec26937d31fdc89db3587b5a424e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e0ea8cef83f95eb56468ff3c87e7d8958c1d8d10365c4260087b8bebabe7a1557e7271537c228a3db91bbcc76445dc6dc741bbd06bc4d7589fd15d64d51354551ad45616afa228aa2e77a0b2a4d0bb9d3b4903fc29a0a85f801227b22a2c807b9134112699edce411721441eefeadcdf9f311ed48828d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8dcd75a1e8409d8b9b2d75371fcb3fb7ebe639e74badbb7b6d6f63a64b2df921f2b3ec3d6f1d10f212ffc84bdd89e4fbf3ef46ef7d12f9219d97f98ee010d8a5e5ddeee3cfef773ef614db24c8cfef6c9d8b1b07602f75497ef9f7e75692fffa5992358afbd75f7fbff3d74d67ebaeaf17ff7c100dca214f8dffea15f8b35e41f272eba67e1212fd3cba85ef901fd15244b7f09dfd0cc932795d57de2cb1bffe66f2e785e96e7e0bbff9a54cc9f23b2b4bcffa69fd05753aba43e9e4fc59e7cf7690cfdb7c6cc357e7b107751fec3b98b62ebdc2fa9bc2d2d7042f79bbcfdcb09f9de78d02d9d77baf8b9b0df220ba63f164e7b179fddcb0ef6cb9cbb4bdf7af79dd683559caf9d89770b9ddc7c0aec9d7356d8c2d0aa02cf04ccca9811e52609a1ae801052722388c0c4cea04738261c96e0df06a2d884c0b02945282296599d41d4ad65863bc652f731059ca0ce68516c48920b4205eecd084d0945072dd1896867214a3f54c219c926efad3494e92efe57bd1ab9475ce5929a5b4d65a6badd65a6b6dfd5b5d73d38c90e3bb11dea86a39e78fea9bbaa4befd92f928dbea1aaa4631b229a69138d260779752d2543ce79c1a8dc594524a692aacd1e4f88e83934ad1547864313c1acd9f1a45870189526387039a1044d084d0840042e5c5c7bed9e34a34c0f8da7fb7ce4ff86f99d6a8442ef645c164332300010001c315000030140c868322913812a581980e3f14000c8688486c469c48246290c4208842d2288308180220200030329244410060a2412006186c2d47a1bf6fadc9fc89dd6ef33503d59f3b4b99f3ca565389604a018842cf492c225b24a8b6798de55303f923f1a840705a46a657a2aa694209c6020d76a09aaca521fbac9663651f499c8a62125203318f46c69dc26761855b07dfcfd84c11b1fbfafe8f89a8d27d4b20b15ccf175963c7f9b669fce59f3c93469b4dd55bb40494c1f21b64edc23016f1084d82ceced6ce41d6344f8a6cfabe6c4eb01bfedebea7a2b0805b8a3873655ce9e841141e2f6cce1eda83379d55448558b8a2ac4c6b4016162814beec003222576a4372e1e71ccfd4b403fa3fe3b90def157359b501df5f964ab2df2c5bc854a70fa80452353b7ef2649043f6dab351eb617416de1fb1c44e29e558ff82dfe0b133bc1747865acb04f6a3f6064099b383f27e7587ed7979c51c8f2a4c03788a26d2ac50c02771022608539379db30f7786b18bf7738c721a0b11ed7dfdfd6ecd5712e169f4733707f790be97d1dbdc27fc9c820c40e10ffe53a046f7bbc30e90879932d6449aa985c6afc1e7ac8402c5aba40a5af0cf9a997ee5b73b9e023605ca182128100d9314211aee3a56a744cfe84618e2bb5f6194367a9c856b9cbd85b260cd5fb11a6722e0b5c6822228056543854db07fc82851383935b860ff9a9b6ba8e3745f575bdcbe94c2b4fce07e443ef2f410cf0ab77ba8b667c3ef74d678f403c860a792907754d479f163b307eaf27b96900d46f242c3c615576c4d64c7cc3b3e311f9c73882a4d346025c731d40457bcdc33e4fb5adb51728357f44b792d07f9aed41070f74f91ef0af7ce76a910d3c7a86b06469d17d7e27d40c5b457a7be5408444b5ad6a6a53a02c789d219fa18769a2101d804c3939c74f60dbbcf2e8a12bd71ea1568d26de623b534a3df3834cf06cc725918ec74e13ad5919d1413961cb6134b8314f4979a3db3b64690b883d543e27b3ed7d3be3b1cfb70fb35625050abad896992e841311c8777415bc6ef7271efe4364dbdeebad5eb6cdba478ec4df3c76376460f973338516895c70d9f79339e5302e7906192bad8dbdeae49cb83544ae5184d41bea67ca535ac766fcbb5cf2aac788640016286f5c5c058223541b37c3d2f72522dfcdb25c8b34d974ed8707f6680a520ea4e446a5d3ea8caaf6aa23ae40ca40ac4c80b5870acc5f1356df5032091ee226360c99d87f0a7d003ca96650cd03a56aa2236c28985d3251756f881e9a18e2eb64ece3cd90155281f0183ba976a9405ca50270e854809e12704b45754744f6930cb4e6b054e77b29de23ed97d770909f436bdddce14eeb90ba0a1ff301da558c0b83a2b6c22f0e4f72e1f6b643bc3f3b3aa2192c89eb0f1ff226ccf29c16fbe2b9cfb2d1841e423576b14d6fc2a49ae4a4d866bec33f94a2ea314f6e641411d0361c0727d17eb5848f71069dc9a8accfb257d83ea5a1a43febd236b413a43e91c9eefa69f2d5458e0ad97aa42c7dcb14c16ea915cfda9dfc35973a205d45dfe36f0db86d3ce9200dae687b5aa183750694d29ec20ba1abc822aa580cfa7f7dd0e0244e9484cf4afc1dd456166a98ecf66b3a5b2bdabbdbabe9355e5b04148460de51a6002c58e58e57f79896faa0562ab4bc1b555f78f8d664125513d2f900d1a8eea035359cd553a395543f48375b0cad49f8cdfd54d010a88ffe636b33c7c25c63d523ab773a0d47842141586b47f69e1f918df42653dd4466dca6dafc7f38a1fa8d30cb723053c3b57bc2db617c61eeb36816c412ae5d46a5d1e3c4b35c47955d9322f37c4e683e7072b5ce59ba06b7b80e76a181af7f7cb39c317857ce9c478c62296fc65c118aa616f8324bfb6a4588e83f4d6cfef58569df38d21d8b0ed04eda087b8ed1fc68a9ebdcf6deaf5632579901c6a9c3890497a1778818c2d60a88aa72fcfc698626094ac50fa3f3d5632cb4aefe622a02fcca32b145f76309b8b837caf3fb4062830e16f4ff293140e6387f00b4294d8f1d551cf33398ec74bb259756d3f2e259a2c743e5239d54eb360fbd81ce7071918f63d7029c8f3ecc3edcf861464f9548357da74f5e159c1fa6043d92ceab0b0fe7f48761b12ec04bad4fda92a32af687f1992d26b999956a7c3eef0ab016bde8a12166930c498c4ae3dc148cbbf5ee4b76aebb0c26ecfb77df91797fce13e6565f806de8b78d46b7604953704a4309fc966e08196d06b5998a4a73da6b4f66c83a584502ba215d06dabf4257efc7048c0a18a6089a0bdc5cf4a9f3fc91390de7657eade0051a3b4296fe793e58dd6e8e2bee9364f8b939484961cd175decb881ac935c163497d5e4b125a7a4c2a0b2b75f4da149955591daeadcf131a903ae5da5f69764f3bbeaa8cc61776c7819a821a737dcbae051f3fd93416a33c542635b0e65bb18c0cd8932226db4651b6c6e57e577dc8cd009e93f6a2531366c4f6d958b144e587f9bb59737a783b6809ee53a1b3c17a455b686973333d3d2fff7d15a6c58c7da4ced6f58dcbdecca554eef84fe5780cdd20784b3eb723e1969e9c67176d4ee6f7dee07ffc85573d39a0feb7ced0bcc224829920ae796472a115f529187162ad602f12c804860fbe63f05d39977794f04f0860ab9eee9ca831c4bf208522262757ac9a1f4ddc44be5db0c6339fcb585af4d182c583b4dd162b28a1583166afa65564991fb4d52130311fb9a900b751d5c3a5f9fdb46f274115145610634fa8f663857766644d5bc902a10b04a2815b21bd7f1e451932918bc396e950422b1da1fc5163988f52070851f26a800e23e4b1cc0517f5383f0f27194e84307c380034e88e53753645fe029329a97810c085994c4efc5398b4c1166f1e7a7ec1c53f45a541c4d88a4d128a6c2945304c45635d45d2379bab9693a6ec33610d572befc043e83608fa01f40bb5e48ac40bc366287b3ea8548f1cafcbb4b5e58e379d94916f42e97996edda678f967713171c5655aabddedd287c25d1817ee7191ae7929f64a17620c9edc3b06b88c9b81fb1b4f9f1fcb23b29ef410422b68ab317f9decc4d1fd93c3ea98f527d574ef6589ec2cc1b68e95d52a35da101d8d42cd9acfc030b55aace71b875add37ec27b532e6e5f637ad5eb2071993985639957fd0abb42a1eae3b7bf2f6a5a86912bbbbd8ab1f79df207dfdafad76a272dc92907021a5be174fff6020b618d798601185dd4cc4a6d6b0c6799a32d986e0eb526387e4ca63415ce4757b6c1c624fcc7e58ce9f1baa352b429b0d2d0bda3f10efc61c7be06f297114ad9cfc7939c8e61a31beee1d2c10905ffc1d3a70e2309f7fd498f1b1c617bd80000d1a3c2850f86b6787813366005e8f66db1891b29a03a75a6984b95d5b7b01f4da6c9fe02d80d0e1e574e8add55920b55c888ab73b9239a8845f08ca6bbc0284c8eedecef5ce812b8b34400779ca28ceb482646b1941c9f40aa2ab5aa75824219acc5abeee8d8002c18034932ee4b8769dc03c06ef4ba89a81695efe5b6b1e143656fd4bd2286365223338c115e0f88b0628a9269a7517e18c17901cabc53042d80771bde86a94eba5bb66464d4263172fb9b7daa6a315c6c40d9c1bd35c43e1c8ec1a56c144ae16f4b2286573cbf09b9f60b98a78f9dd0159de998edd9ed02118cded195cac4267517c400de7984f39d61953d778e8cec9d9af43376009403589091669ebb8f44c3190d001bee012330e409a0361cf2e8590783db380055524c5ae07c4c92b08e16a1a98a8d90528097c3548b0e0eeb635fe638566a28b601bfc3e256856e94f001ab7bb1b78cb7eed0ef1ac8d96f7a1a83b3d5ab07f79bbb27a95f2eba90e1430097ecdc2923bb52520187df5814add7865ae127a2c069fe949666e99223c9a6a158799445ab600bc215bbf3ec6fb3ca67585765f1d868e2b72dcc6001b52ee83f00a5bdb7f03ecc98a7bda824e4b56d1736bc15703804e46d979405a19a25a12d78f65a4e3c356e4cc6f34dfdb44d287230cd1b3a93eb65eee402f7c300afcf0cdc9035f07a91ce3c716bd810207ddcba79313ce1d66738d1a1d6f749cc21350f041c102055a7ef91ad11ed7191e24f919603e76931400ec00099cd9a4a3e16eab5a0661cea2670d3b412a2ba875e92a545001dad32b2c13030596e823ca11a4b2425c8207a94dc16bf65c6398fa20f71d1322cf442aab1520c05685e65fa5b262cc131dbb97ebcf6b00d70df4fa18ed52343ad4717312b9f5bcc1d0263aa9ac35edc66a0848f916f273442a6b6d531060deade5d0de69c16e15f0fe2afb87189eef320151a4b2264d6c5e9817a7c696a5b20a37c0a19a97296ce296cbf595ae568dbd936510e5eb4b59ef6684752016667bae0d0a83d0f49a9739608ed35fc24f2a2bb6789b5f58c4177b92f419014c153547eedc114709f8e690ca3ab945bcbc53d41628e094f782262ec1462aeba3f3a86ee8c1d96661e99892647dc17fdd2cf54147774c2a2b6e0ea9fa59c9cfdc626a1b57a1616287426485ebfe29c4907ed68dbb39545315b588ecd7974ef3bed05ce6be3c6595ef0a1a4a992b2a58fb41b6f9de4f1c00c89eb2ee1cfc516d72c1cfbdba2f519596df3c651d7b1165a7551dd0abcdd5e3779994b24f34bac57f70510214d79d94ae540af594d5e0272db3dc6710d795980b3514e6cd2143fb943573d9cc6d3511d05be63c99ad92ad5fcd75413314ee8b606c58a18e926a0aacfd3ac7af5c8f4dc71f8a61560e46704beb296bcf782be34146c19927c4605ed659fd4db755b0bd30bb216e391c62ba81d65f4c09f17264f4349108360d7f23f89415b67275b43c8e84548dfca65b7a0ee213db5c6ebc8744ec8025be91bf33f50dd5aa8253148a1bf35356891dce75aeb34e26b3c4c443b5db1c5c0268c0693952dc0c4af7d68d7ea230b4c12399b0b98a75043a8b7e14c7032f1469e055e8c2fbbbeea2e2858736f22f2a533fde1846a5e2371f8eeb2b0ed2b747ad1052ce422b5d3446c5c531ea1ebe4e3eb17a31a3e6a658f7198a04ab7f98800734aa443510ada85137c2b6646fa5e24d2ed6b1f7e07c1d76ca6bd417301a9a5abafe04158af1be5b1d7ca44db8b6517b6cc737eae8ac058ba3a618c4e6a8dd3888bacec7ce9928ff3ce560a3e7d938bd216e0437aa885e5d07c04e631f882c7f807adee452dc00ea8b23165f2464fd83345f2d5e349dbf60c886b0e43cd690db82fa7cb5d8036bd027e889d9e10a89fdf423f4dd01b48e8fe04e4e67269d1f70493b80abe5c747c8fc3094290127765701ebfde5bf3064724cea96ca8dda1ce40b4a341fc895abf4a4b60f52814383c1c24c7588a8d43cab7730206646a1d78d513383e57f3000aa03e1f15d3451243bd08730c85408c283fb6811a23699272ec2e0592508cf3723448e1cbde72d7a35098348ad93decce4349da5f6898456480880dcc262695a52798ebe1101d6e7c091a31c6acf7113241c691efcef295547688fe796c1e27d93ff5ee0fe15fe88f58e1eeb081b78850471f15ac9b9f3782ec73f6110310e9d01b542d23e91e92a0e39d0c588fa3a377331c0f82b00f6ac654f204989437aa86e5a39b1f91b648cc69289c31174b16ca6d2608370b727feb8531cee723b29b8dae1da6da1c855db99732e42c2e8fa849343c4910c279fdb38cbee4d96703d04f78dd6af31e0cfd3748ed2329c6d62a22ce84d0c410a7f0935a82d2920b2faf7cbeac3342fe438236fd4318187c456dd8373263075fe285bc5af553d1ea34fd1c51a2693303ad31d05e83d02fcae01565ef831e518044ab835f1364ae7135f96ee41501350b5c747d20c212f59c511d94830ef2ea0cc629791f6fc7ef9a1477aed27f99b9f7fdb58f5ac410f725b8e7ea785fd2c9b100739652426c88ed599a9d2498003a45d22c632f3bf9a4e7f9c1f4c4cce58bbd3087f155bff2b1d1a284daaea0acd96317f6da2a580b7c06e043a566048982ca74d024c803d5f0d0d361ceab4ebd2f2d23c1cd5715f03760e6d386fc42f7339a4d166b730a7d89ea6c2eb4c443a363340d2f8b715b3cda744741d9a382cc9de95f3c8e9b96104c9532f0e252c5c4a13067839fa7d7848ab03e2990c46a949a3ccef257505161c48f98b92de020f794307e3d4392db19f4009ce0e9b3807f972a3c364e923af4f90b6c88fa6e0b16747e4c3f5027d9f04fddd3790eb6ae6c81508aa90ef3509e05d3650e5f23d5226f235b80c146c193b252f85e60e5b837be611f7b527cf5242510c03873fbf18b9e6bba6cb866c8f8951398921639a48944de6acabf137ed5a72ffd4c783a6619ce344e613dd6d82179246c2c62b57eebad1aff918c51c07c1f0510278792a45532b0a9915ea089295676d7d3d48978381a772f5ad92788b494bd84a114caaee282767433a189006a7f09664800a9d69852a40c74913cab71e97d2075185e77c7ee83540ff5fdb16d5be2490f1a3858695d5e33969be348c1973c6a9cb447c77cfafb41529351341589adc2186b2dc3bb53e6630a88ae07c3a090906830ea675c056456d55e4aca66c87549c0df4379e041e2cda1ce41cfdc4d0f468fce9f21de4f84d1a9284a2a80d058437799b2fab11b03c9e02c61a4b8622f89aaa7e6d1b84fc7c048a9f60d6d989625e143f87a9a3a4da32a41e06ce86fe34c02df31dc2fad357a4c57652ce037783469876e475fba8a536f3d7c966c10054ad5c290d9f03f149cdf0f6285218828d660642fa9f580a8df6c7be3724e8a18a885d867efc6121ffa267ec3f8b38feef9b4c0978f9f94bc9f2b45d3fad32b07d772be08cc0769580b16c7b781d24a2dfcbd77104e090dc2782311ae1418a046962cb354f3e2dfd1cd539363300940e8f29fbcd76c81763b80268a2e388c6198f0cf5d5eab05602c664444f5d38c0b7cdb701e8c11501915b56d5bf1644c819caa3fa9ad74e196a59f7714eeab01ac38d4e0387a14a4abf97af5afb4161bd00b68a1ff03a001a3f2e82cb923643cbd8b6c6fe3d58b4e994771a016824b5c53992b6b1930af150e2a4bd6b2cd826c4cafc01617692a1a89ecfb5eeb2900c65cc65638f0250f45126224990bd96123d49f7b74dbbb77484cc8e929e774fd95109e7c7feff7c30cea44767c5a9353694903e38b946f47f8251394592125662ffd30cd34709e17b58f83f2f2786ef743abbf19bdcd17124a2604336f23f61088c36559b993106bb078d53f5fecda582a092193e68f0accf43d91c4c03ffb32975c878842086a25116fdfe13beeb021557d593476e069066f7fe333c3f143d84626e08246386a68c9913b2e81873af3ad558dd7fdc4560d79bec42315c0dbd3ed7846625a48899aa9c935295849c094f400261b1b021b5f050d56fd118e4834e9ac20a823fa0fd48478ff4eda80a69c034a6f1934d8e90065e8a453dda55f216a4ea179af822fadcec36dfa6321a79f4f8984126e1c473f68cca130c1d974302613e8e7883fb1141bcb06f0041280fd86fda94b083d04e8cf8248033c2b4c3f65b8c63975d950de86e0188ab083d03c48020f42ed74020673501b6d6c65410c0e8682aa9985873e081892cc83435cef6b0565f8a5a12ce7f50f9944c7781748f004e8aece6f8e62d5bdf58d5e79bb9eed724a884f5ce459eb360659ae15bb029a51bb761afcc773031996e9f0226371ff9a101b1839116386253c95234d5e5f15d56515a2f1a75a49a0d9629b68bff7403aa60d84359fa9e7fa39c69341a8b8a24670164aaf72e7e605fe8d88db98e90671025f197f004c0e0dde9293475a1df3b1d5cad173180a1d6541cc3768318270a91ea3d9c002148488dbd73a6560557258a8c41b5c31595120c6c3d9391a81c8cef16cc66efd3e8c6ce76ee50c43ac073b4f13907d8c77eeeb36f593e22f5dab57d08230f67d2e3d74fba25309a0c8c749a819bf42a7c90e566106fa6f8c81f09a70457a50e1d1c0ad013a875f06725a9e77437a39f3a3f813677270905cb13b0f496a19163d6ab31e123df5883edc2ca10c6659653e5f3eb75f2f3292cc8e407c23252ead49481228af6a224390b691305f49187bdd238b9daa8b58da97a7e9f6b304f433f233381f7949847ee9ae2eca8cd6dec84d9e70264d46499840d7117b556e46251af45f0b6b6923f1f3929192e7ebd5d1ae9e0b485bfd104b546745a75ad2424a0641a4120e67e979f18851b6b1594e0a058f6e0fb5eb97317f45ecdb124f22a1a1b712da84dad7046947299b759b5f5aa49da26378bc90829134c50d82666a35442d9d7dc1b0284520a503cbf1a553a51e85b717e510a0ef8c3b2bc4c154f69f1ca52462f0a9bb0f9fd7b9f7a9e9d61279f2a89db3138c0aedaac694cd0156ea30cae7d26d0a0f8d3b0445af83ba879e0aecab7fb6032ac876548a7074762ce73210d919d3772ce5bc038110672afe5927cee2d7d440c80e044bda1f9e1da6896720711e9b7ab6640af112e5decc7a8cac3ea21184594f616d0c943d3f21fc54844d61cc338ce1ba9f5ab096f383b5e6771b02b203552677782ed2f30ab0cceb256ebc9553e2c3a37f93493404ea9c39a300b687802f7ac740660bb953b55eb4b995317d17ebbb9d170f5e1852d8862ce2296c566f0c9166429584520d964b091793502379898fc8877f277d6bcf1bd76b8a6f1f226fd8bf784c0b5c66af60a00f8d53f225b6fc4ce73ee3b0d3b3026eea7018940fcc6127f3a747cdb29281bf15fc185365410c6d226b920628645a211ff3e9f606ccb67bae0c263fb7569e17f7efcc8312fadf1b071b4507d6aea03055a63b42a2eaf12bed2ae8d8b13d378ec915b4816838ecf68f4f003d84c473212c30d89f84966a1e07ac828817496221dd099454f5a3f0b724528145ed910ac6f0f22f45c1611289025c2ac3f80878f4a6317a5894451a620c2119300405802506b688e4ecf1371e5e11e2f57c0219e3ed0435af532c5c8441b28f0565cd40a21c73eb4d920fc869574cc36a7f85815be03de6a720d129364165459479dcdd960958332a9fee1c8d87edf88fa958106635c2a559c27263f1864ee5a098264f9c27e9797925453f6b41270cc0f9b16fc6c86f7ec41700da0d0a900c71cb67487b687119f144bafc438d751dbc9b6b885a997bf2ffdb2c7555ef5c091fd9004d79a7726237cf0feeeb73ffbe7fab2d6d2caaba1c1d150f01702e8a9651a217114f359951e6c489bef3ab77eebf7c85006fe8e87eb9044666eff40ddf06f1433834e507fb60be9888045575dd17acef55ec56d04ed52129ef472f1ac24f0c86c94485846edab18de094f813aa69a71bce98d54019cb2dc45a34e7a4b14c7657a1ce52e53629e894076526f74cc13c8f957bb89012f3e843a09bd46e8071d821c8f1c41020e16be033b01b7a5a5f304565aa78a8b8c39c72a3cede0f6483e1627136c53c699fdbc052bb5ceb179093a116b125569f43be1cd8651255a45839fa56c642caba3fa8c0185775926b0cc63c70152dbf1d69105cb20c3497d2e9b2b713544895eb8686552ee68e365276752b3ebd720c4a741d511548661f4d35894281cd4828c1772d33b783cfaf0f0d16fcb45db367716a30185cadaabe8d3924011e138c554624acd28d528b7d0174abe323fada0eb22c852f713977e36888e72cd1794623540e0ec95604d45d146a2f85ac07706ad74ea74c2f97ba7dcff6470c5e33ead6c37b89e4c1256d59182d56c27d68cac2e4b521a8986faf0ae4894474ceb5ca5e2861e2f19798644bbbb7f646c3a1343482464505ee978cdc731f1a7a8180d65a0797424b295ab43e15f3d201251c40c439b13bce374f07683f9613912f03726827bcd5c1e27ef4629aced0f72e7762487b708e16f928208a9fa5a4aeb5739bc38c3255842dc16c98a2b639e599eb183d09caaeadd5146f11fadb1f0869dec8f28ff7c19e01298747d826ba490a6384bc4d7c415d04253008456bb4b8185ca41a1d602983312145e96eb85ce4ded8224e407f057ea66382cf9e58ea364b324726f1a9a3bcef154d5246f6fce8a54cdd36773a2b5d489b37d13501330f2b3027fb74b336828b83081796e0dd524c8d84c83ce50980006c0ad6f7cefc67a0323caddef0cba192523a866ca4c5765f1a787c7c9d9b69632019ab942c98e5da551eb4a95554f0428e20b25bef97ad53ad70da348062059c17cc0d50942d38d744ab824bfdcec911cf444e06b058bb5bbebc21b9823a26f4c0b812707423de40711bf4010acb45cfd8139dcd3dba086f69f67d96732bb3065560e9a7068d5a2c8c1991f2862d3434d2fca11cff8418233c906080e74d22271f75407ce846ecae68620dad4850505ce44758a17952184d26c9bfd60429a391bd1cd28c5c1b8221bba490587bc0f875642eb1fed895ba19b51593a1fe73c11c68900fd66d2f9df8e95cef115d7ff3164995c9e1e8d2723162ebe81487c5608334f1d0b6866f1d52054299f03dd0c4d2f11849e36e974a707c5af33c6dc651d410b8f31479d4df88bc50aefcb44b08971896ec98ac992b81a0b982f227e46a35e50ad99391c2d8a7a87213794f5cc7602b2cf98017c8f3afdc8d6706e0a0fcbcb7a0456c7c1c289720b0945e4b6eef62118931c3a07d588301a2076cce2e01ade18603aa5d1123e79d757de251d151ed89541f73d1ad144850cf317a594223e78df132e1f1359f62d5e177a831d6668b4d290f8471ca47900fad36ed3eab41f4f047bb32d4ace1c48ca73e6cb1237b3c9879c69fe515d240edab562b2d969996b08460dd20fd480c68a8c695a40ce9485169aeb4611eb1c8073b108be5283418c707a1d3de6a057bab1a55fd711f3fa87b692a69704070d263c8ab6dfacc11a83fb8d33cb9138ca2f3f178de67fc6bdd381e9abef0cef547bafa58d795481431b793d2611bbe1dbc09ac914e563ee0319be072b3e73a7974e8113d901a7d27042790e9d6a3ccfb01cc10b10c23aa2adf26288ca41f20b22395df3edf3b56b4e71fb380c0e1a2a6c0313257bf98be2cb83bd736231c5a251872e61d982191bdc91894dc30547aac17342462fd2b4907f82819d39759d56cd63ddea283223a268d1b4cb92ab092be07017cd3a2e6b9859ae2e9ae27d7e185b781834e704711ba902eb905e86b6680e28bc624b1126c68101cca2b99d35f90e958a64d17c3b2b2bc29205cf49008c5905f46e138b26e7867d4e73116a4dfb925ccc55a8df5ab673f65cd7c8fb32e7025b1d5d664e43c383c3fa197d01c067855a15ade99cdc9439d68aa6e6fc25489d6db6abbab01569100230bf6ab25249b2d21159087fdb6e45c285e5022f3b7a6fb871da6c82e73516abbd3ea2a57993e1424edbff489794cc4cbb3329d6dd58d8b9647e1d058a6d817366be06ddcd8804e657c4a0252a05996539c47054281f6a69472c5daf6dc61bbcfaa2658e68d4c2358975c634c7a14ab41695391cdec98b8ce6586433932f0d0987349e11da63573b5fca25c03c604dff027ea76350d48a4e51fd3446b45e030ea11fff171e75646a3306e9d58d414b48ced898269b8f71422933c9cd191e08a51a6aee611d75af954e1b0d2f3aa805b1c77d25f576f434fbd0f15c49245c2c461eb25053e8e889a917cc029e91ce15aa426eea4df7d147554ec055d947d4118494c8e8adeaed8765acc4f14d155eba7a4b76ab49e024bc1cc1f2c01d7862e198d4324d0766fa6a1e6bb586861355f110b32240ce5fedf694c59acadeec8c1d33f9822026a7da00c7cf224cc964a8d9f4a65836dc7e9aec1a94ac65bd1391d5be79537a1286ac3223094c0dc8a43da5019c3a1de3f3b7850b455d88f4aa59bc482b5605272a2a0cc9e3e94caca4decc7800cf74a15376335897569a4005bf18abf900c3adc06847c78591841722ad666ce7057d6f95040980c87ece51d982fd0a4e006390266b16b930af281cae2ae6f86c741522e8ba1630e6081080bf07741fe102b7d87481d98e011ce8981d42760cd16114de3d122e145bd9463ec2c8699eabe62153e6f5eead9a97d1477b31b387ffaed9aaf9076df5828a66d0a90cd6cee7e6426dd19d5a3535c0949e25008e8603edd316eade9401102bd290a12a56df95b1458091fe238afad23a7d5b3faec89f0f23a80088e1561202c1e8d8295c1426850b2af6a69af7829fad49a3875409b3e82b8f83f86ace67824486957687b514a407658d680d9b215579ed2914a8fd74b4828b8acd90696bb652c145b8ecae0a5aae28ff4e8a0efb22b0fda19a223ac70d2d60a5ee186f65185ccc4888b37077d4316a8b16dffdcc60890538b7e3eba3ce3787468e0d0e4e10ac5576d673d7d6eb034d2e65532ad4735ec017ba1d3360070e9fc661dd68902d10475a86f82991306e32f3adbd58a599867a1ec1c365c195697d25a6d1688ad0a8277b632947c9550421b2710c9792a8a0afe2b48626967fb3bc6ad92448472ab840a4848b2c6e79a2cf34b57afb97ae45a1c41350cd5bb571afcd7e8b90d29e458f545bd735bb3b54838a1c74bc6914f1ef57afc098311993e44d5c4a796feee3340701a078bdd0a9563d22a0545b426b6f2ea9c51801ea055af18f1dafbfcc370bbb3b7cfd2f3ca5c95c491273ae443d402c38671e87a3039e74aebb442975dae4c0a8da9a8c30f50d73eb0d498fa19901f48f7e644b46a1f28ca6b70c2e35b43b5d389d3a9c0638e2f117c42269f7460914bc7a531626d689eaa91c7a2769e30dbec52d0223672788aec49bc66b87405d51e387ad31a0639b6950eb2fe208f988f251bd296d9cee683baa09cd6c2c8641eb1e03b24a840a9bf12fa28de78b0a26d8d72cf86188026da55699b02918adb1235f12be817c5ba264562536dfef39fe52b5a887477a6018425f4f7d0a2e749008848fa5ca517d8c02eabe9e4c5be0db2a425c19033d1a1f9816dfe0de8c5c57c9509947351d1cf537a1742c6fddb9d081d5bf062597db1efc8035da0b421221591baf291ea3a1fb44c3578b695ae6114e3c46a9eb5da96b225231bdefd3abb0b0394eebb2e10429bbf59a5bc1554a20266e058ae91c3dcaee9d80f2136edbe3259592405a9c75308c4e68c179d583c8a4333841669c67f19ca4810ae29049bcec191358e3198430da195012bbc7bfd25ada978498a52c0e98869f0084da63a0158e4a29fc37a91dbbbe5f98244af48145f45e208b9510b6531464a2a968604649d88d140c7b57e0246555af466762aeafb324c4d3d8ae309c2199cad4a3d7b65df8c66bddd763e15dcd1fa93f97ef36a73460a69ef47576438d3872403b8fd53f6142db784b15d442956dbca716b7d9961b56d007cd1b755e678a79e71ff427a4113752d26db9442d4e773c84923934a51b464ff4c02b0a20d727e0e1153d7028819e25a081096834018d71023ac151d3d9a1679ac0e02e7c3694d3252c8ec803fb81a2d79566681b20687045a3938bd54d5a11334ea8c602aad72e8da6ec4186d0c87af9a265cfac92902a3b38ca8268e1313df4818641ddc4c510042ddd7223874536d9bfbe1ff3ed75ee62ecca36570843560574bcd3761476ca510518ca82dd942e41f15c7dc6c8cfff937c25caef7366f7b750f54fabc8d5277163332916b142dfb5debf3dcbb38e59e42d30743aae701c8defcdabfc1945c1a16deecdfbb6113555927afaeb16b9fdcf0ef609193cb6db6de99ffd670e724d1eda532e4ed96b0b89ba016c633b22628094b9630c1a77c7723e153d16ae6b49c5baed33c57e55c9abcc583ab2b46e2d240048b71725d2729c968407477dbcc7713da60c1bb0e88599c9473e38f48a620f803c6159468121fb37f58e49dd85c02159097b0127ae0e5314945b022c2a111d132469b38e36efb27dd8568b6541043f87d85a868def400e033a14084d2b28d4e581966ba0b74a0240a2ceee27d789c045101b504d341dda9c08d51a6fc8d9d089f3c7ad3d5a8f2363600f089341bb10825412aacb3abfb131b3cfd8daac34a64c79c61e4c98b688a315745e7a9a9fa8f09c5b0d07708a942a3d0f137603449fa0a56ddc5b7439a040b2da014d1a3f9a1e963b7acabb30745808d5ad0c08ab9d11e579853774effc6ce0aa96addbfa6df9e867910f1eb900fa20814ae5710040a3750017c7f044ca1a735ff272d1342ef12e91bda3a791cd94ff9cbe29cd495596b51ac243716428ded4406733a5672c119a2cdd703b8612a45f2718071404eebaa2c5dc668e37b8b0f68e4e8c485a50b9f65aab1805151576bda245ed668e3758be29213a7b8fb401fc1d3f3483ac02f02e32990e1e7086682e25baec05150c13b665301020f75c2c910faeefd1d7d10de38ce1877a8b081fa87ed93fffa6648367018156ecda5b039a4bde4d75ffeef3967247eeb391cafef1dbcba45f7e52360fc2f2bd905a7ac85c1d74463410647887cca706d9c8e2d29dd11b08decda82653acf6dcb926a6fc2480556f413870e557c47c5332b2af43212eb5068d1f70a8f2264112654e117aa56dd290c402098f5e70577d45c899b6a35682660c56e4b197c705c77da718cf129c81c5de5fafdd2b9018e3218f13b20ce7dbb5eb0f2466d689bd2d383efeac6224893409afe654bad8376a14dd6338886867b03b010d0bca19d0105053a7ba9d19a7271c3dee8c202a541121ae06dcf1353decceb6b733810b36548631c4f6bca1a7af068f030a29d7b728630d4f97ba3b03b39e8b7b0f24a1713329f5a54ee9f5ce60eac3beae4a5406280f28ba1b101acb79d9b3c7a0646b70e55d0c4898fc1d39b4cb858c156b4ce57570d565a356e28f2d8a9272283fc087845ce31683fda2f5292a47542a64d0bb7d35a42a13fbcdb88821c13152d08bee3426596580717f0a4d1bc4b825e9e1d47bdccf0e12806dc889b01d4b0c538d612021465cbc5d65b9da2555933f3937ca29033bacbe4773005a161ebe67620b9f8fccd6f5b64e9f88170ae795ed75a8f6d6697ded8819b782d1f495177b35dd13b706f2d1a51c054e6ecec0fb76e044cac44863d168e430998f468cf85e9d7de277e362478e346ebe7fb3e112814715ec5d83c285b8739a46001738bd5665091d5939224124684e59a1012193588f3aa637808589b9884884950d1d98396c2a3d0126fbbabd27074148c983f02b2f782b87d397b7746a557afcb7ce82e9d3e15dbee1e9e67943d55979952aacae923b61122949c5b8757debd4a56efd53d39cedac2cb066194bd6b260054b96b37476ed88cdb7ea30986ca664102f0d4920ddd7a89c567fa74aafa55e62407a95b428bd2f60f5feeb704eb85167504050e41e8be130fc158d985aaca7aef5ea50bfee75eb57a7debaeaaeb3be9085a567af4a581a3cb264235396b26421bbccb2ca24b1cb37b711253b1bed2a8a6fa7bf0419dfb85f8b556bd2e1e50fe0cc79f69d0508b56d4ed5cd727d6d94de318fa00b21598f2009f725da7f92d9caaa0bbdbe36f21e9bbc4ce7e39e34ba4753dd89e2f0a906687caec58ef29f131274ed29c465a4a5ef5a3db66433cceb189c6958ce7aa9d3d707b5a0feebd27447086051a03c7641968c8e3a6d59ceacb8114e43d8355d2eae97bcb4c1923e23268c9018d38631c22af49728c3cf704ddcddd156a32eab7491107a611ee1e1eb07d266e246f277ccdd15696a7652fe8533096495cc6e7d0c70c69533112ebd4cac58ee387cd35a6922836364ac7f68a316d06ce5d63feae026d19965c3604ac72c50d214718e9d21a09f4b8eb1f18f09288ea945a47d532bb7b273dc6a2e48321f9ae7bfc6fe86bcadbca01517bcc781eb9a26c021b2fbc90493285271cc1a0ad03d9a91df947016671054592c5c0e248d295df29d29a88636276c76a2a8bc8791825e8d5161b1209105cc830bf08a8cbe1c1cea36b269df00cecfb1333f5dfe51da5f32c88cf1dfb971f52a1058b52e1736cc42af33837c03b0d0cb156cc8d05aaf0060be4713944eda62d3de0b5fe6d0369ccb956c6723f482c55c70b83b518802f052538e4546986001843042844d6c79ef374945f97420fbce0702747edb629e14df1fd60b2d05abf11bdb5c4ada02acbb614010a0ae232447db2a0b0c158bb64457da4020c1d58d83805f44819ea4016726e0af247d66daf0368ee0e765e2576a0a2fc065daf935172a51fb93fbd7e102ddf5030b3ac7256c8c69df6bd7a660be45a539ae802d4088ba39d7309389c8a831ddf68f5717831da0502de60069410c1bd2d626bd4e5e265e4abe701e43a9fddf0d70d35d0c49ed47041a5ced87d5b395d6c9c94f85ecf42d59537c36649b3ee6531b01aaba642ecb007b4d0c2cfc833d3a678ae919653b74d07e348e969b958cbeb2a1e8f17b540f6c563b80a926b286a0d05f4390657a9db325d2982aaa085591c14d3d9753e589bc51160670f5bc45599d74b9c00617b335631e325d80bc6ab10c0aa067c02ac8eee5afbee3c5f25a9a79cd0c8a8c0ce73c65b5306cce860270e87418cca72232bf29295f1a7e7501e257dcc2c618f4863d81e322ffc2f9479f8633ab1f525782016471c29bc89467c8f5081f00d385499eb9d22f11e180a0890e81cebe1bc814462911d1b37c3c6a929d1385a26a95064421c1954f4772880554533045dc0cdba469de3a02e3abac2cb566b6b4586067134f777c6902470149cbb12973c01b881b402f66067423b9e532b649fb13cb14fb20815e2cd370c405df66e1cf5d258d6bffd640b398a83ef3455be3c3ae4e53137e8aef6e1de7f3fdb1a15917bf275db5dd34606443b0ee3ef59ac5816f2ce8757130957e7a723db4e3cbdc3e06f12501054412200edfd696fe8973416c7763f5a5dd5010d0ca1ff9bc47ed348549128db93a4e06d21a3a23bb6214421b8a31d10521200423bd66a5402cc565680338e3da7aa8c23e0116cb55cab03f88a83426c77c2883d607c256715cfba063ef4206d88c477186744d19c1e7ef1ea4d136e5161bfb5d33ed0e4b55c6a66cc1f0c11c0783fc57c3e5801cae9bc26a5464f7bcaf15c681cc848662ec850beb618738c97dcae5a51641ab8946408a63db76fb6f5a5fb03c884ca8152822ac612d666fd2d24afe3be370ace62c1666ff85ff17d0f93fabcd7653d051fe4817bd0859e98a849cbe06311e52cc2713c683d274ff4bff42345e3e3d2870beb86e7358b0c5ee1340487f7c979bcf6c3982dcb9ab27702aa23c4d34e890d07e647088a662db6c6116ecaddf8092da4f9548f9a317387ee77a17d8dbb9847ef3565b06fa4d6215bebc51d1cc254f7855dbf0ec2ff3be99f7036ba718d527d89a41f35a69bc169d040ac3cf7fe789e224a3f2cc798bf006549bb2195a4e0a810464b0710d2d42a0832e874621b43779dc9621a9771ff683380fb4dd506b4b3d32157983db3ca1f126ef83dcd91ca210dae22f81a77eae919cd531bc10eef4bf9e281668bb877637f0ff666b69d710e0884f726c1c32948cb82b7c1c027a6824cea5eadb6d0b7ea7d3fe409184f40da026ae74ba40ea576fe458fc1b732c9889eaaef631f6fc03610a3e02e54a7a8b9ff36c0d03ac06f6da68a316f53f9a99103e79229fed7973ec561856a4aa45ebb4bd9b3f182b4cfea87b1aacc47e42f703723d339789d6924ae4fdb39a4a1f6ad43f78a2faf46147e6d2cb566eb4c5a9338c3a22b2af86c776560a85455a359252118ceeee5359d13f80a73dcdfb028646e218b82df150fe1090b81e1eb556849883504acb710127cb129f614f88800b63d01174ae61a0eb24efc076d6a273ac9f412248b204e3f28e0d8930b5233fed8654815bf5f4fc1f4ddd7813e7aa7bfb708b4210542b2265fd2273d9ededd38aa7b36da42364b540a6f592076c0a1c16457fb6d591835275fbf00d8b6abfe4c2926638cdd79ab38244efd493703073d59dd0122436a351eca114ffa979c970e6fd0eb215763d181e938578587a2d931d26dd494b77896cd22fe68eade6ce505caff0e88e0cb617b533cb57a71e1789e2f7e482803a574c7585576ca7fae7c733743043b9a920c0e0106ffcf3fb7c5a1aaf82ee8d32177c488818c5a66624136d9ba96dd5922f1ef2d4747496be6c5e1dc41be2d139475e36963118f6bbaf1a21e0fe6134a1c86ac4377fd083924660bea879898ed3608df4176410ba9194710d692c854f866d36fab1411ae62ef1716757634ad3362e80c2b0025a70e778a238d239d02a4f48cee2aad119bdf925c27c79e1841d1fe7262c7cb60af99094b4944fb9a1ad80dac380059690a058cae3f6a593f2e44601c303b09ee5c02016c56e0b3ff926d060ad42308ead6662a35f05a95f18ed13fc775be3017d6e04d78038f0081007fece96b49444c278a192ad488d0dd6a3b235e66c119bbebbdc9daa7dbbe7ff43202f1e4b0a12c1162744ea66fe0650a7b249c7b3d12e8735897b52d353a90ea9226924e3e9353aee274d57cd3f7183525b1b044e624077ccad9738242f8bc86f11246700a4f72ee2fb27fd1fd86e472600515c859de4e57194f86871f55847b1a5c7dcd35413a054a5a66c626484872440f9f5dc2bb9b526a3515aa0744addaf079a5fae8291c5a3eda109b26e12925200d8ecbd4be1b97414692f64cd164de474efeb7b77676df10193fcac175293bd7058ccba88f05ee0e7425339314941c5cb5daf6abdd0688e3af6d27359fe8d7b08379b66b3accbbf455bec9a2d2f8856fe12d90a97e051af3ccabf080cc673ca0b201ad641de5b126a81e9176aa69050dbcb7abfa717ba14f5c27a92b0025dface9143302a5b45ac9d1aef6a5805fa0c3f3343360f3b30bab7cb506ef01ad2a1093bf5d4fa90b50a83abb6489876838d705512ac63189a4d6013102ff31085944d2fe10d33f187a91318f9362dfecf3c6c993affefa0dad231191f65d7a0a9349a7683ec1b8f33aa8c477315b65e3333899d3e80de892625a28aad6ca9b80b7a32664b6c64478fa2eda42285c2b204f1fb14b12ee2ac570ea1776c187065718513a8ae0b78a9669616654dc9aa8933d07681b76f5e061c0523472a5b16a62560021a2ca766bfa7541ca1d0c841efab5d5a2bc5fe9967db1440df6e6b90c35af878ddf819794a2450716027f348e6e6e50af0ba865e57d75505da75dbd7d7204a037369586c0b5900b5e7a3a0182ebf47df29037f19c6e8c23db23d827ad0c6b1d9a312a83f112001adbecf32fa2a04a0cb8754c16e5a77525c322e04d721cd76cd8a7c36bc986af8e12564b010a0cce4b9a341d13bae932593e6d012d79d72b09f4ff181337750a0d9e2394d755ac02062c71b315e22f53e954792f60aec16a451acc15930713d74224f0d919f6534402f5ba843e96f6e7b889734ce907f2a27769663c825ea2a7a483a0cf5bc8da533220787926ce39b09e740a04b417e63c97ae1d234b534e3f6bb4542f6010e2d532d5ba12c2a32c5b6cbacaf04644f7d14de957624223827d05d23a57102e393f0815ed39c4f7a20af1ecd139a8f6c2df93cd2244cd5ac6f53d9c3ac59cbb6eee8e62ee168b1e69f874d1aae2f506ef97d5e4a6c9507475e49af89c069cd0970157f6ffb62547f1bd027db34a0dc69471626f2c42e159614640f1e36d4760936965f50d498d59b479abc8e466c96a03bcfae2d0264d511f593cec0d4977be99f72ebad77b5d47132c895c82275e56737d5e35052766fd647e19dc48fae06ad4dcb1b9e39490e3f576798f5c882db9e25d222a087ba5ce0d432a877e8f3b15c29f1be022bf46ba56a604bdc714cd6e840d4627a35145e525a49b6a285b4e10db83420ab8a1196519a591241ada5fd469be3adf854acec2abe8a84925306bb459e45308ecbc608a47dac94f6b53adfe74cb2e5db41e4b2c54d9d1196b1c03659709272e834508b36790f934a71b44b31f5f4ff1be3f7dd0f048baee369ae96eb6706b921148249a32f7566b957aa9485c8059711da195316ba05cd512d0c5b276b915ead52c79eb30a0e2ca25dd88071af1a893fb0fe9482c0f5558b6334bba804244d5b9a86da9ebe76133bbe36aa368d753be2d4d4c211ec3b6fb3ef3cdf56892c6a7b606817f42bf944d1d9bb74a1d48823e90a399bc17a216fe756426f6a0c7af3e07285a7fc8c092fcf9a000fefa7501693826527a97ca6ac52dfb7627b5ef6340955d8500f903dd376d8959f4c6162959c1f5b22cd60b420eb781ff54c64b917a453f25097d32b46c14c8eacaeafbcb3eeca082d2d83a43afd86ecf6312b0cc254f8f4813276d00361e7c006c4d8aa97464af37e95823229a4c7002eac0089039aaaaa291b42d22026caf5763f2a970bea2d34aa9dd697931fb206d1929886937442dfaf1b54069ea3cf05a5c1f0a1a889374643dfe6c3276a174ee998fda5bca602b8e1172df022e01d38085bd79a34f13f85ecd4a4024154218bcf9ce82cdef6b39f954019b82d63727d07a3099ed5f0cd1107aac2273db248f1610e544a34956aa52283fae8b5133d3b40d83b612d5126454517a9fcb6f342cd876025e392bc9a5d71d85515f0a1345960c71def6c4e8a55674fda5cbee7e5c5d40e2a6144925e6fbc309a0c01212cca4404fd794cdf9c4bf69ed8a874dbe18ab49852b91f696c8ef9e53cd04ee5989f3b4c765fc7d594cb0e41eda6fe2e41c4c0a2a77dd99243024659ad78f219dbf6e5316e464e2090576f382c2036a3c8435b651c445be27dd3cc82e54cb97abf8b1a8c02b901ac42803288a05e4ffeea2c759663c9a4fa3b217303ee015069b6b8d78955cb78c5c6100a33268436b5a9916188ddbb8c93becd2710d3be07de0d9153b9641e56d71d3380da093a1f20957baf45a6c0a4e69cd26a34e5d0a93d81fce7b402a56999a1f60a1dadc64706365f4ef395c46f59ec6db85cc60578c0be0694f6840c282959b56349ae9f926362dda7830393c8be1810b6f20531fa61e62cebd0e4721b06a560ea2fb0ca62cbe642d3928a928f571dac840cc68dae5fe38c107c161a46f3ea0b26dc8fa0084728901258fa18d8b8f9a327856395fc235ec17f61269b861c6c3fe259165c2b9c139ef4a6065ebcc3974ca88fc6010174f38f613309b747bc3fb2b63851c4037e13d2333db094c83ca7363de2952c0a6c1a607d308b6f2a15cacf125a0ba83535706aa0116f4fd4077b2835c348bc850c74c06e0af053d9a303f3e797d0ce849a8104f1bb0337d52fb2a77635c8fcef10a1c445401e5805ae140f09a2ca3f77dc3c577eae1164388364820d91b260641498ca2ec0533e1d0069ac85f304f0cef84a161faf61f140dea1212b6f32bbc202f836e0fef29fa6b3ce5390bdbc7072317bab79d0260bab8ddf1cc8d89f8981ca0da464a6406fa216ef24f26363596bbb88e91a7b752d9356d7d037fceaacc8300c82ae19c4cee21cf32c736efa0f8542e4969fef7a855f518a66dcd58ccad6d9795b2b6f87c7988b7d4884d34ca49a31ec2d03a6da57e3e68e503f80b2bf680f7f0f0cedfe76631ff904d2907b4f5448fda897f71df607f59cfb046bfabc030263cec17e2e86a638f745254bd541622aec5fc0ff30e6662b33713677ff34d03cf6e7bbf671ec873d4c5e638919dc87ed1c7e1df91f305ebcf52a5305b4a859451ba2b148c65023d5c4e13f9742a458dd1ad28da5b1441e390d3328324a98490a7db44427e1771760c7f680198bce962035dd235b140d3fc9d91b0c308c57180a4d0af4092faf777ae38fad73abca92042a191030eedcac3342d6853c2ed4700646acf14d58a218fe031556ebe85e7280701f3c15f1468d1d9384175f3f9dd93723448d140de42e3f3a3f80c42041a4d478d6b11988b52670afd4fb9b8610fb564ec4a62c717ec7e0abdf303078a0fbfb69319188d32ad5b2268cf48bd3e32454d5c5ef4a1129ae9c3296a62e88f967a1db278ee7d9565c3ad2799f0e198f84a6bfe9df07fdb146a4e8caf012c02b574a1dac598f4d57df92712e81cb6c981809336918711567b27d0911a83c731fcc421401059e8e04f90e57209a1da703d302c8df99c40d50b8a95424b2d2ae4ac5a550b49d4a4dd49b525954fbd2db08da52329a94bb08851a49bb9b5c0d5ee56efe6541aad11ed56026e5262fda862bc9af924141e0867ed63df18fa0675bb2770aae10a10d7a0ed3f3a465ff4b4b28bfa49be9907437ac3d981c9de78c22cd2fc789e4e0572b04faf46a1ddc61d5e6b5d5d2e5aa96e69a12d0c51fc71972311d4ea5732d6de8380cf1fa232ccb7e8489a32d294181866972a22263d171c0c17758f5c72fbc980109d8e12dd9f8d871c0c1336d469ff6fd4c7c21bafb87f63a1d1adfef455b7bfe6f8ef5e06a690e7f1c6dd8b3e36be011f6a881870d3a7600d921e36183e82388c8a3861d3d6690588f20b1203b7888618faf61078f9e30e3f2f6f45014f4f31a7afdb8104f12a9bbc41fe994e1890a02a33dae4b673ad6b083798231dae378badb457b5c13dde344b2e4dfeeb6e9367980fbf1389fee96d11e87bbfb457b1cac1b87a4172bbd8f2bc5f7132dd9133ed28e63caf2faa30bf18fb9389696867da7bb65ba3bb1bb73dae360f0fd32293b7537d75d5f7bef7b9d2e7ebd65feebd5d23c737df2c71a493dd379b3cf2acd7992d7ca7c76a7ee8ea1bd4eeaee547b7d4477dbec28bb8f64fd9669386b33c4f70b1f09669bb727bcb827b4e3387b6e77de181dbbdb5482e9ee2e072a3f48410a8cc8c8d8a2c4ce0a6e1065c808302892f1c087136a46222c15138270c1b1a13e2e5cc142685440123241563b1ad8c10567c602be520d03cd90835115047400e583181e7ca1e92d53a6bcba14e3832c345c115c113054aa705e84ce0950252034de36aace69389a520d8d8af3b1198288ce51ab299d73ceb54f4d8dcbc4ccc0f88c8daaa302e335cea9869071ae93b1711d3a9f1a95942932aa2272a05285f329791139f8f000e3365e54aa711a55fbd0a86c6c7c86c6ab703e33ce394a45a5c66964a8d40c31e3dc8c733e048d77eea96c681489f1d351cc0a04b7ce4f2b10dc4a9e036a35a5e4a81a1b2a344ec5c68b709f19e76c565356548620a2e433ab29259ff19915952aee63e3251b1f3c1bd51044949c6635c5616c782815957c465585f39971195515ce47c66954548ac8c167c6ab703e344ed3a96c4a364468f000e336ee43898a8c13293e36ab217c8819570d41e39ceb50a299519d9cf3d1618107a5c3f03aad8e4070eb1c04371887f1120d1e60bcf3a2d250e72855fbd070364330de3643253fb120c733e9acc0e44268744c50029d2568688e4c0e63c4b49252e276a0e94e05a5d4751dccea08a65d30303030ce711c77c419a13c060a8d11e7029072729828485d2e791453c9144500525e2828a557ccca28c64bfd82511d995650a2bc6456528c3ad4110a06a6542ac194606060604a25e76c76b8e94c21a0698ee34a46282832de41303723757e72138c0a4aceeba85bf56b660525ca11ee859259ada04479c5ac4ca6d3c9e8a8bd7b010daa04244a14223a2f39119cc378141214c5f8c9a350a9e23ea62219373911289ff15e4529c27d4cab28449c7c6655c57d4a2eb32202b5aae23e449c3837ad0e7013863084210c3e256f27e2c4551a540948e7c3a9aa745e4545a50acc8a0450722882045072781d95a0709c93182ba86ed48b33d16085060ad070a514c5960ea62b49a12a3d4103cfa8d4a5392f712901292dd1edb457d1aaf652a72a3dd1448c152cf0a0cb0ea878d1d4a812e3329ebb5757ea98d56955c3017ef21a46d4a852e324a32a2951d252b212532acd88c2eb1cd5a52add4ebb51694b7ba35455948070deaeea6272ae74041436d8411436d801133b48c2c68a115f70ba178eaa5f423a56a95f2e563e64aef0ea22f365668a02bc29a6e06a7a019ec99b4585a56301afc3a1ead2ce8bd316d32a660b8ea74e39305e788cd738a16f78e125afc6bd9480c06829ed94dc044375721cd5e9955221a15e38ce71a6137732e1e0a84cdd3b305a4c302f18292ee7f482c5c251955ea714f70247d5bdb817382aee050387b3724e2b10e0c0e9dc645a79c72af98c2abc1b8fc95202c2f92881838313838a49024715a3a5639562b26ce97ec4c874b9e2ddd810c1f1982c4b743f5c24a125a6891827ba1f382b17aa1a930d11ef743a752f5e70dc8b1b1a538985c3595e84c3592cc781c371aca2e0e0588e83068ee370293e269c150d1e588ec38b588e63158504381e0587b34c26c75915e57096b35651589e6325c507c784e31d0e67d55ca1c64b0d16dd8faefb118397bc6689ee870dbfe134cca0fa225372992b70bce4a204e4e40525c3cac8cb59956698c16facbed858d52ce16535c3ca48478d9511eb85f2d5ca88a55af9cac8655819e5c8f80b954c17992b54325e543258742c184ed375344c8ec373384b4583071c9ec369985645383c078d221e67398fb37872e050b154a7293a1697d201bcd47c2901c131634363e334acaef31b158d4c0d0d158eb7cd8debd0b970e1a254857be1b80b95910947e5f90b1c9594171d2b66c5d3b14aa655490a1caa1297d24ec9595e64ba74ac526f2971811143c6f58c7ae9e4780b2fdda06fc8f15296d24ec96bbc4b40761c676554ba224305c34daad34b07869b7cc60c184e0363068c93e9d43362b29c4a324eae3323068c9dd30e0c55774b4785847acd5875b366a8ba5b39a7930c96efc480b10201eb74329dfc46d51d0b6543c47bf1628583e32f543380e0e1f8290bcf45cadb064775e32e54525ea6d4aa8603b89e1b293c22372506d8d4f4161919992e46354dbc4a1e635a717df26185866e061fd034eac61160832a0169e143d4f88d9f6cbc859f3abf711f6afc66e5838db758756907732f544989192ddd2aa97410e095b4a0502b231893c94443433303081eca4f2a1997514979a16260fcd4aa1a4ea63355a1e9198c607447739a727ac1c53d2747078be59e93e3753b263792a1f2820a18555e269f394d394d395139553959391d71ba72ca1283e21204461514171497ee470c1555743fba743f62ae4079417de97ed02819112527752c930b2b595c4c31d5a6943a231747b8b8f2328d30340e6343c4c6655632325db79291711d4a251957d538675384c6c60db7e14537dc860dbfc1bae12cce86df50dd54b9d97253a504c494e5a6ca4d959b2a37556eaa98b298b298b298b29ca6dc70293e9db70dbfe14536fc460eb7b12ab2e137fcc62a0a0eb7b1ea5297c371c038a2fb61d45e60c030a2fb81ea7eacdce42fb8743f66701abc86771700007877336494764c7e33c5c51417545c54716184294b09c8cd969c95112a4747869591fbca88e54ec3ca48c70bc5a59b6175b3a5c6ca48c7ebc67d65a423002b23d6ebc6655819b100b032f2d7cd8debac8c7266ac72563256313c374271713145e5828aca45958e6544c7ea606a56dd10951c8ec369748ae068c4f8131bbee34f6e386b081214e170960f916345a3e43b6ec37786c0b1a211b3e261c76d388dd2aa68c7068d22bfe1ac55d39c6aae68e1a5639d5e3a1480617218564a406ea44a3fba5930dc858d18540c959194570ca791a951a94ade3631626262dcc8c594ce512e6346ca8c8c520c15ad6399bcc72addaa45971baa165e3a04782dda15e3a61b6ee2827abdf02e01b1e19d15cd2abd60c0f052da3139cacbf1170eeb8503c3a56472182bba743fba59ddca4463655432398c17779d95114a069fb132f262f01c2f2ec38bc7f0e225860c1932666600c12b7539de365d0c8f5149797539311ca5325249f18a1163d5428b0e196ec472ef85837ae178774060705c670a942bbe3242c950d25919b9e7ac64acaefcd04185910e6eca0d1b2aaee342e3305ee054515240164f65e4bd542d64608c80b1b282a9d2b1ba55d741c0331a51301d97928b292f9d243c23982a554c46305580d8f076cf86aaa6db7961b3038c1bc5e850c0746384e62443e3620a0ae579a5128a0b8c1b45e958465c161d2c967b4e8e97650a17931bdd6c79994c594e53a8b8b9c2cbe4250eb57ac1a563996eaabc4c7e53e5c6882bdd8f981b246eb2dc68e97ed0e8bc63684e353a14f06874a87836fc86c9e43754306cc0b0f232bde032c53342717131e565721417a3575733368c2554dd8701d3498ad20ee7bda5b4a5b4a54f353aa52a30364468f0a0e3395ea4b3ca591595ac94764c4e63e27428e095a4b089f1999215179e512f1c2fc27d48d03907c36b6038c7394da73abd64a890509cc7880113a37ba7dbe4252d4bbc5ea88eb0324345a57bc7018898e233a3eb56374bd5991c86e9458e8b1508724c3a16f04c6e63e32d5ab448a55629d50c20785d942c5e1cd7497971aa1b95914a8a970dca6d543226af29398daaf32f32559091e332bc28c765c8f09c9c55941c9fb192e21313c3c9f01c373a35d17991c1a2fb51f2ee850b130c8a3ba1bc144e0c0ec64a6609992656463257e89029c2abf3d4ca88254385cb4c912313852773ea72ea72bae2e4e584459f9ce0ba52951737230c5ec951285495538c4aca2b47c68c15185dcc179ace758c78423b82e4c850cd8b97514b2105c7e918c0d32980c79d54ddaba6e3c2f08ad1c9d2d1c4f88c4bf141c5aca29020c6a3c8aca4f8e868c083f1d2a99bd105cfa8a5c889a10b9e913fa11d417264a8085d82e95edd0c2c1faf20a62cd0f40c4632a62f32564a404a59505b68ae5d534a40601899be94ae348d5ed1e00186bff02218fe62158504ed515e388c95aa4b510c181e63d53ebd5a89c07be130dcc8144507a4b32851416de97ea45cb8d762061563fad2fdb8c20f18efb228ed74de7541522bd4962e8b12105414dd4ee71d0a0bd6158e2a420e8a0ad41793caf4c5740595290b93173a5667faf2eabcb42ac15095ac7832595c74a718d0989ce3ba6fbaae54828181813199be7c39c5bc4e5cb87cf9a293018fdba1a6547223a792941767c4543a398d1236ad62acd0414207091d247490d0414207091d247490d0414207091d247490d0c180ce05b060c182050b162c58b060c182050b162c58b060c182050b162c58b060c182050b162c58b060c182a5a3e9e6381d0a783e2f64a690e1222345b74aae43018f0b4e151e178f8bc7a5e404cc013c238f4b6793c5d35202529385cc179b2c325f6cb2c87cb1c922f3c526cb694be7325294dc8a952b57b2643142199db6741e179b2c1e979b2f1e1727b2bc4a8e934407e4b4a5b493e5b4a5040427091c255e25bf59199da47895709ac079e255729a95d1a98a5709270a9c295e258f59e150c1e5557223992f3830ab36f2b89caa74acd28b293152a8e9f27a3185d659d44c2693c984e3a2c4e544b3e27163c7ea6c6a686450315db85209552ad95491049705892a6cba94acbc8c6096e82c924a40820409924567411b4ba6530c4a86d3d201b971cea86485c80ca7a504240685f262a4889182d3122305a7650a033ca320af181b23315e303ec3254bc7a28047c56be1375e165fba1f335c64e8c003a263c54881427939ce8a91e2d5259580dc78d7c1cc708971a2b4d3c56cb14922668a173ca3205dd7755df7624a4de7e2029c0f753f522e705e2cc1c4cb6665445f9d8dcdcaa806c3a534f1ea68afce63a860a85e7838396e24656514a33af2000fa685b7e8baae450b9b1a1d233c1a982c32364c2cd171ce3961f272dc64e29ca07123982d4f9ec06ca95119c570397179d1a88cda0b3147c4dce015d3e5c5b9ce10922359ac74fd83eb40b3b88ecbc2f2825f21070bef8aee492926e664f295c93b967733c4bc3c558c145c5e33742c942a864b6987e39c280189e912e3c58918293ad03fbab9981b74cc11dd0ee7485491841725be34c1c53cc1c544b10566cb0c349cd3e830c02b95563133bce0715c0c4a8a4de71d61cbabc5123a46c4a050463a1ee071af18d7a13b19e993516fe92b4a5da92b75301e57ea2b705c8cf0ba6e35934567029e114d0c975712365cba1f9c1bc124f1ea62b8d8ccf882d7b911cd9457e73a74de755dd7752d9630c29506944aa552d745a70146a0c10a0d56687ac6133c1aae9cb050a34a8d2a339ee0198da52a356ad4a871aac1127d25068532a9da46c98d1be5740ea3aaa2860350351c6063d3a286e36e72501eeac6447343842b65e958a59207b6deae259ff44a9578cbbd4e1b3ebad6e6e023d171c26aff473050ace538332e81eecf66f466b196b22530db5758b52e97ed85aa12bf56f631a722b6d95beedf2dd324b19636e6b38cdda66d9c8ea983b03a4318e82d77d792aff4a4ea629d589c7fc59f39c85bdf1379e8b9ac557abf6679c619d24c6f98cb98e35c9f2c67770279ebbb1604796e5cf0136909858e3f2bf849ea6e22edfdf4f069824f169f28fd81d9da0b3aa63be087d50ab13cf38c93e6fa19d3a4b7d9d1aff5ff2bfbe8add95bab4ddf0183c6996d11f8e3cc36fbd3b2c5e31c47fa89ffb70838a70f8f105e3c7845e9ef36c7fb48962c319e3ece6a69a6a238bdf585b7b438d7781ccf9944e415830e52d001093a18f18996969fac319299f67d392c6fc6ee2aed8d061b6cf89e76e4d9d69f4180f765e00f53871e74687d454a942cf15bacce9fefc398dfc7a5cf1893a3d0225982abc5f3af78434cc9fa42d82b83fdcbfeafecc33ac7e9739fca68ae2f063dd27dfc4b449a8309ba93accf38ce30fc263f769443f090cb552424c9fac0f01c920587f68684438070f882c3151c8ce09023040a20ed0931a23f18182b314cfc09f2f0d88163684631b803268e9686ffd2328ce6b12461b8dcc1ad3ac75a0dd39bf15fcf75da5cf4d2de32be25d95b033d87a5bd897f6db5b459a5e2e3196bdd6a896b696f2e0bf2e975faacf9df8fbc552b968f6b2efe0d3eb8e14a3863e3686f387fb4341b69f3bc214877efd09e2b0aae27babfdbd372c695f2d8b0851adab3218a7ca35a1bc6e01fd1b132e96e9cf66c9811a40641a004a1818b0eed01b102840990fe81821f3ffce8f9e1813f3e96b2fb361f477192769cce0306d1c23c7dc0a7e55a7963b34ee7b145fee10febcc982cc34b431fc779a40474ea3f3b3f2c2560113c7d5c2e970bf6e4bc3270d66e31c798d28a58fecd2acda5cdd65ec75416f4edcc3cc5999ff44a473a91260b263ee8ae5c67c6d586efd9d6d697f4b7241f76998df974b13e510db71a623508a0869f1a5cf8e8f2edb0f074b9acac06b95c459ec3c1719c21e88f44f344a2f74527defa767c80fcab126f7d587c6f7d3b3b584abcf5c1b2b54b6098d2de87164cad908f29b73f5ae203fcbc4669f87eb5d9201f3afab33251a84797ee0fdffec83f4f1a5a8c27491ddfc8d42d769e47a2e363bffd0e326b6fad470e1e5f78d88087e521801d59d8a1811d02d891d33cf86bb74a7d878667c6cef2db98c3bf74c7de59e793b7719c252e594e7ec6378cff8ae2747c03970e14e4d4861f7b22bc4407151d6277b3dad3214407d7dd36daeb21424f057ac29e1edd6da4bd0f8b8f89eebe5f6d4a6ebf03e82e91deaff9677a9dc480bc05e2dbef90935e08741e50a6440c6ac203bab0387f490cc85b9ff84954e6983a2da42c2c52d8ed8f5c2e7cfb1d5cae22d071c6367cf907eeecf8f1d647fa9793be8e34d7d273f832d9e71bd7e649daf06319dbec38be3e10dffe08fc719ce10e66ddfe083fce4f74bb364fb14e729c45e324afadf7c5fa9886e71197abc8ca6a9095550a74edbd0ffb72fa6bb549f3aa240bb156bac05615b5f9d7f1b4bd5a4e74cb4a77878ea7edd5dd33b4d7027368af95d3dfcc5374d286ad6aabe349a3d95cfc1769484b229e28c8597ddae399ddd01e0f4f777f4daebdf607f459a5e338434a249c372715e141e570e2cbffb6fc317f3cff862fdaec38865fc339c0d92d6bf6be10ad5a94c33b56bf68c8ed8f6ebf838f1fe5902fc7d9e4f63b0809bfc98b36ecee9df67068e9ce947c00b48723ca8e14762eb0e3801d1cba1b497b2c2ab0aaf0db7d249e9d47a2b83aa62e578829e972590aab61d0f138ce90e5e00e114b09e82e9b61f931acce10745912480412790eff6135d1fdc9ec13b17c6e5ce1c612ddfde53996e138c379cb30bc2fd6d2f1ed8f6225c6a5db9cad5d72fd9d380e1c38707c4954f6b786f39d19dffec8a763f2331dc7e9e34877e86e9af66e0871e3de7802eeec6029b993fcebadfa4733898d2ed8f80012368ce86e557b368ebabb467b368ed818424316dddd23c46bf87714da31368ea5cc31fd9b9df827d6c7f4f31ddefa76c2176dc8f2cff4da76788b9667f547077f409b833b3f2c25a0b78608f11a1ff8a20d417c143e2db4a2e7d28a3674db0f698f0612d4e6d31cdfc8f5c96a2f45aaefb731463ec6afd83bf9d9acb9ccfa133d9eb4a1c793562332a44848f84d70486b36cf3c81669ee287d5569cebd390ca6425c637d7d2fec87e09be4f96b8da705e222e57110d4f1aacf679660c94f1cfa828743f46963597351a9e47b2b51786438a2bbd39e983d0c1431c12a414127e93a4176b103c7af80d41ca1fba6530c3ac1bdf4f1c6919dbf1f5f878b4acacd2d68f33c43d3d780409df869868830d3c7e84e1ef689136fc62252dd3d9edf6d8d99de1d773cbf4ce5aace7494bebc19396e7d0b5f71221c327437ed4c0e3881297cbe522c3a420a518544301357c342d53dbcc696fb585d514b6af7e4beb36df1925571558d956dee338435b617f3433e8b44c8f6616e7d79eaa8aeeaf487b2a6a437b2a1ddec5ab74104078d2249d679c650ea7f3e4b1c4e2e79f89a5dfcff3efcc31d569cf8b7c86ee2080e0a1e149f31f80a8cd9bbdce31240a0013babb75b4170015048046faf46b439a27697339abf8b4a200c820c58727ad4e19926458f100005200c0134315fd892fbeb533bf8db119b3b7e6b83ed2fd5c67bd8f64673eceb2ce24feddc618c5d8d6fc691997f6feac4e712797d666bf96de9a38ff4eafd459df6dc4a5a5487f6b7e6f31ffd9bc36e3708e35c71280f662102286198200c279808278fc0720ac75f16b357b45c7d3365d9cb4178d26d0e0c2336d2f1a0fa08169c8a023451040782ead8b4fd27cadf38cb552f44933759efb485f6795ce22ffa6ce0482dad34192c7f20720be5c1fd797a7636386173a0820fc491be672da6496a7bd191fa0d1de0c06743793f666fcc8e9d21d04103c3f00f1555b2b3f66338ff3dc793f635ae9249ff46c2b7e2be63296c3af2511c981018ff6728c98509674f7aabd9c1c7274644421a3d6dd410031ced0797e1c67cd7944ea3f00f1813b4b9c470c721e16f8b7cc1369d2bc96b252a4cd287903388ef307f4f9222dccb386a9283e12a65090e8877f1f575bc37ffd76bfe4a1bb77b4274347fd8ff9234ddaad4ed2ad2dea6e19da9381eafeae9529e9ee23edc570e2133fffadddcf95f6b417634a7f622dadecc3faf7657f4fedc59875b793f66278dd2db37e9b36b7d5e77d5ae6f9313669e1fc5b4bc7d326fea530aaa894bc9f5fc43792b407234ae339862fbacdb4b0ced6df1f183abcf0d27d5f262b63e1ac6197593f0ae7e813d726edfe907f95fa8ebd56749bbfff28cbbfc498dabf37da7be1447ff7f34871d10b2bb93eee6e21edbd38d2f7912a05c1a217dedd43ede170f976c4a765fcb796546788cb197eccbfd9f7acfa4874e64f2bc221a23f5c4ec793e63771fe1da767ea1f568a5da4e344aad431cd94a4488424599f2164f844c89021e3387f9ea4b9964b5cae21332aabf607df881c4f2f1292f18b4386ecb08490e1132764f8640892212f9ac73289f84d8424591f1e3dcae6a13d0f4a8bf6bcb0bb677b5e876aef860b3749dc20a1a1bd9b1b2da8e8fe1e4f5a78cb5a929f273cb73a5d469da7f5d9927f5b2f96635829a647985ecff3637e9be448a7ec7ecdfad3729db44c411878abef367bad749ee9e29db66b6533faf7912cf6a7e5fb325ce72d6a01ebee1fedb5d8b969af858e8d14fde17c6dad5662cff8f31c416f7d2ffaacd28f39a6324b9b95f6d2729e21ad2549dad03fe67586e368731291eeeed19e8d0b093538a8c9353366daabb9a179c2477b3455bafbcbd465d6713c69318e1baaa536df463c6d371cd9561c8edf8a8e296d2c65187f1896d85fee2252a444e87b7192d5daeaf569d979fe68e65c4b4b4e274b92264df26919e31f292dbb2cc8bf6a3fd7c8cf793aced42b1d476a7310963449d0ab25dd0a7db7719cb7b15abfd66fe3e71f6ba40d5dfcd0c1192641bf4fcb4fb3f9ac8a95baf899625b7bb13ed27b7d7dce237e9d51ec3ce36c62fc649dfe44685ccc44f151b7d9c53ae9d3b2cdd38ff0abbb63da9b21d2dd44edc954a1bbbd3d991e74f7517b323319a1ee8eb587c2024581ee0edb43f5e86e01b417e3849827bafb497b31627717b517e301b5779ae2f3dbac59b7b95257ebbbe51af9feb1db4ce2dfbfec66b38b8f4bbf85b44c7ea69ef1a5b2fa31b7d95b1f8f1e6250f802bd4ebf5f7f26b3fe721778bb938654f6f563a0b7bedb1cffb2763cb1d96b2ed6c76eb3833b3bdfc79a770e394fae7fe7108bc713d03fe6b7719c21adddb28f2375e21f2d277dae16c85d60c62f82defa92fc3c29c34f7a17ebb4cd2bcaacff189bb519fe57c7d3eb1fcd3c8e9347fc5a96b4eca24891ecad79b6d53175fc2fcb94a4a3ed03c9cf1406fb978132ebd7e6f0911cc420f51727e998fa8b1457ebb93e799b35ff2ff2d1490b7d9ca11d497b658ef3633cfd498b3d5f5bfbf18bba5ba8bd1351abbd938dee6ed29e894b777f3fc626a6a2db7cadf3cc2a1dcb297b11468649b08fdd26097aebdba9365b8f6ae9987aae7d184eaf339cb97ef8d733b6a43f2dbb8c3a2d539b8b2fdab07e929f274fcbac974decd3f31375378ef64c48ddada43dd38dee9ed19ea985676ad1dd5e7b3060e8ee25edc128f1fda5f8454c3dc9cf13bf56e6e2c7e80d71acc47e1b73fd7bcbd0ff4e7f9bd3424ab3b9cdee4f2b721718da11f4d697ad5de21ff38ccb24ee022b9dd16b416f7df86775d242af96e2fb48497e9ef8ad4e9f552ade39fbebb8f49b8c665bfdfeacdad16dad34e317fdceb10c69beb3e601d55e9be7fa367fd212f9876325765bbdceeb73b2426b65185a97898fcbd30f32945cb449345d00e6ca15acb0c38261faddfe08a62a85a16198acba61880029417793001583e456a768472082ee0e8116256200d3dd2fda3a93de6d2fd41a808114958e4d5a0083daf76a0e88eedabcb61760d1eeaacd6b739b5fe004152ddd3b2c7cbf1e1e483de1c52e178f2418cce522c3a427c06e77b9aa5afaf4dee9f3c490bb9ea8f19e90714111faf3213e44e5c40547b84bf563cc05a00b86dce53c2ea071c14c0bbeb4c04bbb2bc3eec37adc25feedc1e558bb2586f1b4008a1694a05bfc1619265d2bfe0d6195b6e086055e60411076dcc57277d1bc5267c193ee9f91ce22497e56e72daa7f348b1edf176fe24d9c4c727da2d70a7eb082a25ade609fc5fa58055fd138ce1f324c8289f5710ac090822cdc95f18b6dd3b0cfb6360100267fcbfa44e2ff189b954950b642b75c2389fc921f2c4e1f222b44d4dd317407d11e13a7c6f7cb25498649ad1e324cea91fdd7d08347ac27c8f398efe36b1081f09005e9a1c347ab868201a040871384e1045984a1469f808661b34a6fcf97505e84858fd4dd1780a9c012cd01e109de124ffa56e7c4e27fb523a6dfac331c407707e8a39c6768ab7f09ba5ce2579b9217672196eebe5281ee17e860029eb10125e0410b7191924094a0a8f1fd6a64983449c74188574a92c08aeeb6b21a248a2f21dbdb5e48892f2851806bef25a2c493f6e6b6c0744fa07b9c99868f54bd3649d87714ce18083aae45fccbe1df6b711060d24c02fef0b1dbf8653c91f8c773cbb49624694396f3506cfb22d616652b84eb4c626dd14b0c7a5921f1b31532b517021984e04a770dcfd3ddf67556e98402078d021000117e0d27e559110ca6654823000925c0f263b1da18ec16e6c71396ebe74a6146928ac2af11b540c08a09fa4090ee5a0dc4f7c3b0fbb590e627ada0bafb0198629a27ceb34e7bc349fa0d60d224677021be9334c9197aa0b046faa1f73814b013c0811acd95dd0db6e701238def77bbb97e4f6d92b7587777735e9240a26999ded9836bf6daf056facc2a15477be4839288d4ac1572b97690f616117f5629b6e38ff8b9f661f8c25f42f925f56b4a7e6c2f5423ef911cce254e7420b95c649844864f70fed99d45377c5f8808e379731291bfe538ce9f17ac74b9427abffeac8689885f9914b95cf8287cda0f07c3d1fca05b08288d81226880ca068ce8afbed0069e74bbabbebb7a0929bcf410b26cc1974bc2f9706beeb7987315e84a36bab92074f700dad30014ba3b7cd1d62948a18bd06d84eef6a1bd0c7889894f6fd6f1f9e0f1e968c5c4d6d39ba91c407c9bbdd7c63280d4df2d96eba47722f957fb338ef3a712c9f5896a64f824d727ca93bcb688387dc4e933d25984a8bb69ed61000332323233e2e71ffc6945323232331800808c8ccccc27232333b3d3d3c23d38b462abd249f658fa7d38b4624f8f0bd772a6b182c03f3869332e7f646464668a70929f279562ea4efcc3a25b3cbefc03c58b41d0274572f16fb549627a9b193b7e5a91274d32a4e4ac3731c4994e5b79476b63b74c5bb352ea377cb59ea757ead7cafcaba1470d35fcb0d56df6ce1c834ac079f30ce92ca13cfed0dab27f2ead673c47172b8fcc7aa5deaab6f68841f76b1fcb73f677369b414e648bc8f089387dbafb6bef0a92ee6e045d1abb24eb92ac84c38cee92900a4cd1ddee4af2f3a43594e4e7c9507745dd8cf8345cd63ce3d2e8a7df30c32e0da12b50d3fdcd2a1d29f6af5217c2bacb885090d092979396023793455bc1d4dd647b145082ef27d63f0a67ac525a38c9560f7e249a29496fadb92b0109748b0fc56f98e1f4db7d2422dd1498000e26b084bbf0d34cbd7b016d445b60023eba73d2b7e62de70472ba5ba51ae7639f4bca9753d9111c68cfd3bfacb73f82e5a4af2e17cc3be276c4937697e7b973fb2356972c20012474774fcf0f99acc70f20b29e1d3ca60e203d421f628f1e3e82e87820adcff3661c2b710fcea5edc97486ef17a363ab4686493db88747ab25011b244023024388800fba4110c94150897f3b3870382da4d5ba3fc0892964b180126030324c8235cc0f8c4fc308c9e98609d2303d0da38240514847cc04880c9fd4c8f00911d14f8dd2301ee23c4442ae2d328ef3679c3f2ed78c486d1397cbe582e5b0bc30587d51a43418ad4d580dbb5cb2f1f12dd391e652fcf24b288f6130180c97634996e110976b4848c7583954abbd6c91cbf579de7006c7d3e72d5f42e62d67fea390e62141d5d24a71d224932689afa5d5c2f23869f85f96632f86df840c931e89cec44a77f8da2dc388fc182b2d50c69684e5091382622149d6c7e5123fc9c65cae6bf390213b2c91c2ee8b57c91021e137d9c1034908193e71b9742089954eda0f5956180c06851413f0e40b13e0ddddf9dad8f4d66d8e456cf159c4145a5111413ef18bf05e08d8d2dd35ff91d26c36fb0b0153ba3f11532b8480125b1a952cbadb0a51d9d29ff842d0e9f5a96c80ca50d7f2bacdd486e9ecced163768cd50ef005674c698cd2ecad652bcea3d10e1d4003dd5dcb4bc75aadc4334f2026a20d0f406300280cf000039006004001bef03d694371de59ade4115fb95a5aa3b900372800fe404bb38174d678fe65a438c11acd200ff82f8381fe2f7b89d5c69226590098294df4973fe63b31968b75baf84893b63359b3f6a6f4904285142bdd9fdb6c0dfd67e27b9eafef6f399b51daacd25acb8b290d9763c872fc2295f26487e5988e444c81882b4430210204dd6610ff549a04744cc56a7d7ec0af5a7fa4f9e3fb97e738da107ca021aae8fe627e0b612285c1c46a63432475633ac491ee21bceb5822d520af7388eec64551ba645ba338d113338992e529797f28ca943c452ad6194619ca7f030af22837d8be12a001041022c41284e08010a41048fa73027acb6f23193ea94dd241d0058ad307f456929f27f8e6e5d683ee96b5771bbb4198cd2e8e368bb798a429ba5b6c2f897671a6617d92b4e15fbf4d32cfb014ffdab840dbb341c0a643777fe06d862fc260f46892bec365f6e55fb5337b6b7e3fe329bb6fb3a3bf3e5a386b18a9064857c6afb9b43d95e2efc912ff12a41e4833bafbdb2b9be8066bf68ae3d73a69e17d5abea5ac66af9865d365b6f401a2bdcc848c44f7074b9a24ac46864963a6211d6b49efe26d9276169b8ebf5b9dd9878cea1fcb3394e4e78927f97982c5fa355c12612d9801d886eefe669e405f7ec903e8d7ca6c5f416f2da9d98cfddd65f6da7b5f0c9a770e898fcbdb1c7f499eb05c1f0fa15d27ba567a7ddd295f8c621f4ab2e488d7d705af0edddd779ca54891a85829942a8eac4399f241a17d5086fa83c282e2758bd3a7264e9f5a073a0f89412e57f8482e979831ac8667958ae2e3122606891406b35d1adb2add5f9d98da23df975f42b15e595780695d551a2410c811904990419035462b8c3ce8ee4f89bb4031d74722f2e1f23e1298c45d2013d05b2efcdd26a904748c67ed3e920d29d27da21782621892adc1922679440836f30412e71f11e7d36041041981be243f4f46d5d1973e5aa2bf243f4faacd021d59a1f88876a4e36337ea51ce878dbef45729c5d4688b1b5df9980cb92fce3f02b37d35f2e1c7b0962eb3d387865c4bcbe5ab3e6993b85c45365b6902a88d0680e6830cd01c401b4293993531d3c0f781f931ecfe28d649f387550bfa1fcdec7231112910e832cbf21dd5d21d7067470ccc4fa4049c5688e560ae7f9f568340d1d2fb436449d24a9380b798d7c899f1c7eae349cb8f27ad26041d679d1ed23a6b417ebf26fe9145aaf4499a6795ce2aa5e179641ce7cf2c48cf50b22abacb99ec4ab54f5afc921df9d8ed69d96fb82f5e5bfe976ec754c96ff9f2ccf393ba6d7dfd507fd73a8f9ff6bebb639e6fd44cfd06fcb4485ce2e63c5648ac89d5d24abd480c1266d1dff861b635cc326d9e6554f45748eb30487f78e7af25597eab731ce74fd8613ada5ee6d6e6a221435caea22162d084c2f4c0b44d20a017f088af56e8fb71b14e1f584a3e8c3fb4b7e679d66878c31f6795629fad293e4906c10c000382b160310370c20022308039809aee76b196b25fe23c9fbb78ab2fffc856b5ce33abf407081a005101204a0f88118800fc8045abb5e3c3f5c1c7071c1f627af0d203077a50d2838f1e584f9ef024054f8a7832c449149c64c0c99113274ebc490e9a944d7a9878615203261060824351138aa6288a5274a3488728074453888a86b4471463890c70390e792b88d7cf0fcee3eef201f296e3f01c4ef3cbe8e838d3eaf385a0d8bf243f631791b7bed6f779e692f41d3bdca5a427c85bdf0ed1cc8e2c2520cbf37d5a78e763bfdd5929d18fad241f7c6029015d666df88fd3d6ec254a9a4940bfc566f8394844cb36e63c3c18cfda6d55cbc45b1fb8338ef3c773b80f9ec389409e6b29a6d53ea6b6fbb4acc43f7007f8e344a2259425d3f1e501610f3e2ea7ad3211eb64390ff8a4250233ad2e305b9acd77585ec7f1c37aade30fab0df20fbc3687b308067139d69c873e9e3ea0bb86be0be2a7d7c2c01dde72d06576ca68c6744e1ff24a9a499c4748f84d7cf03891ae1d7214dad14748aed4d69ea445f56936225ce69931cc66d2c660ff57b6c4ebeee6a18aee8f072bdfceb51469d23e8629c9c3911d9bbde4c1ad0dd2de50976fc766960f19d1dd433f4abe74f7f7b55bc63fce4a8b7cd5868f6d763c6d444a62a0a4d6dd1fc676bcb9ac3c40447219b3614bb3b9121ddddf0efe97097de91ee72d53a12db61ea12bdd5f77e7684f08c4493309169f9c55a8bb5ded09e5d82455f48fa5f8b41023f92b89966e4a736bb337494244eb6fcd0766fbfa7f6530dbd7d1da98a5d98614099129a99547d62271b98ababba63d2416408204894e143b40d9818600ac20002804c084006202a00962222888a0186ab87f195f8a6fdcc7a538ff7ac6a5007ce7cb9b595efb3ff2cf75de59ce329e3f7a9ef9761fe97de7f138652c1e3c693e8e73fe686deb93d11a0dbf2fccef3c9807dfbfd5798bd5fed64a7be3117fde8ff1ec805f5290e5f88feacc939631ecc7d884ddc66a6738c666ae7fa4859128185101cc08aac80f8a30a0489022368ae4109982080888282132037404200b74f7ab3da01e8066e8fe48f701f236f41acd3ec7e9363be83fd640d02fb57655a3f952a4957f2e6be45402663a96e4cbb974c783ee36ea14910174c382007064cb07da6c05c11d9ec331d8b239fe6c8e3d3fa6cde8116b8b44715422bec53504cd35c088a6656aab952ed6f77ca36c2e044782c8cf41b79b2b91200081a05d3098909220a225449ac08818792d5152440483b95a3fbb93f6f3a425fa6a858a9aec509b49fe6f914f0f500ff971cd8b2a6c69af0a53b4570523b4570527b46785537b56f0f6ac60a33d2bb862e0d4cc747b5e08aa682f0452684f04a6f64490d39e0878da134190f64470a43d112c694f043db427027aba42a5bd2b1268ef8a07dabb3282f6aeaca05349b03a95c4ab5349242581a5531db041a73a20854e25810202e3c68b1acf08ed9411289d3282804e198140a78c60a0534644d029232de86e1b1a54a76e68a8d0291a3074aac6a65335dea99aaf53353674aae6d5a99aa04ed500d1a91a289daa3940a76a8ee8548d073a55d384cd8d0c1730ac70a23d2b6cd09e153d68cf0a27b4674515dabb02a6bd2b64b47705cf49060e78b487831bdac3c1ab3d1c08b58783d749d198a1533474748a460e9da2b1a453346ca76828a0c58c8dc9050d13b93d2610d01e1312688f890cb4c78496f69848417b4ccca03d26b8b4c7c40fda63220aed311186f69a8869af091727134ca9eb6e1978fa029c91174e8aece8a1533a50e96e203b3e1dad6ced7d41f70217a0a0082721000187003b869e94cb997bcddad189ccccf77762f1ddf32c22334392369c55e6e3a413690036b84ec2d9d002e7091d84140e5992de66225486d8be7235704552ae2cbab903a0ee25027a1d227ead466fc62e124f9b107cbf9e9490d40d51b8fe351b62af147634df7634df4987a91b8674ecf876b4c2471ac749e29d96015a8802b4a808c14d9142c41051ba390208b1c3da61452a4814a55410902715a4ebceb89cb42422405a3f48f08349d2cf86304477efd0a9964faa8626dc954b5b8395ee3e75aa065bc3ac8623a4bdb271d61abcbb6b38a57c54c1d26cce83ef773fd7a638613e6cf031c3a4d9607586b3533d9698383dc60f573a2fd0095ca0820e7477013ac5434bf7cbcc542bd66a6f5e5f2d831674f78c628e09a91d36af63866e0c34d1dddde801eaeee9ee7657b5d9bac3e7c4d0f8488fa4668b4adf91ee2eba7f5f0858b5b545451311e9ac5526a99604badd5504dbec38be523c4f48f14c91e261408a870abe5f0e16a4728c2047961c09f8f9a35974ffbe0f3a78f0e8619b4bc4a0a417eba4028e25ba916e2d04c5e32ca1bc0b41456a9b90e1931f327c924464def2356ff9b2b21a5474d4cd19d16e8ed6cdcd64dddc8b1c6b4a8a35c6280e960a5648e009dddd69e1400886705c200590eee67288c00f4aac2800034f7437c700280460e79a848ca0bb3b2444725802036e30400bdd5d82f1002e52a8c095277ad0dd270b4c200b8e0a171874e86eee0a2c40208a172a600590ee86b90018838596032324743747458c070d806800142374372c56d260f8f63b743548dd98a28603f2a49b0b6344e123c1c4efe67e98603707ebe67ce08200e2876ece07ae07283694e86e95788b6c44e9940d30654348bb8be756c65c75562966b2e3ad5d22dae6128ce7f8f34354721ce97c96ecc0e445fb93a2a14583896886110c05a9818868da6c63d36db61ef9177e0dfb1cf32a480d18affe06a98188a8cefc33e231a06f86586669781ec9f8d2f2c5d1b2484f82047fd8856db87fb41a0dfc9b6d7519f51d963f1e6711ff401e3d4a107c7256f0cbd88eb6fa931387b4566d2ea3e00e0f0bf4afddf0dfcf2f935912d33a69e151386f767a1fe9473a86ad4c9bd131a4b59790f997e53e933838a44808f9b42cb3ad5c5ab733cfb626591fff5a95fa6c62876495bacd622dfde339e21f0812f9b7836fe0da2459ee1f9e497866367b2e6be3dca994e5b5c83fa0a052f6e4140abf4614648bb0f82f14daa21fa06a85ec7d1faa1512df4480ee0ea253394274b7ed090d4f9a151a533a4d828ce8f848e9dc48e9784a47864e97d2e9d48c3074d7acefd0c0eaf11d1adc79687057cd3a0f0d2c77170ff6207e48cd18c28c2d3b2c571111f1daf0975859c5f7b3e50401e7e8e87e800c14e0fb9178dac2296b55db0456c318964bfb18368ef408f64a7140069de240974e7540d5dd323a00dd365a46b70d1b80e9d40668746a03b3531b40a2531b7041a736b0844e7180a6531cc0d1290ebc3ac5015aa738b0816e8e07123b748ce30cb91e7c6de6be6eae458649dd1c0f97a3bb3f80ff65ddbd010ee43f0a69eee67034eee67644cab1b81b365056a45e14691e8ec36b338489a3adcd904952ed959fe8c813112d019a3ffe882f3e8f8944e8080f24972be5228646326913a294976ea2eea64177d74ea57e48a56e48a558dde305574e7937e0d1430c7a0f89c62ff1c71fdb0ba56ea290ba215337de776d0e67111e3dc4fbb58f478fdb1fe55bccc19d1d1e164b665f088a3d87fb001dd3c7767cdab532bf568667ac7ecd8a2f6485644a72a9a406ddafa52d92ad50b642b36aaf1326368bc449d24c22feb519dfaf458649f7616498542dc5b0140dabbb753a45d3c25d62a547f77179bf5612e1172c35a383d40c14a9192d3c8f317e097dfe1b56fb83ef0723c32497ab5a92b4210cdf584a460abd04c8ca2aa529191dddbd80030c00874ea1b4b4bd2f84387f749b5d4669d8492a66288552a2a3c70078dcea74fce49d3eb403367e58431e5f8f56f8a20d5b282b9058910183151d599ed0d2dd9d7a02090d890f5477f70c132cb5eece53e65f44ea14250230b882ce7b83f51859ded0a76398cd95c2c4fa217e1129899176c1c491d2425737a7eae6bcbb51cdc9404a9966c0f74bc17c797a7348cebf19777301e064e05aa4603207002a3d8ea5900edba9924e77dfafc503c9e5eaee5aa7ba9a2cd971c0c16f1996e60eebc8c230fd76b047d981390f66d988e23cb05b0c06fb302e02e346a7b81852a925259b549b8016e6498a77869802bdc422dc156e025686004316fdb246b015e292dcceb8caf5e08181fcc4f934970bfc011c4b1cfacbbfaf16c8da3e5bfe9b675bc79166ec7f27938b6d9f6331743cb18b754e3bc6ecdb3c661d4fdbbc4ec3b559716cbac5e3cc98a7c67331cd8f292d535a48ef934fab51d2691020f803a658bcd65683fc1b71cd7a7dbd5f7a731060c614df1f027fa085f35d663f46dde5aa6177392ddbd0f6751c6910448094fc1cc1c6f16d3f04f183cd79c4f9b4d9b233fc487456adc58e5ffe89e353d90c6232abb4565372f3117f68467dac2d7a652b24662b6485c4caa40a20a80295069d56a00a443f2e579e2e5702a870a5150315b86e550e206cfc9a7ff605a8bbd2399b8e8fee246961fd98d7f2fa0d453ec493262906c1feda10f655dac40ed92c8ef66db430531bf6b7e54cef9dd469e10c91ee136d914212aadba5b16e8e4637a75333a39bcbc9d2cdc9e062f0a2f0a53ec60f833dbdb9bbe96e02b41785108730f14170bae8b61e60b1a51b97501e0f11728b71c1c2761b3fecd5f2cc5bbefcda224e71fda36b7189eb3fb6b4d06f697bf00fdf59ab4d2f457b6b8e03879db6f7f10fd772a0f967ee14c83f269e30826e712412f3acfd92fc44d822c9b80412df66c54ac40946704210dddd4e287577d038ce9fa49984a419bf8b9ead50b5fe356bb3907f956712553bfa771babc520884bf04ed0b14c665f9c97faf80782a5edc14110f421dc870c997902398f18c433c4e5721e222124a511d566121cfcafcd445fbb11c0dd6d05419088d7709b718d9c49ffa2cf8c73695d663f9c692d8b700d22f248747cd5fe77209a552ace073a0a2d923c81b0c0032b5e74f7e46ca0842e4b508296fb48ee8312c62f466ff66ae91325f058a22549c00248004988f2483409affe443c64042acdaad1adea824437bee30c6d77b9d3dd23f84017cfc7b7e3dbd11a2717a39b83d1cdbde8e670ba3917ed21610a0f095bb85437e7d5e6d35c3024b89010c3118870042a60302b961806cbe1ac7f841176d06d5429901e3d76507cc339e961f3969386e711713eed5e22474a8814152107781cb90a24d182255a7c2837e49224a9e369a3652a5af2067ab3cb68cd66cf33e93907e0cf8ec93bfd916c2ce8452be403f4f416b958a7cb1523cbfbd35c018680826e7cef678abb99007237ddcdb5e86e1db599314933be5f8829d993d45e154ee01e5af8d9f3f4eb8fe78f35bf417cd98b3eab40c2ab4248b7bbaa4075bb2b0cdd0d86eefe421068a01004238070058f263b9ae868d2dd5ee8ee2e743717ba7b0b5ae8ee2c743716bafb0a55e86e2a74f797ee9e4214ba1b8bee8642773fa1bb9dd084ee6642772fa1bbafe86e2bba5b09dd9d84eeeed2dd48e8ee2314a1bb892084eeaea2bb613a08480ece3c45182c3f06bb8ffc4089fe64321bce1a697f7e7e30a569780a11e7d35ca67b6c8f0a23740fbe1fbe9fe872f9a0876e1e486e7329fa88ebbce4b5b2fb35af4fc34fef973ce01afed91c121f4f2445343c8fcc3c81f0516891dcbfdd47b221a6402f9b4459e841ab5baf71c9d19de4fd3c9dd4c87b84470f2644334f20fca2fdc94f2452201a9e4780329e487eacd15b648b442644407822a98f641c5f76f4b93f14d6d2d6facad81e79d1fe34b1bdd0acd25c27d28fbf64286808df7e8717e9ad91e1931af47966229b15ba4fc7da7f919cf442b996f647c4e2fc232194245048a08c27123c845f3f9b43216c074fba2b25d241123e9c29497f6e7526b10561c64a7cab8da2257590a47b8a2fddfd8162d0d76e45b7dfe1f6471383b06ac13b7f0c1de79f616ab3187baefdd18fb119e41fbe919d07573afb983b71f1cb8cafa5b48ff9ac52c74f33f59092b6daf07d56e96d2cf2cf3f2cb3f60edd7e071108df7e072b2474832e647bf1fd6878d26ae972dd00c8fed8a4b842b7144dcc176de085ee1b96e25fafd46d7694b92ba4338ba488fc4058b5e0c7be79cb6983991a78e90e6b79b3f3b46a100230db91e80724ed881d53242ade179b6b1afc2dd371e66b93dc72ce5b4e1ac800c3731c270c4f182d531b7edcdda56eae1b260a1dddb0285e74371ee9cc2fc2fe655174b7955528bc74f7145028d1ddf8f647b023fafed1b536984c66a148ca136c0c8302a8718bf6a0e0e986e245430133032c84a023153388a267b044cb60063e7a92139747ad58496bfd4ca437d6837bf00c62e86e1196ed8865f0a5dd6671fa7475965ef0e1cf3fbe1874fac08dd6c9c9370ba6b3a804f02ae7b1a2858ca9998124000000831100203820180dc74352d188b42ad9dd0114000478c0668e4e9ca95198c39832c41043080000000000808848c380020ec9199b29cde6ca092fd24c0a1df591146f1b67160310d2d07533207dc5be9c89a6afb75f43283fc2a34ac56a8f3252f42af1f4de04dfe37a4e20d23ad3b831e2a0cc2cea4f985449e0f8c9b49d5d04d9732225be35bb09a74793826c1116cabc0052c26770b6ad839df3df4da140d1c86d3eca25aefee977d78c8ab1fa71a010032553cc45d827a29b43cd933cf293d341a4425909dc526dda43303135bfb2cbb740471d305d781796abfdb2f1f1fae08f0672eae20e0b5d674828690607256b65e205c8f0cbc40521c809bcb67e681d5c315ebb4b60565b3bc53cbf9462e26cef0493280bc4bcbc4e6a760d222fffe2907f333672b0e942d289f2cd9680c0e77791ee3c691a937403e3166f027237a2017855623889605e5ed27cea9520b78c3a7bf47f3233fe43047946f5328c28be8a2f5fe7045af74d8705b31475ecfded724bd636ee82a64215db1e92be016ea01d38270cb8fa32fe0a533f1626a9d2d9194cfee8c8ec99ec7877807de0a27bd2e35e8760db0c7c51d21cbcfb4f5a14fde0676fb03d8f3c6e38085f39c70cdefff72b624ad7dcf286d06187c460bf6d6396b9c9c96f99ae797ac2dc8bcc7dcd1068bd25d436cf38189ac0e2674e37698fa52676e28777ef7d8daa0bfb3af59604367e1070701b049f31dfd7866ec293cfdad2998116415116f8cbe9ce7d29a19ba32e28522013c13807313966e9b3ac774a4e9ade956e22c6cbcb197efc4725f1215be30429056ef2d24cdcbe86f030f8ec93ea8b4c982b12c277c784814a2d96b97e7671107ab77d0fd658cad953f88e7f0d468161b0b390497c73a6851716b1efc2b6300fd8bebee13d9cdb397dcf3f64d800914f07800afc65c209078765e21c8d3f4e4a98e1046f7bf99b2e963f6fdd827f70edb4ae007da7e388abebee5ffc107049850033ec976d393949385b4d2a50088a398c0dbcc167c5969c2a30a7fc7518b28e706f99cd947dadbe630cc475bd7d5cd4f3b846baafe6d0cc9e96b49556896fe13dac3260f8c776c8cc1f64ade97bcb8f32b9df4d7dce3bf502d15d1e9177e7a4abc3347b3cbebb34080f2b2db6c1b2d7c48113b87e42fbc9cc995e8cb6c4b50fa26552a9c63d010855fbca9021de65577ee28d6ad36e85889ea43de9e7d551887d7976490293920b91d078182476430df08946439b6ea43b99db53701e48ab53571b4bc25a0881d6a70f152083782bd9e1ebb42cbb37964e89332ccc7598f2fcfe3a18e2e9a25777257ea52a0d65e4410d7067e0efcd082f2d2cb030066233bcd3175b2eb8cef6001c0e266e86eb9e8b661f0e2d6279c872d4b286e5e5dffc7d3283ff1f98191d517cf1ae631f8f4ef48243e75dab81a9dc1af5c942581533fa898e0644e18275957b03d7e2eb9c275816ab249c4e40ec03c673311ea5330577fb1a6a4d765c7f7aa73ef963021c4ef235fd3723937b43e278d0f59e82badaa9bacd727d08a88d59c3bf8b9a343a246b7fc1b8dfc185dfab0119fb5312748eeb59f7154950ee1e9622bbec018cb83964be4e7d2e52c171c29ac635e6c4df9661ea7ad478e7d3feabc5a57f9bf97f7d421047af7f2ef50165aec1d9f36b75d61d44b9a430fc05b8dde1a11b8e771ac9bf4b65aa1da988402ece029f7c4d73ea84d4a19122ba453526183bf62c6131c935b6f3d14ed42b261403bfb4afd33f556bf87e560ace520515038706b6a51291252c5429f8cef8ff037d3c08b0a7eebecc772fc2c13c7deca4ba810c0a30f5b79208fae4a933f4da4848be146a643b3c8b9f9fb5d8fd12e6ec01189ecd73e9502ecfd2fc9ce47931ab8205dd0c89e59410cf39233f97ccd9b09a32f40ff4f297df79c15f576e91591a55ebfd3f506ad6b6dcd90ac0f7e0cd1e5deac6f5a06b960f8302ba484b49feee43f3fb3eaaa14bb2e0421cd3d6fd3b6942f28633110add4e9c0ae11e08ab32d377a865ef42ed5f26b65819ee309b61c75274fb596ff23845996db6973d90c82409d9bdc80d9703c30e01a997858643896f4d8da2a4c76a7bb088990b569509075f282c2dad57332a1b2bae82ff8d2d96acf71c98732cb50319974a99f533914286c88fd80203279e0961c4403a9e1c68c8eac2029e8993197183b1a1ef9d526198a7fd2692040e628731f3c6a0db1f82d370da7525496ad448c046801e4f280cd45755da339b8f49efc95c4a3403b4238b90d8ba64565f755da4994c65c84631c30d35c7daa2d011d16fc1b88d9cf347c42179a64068bfff63428bee9115c4fef55da27febb91fafbf9e5fc920bc416760d7ef3d809275f6728b67c96e6ba74b284bc6fcaa096a39c766092beed4a01b2b4efc01134844a0bd81005b0d35d6db2c3071711a15997d180bb771899355355b6795facc969acf5223b11d79e20dfaff495674cba0652cd43e7b3ec33ca13f824442a87ff3e4c4fb29a1cca2a9490ebf953f5604c61842aeaf3d10395efcff01ac15f5817f83d11cf8c316dcfdf7155aa676a5beb4034d080d3843951f87501482cbb8c179dfa45766c1df50fcc12b26b55c4b4462fc86179bbab3de4dbda19ed20c1185306e5487699050ec46cdf3d5b44b0b15c445010fea0bc42e60ef65f70284cd3288ee7b25420ad48de553eca13d7e3a0e2a72c151ccc2521626c76286067f8c82fc1dfd76183bfe714d9e873d2ec89102befb2ddf4da6a8a11f9dee81f9211a62c880f770947ddc7f27fabac536241705f476b067e2be765cf0d1befdbb72016ca73277eedccbbcce9e9179a501d7bdb49e796c20a45be34151daf766359170a56002af80e8a3d41076947a56f32abd32ff39a7ffb1d22028a4f463bb5852a64fd957b9e31c5b4a8b70490de3036c3275d75598f7c1556cb478374b9e1adb69907b5738a6232412988de5c2d373610738387ad73497e8a193a496417ab9d60e26752b0ad97c702b5e3df567ed0429d16136c629648c8c4a2c133c5b418c29e0a5900ce0a101f42bf11182902e855ad04f6eecc651af192d4cea8cd632c81d6644b478096c50c745cae7d34bc19c2119589cc01c7f05ac7cb385f140e7f65c3eca721eed6c9429c188b383bebe7b88839ca4616c68f67e6c539223ad6445977eaad5532ccab89f354458bf924cc982626178da4a484fd321e2c73d256589a08e3253096a619a96201e82e893e2fa8535fed61053b84dc2e97ef11814f0e286955b12ca0783fb26f39312699d7a755fbe2ba55a73bd58fb562715000bf0ef2e0bf179295b1a3b6c154ef85bd509e1b970c84583e06980d3eb04e62bf526b2fa52bbb237c11c53d37a72bc7caf159084b9de6e3b2229ed1e0b9ba7c58c65a7f5bcf9726e8a09605e5984c2fecb98bd985a94bdb4db3bf1730ea7008c03a06e897115040e46903d5f6c5ad8c77d6c260313d43e6edf18ab7bda263298e1e68af485e2d8fad33f565b816054037170d20818920f9ba02e754d3c0e1f6ae91b855ce0c326c710c103754e22a2610d91b18910566e4f2be60dafe789f224a9246950dd8033b07cf012294a6499e280d35b17dbc8916ea78a669b8bb73e9fc275dbdb3ed3b6502309ecc0bb69b79b8834927b671b960db5286cdbf04455b445e05e2cbbf352b0a40dd271c4327beef8aa51b26a17b2bb13dbe3e4fb05c43ae1ffb534749a0c1934973aced16b1870502caeb6fb939c7e07d50b8bb08ffd8144810214bb0ae689503e37a3ffd2d0e0fa5720ff91aa704da3b6e87c23fafdf41fac141ff3c62e78d514c34da38db81cb32c8256793494afa0437b10290209730ba714b1d6532b906d922d313ee8dbf5a76d001cc6f5e58e1b6eb860a525fe1d6569c64fbd65446601f7a51259fcd187f6c71e34069efeeadfb22fb8e848ae8d2c1b032023dff8af9152bbcd0196b31fb84e48d60d62e306018c055989d1a52628700cebe21ebf5465091d3fb9d8406cf5ca7cc31d1aac608bee4006dbd776a74e1d051868b791ad393956ab0536eb89eccd14b0b8938beaf77479f7141ef807c4fc007e6823a1e97a3ca6d89b1adbaf1b169fd778b72b25ff375327260c7e9ae46ae0056e5d418c193dbb30837d30c58f6e9dd30fc04f80c6686ab94e027201c7d8a5fe88b8285979bb288f2da47788ee99c04fc0d11d49a01cd2da638df0628f30894fff269b10205c042b5e7d15eb3b4e3760ebef5841596bc044d6f43fbb70985b70686753d13588d9638435b4bf838e9fac186d8b5ab3f7cbb6d59dc83dfa935d7a57b6dc488f240500bd9a043a5720019fc035efc1220928ef88ef6959ca2ab7bc0a5e228cc69851c3df798e306a0c088c5cda422844883c4f20e1367d7e1a00d39bdfb7d870d5c5f5d209715d0555cf2f8247fef73fbfd51273e9aaf6f502da738fd5dea82e2a93b077e8f6efc5386826892359cc89ef2e4b06c27e1930fcede16841cd4eafb31cbc87aea85eade8d26792de70c260d78810e4fc052ec7e22a6f1b81e63ce3d787b1bab629d2b69c5a85e965597d34a19c6688b009436156035bd2856cade97cb88dd494315d4b1d6d15e9640db2ccc54051a88b0d1b99191214f4102ce05ff92409ae4f40e8f02295c1c75d28a92ab40fcd06725a444ebad8090a08e6f970ce0502bc75025591809c8e9e7229d1ce9561c8dc1d8fac2fe771a6922fecc4fa9f510d648c1dcf220d70dbe35c8a3a096b3e22743b1518fddbd3e1ad215363e7f91c3469d72282ea19bc287755680ae53a698826e8226c2f781b77c325e6088c4971de1e3fe016530a8859cb6c5e9bdb4d0d3f506b88674c03b771794a838400b30dfb1d351b0122b10318cf72e966d87a1e9298d419ae8b8fa4c5c7b61cfec5376c83621f52b66b4f341bb769ae03cdec7170281c8b4af54e49da8c7896ecba1b2a0dff6077198dc866f3ccff45981590354af02ae5010245d631c32dadc303e20995613e65bde874d7cd36d0b2717fc11c4f5bca5d2fd83d28fe68ecf0df0176fd939bb9365c67f468930471891827513188c72d6d096d8cc6716d35b6ecf789bc3722d17305f8d4edd35287098edd07ddd2d784938cad9dd1fcf2029177e6ba75b4c3d531d1abec5ba9fc658cd687b10692832b02126bd18b039a174b0f744da18cacaf2dd0869b901e50aa34a59f4a02cab1331ece6e6e57da88fb58221ebb7382b62daf47d6753bd484cacf1291721ed3b1eccda2fa601f639f16f4eb43aa62831161dd5c4fca6109fc2bffbe260532208e2c9a7e5e7d07b71522425f2e353686ac473b88bc5c6e60b46c5b535da0cd2bb8654cfe4ddd2c38cab2369879be7005dede1384fa899a39029a705a3921d44a8d76b2ddf1bc42746da48270f8af8cd8f951c2ffc96fed585208f1837ecd0cc9fabeadf1c8066f41780726b34690dc45fcce73d796687887379a2286cc0fb8063808c01c4383208c6450ec7a472f9bd2879463ebd497632622dbfcf4a0eebc50f7df974d39cb85f430f896ee8c9f55d97b301dd014160e4ba05325c0d1e0bf8508f037b9cd15497fc6fbf66f551bb75607b8187eaf0791bb337bfc84d91f06768aa4d9a45b432b9df18ea661bd00d03bb546abcfaef522171a32aea55402f6d6579ff64141d936c7cfc3c39e88a89a40cefc5b0a677fd246fa681bf8280de4e5d1ccb5801d61d95df025e2547dadd0e18dc21303cb654b0799f1eca46b0b46416a8bf6240cde4f9302efdfbe2af3d453b107b4178385b93420eba181de60f65bfd5ed4948a5a9065ffa0844f95480ad17e01383cd360eff30d93b928248f0969eba6d3584f007a833d9c8d6ce8311988fb0d30e8fe0aa345ff2239b71519354cbde8cfd657638ff5c5f81255e087f121888c741079b080fe3a04eb131acead4e94014148a238c1df3168c00a56f7bc3e193ff894c31fa5c0233a1237d4643bd0f52b5acfca5017208c0fc8044dc84128ca98f5fa23149b4e0942ea4d12f9145bcbfebb655c893d42862edd870bc30695ec602522b1242cb716a41c7eb10549406242af3a6f54e69ae90e1f510b21e04ce4dd0ecb4980a2bcb4b98994766599691340f4bbb1c9841f14b13a6b2789714791537c4483695574ffac1692c797a5dd051bc2c194ce2135e0e2cce06ce665865bb55182665825a79349e57909e3dda83db75d5f35615f82381b5a6f0a93212da348ab12d0e4563475d0d5eb23c96bb6490f26679d0489136214c902cf0c3d587427ddc7f1f4c29fd986a43b09c9291b6b7debb308980144a0a1d851d374607f56d34ad6501f30d322447721b3ea00fc2da1946a1ff663f787afa8cc6962177c8f4685025ca1fe5429a236b49367b707ccb0ecc636dfead518621077708304a21a0a1f9bb82814c13425f86a8b42d004bd131ed9371cf0c506d0b6e0ef12991539fc5f8689cff0de2f629a1f655fd8bb0a607e12748c9b8be110ef73c69ca633f5b1ab6f7627a62759489d2f8906c321b1d7f09855929c7898be50108d1881255cb87d920b54fc7d0bc8e71ce10f6dfc82ecd0048d3b4447b6548e2553acc39e3256e3c9e49e5672dc5babafd6161af55365371c66b37490cd9eb4d1a083f04b5e7de230484ba43011e7df075d38da473c545c71594de6c4640c08b9022fa56750808bd65b62e59634e43eef20f5b335eb99088563106a8654be5d7143b8180f3499027f53e024980cbfecf32289730b4d9300397376459aca1c603b1af517ed7cfa68cc0b80e19400654b072ac720f669596e067860f48238a9234be4db1e646bcc200d4f962524e0c4a33d76b007e2cf9921dea5e95781604cb9e13ccb43425acca32816dbadcbf9a038818eebbdcc2a4090c87efa48faedb23a473efaed38e1c435e5d9cb2ad6194ba732d8491f167f9e71259abcc9d61eebc2ee0068210f174710f8992e286730eed642e5af4fe77b8308148cf215cb66f6d89102b678eebce90ee053658b1aba9ec7aef01ac3fc46558617ca207da27a7c4d767953fb324460acb9cfc4a2c9bd9217e3ab7d09123d24bf6cd75303ad2c79df639adf7749b10bb1d55fa85074b404ed69491c54aac4a35508b358660b60fcbd0361c0e0f30f89fb4b462412055c48d2e459d66cd18a7da1108fcd9386dc4ba92faf15c22fe1cf28bde51497a0b307a73011e2ff26652036317dac21731324f5f4c8ab88a1408f75d7e2fbe0b7a0a4c42822edd13a1ecb480ed7a4d1b14b69864ad95071c93c259e0499d824fc1fb0ffc1f11bc84cf65f8ef157469ba768e4d0ee0f9934984df3efbedeace7f8d2062e1951934c653d73e0987a192500d2ac7fce450886889706335c81818b6bf88dfa9ce15ba43c01c53678202715944c5e6b84cf7655385b4b65fe833643ed8620340a687f4df88356ac461a31dcdda7335e86c5c3d47ce0b3f4f31e249ec5f11cbf41043c2e34eaf14b6fb652966cb0c0f6818205e98d8b229f7fcf4526b010d00794eeacea4ac25ca38816765adb62b0195feadd20d458e28cabf6506ece60539e7cda87f1af622e195cdfd2fe9acfcdae206a8aaa8cd72926e267360c8550dc0d784c7294961f6514491803856355c128ccb6c55788d838f08226202c41848ccd81c22358670cac9b7ae2ecb4a755757f52053f98fe463fcfb71aefc59ee682cc5eec6fd9f90463ea1cb6946ba719f60bd87b1465c1346df92f52763d08d9341f752f5209d181a9bd07a5c57745320ef2518200dac22194005e76ea075db83da1b1cc004294069c6e9a471e94db5299e516a3cface34fb8ccce3cfd0b891c69119378b90c3d3b2adbcdcaa47d91a4f48f50a06e21708e32830bb0d614fcf88609a130cb8d46ef5002d7847d27ed09d8db50c5ce0a62ebda159c3d716c3bf766b1331a9ca85d6d2ec9bef0ab3071f1118ff9c347677df3dcf3126524b2009ec4e125a03865c243535ba4e8dfaa459ad26f581b8027f8eb581855b240a2712359f22de417bd4134579ee6b152e5cdade76322e5c7740660a469c9ff1b96d785e9e641b52fbde8385d13e8e9ce454d6b914753cb661d8ccf0e9741a0198bcd700bede83a114e56950f1a3d057fbbc2b4c18220284acc1929c536ad845850feed69c95e2ec89749d16df999c5b46de20cf3c4272a37e543da527e5c20837bc4336523474f199842069e95dfaba127a2225259320f96d3a778fe659120a2a5fa021681d45886144a1331060a28c0c1004a2d34d358c8c8cc926abb23763afc9bc4bd289830f97f422fdcabe782476681ab705bba1640a247c91ed8749d87415ab952bf9e9b82f95bcba6282b113305c06f1021bb87bf071cc4662ff8b67fe2afb8802fe07420d5b7343d0c60eab31aac0f551e5cca91a78970af6db3625c81d2a1c9d1eecea3e0fbdaa51cfa52e273949cabddfb99619f591211ff3516d4a9ce04af3cca42d9a35abaaf0e267289c8ff337b7aecb18ff72f4b26e0dd974ddfacd06fc1369d1eddbde34c4eaeb9fae6f31ee1fd13b8cb793a7268ea5fa902c369dc17a171d4b0d7bc7fb39c80391472e09bf60a10ed336dc6f4c19fb698d23bca372b3dd098f6efaf9b412224088d22f05c005b86c97fe1ff393f2caf3bd5083fd8586128c6bebc916b875d2cf167796906fe415981f46813b391db29e40ea0352cab91b3856575049a883701937a4d70fe81a77f61a52c28d6fe96ab06884aa8d7933dd8c3d01283261de7883141d36302f0bef932342b32c3a2e10bf1fae5e626d11b7d225e0660dd4c0ff79806912d21df1c08311509919b568e9e8aeb2057cd718449ba99d9bc073e2619b041337f0a5dd55e35237fb1091ee9f5f941e44f9dacc6f39ce4ea43f2e30f1e7077be904ec3ac157fd973787264a65a2396e95f0972eed50642e2fafd91e09a850712f484336fd3c60cc16ef1e03c0928322d7080f488d12564f9536f74ad3336e6c2a64406ed3d7421483e2c288bf9630891517532f12b0ee885641c1082fa2b6cbc6693feb7fc877330c4a00f2966bb9d4c48cb0bd626151f892a683e918986d0c802ad644e308e2dafb858c197d65b5c8dd7cfecee6aef694b6277e3508d9eb82225c315c1e3b8e78dcc7939cae5002d18932b643060c45ba2ab3725431c879de8093ab14bd21fbcfe953a73b3bc9ba5090e6585def3ff63977f28f6c37fe9ed5015f4be05d9372adc7c87ee9fa2b29c27533995774f7822f0dcbfaefe43c3cefcf321dd0d715f9382a28653c055e49b96ee8704e16375426694f4af3f6a7608a8dfe0120373ef478e4da40d3867c1eb84bb849bc5457ee99468eca1f830a4e3bf81bdec052b66aa0e6cd32b3936daed2fe099a431b8fb81146b6e2c35e743628105e18e8eb1e45441224f2094c1407e40fed8436cef4d5bf4974852756db39befa780bb8e0b5911ae2861b0636b8600e65b7497b107f461a90f6d47ec05ce1250c7991169a99023e102d8369ce3cccf942b67068dfe7f503b4e0c38c73301d49ddec8e37fdb400197c2d96998d98b38e63bf2686b4019ba40b262d62662ccda00f5a6932c3075214171f8fad3c79ea3aceb03ee0c1fc9175e41cd5a3bd76f44ea726e31266673796a1a7690ce764f781a62858f4c5252a9b091222188417e13db4a4a58f18e908188d7df9c9e5ef194f54d6d0f193888b52bb2abc06ddd7a5c45c333223aab13609c68acb08ef6cdc74d4a603bfe6a64041a274b92ca8444846e1960485c4f6ec498d8a3032e7d382fafc7ca8a6bb0da22316f12e0b30869dbd4474608862148287b3e1a382359fd80bc17aa43eeab318da98a19d6a393357d26731f5bb58e76256a321494f5bd65fa8faa690dcabb6730192fe71e8acb8b9863a0286fd40d92261b0ba2a7830ba8748a5c15d2457ce7a4a2c3623ff05eb38de8596750950e7d33e121c6aad0c3df8ad31b7f518086be4ffc72e0100fa76bbca2ef4362ae582e10b6a15ea0606cb232b812468882bfd89eb37ed970f339c3aad6fec49c6670dd9f2f839d1f5d088b5bce4c87db66c0e91ae8a9798f2b87cc25c0fce3b6201ff6aa164b5b02d6b060f4f7d7c4a029b5c29b952c428b3594c9a18a948f64f59b5d854401152a83f0251d4519c5b3d2faa61bca2374285c1fb7a2063465afe1917b5af2b644d65480a7fc18a20f1b628077fc5144bea2982a87713f40465c29b149a00f3469f20ed035786e98b601f831d000e7aeced198656780b2abb7bae7e59c409800cfbd1e35daba7f65114dd17b4e65b426ec04db01d947ca0093824987f4f0fca45f1adb230d44e17dc40f03bf82c7c1d17a0f086537a9361bf81644ed3e6c839af05040ad3bcd7f6743c65e48f1190f9f2677b404915b34607c7b393ba1155347f7b24b7edd58bce86811056041c75e517bb595e528d4c9b834202d6aeff342b9c1e1cd6d40aaf0ecb73c9bc95fca6588485adc093bce2333247a9354ff38a91b00ebb92f7149e09f0a592e73e1d294e5c920e1a1df6036231b0ccbcd09cf94b960223db68d815f2e43c29c1b70ad1f5a43c157e4d6e936a4082d73af4f52d049be2823676cb39eacc438837dc9c34affb7f13178c36733599545e0beba7d4e6510275900ac12151e8d9d56cdd184768ab7f683f192d88cd135fe7c46fd34a85c768d4e782525c2349628ac964f143ac41e0ee9a73b423d5b402bbc18d5bce05a505c0195ffd17ac7cc2dde019eeb1d6da6e926fac2d06aa7f3556c7979c82dfa5f006c10ce5a1ae987b88f0d0472d98cdae308b012b01c0aa56e9d8a6004dfbba8f9dea7c16cb7fcfba72a06fd06ecc540305b2672e6cb6dcfff06e3df39ef3aeb5e68dd6fed554baa146d4f9ffee7456896e69fa3c5b859b4a55bf33cb8e4e2f1f7bfcf5173e087da2bcbd678ebac792302b2b5bedcd8483b747eed0676c066d8d6e7d6eaced2a0911387752bc37e2af6d0a7df0317c8ba6f89682814b3904c8be39c7f55df764d745e3bccde3458f95a184c6fdd67fef45e9c2351bad7f381e9490d3d34d2e20ea0d7fc8edbd7165ff83ed98992f6173af33602f53d2c889d443baacbbbccc5149d5806e6f697d9bfd703eac5bdef63d35aff5ed4b3e9308b8b0316abdb5fff998c4b5bdf5455367e5f7ce7f65feb39635074ae5b6e4f1d5dd61c4ab9073cf9fc56da0e0673d7138615e944cf535569f143d086557a6eff256db254d5bb5cd0eb921e4fb8df44455744db3b2978270e2507cb3bf808aba731939679b4124f8868cf20b3b5d152543338ce3ad5e0aff1764c671adb0fe5bb3daee447a5a50c282142158655fd586aee6e08109d5b7a5ffb97ef13fc43b9b9e4c70eea645a915aa8f3480aee05f726ef73bbbb15bb900fdf5c0156827d83d66e4ef04513bd95650c1b2f62a08ea523d6f49705f4126acc44b8f681cce9bb962d0cf00fa61e408df041eb3144c985c254c9cd5d27f297ef21cbd902f36cece3e66ad70c2367ebd0f6c980fb16974de6d24a680fab9d29e1128b4f90fac7f243c121c56de246eb68d8f000a267d3bc87d8bec58a97f5d0c5aebcb17b8aac463f791411bea14d6d5b9423543eaaaf13b35f04ef3f820274c4288d0c91a63f7eb0018762d25b5db7954a835cca4b5d0e432ea1cc0ef63f965ad086905c1f3a4a05437f6adc3984181676123944e4078b1b7dd515849d6a602b10a63a456b2e058420c2d7ce6d59964f17adf5fd9f8b6266469489381374638c16e89ab804f44dbab29338b698e04118f0824dc26cbb363ba5188996e9b2450a5a1cedbea08ece98db3dd973b2f145e2e5a7e9b82c08343e5cbfa0e7131f423b749f828cc2040ddcb4d184671c353f145c3134cc48da4231c7d23b2f4d681ca8dac32de44111a6e040d3b8b90288c8a3d4ce429dddf729c08005dfef09c382a3a5c7d0edfe6c8bb85ad64feea05f690e2150e4dd814ad6be0995e879bb24c1ec9c08e3d1921bbd5bb5664edea6d949b01694f7ae7ce17eb970cc55b7bdd81596f8d4def2bef2e2baf29c1cdf5eadd7ed1c35d5a44acfd0fc0e14df18266fb63b16b02ac217ef975b0d3610a155ae70b2a8c6c5eeb9a7bc482acf01d82e611fbdce8ed14949e42395b6900ed0440ffedd4693e472a08a59fac9223ea42e1e63625bff1041a8521ee579b419db7f82d2502a57783b9693e317a9c49cc421a7d85518241da723ef9dc3fd5ca927c264e3f9e980526038e2bdc011347d7aae20cfa412bf6eade84291d69f7757aeb4bf8aa79a5849e752f311a5773331672a103f7760b070df390027f559303c843b53b1acd49b04f392b1f336263f60b21c57f9649be7d8bdb7b2b32bfcf94a5c9dcc397a32b3d14f7b60ca249bf88a46d824fb9232c9a30266a9d5524518522600a38220769d8e0c94640949c0e1b4554b4574d5dcf747e7467e6963dcb5b22bd25f8dd834d7388dc1f6edbee1c4c8b0255322708e529b09cfe736f6b07626edc1b50fac366ba12210bb39b0b4025db4408d361119aaffd1435564170ac5d5b362c8d5248ceb6547a566a59ec7788d3174888a94ca6500349ce16aa37ca862ef3d2d9c430d8980750c22f5510289933d9d493dee62aba17f02fb6c4920ab2ae6ef3964c23ce8f2ee764dde9d39e4ed8850f74c9a3cd34de3589107972b88130052a5054979256ee818a83fa093ceed499b0d14dc39280af8b055b4c80a89cd2af31754302296ba5dc05b8cba8ff8546ba66286ecd61172f8790967132aee006f16aa464665ec59225b112c79ea27fc6cba08bd70b8184aee7404af179305c681035fd6a2a957f46ac1985b2176a7cedb73e9e262f59d5683b3585dccffcd74239c6cc61a414f2e0abba60bc43389f889830d68a33f42aad32e99aa34ab991e8d4ce460e86f8d3a3a77648b6ab1bab83decd2d4079a8a5b36279e5f1706501149b8efd320835fc052b1420ef9b4e8fb76a03161e04b8e47cc55da9c93f120bb1ffcc23e472a36c1452f6c4680dcef90fe63dca198a3139b78ea052392400f694eb59411cedd06a4274217c0efaa321195d8253d68d92229c901263045c98322c9569a20c4b9366a37aa327059eb31ff27e4c10edc0435e2be61e6a6029599ce7346e83f85efa4a4864afc67e118a0393e0371e8be0ae03f5862a1ac5478eefa7b71d50273e55d420678b418c2016292dfeace8c3f05ad7475eee797871917ac0bfe2da6d9696c053bb17e147b0c41e36827986f2e1f72a907e30b5a27a72fd8d5ecd983e664e95b2650e80119985b87fb95fa03f7bada08d4c762487042627f267c661e87bcd466457516ac15109683baefa060e179847aafb84d58febcd3190d072e251f376f979c7604a4b9857cd5c927a4f4b46120aeb7a062541f185a73a57809a7d03d33acea03b4da3121c60a27561ad7df9f60808764cec5609f6085f644ee1fdbe89e91e4ad764725e57826f73cb64ef1063d48c9c883daee1860bba7cb8695cedb2b07b76a6315bd0f0d5984c956a2a0e67287cca39ae239761550a4e23eb5ade43e55283dccbe5c8500822e8792512872964d6594975b2268a097058bdb0fc5a3ab21c9314bd9df702479654d6c800ac7363ddeb70e3f80ea7b081c7b2b4d7848b5e174c413dd0ee39cd4b03883fc3cb7ac18a7a35d43023492c14514531d027948de99ba41e0ab85f331cffdd63c01981b957759f9b0909ccb4bd4602d2d522095e57817a4ca30260d24b612c8cdcffbde7fd7b33fe5d9b16d609c15adf8464c5705e2fc3ac8806b8b8c22231a2291cb8294c22beea3056fc53b5af4f37d19a530e834c96a8c4e94bf2e14464200c11af6703411e39624ac0179218f0ac159bac7f41824016d565fd2424429a49f15de6656a624f6d5457795269dac96d661e0dfbea493b40e336d384df23cb289b692b270ed12867bdec30105710649292c2ae02a82efc931944cbb8ff228f1fe7dab304d9d63869a17d19c8b88e902be95adb1888efb86c4ab312fbc0ef823b959b2663fbd6b0ba876bdffd32c663b794ef754f231b481bc33e0914871427f24431bd3738f029f3c14f0c711cb67c9dc73db32703149c7395eb91e3f812129a4edf978a89795732b996f6ee1bd1eaebd872b292d1f48c65305ce43ff19957af67054f6cadcac56ee8deacd93f9c33dc4d4603a7aabd3d51e885ab648abc4d2d53c6abe9bef820a0b72a9bb71b0809ad13be69e374ff0d9fa7d7ad91d840e3b5072141138947932f9f94e4c45f172a26b1391537da693b45fc225b85edffca8c0395133e99214e1610a89f976307cb21203bff71afd3ea3c8fbfc1852b0c6a1a5bc0299d1e645fde5756edfdd1362ea7a38eaf1a0177ab556bb11a85765e9d388f2c5c59781dafe7158609b399f54292f74026cced148dc91c0caa033b106eafdc5295478c808780bd9934b3601569c8f1dda1b315bf00b5857528d6ee99cef7d972e501b90cd3927ebffc72267209010570dcb349bc0bfd1b07d52f772129c7d30bc600a2e1aede1591a10c34d0dbe096e6a6e5555096c7ba398b5cda67d458cc079693af1469e708812f9a9054842ea2c70213bea438a4ac0d238ff6488327a192149d1bd4e1692e4e8eaf0d37625d121c94aa0d6be52d603c7344697fc690955060fa394381b0d80a1f1282ed6dff7d216d797963ce56e10c92cf64382277412fd8bea194fa00387f3acc660dc2b45cc591e9677b44f5967a4206056242cb630bcfb3ee4ea2f45c277a041b1939c7296fe6e3ca8338ff1decbfe76fe94b0fec3ea0064cd6f5d55234c77bcb9302b3f23c3869cf443b00733de844e7c1438389f624d709a528186bcce0d87bc168125c0c2334047a7277c1e31bbd53d644a4392293116c86f269f4c48a9ad51d40a5f918dfc0feb1542ea75b659a5307c6808ad53c1eb2edb956849d52032e7ecc4bd1c549dbeae9ef60aa6daf3129bf2c4cd9d7decaa44785ee166b1dd2670d2ec832e4ea46f326273594588f3e99bf52deb60976ad47daed41d49986dc26bada98fd4c9ae10df2144201edc9dcab822d2304b14107136b6fd63540a1509c4a3948612255a862b121628d7f06b82ef54e0444c2a64d531e2378f790d11aa9453335f3b78e2e36e758e18ae0fa8318ff6df64137fc04dad34dfce6155b47480f48ab5acbe33542b7fa418b1fefefae57b468cdc364d0253dd14bcadf58e52dffd47f12d3306f861dce6e1c4037eb547d1b60d26241508db5f3b4a922e35fb51ba8de6fda5556ab583e3ef1f50cf6210ce4dffd865541a84c7fcf56bfbabbe3ad15bd5afc9062d3109ce90798e3e276b8d9254dc1503c61c67bedaac44d17a1ba8538a01a58440f0b968bbfd9b47894236c2eff35dea3df06bddfbadf7e13faf188573dc8edd766a639046c2095e9c60a283227d2e0a7dc9b183ca9e2f61afd92e21c4ba11e3dba89d292ffb18f540d87565354cdbe0bc35fcf53c8efa6aec5a82050f1b29c15439007a923c6e0ffdf9376c5bd65dfd26ea10317fe8742b945d38ee7711cadfb775b58f6902350236451c13ea368277c195dba1baeaeb29f6b5e5e25f589ad6622b8e05fea4c94b037ae5c6e23368034ebb6ef8d8150a3cde68573535131703b58c83704b43c592fa66349069fa2d31155a27e31858815eaa55893c61eebbf41166ae9180c15e40cdd4cb89166e020a5b3637d8d9c73279c6ef11779a1efef83c6874640557f2d8a9fd8766fc2a9502d320efffde723aaeab4c64408b191c068b4c700638006c4cca279f223fade0b39bf6dc12b4dfec10807f942b271b029db8d27bdba0698492b8cb8537d51ef792d8e31c10e5fabcd2b25097da9ce46f9eff6d2bcb18e3b19327974b4dffc6d76283d94cb97f4fc5ecb35b1fb18c893a461fb593a4345304be0119a0bbae1961a75b5825d4d6c1535e756fd80753ef536aa62f758e91c5dee43c04d208a853d0387c86bf3355365bef8eae3995b417dc4744ca990c8c4145323e6b63d4eb1806f6ca846802c621bdc3c97661fa7a7e4d9fe580898b6d34189eec391bc2c59e9c02e7dd12f4312a6fa3ec0a01e0e62042bc97588d94281959c7e0bc7a71f0fac2393bd14e1fc281c9bbca0f9d638fbb21b04a5969c66b4470445d8857a920a43ea2a4caaf4d2ddb23273081dd0521f2e78b1f031f14707e983c66661648bc64871e28f3ee398e6da52d3e3a09260c43d2eede3ef2d2036f67455fb3631b657eca36cf93d813f2334e72e1a318bc50a149afdec5d1d968f9fd58bb93f114e91bd016066b9cd52e20a68d110f708b6f3e334d9714a0c44eed1a947c8d9e1038d8385997b5cb02be81b328bca0dad5725285881b58b7f950abfb9f7cd87d858030fd20e9e9ff59f088834f9d0e3d792865fda69ea7819e0c9864b7c32902251c000faa0b4d3a5936999ed99b2a749248de6983f397f6790790be605b404b07ec49a7db209953a5d244f5e2c3c6148e309e871157f41190f228fcf74673337afdfa5e6ce068b3acfd54f998396474b2e5a9f5827bf760a656bd9ce4a91eae85cb50446180d29fac717cc4af27654b1b84a65e9c62e31f33e4dfaf0e7fe6c746024e28cfa4c5feee99f581519edde99507365679af215e6a475344f292f1b792cec19a7d54126c4f644a8854b0455550ca8076d076b7ce213feca6eb1dd095f7a3ac22dc0561a79d5eb7c3dc27dcd2a1a5010c352a4a6c810dc9c902ce1e81b059accd3ae11554dabf68fc32f1c5bb159b6018f21612ffd300ad9aef577dad25186383ce014a9efc89cf98cebf491efec68d997f3e2070f4d843d07ee2fc4d3dac5d448edd03ffad1e8e918ef638e7672cbcdf3850433650799f56e38c21e5e6ca76ca2c261bbf2076fb3d3ec059d562868e9dd6ba74eab4841585fd3fd1ef999592876c298ee7b11a8fa07db4b0745abc81be9c6ff1372e53fa81143339ed533a447dd4f482479aa5e1625d44d1c03d2e428d48e883c6f31c4cca1d5e25c1749d17297209b82fc8e696214c929ee1236ceb2804ac61f8999f67e8839e4473bfcdfe4ae0294320116748dcd460b1f8a483bb81e89a2bd2630881094867c8e88384df66be299c4a03b2cd6ab60a6f697fddf3dd832a3411b96c8e24050a7dd0106cc41712f0b2bd90789f681d27096a40323a1547d90e8c7c3694328969dfb83d9746b7b9f250b62a678aa4e50ee698c98bbad3ddc5e56161d632f261121aa6c4cbb660ece189a83cc6a829b4bacfcebfa8cfde7f40ea2e7e3a39d10765f59d73240c295f134437691bf96b6da27d6efe146287126aba058d4b72f4b392ef05d5c01628887888678c78840cb625cf114cb66434f03bd2effab90eb9ff8e0a077ebf924faa68f0a5b21d2e5f239e8024d59840cf473e2ec4831a9a2b9d7f604d4cf775def5ef62702067aff7c93ac859fc1d1f9b063978e748e46ff6b1deb39cb7fa5bd5c5d287866c92806f888e94be1ef672c00ab1d996598ce631302903a987cf9c16174a382af8bcac9365822c24c3ed5cb076053c181b092733acc0790058698e5ca40f60d6aaf72f42c83973d14f1f4f41b19a78b636d8eb5f2d752d109f851ade62d38b9e3ef0190e86700b32382f3872d0a85892d478990d430203b5577a36589b643c08b35d10ea942819350b9b1ce0dd6c64ce2cde0a6a3300cd621a439be0b32c6a429b29a10bb48770405e4716f810b705a8215b339294dd86d62a8a09f534d221155933b02034b84bb65747127aee6bf12b8330a14a91c3bb92fe1cd1a173d7790fc579c404f5a414707d17851bbbb5332962e45547289dd9404be8cbc58931d503dccde52a37aad15209c3dc8be6f16fa0429b5f3b28f2527529df1a465856c46d9c7b92e37a292e05b8b9c45ba3cb67e2a1b11778eaf38a65b6b673e778e9b14c31443f7f0ca694732214896246de4243b2890615a26541ae8a1599c79a0aad1dc6083159688973c1ef2f8da7a0203b69b9a1dced6d98328b500140c87070f8884b6d260c7f9d1c50110bc45f208a833e5634d28b6309df79fa708bd4bc64906e52e80952401f9f939259f92ff0cb89ec78a69641e6a91a7c9c56dd7161cf9b7bac09d243983fa067ef50de5e7944d2cea4b7d1d2aff3036a9c0daacfad5af55ad4bdb3aca4a635dfb3c59c02ad37d5948b7e4a41a4e17aa18857bdea71401153968f6b72d02925278a7223291068c5f8d0657d94d8ef110365da5c5f048827da6a66dd462288421c00561674387de0775ba37767f27990fadc5926adfa0d79f3a89b1531bb0d7466e455aea06756b934c37710900696fce76b0e0739a391e00a0cb447a37b1c207750702ac9974c174cf8d1ca6ef2cc5155a2369471aaeec702f37fabc843f41b2b62dda2a558bd65250c5ea387d1a72261046d50ae42700dbc28f23d26789dfc5d74f52231b62e679757bb4dbbba4afb09d4fe99d1f044a677467e318d5008344e606f0d05a91d614e6c588c00d50deeca3ce03305f10c075e5f26dc82fd4c122da2a9420648267f6761226a6437b5f57772f5f61b0194bdce86d09b45c0555657db95074fa18dfc778bf7938100da0520e5b375c49905ddf749fcde160a579c09339ebf9fcf6cd00ed72ce3afc7158c0aa7f5989b6fceffb054cb90f9dd0a591c1a2d842407a38d25527671e62c0a471b959b65ae5347b27ad6d0c57ad69a290b715ae06fccf27797b828c90298cac34fa667c6f56ee13b73b3d0c5227a93096f3dd1534f64b7c506fcb1310f0bf7e678deb1b943985c5003475aebadeb3c2b1bcf2f94fb26ac29e06517f32679cc9b6b74e1db3dd8de6bc5dc3c1aac48757f35ba19eb7dc268d19eb905f52119e72a74186dc1c8c9176afe10b30825e941fb017af5cf2845fd0fc79718cfceb5cd3a532e5e6aa3e2f95d8151cffed3574d88a7b3a8b677073de8b0de1be566ceae0427bcf9ad57a28afb4ca8787147451a6ef7c7bac176e5d84426327ce59a21510cddbda28e4757caa0f1aa744440ab1f467eabb0208ecc41dcd45a9e9f22837443649466158ca7df362715c637b0738531abdb32b845ca4d2cd58fe8c87ae534ee5d6e7ab6dfba6140c834f706ed12e1a5cd7b64785b406bb119085468d52a6d93eacdd0b366f484cf5051a9899b3a37f0ac35dc36adbb57f1146c0c06cab75dc15f108b3c0ce699a6d6eb01cfa29a310990afc010961e362a98332c5ca1f4989a634000c33a022ada6da660511b9ce00c799b054b9931493a72dd6712b9b68fbb7de9c193a9d41e1d11b9a130868240d3a3baadfe89385b9ae9cf02dcba2a45b264fcd54941b11cea48e4bf635de2da51ed0ada4691fc2a75b003ba105f41970f93fcfca8d2c6d6226791b3a96200683d201a832e968c9ea83a3672bfb445660a757918d4e078ada3b84c37d5e1272964a77827d08b2b8ec8695415d391abde1a2f58b8d01643dbecb8cdc9b041f5d3615c46d43a3b92d27ac51b439eb5769c68dfe7f2271e422cfbd2ebd59fed94effe6b07e1cfa7e018682c0433155b683ac69dc22c8ff1158f7651a8efb3bc4c65d8557212b98da21c340f83bdccce553061f02b76919d75decc720a016bbd549d235f254fc2a9375c9d4e7a2d21ef91d1530073b841e080b3329048ceaff1673ca1325a009cc45d1cd49d499996cf39572babd72abdc45b5f5586e15b36536a35ff54dd737a3a39fc162f17157dcb7e2f612e72e78c10e0661bbeae483ac4eefa62f12157ef8a114f6da0e434482817eefa68f20ac175d4668f46362a49f2372b963206adc47b0333ff7a73e0ffd6a0b1304802822f4375469668e9274631a47f30d1dba744996d813743839d02ad7ad3fdbf21acfdb93748c4a5c92b340f4ffacda945109346147c34480c01942c045a31c3a7752399750f98c70f47c03d1011a9e6e4fdac8eb6425133569be77978f2916fb469f121ffa05b50ab1d55296b19825504a664ed5328c968b6370bd093d7b4756e58f5a473475de93a4b397f2fa09af2a12f5ecd8d23bf53d8a543d2f02aec22494249335ad7b086e566c7d8c44e039cdace65597b1eb6ad9bba217403bb8bb6037c2887c9133307e2eb2efdfde513704e93dff9578e0036911427a5be265e3e7abd7ef279ba044b11180ef5c0e869a8a88be95fb887459ff8032466d09db7ece51bd102b27a80845c32bd5c7e0631c9bca43529ff5b64e7e510b323a5a430fa7465b4858fcda6d591272eaad3dbc414e73cd340a953c608094cceac02e8db3fc4ead3c586857ebc2cdb437c2dd1cccfc358775fecd8072f27bf868e20c8ce16d9f4bfd15d126588cdb4fe856524e3b88a391cc44f1380115c33ba698d3a14583237fee660567e04f66502bb667e112072b32e04fdf40a80b6e72b414d889395ada50a3b7c33e98ba433cf907e0da1a4a3b467c415a8e1f9f63f4279443ea4d751711cc91daa332b3a0b56c3e8819acdccf6b59f538e8174173e67eec1fbe72c08360afe66707784de236010d13a80b37a3c6ab301bf3b654714cda6bb2199216d426ba2aaa934f978d95f2dd20978375c48ab5a0d96778bdb6b1849b2606383cc24dab0a756cbbc91514f782621b98deadd0d2e9008e873bd5276bd02b0f0e9b7141edb9293eaf9e3dff4c6dc9efdffbb26c1217a5139a6b8671b9c1be14fb99927439d614ff271fa44d7577fc8931a3910c3dad15181028bd1b8c69234117b8268fb540229c4c00689e5d5f89888cf8e14ce66d9be97916d97bb189e97ca7afd15536e89269165735646cfe94757ac9670fe51bdcd1cc5bfae15efc77d36009ad9521c0cc5cb464dc9bb7ae84514f9b972ccd474b485e22d7e5f047dd31283532fd1e063198bf8ab27d6b1aebc96fcbaa7aa29ab392e93ecd6cab7d4c37d41fbf8bf5ff685681a916d2906a561b3c3ebbbcb663b5036c662f526a8361c2a6e8b2e2f506b4fbfb42d1f58d61ae830b725b42b0611c32d0117b829820cab074ba148d2a0f7404db1fe8cc16175a61564726d32e6f754d092ef34e5d7b1b8adbfecfd38b4b7513839d0b5df3fbe9e5f8dcb11d4e873690716b9e88754922ac2e629ae947c7b1b5fd3a394d4ff0ee4a8a220025858cb575cab4320fad8634db8e89cb78255c9f1e61d83641e43372fdef3521b59da8c6cef300f20dc7dd79aa0f63c6c059e0e5c2aafb3bddab8f3036b1bd4c1b9008386f2ed750df0df18e2898c847731fd12c167fbf2b298b9259b04801b82be2a4cb3ff786efcabcd559f4ef2fca1d94310ed18d30b6dc6fdebd8e0f0989e572508cec409c5617b9e3f70ba8bcf90a1ad677171d9c6d666b64d47fd20e817d9d707415fb5102545e6b0bedf6bf14987d681d26a4500af1ee1238733fe114637a3e44cf3af197669945a748e662f2e3553eb7bb1bc7db8b06d77564ce8d279699c046cbd7f9b4e5c131b224e6ad817b44f65004c222de3ab588d8d33059764f13825d680b03654857e66011af72161b5e0bd323d47e98f96b0cee5f53a51300ce362543e98384819fd6d53c2e4a69fc82d4e19c4129c92ef9d8bf1e9bf8fe7eda3954f03de347252b29fe5923249d57b9b17b1058fb003e2c4122d18091009915817ecdd2e19a559531b533a178b1d4e2ff65e2a179b011c9013aed27799cb2226f0277a8014ff1519a600628b416c08c10e483d4359787043d31dedbb762e905b01e50aa06aa07d8445d6379e41b4eaf939aa96ec3dc5267e0136a374bae40afabf58b52cf473b7edee36498287293f4ffd30f3980fadefadc0e932de9e5a7a5d7ae3ded27da3743cdc4c9726e256176422c92c6370e11ba2021dccdd8156cdeb083c282019478dccdc69fdc1b38b30c49e4f81c2673703055df84c9110308dc55fbaa650e24a8d6151500401fbb2e0fbd6b4873128d602ca56a50356bc7c515d38489a97159cdc11b13da2ad21ebd3c4da45e45883705b01aa1841b31b64483a395c23756e7540888c2d3790ebab53eb7afcb7d1c98a6854a579922fe8e32405132a4e2cfa8090cd650de9bb83d7ecd986d01247a641c0fb4a76f72f1aafd563576d3fcae3f10267957dfe4cf5e23d8fee3db973ab23cc44acf95af50d49d5fa7d39a8c6d9c8561774a976df7d6fe062c08e64546e3d1048cdda95edb61c7fcb6fe48b68ed7cd3da3cdc9e5fc83d7d7991b69b9a0144ce57086603005063cba134d8e9a998042f4146f0148085a65c0db262ef391b42a2154c93cf036f94abc2325ee80ba7042914823991594b6198bf462de7d8c53508bd0ffa63fddbd8d71e54cd348c78e146bcfaf88faa5a9639b82c9377215b7b56c0993f666a84adb33c4663c9aeb0aeedb6851abb785f608f38611253bc9ee9347d04bc657d0c77619a7523981076bcd2029a8760cb968065f23a37d6aa68f07bb21fa56765f29b605177131a32fde8ab0ffa6be6f320316206fb72ecd3c4bfcafb27bfc54794da3ebd9b2cdb1a3d634b80fc7567a624f3cb52d3532099c4b174c81c7e35f9191104214d6b1274eeffde74bd74b01080befbf01e7a62e2ce9304dbb3556602c4a9bad137187247fd5ee755e8600ad59f829560e4dfc6aa10e01b72832e017268502c4039f3292d8ec79f4dac8732073a3b29d00427f2454aedff5bfb8b51404d328bc611c8bd3ac7b448094d6d521fb941a14c659065f30a7a381da52448b1984b23ecc88ff33c7bbf86224c4078d3d2382702255152203d0674ac335ec304a019f067862ee3c534270c6ea4dab883d6938ed2d69cbf97df71980fc86f3f2875c17d99bcff83c1149c0adc534d3ed21bf398235ce6ea40041ed39d621ce21e498c2cee20a17f303ef353815abaa92238535c33a92b4c0f480f4a00bddf5b67b9d7f3c4be62f72219ee8d17b7730055d349900ff9a6ffbe15193ec96b9e4801a3505e6f92544dc5498b00de8471f5ca66658a2b04916c815519b9b0672728548cdf3c59f67302b87064d52567aa6af3ab33db240e30b7ec99e31958fe1ec2fe71d60010e83c0ef2253e5f13edb119edb857862cc3d6141d08cd30bb51f1b591482955fb40069bb2a284fa360c0f3fa56a3949a461ce97764f4155601d0b16791c2197935a7a2204e53fb77960f82ec48d02671e36fc917e6ac72c3a787b3366c6af1f7a58c12070edd28bfca63cfadf4ea3d9dcd3e33d0fe025d358f8b996014fb1abf48c45c8c1aa8968d95c09f95c60e2fd2a73d7a034e67413381e29f5b330c78e6832e0dd4caeaf641fea2f2412bda629eaa553a5c5ba429ac1f6cb003bed61ef926de796ef1ad48c5bc7169f8dfaba272e31d4a224cfb4164b8006ed093f98d4d403efe34a200dc970c541d869c00a80aab3d1cebe94a9745663536a7ac2735e6bfea254562fcabdfb578fc93c6031b7bcaea7f4c183b1474fde6e6971ed1b1acacecb91dc90c61420ff247953bfc52be7724588438ffa63f1630310cea59de3619bf18c16c8e233014bb6a0ba6867f51d7690eb198709af206c3ab90b4d39522bb4ae8e7ed2060aeab7a1e5a3d6abc63e8bcf5f52adbb6362d1e23b23a0993f7321f0f985c26f3dfe41d801731ff8983f8cf968d5e18b016f64e7333a78c2d35e695d9fbcfc3382b385af2a61e02640fda27e5a494d74617d7b859878c8c8331d91fc5721ca2a81aac2bc254a06f40f6175d7044267e4b086b69b2296b0c3b0442059db1a8860a01fcf6a331352e968b81fe8364262f554f612f96f95c6516436a58175f1651ed229c500ec686b7e3e69bebfa3d30e089548440062b2df382c88d49837de0b4cae4f89e02cba5e2e6aa4aa06da6f53f491048f2603427e4127b2b921cfabbd68c2d23a7beb92073e66e0da18701f2071dfd7d4fdf868bebfbdcb98a47f3a3aae803e94a257ac1223437a9f495abb9ab64d27166789096facec577d02db0d7fc63b0b71b14f750e599649eb3ed1d7282420b84d2d33004d2998b0eb739eccc802de9851e80c47ee46a3f92b55de0addb6a5fd74a07cbfb01b2c35613d27ce295e6da86885a018525e02d05917515c4ed08b064e9c57bc68e240124bedab82a8cdbd57b53dd5afa69b04c1ba9ad89eda0f448500f3c2bbd185a62cd8eb22c8b1ebbc71f04c91d489a056569647c2de66dc4184a17564e8b967c7d18efd18534dd6b46796c0d5a157960bf04c7872ebd909c802cfcf7e7928fc267fdc7e26f7a4bbefdd361d5476d77a28de111a7b56fcc85fc330a58131b08bcdf33966a7a05ee57c24e3359331413ca5bd32919af85def69cb0829ee062fb10711b05e45a05e7734d8b65d251f75f32b483ca666eb3bb85da1bae58e54e2c2c73093abe8f399dca1c1d036c1e28630c9db191412e74023af5e79f09fb1f8c3a076f8bbcc583728d467411cf177c0e9de5318e3503198f1aa0612f368d1c7bde5fea6fcb63570b44415b51e21daf0e91abf864084fb03c119c1f6ec365b87200df9ec60b05c693100753f2e0edff7ea87e85c1776b73c1d1a1e775ee56291dbbae552c00d6c78c9ecca5d62a95943b72a79cd60b7f42390fb9768fb8e3e41d2d36996fd7cce3410be59032f63211e1be9a4c0f829ecdf41fc4fc885aa67410c4f7f8f2871c2f1fa530e9e005a1b9426289a1bbe8dca82530c3ddbb462026ee4c5467cfc151a7942b4612648d19e7776509c82e60f040dd6725bef561c64205663676e85ce442418b0c1d203fb64ee1b6c9b55344475efd813a9c82a46b5da81a091f68e27a2c0fbbe12e64d17d6f5119050b9164c3e5c618a0ac589b6126e69e456c74d1e3a715e20e4e9fb5c9873bdcf088f21caf8111e8f7714020e92efd10e32e4d77527f93f502d2455c3e06d34f9e5af05a567f1fa7061f9756216fb98f09ed294ba68e94cd65357a3413b7bd2fba81be1c5105b68c72250432c23a0b2d170afa3f4fa128228bb7328a5a5e278da087635c9ff64433b98464d85dc7086a9fb727d6dd2040cddd3978546a687a7af7b0c8766819ad924b2fedb447eac713234404ecdf91ddd4b892c69a002d702a28141029affd383cca7a59d2148bacafd8b3d1210d3ec63b297dcc6d0a08fd9a3cdfc88ee6f5060458c7bfdc1abd7234d3f580c71981d11471c3d93f5d5c67d461573720656c2de572188ed8624a22c46fec8c163c4f683879c85be004ed042a2020c72e8931f1f76b9cc6f9b1750fb59e1f423a193da4000ed5c225cc8b8bdd07f096808570813dcbd0faf2e943e05a0f7efdd72a407b61e9c4af55b9266c40e922666efbf4b7ab8879d72edf2a0625ed279d218a831e01e5480311994e322a67cb48fcda70abbfa736299ad77ba97e156fad184179a44d42c88199ddec3c90646da6b24152f85be8dbcfcc4fa8a5c64fdb34efc1b39ec6017c37aa4afb2f047fc31013d0826a372c3a7a86533cd40fec63ef082bcbc2d6d63c1d5ff6632d7f2dba4cf5425f067115001f201a83668bd41be4e05f9e9888f0c84fc2e9ba992bc511a1ff017366fe4373dbeeeeb947ea780ad0026185339f9caf614e962612a2a4cf54f3eff8ac6ca93231707854712a485c335f7e13b940eb3774b7e88348cf47ff0c4e738439369932d40040e304bec83a9ad246f5db8bd487fe84e012600d5eceb17982ac89540e0629062c46d9826e7e5c2044512837de563be49b7f4cf5a699d5fca7341071377590ac8892fcdde80ed0803bbe1a847fc9757c1ca699172651b3771beb4df180f1dde39da3a14c06d9b687b18f2f033f85c5082f311e4b5c1f7d76fc0d08e1844307f2ff61dd2e00f9fe11b56f8bb0dd0d3b8175f29b290a602156878a34e26ce8fbcd9373ef88d25ec5f69adebbf0cfd1fcb8733d6229e95bb27e93bdef67a554b9ec60f3250839cd9e3fe97edfb48325f2832567de3187fd51b37d8c40cd52cc3272184df6e611a34fa1360babf4856680d34bd6abfdf908558ab7312d8d9541edad1a89bdcbab82f4464771d69a3fb8192643a5ce61874222ca6bb03a6530de0f623a7803a09ff01f99b88639bae147adbe3d6310647c74c2bdfeb23a59fb44c8717293e843388f389cd8b5de264033a06d1521d7cbac8a1b37e3985e003622628a4527996e46ae66654a785d09225bb5b5d16f302cb24c48320d8f03e4015d269fdb2878cb6c046296dcbde8d817b7a364e848446cfd8b7f0221b7b792916e3de32a7aed3024f530d4d42196853ea72e9f697d30b95506cedc1c670e35d408ee53108b919ea7788df344250d8b2a26bc2e5607002fa72c16310bc8c6e776a433861c6b8f73c46b1f7369875beb10ba1ff5daba10d0161f4820024b312def7c96fc34ed2df2b7df83e0df401ab24c0b0baed36aef00274c9c9c8b1115f53050373c5ed6f03748d1577cd2084e7488ed39531124fa5df8c2666621efd2be06c99e614a0a721a1687ea9b51430006a32a11e5405b0738259c7960d69b8a49c56f3d9acbf670fe73951b085d7f97155d6467461174903d6404d69a8ee97ce7006eeca0c59d539dd0feb65bfb9949abffaadc4f3b059cc547d55977d82436a699ae4543f4a1fe8318d8a0f6428e8069ff2003c12ad4564deae7a340c37c6aa35407f17c970a6e2748eb9679e9205445b184405b2ac56bf570733a55df47a55692bf939b63ac86ef894c394c9a8b9d18e08015edd06bc995d00e6940ed645e1ca11298de4a9a8b152bee8fbf53be5809d6bf61a8ba6c9d85325c758e7d8ddc4c91d3ff29e6755d3898bcae3747d0e02972827271e6307d263615a839265b38485554ffe0985553fa65f6aeaf6f55f45efaa3e12ce3341b493e0f29853df09965910c926c2cba5c3db4aee23328c3d9374f1de67cbf83966ebf24d92b7653948fd0664cc933fbbb8c64b8b0d1faa26e3701bd48a13157c32e7a934951b4b40aabc410e5b57647cf1f9b569511500c882cfebaac782b3ab5c943991263bb074d5312d7cf16ca3132aae1902e153203f014906047ec52f028ccf968e38bf628e746ef269767472038b1cb0fb0941352702ec3ec0cbc2f34673e5da2f58c651a97dc7e1e09c3627b7820089ca8146835b3b515cf48ed7491cb6dd5587b386073ea59e64bbea43d1c2c517faa90bb8e6524e361945c2fb4474a3ea1b4bd4e3c187a54bf627b30a58cf86d2780e13608a83fa209dbd85a4caa7b547003b9c6ebf7fb3e9e7367aa75aeb3ec09c387fcb1c454ba7e973c4d21d4af0621c9ad3b8a9c1ba17c17766e01a4899640e1eb99d5d883aa390a5d1cb79f3d6e70bda48b590cb1e9a444a2a22e4b0eab144169bbbf4899f12d247b9f254de84ddce110a4972fe36535c92cbfa83cdd4d6d9f553c4a062f804ec8c20e6d70259c3aec1d3086f22ff63dd74651cbaefb8253cac45cfb4a258a21a9c408f25e0bbe304fbebe38757ae3402ccd546d4e53958167e6bc805cfb6140e485def2870657cec2a276d63051b72a5a9a76b3e86a0498bda461a0027e0d810a3162fc743badde35f38c5a71ff6c5f5a2a02c2f08bb1744a3223255d1dd67bcb1717838692e4f48c774ef43711c4ceba61232e406bb68bfa31818c8d968c52198263666074fcabf263454e3a51fb4e61dbb266db42b43f741c960a93b529cf7527f5e6a05f80fe4707493ad4d1091547cd918edf38630d8486f5d6fb03b45fb4ad3ad8c030bdaea1820f7bc058679fbe3491a97a91c1e00e06c80e6883a1a10b378ff3af224623d723f7b815d681d05c80367da7a36656492033aec1871ce70c0d51b803036e61cc6f768d1b85a1d9199e1add6562a7cfb85723a1849b83aee3e84ec6f606b586cdf90476e7642032b663655e66785170ad08722fedefdfea1c0be259d40b3ddc606896e95141b7a4515b7b7e636195c54128da58e40c7cdebfaf1223cb9ad97655b26497a2344a29373ba64500c068de4b81ddb5469dcc45871754fe77c09eeee51837092022b4dc060cc1a47ed6ed1cddde442ee14cea1e969b74860d13b0e1fdd1837eac0cc28815ebffb1f4e04ea74d1833c45a4293cb03c075f44c22fe54f07d444974411b0e5ae9a9339a61678a84f4fecc8d07bf8992faea7d6ca1f8cd35db7cd8b4cec8ace56c2977127f357ab840b5c990ff403e906fa899d8dec191af6801b5d687b15eb693adfbeed8df31442f479dc588e6329808e68aa5aeae8c788e003a7eb2eb73415e231cd1f45221251cc74ef0c57ef9675b320e38bf1bf1b2d68db1d4dc56d14f39c92e7888ebfaee330b82a16108a8d747e2f9f68acfea079c3f6f9e019d18980dc764822111ef4d365edeaf5e8b778aab9ceebd805ecf810f4e565e81d1c88370671d3320bda8b387287e05842c50c6ec81b154997ec3ce98a476d052e543affd4a7555bb740a94601aeac5d9f9c8978155d8a9e54e4d84a38aa486254374270201685f3f695fc2bb034e3f336e6ea4eb5216789eabc1fd4179d4c7415d934c0c5ded6094f7b4b1f65391f906cfbfd2a4a3d2d64d8e2dd50c23ee1ba6dd264b3a7b102cc056c81a38ab645bb7df11c257814fb340c3568c0390c2e8fc11ba808f2ffd382c80af9e4de64910cdebbb348c8e17469a6823a9f547ca4d39881ade67d7fcd1bd762fe96ef8961cba392a8f48de40cd0fd0703386e587cc03cd215ef09660a1b82b8bca8f97ecd020fd17ed72543b501337ef8392d312d93500ccf3b12f92ecf1b1bca4f903d6c467aafd1ff2ae44c030cbab4714d77e7a644875ab58ceeee3469be6bde71ba27a3ea2ead9294ad3dd256759df9eec5ad71aa5164e0efacafb25c05ff0c2ef1fdf6591199f59b950d1968b8b50b62692b96ab2e28cefca58fcfd547c4224ead734e01e67b093778ed07209a2c9431a3ea0ccb8563a93b572b315d115db693ae20cf2fe6e694cdf23433b3bf92553abfdbcfb921d6682e305abafafcb7437ea303fc4df6b1a5d20cea0bc14103f6f19c999d3be70fa57e6501c9669a30e1e5ce41b4fa6a2b0c351fc7800d920febb43186e8cf76df316dbeae128e408880e137001da1f2e07af1725be56277691cdbab360a79f9ad52c35c4ec2a0bd7a7a33e16aa57e927ffe745508c54f5a0f9a9ac5d16e16a706c42417bc73ab3279b9cb327f7b9506963530670342185647cb25f09a331ba80309c9ff08d342fd748cfe6ef6365fbd5d1a0b75400e8ec659db709733fb80bb7a0f78dadcdb4ec1623cec17a665d06f5ce7c9a2155a36e8ce3aeda6065923a490711fcb7565875a6bceb3c9a8ee501f635a6c81b1be72579128a292fc17e349162446006c585471080a4a93229927c8fb85fdaa71e04c07d20a10ef96b735a9e860ab289255018ab00a73f627936dc2d45ece30cc9a1e8ecc72b8e2a60fccabed0413a942811e43279a65bee45a4a6c3b18a0e9826d3442b05fa463bac88abdece752fd13a81cda8cf028c2f9ca672f7ae8010e9185017abbf8b22420cb60cf0066d2dd3233c749b1f2c40ae4074cbbb6ae846072486a10eb4a089bc4b17a465387aeb28339d1338f1f2322833e5e3ff2fdb7bbbf7db20139fce10d8a1aedf0cd91ce37966882d149427d4bf4e1adf3b893257117e37391c2a49a12e4b69a3cf47868acdc03cfb23fdd668c45a0df8c599bcba7f0382445cbedd3859473674ca45f1c11cd518acadc36eb2964ed09236b3be45a1c5e853c950ff43da381161dd7ef34809a831b6463ac80546286753a095eb89a883dfa77ac1016c3b3b7058ca85b703ead1fd904d0032357ce6acc016c583a1035542e8a08466b9d14f3d3f4757eb533f1c9b5af947822593ac00289955632077f26de2faab536a2c2f3df05da53220af72fef88fc469759700a984383fa955003398871fc816744e63043f34b624dfbf4de9f2d8fcfd8ccafda9c2becb2a071960e4e70294748c5545bb860cf44714d730c86e417dc4f8968a624a33321ba51759ef4f75698e6e0ee1686fdfea3d43031bc2d56d70f59ad133a73f92f922cdc2b7ab804d2f9b75ca4c592ba375c43f231f47fa8e7cd3d8760db711bf6974d7780cebbe182a17a99c4a40ec8a358d281226ee9e77fb7450fdc6e1c92e8401ce79040243d57a9edc57910b9999b768ab2ad393860ea0c28eb2ff3e6e1bc1b0d0fa964a9ef9c182980bd50791caab117b096296712fe097d63de18782cbcde4d16804172834db4cbb1bab41cdb0560e2abd14968495a99cb88d71c8a8895a1774570c02014e83a67545a212798a35eed8e50e74daae0513532d4a521caf432766986dbcaa4938b5785c4cf14efd41e5acce1c5acb21f36b9df2f155d0b220cd4c16f90b7cb2ca13b335c1a728cc9a51c8f40374b6983dec84ee589019ee950a862544d235925aab82eb9c6ed4bda3640e8f4e060fe4ede71ecc89b3782115a2328ab4b8fa66db0bcb68bd0b973bc98c667061db58621fec66136eeee308f9487ad250b91f4448d0ea65478635fdea5fcfd7278c2241a48383a4b46cb09d066db07f65cbc5020c81d8d56055cdb65535ff052ba57fff2d2274131d316cf7979ba98d9fe6071dd917780d57eee188a92ec72dbc8bd47bcc4f53b1bd576a8101c32eede2872c8cc1c98cc75eb102713bfb98773ced88e13c0b171b35d483623925b3ab709d6ad39dd40d0234bb646da64b9097c785d45bb45046a474c4f54e39a35e1813e51d4918821bcfc307fc8147aed41f2642190eb32a17a8ddd04c0b690fa828768358fc31967d3358815e829ae4c55a4e30bfb2db43b12576060be9adf41069354a5ac12e0ebfc46afb5b1fdef9fcfa7f00477f6b417b8325885abe7980106b80157b01c1f7cf59820fd3cad589a56fe2f3ba800cb28f9c72adf7f9d0e4594039f58fc0fda309e96d69dc44ce0bc1e692c171e8caa2e0b5f7cde93ecc8552e9da521aecb5cf264c9bb6c9a3c5bf4fe785245456eac15193e7dc69d49bf930522a7b70550801914ec48a0a11070ee942c882143830ebfd47e92ced2ac05dc9b4c7c0aadd0bd395f48001f8f03aac086dd6a5ea6fb2791fe73d3ae18c9158a64fdfd7b86b313948d99a19d63e64d2c1ca9ac9dbafdf212b7b8d413e0e0452c109c60fbf021c27e4feebe2c275620755c6f026673bd1dffc435fcb35016beeaf173f95d7c8b18a3c3150e3f2d318a9b8beaeaea050807a82d8c7dea930b8332f2f0cd87c1dfa6abdca0c5d9abcf27f66c438da5bb3901456bf725f31fb78798c7c223526f58b0e32748f8f19428e1a059c7f55e8530b8d9f94640c4e6668b748b3b7becc098648735f60140fdaa9183105a02565afefa1711f01ccf68d1740430ce1d061f2e68d0313c2c2c37452f23e4e5ee784a08c53e36f212c1cef50bae11fa3f165a99aa3623e730f9b3d4784cdfa4012bb4cb8b37a9ab4afb43e89af99bc3dde45ab58e0545c6ed0cda93c894eba0d666d501df7ae57dc6d543f710ec1a5c69db5fee9454525709c2c9f3975c4e2dc9d99b7815a3218c82462743dace51900abd1bcc940d8d3b6e3245225b654efbc3be31820b08d326dd64670b0ff0299dacd5eac79976716e906e4fb238661edfd839cf37a69789c173dd6c3e299cbeb1d344f197adf1b4590c30273c2ed534f1601fed0d7b65f069e077d83146312eb5f105ea1727f561023e69bba050c96f44eeed0e24b3a9d4645d0154a37e99b8d5001dff1794b964ba4506bd9136d65e15f2248f451fcd26d3db438c24de6ccfece9e9a00206757d1f302ef33fafa6a1914e415c8bfd4c8a4d24679c800a8228150cb7d29e681e311df3450db9e9cb92dc57287cd753e49808c9012811b5854b996aa85266069580f6766e266fc26924d06dd490654dfbfe59a64857cf3687a21bb36e0e4fce9e9964d0d9cace7385ad0c492ec6fef8aabe3038d3e5b961a1fe4c871b167bdcf48ca28954e9e93b311e60446b346adc374cf44fa4fa04ea2adfde12b21174e3474c348a40b15c3a5b5c2d71c74876db6dd39e37ecd3594019b6484813ed0f1c36e61a073f94544b519806e594e392fbb0c3e2ed02b808d3a38756af03bc43223b56b5e694a7ec1144c3a8caebfd89a5bbc6c644c59fe1690b3c2d64a6c01169d7123be98c1d4f8eb5bace8017da3ca31bb0536cfa3190338cbf079c616371afd4669458f80123fa60b76217173ed8ba37dcbfcc7c3e7d2a0bb06d55ebfdbc372d68e50a510e1d03488c1454de0550a4be9816e07b7171fcfaf237e7e600062ef0bd8135744b4274263c05e163af3795d35a9ce3aac4ed6d2ed05cc8f5ed8b0ab3e0c9350d045d8522f80518198331305e2ac6f83f1e3b9a8dfaa8ff925e5c1fcd63f26cc03d2bf35b788c1c4e163d75e03e064206d12613e5caef2477f38fb92b5c9652b03bc54be41b612f1e867f24503a570128927265b824d168c9881e41779b9384af5ba94c32910474db932f987b536dfbea1dc547d475b39a004bafa1f30e51fb7287f840732a28b69f44642f6c157b1d61528ff9e423da3a3ecbc52b2a5efc067635378a01e7660fbded4dac64221a02669a242094271a11fad67fa2266ec5be0ece78f7dcf7dd8f07397c3e1c9fb0c1dfb6968d551d4f001d6e3edd0a20ed9e8218126ca8f9604c9cc85a3599dec4da251d1caf73ad368848d1878cdaef1bcd1efde977eb0b00b65269400a41734ce3ee28b3044f71e794700fa9480c11f6e88fb33bc2d36b8e5a3935deddd4b6f472c180858ee6aa4556d01f665b6e0b74240cde574c1c4e68040465765b4bf634851b02384079ad8aa0f96fe8a0584b906c36dcadbd1a5bc9c8a4422881eee62969c3c0ff07a6b32135119e26fda58aa8eec09df96575ac07ba36b9b90b1a39a3acf98ad78271dfcb1d8708a174db1d685d9a4fe1869bff95ec5f01fb0e8213f1ad92bdd7a258acb1f62c84085a8aa09e318d389be0544819f8b816929bf3a7e06ccc2e058da3f22bb0c6dc194fbb5cc68e1ab39c96094cad13efeca415f7d1ffde7a0a2a3cc82d674f3a6f5453cf2f62c55166a4ce4798df470462e72686cba584bd2c9f405211310da1aa130c610fd586e1f38289104ce3f0f114de50a4411116dd900d6450edd764c3a85d27e10b7ab604323b3056622d1ceaf17021726b191b45683d2fe070a98270081c6b08588c03792c6ae248c684072bb68182fc456d51bd5ad7ae9347993c8acdeb169347aaa16e89f2b20421485a1c1201be3352901886b43190d663c5d4148623e2a347320cd121833683e7e76e7bfc0d4a025074cba11112026b59696e69b44f3f2779d6e4372881022fedd711f1348e392b32b9b73e21b84d7a88bb066545a1958e42308f658e8e8d06b2ba7c3a33e67592ef183db6eb9809e76f6328ffc1808d690d1fd318e668669859d84ed032b6c6b3051eb71a3c6e31581f9542e256a1fc9eeef8b48a66707c0f761718ff1473fc5c1d1621df063723f91f460e66f3037c830da2e1ce4ae00c07608d1cb0261e20c19e5fe01b7c900df430f1773801632b806bfe81c5eac109be0105b65d1f990d4346159f28f52f1dfc0eef95bd0a79dd9f7e12daf9eebbe3ba3b867ecb30782c1b6cf9b744f2f3c75a304e170bbea35ce43a8982f09afdb14c41e65db51a696836d5844874d9c6358562b2ae1b8894b5625fd3522bc7171405db3ff96d994d4886b7e07659da8ef27f69eb42b64b68ff535071398e3604aec798e3fce828da1044d07aa6f293f532529fd0516ef5285a94bbbafbe56a593315e40e3f1903e3a369d1f0e550a7046fe2b620a1e83441615502241ac27723e97b29466684e2148d76b4e7b46c64110a054684820861aa9caf665a1b194211d2862e5e9a75f7eb1c612ab78960b9b48f4a15aaee35147080e6b82b29480b33f7278a0909126a53da0aa4c288bb2f96d4fb70578308e8e183dc87d76bf1fefe27a44ee36ed7fbc04c76b4d9a09d7e7f41cf353b844b95a2ffb9ad2c57cccbfb2c4a94b1378f7d86c591471e642bf138d16cbe8f82ed989e063ba820f5dff6276edf82bb01719659d1e2045a3523f3270fa230115b204e700e59249b78ea1206fa317f037d55987588d481b6abad12579065d63a2cff87582c36235610cb88b50405653a903cc24da2049c58f22890df4343212bc1711047b01804b0c19afcecf30da3d487190afaccf985a2f3852683c0b8dde6908baab08fe63c6cc3952b15940f6269b14638e4be74ee3c49a5c85f27f7073c884afeca18904b319356122d1a020fea850645e089e59b77ec3e0ae33386c7a1d164cb0ca60ecf2360fd084f120262091704cd3fd1b3482811d0a4681a3bda7781ab43cf7c51c64dcf5809609cf0d6f85e426f54793d8548d3285b28a784eace1fb5c71d3ce4d11d09a039f0fdac10457c9510988d5565a9df346c3737ffae6a93d40c244c6a861014a2250643c92c2809a158cd97cb0bda76e7f44d0ec2428de895478fb48ba55a9949ea3c272ca531e30e7605d31311f9cc637437e74e799c8135cb2f08ba59dd13d666713619f4193cd8487c1923028911278f0a1cfb18de46f757b8959a424bf719d5fa1f2dbacf3cae482e42512864e0f2d685f68112c653526831a07709270adf3271f66fe978e780db433c88326280607b6f02b7317e2e66c055a19b43eff8271a6fa5a8195dc2cdd0bd798133552653d543fad9f3cf1a14ce95bea2ec4dbfb02a0509d396d770a21d8f02ea3d5179929540643e543630f7bbe9a8dc25d6834f2dabd690acadf094577a534d911400e6b38416abd0b38fa06f1f5708cc8687d1e514c5331e904704a9e0f298e1aeb3692f39da50c92f15df81708250f35c11c49d56e2ccb042293cafc96a4b94098a1940769929a0e402a1ae3319e40208ab8ecf809e72b9b9dcdeb8440d19cee66551902df8c4d03150a1a74d0c2ea12487f56d2864b04fa8bdfcd42c7e2600ec00d7ff4882ce11ce1f99efee3883c035c2e4c42267b625308f075d4a9d24d9120608f944bf9138e2c3c8583ea8dbc90fa06bbeb8265168402508efa77513cf6d121833731e5108d76c5006710ecf37c148a2541b586c58ea4bf8a7c3508791b0809a43271d4f8700950d1a00dae09cbb05e1e832fa94095415cfc1cf60001a00299be38a575ab2d06003b8a7a53316b86b36a1b6a1755a5ae75b6e36da6243fd503d13dd91eaeccbc2076b0e210398eebd291ed4eb61f29fa5facf93880775eaf71188738ed9f93b73a7624c4bccf5d3397d62b0edfd49863005392fae9309382a0d6ae73eee2612d60881db0395920096b97e01ccb215d387b451d68622fb76ba733eb61da51d2820948bf04d38c5e9eca803875e9eb1c7855adcd36ec4818ac221de5db6136519b5be8a6a649e8583cf75edd2419b075aa37da372f31712a216bae0e82f811a012143fb7a7a18576ac59ceb13c0fafab434b4f4ecb1bfc72fe67c44289982d1cfb3c91ca2349b1a14d5eda1f29439217f91d76b9fe5ac8c4fa494349443998a2dff4f046ef0a8fd42827325e0138d956a1f18c19bfacef2ad52903093e532f7fe98d2ca7f79b75416c5d0d2a60333e6800cecf0350b710fb1a920832049ac562e57d3b1ddafe56e15da3561e280c7bfdfadf4f034134ef418f8d4c850519e971ca5854cab692b123f09342808673b79d90ab28cf77ce2dd4c01d85673ddc9cfafab0db6f3dfbfee39b40ad5df28ada392edb9301502a86982a433aa9695a09475e4ff408ac549f9cea0d958d286564bda029a1eb9d998a499d977345f063cf0efdadcb8d8357c469f1694d964cc82d92153fcc47b3806b0c8ecbd019cb290d0c24cb19359842b23e50ca4471d27380780ea2edbc3fb67bdf24cf31966eb67a62fcf584900aee0098294084a23c650b46d3829238fd364519e15459e2671c74607fa3ab0366e481c7bfdb36dc84326740e5b95437f55c53f949dbc2fbab7809780bc96de43c7ab1fcb11fdb1d941632ba3555186de85e8a79c39569aa3e1f45a29a7bbd9af96ce4aba12aa46fdfa7f0b562e328f7328935e9ecad93fa1a3be53fe907d6bec008e4a1d1f80fb00915e16298727287ba20afd8bdb3ff8a7434fa0df79ea9b32ab95a535ec97f1ef4100cba9a71c35e4e7a5818509d9462f808e3c85781a141ef895dad331dd6a4babc36d1a8117911c1a2dce82465cb4bb4289fcbc08f8ef7350ce212e36edd035c1e71558a7645474639029286732ca06a7ce6c25c0421314535061d40c232984d94b1dfc300d930acf722bb80f8fc6fca0a2561a519c928db7924d6188a0db171d9c45957808568d578221c90c97bb8e8205b4c9d40c96a89ecab1f785fc7b892718ceed8a607ceab7026515d6029cd0038ea3451f114d10608c346d288aa2288a8229d8072b0ab62d5817fff0c6754273ad005cb94584e6db56dfecc56a6bc9955d726bd4f162dacfb1764331aecacd95dd7b3368c47d556c84b3901242ffdfcc5a4202ba156e0f7e0f1485a2b1a9291a7ca2f2a8992996c5990303649cc191230ecbe2c0c1b9806535875ffc5b424da14abdadf928524d56aafa4f564ba29c2a89e653a828b0931219d4546fe944ba4f635295b0fc13532ddd12be4900e3725a62591c35deb0a090d1410a1a60591c322c379ac367bcd84616cbe2b0c11a978782b3b24ca6352c8ba3069787c2e4043695484c3869ac381640c3c2a5d48d290afe33f09b4c373396c531c3b22c4e1916878c319a6a8924ee4fd1572851c2ae58628824942849bdcd8d4a652a51a1c2a61215252ca79b26a79b8c17105b3a399556a91a850b4631b14a551bec840b4631215bdfc81b2e9fe5c51b5cc24e66b2a4505a567faa419d1ed7a04eabd30d6a89e692688eca4a75423101259137492c314811ac047cea9fe82aad8aabf2aac02ab18a5791552c8b7385652951d2572851c2b9b12cce4aa59a3265068a131a2633541230aab2248ad00de050a54447f41529cbb262380eb85181de004c58d604bc90c1a2800de6b8a07045e13ae442c195821a6cc173c8173510e39eb8a8ae3d6c7e384017345841919826688000cbba385c786098011c2e90811ea8193020071c708861595d585d7cb105175ca496585956298a03a4fe742a819068a002804e6f62202580009dde0465606073c5926bc925730525b29007088290830937ccb0a258531c8007991728c17a93b5a513ae9f7a4113578c948c6c5481241208150241640890922420255f535a8df2a790d068413151c99bfb53a84a364b54259b8ae55432d9d4945c400412b8e08ae5c4122de881b54412aac7a8530ba2582315cdeaa7b0e00bcbb258f0b28293f5c61a5705b09c4a5e6ce1804f5d210348201717d9e657aa2caad58330cddb4041cd5c9f42a592142952a48891536502245a3d9755aa74b3240549e44001e9043674fc2105cb2a0004fe90966585e019263063d4c58a0004fc38825557aa2d1e067e4451958059d6a5c50d91600bcbda2243026959a83ec4e8830916e854026dc127554a14a3e54f1f2a123859912489124b28011a620b2e2159e57fa2444a0aca2aff131008043a590101d0165c1a3d16fc232bb8a0059f1168a1441245804e6f1a45e1c981084c201148993d226059113694169acf524d4c98ea4ff954949afa9aa2104208217cefbdf7de7bcf39e79c73ceb9d65a6badb5d6babbbbbbbb59638d35d658638d35d658636dce39e79c734e29a594524a29dddddddddd638c31c61863841042082184f0bdf7de7bef3de79c73ce39e75a6badb5d65aebeeeeee668c31c61863ace79c73ce39e794524a29a594d2dddddddd3dc618638c3146082184104208df7befbdf7de73ce39e79c73aeb5d65a6badb5eeeeeeee663da547f85ceb286a9c5855d8b185a54a896aea8fb8a5236e4a4505957a2b5c9840cd7ca9096cba415111851694e99960f20f40a59a5816474aea49ab15ea74c29509cbe254299c2b96c519591687012754898a142ef5096ac6b2380be05861599602aa0a5f4a99d4a066542b9b9b97725a92bab917755a52baa2d4443ddd803e55bf84edaaaa6e2ca809fe93966aa35aa94a9f7a2ed50432d5d3cd10b69e9c7cea66759353372b0b22ad52250baaa093e85441a61b5505d96a126124385598ea8d03e600826571a8b02cce1496c5a162c9ccc10747ca9f50335f839a62591c292c8b13c5b23850661640ad3899326a82360185c90c1d498122450a1dd127549a8012c5a8ca922894285972fa2c289a37dd60541472899a5f39c1823261277f2a6139512618a03204124b8b2975dd2107173b52a9aa0d070107589deaa954534a5d5509836a6e4e5fa3aa5a40a827b09c4aab14ca2e01895e268e25a82c8b738365716c184013a6baaa4d2c8b238000585655e1fb29fc0b78303e38bcc025d414a8950d97d46d0eaf5026d50a659af2e2cd050219d9d854254a4636aad910b694ea8d2e5896255b538989e30d1e2c4b8992918dea0d30a0c8b8616395ac6c3d52a5dec6f424d9fac68d0b0a13cbe21c89c1b24ca914bd289369491b50d8f0830db7a694a2d842660d42d63862fd1a57aacd115c561c239c18d54a75230584e55520d2aada804ca6254a945816a70827c6b20890f2f020a34617407cdaf88821930610d250001a4740438a08db1316a8033ac390330cb1ac2dac02675439955036239933a0ea5351da154a942c4152d52792c0a2e2524d8fb5a0b00985baa31469547373bad9526b30aab99b321e197a908100320c60357733461e96a59a6251262630fd55bd271413ec4489921dc4d0a36453475a381ccbaa43460c1c2c4e01c2d0c3b2c270238c2d966581944802045272e50a68a5aa3657e00abacf040c2dc040040c2bc0e8e18b0d702e8e9588655935b78a6a09fe9a5f39a9f99513d5aa4485175a2c192f902c91e9c210cbb264baf0c2125512a82e91e9228a655922954c17368870733715f0816559542c990a6c61894ca6d7a2aaa0245c54cf44056cb0da14a7253dc54be1228b656d81c816a92d4296658956aac782e5460502255155d28c094ca62557558ae2bf894a8b1e5ea44c16512ccbfad4cdaa7e065d519d6e465764f952ca082e9fc5f2163d1133020bca0406cbbabe605997172c992c9074c10a167e585a6aca89da490b2a6549aa4a92c1220d9025838517a87c72c2c56463b3e455951485860f0a6ca184c495510a35ba4252954ea50c62429512a956a59a2c5c58b0b09c4aa9d514254aee63d46dee660995aa9a46a9b7d9526b92d8526b46afaa7689e66e92d8526b684c75025a50f9e4240a2e358aeaab40cdc848c08a4b0a5130552511806289442221566f5299fe0a25a6bfe24d232596657501011540e003aa4a22a92a090211b0ac550a45528150a8959257a5fe8a4f81fe534d4e9f05b55271a951fef348c5a5daa854d5741f60c7f50427f80304a04a8930125c3460fd4af5a751ea57a551cddba88eb87f05172f64b8dca0050324557d6289259230d5d509f580520a455a62a444c99752ab918d6a844555535715377773d32c0b35d3441628cddd54d3c88442d991cab4c410a024aa2570a9a694c8b2ac5f628825a024d84912f7a718a2b91b5092e66e905c07d48c1c50831df06c642063c364506248410655c30fae1f585646a1525196a84a51ac50285c5f8aa9e2fa525628d3947f4069cac9894d4dea0926d4a626f584655d875c3e30c4b246af44c9680a14361000201472803a98800419dce18324143080170ac4f46144a68f41ce009de0019c931548c0031746f0a3003470f1c40d20cc90a1a911071f7c1851051cd6c0e1068574a08909e480060c2584f052482132a636644c3cc864015d3bb0ac4b071721570e2cebc2012132a529c89450c0a55445a66459960584eab281655d35a08117ac2ca052a0b7a81903c860d98268f52a2a8325094b26d3a0ae6a1319874fc3b2aca719e1d3a7feb1d42832d80dcbba641003eb828175c25232d57f4049b5ba4171a94f0e2073650ecb9a42972b164c0d8ce5b13c4a5c16cc1c17fec85c30160dd7c7866b862ba679dceaa4e1f101861313f3f174aecbba8123b238d62585e700970583c4c7a2e1e5b2aeebfa7c1e27068e755d5787f3c475c15c9cebeabc3c8073712e188e0d52aeebe582b138970ca20ee7e5058911d0e5e1703c665c9eebe218b9b0c0b98a589fcbc3e9fc753580735d9c182a9c1d3817e7c5c3b99cc0b9ae17ce25c575c3757538312ef8746066b86cb8aeebe24cce00623a571c17e77ae15c17a733ba381e23451ee7c8b544ccf5097594b860381c4f778c7038d71034c40b029e8ea149270ac7f2589c0d5c9e0e12cf877375ac8f1a57112e8b63d550430dd6655d9e8b7345e18ae110715d9c0f87d3b92e771d71c55c47381c0ee785c9250487e3e15cac238a218718035c320040070e1bd78793c3e5b93a97c589c20119b93c16a7f46281ae5c63742c205c7059081084d3b95e2e0fcc25c3d56983c38951d2b964e7e2703c20ce912248aecf75c1304fffc02e8e919718ce755d17cc7529b9389c1f745eae221c4fe78a2b08cecd75758cb88ac4c0b962602e0e02383e707ce0f4d0b13ad645c3f5c2e15c32786ae878383970389cebe5f2e4ab48e88ae1c3b93ed70cbe03c7094c0c4538978d3902c3b9a4b862aeabc3b93cd713570f9cc9e18113030786f3b93a17e7e25c4aae1e383170603c57e7d3b92ebf3a1792abc875e4ba2e242e1f38463a30578ce7e25c9792eb7ab1812380cbc3b93e9e6b7262b83a1c1fae4e87c3f1703cd7e4702e1d3846ae22578c87735d9792ab078e1198cee589f15cd7e5a00b07226292e814f1b93a5791cb83c355a488921814b0830f17013c1787f3c281f9ab8601b0189eb82ecec5b9aecb080bc6b2b1ac50e09a421551b04055d0b10442aa00e2084fa0a2162104548880884503c421d6143a70f053ea2096143a50108714205050a4a0a3015388521f029ed0e183159ea83cb049070e47cc3a83079c0832841c08235724c205867825113922280c96e88a177c30e2ca1d9c248870009504c48828628e2452f8e10ae8c80fa01b0060cd11800558573e6758208f16967509a24a895eb63052001a7481290253c433434c8429d2e9e1080d163341c420793112233d4768b83c475e461e2d1d193a321e43b478a3cbcb0c1c98229e2432f42043d0c5c81447b027c90c5870de0e1f2a9eeb2589167451e24913325a703c463c4f86d042972464410421585c1f25323f20000b8e47878e113617104b7c8a28a4cbcbcb0f51b618000d4c70d171028b2ebae450848a2302382280073419804d8cca4816ba24b12ae2c415346a8029d291e193c5f3851858c4786678e9e1a2c161a1843a8a10c1832d62b6c0c60c9c183e089081991e285e017a6411800f12234d8c18e0c50a0f1130330b13d0e14416789461430d6c0b19ee133002e912c34dbe801632341aae2978e820019343c4c208cc7c31123343c79d38d1e9c148932c743102e3448629314fec409b1829f2c4912938091374b9c193241a79511200195e8cc44083600007ba188979c2071b46974fa786cff522c58b910f122f442cc1440c3745848879e2c5084c0e32345124e499297283007830800e361011530414520c80859118118c93c1b9932830473c303a7c94746291231e21400880290263c473c4070a8f44c0f5d9a103c4c7065624e6762645028718233614712c98ccc4f0629078429ed00b1e5d8898c1d3c4a7888f0f45421e1e68e84e0f5974111d717572c7084fe70381201860014050a73c4240c80af4c8030f0d804101096c5165c97faf30c00a2b55a6a03225ca93043ca1443a2406280001401e415e9088149ea084032c51802074c801660e1bd4c00e0e48410fa0a487011c89e1251014fc01823becd04006e898230e2a4884384274813768a624f2852b582b5288820a46281934ca28e52590300273c7196678111f18d2813b94cc78830062301203c3c30e252081158fa1cc24c049132a07195f74010044600af208011e14a0620a8f3808c0830342ac30c5124ac422302f7b54e00f11d4b18605c2800006e490a30c28334b2021c491cb0b9d2e70b6e09902280a9c257894c021c20791eb104e0f383c2852c8911d7070c019848302ce1e9d3c38593c0db842d70f313d7c78902107ce0d9c015c029009c007001c99ab06cf0c9c183e46384562623830301f8ee7ea5cd78b25030d9d1d3a8074f18cd1c5f3e48508d00583052c6ae04097cfe7088c010ec1c243477b6e38a2010fbc80d1c5f3a4880d4678c0418b2e45aaf058e9f810c3eae5484c9318f962a483040e463e34e812e347170158814511efc451852343e8f249a4cbe7880e3ce872641504205d8ae03003070689cf119f34bc18400c39b09185478c2e34004103101d23648e88c14126912c3e45c44898243a34749288d140974e147dc48b91970f74e9c4f0a28327490cddb93c473c498c34f9140153c58b0e2f465e1a70440047045004872236c054d10143162f3a74f4c8e213832e056880a706342a400f1e2547687891f15c1d233a4c3c518edcf0c281a10266079899cf0066b85e62e87c3c473a9d0ea703d389e91431c283a703430506003444312203f3027375603ccf7384e78ac9a1b30316457ef878a0cb0c1fc042e6c5b3434c13597886904510239095481894e003437040880c62708365ca196650260ea084a34e5288c21142d440430c8c02ac409949e4063bc8c10f65b036d840c01b43e8c12030504109f2b0e3089101d6b85995a14a61810a530042213b78411f14980003acb05205ca8c134d7ef0e1061b5070020ae41182094860d4030fa8d30f330c41080ea8e9924818b490052b1470830d323d8081202c50410948b04719647c316240155440997132c80d04b1410ada78e207870c028317a800100e68200c2eb4a0c2147a50880a00418108b6e8f2d8099591610a4838c21064f08213fcc14707ce18e3f188015628800a2714092543c8c830c80d6410c705ced8e2310312e0a4094542c90c32782c241c61901bcc409013fcc1c71e1d40838c2d169000274a20a1c45f0f0100198f9508128e208419c84090179ce08f3d3a80c619648cb14511460bb0e2004788bee0852750d03043107830438c30aa50c1ea18230c2e5b405024914e183860f87881d385180f78f0e0748063c7d538dd61972806233a45744036fcc0e1e1da0146874e0e170e9e1b2e1b8a04000000e8d4e0a1e1c80c35c8a0c3911c62e0c1884c1198981718cecbcbe7d33122630508ab53296573c463d42d9d6e60ace861250b2b0f90b14273058404742a8154252ea99aaaa40baa5682b0e283951a2c0ba4441220244a2401aa02912a0ab1ac1517bb009148a400274fbce8607d9008e22344155152bf5a559b2352ab222c992a64a8b28521aa1c5225100bb45a5590aa8a06405b1e7f9554952ba0142aa74855982a254a916ecdd714c9a20804a83882655d2688b95e605957209675b900900b09d66cd012a054eae61231a79c3ee384f34d37dbecc9e69452ba8c12ca279d6cb22593d3a5bb4787fedc79f376e633cae83146185f74b1c58e2c4e28a1c308217cd0c1061b32389f7cfee283ef3df7daebc7de74d2b98b0ebae79c6bae1d73b3c9e62d36d85e73adb56eaccd96ed1d1bf66bd7adbb594f2699b3c8207bccb1c69a31b685fd147758aa94a8e6e674c4aa262f400146922031824402200980200002253192c40804402010086459570bae15003205062999020157a6d0618a19be40c50857ae8094184972e50a48c92abf090432726508d02abf09c91525945002884b05805001c1074049841022cb1696a5844aa5b2c402a94a7f1305135478b02c91880a87c60b3484584380924802d4484078d0ac64689ec8722aa548aa92959a42046b9542d96a59171f96758dc0b22e1174b0d051c2b5871e7958d61502cbba406059d7072cebf280655d78c02123a50632526220332588912a2572a23602a44412a0eb0ecbbaecf80c2223454a01040b0b29ba58968c1455542f13250a4dc207cbe2820c941ad8d41a31d890817245060a4dcc1a571a967559c0b22e342c192835c840f15c6758d665c611ab0e35fe70f284cccc94ab0ccbbac8f058b854a3fc3789820c910ab5b229ad40195532d9d4d42b57b04dcd8d05d524a82920d1159bd24a85c4104580900011011ac2a6f4798404a404c8a6b41aadde84c41036a515926baa77a40408b47ad31147803e853a61292559a96e5257ae5c01896c4a2b0b4a32844d69850464041753aa9a4a35a79b9411ab132a95af986a4d4a754295b00427a02dc2ee77e71f5f9df30f6a6b93d7b196b7c906a50968ee0cb18c11fbf496fda0b0b9af18bedf9ffd6209686535cbeab6ed67ec1c09289b0eb3c71ec6d13edcfaa052d697b1d79725b3990f0a6bbb6ffabbeefe646d4740f17cf2d66ffecea05f11d0077b3ae8f0636eb6b907cd1ddb6d7f353e6bbbea412fcbf159942cd7c8661ed4e33786e1b7e7b33d04b45dce99ddbcb75d3309029a1db4ce7b565965851fa08ee3b7ece66779b107e8c3134b3b6b86af673b1ef4c9e84fb6bc583a7eb003f49bbbc6113e39f3adee0e2ae7abaed96fede128db0edaf28dec1bfa65134e0ed01bdb4a86b1376bf3637503347fcb70ba26a1f4595f03d47afcbeffb0bd978d3340eb8591b9ae15cfd8ded641e3f57636db2819bc980e7a1fb46d9d776cd9b3ce4173643d739d8f65b77262807a9e177b8d2fbe832fe5a0fff094d35aeb1e3a1907adf95acf76e6e7323b1c94b9362384f7e1c3edc50b50f7a0b4d327bbde9ebd3768ee9f4fb2fbed1aab6cba41e38c13b60bdf6d6438b741d9630f3f3a2c6dcecf0685b35bb436b7632ccb5f83b2576b9519b66663b36a501b1f73995fdbea1ee234e873b5bafa64fdcbe4bd16a0d14226b3654d32f747833e840fdef8d04ace191432d8a4db2a9fe378a7e49841fdc678e7cb13df874d4a4e1934c3ecf26c1edded875d72c8a0ee3209f1bc51c2c61f25670cea9c9d7842eb2c731647c91183ca7eb7dbcb2f1d74364a4e18f4ddcb2a7bb59f3b6b9be480419f3f99a37457563b65939c2f28636daf6431cb670f36c9f18256e9adde77f8de6faf25a70b5abbda889d83973deb9953019a5fba68e547881fc2ec1c2ea86d17bfd7ea3266f7ef9c2da8c44dbed7b371c7e7ef1c2d687bcbc86076ad59ee774e1654c6e69a3ffc8c5d62ec1c2c68b473fe944ec2cc9e59e774a1b3661c9f63dc9f5dae9e088d115a092774f82fc3d5c340b1635863bb13d7895f753050575bcdf2fe952e4628fd0bb45963dcdeded26126dd0bb43adb5036c6589b77ba77814296a5735036c96ab73b1768bcd8cd589dcbf8651b7d0b147fc7f7edc5fbf8b1e85aa0f9e18eb3a1db37a17c9e052a5fc62959ee16eb8ccfb140af7b6366f3b7cbf79c5f81b675cfa08bb1f6c3b5dd0af4c27ce7fd967f9d75e655a0d9237ccea3d759df634e053adb337ba3730f5dcc364e81b6dcaa9c96fd6df3b91aa540b1942d1f64cc4939dd8c51a0b875abee8db118a79b110a74badbffb5799bd566199f40a3fd8cebc47232eb2c4627d019ffbd3af16cb05d0b631368631646d7b9e1faac74910934c728ffb37537e37c2d2e81b6cfb7c26be37313bb169540ef6dbfcd799db7e5ee98049ae58cb81d6bacc65a594402fd8c27bb38de682fce191e814ec9ec63d9b367bbefa11168ec7758a77cde75460b8b40a7755eb3b5b0677eb84222d076f9ef9bef99eb1c27448432862fbbf07dcbf0dfe110a86c6c7ac38f658db639140295dfbcfb45f76cb30c611028631363ff172dc671420804ea8d6577af3b79196e087f409d37cff2bd627f081d3c84c6879fc5e6ee623fd9a00fa87cecdcccffaf1fc286865079f375f87a94b8b964b00774c2cc729415be8c1dce8f0734dbe7b39d33fbf6c1fc0aa132f67cbfef3b63dbf9ed8062b7ceddfa963d191d7e3aa0af31dcb3dedb30960cbf1c50562d8c2e596d31ca5a1f0ee8f79d35635b09a1373f9336f7752d4f1f84be66d93e2cabac12b77a03eaaec3d54696216c7f6d40b35ffb6e467825f69e35a0eca3ccf5fdb15b9fa4016d354b1c5de7af8ff90c2894ad65099df4f8649332a017c72aeb73861d5a176340717bd063b36fc6d7248401bdd8b2996f96b05a069f20f4567fee11b357adfb175056f137279bdd07a5b740e8bb36561bbdba189fece702dafad989e36b5e61b4b905d4b2391b64b05a18330be8db8cdf46ebb7d9cdbf026a718c793ec91e62f72aa0d66d745ddd4ed80c624068ce18b309718ed84a6953405fc6e630944d367b2651401dfe7bef099f3b01fdf966c3cf5d737f507fcfcf9a8c6e61cbed4c40fbb99ed5b2099bbcb79d1ff4b92827f41cad9338b62b017d8edbb551daec38e6dc4840ebc7c8aa9dd12d8bd0b63ee86798e1638765bbb9d9c607cdce3d0cb363b69d63b58d80b2e8d54226a714018dd2e2b630b7cdd33ddf833a26ffd5d95ebbda10ea419be7ff16ad8390ddebf2a0acc5e6acba88db5fe84240a77d6e2db61ed965ed1a08289b1db37dbfef76e2d63e40e17b88ad852fffbcb89b0768942d27ceee6dac1077c3833e2c19ecc73e4a7fdbad03b4ddc9aa8bfdaedd3cbbdd4165c338366cd2dbccf0eda0903dd75af4c6b562c71ca0d8c98c5dc617bef8f06e803a38dfec88a584ddd56a804e771fae78e259739e3603d4ba0899ad97f96bb5d93aa8cd1fdf7c5b199c93553a28ab96c1c86a4fd9e4cb392864f379fed772ee7b250628749699e72b5f3716a51c94c18ab3bdce70ce307b1cd441f8bae5ec1f5feb0807c50dd7d67275f6f9f3bb00c5f6beeb6ed14a7ff8bd41bb5f5ffbcc9f75353e37e885acd53a65adf75af8ba0dda2f25ae0d5eecee636b3668c736317b2d76c3d95aaf41dd2564edb39d9239ee56835a6ffdb75b76d1cec83a0d2aabb3d97ecced133bd616a05f6364f65d8fb0ddcd68506861c6edb519af4b88cfa0b0a7b52e33f81ec36dcda0b65f3a971dac72be38cba0edca6e6d192483caf7197a7678ab7b6f8e41fdb6b6127b9d11c62cc5a0f31d66f967f79db986419f4f09e59cd59f9df181415fdbd9cd5e8e4eb6dc5f5068b1fdf930b2572b638ce47d8587689c083509d13c09a9a6f086a87c2ab19eb1326ae2f282c25923ae983dccb24bf72e68b68ee3775b96fb596c246ffca79b5753e3c4c52675705580e2885f7bd0b34b09a36b92f77f6a35ea7e1b2e34ed75211717745a67db7331cedb32dbba057513ced96ae35bdbbf875ad0dbd2bdf6be96c9fad8cb825af88f7dbb6d31ccd0b12ca61b3b43344e98ea2905c564535392def1cac285057599bfdfde972ecf7af3d5855619e1f35ca17497b99829401dc4cc62e7cdfcb9677802544a776f7dec659bf676247963399554a99bfba9513f164c43344e8472fd274c4253849884a0083109ad6ea21089529f25556bf24b798c9a1189442294c9f404ebf618757ab09b038704e88535fa9bd362cf92351b015a31742ec2d8acbdd9dd8400addde6ff7cec46ccec3b914824aa02e18c95d1e801f4ef95f9da37abb4b3fbb9506767fb9a7dfe33cfee6ea1f6496739b26f33ca062dc91bb562420bc53f616d0be7bdce2694246fd7d1892ba88bafb2ea755e96a7bbf786ce2a9be50cebbd2ebf3c571446cc9af533f7973337d469a4a2f1bdcbd2cdfcf7b5933945eb65f159ff6fcf1dff1d402183357f9430c756afbf0dc5f8661c1db38ee3bbfe285a217bd259e377a2ae5fb313bac5f5e3755f43bbe76d76e167e6ee9a288bf7e567af7163db320b6d2cdec9bcb9ee072dc30da09d9fc9975dab103e7c6f89baef66aec9eaf9de4aa22effbd75c2aed559ac58a8cd12e659fdc6681bcf4cebab13778db9420bab7c0afb1d7cdefe1de7c7d4bd5b8ff11d7f3b86973687e5b36dca09ddb7b3963676ff6f061fbb99bf5226fbc50773c31ba5e32bf49d4de8989d1646fb7644a3b3d7bbbd6e5f5debca009adb2d6ed9d7dbe3c40ba00f3d62d6eefdadeed20a6a239cee6f46e86c653e15403fb266ef758b13bbbe56a8cb125a8c71664fd6ca6415f463c5717663ef3c7bae42db8db2daf88f65f7950a1a63651967d6d1bac33b059d9deb5bfc2c7b0d624b853aaceca36cd3fd7e8634b45a38fb2d9c5f3d3ae7536864cdf37b8eb05f732c85faedaeacaf73cd569752d0f95aabec452ca194d7c528b4da775d8d3f2d9ed327148a5db6963d66fcf3e69ea1f635d86eced34d361b8351d0c6b72f7c2cefc4d8dd27f46b74dddacffc9a8c110a3a5fbbb9277e17e659db4b00f599a5c393d5d9fa33764299b40ccf1b3dba85d73e41ffdadc7d2b634db6599d13743e88e384b946e8ee36a130e6d86aede770640e539aff9994d659c39ddf5b1334ba59ff4ec6a237949909ad57c657a7f3bed3311354e62b1fbe63ffe08dbf844afcd8acb29bf5087d2280b27a5dc5b53f62fbec01a8c37eadf3d80d31667009fad2afacde1c9cd3d5a6046d57e58b6d5eebd832d6495037b18c99bdd81a74ed91a0eecd9d9c33c2caaa7546f23ebd6974ff8ad16c381ac99eb1326aa284baead76d6e6ebd59743667d47c3269fd8aebecd92aacd0dd97d465d62a742dab95796247f21eb98eb1ef5fe1c469758fef7389df39eb9c49dea3d67155935d8cf49fec182f9cd3c687312679af521201903e5ca76d6d5d3b9bd133c97be4f2d1e8387e6592c55a1f5e4cf296ed8eb69756be07a5bb357b7d246f2da814966e8dda97adcf07fbb5375937c93bb5523575f91d9697fdbdecff9fe4bdaac9930aa31eef65d959d795e48d4f7584c2ddbc8a23a857666d8618bed83756277993543736a3142ac7252126219a10cd93d0fd29b45429b31dce58193d11518767fe08636388eb7447f24e55d21db15f9552548844ab9a2c127d0a75a958ddd48c189cb132a2c2083aad6c2cebc3799d6c2e935cde849a480985689e8446a792b7d4cac67d0a75df8c95911249e8bdedf3b330566b5f8395e49dfa5311d4a184f59964eef29b2c93bc55f85f355a3d16d8211a275435c4da4de86fea0635458a4834aa41e1534d896a88e64968f4e68c95d1e5051123d54d6a34d26108fca3081b1148527525841039184087021011d281003e049103103c8090fc10840f3bf4c0030f353eec9042adaa0e41e490573738f4e849231e6e78b1071bb6a0b4ac7c1840840d2400d97ad43e4b35d911965389a4aa24500084004023804c8f0a5043ab41ddd1a746a3ce1261b3b9af721a464866188d0820c3965af3c3911ea14c232ca712162c28530e31808c0451c4b1189510306d8542bde0fa29249f249ed56311a2d32a22388d5d3d1aadb6fc10960e7fdc500717aeafa927cf0d19c8e3480c160c72b08525161326962ca14412482899d2237cae353b42644492228818028910062840280820403ff8d0030f3b7074e0e48003002c992c9e259385062e2074bc88c182c1205358622981021bf8c3b22c2e974d124c9685e5b4aaaa91a9aa522295092ccb8ab1387e2001113a9020c51147787204a904ff0a85c5b23825e090808f511f7c58560a65841792294206869044085b1042124c58cdadd26f599c9565714620822666fcaa742ae53db0a94485c9b4c4b2387a642826d312cbe2e4c109c1e9265b160704b864599c0fbc0935839d78607597e03f95f2e335ac2d8ff1781db0e41db1ddb09ae352537670c0a24c4c1cb2856532ddcc38c110442c8b93813af03b60a542d5944ea8553dd5fb2ad08c115ff35a40359b5e75459512b12b8640a2a286406153f4143577cbc98929a756272a26d34d1393ad2bd40c36a19ef80794b6d42854b409cbe2d061834a9da8d494aa89c9a36854ff4d56a899a1192ba3954705b4665b3b478f0f37632f03429b49dcd059196f7e52a6803ad65e8c174f28a3acae1fa3669ef4a08056dc99bde850ba6ddef84f5a5023d40a36eb259e13d069adbd2ebb07e7431c27c9dbe2d108b58ac2a4b56b9fb1324a80e70f7ab36bf64a28e7b317d925799b4cd5492b9bc73356465b3c26a02d1dabb76177b3c30c3e3f287c383af6eab7e2dbb18d3c2578ef4136a36df2f68b70ae4ef5d62924170f09286bce4e8cb17ded726646f24ea1586bd0a6d6380678faa03e9dbbf8585739adbb7b2a3d2a219a2721d4eae4248a870f8a9bbcf1e62a59f496398e80e279613f96f7360cbd398f08a8ebf766eb1a59b5fd18739ec5b3078df55ee60f5b7cb3c9a407add661f71cffe16c323ec9fb494f1e2d629e10bc8b6fbe3bb7efdea9952ad4444a48360f085ae427cf07a87c733aebebdebd6dab24796378138a6ddd4dc8c29b10731bf07880668cf38d2fcfcae4830c371e94dd97d63d84dd6cbe85246f7780a70354d65ca5b4393ad836be25796f41312112e1df82b2ac3d77d0f7ffeab36cca3a6783d80eead94939719bd67a38402db3b2b56ff21be78637409dbd757a741d5d6c98cd0b783440d96b2b71d759b1b50e3d03b4b6738fe3bb28257e1beba079ce6ef1d59fae5ee94d0795f3a3cb2b3f42675f84a9958d159e39e837961d64f6d99861c5ecb16ec383013a2babd8b557d9edeb8372508beb63b53d27f1cf6f1686270e3a337c77afd13667dbcb705007639d6cbebb863de67b011abbb2c89e6bc8fcb3b56fd07718ffcc9ea1ebafb2e7c80b8f1b34e6ff771976efb68ebd36e8850dc6e7def3ce3a19737214010f1bb43e7eeb2e3776ece475373c6bd08c677b78ba069b6df9580d3a25aeedc9e6f0fb7b91cd5177b3353c69d0fa1ab638377ff261cecf0214468b996373b286067dd0b17c33e3f9b52766af43344e84a210891a870ccf19b4cd67655becb09b8ddf7bcca01362af135a191dcbfa3c6550f95cdfebf155f8ac6188e64996fb2426b13d64d0879331e7d13de7a6bc710cfaa2bcce6a75872f86f5c588d6fa7d33ff7356ba3bc9db13068ded7647fceafb9c1f6c11760a3c60d0d92ab6ef9a640f3f2c6d884928c424c42414a27912a222128944b7f446e0f982ce2b5d6e1077acd66d3fc97b54834a65d7abd3dfd44771d64e3c5ecc8c6f76cf32e8e982e66f13bbff595d0568cd7dffc91833c36f7123391794c97fcfec830d7becca48de5bd0ef8867d71b2db6df1cd6825a7f964d1bb1c5d9bd9459d09e103a3663bc4fe6971d0beaff13ce17e13ff4f99e2e34b38bfdbdb1cb2476182642e5942d3ee6eeb60b337b6190b1b128339cf03a186863ecadce09d98b563646723e3a5fa0d6e5c63563dcd84338b3d4d51341c70b99dd9f2e33c4b6ce5b63176aadb5bd67619df0e7845c7837479819b6d7cd0b7b0b16b769a3b3ecdbcdf3492dd0cfcd638bb2edff6cacf7e86441b23affbe3c6bac333e1628f6d65fbb45683fbebf57881fdfb30feb6c4d5a47f2fe7b42cdbf2728a72651aa6c5056a0ade6e872ffadb965857d2ad5146e5b6a142126217c2a41116212fa1b536dcde5534f52d527424c42219a2721d627e854a1fdc9f9e44b87ff7ecc54782fa333779bcff7246f2e9f65245bec2930f9efd668634f2b236c27a60831093528424c420dc59bac4dad19b14ea156d309e94881368b7fdafbe07b6bccc928382850fb249ed9fdcdedadc6c681ce13a8abb1c2ffd7f9af64b049deae808e13a8bd9dbfc12b658bfdee656e039d26b0d9aa6c1cbb2fb4d95d92f78f50b823d061028dae31f6cc246cf5dd4d92b70a65e3681c9d256077d8c997af9fc56c49de18366b4ae897ea24a145543a48e8396793f34187acc1295d766be91c814e0cff3def592793d025c9bb0695aa41a59a7049d18844ab343a46a0b61bc4f159dcec9c5d9b4824128944dda36ead62dd8a405b862defccecc2d7ae3a11a8cdec399bf6c6991f5f2747cd26d0418462d91d1b6b07dbcb8de1106874cb9a84d361862d847af1cb2d3f9cce7096b594a269343a41a031b676ec31091973d93010a874ae7ebdb155dc39b7fc0165eeaa6b7f1d4adc0cc64328c6b99f6c8e5bb7857534bde8f880ce6fce5cca9717de56d9d3a26308cdf0659e4e7ac5d9718cb607747e6bec5daeeee7b559fe55a3d39356a366a5c3032a9d7dcffd37d8da8beeb4fca9756c513a85d098a76d53b69bfb369e4ef21ea550232d359580ce0e68bb9ff963748f91bcbb61c7263a3aa0b19d5bf695fd7b11cfc7e2be94a279483a39a078de7723949db3b4f83fd7374d09747040d96d866bbdb07eced04642a8df0ceb6410beda76c24cf246ad4624d58dcda3a2330895375b76fb3a630cdf8851a7be01b5cd9afc76e795995d2c49de5b1e9f4aa3d9211a27b2dcba9a926a22da807eceecbef5d7957d7b8db5d7803277b3b91c6d6df07f5a92f7a99a6c46dd211a279e08d13c09b12e1d1a502867cc18d727a9aa0cd138f1a5140df4192ba39ace0cf283ce9b8b9efbcadc9a0c5accd227f6672291c9f4d75f033a31c031b719abcbacfa7d1187689e847a0a18c0beeed98cb76163904992f784577404c199b5e892455731c38ce4229183369d17d02a71bd5d6dbfe9326c1c08ed9a65fedae4b7752fba0ba88bde2ee7cb96c9af7992bce593d26901b5d2a767f789dbcbeacf02ca708d993966d749e8da5d01b5f66b74f5ad6c6e745440db73ae56ec5abf6be6186b393a80d00cd96cd341db15bbf9b6a580f6b3ce5fdf17edbdf21b05f4bf617dd663844dce3e0165753e68e5c57e9dc3ce7fd0eab759c7f6b06bcf0f9b80de0bab73d5ddc32dc2fa7e50f9efcada668eddecdf9aaa517a8ed12901c510ce796fb3f7ecb79645229188c9514b46468704f4dffe64b1fd717edbac482412bd1e356bad844e1fd45d5b6f6ceffbd3e5f7ce041d3ea895b03a7b10b6f6b9dae647670414c77ff54a582f86d1e52c025a9ff339ff4d0665dfd75af7d1d983ca9bdd568b6d834c76c424efd8d08a8e1eb42b76d92ebfcfb9e5e7416d9430e2b716be6ab1ffc4a31302dab95f7ef52d64797a8b0ecb8dfd269a48098180f6ad12b3cffe3c57f730c9fb03543a9badbb4a1c1bf37624eff600752f279c505a36a3737849de24d6522251bb1b74f0a0b01fc6589b4fdbbeb149f26e4d24722d069d0e506b5b3b6c99e797ccb94af27ef00e6ab3c52c3bd7f7367797cc0eea1e73f1de8fd6a5b36624ef9a5b65be291d0e50c7b2ba83365f579d748de42d43344ed4dc2af8f4531a64bd010af163375d4bebddb71fc93bd6556d4224ea1ef5a75077e49a06e8639c7bb27ab184b2b1dcc900b5b13239d964b33d37d9d7416f8cf8e1db5eb6fa20fb6f22128944a38651900e1df4cd86f3659cb9ce416576573eee8c3363af4d92773c40070314ca3a716c57d6970fab44229fa376dd57b49abbc5cd58195d7074e4a017e3d6f559bb1956e6ee44270edaaed538ad749831292126212645884988450931093128212621361362126251849884d893109310832214e549c86453531abdc9e666358a7da5a00307bdd0a364fed341fbb136c95b7688c609313a17a073b6ae7f5bbcfe5a43132e8d4e280fd1381172e2ae83ce1b343ae7ece296f261b4de24ef5f9d6aa3e9b8412d7ed8a36cad569c2393a3d6a4e8b441ddc59a6d7d79bfbaab95e47d93fd49870d9a1ff6c5f865fb6dc20749de118ace1a345a989bdd77d0e15c5933e13eb251c59eb132a21d35e8cd2d67acf662d91ad79c5d0bd138718242054a8849884988e649680997cb442412891aa441270d6a1bb697d8b56bad8b5292bc5d87689e84444e44b1d9d1b100ad0de32ce7bdaf71be0f49dea3516b6fb2f54445247a2d041d34286eaeda8719bf779b94f20cfa229e974d772db716df094a8849884624926a74cca04fe2d85fa53b6eef3393bc4f2879822212a9b2a05024ef0c74caa0d0ce97b3abd02f6ef225c9dbb5d9b14a870c2ae394b166665d76d97a7b1b2eab19a2712285caa87c128918eb5147d866ac8cae0f74c6a0f2e28f1846e9d8dd762bc97bb47a2ca87c72b27a27442291882644f344241289e61b1d31a8fcfeb6d3d9b5d5358324efd5963f3d09d13ce1f25088449d302893d059162decd86cf60c0666f15668e37b91e12821d3a3f30565ecce6831bceedd0659f582ba760cfffd62ebb3d92ea8c4f09973f87ed69e535680d6f74f32970d9db3979d8bd9cf737558afcffc98636774b6c8ce6c6c7ffd2dc6d18a440d4a333a5a5086677d2fcb367bc6699dc5cfd4c9823ed83c42e8ec6cd56dc624ef08db13225188e649482412b5973a5850d9bc418ba1ed38e2925ac92f3a5dfe3e9fb71fbb1943d7ce5445a26e3d3889b0c758eb38658c8f41c7a63f51cd152693886209eb47665b66fd6c429287a2480985a23c118944a2be4224aab95b42344f4222112aca333861a0d85df64ffa8bd5e1c92218e847bff8fedffccf3334a1f20bd138111289444c424e42344f4236350a91c8a6d688442a9128f5ab52bbb8e07c81b2e712ded8ba5d8ba7bc5ea0cc5dcbd7b58b31bb10da2ed0f95e3e0c997b0d5fdac905eaffaefb852de5846ee316e8d727ef5bd96cb44d5aa805caf2d7ebb35ed8de73e8b240db7975772b5b856d2f16e8bd2ebd767d8b6575af91bc5729946af458525fc31a1ec1b902fde9be56f97dedfd9ab315a885d542d9f2d656abc3b90ad4bbdafc184a79edc39ba94027acd839ceb8e629d077d9cb8ba3b5f3cef72c05caa49c6d67adef39e697a34073db6c9dcdf34d8c6b6728501763c40dcadaefe6d6f90934e2dbd1317c18fb6bf99d40a39473fe63d6be87f5bf0934fa64f6af8c6da7c3f899403fce8a278c7fdfb4f8fe12e895b3f3753967082dbbaf049a6d3fc9dade24d0db32be57b6585dae5e91406be3376f677f385f368f401de26819c3aec2e85c1a8146fcdea0bf97cc9f2c029dcea5ac96d5f7ce362702bd2e578b318bef66cc1111ca2cebdbfe56f6b6251c02fd27af6b314ff670ba1302c5394678e5b4765ac85a1028f3ecbab53ae56d1203817a9410dff6174f06bdff07b4617b63c36c7fce68f321d4d5fba493dedf0e1df60165f8b994f0b9c9de8bd2101ae58cb755171f37ac3da0f53ebc1fe7b3d8b5e93ca03f238bccb9b36fcf1642db8b2d623beded97774073ce31669fb1c1ec5507b4c5f7e8ffeabf8b1fcc01ad2ddf4f36b39d183e8771402d7ce7267caccdf99810facf249ccdb1fdff8607a1dd2d462c1d37f4e9ee0d287cac568c338bd1e56c6d405f56d612331963b6b2d6803659d965f5dfed674dd2803a6fb676b6ce1cfa8d33a0113a1c3fe3da6cfd8632a0efe26db7553e8bee31a013cfafaf3ed8de94eec1805a8bb3ab3242e7f84a2708851f216c0f3b3678617b01c51066f72693d9e78d81d066523e77f7ba9db6b50b28ab2f3378dd47f95c64b705d4793b7fcc986dcccdcc021af19ccdd66a3d4a3c5740ef65f2f1e3cb9c3b88554019fc38e1bd4eb6d81c103a9f49db32de76ccbd9b02da104ae8d85fce173f0aa88b57daf7e9f8cd896d75bc7ca145d10bd44eec2484307b4bf6f9532b51935da0923d0b9fb5b0cddc2a6336b5c671615a19edbf09e763b04dd78db54dad715ba019e2d96cd777f9f5b7e9ed450bb45e3b659530b7e99e8b8fc44b16a8c3b1e5871becfb0ed69f79c1426ec9a07becbd66dc0d4277c6cb159ab7d89e7d533216dd42d2e946d2bc5881baeef68e13db9ece24c4a752a679824fa52622514de5f15205fa58bf989f3b9356beb524efd5a9441afd034aaac9c60b1568d75cdbbd6f5645b0fb650aeeda6b4fc6f9d8f41729502865bccc6508f394d3d5d54d14e8db9a6beb9aedb30d3ffb02057a63cb92fdbdb859e935b6f1f204eaf371370ce73f07ab672750e78f6b74f5c607afb38d0a9148249aacd578690295f2af57681f7b57dad75c56a5ee5143415e9840ed7d287bd69f4ec27fbc046a2bbbf83d4797719e102b81b297ff6b5798db9499d924d0862f94d9c16621c40e2b1268ae714e27dbf52aa5ed7a04cadcb3593dbfcb20b3ef46a057da7a59c3d6cd9b618645a04db2ca9ccc0e4322d0dcac5b896fc33ee58c0e11ead15ec8e273efae95b20d81329bb1bb7f0cdd63ee9810e8ecf99235cbd3b91c59f69720d0796b65f8b9fa70be1d311068b493d5fcac43d80feffd01c5d6d9fbb6acc68a5ddb43e8cf2bebfb76eddcc4ce0794dd566f5788bf39387b1a42bb59bf7f96d5cfccde1ed06f2e3a83ee1bdeca9ce401ad4de2dbaac3fcec39f342a8dbca5cc3e71e9c2e7edc017db0ba26af73b3d53719d40165b3e2d73842bf7d71bb1c50d8d87de3dbd23dc7d87040fd21b3afdf6c685b3b42a8b376d01dbf8ce75bd68350fc9e9b491859b3f5ef0d2864d12dbbf55de9ee9a55f16203ea58cf9ed17963d39de11ad0d9eed7dd741e9d64d8d280ced826ce9031ebb08d73ce80563c9f65f64109d9d79732a0b6312963adb3deceeeca18d0d9b073d0fdcf87f0360903fa6a7d293373f97da37441a8f496cf4edc3abe80623625bed8c5d720961806426596b16dc4fd8db97cd00574625c59eedcec369cf1b580be778fe7bfc61c9c303e16d00a6b83f239932de3d96f0534e2691fbf6bb8a7ed772aa0f8b2fb98d7f67a674f0708c58e35f7a69577c208674b016d2fdbc37fb55f96ed3514d0fbb962166b4bb7f2b276023a6b7ef7edb1fa0775cd5587ce45fc5a576902eaece69ab16de99cb3e7078d127ac4dd993d885deb1250cb9cc4b0b54c02eaeee129dffc7673bc7dd0392fec176d76d9dad6cd07b5d6f57d7fff0ecf974740b395eed5ce6e62d951b2171150179b83aefeb33ba53b9546bfaaedc4cb1e0ea764d24d97ad41f698ec399b730fbee61f259b0ec58b1e23543699504c9814f19287102f2118956c402f2028d92cf97b42f5f0f2811f5e3ca0e2f2598078c1a364b324f55952282aa000f1d2012c582a4d112f77a8ec50815e38b0c3cb06463cbc6840e625030378a903002f741c799923002f1818956c06f022076dee26bb2edf19e33bebcf526be6112f7150e7d89d8d63be133a798183b277ad9cd3d9acffcc32305e2e40318311467f5e677bb0e71b143f37db85ffd8dda0d9debe6d5bab35fbacae0d6aabbccfc9c9f2c42cdaf6a514cd5bbdb041e7abb07e9cf5eb3787ef1a745aecd54278ddfb76fce48c95d1e9450deaee7378dbbbbbe8b0943356465b5ed2a0ef453b636dfe6dc20aa105a86dc77936f7f3c6771d2479a3415b5ab7d9e15673f40ae5bf9c41bfc9295dabb01966b6b61934cac9dc834c3af92494b10ceabeb5ecf0b10cdfe1b6246f2ea8d44af5d8316a863532e873373ffcf85acf4c4ab6a594a7132f63d01c5f6cb3c6f7f1a5bb520cfa6f467671abf24628a32379c39730e87ce610f663acef8b4e4e093121a9ea13b2d9d49a1730dacd3a59c6f06deccf5f44f92fbf7fd8e47b41dbb59e9f3b8661634d3292376ae4515eba6056e6699985afedaace2b2f15a012cfc6dc459bf1b5ad31c9db46752a4179e1c22376c79da5c5f9ed165ea1bf09a5ad1337fca20585eeba6dd35fdb76d556d24b1616c60adb57f7a48cac2d16f39f6b8b21c3eec2d7f7a50b8d9ffd62f6e64b6f887322f4415821bcb93d9c2fcb16061aa56bae55afb7edcd5fc1406b8c334b97a1dbeaa67c246f955cc0e70b547e7ce89e9c964de7eef502ed1ca5c75bebbfed8f96e4cdba407186b64e7861b375466cb94025c675ca66afdd6733ae5ba030c3889bcf0bd96ccc5d0bf4455b676d2cc2fb70c6b1f5cb0265f6fa8311ca670e678d58a0d72b9bd279754cdeeaf60ad4dd4197f8a79dcda63bd6663e56a0ade218e77f8d55b2c81ec91b56815ed62c5a1cf39c6c4ae8a840a585535689599616428ca740bf62ec269bf9637e0c3329d096b5c6665dae19df7a7114e8c3afee3e37c7716638a140adf35b23eb2967c72725fe3c81be3bb39bfeaa6387f3cd29d4e84f25d3a9f49c4067c3d132c870736f4e77ad5d934f13688c32ba73b65a8c1b7c18cb870974e677ddb06f4d69b1a9292a9acf5819a13e4ba05fbfe1739f6f7cb83fb71268b3af4adbde5bfce6f067ac8cae7c92401db4756207f3b3ffd0e6fa41428b3e47682223b44f11da8708ad11699f21d0f79adf3e76dd3928ad480421201f21d0b772beadd8b57420f80481c6f96a6b6e71cc4cca17bb3f40a0d0b2e8e6748f5242369f7d7ed0fa9016b18f0fa875acc6aed13dd8e43369488b7a40dbc22aff35cf395f3623c99bc9975234affbf8f08046d6be39c30d631cf1f342e8b54fcadcb06478beff6707d53fbb7c58ce0cadbbaa038fb1f36dcf0f739cf6e52036e6b8afb48dbb627923043e38a819e7f955caeb5cb6acf513d9f3cae24308f5be4efe7cfb564228ef2034c356f3abce6e6e5bf3bc0185b2c23adbb393dd98b301ad70b2da3c3e7e562386667c6a405ffeae6f216cf82d5a4903ea375a8cadc5eca16d8f757f66406b76384f9c27cbade3ac938d8f0ca8bcb85dc7329cd6cd6e3306b4421b198ef1557fed1606b449d8d0bd2a2f9cb6f913844ef9173ec6aa9cb0b9da2211eb51bfaeb95bdc0b6896f7237ceb1633c86e0c84f664f0b633276f65aec53a3e2ea02ebb973e65ee68e7b7db022a31cb8e99cd12b79dee7ae0c3025a19ac1f2f742cc31c67bb293f2ba038b73b5dfef3ecba9b2579bb9638f8a8a0450cf800425f6bd0b53fc730aeef35f85240a1cc5e6d7589fda5db403e28a0f3c6563dffdb7e3366f7cf09fef029dd8d1ed9dfcae07bf1e66302dad75eecad5d69dd75d848de0edb131f3fa873f1c9362fc6b13dd70ae5899722fa9480f67766ec9b6579e3df28dff89080b607a3b58fb1d8ae7a766e7cfaa03643c7a68578566ceb473eda6704ed2382f6d983ca78ad85bec6470ffa6cc7eb6c7d9045e932ce323e7950086dbfd830cc6ed62c6f08687cdd5c848ef57763b1eff88080da3b7df6b4cf72ab98b1263e1fa00f3af75b21b3d1e5ac8ee4ad8a547c3c40b195373e391d7b3243594f378fca070f8adfddc9e294f656f71792bc53ad4df9748042c85ab6b1bd0ced7b0c4ef1b983ce67cdcefc2eb3efc63b49deddb094f20975bfe65669f163c795d3faab3fb34b9c71f40f07a89c377bfb73eedd97b649def08432311189fe84325d9fb132facf06a8ebdb5eacf1c18ef6ca4af2466109e5a301ea53e636d964f6239bb9c10c50f9e075b04efb5c7eb33613e35307b5cdb59b8eb9cb31369931f0a1833ec62f616c1d2583d67f8edaf62db3d9c1ec0d7f33912212b5f6e383012a33ab8d7d7ccc4d3bd99483ca6add83b9dd8c8336f66a4b292774ad25744c8498884491f5181f38687786f9cefa11b7f4eecf0568664db2bfecb684b7b14be3f3c6c70d0a71643e639d9e677ced92dcbd363e6cc00699b3086784edd379b7675b3bd6afba670edb4af276c03b809a6a696553739fcf581951e0b30685edb8ddbff5a5b5526292379653499e502994053e6a507fed66fbedee2cbcb6d3a08dcdf9f07bc6dcf9fa93bcff0125d5a746af4f2727cd02f419aed94af812febdb2a141abfdc72dbe3cb1accfca4fbd279f33a8e7e635da38d9cd518e5a77d352536ece581925e0630675b725c6fe2c3fb456be32a87bcff37bb6f6cfdcaf55577cc8a06de2aed1a57c7332fb720cda5ece39b2c960cb07af18b4ef63d5da97f2cabeadad9ca0562727f11306b5b93e6ff23e06e76c261f3032f6f7d85e8fcccafe82c6e9feca37e385d2a1bf2c1f2fe8644cce8bef85d0b9cc20ae28538ce2c3da6d5b6b960d9fb576f2a9007dfb30bc733289ab7c8f69b454292291969a1289e6870bfacfadb58dd9c6353bf6ac7cb6a05636e61c775f196786ffd182e616ef73f7c958737e7f49de5caae96636965329cb44e29385c493c5763366f8b1fb29c7070b6adbb637ebd7c69af539452291e8fe15cd1bf0e972ffb297db5d272299634e3ace16b36a6394b18b270ced39cb86d7fa83175e8f14f080a1455f68517ba1455d6811175ab4c5b3052d64c12bee3865cbf6e3841062a1af6005f66a3c556851ab3c5498428bd0f04881d697edff5b3bc62e931d053af15bccecbc39cae6d27dea468532dd916c239b9b511614cae44d8a109319a140b3bbd5becc5ab35ee36424ef10f69b504d89a4125d11b27e1362cf8ae70934ff73b761b3db4d4aeb04ca1e3aefe730aeb3bddb2650995b9697c5c613df5fddd4c82537519c9a8844ae32d9d494e0171e26d05cbf9b43d72084ef4da67adfa9496bcf12a87d9f52c2672fbe2d3eac047aa1bb9cad6f4e02cd2dc7576b7df3b17b6b9140ff3d699b9db3f9fb78a33c02adcd9afddcea946f1d5e235006a143e993fdbd19bf2d02adcfba8ef5be5bb363334b22d0aecf6ccbd5a39bf5c5988607110a2d7c781b83f63677b8191b9e215039f36553d667df661b2bf308e159971f426cbd3106eb0c02ad15667cfb55375dc38f40f0fc6036275f6b6fc227236411babf1862fba273b7df744e44a2e901cf21d4cef85d6383df135fec58fb805ecc24ced8d6699d6b5e9d093c86d0e6f7e1f7f16ff3c3d3033a5d73099d9577b66cf0f6e1e1016d3f61bd135e7963edcb0aa1125e276fc4b1b19facb21dd0c92283ee24769ce18bfd018f0e2896d74df933d7286d660d0f4f0e2884163aef8c1dab36b31ce5494866c083031aedb550da8739cbea5c7a08a192796390d9db6c7337b0e6e6e456357910ea4c5ed8f856cc6eae5afed458eaa9462112cd4888e706f4422bb19dad5e99b14fe6b101754e36fbdca6c418ff7ca986a706f72daece55dcaa6baf6940ed9dcfde8c23b41d9d45d4cca8ff9e50a7fec33303faa484fd13c338dbf9f451ab4aaa3f3d16b7028f0ca8c37ebf753ed9a35ec518786240dfc918dd9cf2b5c8b083ad472d6fe08101cdee677bd1593f935088e6096c82d0ecdfdc7390c56ed36bf3bc80be7cd8a06533dbf60f3a92f7af50a7ee10935088e649199e40286cccd677ac3ed9ae7d7401fd76f02bb4d25606df0cd1384153834a3511895883c3d302faf6bbce8e8f35963dca920a158505d4b1e6aaabf9d9766b45a59a1089442a27587e4624aa2989445b7856409b47e90eb22959330931fa269b1b9a5094270194e3a8a4eec9b59124885110c32008c0607dad482000f313003040201a8d4563d1782e8de30b14000345685aa0382c2412886371381c0c05821804c22808411806421808a2180811a15a0314ca0657ba4b65699e3e6ddd55ffffbd82c5004b1c262678801ccde48be3c296e780cd025bc2d1270bd86818dcdb4c16d8b8b35468bcf940ffda7c31cc38336c3599303a64c2a56c2c58ea6a18d448d9dbd7089fabb1c9869aba4972d441d3b2c157e08a7d1d466bcb694b8a1ebb88a05d0f7615340658b0ff01c01f80fb43d9b4010841160b409a09d077eea5a6ca76da1851a17143159e1629037b7ce4f8b205e3d8eab5821e3381891db1c7248046480a56627d0620e378f9e10329699bb77cd7d06ebea5cc478e05940908dc0822f39e1a069eda8f6c766b3595a9c061b50770096b2bb6b997daa674df95b8ee00c2224fa6e9ff669c675de84b8a0146dc6d9c537f50271a6352f64cada08c3bb16a0584627c535d1dec4d18a17d27aa12ad43e4c9d68ef2a642472bc63090e86b6e6b33ebf9f89d602853b47e82324942462c044edc5d48d0e746c518bda0e65a48563a1f28c2f78443668ffc83e04ac6a9dabd4f52b998401f07ac4e3016facebd41bc332f810c8f769f33eeb8c0525117a2e88b4e56d499285aa24c8d1bcc82123f32d1ec8a712e3adb62c299095b52c1313f2f9995d6982a3515d2276322a1854f02387d74d4f645244cceafc0c27c72d5eb22d6258b2b002e1fbf6a8111e2a54cf0dbc0088520508192025dca74aa6b8a2d6a2cca9425b4f37b71a65ada6caa2b922d7264321df2ada419648724fb24a3d58f0cef5baafd0ddacbf4269da31f492d16fa05670f1b71492a26e95b9f0e6d6f60dc7838df6eba09de3deb9ec3cfe8c4902132c616109b1c710685e05471caf5c098bc1915cd4dd5d586116e556ea61f0f439eb036d3cd8a00fdae36ac3926c98b49c82733150f7dcd74461d52c3a5e452f8b44a2504743fad99d6fbba8feb9aa899eefcecb8cd6800a06a0ba48f071bb13233fab33b126d1a1ae3caaea3211465b37516bdb92093133453b40640f1d3e3771640473100fea61ace305a847fc74965bbd31365cc5d985f572ad0d1235702e2de8cf662f9d78be38126a7c7b6ebc240c93c00956ba1a2d23b4e09f97f853dc38844a59843f5b9be4212c5802b9c213a043c32ee9213a06b9b0bd8521ea4840e335eb793b5ef727d5941ab2b66cc20e3310d4aa36574e2eb967ec3791374f426c51d8a70e8a9c6986ce7f4042f3d4ad6fa372948f59a1012e0b8f7d4faac700ef577ebf77068ea6979d1bf64c63d202b0d480fcc2e8f901605e6861ad8bacceabb3e10076a30f7bf4bdb87956c129b99d1581f2f0b8ae2dda6497fb2c67bc198e91c99a29e033c0d5ef150e3f58292f299c105df05458b7843813eaf88a2af8c10d09a1867603862585bb0e3f59d0879b1d545081daae02d11289c8f0a4d413da9946ac574bcd46f684449f51ad86da221ad31b351c9b2abaf13af8209e447996a5f097cee38a3d6053e991de10e2c057f2074da3d1bb0ffa8ccfc105556504c0cd91c855587559bc205d8bf5acad964042a2f63a82ae4c90e82484dfa94eddbefa782b531985d4812c935a5896049d02583f031c0b2fb215133b444dced427f03079890aa8cc72c858f844d5c2a50f25c82886ca61566393772f5e0e03a54d13d9dfd9fb191f648b18a9832610940c516e1113a513e7bcb4818d28a77c22499b4574468994301f61cb33d5e519877f62236c9f3cec3962e3b5885a00de49e2c0149678fcaad36001f5d5dd0faaef7e48825f331ab55112b2b72fc76db2347c44bdb6c895d49264a3de9c39111da9e357297bd1c408124b92c78a481947b16e2dbb89d03cbf40a80d7eeceb10ec1e2b04699c2dca816509e0ba5a513c6feaf538c0bb091631d628d9a6faf78fee82bbe91a36e8028559e5e984130672252ca5be721283f9709db7793e21e129a110fc9d78746683753d2d009978183be352396e00d1775b19acc594215dab9e75fb5954bc336bd480993b4433082f003712435b00000aa44647840e3a0c5000d0e692788ffc21fc401863e1bd2d0b93d1088e2782176d9c8eca2d55d8aca88e716f22b27dfe624a11899fed926ec949cd11997b7519c82d840845777b24305ccbeec689471b4b4bea2af4f711123e997c4f55624e5b76e8058f99f0815249dbbc49707e0a7b535fa497ba47be6e3437dcb11ed5f9663242cb5cde39977a30d3e48d92f6eaa3993a6614d9e2ed9a52a4a250e98e8e664088c94c1743d524be7f5f1f6cc2d6be8942fec5cb93230e2758eaab13f0300fec7018275cf0b85d9563215922b69f0d3c4802bda8e49f9ffc43c219e3034bf400c9b85270150f6cc551ea7521afb61d4495c59c614429df33fe133208ac9eb6b820f2ac5f9efbc4bfd2bf8c0bbc5cba0458daea817e4551badd0e7d48c11ca707e44d6ea40b81036ef83be885cad7608abcc071e061c7b37b4d6c233531f4415174063ac300a3f85fcdf428a67cbef462c40b9761ba70c215040528b8e135f88e0374390defa4450da1cc9ed9e79751b0539de2113c1f1276cf15bd5598451021b4738cd67b8ff0928c093759245aa1443ad0ad8cf0332986054e7827c9c9c1857f289621425da46bda74ca86e92d613938e471923fcf84d15240029d8f540ad1150927f8e067d7414383d7d96bfa1f07056ce603f7a9098ef0226456fa03a8a142fa3809264b108a5ec2c3134b41d156a22604c7d90c40cd8765664874f72eaedd06fac075034e98b567ad75aba681c41c40124f24300b74ae956dac145199f1d4d40dc089a9f6d4a2e01d1c36041ac5556d86e52831f17d9214f8f41a5a6e451e8abc925ce48cdf335bf830f2665d6720c79b7513ff9981c93daeca6b98be7df78105c506c88e8ea905b453f65fc4e4dfb237ff1b7f206876badfa411c6a9723614c1d128ff93cf7bf149ef4f1ea29067d02a54d7e19d309b78487f0e2412c836a93039cc27955f42f748a2de94a5c5a300fb3e4ea11974bcdef3279dff9f5364e4a52306b19b2f2b1905fa50c2c5f3ebe962c360093ed877304eb025d3255809e221dbdb36b3fc754051b6026b8f6db8284f78fe8cbacd18a49800b78d6110136f6941787e1c8f28bf743c586ae4f859e48772d50b7d7a814da004c318d0d279615298be61516ff90bcfe8725dbb9cc023d8c1f265bfbb4208eed22b41954af30c9289effbc0629978731495faa610a499e9a0f448ccce99774bc9cd9af1d38480a2d844c48083fd6147e9f0fbd8bbcc63fb9ac7f2de5d66bc5706fe8654f0767a3eb0e91c85ad980661554594a8cb2169f427d1e14991d5fc3e67899e10f00b6c829d4a7384b707693e8ede0dda0048767cc0319787d461fb857e54392f5452b8183ac02f30d4931afcbbfafe87556a85f8a3bb6fbee1d72b82b51758a77776fe8b8bb0bbe5f49b04d85d1210b991f483d2a6e191027934cbd09852aade0c537d5c57d3a0953fa61e0453c1b9a97f91bf1809f06dd31a28d3906886a4b5a9bae85e80fafd98c9e970859c3f8c80822053f68eb889506a842954d7c07c2733146acae91c536dfe7db1aafbb42140cad89b4d92072d09865cd5684d900046b88e083701aa2dae36a9ac457bde8dfd51dfd61b088d5d5ef46d50b10a9c86d905a32c6f7df22705e571b0c93613281661babead14fd2fe06dd5e22c3bbb9cca2ed9c01428ff54050983e26681a3f2522fa310c5f9e523299abb1b758dd348a300127e7aa8a3bc4687169510a8ad97a93005a9496a0e442304bf79e472e80cfab02cdc5ebb6ae946e6b1e82cc1f81f376b0aa4a5efa7b6068c30acd8057681dd0502a41834a80489b6a1099500843beed31e7951af6408afccfcff06031eb9ad080f5ca500c39a2a0c524f6050654520a699c4fec48b320fa58d968d36f606022e106e0ea1f08f6c145d9fbf94dd06c8cd2ebc09fdc32fc2d06365b0705404702248c0ba1fcd9c4ac4429341c1023b8e2240f6adbf024dc05c2485f822032aa0b911de658109709c767a7c817588009d1af7f45cd03c0980a63a4e3aa4f39dc2068a5ca571301398ccf08d527b2ffdaf2acd5f182d9ff4d7f80888e33f815415dbb90fe6ea6a64a1e9323ea2ad75eaa3414fbcd172962c73388fb4bbb61abf3f3fe02b984c9e562381ba2210e36a783600e5b672d664129a1c5ece8129a90978653c88686cf04db8f00badc4d3faafeea69a84910a38c993fee6c01c1792b5605fe58b165a28748b6221495f8688541b3535f9ea2c6dc58d17225ad4c662320d1650ce6af00aae018c0c62c29684c23c92a8d1dac9f8804972aa83f10a654705e47f5a1768f337f97edd0df4858e2da950f293ab4019a21fff0ca6287a9ad8cca80924caca1e90bcaf88660d0ca863c80560525a8f8beee573dfe805a9dc9416ee9945fc39d2c628a9159be51b1c1770e33b8b2b563deb07a1768060cbe1e93717ef184bb79ca1ca58e7969f8712296d6d64525a255c9671fdf75e81f1d466897a7b4562a368ed61ab8188ce135fdbf26363972d606c3ee7afd1f353c00b66d145a2ab578d947c69b8c28ad376452d50b1fdd8fb818f72431fb3b8ae2052354fff8aad0bee40d7792981eb2e8e6d9688540565cd4aa3d1afe17b2a8ec2a8ffb4d57cddddf7bb4cb92f33b267deebde3fa0513ccca020577a9cb5b8c7e1abb8cb972840a72dfbd6f43fdc8a627152605b46809e07fd9755749a1cddc145ba3c04d2cb4bd725f6a9ff330dabbc424bade40a5dcadbc0799aec3044139deec8047ca0621c7199c95013d9a8649d310540262bb4a2e0ba718c989304f6840aed02f311309025e17da5105948d751c36b298ba5b52628e6daead210669fb0f51c5cbe5d84a8e61b2c5d34667f47dc058ec6264d0201b1387b96fd6871f7907686a488bab9dfcfb3d92c1e615d26511b67f96bdc073d7209091a7625b2db2a022a92d37e59a380b7f859c0771b1a0dae1b37df764fac458bbe62ac25d3a417753200bad24c471f4b46eb2e11cad0878efde37bd29244609eb9f476b90a229f04daea5eb211d38355b4dd3d7c76a0ccc928001134d3c7e68125f18e04075b46b5ad74a0fcb72cff3d4042d8a15706658d3ec6537f93feaf1fa3f7e48657fcabbc47ce8e6463c414fad79571a2ea66fa27acd0ceb824588135b5de4885b433acd25304a177ac9bd5c93ee67dad965a5ceab3885b5305571cad81614cb4607d45dac5217b873a95501b543c7a80de1bdcdb20e57ad231501d7b110310a80f857b3fb131884d50e728fc3e7f5eac1cf253c9c5e5519093aeaccba02ab9f596d395c69d8efea7f18ec6598ecaf681e77840aa7464b4606bc1c420aae097af4aea5bbe7b7fb8085d8537002140a102c4f41fa0bc7574c09e2370df9a8e7778d312ec3ca85592cc1f15c677d940491b6f6c557993193a859a1f3a8e2859091f17c65fcae9b11057dea8fc3dca56120c147bfe2d5c2710661fa157efd57cc0554528fa1b826bd712af29239c699c4585bd9361911da0f62e4500ca1b74036039dd46a5e883dc79010ed4eac4f1a1f3b04e887383609027076c1c100e19848ff585460334ec1fbb7e26f8c9f89040c91f5cef2b9dba7a16be75f54f45f1df19808d56a6862b2f6daa8ee4c438cf13164de5d0fec6c7d0ba41805712efb08a0b1fb9736f977892688e87e887c11856442fa90f777c06de6e17d67abdc5e3174722cb74ae2bfde03411ca34183254ba0d2cccdb67f5ea016c9edfe1aedfa68ada6ca359b73157ea437d2d04ba36e304a8f8feac951dc62b4d3fa8c9aece5e27cbb3d71a31236ecf47d9e4bb4ee6ea6e6e455ce12b9834bb2fb903bc9c538c97d39d8a135f97a0d0432398c1dba70a31bbce0acaa322ef6af0777316d19badfbc8ef78d0d4851fdfe8eaf1f8363245a317c9d52a6fd296466b7ce3dbd93f583ddd500a6134422cbfb12576a67ae1dd2199259a1edcdd69330aae8af3fdb97506153e313afb7da7965b032cd9e4ff0c45f1898118df9b16ba20ec42a1c699c4e316bae42a200dbc3a223cacca3e0d50643156c6a5885051e1580fad7ed2aadb4af72d03d36c62254a997cf21e7677cdc0214eba69208053f180218e90a01eaf827e26ea31542fd324f728f257355fa1ea7ae1fa70f186c46fe214a1b18e9297a76ef6d7f521dd7dedd2a837172b8d417afb3be954136a8d3966afc4646cb7574b0457c8d18d6317466befa24e9e1284b63a257a06f2506373ae0fb4714ff803fddbe5f859c4b6f03921cc1d5da8c1083b9928c34e7e517294088e7ee789a60b2b71aed452b2b1dd23e86d425961dd3c08d2bd50e3b554ca5eeee0a62740a18caedfa09baeb5bfad498b45a42224934c7338c11e8870ac4037bd5f0880c5800610bdd47fd38e56bf6d3e57825239ca218fec7cfbcbcfa7aa8c13379856fb47d76e4387585ceddb931897b5e8ee58deb1c77d15fa8a25a046850f87b7cb22326e7fedb3d6bbd0fb8495d0026e8121c9c2ece4a11c02b56d44b7eb8b19712529c1f2758106f82484677afc3d657667e50b6a3a5612ce6db29f47659bf0a7e92b551959e4079a1bdae026d36c9149f711645c33290b667ea730e218cca1245446c22b6725bda07af3249a3eded15e9f4c14a9ba248d63df6d91e9c955e772c07c7ec15143bcfd9824419c004d9ea4c8421d57a25e261f1991d1bdeab0d1dbdbbeb6e6d4fef25d13c2dc2b41b7bd5687e7d68e67393c7087944148daf83c82ff31f3f5ce8662ae990b0b31d34cc2bf408b886b41f0797bc179c12e258c7632a16fca365ada0ed77a9d8714c2e2d8c6ef350e4764ad99ab81487bf75dcc8f3629e32ee05660a3e2fd2811c298f91a2e301d3b736f447b3bf1a68360ea7725bb55be89653688e1dbadb4c1b810187e3c9716bb364ae5149a8fbb3a773ccb11b80fa8430b1eb869068ef821cd5d991e459a1ff39955a2d4501b6ce1bdb161ab5e042a06081dc15885a22320222ee34bdc911bfd8ec3f0c456ea3bfb9c05f513747126236459a858fb739389cecc6ff99d98f3885add6e443c216abe463a162a511d89b9175c03a93e42898d39131989a643cea4718959ece905cb10e380b52a2b58da06a139b33d70387b2bd99cf0550e9fa6bc60830108ef2a3f388832cee90d39defe8a493a7fd2e9e1249f114c19d55ddf36ea11ad11b8ac483cb7247eaec63858e1398fb486ad6a32e3c0901597fbe8f0380fb3f89662769ca7b239245fa67e4e71dfe57cbcb0a78d88070f81e0f2e36748f76fb14d766cb7f54fd99444c50effefe9e771c1e32720d28647cfc9fb95c135d6064a796aed682a9961339e118dc9e3a356c42e77715b0a29e1b3f2cefb55061a2139fa8c4e0f73fd3ae658e496f3ad624f4770b59bfca4bc2534c42f43b9bf9aab296e04702b9cac08a7256a91a89b2ca4ea3689ff3da90218ceaa18e2e76dbc972de80befaed3248811c7380dee5da43c014287c83f9ef3eac9251a170f2ae1e74dc09f05e0c4caf1677d3e66c4855891afaa5e07ced76525fe6e4bbdc3cadec77aa07a476d8299e80fd1e26b823c992105e4220b2872a5cebd89cf1904821d2384fc2f282d41a142b3e44d8776cc7117b0cbc20b04d28e365acb64664e03cac4148e8f640677c46be3185c00c9b9c53d3e72e82f0320c62f78102071d8246706b506a2ca94b376d04eb61242e142fbbb32afac9bf6df850ea4d5c692d74d3de17b22d498d670cf263119065c53cf090180bc9fef5550d304b6f41cfa6e175865331bb1d46a32bff8e2701d58ed681134dc6b99910d52c6917a92db065a78304386a9b0a7172861a702f4fb8b807e5cb17fef82cecbc178a3b6e7c9d0dec3b6b8f4d945608262d6a467b2446689607c9e71f3956f410ae4c98f182a19936479f5ab48db1af31c48cedf2881747ed7f0b04a272fe64a9c17aa122312e1a4c009ed21fce7eca4213006424412583862dd7da31f73be1db6a4d2d16dd4b8c8d10651e64fdba6aff6847c6c26f59a6bdf823d899c0f9b17394681a39b302918afae6d18a189c38f67a2cb065f7d9f8f45d9537ce60bf5e7bd2467612425a834a45ae91d3c6050a663c187301191b1447c4713b9a8644d301ea3ce6c896b65f18f0903f4a655fbf1314a69c511b1e3ac30e7a33b0d7476e2d0c8deeb993148719d7c1cf9391e19a25d46de6d398d8bf5fe19fcd130ca99b7cf1d90b108bc037e0420508310b3d594de77b4fe2820c952505023f20748d4ea0dacf604c86e670ee4341147de74b638434003039d6a92ca8c2909f8429e9ae0be6cb8b54aaf905acd62cd42282444dd272ecfd026a3ebc1d3268b926d826926fb35a3514255fceda1cc6c81fd7f5e5f5172ebb121b7b557434cb30b49dd9b41431f3365e58f9062ef7c673e2454ef0535e93c1380f21d3fec431f1f88b00432cce88ce38ac4b77729d28fea2b0ad86c030721bcb4d9cb807ddf89481512d6325e07bbc93e07335908daac33004c5c762b0f8742244aae56a9345a64fb34e017f80afc20fe1a3f0ff8897961a3616140b9010f693e704ad4bc9f6c1039091200426054025526129352a8b92a210962cefab6ba15ab67528ba66ad39d9c86be81a7ccd5c63ac096c64357bcdb9465a43d9606b06d9086d2a1bb42651b3d9f86be2357ccdbd66aff1d7446b389b7bcd5ee3ad89d9b035558db3466643d6e06cc61a934dbc86afb9d66c36fe9a780d5b73d8e06aa435940db666b031d9446b98d8886dea1a74cd5e73ac116c443574cdb9465a43d9e06be61a634dc486b3b9d7ac35ab1ab2066733d6986ce2356c716e2a58a784923f4e0e03d3bc696c9a9aa6a6e169661a9d26a4c16a7e1a3b8d4d53d3d4343ccd50a3d4043548cd5363a9316a8a9aa286a9196a949aa006a9796a2c35464d5153d43035438d5213d420354f8da5c6a8296a8a1aa666a8516a821aa4e6a9b1d41835454d51c3d40c354a4d5083d43c3596e298c83add91310fc2312d36eba6b56679b4625a7cd63d6bcff266c5b4d8ac2acb7556592b9945699db3e449d1a65489b179997664e443dca44f484bfa813ea4dfd26074b0f41f82cfc4be9d122fe153ee296bca92b2a40829400a92624b49a7d029e714790a9d824f9953cc29f1143ee59eb2a7f853e2296c4a91c2a40c294a4a90824ad1a7d429e89cacd75a3a9eb82edd77a936a7d241e7669dd236b104d9a96e3db626b848017f27e90b69f511c9ad59733067cd37f0eeb2255c17dc28bcb90a176996128235e5502fddf12161bbe1fe7aa738cd741c6c51960eca7a3fe5bec904ba1a348902d083f79a88d181ae257288322581e226779bc6e9fad0d76c1e09705341c8ff8302fb8f780511fc62d35b5e0124dd3dbde36d132610bd03ee2450ba8db40cedd631ad24b4637db0aa6fdf86890a80de86187cc764a9c344ab156d59b4b9203ca7200b1c5ada2dadb594ace2b21ffdc4ac316f208762518c44205c00e5049fa65f86c9c6529b26e50ba0450e1ff14ab0ce12e3c07ab408f61b7503243c21ae6de5db4431514bb425b4c9c944664298e04d06937949658232594ce8129f4960222f594ce8128f49dc8433b9992c26eb12ca04314197e84c0a13bf04673298cc4b2a13c42459b29b784cfc9280c96e72329198d0263893c1645e4a252e13bdeb767f74a4af52cb5b8249b0f03351b4af2c14dae6c541fb48c4d09dcfab00146f8df2ca70daecd241bfb0d7f22dc8d03a86a8ae895408dff2596a2ba7e8d42c154af08f150c70f7a445291eebed619304f230b7536bdd552f0137a8b59240a30c0baadfa7e942d336792023551d84edef8e0a05d321f365422ba747d898e1c22d7c06b5031ea5bcb470dd3037de671894993546f383fef0d2b8f3951a074c97aa0a0c06fcf7e025ea3e52f55983f08745f8059d45fe914638a87f64ac650c9e960c58e1afb2fb2ffbde4097a532720668f2b7a36526d72842d67300e9b45ef6cea7978a3981c590b335aac118d7e1318678bd8ce60e4561dabc5c9395554e5cafec0e1817c61a0603753e728d61088600162cf3931f60bf49e0f021d36d0f820741a0885f2bd20972d31688e98bb367d2508c0c87006a5f8988ec2441066aa51f602533379618891781fb37e4ca787200335843b2d807c045eb82caacbb128a8ac6df148481394c534f7560139b5b469ff1bd9856ac0d8d118f00c555bb3843e653f84a5497edb0a76802549010d81b0a7549551967127ed8a7e0549f045af4459a04bb0c97193d30f029db1d0d232f742155c2c7a01ed54c6147d1365d85a96d30dbac06f2fc2d8b2d61631d5e161bf7e2de0e65d8c00ed60464a05b2e439d40ac08fc878438377f353ee77aaaf682a4846cbc49f9aaf272d05165172021cce65d8a4fbd9fa3be46b5aa23dafd5085c1f915edef314a1625cf260e501487e73406773f582f7a6aeaf3c71114d96097d2cef3ff8262e08b9a78d22da4669c20ace8ad69198e3f1b6d2a296ce62891fdc21a7f397dac0c4bdcd5e91846cf2947fe95d96133d1c81de61853c196291651737227b49172737ced245331154619f48e48344b520eb4a8efb2701fda31bbf46200d785caa417ee536caa220bfb218d04f88d4fdd1e79b19b8ffeeae8e271edd5e3bab6992071c4c6a3f6ce2b675184d2440d9e248ba43fa2f6bc19b1937d4e844e0a32a98c38743babe50165307c8bd8514ed22145468bbcf214ba99aedfbb36fedaacddc838fba98938b4fc419636330fb324bb467558ea241f166751c1a2b6a70ab7125a6905e3b5cb9cca4a41cdb0d5b67351ce3717296c1965f45c5325338710866d211355fafa5e3586a5cccbc07452051705ebadbd86b90d6b95386be9e5380b3641d519e783ca99cfb03200fc87893ea69c9cd2fa04586bf9f0929817f4fe0b4944d7408c9fb9b3f357fd5ecafb6dc399ab07a1fc5dcc761fb9f1a11d287a43f5bec26854f6b91043f9735180e10c7b4a0726c55fde4ec1c094cd6592ba71f77bee2aa28c50d98b4bc2831d4dc5b49236d5b3a1ade1f5e4c33bdb0e8eec3850200dacd0b165e0ebaee1f034b66437e4c2d374cbc0dae53223bd86da93649d143a7304e57eec2f25e5513235f4698409fdb87fe665d1e035e84d5151151aa749fe07a5fe5f223d84b7e919678e8e74c053caa59fdc480348fa0f2da2ec6e2156ab9e7d3704da46c564d34b64d530ad10a114bac6cb3bdb158712fface1005910060142eb59e6f73a6537856319105c4e5c55db1f4435886547562e9c6050a8d6d8c6914996e580c64ad30c5148f277eb47c0136a8069e727723b378e6f87b2030520eb08efc53576a8b41171c26f5b8058be78615016abe7cd303ed115ab04e1860ca184d05a2fe303ddb56d589fc16defef59a01193a3ef4362973f4f44409a592a77a10e722cdac39fb16b6e6fac8865830864efb3632bd567953b807fbb51cf20203a32cba8fa3606963a452f94d2966ceeb581e5782ac89279e1f8c2cfac0a612520f3c5060520f6ec742b29182e01cce729094aeec6be611d0574f4075e5176a39f8a50032b4f5cadea2eae4226c75c1322b0091506d0cc48f8b18ec09f24c2f632dcd24877d3137fdfc83af8cdd551e12ecdba1576f0b94c29b55c75db7e470a40f895087728bb3034d15f08f781012f846098adf16fce0da8553ff18a8621b8347e092521ccb3b5df4e0c265643cc919ad8e77734e04186b8b17b816b884f084e739726838ce6594fc5dda6c3444c6a2f5307dad25f9154600a2244fea14bc1340d8077bbafe3374976792119bd5d0845da9ed0d0502817bb69c55961e748913a7e0b59d5c9c3fc98470c61ae298a67118e0bffbdddb6ab0baa94f3742a2b93385b09a4e8a4ac4d2e3320a31295d908626fa5cf057495b45954be73656b6d585698d174bacc100f15eb290f5bbf47d8dd7c1aca2ef0aa9602b8ef5e0dfd4ca9f4faed20c1b451211bef8120bdef71f9038fbfa74ba84577dc8f6d661c49578f42d535a4f6bb46796073793eb5ef3dc69dca1cbbef7ed58a71b5ac832997f063a5be4b01fe2906bc81279237d2f28456d2b7ee46a6e70eae23df69f25ecb039c3c708f702cd886ae8ec6f3db1e1e8300c61bd503b43a4d7c26ee1b2205dcd187a791e406b83381c84ba1d983b1e04ef96c4c10971d1d4e62a61c0782a297501c2e8cdffb5436097e1a06161f75a7f3858d0c244904e27f88298f448983f29d1bd24b6af03df669e2c098e7a3fa388c3dd3025c28f4d21cc9cc694653a2109be2bc199fb7ddfbe7313319ab7cafb17aea0adcf98f237f92b88a87fa617ef79c5c3f267888e5b77a5d2fbc1d302df3d3152ee087305ac4ca7728c354c9266017eea13ea1eaa4d3825cdb529771ef3d6494636f603832620620078791dd7f2263fc2783f4ed9d193a8bef0e3641b8fd26712c19a1c39e39d785ce4f05dfa71104cdb803239bb51e6fee7d615ae4e44c80aa746deb19919d2faf28ad12c97c11e3accb5aa8b9f4cdd5ec62768867a1ba62be388c04f29d2298f7026b2ab5ae55085cb6803b94ed11d439e7f601779206465783790ad88ff69023d02708ee72d05716e475224f650c9c729028148c206e24643309876c32348972b90356eff39e191ab93e86952e5c8871ff84a5f2e3e699e716515e140101a356d606722fecbf4853f2171d889ad392c98bc0a55d7c002810158ef185a7331719dc68bc3d28cd84828a4ecba509e31c87537a76dd46bbaab7b0262d94c754cb9ed9698675058fd6019b9a661e7cd1e630c0f9cf84e9c5217a3f9b251255e4101f2c07de9a555ac7f217bf580434ed99074147d55c8276a03750879bb0df91f0fe60809ef102006a428e6700e9587ab2f783b209d0609e11f0fa74e590fcd59accded6ec656e11277af1758efde7b5505913bf5a23001987273fe4df5b51fdfb2619666c4df8d662ca991dcac885c4db5ccc0cdab98030de5460e113350d21bf763644fc7d849c61fa9a5af5e024c36bf25c5240dc8c8eea32d57022bfd1e944cb6634b16086de43e455d41f4ec4d94376dae94ad5cfcb5dfb0ac41df78fbd0366e0cd8d2ff86bc5a333f00f0059df6975cab7b2d476cf777b35cfdd006c7e74f8bf6fe08ac3b78a660865dcfdeaed29d28feb9e77bc8011683961208f2258faf8ba477bf772f78346655f5cb627a46edd6e40ce1dc6a78d407474297a3cffc76d5853b9ed4dc6fec436fb39ab038fd762cbfa9367e1dfbd20f15003bac367c1c69aa2af27eaa1ace5617083069942d8ef8ae35516fb5ec60fce1cd6a81b4167bbdcc8a9b444e2797592e1caf7ed790966ec9f1fe9f62d4863e2d87addca30c66e4f138d325c3a4a0addf0d77d10a0df616f1afc36761e79991fda9a7b214cd6efadee2630c3734244f345b427cd4b99f71786ea8fe4e1e2cdf8ff30c3a26aefa268ba31581b54f308fe33ec4c7b0b9e2d393f07bb802d95be5ffb2daf81586c103e81482d56f18da7e556075deb10ea37054ebf525b46609b6f9567d72fe0afe702e7e41be34813f563d17caf1d9b138685f968fa43b6b5c7cc0c6502fdbc1258bce942fed57e053ec58135093ceecaa50b13821200dd009218aaca136db71a16439f2043c181ede02bc021e2c063efc0a6bed0e1af72480bcca4fa1eadb6dccda77791c9cda4fa2e2d9dc4cda77592124ca4f40e0d3dc9dd47a14a8b02250ab4e851424f95dd4d2b2ed2d249dc7c5a2729c1444aefd0d093dc7d347739d15c4acbd3d1935cbd540e19915942c3a7d397b8fc754e7991914cc7a7d3153979344e7281819cceafa393bb79f54e5292899cceaba525c876eae652b2e50fdca6b30d485be9b3a587cdeab5cdadc555ad44d48a98ff39e9abb1099713b4f724c9a7c6cf49579595808c20bb07097e6afe4e74eaed04e505597949f153f375a4a56223482ec0c29b94bf1a9f733d557b41524236dea47c557939e8a8b20b901066f32ec5a75ebe498dd2fb11ab20583d0d398b691ec6705be0f5d0ecaf9c525c9b1e2c39d5bd06ace7058cdf008a8bd77fc8f302ed64496b3e7f410dd235207e61585ee751047ae9bffcb96615dc9ae6c9c50aa09adfdfbb5b742e15c284a394f9694e490db67db8de342b3cc3f2c2f9f84d446eb7c39d3127d8209e1f0c649bf075b88152fce25c6fc9ee5ed2b96c6c2eed36628389c1a8f5306f922a6a2dc2047ed9f9bf8ca8705f9477a94ca37e1d8520709786d43144ac6c17fc2d75e0dbaf080129313a27d9d3cfcdf42b814723b4b5286575325222ce8fa102739a9afe4c7c43fb6f2ac640a8b80bc971037f90a213968af517e92e9bf6989b7a84e6cc2241fdfb64c8c08e598d3d88eb46aad8eb7b5a05cfa26963d90ff46c0a081dcb690206f2c15eb6bb8f0fcb46b1a86da1be6f8c810b15be33f0dd7b746920f3af6ff37681271f16eb60079c28f500c69970a06a04613946ad23ae01263f627272d71c24446ee40099d662f9907473f3609dd7c19e08971d93ac43d2769c19d19f4c8be44057f7d95e56783e9b2b3e3854dddacd888275882c87af6cb58c0dbdc69a3034aa03f0e120f310270dc3e7a8cb6b46a1458a8d8b99812dd01b20314cc7fb13e891fce78ea4b1101f61d0857d2fcab244fe87f177fe2f6f93e34d9a9f3ca0964d32a41cf9c4f89705be644ebcd13c0ba678141b3cca43f00cc13caae81001a5a8a6c4e0c91b8bdc99c35ed8ff666a26e08004c77f2659632a78565cbb46c2560b361292bf8fe6bafc68d25791d13a3ef51576ef8fbfbb1c19328f3001337664de540961775a27555b15cbccbbe39632229227722658e06f4958acd25adb420e217e481a421e3fef7bbd5ba56d2e6efc4203103779ef042d59ff31dd3d347d7ef4c88cb1b0f24bfb9052bf780338f3519ee759e9021c8e35ecb61f816baad9d9607eb92235adb78e34d934423deda131c3287f0f37ce81561baf9fa6af7cbdfdab33139d5b1ec566033e40e23c2446a49f8fda2d3dd6152a4fed76895ea8e3da9b889dfa8c57ea063f5db57344b1f0b6af33aad36bde91842bc2ea188f751f974f6936d4860e2d3095c7e50897cca19ae015c64acf507c5d3aef8b32b246cb505a17a13cfb8a4e69e2efd07bf7635eebfb42028143ba71440670bbca03cd95b7a0f58dbbe331f0fe6f6d05674c5dfdd549485e24ce3c1e10216ee0ecdbc448a63bcd4a135a5fe5898ed01e2b00fe68d761441fe7fdc8f19dcff461eb2db0de77c1ee0bf759c29b8561ba9141bf2cabbdc4e08208cb5f11fb97dd5bdd5c6ea14f48ef0155779ae987387cf4a84d927f9c6c51d0d1abd48aebf8f2e18ff3903bab6037e55ddf70dcefd1cceb96a1b6ef47d5bacbaadcab07e49b3104f7febda34035168671327e7becffbb47b1d27f74594fa5c99a8124826cc16086c07a295793243a46cc8e4912c7a83a5abe5e9076639a556fbd6d647d9c269240e2b522eec14bbe7d7de0813d7a1d17e9ad55e9193b852e86047e48e1e00b68fadb7626cdb7aaddc0938d22097e236b503e4825ae55ec9a4d380b61fa15e3821c11a880cec477ca4b4a786c327dbff43b4bead2dff0c6a03c4526842ebe623e45d2c011845e8b0a21ef4cd799d3a53789008752525b88f6dd527cf25dc1f49d80166e87725917cb8362c581064d714b7510c149303138b6366d2d6290f0beb6601e061daa4321b6efe71033081f67c627ed6a29d2d3b123a8b0794a931ad81811c75ef71eaf75356b539fd5d42516ce2f457b949031fa53b09047ea1655fa4abe7d1886463e96763aaa8fef60e6dc0559ffa6071fcb7d4dd69bee3daaa4f02d2370cfd0e2249bab0fcd966339157d0dc3e9124ef2cf71e7b71fa7bd45bb9d3fae96f3c150e94224cadc2bc0293e56de0cfc8846cdabcfa10d563a3f78e7a1d2b54c5cc94c747b0c70db5b782daa0b66d658a1e728a185c1d6bbdfc54fd58d5c5800de2283e0b128b480a224100a8ef874fc93bcf2a0c874f39c055c47a1609afd511984401b107151e0cce0cb92a31878043a5df7b581667f131a1d0846ac051e774210aab384c28ca25cd305b41a5bf0c8faf4bd59ff40a0f4738f2345834d3f2c9d395c1b4c530530f1c5b25982cb6bcc7d1a39146599c094755c2a26994aa26551e2a22e8a81199b0d76f8dd2aca54cfc199056e100e4a58fe8211cbd55d8f6085250e642ce453a9839f4586df126daa75d689db793a5a313a230e11dc0b7aa254f964434b43ae054c546e6017c7554cf0859ced185fc241fa9bb67ac4bc8c6854f846ab6e30a0112a0eac83df46ca604531392dfb5e104b9fac437af6bf3e1f73874ea754de785a44a3fb1a9b58455423a6706d6075acf5181864e9722c570f74bcf82d1a2b2b0bd02bb237bf5d9b469968cb3cbf9afe4c14f3f13a7353d774286a21253dd94d00ca89c39c53430234d0366a58764885c1de1528043b66cb5053e8fe452dd9bc2f4c81fae631faf2d07d3f38a84c6841c2bc70ebc8229d69966ef677ca59e41dfdb1a68656076d12690513a9eaaa853aafac0a675fbf9f4294b003fd5c2ae83a0393232ede486fce1a07ccb68426f4d84a4793f552c32aa6256593e5891439c90055e0abc9dbec7a3143668346ef285e6854afb94003eb9ad2a809b05fb53f615b52027f60b3fc7224ffa7ae424856b027898036e9936f135998704d8fa368a93ed1c486b036253f1139f46c0533a70e62b1410ba56b634ba24338bb1f5dc0ac0e72941c937467b080204f60c3e01c464990a37b1e8f28d360fe9d0a68618f3bec474d2ec60d0d5a738a68488778dcc4b95d0f93f3fac91c0ce909e73a621919d0d190228d388a4ee400cc45b8d4a9b25a9b3da7ef41744e700cbe104129d44db4aa888c02daaa0df90aaad291328314afbedd459d0bafbbdc56765f98f4fcdb417ec1a5cf18260fa37d385730b2a23da6000ee9bc9c7bcfe13553afeddbe9697f28e58f5f27458608363d2dc28fd5437e19daa3d03c84ca866902933c55478d4f6392d2657c2a9daaf201306275f193fcbdc7f72952b23e0e4383b876fd93094cd10a243eed934bfac6eb4ccee688bf5b4ad9c5e6e210b655dc15e7ade1170226691e4d9f3f8d6bd761cbf7dfd999dc663bf8d0a94dc4c74840ff9fee4ebb29dbc6f2f572fab1f676fa5d0118089b982b080c4a0964b9848442c0119a8683bf544da64c2a66c400ef87e98f25fe3681227603749e786e3f2130e7bbe577244c7c3999818ac19a732cea5602ca6953f9fcbf37244ea106f18b8e0fe321dd6ca1a20d939bc770a059181a14e677b00da401bf4f4867ed0ae83a39706a4007b11fed969c3e11128422e10e8013a6081e6c20ad0656471fe94624b9ba2118d7fa4052bb7150bd7f260efe5e2bae2537d3c5fd934a9b3d0e09cd7fa5730f9cdd2132c9239c34b7b061b0f7247d9bcfbcfd2e4ea37369baa02e5c2fd37fa55ab59dd86986d365d75a7afed9019b684da0853d9e0b0e7b76dab7ffef0654cfb8af1068055aac46bac6ed19ac03623dcfb4abd2814f19cd00231b2db6d21e6b08f35a02682ad488001401e8dbbd6295911a39f20c00e40a3f1b7b84f95cbbc155e2e09a301e4466d9464ccbeae0c6c65d665981f2c3a074c09b37103f2b2dd8da354cadd21add370de0ef6892830b29b8818e10dfca1bf94586edcafe17099e7e90d021a05a7d6024b6bd58f0486818a539c87da896758b95ccb222dbcd81fe3d7b3eb7892568ddea72e27c504bd3b1ae2208ca24b7ef7264a35265ce909971e8eb8eb67b6ad0ba84bdf04a4f720c75ce8dfd7aa4d45f174429326b365e01a1b7f4dd288c1485c0a746508d5ccadca7ffa62e4b5c4fa5c7db67f5f2ccf7de70a9f67727d3d3e365c9f0c76c377b4c0c8051c1e2e681707b56a2fc7a2d54e0dda804271e60379d36dff7e2367f6818768f086f88d8e6334dd6d5a325d4828e03a36274f26542d95f06b7f256d3c7b4aaf2f072ea109f98ebe46bde3ac338f2b4c56ca3a683aea2089dee7deeacd6eed06792f79dd961031a0f588ee9040bd3306a0f28dfb3ec0c500b30d50059aee7393a440f3cee72deff8e43f340ff7ac3cacebf56a92634d45937b8f6bb0c90f0af416a3f6eb8a4959437fd9393b9f40fe53951cca673dc10fd34d94fc0fc8520ade4d704f72ed75c7f3a0612a3276e1f33f9fb9cf7164675f0d5171d36bc92fcec7b8cc57d83da280f9e89983607ec26ad66f7cd2c1b59e86785eba973029abb18b9f3281b9331ecdb205bce9a59c499c072cbc3979c1c3da44b79fd9d8db47a4da235ec414131932ca7af8999cc5357d8781ad7630ecd789ec40e87a8fb43ea483d706864f7eb06d09609a9b937071bd9a1062598755b792f3fe9e342405bded5ad78156b3205e38b6db31e9b32a83070a801737cc4c4b528cd1e39def8882f4aa91a0bfadd4b78058b74c3295f78bbb7c0d7e2dbe2e55ef979d710f59e29864d57f4894de3d6f21a0ef58387f47675e9dd487737b9b5750f5b36a5efa6cd8b1bf434923884b6353b5467c72771d95ef960aa8e3779737c440fe9079a1e2d6a7af5ee4ac167156c9640a808a8494dda22675e53b996af8cc0d7e9fd740ec3f7f967b67dcba9f1c346074fee4458f77f2d73dae241ae96a5fa7c7c1f72467e7b4a8178adc302716cd9a27d4d276002b5fff935c97fd1803c0d75e41cb7fa42751da64dd8add3166bd8c077128ff204ec3b0696872b175934938be18df72166f47bd0494eac7e1bb618d796029f1aeef529f463e0eb993ad763b83f75ec001e7c547923c1580c1475c258aa91500e8a76d096e46735bf2d9d0626ea91173b423719ddc71cfe6e725e8bf312b91fb4ae3558204680fd0922ef16f3f0d0ece67f4e030293bee11f9248c83395cd818b22d01488d9cdfba44622cf730860c4fc8e63cd5110e2c0fcff63d37f9bb80f8c9e59099530ce2fdfe75eeabf57b253582a7aae07ff1e12fe1a1a3de6fb9c4dcd8d8ef56d6d2fa5af23c9712a8233ebc35952784549dff30f29ca8384addfcb0d36a35d528cfe357631c2a3ad09bc367f92979c718ae4ed76905d2aeeb49fda097c8e1a40d83de72979f23c38878c65e61ccb23406f98ed03e6a14e2698a04a2a1b33d05dfa0e0a2de14d758b262042ba99ffc41f88bd54b0e0a08763ec5fcd016eb691ff8600bd2493f620482edc0f2901627d6b9968567b0073d78d11ceba2bde773a286cfe55c02966c8162d89081c62fc3b85a1403e48305365a0f2f352530c4cf571393f9a4dd552c0993a33ce5e2aec826f1246c56ec59c206963a23b24aa023e2444d30a3850b2a4d001c33f3f3f3f3f3f3f3f8b326f87c0e208413225a96455b5b74b859029c994524a8a1c46018a02000000000000404208212d5220a90ac10afe0a8db6018e4d142d759cb3a0a3cf3fb28656c30536be48ce3491e8d1569305d5be5bfbc85ab15a70642271cb33ed79c9da141306b82861748d1aad9848eafcdd299ff4466dcf2592fd82b58ce752336a5b224127dd297c957d0abb5622b153def74f418e694ec93570502259db9489117d26742c6d74998d06704c22496a06dfb27825478647d65812c9f1fc535ad3caf9aee03712899ded29091966d9378644925b550653972edabd4724dccfeb69da7ed777d8050e78c0710970610119c90c7484310147231274e9d097544e8df7192b2f703022493b6c3e4f39884a79daed14381691f061a35e2a7fdd60315dc0201118165833c8a18824b391494d890c11cae648445257cedb19fb7fa7f12122d97b3dc87432c715df8bd3efc5e90bc010380e9124344893313e8a50291b5963195c4460c60c56701822693c3ba5bf187ba94106068e4270102229c69c3e6fca1f63ba78173806915c6db1c6814310c941e8cf39a4cf8f3a4d2012d4f5e658686d1c379d1b380051a6d6b6aad8d2b26425dbe93373d9e9f70fa30c1a22a68ae0f84352c519b9d5da6ea5390770f82139cebd8fdd97f5ce97a570f421514c6f2fb627bf2b81213262a34776c4464b20f990acff16afe2584eb2f7c8ba40e4d10a1c7b48bca499adb38aa6d9ef812f14e0d04392957f06935d973347890c1a32b80802471e9273e7adcd5ebf2f21838744cbb1628de6903657b943f26ff85115fd82ced16387c4ec317c83ebbf078d6bc00232b2b880a30e09aba37d63e6d8548da92270d021b96e2f89d0d8b1d27a195c5840c68c19fd23658b0c1c734850e3a641e824a3cd96ff821a1f060e392406bb6c299387bb13729e1838e2902c1694bda54feb514b05080c38247be9ce5183a8ea0e1a8e37249baa921b7a3975aebc38dc40008e3624db9f6d1ad5f164b76938d890184be6afcd1eaef45e38d690f45a696974da2c723360dcf86202340a0646209238d490e83933f4e8129a83d4d390b4d9773b9d560c592a33020e34246f8ca5fd51723e66fe0c4932e6543532886913bf1912db848a96dbf4b3295f86245915d76d534f86e4d9b57dcb7625b51d43529c8d6ba9a6f45b2231245f9b89a67df9916b1892f6720e97d1392d55060cc91fdad3e7c651b3f9f285a4e4a167ed7f4aaba55e48ee78be395a908bfb7621c12c85133ac6ecbcd57121d155c53a95f8fe18aa10e81612333d55d6eb9a7dcb6821c162b48a75194f62952c2475caeff9f1d22cfb44c5c0084440c08185c48ea527f63f5d0ef95c21f1a37b7cacb55821b1ebf26f455a9f5473644d248c1a37cc7839aa9024537557ecbfd85b49236b2337be4005705021b1424895adcabd623965cc35fe461709018e2920871490230ab8020e2820c71358c0e104e468027230c1965042e05002722421b1629912eae2afeb67c3682f5860a38b4c0c8c4064021c4848aafe0c4a5b0c55a5b41c474852b76983e90da7b3938ac30889a983c7f0cbfa1473e301471192e25c58ff142637ccd201071112f466f0a074ada2fc37e01842528a6d2252e5726ad059c4388470fcb81a2ad9e83b29173882903442c65ed53693390384a4a4f56959830575427326628b1c3f48ccb1d53d4b2f6c1037031c3e480cd734b92111306e88fcda0a4c1e06462082018e1e246550972cd52ebaebcf83a4789b3cf53c96e68bef2051ef65b4a4881acf393a4810d69df3a6a9def9981c246b8e3bdae9f5f1458503078969a5f3fc2621935cf31609236412997314cb35a32d9273ec9cc27588abdd578b24b50b22c44a79a5bb8c2962d02229e4633ba82bad9ee459b05f2a7afa4d16c949a7280fd5a1f5830aaa21462c122d9b2cb127757e66938618b0384f543d3ff8d8f98518af48cee51e32aec9db20eb1662b822695cbf640cada644e7442cadb010a315499b36a4c91addd9473e8518ac488e696e2a88a70eeaa355245f3c956df73619e5aa22512e98ec94954d9e5f2a123e8c986ac9df9131c37d440c545c8c5324bbc91769d7c1f27fb011314c91a42ab87db24f51448c52242737a1eb5b9da1bd2a7d88418ac4d4f93a591f9465a55188318ae4197997c2bdd7a8ec8822f1b25a50c2d4150a50e00c8df189c49f7bcfc1523ad770b9420c4f24767f57c8b43eaac29d48ecd57831f76683cb891309b33163b2fc799395480b313691a09f748c31acbe81189a48ca9e54846be5541f34269b102313896d9767e674eacba461911898489061755cf4d25be5f0c89a08188e2d887189c4de5829086917322902866b1a06462002460c4b248be5ae658fea91e14a249bdc64d59593b80f224a5899a6a52f3589a4fed4fa6db2fff49644624acf397deb86385112891189846a867db1ce931648e019d38bfa3456fb2392352c05bd29067f5fdd11c99621be3369af4e1a8bdc7814a43522295e52d13aa774b5a23322c9c298f8e0e93d09b57a616c1063114932ccdb8c18754b9fa488e48af99f34e49b8844d7d35dfe153ce554424482ba189a74b3776cce2112acf64dc8352f15326e8804a57c84a6dfea6c622f4452ab66e9968a13224979d09fb495d2591734882419d155eb9a6398ed0822712efb765da81396348148faae24359aae1cb4c780b03e8a1835e11f1243ecc97b2d6976baf503df79930e5d31c7beb20f892a33fbdbd946a692f32169e493a9f0e8af96c63d2488ab06b70cbbf7263d2469a7501b763eb7852f0fe8c80d171be7e510c4c04392bcce565ab1bf12eb0e093a5a9521a39fbeecda21f9bed3e91e55a9336a1d12ae3ffc5ab3adc7cb466610830e9d6c174d9969bc9b4372be96c607edeca2bab7218704214a070f599bbbf21e87c4b041ba897f5025760487444f724f3f6e90172f48031690f186e4986207cdbe381574da0dc99f498fd05fb62141282d173de8cfc12d850d49f9376df83ccb9cf41a81186b4850fae64a9e8e10599a0b58a00675d3cfce3c65af93d39094f794dabb88af984a68481255592ea4a538bfe919922cdc33452b956e2c6f8684ef704ac87cb1d9b45e06374ba9db1e75bfc92243523ef34b951f2a838bc69098deed728898512ae78801ad326d3a4f9b922531c408c36b523db34ca760481aed1cce52ff966ae60b4942e3ff644ef242723e1dfe524c695d66bb9094beffcf3c6446b90a1792f25438b3ce2b6a3cba85246d26ab664e2d945410b9b92342b8a764e19cf794bf1b2f6a4d2c2485bebd6c1bcd0e99af905c3afda95baf6358215136edb9d776236b6538885185644f71e7526eb2b10ba24292923b72edee2363855348725352d573bbdfbc9742d205a16269a7e829ee1385c45c52d37b52da4c8e09853f5756fb5bae8fb59e10c309c99e498c50a72a67fbb50949b2dda94665bcee4e25c46042216a3bec3573de185a82e97c4e5989368fb157429259d20a7ffa2d276d232146120ca1739505edfd318b9090204a7ccd7c7ebcf3cf114ea33e649daeb05aa61192acb443a78af1f16e5384c4fd0a3955ea79e47908884184aa5c4fc63beb241e42d9565312b1dbbd3b12c261ab3a1a536915b905216993ce7e8d95fcca5520549ae2a7dfb6113aee0f123fd359903f5549bcf441720aaf1afdaac47bf408317a9070527ddd32679272eac89a4818356eac310b7a056885183c40ccd5eef2adffed12630709a57194fcf0f32a860e92823abd204bfc09df72021d60810bfc1fe0cf0217f83b1a1862e420792ca9d8f22956898b5d600233662491193314d7100307496f364aa77acbd1a4b6b7484aa722eb7216ddcab745f29576ecd8a5beb48322a68818402d12d38da54e39ff9a4a7d646db90866509ffcf3f84372a860a7f5f473521f9b83871f1264cad1b79db23363a407078f3e248fbf559657d027560c98c1830f094a34c7b02db3f1a0522662f782b361c4e0b187e4cc69e653a94fa2f2e5a187c4df947ad5a2d36ab99c8784df8d63ed1e773abe784854f53695a396a42799c71d92928c7eebabba8d616387c4142ea756c62f3dea90785b3b4a67757bf433039ac894f0a043624ea735c9dadfc7fc4dc2630ec9b94c6a6bf650ff3143238cf6e26d3400121e72481021c385b28ef6995280f0884372edf6c9abcb8143e2575e9eee122a2d4e7c4372f6531afd2b941ca1714352690fbb4bf26ee96b1b123bbd8baedc97dbe865c1830d495e495b2cf91c9ffa93c0630d095293983039dfa263a34ff0504382b77d88f4f815cf8c133cd2902055cc4e78f8be98db9135f385071a3cce90583a55e5d3b85366ae171e6648da4c9a63284f4d4fca93c1450414055dd82843b25aec91f23ee32df68c194603e1418664abf65449ac08d9cc8dacd9dd781b361a60012584c7189294af2553a9aa65422486a4ec53be2375473df43078802139c9d0272e6fc61df0f842626cebb5cf75a3625047d6035f64e00ccd9414787821c1645ab0adb4b535e6c85a7660060cc008e38b7f400d2ebef8112ec2f8e21f3063c68c192236120d1e5d48cc30e6b5e9f5d43cc885444ff94e7769916696f3d84252f6fac999d8bb13a79135306c7c01068d193320500119346448e00a1e5a48148deb51bd4c273b31173cb290e68185c434cafd2ba87958a1643116162bab82c9658b650d8f2a24cabce74c7a4bb69ae85e604cf0a042e249efb014f65ac39e61dce8420f1e5348f8113972f63b77e662a49060756265353d7caeb07711c68d2eeae4e01185c4d8eb316cc71fd1aba19098f6cd3628a1959be127247bb727554da1528ad709c9efb95ece36fce9f83c9a90e0669d7cee3647a90a131293258daf795ef7de2d21c12db5d9abc552f1b4b581871292c46610bfa5a5494e2809091fd4ceff69ebd32b3d9090942e8b8e67162d6774778404e122f4ec9ead074f8be06184a4dca594bd577eb552152141fd8926bfec110d7512c18308c9313774c8384a8a963c8404dd794ca5ca9af93dc767f7030f212487070b7baaabc37c521092e4f78968101399b205844417fd5ebdc164d096f941d246fbca1575e6c2ce3e48903d9ab6576af24935c3071e3d48d6e8278309959d9e651e78f020f9c553c593e1ad791b6b31485860c3630789b249286d3ae5798f8c0e125c5350a5c1cb739b6a46178e1e39489acd9d5214a146d6c6c2f0c04162eefa3016e367cc411db748b45cea995452c2000c1a3366c0008c1a358c6d917cda57525764b7735d2cd0518be4bdf8b9f23aa532ed291db4c8946587f64a297315fcdb309b45a2c98c3542cbe6ac56331db248dcee1af11a4bc5fe39b26608e88845929c2ad7e862a94284653b6091706ed13e45f9cbb153236b2ee87845b26e897c0ae5a9372847d6c000a3467f8d1b1d6841872b1267e3f77fdef9fc4faa6dc5cd401dac48ce0c1f3b3f8eec7449ab48b86ed714e7a9934c41aa483415e3b3626df4bf74472a12456995eba06bb445b7031549252dd67c9a4ea9a2dd718ac4d83145369472640d4d061711380d7498223b4a911da4c88e516487283214480b7a734677101d7fd42ce840185f81b5b4440728ce98f6f92fef5a8e46d67e04358defa206173366d018b1d112a071811933500058e8f844767822a9638c5541734aad14efe84492d4ca5146e628ae57aaeae04452cebc282fa6ad3cfe1d9b48cceccb4198dd6b8d9a489a93d1dd8a6f295c9c89c4e47aa52ea2e2a8bc983011745c2239c5ee921d72aceab044728c496837a14488f66964eda8d05189a4d219cbfa7d27c4d7c62891a449763ccf14db1052d78281118878c724923f7bf88bcaa03e051d3e7448222946adde50357a534e24124ffb5e0997efbf4cb23c744022c9a35c4697fd7822e747245ba6ac0f62a4daa9ece9704472dcf023475df00ea91738743422a9e5bcc489b40afbacc81b3a18919862c5a0d95c33b276e32350888e4524bf5d12b566dbf6e3eed1a14311096eeb3a42977823062f32828e442476069583f4be9bb11e1189172c568ea2b7a5577388e41c97af6adf152ac98648be90664993341f691722499afbe8d68fc1629e0891ec9f447ff88dd9ef8306916c3d4ac54d396ea97405915cfe39b38d7ae6246720124764ad3be83c954e663cd10188c418194def57072b1b23d0f18724f9142f4fd3cedfc69ae8f04362b0eabece7fb714f691f5a2a30f89d1c4a4566a8be181c17f817bdcc1074fa5b27c5f175ce335fe8b2f8ca5a1630fc933df9a636a90192a1f591301e38609a3430f894189e9ed382a7f583d0f89ebe99f2ff425a1e478480a42d3d667d19596a21c838e3bf4eb1a4e5416c6aba09c1d122e94dcf8983e3f887548f0209a84c8d9d271333a2467b05242ef73b420c21a1d73b00e391c1a33af83d609bf4cb1ae230ec9dbe964e8a4d1c497666491dd77c021f9f33cfe739253a73ab3516ced0dc949c88e8c69de1274b821393f59bf56fab96c5d073ada9094ada929dffcd7055d071b922d98e83fd1f4b2c91544c71a12772bee3de93769b2544382f0d9ac68b7a1aa5f1a122be968efa66ffadac1d08186c4986390f1637e90415bce90a0459dab9b767797668604f5fff258d9b821d25186a452a172a51b3e7d4717d04186040dbf5e355b162b94e6031d634876911aab73dcc5539a53e81043523eb9caf3d8333a4352e80843725a8e1bfb529f9483d00186a4f45973b706513195a91d5f48cca29d638a21336dc5bd9028961d94d8521eaa8e2e24ef67cbb57ed5d1cfb6d341071792fac2dd727a92993138e8d842e26dce97848e23665417860e2d2456884d2a5b6eda27ddc85a16922a4e6c4eabcc17a619594bdb42071612c32ba6a7bd8b7325a2765ce15421b3ec98695500061823ef857771d7870e2b2466e6cc266643236bca858e2a24e89cf3a5511fb1d9b791b5d2418524f19c9458de131f433fb28634466e740102193464c8a02183860c1a3256f0376c849165aa858e2924fa8fc98815d959d724870e29247e5ea875cdf6af25a261c346f25dd4e0c2d43aa29024456ac8673ded964d50488cd972639e4affe2ff131264ea987174a5fc1ebd131264ce41a99dcd3928cf37018d0937a3630949723d1b1a37239b792524f959c9f4dd5e139f272129de2839fa7ebbbe2321f14a78188f9a945ce508c99b342c763e6484e4b415368ad0172161734e426f08cbf922222488b34f8d26c6b23c84c458973bac6f86f3560889f1835b701f213fe94e10925ecf3b7c27cf13ab81905cd2cab34a971297ff20794695c909cf39061d1f249c58ca32aa1aa69a1e246e9e11e2d5935bc53c48922bcfecb9964de90e1263755adcfc96454d1d24dac9f914365fe7479383c4b29c724c71deefd21d384812229a5b44d65b2496ee8e67ca42688cb22d92fa4f85dddeb5480af37efa6e437cd64b8ba4146c45ee5e98ff796791268b9c51b148ee54daa4457dcfb92d2c122e5ed2ad9b2ef4c3f28a8495dd1def52d1c3a3ae48f24bea174f8cb88fb31509639dff4a968c8a2f59919c62dde7ce5aae22a9c289ccab8d418365aa4890c9cd4ae6aca973271509663dee3136ff6510519124c4af68b88ba7483a15ca7433f573bd678a5224a8e77b52eaad1a62522468d1d0d9738392f91d4539bde6cbe64514097fe3dfafa5277d0d45b2e8a02c679e283fd140917442d7f27308ffb47504383e916cbf62d2d53ca90b7b2239e72c637e4c9bd3d7090e4e24e5b449a525f195b30aa3bd60f3227a97fbfc2581b021b1ea363ca874bfa39346d6d690dc5b1df24748d3399a980051435286933986f146d6b60b903424a65e8e2e3359ca3d3424e5dc232cea9c4a263f51809c21e92f36dfb8bf65d3df13206648dcf449577bf00b256f2740ca9038fac27ebccf5c3224558fe724b7d4553e073286c4ccf86e96a7fd4aaa20624836dd38e25d4ed9e745bee8a26b789ab600240c495f51ce3588b90c4f052060481057fb49cc6374aad0b032f385e40cda7b5173748a76990b807821c9faff2c9e8512f9827421a934882c2de26b7d2a16e34272d0f0246aa35cdcbb913504d942f25d9211ae99b306cf8fac992568205a48d261755d2c798c7bd23480642129f9fec76b52eff12ad607102c24c8a59c64bc24b4281d902b24ffa78b8b3f17f91b64c3d1446c0e205648ceeb182244aafb85a50d205500a14262ff9789f9c620266440a6901c66f22c58886f9bfb0f205248d62c2ac573361b534251484c6aee5a4b879ed0a63380402129caa7c9a4fbab640e823c21c9545359cc18f27236ad31064620c200102724556c7d8b97d9f3ba6505356a34a001ee8517bd820ecc9881d8049b8102102624c50eef41c5ff990ef9c81a5a9e2d2149a78adb6fdb1ba21e0388129254f6aa4fe5bec6da8024214166ef5023f684da1c13468d1be6042048484e4a6db5c5e2236bc548007284a4faaea831ed68302d1b93c0030cc40898cd855c7c4a294282b8b89b4eda78cbe99c004284a41e190da53de532ab204348b898f36444b97e8aa5051021d80c3501481012d52ec6338fdd692c0f080bf283c46426b3ec7dda075a203db01c01080fb08c08c80e92c263d2975dcacece2a6302880e127b74a8b07b7749a32604901c24c996ad5b8df13946c90f2038488cea9bb362d29e63c96f9154f37e392bd9df68710f1fb648cc919723f3a1a4863b06ef5f9c89d8d9472d922d685b89927223a6d9d122494fbc4273d6765f39023268c880800c1a0f28c2c72c127498cee2c14aa5981bb30f5924589d0979e3994bc6661fb148be18464f63765824ad291399acbbf246476e74018357246c7c7d79cfe5870ebd1bba2239ffc71f0d9a537db60b91308e88080b6c38e0460c9219336ec4e0a1f0d18a8473b196f55c3aecc83a3063860f3e5891ec22c395943d950f88d40023897881de596023c9f0b18ae433f71853ef7cb4c2aa4832a535cfe572f2ca9754e0254c86e67d1f15c94966d4869a19111b845df83845e2c574f3d32947132a05c387291245e65c8c9a3207bd2f37e1a31409ee73d2fec305a97d8dacf1d2f82045520eb9e12954f69f5a1fa34814ff7df151d32c561a59238a040b954194a607dd387d8422b9dc64aabb52a3199340919cba35a61ceaa153f27c22d962779d7c69f3ccb0271245ee45d62899540e964e248c993c997f53fc898f071f9cc0ddbf42e47505cb0afa8b94c14504acf0b189444b3a357467529a94ab89a4d0a95c54ccea5e756522e9b6d3fa55df236b759828a485701d99593cb72b00a346ca75c4c725123de55dcaf876380b17217c58222964b866eaadcd9ba3fca844c296fe9bfbce7ae14518356e5022b1af2d9ff4cff8ca5965c2c724ccf13aa54e7ff89044928c2a31425c168944cb192aa7a8a34e5e494406171690f1018904afafbe6faba04d263f1e91a8e929661ea133b246834618a98b1aff8143177c6ce1c311c996527a4cefa09976994624e5f0155b73865666054f041f8c488a9e4e74ea2c2184ec8b48ae919b2f8676d0272e8a48eccaf3f654c2442428df0a55b29a638b88485ecda15df71addabeb80bf08fa178898f92f193e0e919c6be5aad38a8a92db1049d6be26dd53cbe2e28f42245c52f7b7b949f473961089f993965648f56310c9a1d4f2a6ae184205e1c88ad4b8c18202a346f9104492aabc9175bab6469746d666cc9831c34c0d3e02513e00513efe503efc503efa503ef8a030f8d843313ddc471e4a7de0c138f6237bc1b3e38517edde3366740d2ed43000b0f8b8c3abf7a2bedaf2306aacc050f16107b53ae4071dcac71cbef023ba66960342b4a4799dbe1de360ced0ba632745e976e3030eafcf66ad14d3cfacfaf1862d2c6408cf5942a7021f6e48160ff3b015997f41539ef0d1860469a7c1463f4778e9e4123ed890a42d63669a3289d339c5ccccccf0962a888111880840081f6b48100dd95e51d627de5ac0871a12cc33c80c5dd1b1974f439296f88eca31da2c66d090a86673f6e2e767fe9e21317dbe4dcad3538ae1628684cb552573124ac530a32f7c9421f13e57cfbbe5a8e671640d0170880f327c8c2131ea08b5b93c8f29f98eacd5e042060d193464fc43000c2e08f12186c44a99445f569ceee5c50f1f61488c793b96da8a7ba544347c802149e9d8f1446caa0c1f5f483013e131788c31c6f8875cf8f04262b018a4d6fd65cd2224b2858f2e247fd698353cddea58b0cc64e0830b09363adf8be89c5ccec71612f4ed49cb3ea5eb34d442a2c80baa53747fbc9836091f5948fef8194cab9950753a123eb090244d8d92ee1da7f1a2236b8c828f2b24f75969e8b871fdce6285c48f279b6556297519838f2ae0071592c39b9acace618367d0c8dadd0b3ea69028de319cd2575dbd9f913566197c482149b55f6d5a55dfd0d991351b514854cb7163dd6d46733cb276e6c5071492a4e9a7131d373a6dfcf18404e99773da5e96820f2724a7454f39e989d85fbe0949351ff325b919a34987094959e47acaecdfd8a05e42920cbd33a7b2ac8444d919f117b476745e9260edc9eedb6b0ea21a59f3bff1c5bfe0f5081f4848529329b3d1928cf6df111264c3f5e6bb449c674648b699fd20e2a6fd62f0a3084962279774ec547c4bb9bf888d0c001a3e889014b4974a22d2ab0186c825e063080997e46fcc96a36a975808c96f62a151ecdcfde444f80842724a323b837fd89b6f68c8c0297c002139e66f5490b72732b8b0800c297cfc2059f6bd94be137f72d2fcf041b2d5063127567a47cc3df8e041d2c86ddfce77fa54f0beb0fbd841e29916b114c3e7469d0c2e2210860f1d247dbad12123f5c33a45e30a1f3928c58a65ec568fcdec697e5947bd576da70b18885c8006a2cde0030789153fe6339585c86c82010607a4e0718b04d9ccbb709f6db5563d0f5b24895be89462cab548d04b499fbe50d9af3c47f0a045a2e6f7b8e6798387f267e0318b844b0ddebb2f1b32636491a062da75838aa529d51c8b44cff9d468d05beb9f04030f5824fd962951fabed164eef18a24d3d1add42977367d46d60a0864706101191f017645a269d593c92e77c854b2c0a315c9e7b7b1334c5fd470c18daf21f2451259818d868188081837101de0c18a84992b13e766d5db975d4562d6a0848ad1ce269407051eaa484c61aab4d96d87ab5c7ba4c266182a6cc6f138057a9822714defbd4b2b2e871ea548bcaed1d72cab36a7c2811933508d193348919ce7e36d8cbd1caf422f6ca01a0d38435f8461230fe0318a6387decda26ac1922e68c13f00fd07ec8c8a2249f4d4c59c3d1a8a24ed390653bfd4f6edb84010788022f155c43ec5bdf13c4a8f4f2459e907bdca2965f74e063c3ca11e9d500f4ea8c726d44313ea9109f4c084cd50118f4b685902ab12ea4189e4247b2cdddc3f89240f4a88a9d1905e199244925cdc6c4945b3d9f944227153382b4d425ab70c8984b19d4f9196573a6b8f472495c606b1e19ac3089d3b0f47249d4e39a5388b194b9a3b8f46246a8bd2aa992cdbe99f1149be2996458fe7b188c44f11afa2b1d9f3448a483e4d4ae5bdc4d3d39c88e4d2cbb9e29228a5c28888e494573766f6c99c1a7488e430d115847ac7987f43d80c8f42246f69535679a22484cdf0184452acd0a7b2c518f1168eac49c04310c9574aaec674eef86195814720122f6db497b63b753198040f40245a92e1823e036448ec24f2a5fc53fcfdd018922ee70d2564b02c253d624876adce17bc92a9ab1d864437ad74eda0ab5f6c30245d9a29ddac31765a7f21f963f4b93c7ad26e375e48b4fdcf20c3838adbb90b493af6e96452f7263ccb85a44e62d5628a7be5f1b2858431df4f5797562a2d5a488af99a2e44cc42b2d5dcc71c435610ab6021494c69e9d2262fed29af90a0534fe8b3e05d5a2b2489fbe8e1bea3bc58aa90a0e62be68e566817910a8972ea7d436e5027f5292476b4d2fca89d3d884e0a49f937d64e76673f452139f8c836ddb5ee178442f229a9deaeba31fe4f48106a93bedf5577accc090927543bd5c999d0e926247f75ec4a2573f9d1624252107add63be8e4fca5a42820ad998c73f7710a551427214159be3d7a98c0d5a1c102009c9ee7d2746951c5d311300098957398688ee9c6d654120c01112442ff5dfc49fd0296484c414a373778d8edf1e538464effbeacf9ceb2d532224cd99281ddbd1bafe1c429266ca39c9f76d9b9684905ca77dd6496878e9a0202465798ff3717480906822b271f73c8ff4f907895aa547de5625800fb058a9f732285fcf790f0acfedbf3415645c6043040d017890d4c192cc582ab5ed6c990302ec2069363c2959293e474c5c0302e82031bae8ccd74a917f3902e42069d35792a7b3fcf59a04c04162b8dda8f1fbb945d28905e19e7c352b55426c916897d435e94a9574a570518be434bbb7153367fff5426891544985cfa0e2d9998a1df08090592497854b166349bf422f8ba4b9ac92f2622c924fbf263b25d4f4660f8ba40bcda172aa704a5dd02b9293fc942273a6a7983bae487c931d3589261b15752b924a6ba8db54ed27640c2b92735e65ce1433ecc794552468349de3645dec065515c93d2aa78dd523b643988a24cf1b2bafbfc8743b0415099ac74fc552eee0599f2241fb4a29d1b395c266532455e57471ddf4c9d34a2992a32897f9789f5d09214562f4cb69eab5df9b8446915c973d9e497c46d644fa8617ef5a21a2d090502427b998b5641e0b28123c8797bdf3ca41c6fc40c8271264f7cb5aeef8f27f09f1048774824338c1219be0104d704826927e2fab77a896b33631c176890cb1048754a212219410c0154226b12689522191e0104824e5dc163d971ba17250c823b618db9fb1f62d8e48ce37b515d5c4dae97448231235767ed5f4ef69ed863022a9c37dcebb49e42a4c1cb288040fed1bcc37749a978210a28804bdbb7f629943469373084944d2c771bb4ee22bc3c5148288a48c19b4a9d1bc09420e913c375aed3c591c5df920c41089d9d23253d0d3a7f7422428d94e3af63e2fb3467c4ee8242ede4124c84f651f9b62049128427eb84a62fe95d705840422394d98e85cf23ac6cf8048acb039ca64b469c61af287e410e673fadb6e60a710e287a4dc5217b5baabdbe08c1933668440068d0face0860d17a4c01bf00f01ff4a45481f12e42d6a0af55e3b3717217c4854ad501a2ef23f5e030c16aca00b11ffa2f37410b2874453f2b3758951b7e154647011810246881e12359d8ed92e848a654d1d42f2902474762575719aa2e41a8287e42c3fef689531a83eef90217648b67c7dcd36ed2d85e160382065208c1b5dd40023057d011b13b043481d1253d28b2547b76af7a60c217408994362389b3b1df74eb984c5102287a4b8156ae2b1fd36ab7148dc2ffd3175e87fca120ec91db4e58d76f25b540a85903724280f7a6f3726dda12c37341a4d9d50a9aef16d481c93f3593ef72baede2a84b0e15232aa896b782e094dfa15a64953433a88ca18b3d347ac250db8694a4b5aa745c9201aec70bfa94e5cd0ea0c965ea7246e35c3d921df3408cd6c9a2d839e3c481336d7a9591241c1175d84e1650d50bd11428644af1b150f367fc08a103206e582ffc98ca7b10e22440cabdc97b6ac2967d3fd21240cc856f88837212ee7acad21040ce569d82ed541ffce86902f24675b44d8e94837b9178eb1a4aa6ba3b45ca80be91c59ea4ec84b216a2e581a97e127e49e660b98107fff6563fd1e2d64b761cf4b0931f7ac10920537c86b85d1a121830663e19cb26363aeaeb0fe0a598cd8fd7c4c22b4c2b3fe165aaec22a9a02115205f475107316fdc34d6984102af4317a8e8e32c2752b53b83d6ac77c71ef3d6f0891425232edaaa3e46e14257f147cd11c8842527f5b8cc9547763f650d854f4e435e22e36c2f80a3c21e1d3e6bc9df9f14e212724579665acf76867e5429a5065ca1435b5c757d2b19b453e5c086142728ee5ab263a052d51594252c6d6bcc1aba4fce94a4852fdda59eb39c5d43009c939b90779ef9eee7410098961315ab068f7e1329583902324469ff34d32855bb05d0316908116628424e13967b3cf896dd2d3f841481192478e3cadbc4a37cb0c104284e4929b722ed53597c462030c0d8cdce802041a3284e4516216d2b357e86710228404dbb54db320a45c9e055dc020c3080942729275f775d5dc53da2fc0e8a2866113428090dc2763cdd928252e8b46d6427e90ec2e7295547a36cf7864ad2021c40749dd296c93bb874eea4182fc658d269f99bbad91351e24a898f163234457c7ec11427690f09e2d3a6b659669900e12e3968da88a4ffb713b2284e420d1e269cc8f3fd737d1db08c141629296317a6537abdfd4dd22b1f407515e41bc84dfc616c9a9bcf7e35d6a91dcfbfd1dd5b2259dd122e9b383d2b962f3989646d644c0f842e4ce60600422066416892322fdc29890e94dbb34009145f2b5a73055af29c51f8be49d0bee61be3d6e0ac12249261d944c16e49ad2f72b12c77c6f45a6dcfbf101882b92538e41a8153d7253cc915624a5493dd149f766d0ad8de401082b9263af671921339e74696315c9d992564c9ad9e8c28bbfd1c5080c446e3c0a5491383ea7a1b62d55534e2a12e44765d698155424454fe1a46ada9c540a4f91a86d1754c46b4cabc191b5d301882912948cffc966453800294562cc6ee99331e8bfcf395d78e145a72fbaa80280902251afcd538f10cbdc629103c828124414c9dd7fa11f3a7bd659466cf40848289254f491a383575acf058a04a9b54977591a215efa448258d0294cc9e6ceda7b22c16f631cbd512aa94f77227153c5ae6ea64d97623891b45eda6a43ba9b481a5916e2214dd3d4a7209a58904c2c082616e4120b628905a98451626d12d807b9e9fc2b08ff7c640d4412ddddd5b55e67a60e0d087040461c4022510c12ab0490472456baa5ec299b368bba2312cec74325534de2e2341960904624773695350d9b846e0a8411c9f173de6832acc892a7452469a83fd5ef902212db3afb894ed3bcdc24223105e56da32a29194445c49f17933ad5a443e51c62cf8ed51844bb2d8bb7c56c9ffd1c468812b3410c9154e61fa2fe3766d1602192b692eed6d1e1359a4e8824b1a0ccd574c9c95287003288246f7151bae9b46c5012447216f31c47d90719610722e9da92920f2a452961014482987aca78598ccd0604903f24a88e991119a5c4375703103f247696a779aef0f1cff721e173b20e9583fe948b9981f0216154f66c5cad94b3083911207b480c3b256f3ea909196b113dec1f93c9e421b9ed32a83dbd68222a7848b00ea6f47ca5ec57db1b40ee906c2b973be75735d7ed06103b245cf6a42c8f0ef6bf5e1d92fe33882d3132260c207448eeb08da2af2b46cd3fc81c9254bcf4f11cd458c8942405881c923a5a4c262a5c233b63860c1a327c0235cc2840e290b8c9828a9d6131e46740e0907c2a699f6fcefcf4e81640de9014f494fc864f11b27337245657ac13aa3fe61bd300481b12efc4c3018ec4a80472e62251180a45410c022110c362d31ec312000000101412c682e18058b0eef30014000441342c4a3a341e2e1e141a1c8bc5036130180c8543a24020140806c3501845723008953a5e001447ef35ef96f7456fa5f720ef83f77aefae7757f76e8df875b31883057ab9e5a1d8b13ef8bdbef5e0c3e57deff892e0cde2b77fd3020f2ed41be4c94bddf87b3366035880654f9e77242032095cf71d0c2fc8435e781edb3825931d1b26c8e0c0d536c8b323005811cc6610a0c347d628f513083a026f1fd870bee91e00283087218224ee9cf0f61f8e3f0e88f7ee2a5b83cec26799ae765826b28db30ca282175ed2d6d8332b533c482517268c48b0d04132949353cc1b4f3906becf4c29c23aeb7dc2861ae1f5dc427cccb92fcd13f33137ef2cdfba48b0a19cbff4623e6d9c2c47df4a05b6110cf75ac50b60ace83151784ea30bc3c945821f30a5ca5d65ae724d5311ac8888d4528c98030a3b08db48958821482f905444f8350e4f80584ffb4a790ef95ffbe74d46b9f72adc416142eca5aee0611e32fc09f048746bcbf0eaf86c6d616a7bda9eaa04cb51fc9f3bffdcda5003020f23212820d8e9e52cd2ab8e3d771adbaf23c20d71a7a4ed8eac6e815530ba89b91a8f47409042b9ad50c5a6bb661cbc0ffebb6aec8d72a08fd47301f0f75d3e44b7061c3999ed1675c80e4cef2f8412f71975a80f14101fb03acb62f90b587287bee01cfb216c835ec8fb83d757d30a284b384bb9a57b9dd0ac04248a7052f7a2e61c9e861480a688528148b6cbac8ccba88cd4020814bb085b54d1dbd2a4c4d26acc6ad9bf6075063a9f262e882401c7444dccfb28b94114e4dedc4a0fb66cb94a6f5d5b7122406c036581723e0247eefac330fa82a903238823cd6b42fc252f841524529e1ed076ca480b0b4e026203e951716c819a746a4f6923d227f3a999a3d1aa9a0d2d36c21afb0dab263585a68ee7dfb712c36de5d9ecc9005da8c5c1be2f2030ad91be7d6b4be7be4d99ade3e5cc79c1576645bebfc74bdc17a20678f654c2ab63900bbee0c5520b76b1c21052f5c253fdd8965d7841100825a4709de9fd5360a5c96437140e866305ea52e9d744d048de895e473e1bced7e21fdf01a8b6a21e123b9304168eadc93ad44d45a226240b494be73b84d4ce50eb36e369d8bed4163602538682f7ee0a55347dc916585b123d21184b758d7e2dff408fb67cd7be72f5beb90b60a1dc8559b7c502272d1730330abfecf1bf300527237661dbb053d3b68c35ba6f6c2d89da2ba4ef5cb23a546c257b9851f2aa14945b979090657991c085872c67a3f8c395931c649b75b361535e100a373a40dc34d55b22064425a33b510613618d4ffe36f4d662744e9b99a0b6c13fe75e8fd0d012c654a651eaad4cd0ad46cc708603e8eebc921307a967e3d3019ca73a02c275ba017009a25a6a8192bce02d79688e365127ba8c1a16963fb14f029c2ba414d2a56a1f13557af9d69d6f1b3f9dd3cd6be543f1cd396a826e9f329ee87c773e80c70c4e9f8213a329bd4ffdd563d50c71133d73d9e59ee410368ff02dca45aee7cf3d13f3f331d37d11b079387db2275d23fb1687a4f4a2a4fab056cd6123dbc3fb41fa51d619d16803c9a2f65517e799a6a79064b700690e5e7663618063c0b236839fe355f74e5475e6be3a075547824c001b1527d7f7adf3cfa576ddf9f6866048753a44b835a578b804a6ec293fde139df2cdacbccf4849162d22d58b864d61457b9f451342d08832f65da2ce29795d1d17546db2314e63a58daabc2dcd7ba9ea8c0be153a688ae8272b568d01c47f430b79ba83719c5ca76cc7f92021e4845c6faeaff965b444c1a4560f261c872829122265b003a305d8c5d56c05512013c0b791a457b6573275c5c1a3812bfaf3e6474904a8987352e8c87636216df9b939e38114bf13b153acf6d4a2a18d863ff8461c824b17f19858fb6da3f74ee568d5483fde0e1b580c355b3274ba291434c29214de642026b33d212bad8aa3e350c2ec08c62213d0be6d0c1dd0c65c499c46970a6a34ac508431a22f29520b45fc52d8b18109c6c9c8db22334984298d99def06f34a7a27a84fc7e6186075b4c1697a361f3421f33222b58429fafec238b17130411de793a83f6dd8980835019ff75ab58781da393a3082ddd5dd651dda6f0786c483e79f99927309ba3f34b69a1c01e3fdd74141615ae727782449ca0018ccc907a4bb004216410cc0a77843d6f41d8142120fea75e70149442272386d8cc037331f52b701f79f91d4c9700d7a53a9eae23c7f9e5761db1472b2a2a3b75ca8260881ee17795ce791303d4d521caf8011353fc0099ee9ab7a4b51169c634b03cf6b65010753ba4dbcb96a7e09098b2a6955c428f849f1c5293a1031693be2028f1d1d8d0296264f3b035904d91c8088b8a69f19acc96422300dd956ffd9cbba233849181f3152140631602e3006178fbc07dd7c019c3038941c50f64098a9fdedf8f8c25add5095db0567b36621f0f14a157cb157ba62a351fe7b09117289069d1079aae79e03fc0b05b2ddb8648929b1781dec2abc48c2e7f1c3c9ec120a69288359862959588c509470430839619576c40d65e6af224925806a8eb7db816191987a227c6d084f7ceacebb96fb31408759a093bc4513c07d7049732e16abfc23e1405b676a9b9dfa4ebfd3d4201b16bd7811b0f63df8740dc8aed2d7ecfa3e671d632af959966d809e3dc5904cfeb4523833066b6ba3463bf8be8a075c7439ee6b65b663692ec01769c12d47445385d6da7e7509d321e2601a4d320a9785ac20f061a1e102e4ffb0a3b6175df534ec8f3b505d466fc44786fac2b141b151156a12fa153c59c5fecb3a487bdbd02f6a51ed8c81278dc634fd8fc2bb635e800b904c12484ba8f319d9ff6d19d0896e42f81312665bc2c43af03bcb80b9dc8b65b826678f9f085964b3f2fe83e92d0cc0d1a9971aa9925c25c7b4c973adf808c544ef53e3a33cdc6e57683cfde2f68944baf3124e4b4c17b652bcd14a4edabcbbc83d00bd0f766ae70863438651d5990b79036cbc4eca34bde32d6b6a31702c360488b523ce408b57262c169c46d0dfced21ec6a831c2c09abb65c6989df5cbe01c81e6fe39e992995583af01636e6ad49e3bb09d74b003045a0c2c4974996b2b201827f44415458fcfb5821ef4ded7973ca843ac76bbe7870826e5089d2c2b792b321e4e0d113745f5b8a47033d91db2e4754d22d0a6f2f7819d26fb726f819092736d8ec66716e6a1af0e9cdbf0326c202e7b959eee292248fea2ffdd6d84776c38d25cfe44c172a5b1c10e1ce55d3ee96672754f15af433b4e4941d71c6df3770b8e50967067d45bb125b204592391de7ff2fbfbdc59183c63335e62b3f9b25fbac4a2262f870012540f6eb692a81f0dafd84f6f58d31ea740873aef13183f9f2c80e360196800834225b069c21588e72c4746ada2c1f403827388e7e7955b9852825da648f2a20bf3a49c7fc20ed2884093648030c020c09bf87843cb71c538c4d0fa5e6342eb4697d5e8b48dedb38a894e4d46f2d7e109088772ac27a8c721b17aa02e5a2039af24f99dd9f3d8a6a4a5bb465d1aa83a723e2075df372a33be12c91ac9e4b8d34ccb9f94a769605e804f2f200d5458e38e193cf414eb9dd792da88982cda0be07eca8588021ba55a34af46c021e8fcb573a504edcde084ea64339137175c58c53764da654d5b0234accdd905b6f427a6773651bf5107f0c3f814e882e893a35492938559091baed52865a1cf8b16038e15742e0bef0cca45cdd0a620659a068ac42e1488c41275db7e7c7601130a05dc0cd17eb3c06fab8bbea8ed776cda651aa5be37199ea2581c709be68d8640f2d677b2a4ef63b0cddbdc724e5ec435e0d86f23462569b5f720bd3bae835be0d30946c1de8e9d39c29d858a9bf0a037660800f9c947f09a311e8178e1ac26e62413ec1c2310fefec5e8f0dfb0c813d74e9df03124b511bea0e300d2f0eae302d26e8d1a8c3609820fc85be3a87bcd359535e5b6279e018905267f10e480195f57715c621bb0c4a50d26319fc2eac2df5f15ac5a7940e418e75571d2fbb25873846c320b6c1e8cc6d9176b280070faeb9c84804d1397af0832f883af287a82222a15471b56582f84b259956e3251f9e56c94632c29c280699cfe68d09820ac97499eb05210aad2ebe61fc0899d39d81b2453b02526e8608db81a0ae444ec01e1b0f17898ec89fa4df5cd087154733c639762afe88bbc4865745da0ad2f1bee77375402e5500530baf994e9e42cf56cae0187490e8ca246dbe38ae9c73d3f71082a24fe497f612e1f1884f26a12427909f1623729760ce3d0958681ff8d44c687b87f69c8a99e5efc91b81eb2a6e96e712444f6c2143b0d76979c22a8acf98136b7fea633438230850e39c89d22b5050466f7322f4ecc31e6ed3e514ed8deece4f0beedc4084485f310ce9769572725da64e411c181efca0e95b31f54f870b42e46405fdea5e231438b416073118a89a0dc44aca2ce0368b8b1d341bb146cdc22b6798c779b8408bbdf42640965ce4b2d9c1e5ad1723f5c46b60b4620eb45a4eb20b81a7e8e184b4552ba6e319314cb0e97c7000e0ec42584be4cd997ac01de668d1ca552604b0b70fe7da217f88194c785356ac0f7050d888c07057e18ec937123be5c59bec55270b8c498a3a0a0f13aa44f5abc1a851cc55d2677b38ca42f66d4acdf876d670ec862d4a66834953d783b7c027568c45ec98a2a96e0ade6beca654d5cd1dce9d01d64bf1bebd8f85e293c13544960991906c37bd0ba45ed3e8111b98e9d67c488220f4cd75ca06296ee4e2bf81e6319995121a1d005835855544cfba3031f6887c996dfa79ff7b768be0f13733fb8ad3d4cf5982bc455e80fb22afbe73c4f7790fb5a397d2d7500d8e7e4a443573e6a7f8ecac55868d121d09956bb9b35ed03783aa58c03961798ce1a9469f985d89f7f2d883375e7176ac19d62baa98e5867285e78b647fead2be30bb35ed1d3cc1890d6664dae955fd58eae616c0495d2bc73ee505873d0f1fd0b1049c19fe3b4e3e4962b011ea75bb22a511dda3f70f68150cbde788bf9c1fb842eb6aee8a5df6db25eb2d6a3988be4c6be8065f5ebc502ae7adc1ab1f91f77d70f575988f0c41607aa49bba108977d23db65c2f54fd876a7ca8adb0d419b08cd8098e0612eb64a89ed60b9affeacab7242d5a53b8026fc495d577625ad0e321ad35847c8ffd79429b04806d45c86289723cb6588e91465a2069215c364a3a59e92e8eed91de10dedcd1cef87a2527850cfc75efc9a37c24f9ccbea18b15dc2eb560fba3a2b5494b610c9fc2e7297233b25ed6d048d98c1b08bca43a993606c89d0074d43293de621d1b35ead07747ab58327edc4e4001bb210a99d1a4d6e249910769dda4256620b5d71437eafaaddace9bdc69b809c531824f2003646a9b6d0a3357d677f7cb69c326962a56fbfaedaa3c5ac7cd8f46a273b8847224b3f615d32985ff1874100ad343465db6c98d7cf85678dd51a16ae8e87d9412e4e63b6c941edddd1e3841a620eaf6a193139c84f10bf3bc3b41be4fc69634f5625d6d8c8bc7f2c948fc4424a4714b36b294f3396f84b40c35b392fbb62929a3aacd8c524ce9dc2bf9e3dc60ce333eb2410d1e40d83bd72e41b46a07d6be17549c1e50532318690d5d6d957d7529af1ca16eb50c1ac69c2198b91d5874ede35add92cf8957ed6b4c85cfbf1f32cdb67972c5c745c0c0b3785fc8a59b5fc0f6e5f92e0ae59871c592c4fc71295e9986c1b30b95356fa513ccbacf93abd1962eb7813e8e19ea46a89188b9b939774aae588483f31ec3fefa9c6ae4fed9328dd9c4f987a20dfcecccbd9e409d8e19a6fcd2e42c8555ce476b84d708acdd80edb0213a71ba10b67d63f371eb41246944439f148c02d5be9ddf21e40ddeb8452e1966f3a916347f8d37bb687d3e669891b0c5a17290966a35a14e149b740dd1bea06d42ed95460bf6e2d0e8cc43b93180443e31ef88894aa72ac3430c845171fcb4926a744e8a33f9b9c9c6adbfd0668d4c9250856189d42adca5ed8f509d3e151eb55e964c7ac5f5fa8fafef610d5ad6627bb7a293ae71f7fada8ad23bc16ecf51900082b821258e1218132ca2c78894f543bbc08499d234ec914c974e12551bf03a126f7340c9d69dc33dc860a8827c3f2228983ea2a79be77becb313c9ba26ce1215d164d9c931b3de1e84461f5a50aa821d9a51c9ae90e3a32f9e281786ec6c5dfde52dd380b05fbfc80a2706d3f6558d9181a97bcdf2c26d72f98a841162a76a3b90046146c08e95b80ecc526acc352087519f4a5e8bf1476c6029584b540a474a5157a4e60f51c38da75632daaf3975f7e1ea1d3eb3944f41cd691c057575d08388d7914e0e9954037cd4df5013a547aa00820c34ad02c729d2c0c587fdb58392fc2fa5e90ba6fbda95b3ff6355aecd791e9a912045a9f3d33e7c20f99416bc6f3bebefb14c8aace86c03e2ec3d2a1a7f4c475b26963c9948ec9f4639da2ed3ec5d20de8654471503ef3f246bd7e964c2a6e1c265f9312bcbf86b3206ce9e1e8ac2f803aac2be02422e5da65a33db2f3ade1538e8cd51dbb435085a6a98ed6739a9438d32902533cdffc86f92837bacc1c8917778f686f276b20ec84b49bfa1f29c9515ba2efee6ba691a76d7ccd4dc9e5552c68e88233a0ccc33508db8384e64b31fea8b8e16e2c4256a4387d3585147e762dcabc02a0723c78a95e75ca87f329a068803aeb6437efdddad636e098799e502dc3ae419841780b71ad938e42b6169e476f69ee443261d4e677a3bc1144fdd815ba71c7bf90c0a4a37d7343865d5241c1165e9edf52fe5b1a6c4cfe4b45cddf5cbba9d366a53fb2701b07de0bea655a01ce45e98dd36e6ed680c6ae1bc2c26cb624a2fe4579906931ab351352c8b2f70ee611ce484f119335576f8ffd96674a6007f62e76e49f1c5fb93d91f11db834d406ef92a5ede0c01e5709335768833c90ebd6c4daef323d613ea4f73e805e7ddc5c4b71cdc0b9f271d37afc50c63ad58f89705f3461d7fed9d69b2f34ebdf8cfa01551c809b4d8383733e6ebaf77c64626fb608620e2950cf68f04eba48001a77cd6d9a0855781690e66a107242b2c4fb00e1519389506cc094300f53c2a5b7694711f2c2798073af810059262f2097d5529c21fcb007337248daa84a9742f62effe2bdc783c6436c2b659997422edd042b35de00ac15e397f6b5c688284d080689e3a104e3892b94aea2a58fef760a5554dd2f7b33d3f5ca1ce3b1e7a2083b76664be8beb42e1883171bc12c445eb259a0aa06bf4cceacb5563feade43541922c38e3aaf0aa4bdccb0c20c601c3e42c1baf9853bc5511411f9a533011979ae95a9abdb6ddd006ea6b9a9a5b7dd42248e7024880f0c8545a731da4430fabc912059bbf3c4d70d4f266441907b49c233dc8462d25e6edbba963929c95e09c651fb9f24fbfd6567197f342cdb9367959225be99ddd2bbcf7ac41a646f519f17631b392eda7ebee1ca40feffcb764ac46ef4284bf3d5e49ed5f4d147c7e014c9cdcd8f0a72167ed6d373bb175fef857f0e883b0e8443648d032c9d1526d9f7725d4190e98973619343d317a71e090794eaed8e7b0212e346d0038ed4fad7e0f2ffdf4092ad7094cb8b888376702fe6f6b912ac21b70d8f2e1a8e9c41ec0f47ae6a7a1e167c24f61b2cca57b51ec3da9623fb685002a6d1edc9764c869ebb4fb6936d686fa00380845e53f0bd254a2f10514ab63db044aa885a9c3a7faf7643f98dc218ce79a715f10412471278d4292d6011b0c14657017b00ece6c6f36d7b4c2efc2f111c4631d6b7492d0651f9bb070d9d2536be0d4d40759b602f4aad925b7dce775db06b84609835736a12f5e2eb35be524790f124139cfb056c3b075fdf454269bd5da9a2a0ea159b2fccecaa1c03b9ca34b064dcb7b32db6c17a21bd1b41fe034b587ef619d12f2c03649b3c8a607b07da5f40deb79074bfe3005a2002a4aa0beb9ad5c9d746c6b70678a61525db158ee7bdaf5d0e0026c2c3b6d06358d50ce68fd941c06f9bed0c10182dc8985474e626ce1005020203bc6147777d745654056fb5c20d54b2112796824377d2be69ac6373b1ed0202834da95483b86dd372582ad61ad8f3fd35a60a0063a500951bc982dfbf08d714e0f4fc3e8f9882fb84ab24a645a30f89b16333938f65abe07813cc1f6a1505611c6c175563e846e356e812964403408e774b7f00a7125df428e05f65572c9e6a2575302c5a3fd3c4440902a5d19ad96eaae83bf0ac8d5064e895700741085d06a5d11d19d59f5c740559faf8f761c1fc22284e1d42cd4c98c2f30085630cad73ee18d2b19ae9550e00fa3a61bd906aedebcf15d1f69f37742ba6628084300862548353deca4dff1aa3b1e5c29b04d88d1a6f5412f3fdafb71c1928ad003d884b4fc441f4d4ca773e896db28117ea259ac8115e1b0898a98091f53259b4f3e570f7a8aaba373d9072a878b0de086b8f86db414ce8a3105ddd124014c32c6a8890d3f67fe938675083397ffab8d7aec7625aefdb05f5809d42448ee9cb916d2f2f146bd0a21ff9950f97309fc5f5e7b50fef64c2f2bd095a71241358f9c8c7b71e9b2b34fd4c67f673332a688ce32532312a4a68ea1fc292d6e9832e43f9308626797865645829fb3038bac7b980557a44746c19082ad949b298344ca78aadb43674584cf6f4d17214f6b0646c9d706ec8948be90c77cc8cbec792cded8e769496e04313a1d50521332b6034cce233c4e6bed85e1e74206520f26eb8a52597a7b0fe55fec1704447d836d2dfbef558c5874d88da11e09c3bdd077cfda4139781cadf2a38e645fc775c20f5060d219275f733269f7ac05666236fb28d80e605cc4aa239eb20e07c983f240442b747db4084bed1aef3282230e51043d82729c164a1981cab2a2287bf346ab935cce7b990f348b0be84db94617ea019a9ecef5733fc759cb9037c208105413dadc2fb3f2270acf186b36626ba0810e03103b6435f3995af3345828a6687c96c98f3b260c50087abf1770a18ee778ab3cea224b8b5630b2b5b7340784b4386815d0bcde1a922748b59efda9f58e132b8b88e230343db8440b4bfb10b5f37ba906db8c82823a3b0f08a30ff3dae3ee4b299cf4b8e6fff8c265a2ce590520b452de6c1cad88af93530bd1b2f44fb447a3921f67aa67c38d03881805cac8d95d7311edd4e9fb53529ee77f2dd843cb5737febae65a6a69f236150438df7c14dccf4dbd6000d9c446a5f8aab3b0ad2229d1cf717cefcae2e6f47b5ac5490a90e76941ebbebbd21dc234a2748cc52c5ff3694d848723db4b167455aa3e74648c795cc4b4ec9595e43061d425426fdc6e3ffb38d635d4e279598b7b08e4cec364632315c3ab8943096e4c8c5174d36e05d88214eb2f0240fb11143fd8a0e03f2f1538ec887a07808e38ac0899c502f2c79ac3746f36150c6b183c58fe011d4f775fb16263e46709b21dd5eae8f1706bce91f696db5c0bbc223a568b796f7081684ff8b25ac41cd587baf5cd4bba93cbca144cd3cec5c8987df700a6c937d129bd984a2f38c12d25494ff932ba0f6b20e0985c470f55404b4da345cc05e480bb153efa03658613256009ac223a735ccac804d32e4d1df705291dd678045f4cc13fad10c39b02a983d8b12553a9c58d18f4a63f3468c747fde6e8d4e44b6373aaa1baef3cac7cfa6a335a80878510822cc9e351b35d5bb05d398c61116211c0b253ea3f7721f9f77e2c3488ebe5bc057a2fd2516ff8a9f9caa53599adfd7c2ae4952201ee036142d3ef7d0a6ab682588bebd0e99c5d314e970cba7e7e4950265245076bc4cc52c0e2d941e692ded757dfa8fb23a650a09d84b2376f8ecae76fd53d480441eb58c5f4e53548313cc4d8515013fe895b03d01ecaabc24af4ac730810377f5fbae421d1f40b066df399086a99651f553ee9c4628b70e58b1897efc9cc91ef4d9cb4f092f69e205282315424343c340a364de28e205fc5a39329ada8870f07d6414a3d48cdfc3251aaccabb0c4182ebd3d3bef0082c65c823344e940065c05a26b550ccbab07d500455262d143b4211cccc7cdabd075e8742e750e9213097fc76ebc0d85ca5f5496d12216b66aabe9d4ecc87bca049c9c1e1d816deeace6b12fde0b1fd80e252f80ab9c24a208dad62fe0fb74d784311d69a1fa627bc3d5b834c1c231b433ca0cc89b81b018a591f23bafa3260893937e497430cccff65332e9b0e63e6ae14b686d2489ad3324260a5c3c7ef1ef658090b790b778ace970a8afd7bad931b49959a10097c5368bf1c2639b8441d4b91842aab5e264a8660e1679c6c6cfb8e942a1da6ed0af1d024a34a9f94780958613970d4426e3c5069918bd96516804430723daee373f35037e02daf18b2b2183a78547f588732b5e61bcff88943b94540880489af802badc9874c9e57cc5499bbaac5f205beb86795cc58e85faa699ba070fd6f66b4e9fbe6e2c2318faf0f2d573d389d84049d913b72f6252d8da2a8770eb474fe25c74908b2b1c1338227636d589841ad79a07e62d55385f0486937cd49bdd36d8625b9eec9b513311a018807e1368974c3403792c525d16a9691f98a793113a15d1d2405fcb5d18c7a837444b9140c6b3643d7d7b0f6eae9ab168da8bda1948e2fed8db310a085578825cfc5a7e98517f575fc4350b26ca607bc5b821d61454e8b63cb5e10f028baef34810cc1df26c86af066c36be142458a6e77c4bfcc5a72821ab963b63cc3a3491b9f7d6222f7beccaeb103bd708393b311a0abc8febb1051f544b640f60a10e69654ea1a00e2f2d404020454d3a16c80ada95f898e0d84c49777673feabb865f20439125db1cc2dceb935a5f4f996d8de42339794d997562dc6c99961b36be2bcc7ff615f5417efe7563e9b2d3ba0d71900b42f576d36a0b10b7617b65a16b3be7174b8e1db3ddc2bbf66271c46c0a1145e15288d7d96c75773013981bab369e0751ad9cebca4154f45d2bf5038cc7ed41700948fa87bbf4a7cdad3c8d19e4900bc4896f100ae22a1f532084c85b471a9a78f7cff212869478dfa87eaba94fae29d24b6a03183ecaf6ddc15cd50b55a390d5f01f8e6678d2e4ea3c0a8be51edab52594d6843f77ec588a33dea7f7037be0e9c140645694bcc6036f41c8e9b888d6cac3d576abf7fba555cdc91905fb31061222162a6e513b23c97695ba500740f67eb284a74e4aa19d9e07763c17269f03a90b49bcf72749e2e8af1ef64261754635b6fc24b19a4daf00abc8a8d306e50fff16755179100c9c590ffe2a9b922b58ec0de79a1ed14916f9a74efbf407b1b2e52be4f9e2790df68ff718b01399d80453f5e035a9554f1b99cf1a7cd07dca914405dfac80a1ad2d2ce71dfbaadd6c86613a30052f87126eaf7de90427a0f73463ef27f88f86128010394b8892a92858d0c9c95ab2b5c854d757d557b87fcfd407720c2cbe67d5792a962ba7bc4d0203d58561625da2afa280211c2b89c8b142415342bea97268d8127a425f7851ca6277b29b4054e77bc2d9a0725d667d78b1f0be49989673f30c5a71c829d215f71071d262892dccd2969b0cf86538ba2bfdcc77a173a59b78ff039fa19b09fe8897b3b0bb0f660e65e598780e9c0ba59ff3430a29b82e7ec4baed9e6f6264d570090e6b1f90d3a11f2840afac7d960c2836f4def024c39b0da7838dd7dff5e59746019e5a387f8aff55b87a3201004cdecbe8af5e2c76f802b8d2e60cf9abfe3d376035f2f3c673fde6abcae8782578d2239eee6ae3ef53f6b533a07dca57303f653ceb33d633faca39b570173dcd1d0c38aca21a911d71458004e0e2ca3c5451d4c7a61d3db33656c325db20bab4ccee215243425d72e88aa9eff82c01efbaf60614e44f31cdc031075f4369deb8a365be797b2f9a72cf87130cef5d302cce3776ba2b0e2ef86e8095fc4f6fe89a59dfb030686a79f22f94fb310821c31c3a3596f2103b4541ac27cd62409687d88113dc2bce02b5cb4c3b870d078be081ffaca00ac20a367c656b6d762cfcef4d3fde5bf9038cbcb03a71de4e1f08c85b0d5b7ed15581acd1b2e678994b4e1619585b0a576dc66a8a69c83a8a6d1e8e2d696508ab77674c26e31b23246e61ce9c99d834a658136815ba2e761fb24c16c496c751f6f94a7158857f81d70febe2b5a75e2d61818d0aae2dceafceb0554ed6c10b675e7d622fe31099c333641b11da67ee0dbb22a49c6ece8c4f545b024ab9af3eae3148c08438be54e00b4ab6c146184d6c905b9d3c247a35206967cf505440f28d4e152bcb8721a2e5469fd7e893c9f6702651988b3ece07efb785ce9aeeeadaf1d251954cbfa3b9e4010e5249b58561843cac7b9c4a5a162ee806871a4e9b48a8d24a420ad27f9c7d13d5cdd724f5bdef307378b9d1c9f730d00af6649c145fb47dc81150c5d76da3922ea6b58f424e3b4791e865d829148a3eb7e8142c53912af53cbb02002a9f574b92c24ce377e485ff6c35b6a6a4d83a6fea16f9c5222416a63a76cbed685aedb1acaf9a2aec977931adbb913ed0353d15a7c715d2d6583d34e575d934b1ef3f9146b7a2626b7253d333c4d33172ffa4106afdac639642a41a2d48eac6f9b3ee424c01144ced409fbf7f1765ff86ea1592fc80d6452ff6415b38c972868c1a0424478f4ce3c8e18279f5ed8737021fc73dd72054c2e83ede4d06a70a16eba6093e40d0fe2e6caab7f67c2da9e03ede1cf1c0221086404134f643a8db0d2448738744aa7d810588fb74954f54c96c2819dfcf058d05cd54fd415dcd7477655b2e4408ecd85b31031894c8a7362a4bb2cf118cb6718c6cdab73a5bd34673cd9fd0474b49d03082152e2136dcdc8ecf079aad4d2d6b7b08f112c9eee3d7960c9225a01044c1e988773223ba73e9ad9e2d63ce07267c3e89b60c7098451ba1ed853fe94fbebc7c663e4b574d67eead7265bdc5126c4f793dd594e8f22d098448712c580a0338346886f963329652ec7f447d43557a6644cb2d3d6dbc7df5b135eda2c00f00a7f12c63840fc1c99702e875c855080a0c1ddd129966a041f7e59525351e44b56c7213704b5c6f67a4ba34c60aac925421c24289c58bea9cf40428e15b302b606ef15240beea4475e89a99a9e338b4caed26d816d33303c7defe27a7466f77bd538825a6f088622a0b6ce297627212e637345682b53f96921abe787bc2b1be0c82c99ff938966cde33f781a9f5b60960d1968d769aa82c51b91bb366f18cb307410b3592c328698dc1abe3fe40db719411cf95b046ac1f16f9e1c40703d55b376d1987e88c1223083a17b6bba018a91d1ef2b23b74670fb623b42f12459ea14944235449e80ae03dc34446537d9a80e8d20bc524bc7d20dcc9f45ac51d43102da438b8e9336c256bca4ffd8149a8daf6d5881fc2737831093d346546d78cc735e7ae646b9623797103edbfabb2fc59a9cc374c8c560c247122062aaa39f1a40c9ba468a353e92b5834af72d803a8c5a1a80cb83683e2fea97334f6fe4a6f2a816268a09da2a8aa6bf4ba70a6fb4fdde9e4fe83ee7475ef4fb7ce74dd830923f7c7753a7b529dad7c842e002397b80236dca80fe99ee7e46cc0d533382847f25019fe49df92c04d59b0351e16c31a1808082889c56575fdb4afe0717bf1bd4cd2da9a073705c751308f1338a07f40c6038b8f8267a4bfac295089a70fa234bbcdc1aa5f1dda62b5dbb6c78e8e715f96c16310dbc80508ea132c423821a5c78e98610511b76f46fe311a0d462f3f0f7b315ebbde125ba1bfd3ce64005db3bc2e33fb725885b74213f7b217b205d73a95ae8ef829d04b6414ecea46fcdde9b28a24232349740f963a26e83bdf65ef1509e086156d7d3b9995659179cf483481a518e926d040b4026cfe71446fd313980977664680ee23e1d4eada2f5c15f45d2ac22cc7a6391796cfc7c08a2b4655d53cec3c4449c8a30b27029b88382657765504cbb877cf53a982657ea87e4dbbc19c06e20c50f1201b08e8070520bc9b1bc1de35ca454e0f6c0911d95688228d28080210cff05b81cda687c10bf453a94d8e58d3d2dd07755481656c471c281e1d34f0d1b71c2d7395443dee027934d28eb8a600ae95f6f8ea2a81ab87812cd30f2115f2fa73d29633a90046ff03189d722e4471455874b3679e354070e64e807a5ec507ce555567c0a71784706626ebac72dd421fa9eca45312495a42f1e4fd8f282603024c1f46b085f09c801d60a734137182c43c9389ac04808c3b3089436123459453dfb095d2c92449a3342de91f82b47309982885e15287a4caf8080b4e1aaa038ed8a8235e0e0c407ffce584762a50ca75cc009b947d533e9ea742f9ebf1f66a690ab4ad6c02c892746d0a34e87f551e6540a0d1c61a02507e0d4878b126310063c9f859c5803cf0b00414013ccf9045f420c1914b0166ea48862de7379341b252996a18e789ac75207ed63cb18064cd01dc78be46e072abf2016ef13a66e2f6012ca11f23431375a4dd014ee9658255f5633632cf784e2e5d9e0dc51213bac18000620c434488270e96795fff2753128e44662306aad1f8c4332d07451dd1547adbd94dd59f76f031d90473db1d1e872fec1b31a42260cb773f7a44419c1e4b7aab12d9cb007ea6c6e1e245741408d8b60220320d0a8f10bf9ac38b4de054a647883063e7149eab8e2f90c19f69d9ab6ecaaea8f2db37f42434cd9616c563a8ca9593170d2a7dc49605661ad57c1131b13167eec3a74ca1feaa7d548aad6ac60da9b7f4d0f80895188fd79dca5cbd653d6c45522959ad516df876f73c0c3659f65a21d93ad4daba2bbbcece4178e4b874cc56b203365908efa7b337d5036535f37927aa8d9f34c5dc9ecdc0ee249b581396a83ccd414fab57bd349757276f3f6e43b8cea21dc7005c3f236756e37001269c6573d9a12805fa688bd69fa03b5ac7100102c11dccecfb1e7732eca4c978dfef566cf7684d38ca9faf9f195e916cdf2f650832a2fcaecf018af586ecd0c6ec0ef890e0cdd80e49b44e10f233f1907a27149f69634605c420032ee505f70e3750b0a6d001f3ffffffffffffffffffa8df985ab34059f26592b2c4fb3f73959e524a29a5946c08003a0c0000805f7093267d0f18803020350ff20e810eaa2899d038e531a81fa928da8afda989ce072a8a41fd2929bb4b49bdc98f539437099e6593b6dff4d38729ca652d42f7cf093afc518aa2668b122744b367943e48517cf30b5bd5f794bd7f8ca2f41666b972a1bde4a60229478e1d1d483972ecd0418a0f51b8e75db1dd6d6b9d64a61a3be18f5014b34e902235f464fc58053cdbf0018a92a083d547f992dcc2e413e5aa39d55ef1f184d9f8e8443996cecc6cfa949c288a2ad9b63b45af04f9103e3651ea18ecec4b89d5786238f8d044c95c349c50f246c42ef191896292f4fae4f2cdfc49dc61f8830f4c94e4d0fc550f26c9a7fa113611911c5f340f3e2e518eb942891ee64c34e98eb089f8d559a260faba27d708fb3c4f25ca79e46b099fa3971917254a5f5abf3b94ca68d08eb0f9c724cabb7df2ee7bf0ca914ba220f73b4e26996f53d5b9a3878e8f48943cd7e4fddf13244a32ab8f0afd393257f488629e5e4d5ee1aae1731c51daccf518b36c4449501da6e7a4edd0b11951f810a7840c6bf5795e44a94c1ad126c94c52bc8a28c92a491c4d3ac6afd2449424cb5e3d25d3c95a4244392965151b54efcae61025b1be1963fc964c624314d466bfd2294b3c0db310c5b0277e75ddfe264294e48df13aa38926294183289a7ed8a4845166c2090aa2f49953ab4d1788c27bd06c32eb01a2fc316ceae8f3e1e4fe0f0539594fda63e687728efeeaa30fe5763bb94af6d3e46efae04349b81b9dc5ed64534af6630f8599cff199e41fabfb430fe50dc2fd94dbe6230f4593d1eac492fba3767ee0a1ac7aadbd7759c2356af4f82f440e10811a3596310055f8b843492b9447bd16a5b5e7871dca49df2bcc339629bd7fd4a1b4b5b9fb55e7e9d40f3a14546d7b8a3931e55cc83ee650122e574b4d58d3aeef193ee4502c61664efaffb0b1eb471ccab1f3db979019acd4fa01878292fccac6c5fa78c3b6da316e67f7ea66579bc98309dba40f3714b49e597d0721eb1e6a43d9554ec8a417103ed850d4d8f99b84e9b82baa3594c3459eac58f9de3cc17bc1871aca6392a06b59b1dee0230d2525ea36de68dfb3d050daba509f156f92897586529712748bdcc738393143b136a8fa12464f87ef365ce0588682b4fc5ce296ea25a88f061f6428282964123bd19dc1561e63286de8b2ce7fcfa3d6154331aefe32a83eb1d83b0ce573cbcdb1c418334b9bc107180a4287cd0e1a44db67c41a7c7ca1e06f73b2c34395f735c25628830f2f144358d59d7f8fe9da47d8ec727c74a168f26a1015ddad9a73a1f89fa49a96c7f5787c6ca1f06bda93646a37ae975a28aa5d66befeb59a078db07516ca25c79d54214fc74239c61419ce7edcc4f87e7185d2491984ec37f96dc187154a6f32161efa399fc91961e39163842d2dcd051f552885fa7025641a2f9d49bc6c011f54288f891bc28491f9984229de73d225acca9a9c9de1430aa5d6d22c276be37da93bf88842d1f5dec4db102b3f5128b4a71dd7d6e9e522db5e6221d4c47f1ead071f4f289e5ca29eb6a8883d9d0f2714d74f6be85192eacce647138a57b33b1bd71b3e98505c31c9dbdcd39824e8c2f85842418cd2d239a7f3430925696d37e90f279be3fc4842c16d4fce2a724fc6d97c20a170a7c496b090f513c31f4728c70f1a37a4558c12ae093e8c50fad2fd98cff3b03815a1608234f7b4e2ad1f6c2294cf453fdfed87dc1d8750cc265827cf594ad0690aa1f8c1ccf2d3a782a0bcb5788c5ae6b6ca76e73afd63a3f9004279cce4f050cfbd5984a6f0f183e2bc07b72ef9fdc24682c2870f4aa1454b10be2f9f2dfde841d9a4303153359c1cbbfde0412935e504f1feaf1f7346d83e76505597e6885aecd9875d669c685e9326e87e021f3840df870e8a61ed94185f5677357c8618b9280819b1e6d9e9b3273f062eca22f4570693f4d3af2703316eb1a7ec8d65b769bcb9ccab751cb11b72b4939818b628769de9962fd9ef63ac45b14d34f96d6cedf3ee2a88410b74e8e979fbf81f9e856eded9dcc6b38698b2289c24cbe7cd9ddbd96e2cca275c4f88fef6d80fc1a2741943c9314d547cdfd6571c74c9f1369e54b2618fb0e5b20e306ca02b0a2b22744dc977f02b8920c78e3f018e1c1ba85123c78ea7018e1c386ad400230c1cdb8ad2c971e39c9c70a57694315851daa4c9f755945e36292506fbf825a71d0f821d3d4060c63b7af04055144673073d11ba4d0a190c111c7f834d44478ea31f2315c5b4d8ce77a2aaa3063502315051fe9ed18f9f67b341bfe3d18e1ce78018a72809d9797e4cd4a49d1f9ba2f01b264d38d94443c93f2110a314853bf72cc1dd44677aec10715214abe2fcb644092e6ec2f137444e2510631445334975493a897a9d6333228ae2e5471f9f3b514e226b3b7af0084549b23e350f67991a63232cc2c3c69983a2646f92b29855ab34d11146381e8c1fd161767ca176c61788f189d2768eeaaba92635633d7878a234ca4cfda44d6a278a9b4a4c922a754a4e94c49857646d08a9a193b889c2498df94ba70a139fb9bfa1238c1e7a9a28aebc4992263933c28622225f84913cdacb44a9a3dd8fd2d7e8c01a313051122d27c524935e8c4b94e395f06699b761371d61e39103a5e98e1e3cd012a5134596ca931f6b3faa44596354390d9f44e8b4922006250a3aabc732e9a73d9d27c624ca615c3e07b9b7244a629fc6a45a9474b1791244a2d423663d98ecd9847746d86e981d5f7c0f1c364490d17106c68e1c13f08e0189c49842e798b6947d1686480f30525320c623d25eaa9a7699d7e311b6dc30449ec70ea3236d03311c91fe9b24ad49f27450c56844f18451a35233558c28ba8b6fe658a14c140466dd038c840b88b1885266f49c4d4ce2236ce845d23c86224a92249afa0a1d2b277e8e4c076ad4e0b1e3bf8891887256a913264243eb71230c1ebf0311c50ff3bb79d3774ed61fb08113889420c621306d274c7451b1b18961885298d8a13647d76829c62844319d20bafdc38e6d5884471b21ca9df14d4d3c99b36f28c6200aa27bd6bc041d933041236c9a80188228856c09426989fd9fc440dc621627e91c9eaa39310051fed19a5d2e4d8a6a7580610393187f28b75b093af3bf3748133f142bb7ccfaab8ed187e278c8b8e2693b3670980e6ce0042229061f4a5e75f6a399d943a9640d556a3cb456c9a0ad1e8aee69fae4eecda0f569200531f25012ed459d74926c03271031410c3c94e694899ed6838e9e98713ca0468d19e030b881138894187728edc69594221b61d31e602404c4b043568c3a1494fc59e7297cc38b5e06c802356af0b018745845542f67ebbb65e6dea412acc64b8ed98e8d1b3cd0dbd0f13674e498c0070e50d6851873286fe748cf20a3a3a8900262c8a198fdb9eddc6b47d5c34612c9d143042d10230e25b184ef2b1d56729fec089b0162c0a12057322d4d863fe1be3714ce34667326d91c3738c2e686d27ce997909bce9498b7e11ca97aeaf46f4c9a6e1f88c18637d57c8472ace190f524c99a957c82500e355c254df818bb1b43498120461aca9d5c4cb77c8ea96434c2e87798111e6d1c030deb67b5ab399977f43b11c4384349e72659354f2c06396edc30233cd83686194c3af4ce4473809163870ebb10c4284361a4ebe7ccdc215f1d397620ab1864285e8a92af3ab3a9f1a08da1ecf269a73942be621439367a981e3cce2c86188aa644873811f973a2ddc3c60d1d3c1a0231c290b839c99ac533a8338db0c5008371f5b1ea2d9aebf97aea1a4328efe872773f0d6cf0b8185f48eb49d28951cfe48562f4ac415d29319912fc2e943d271d4e86146976e2827725a96cf314da42c9ebe23bc7f768a178b2e69c613fd5a39564a1746a3ccbb3060b25ebec1ff1bf5fa124e9b8c81c63892599da0a45cf6a8d255c69c8bfab7026156dfd6052a1605f9fc5b3e3c9f3f5144af2e88f31decbc4ac560aa5adec249ecbfe6527a350927184cc99b724a955844259537b6b73fc5cb1ee09a5aabcbb3311576e7242414de9e7f5a034db6e42c19412df5b63f8e7d39850f47d4f173a65909b53fe83184b28d68949868c873351338fa184c277124c37dc673e4d4928e739396d6ecc923d13124aaae47f84b2b59e4eb249a76f12648462fea493ac1f1d21ab5384621eb3ce341f536a75885038d9e3f6cb4dd0e9930ca1e8229e4c8f658450d8f81cafa644eb0e7a100af7d9a72703a1e4337a83c6b4f94aff41499cd023beb56c536c1f14f52fd64749a3833cf5a018abc49a8d5b1a6f330f4a6ee2bc57be5f95d20e0a1f7e4695342235e934860e0a969dc4d833ca636a7351d2a984955c5952df99b828faa90de6794564c5788b929824a93a26f3b4b3dba224bc44cf7f33e14fb016255ff3f0214dbb4776b42829d14ad2cd93d3afb559946f64677b79cc24b5c2d1852c8a79a489a735f95894b47694969093ab4e038bf2664ef2baeb57144efa9c397cd584c7ac2b4a4a5c4e269d4d3f3c435db4a22474b4d79587ac89cf8ab2c9abe3ff1ba3858856518cebcd93a4912afa5b55944ccc21ed4fd021f744535112c49376769363c79ea828f59ccc1beb3945c977cb4ad4c9e92863d28529b68b52147564ebd6e690a2248474d5d6f7243adba328d5660a7d9de779e98aa2549937cbca0f4551844972b889cf709b048a7288c956d2599f9c493e511a534acc9b641243c4f744499d12c3680c971375d489920ef3dbd693c4d3664e9493cc96dbc9a651f3db44b93e9d1eedc1aed264236c5d68a22ceafb647a686c0a93e9f13bb68b4c94b464939420330774818952082146e33fb506395da25c7e21b23d86f0b68c258a5143b6eb8f52a7315e89b2e8ce61cdbddcdd1c3d44fc045d50a234e3a3b2624b5e37f94994649889d94eb6c81c1f499442d98a12738b5709259128ffda88d3ae91045d40a294a93f99dc63219489794441bf55495af46a6c7744514709425846cfe52637a29c64fcf214a14749b375c18836844926725f9d498c2d4293f138c1738330693ba10b45780de7d145221c11dec5218a7e6fbded63ba1e5d18c2bb280421aec60aba18840a2211a3d3048df7a7520b8401c2d05027afa55ad930e8e20f5df8c1c1e8a20f5df0a1b08b3d94a48fcd8c93cd440fa311b60e74a107cb431778683d55d3455d66ed4243eb26747107efc20ea5be760f9b21f64439e9a20ec51883deb6c9695c6bd3051d8a713a9c5232439afce30c12ef11868e1e617000025dcca13caeef35377273f6ba0b391454a3773e1d3df6ebed220ecc09f941d3ad0e87b209d7f147356ed3856f28e65ced52fd5d15ba704369ec36974ea7fce4926c43314cbc8ac879f324b3f33a4050a3c619ba604349d2293a577a90af11410f736302356ae0f81e3dcc8d94b6842ed65012376aef96bce94ff0d550bc953b25ea2871f3e9a4a1245e9b4fdc74d050901936466363880f9d3314be73903e1e4a90ff9e148533aa50ce8cf719734e4a848536728c40c4c0984185f268d5b87b8c398899bc83195328c95b6532ccc931966d0f6648a15c4abc124a9b3c23a38d4261dc358dae0d32b427a150b21ef3fc549fe07eb5cc6b6adc9a64e24ed44d2749e984627fd0fafca5cc47d73d72dc00418d1aed83194d285df8871021931c2e4f98508e367257d5d387f997504a8d41c3c61d95b05aaa77b796ba5da5c5a9952d134fe89a5c124ab22e2794acd58c7906124a27d37c9c4d92123bbf472888ad9531b16b2394f704256793ea5304ae46eee245ba882657f5d12723423146743dc562bbd59b318492ce7195b12413004c6186100a2623debaef94349b8fb0c1c0064209789f796e6046104a928eb9f93dde099ddb194028c7a6d399f103cf4243b46ad673333b6ed5dd64cfeffca4193e289912fac5f485c61c3c337a50facefeebe9b53c4b260233785092511161df23e39cccd84131df5455bc7a12b3e85dc70c1d943c89413f49d2936892702e4aa74d7fd4a65ee65c7151d48e416bd2614b4a756f515282d08fd910edf183d20520b6289b88879326bf688e0db600a41625d9a3762a83ccaacc8d1c39921b20b42889397b99686e6ae97a45f0c90c8c06ea7ad8c061034718229fccc0807106c68331029059947784e92426b6f131caa218cd4f0c7acf8499f07600128b724e3ad6aee127978a20b02897b83e2795cec998cf8e1c223876bc05d8767c6f00e415c5923f7ad6d292e4f0ae2bca49eafd18c49c27b9592b0a2afb24318fd8b45562e925f03a6610025694fbcf434c0e239f4f7815652bb3ded7a8aaa2f0a1632755a54a059fe9daba9a6b15df329ac74cb38b124ce40ed8b8a103043b7af070541447b4b968f0d0a5323f4559c34ecb4aa3892b31453926e172e4a88ea5f5032945295744363b95a03eb720a428e8d456f1a184c9399c4651ca3b318c549b477a980ed4a831d2034414e551a3c4663a99df4361dcf81d3ab84142512cb93a33df87477a980ee4480fa32367d0e3120414e53b95e7e29e356f8346d80ae41305f33c6b32a6d1f0b18a00e2896256359d1d57d3cb34111d060cae0048278a259e4c85d411a13c9d410fb419ece8e644a93755092e1e33c26643a4078f307688f0b0d1c6e3868d1e6130006413a5f14a1bb9a573334c4d14562c54275572b2c703c944c226d1315d568889f29bb90695d94bea4d5fa2d4f974e7ce2b9f250aafe1e3334f7c937eae4449b547a9171593d407295158317d42acd7497f7112e512a49ed5a94f29a693444194f61844663cb5a22412454f9294197bf483501d240afa21436c47ff8fa5813cc2b41a1d11d3d86bb7b2cdf8931d51543f9b31f183ec924f230aabe154cf46ce845b4118510a1532496d3a8e169d046411a5ec2489e7772aa2c304441125a92e329f732666978928c7e909ba494789b61b1044147e744b92be737c3f047288ee2b3caf54afae2bebd5d3e924ec9f7ffaeb400c510cf1e959ee838cd92e16311e380029c4a2bbe3dd26dfa9dfa2551db4da68dbe0a90aecf818e4c800214a9212f4c6af890bd5fc200a9fa4574ddae41b8d6ede8e4fc00863033d70d8c8d1813513011144d9c4f0d8ebf18492043f10053926e636d36df04cb30a2080289c6527594f50ba1540fe50d44c6d1f94984e3899a40b207e286a30ab124bfb7d2828594deedcb184563b5900f1a1985f92d0b9bb4bc929b387923c0bb95db3d9b934103d94c4cf5956335a903c14e35c88c9a3379456190f05f3b41d62cfba43b9474e691f256abe8d1d8a2e5a324bc72ccffba943c1939b7ffca0d4c8b0d2a1248d95f06ba1d2336be650de14e2cc3e9a243d58207228de6c6face3cad26dae33a589f7baa3557a90381437d4e4a751d2e4936610389442dee610a69957a3bea168f995b9e27f3ef3cb030cb3c374a00d206e28fd884d9a24ebe8db413280b4a178a5834cee962765ba40d850ae8f3f7922c365206b288f7c28a984f9d6ff11440d25cd27d4fe26f5bcd9948692ea28154ad06c53b20c8286721026e39608a573c91cc8190a4a745cba069dbcee023143e2ae2edea165bbeab95ab63b4249ab22ea072943495f77fde548d99e8b0c652f93d1aee1b92fce09808ca170a2a42e49f0bb7ef5c5501032358be90cf2e454184a2a773da692ab7cae0486939827ad4bb7f60547efe465cbaa72336b4cde3341975d5b891bf6c2ea6161f99da9f78174a1e4253a7c64a6d3e33a176cb7bdd1cb94757b1559ed7c9e7964b6156da1184c90ab29260ca285b2af280f72da3a76af205928a5abe9acd13f16ca22f264523a0a728592c936496e95a4f464122b1434a9311dff7b7b6de50142408110e8c061812a1474ce3431bd9a5469c266542809152eba79262625896d01640ac530c2634e7a4ec34b764b00914229e3fec3b5d2f4c9bf1240a2505282f81fed7451a74e248040a1186d73cc61949c292d03f284a2a76e11cb133ec9da8038a11cd47aabea099b500e32eebfcbbc680e4a409850d225333429e15d45949650182de2a94e7af44f21102514738ed30fc2ff7664948492655c6d6f284932410382046663dd2bddd6d4cc4eb663ceb14cce49cef64b0072848249e29a45558a8c3519a118be3d68993d49c6db8014a16482504228498f1e4f8210a19c5dbbb4e9ecb00e9e0c800ca1fcf1cc3bcd8485504c6a439edcd19326950942d9ef74449fa6204028ed2831f9d56cecbc06f941f9041966439f8e6fa2e703365b675e35b542e8d8534fe24992493e480f0aca55dcdc333704101e94449b24face5ca5a70cb283829de4a1c44c916dea83e8a0244e8ced123a37ad937251f8181b83f81d8f6e827051d820cd7f35ae89a7ec16c58c517657be662fb64531eb5c951aab162549fed954920cedde31b428e89d184faa86c624368bf28aecb3d3499350aacae2906bafdbad0acdbb9d0db71dd3219f4b4963515a2de9b2d164c5430916c5743adfdea77b36e815557dabb9c65c89ee7a7a096a61b1b665190cc8704531aaf8dfcdacd6e5f93cccdff80f4841462b0af6254dac9a932727352b4a99cd425e4488b48ed52a4ab3e6a9ec4c4ad791aba224f8088ff1b7e2dbd25414e40961d69a37a3a90c1565d7387a73c79129f4748aa2e713f6ef636f8aecaaeac2b4eb3de632f1ccf95829ca7e29224b8f86a8cf0e6490a2284a4c299be4e4929d1a4531e7e477d07aff96a128ca26e73c49a2e76ddd86c24bab6a5bcfd16e9bf52b1914c5a05d53bb9d1aa542af434464032710a921e313e52487659a2933f7e0df48ea89d28d492b499ccfb7758e1b5801199d287c8d3ee125a7562537c2c63932c009edcdecbbe352c7aee3c3dcc4b0316e5f7c9123033a726ca0468d2f72dcc01d3d74c8d844d944d3c454264490a189e28f521375be3f0f33d20116b119c8c8443169d1acf1f39a30df08030c0c41060e50a3060f1bc98eef408d1abd811388ec90818962e8ecf6ff769728c9f227c8d57dcd26b14479646685fcd849cc18199528c892e48bff341da73d32285192f62673fc66cc9dda49144e9924b5a7376548a2e4ddd76153bb5b6ddd4c901189824e2df92f4c4c2cdd466440a2dc656a4ad292e9b22112643ca2f43b264a54ac11b6340fc87044e19330eb9e838c982c1981805f230adaa5b332dd3ddb6344f65e9d6b6da3b57a2d9a6a7372d0fce9369b27870d198b2855be97d879f2c6245a4594d24e90dfe5397554271125d191e1c4fa0e224a17ee9725db320e51320fff31a9a56e4c258628dc8651dbfb9ec478ea4214b63e3dfce9c6f9f310a29ce24a3aad3eb1735f83e8b52b2d6f3e366beeadb774f8b6b9d3254194eb93bc2839e71c77563f414620ca596d948cf67c9b691c0a320051526315ff32fea966321d1039828c3f14bd478dd6503f9a4748861ff6eef0dc2a6db76e752bdda821b74a55be23818c3e9437add4ac89e90a291b0f1b60241f4a759936f9faf502197b2897f0ec497bc89c16f55a0364e8a1d4a3f4839294ac75ea9387e209fbd3ade9e48ccce0a138f32147688dc9c42426e30e052bf1bcf21c966187620e27c3683393afbfeb5072d1f1654c9eadba910e65f51b1f21647e0e252b3523a3741027fa9443714cdad7b4cc49a98871287d8cc93488923a729264c0a124ebbb26f94bc575f46f30ae6cd5b6f6d33bf345d3bfabd6cb3e9f921b8aa6f324f96fefba7c23a30de53d0d9b4735cdaa7fd85018e5395ac9708faf256b288c95d41294507fa6b30c35945aee63094a9db2db56461a4a224fc3c4cfa7838ef51d908186e2c89820a329cf12649ca17832cb42f455c992a90743c70c4270662886f23033b184a6c648cb50f85293557d429768d6166490a1f8622585da985565d511361dd663478e0ef040c618ca162ab3bc3699368208c81043418965191b7fe5d59d0884a15ce2864d1e9432131d0cc56026da3cc91d1ffea5c1a0468d3418609a19647ca160772a4bc9b50db1598617ca5a37fa83f629412959195d28c95ec2ac895da7e40fe24259a467eaec31cbd842592fcd4ca8abf54a11dd781b13a85183c7cea0c7714186160a32fc3e73bd34b9ee356ad4a831831e33e87160909185e268099b24394967ff1f160a2735b4f6e8b74d1f947185929cc41042286dddb9ad0c2b14edf4d49a1c5b1955288b0ee2f399f8361c6450a1e0bedb1f94207e7d94644ca1d2bd9e04d9bdcb4186144a2f63ad62fa594a8ef3303bc88842f90417f70faa3574ec40a17867b7b1e9dd4adf2ce3098573f73ea9cd7c4799c8704231e6eab3aa1f08329a504eca725d3593c5ef8709c5a0bd2be2f345831af190b18482921d84e64ea1394b4786128a9d4ce98ac653cfe34942c94c4cbeb1d5d489679050ba522675a309dbd0ef114a9d6497c64ff577f26a84f2bb9e744a89915184721a532add2d964184be5edbde4c5fe72b6b4b9a76f9f1904f2f20630865336527c995397805194228b7ab6f967af634c2fa828c20943a9a361d267b92494dde05194028ddc73c278e6eeacd26ab828c1f94849213657b4b76c9950a327c5012356ad26c7756bb57460f4af17aa7bdd48e5ab53c28f86e8b988faa8c1d1434cee7939c73628ea50c1d94d244fbd7ce36da643d17658f7b9bbe394f48d970513095233399b4a945d55b14dcfa325e89134578698b366e5753c5c6e4f49c681e64b528d9499bcfb3c9f59ab3277cd0a26c6da2a953a5b3091396c0c72c4aa56d84d829f17d274a87a7da3f1625b93f09db4936b65c038ba2bd8f98ac125fd2f75778629d29db157226891fb724afd46ce2fce18a72ff286962a3f9e43ce1b02122b2197800043890010aec083e5aa1893b7a74d5043f585118b5af73d2e9aa5afdb10aabf11109cfea713ffb89427450500baf2f59f3b53722402e4ae225c968527bf3d7848b72fffb8832b31247e9b72889ed9c94ac93ca347cb628c78d971353fb2b67998000b528671fb5f16bbcd48a102d0ae2d34b57767416452d41b7ed7f1693e623802c8e1113371bd16bb939ad713e449c1803048845490c2e32946f1273fcb028b99d3237a5e23645af289b944fdab4e98ac26e12b3bf8792eac45b51f2f039669ca004a1745694de64f35362f824897a15a55cb53ed1f5f4b9ad8aa249f5c137a671f9702a4a25afdcacf6c61b2d2a0a429a4931cae50471d329ca31b7a1a7555314b7839924cb7b893da65214a48f8e4eea3d0825984851defcb24109e29424621a4541c4abbc89dc9c2989a2988367d7989442511e0fb7f8581ff30f8ae2cb997a3fa9f3e6ff897297d890e1214f946c77fef2369d2898f62c5d4f329820e744b94d103af788375192dfbd418feffdbf9a2869be8a31b57e264a19e2a4c84dd19acfc74461b3e37532c9ad47f9972879facc6878d6249c6f89e285aab7e61c3e3a7e254aea33869928258aebf627db6b48556f12c564f3264e12e48f792f8972d2a543e93c632db28f4449767ed7d46abf920489f2097642549b46dda44714a3dfca8bbdc97fef88a2a75f8e9a9cdb3c6a44c9e65fc3294bfd0e31a2544a8f08539b49fdc9228ae1443b3f29e2b74d1451ce31bcddee648ba713514c33dd5b5286b98e1151783bb9e4e41c2f2f3e44b1527b84e9cb38730d51fe4a5bcfbaff4950218a3e269b6d9b8428be9f46cf299ec14a348872924e376b888228959808cd1e7bd47d2810251b317a9f644dbd0d01a278ad5ea14aee7635f48782e5a98f2542d3950af9a1185d54e8769d8634f5a124c7d14958f9f0a17056da22b4798adbeca19c5a4286d179a234a387b26b996b0e62bedb3c14cd4ce9aab4f150acaf0eb775a3d5ea3b94ddff349b3aed50564b1b932a74bc18eb5034d7f6189b83d6e4d1a1182a4c093ac6ce1c4a26f89b7dd2e450de9e711dd31b54af138762fb5528f14936af121c0a6a21fdacb63794c33aa36886dd5012ab2acac26f4e67db50dca02f43cb08a1e4940dc51a99c34f3c112ad33514fe04d5c94ba9869296730fd325c57498a4a1946171628666f4cd256828e94f3a875dffccd89233944ad8cb7cdf5782ca1233945abe737ffe32946f3fc9f2a54e5c8cc850ce279dac51a36bd0a13114e5e4dec7f20efa3962286b879d7426270ca51264924c924b4eba39602808a5245329a37d4fc9174af22efe2607cf211b2f20f6e1cb04b50bc5d02db2e49be449e95c28c6fbdc5a1a5dd7ee2d14734ccd689668a134a2e52c9453869d5c79f3162f164ade9db624b942f9bf3f67ba3d13e35628f5d986933eba7e5c85824e259e2ee9c4b5950a2535994787f0bc21e6140a26e833c94668a450584feaf794168552eb9b4ccf263ce6090ac5d3adcca52794363e88970f625a7f2794543b4efa38d518fe2614be36587512d3831031a1dc9d835a56668cdaf4312825091f645a0905737535cb24650ce22494e3c7861531128a615aeaded4b87a7c8472fe657c959df9768d50d834c1743425f5fb221443dec8d8274dc9982442615c4dcf84d210caf2494731a57221944674d6f94b933e5e1e8452688cf14e4cebb92b0742494caf4a2ef941497558d16abb31bcf741317acce1314b9ccff4a0e03ee3f5217fd4ce83e259c6ba5a494a0e263b28e6af534f9621800e0a32b4f493c99e4bf35c947f436527fb51b6352e4a4a9b9e13db74fdc95b94c3c9a477dde959a52d4a277bf42cea3fef8ab5287795697fd9d8bf212d0ae3661af7aaaac7eb59946bbc65efb3a43d59cba224499e35c60e713955c7a2683a9bb06bd2fde4122c0a1a9e23aaa14e76e915a5ac2c21b4f66c0e7a5714464d6d4efeb2e2a41545135abc448f462d1356944d93b0eda293742f5945e9327f32fd319e688c2a8a76f762b27fde6f261585bd4c32e7c86def1d15052133d7ab09f3d8f8290a7782dc948fab15b529caffe1ee25ce8c0c7529cae6f2a3c64569ed34298af9e41693949efcbb8ea270e397deb183884c8aa2a474d030a9761d6332140561e29af0d110ba23284a929a58cd9f84b4193f51b49d0f9ed4287bd379a294a5839f9cd4edb8c69d287f55afc67f50b71973a2248e12349d5d499f32de44318549bd26a7cf8e9126ca6da333563668bc2713c57c51ea41a68d551e4c94dcff4c9fba293129b9443107536f428a7c27134b143fdeadf6daa813934aa86ea755bc632851d8a4e379382dea653389e26ad8e736397eaa9144c9f4c58ae8281265f9eca5654f6f4e624814935e0d93ad9b6bf1238aa1637aee9a4577d611a58c774a94124e87721b5114316282b8463555195114511efe42b98b2877260fb52526a799ab8852ac67ceaa3211055992fce7c96971424414f64a4f1aada337c6f61085117a5f94c69855b63544c1368b096fb2d6fbb58528273541492757799d9e108513a3a7b4e693cee40751de184d9652d25d8f90204ac2587cc7ee70a6418128c9b61e4094b3e98a797d1ff1fd0f253d61ccd389fdd3b81f0a67ed6a26d987927ccf9c44117367351f8a3bd243afc476c9790f259d749a8f91a7d4ab7a285cc9cecc1debf79379289d301b637e6a99c443f1bb4793bb6fd239bc4349b39324c9a6523b944fd67093bc737528ceca8d8af797247428c6248ae85baf0931cda1ac6f5672dff3499e1c4a953147950d277671285698a85766dc58193894f34ef4d2619449f70d658fdb1ae2eda3e6dc0de5e4274b923ea7cf14b7a19cbce5bfa4fa126fb2a1f4fd1dba35992611d750b8b80e267ea51a4a1a73369e4969284982d0c1f44d682899aa8709d23e77f0cf5032b19336797b870e99a1dc9e831ef9b9a49e4e19ca69a961e74fc850f8d417ea24c13194ba6347b7993fd1e42886c2e67a34a56338153986a124a3466e081b0cc5d0f963214aa588fd0be5bc13eb0f997d6e7aa11cb4fefd27a5e939d78582189fd31e94ac108f0ba5d0134df6397d16db160afa4fa4ef287d7e2ad442c134df944937fad9c22c947a3509a9268a955cc242c17b34089deb54c2bf4241a8a6d1bfa5f4c4de0a85f57bd39bffd4f8a94239e3de9d9ce6a850fef068828cca6713df14ca264acef1442a8592f4f6baba9ba4d8340ae5b693b99498f46d9c50289cca9cdceed3d6964f287dee1d2127899d8ee784b2cd49ad1bab6a515d134a25960e5a64aa5f2731a198b9e5249d515fbdb4848212947872da4e922679259452637d9dc8ea4e7d12ca274b8ebe2795768c9050523ac6b0ec9c23144f0e1ac36feee737314249cc2add587b11ca393ccefe7573de30110a4afd68bb37cf2434845278c7e4ffe5f9c342289975382f590d4241e6e499a52510cae649a4da6ad2f90f8a1f5af3d55992f0fba070b59f94922e94487b509239c9f2a274ee8607c5f71cbaccdb41d93df66bc7cd06a083922c61d6afdf4d8bca725132c9d24306994ece3f2ecaa243c993d49cdcf66f51923c344f3de89ce3dba2dc9b5984bcda8a06d5a23456a9f9f9c564896851d030d32743c95e299945514b75e8a95bf74d228b92acad9a234d62519a13b1717344f6c6b0280957f2979449d774f415c5398dbaa2a04c089dc1932635c156143d89dd984a4da60db2c2fe522ff99d55944f167b93d1c36c5015c55833e5313e8ba82e15e5f8773ada9c294f5bcd4045f15c83be8f6eed31ab19a728df750c4ada9d77656b8af229b13f7acc6ff97c2a4569c7745aef7bb1aa8fc70c5214dc4cf691266918994f3346513669da25aa5e3198218a82691ef560b722349c118ab289d3b14a6cb13961df0f6680a268297ed7fa49de184e667ca29c3d856e3d411c61c3b3b1a3477aa2207498184cd01c4b9a9cad13e5d8d095494ef24aecc5831305f93741932488cb937436510c934d3e53a54744e8ea3451deb0a6498e9e839269cc44394ecd4ddaca5127c644395dec04f3f8250a9ab49e06bd5e9a775aa270e59fc5a46dba12a510a34ef8fa4e8992f2ce9a7f53e475929f44c143ac3b9b3c51846b246146f14db61a4d496f470f1d1889aa665e36c46b45e52e4894e6846f5d8e6a0708010574806181194080070fd38110d4a83183a4460d2ccc7844b15dd46e7f12d94849c42c30810980c1c3c4a0468d6b91ba198e28588939a7d22a3905c636a2783f3a26614f2aa533a29845ad77e820ea234e5d44c13c764cf5a434c2a688b2cf494ab9952463e41598918882927593663377d19f9e818872c6c699b6491aae171fa26cc2c4bdf273b3b72f30c310e5ee6db110ba327ebc11b6d52b443974ee89dd9c72af35236cc5840023470e912f7688880860c6204a195f36d5068c1c39b00033048170d888018e3064cc0804f62697346b22c33c6ebcc88e1c223a0c18663a0310dc7e68e9cd6ce86f94b5f6986f829a8759ef0146b2c08c3f9436ac6dc5e4394d2679e3860d0cd4a8e187e2e69cb3afc9eec65b236cdd8752ca8995b6a5b7971d1f0ab2b5e4a6b67b28af88ba8ed94926497b46d812d10c3d9443aefa4bc81299f43c94e2c4f375b3cf085b5a0766e0a1fca9dde4ddef50d2909f3f67ff4c9639c265861d0a32c4889e53aa3e8a560333ea502a5927bafce7f0419fd23830830ea5d1b0f4d2335f9139732869891ad4368dba2895871c8a4147cf96d32d27e7340ea5ee2494e94dfa4ba50e87b295d8f9af625367a8fa0d65ff4ccdb11eb246db10cc7043396646d7533acc6778b60d25a1ee04fb718df127cc8692d895f5493669f4fda73c4470ec38bb1c364474f0d03514c3961c747d4c254dd8cc504349e8899d255aeb84e7236c2681196928ae29ad2585924d166d6ee00422229881867266329decc435f3708fb0758731810f1c60c61996f10ebd58b96eadb8b8936ef5b4698652ec7dcc335b194a4a304f2fbed6a2b121436935fee9b0a64fe3690cc5fc4ff7cd9339d4353194630a8f3b39635b77ccebc87178e04f6046184a2764bec4ac8ee1810e8b98e181ce6b0e6680a124d54a283de9fd7cc32f9494184564e54d56c7e977e86086171a35a93bb7e113b1e72e14476d14b997fb6fbb99c185629f5e7bfba05f92e016ca7392b49ad73267eeb45092f9c4aa3e49a73d21cec8424996691f15c2af659460a1fcf9293273b79ac8f4158a65e2daa7efc820536b8552273959e7512aad247628fde9fe1c9492a4aa0e8531694c99876b77e0051d4a92e913ed9e8328517b2fe65012429e180bdfbc9083d5b0821771288b8f8992dbbcc7eff6020e259943c59a7ecd1b0a9799a4d7f9f0905bcb0da5314b17fd9974da30b7a1601ed2f3abba6c28082d32e6f0727bb186a2fb89417618993ac368042fd450f0a8a199428a10baff088b1c1e2004193840186e54f0220de5d37992c9247c689be5051acad156fb3ab99f7a92f3e20ce55c99cfd15c6d6b847ae08519921afe54866411d9d730a1ae6d32bc6fa154ecf8f83c0673fe6ad87ba71e1314435fa7a39f7bf72994583ae6b7368051f0220c05217b592f1a5b92f4320f2fc050ba1921b5e237c63f6e030c1b19d02f944a6827a5d4e992749045ec7478e18552de8f50922446fb8e0b045e74a1dad3cbcf1c73cfdd52bbeff61da5432fb8504a198db69d3165fd2d144b97e9d0f296d7132d1483a60fbffe18942493b25052aaae43dd9db050d2f933ab7511ae73ba42c963ff4b504f79267a2b14937dceb13b8aaa50fa3351b3f94a8cce50a1248a67141926462e9f4259cb33bc6fbcd25b1f2994a36b6b697b95d3e2894249bf656c19ed934c09144aebb13769e7caa0f7138ac984adf592edabc7c40925418c0951329634a1dc49a68fe2415da86f9850ba8daf92a4d0124aeae96b27db9edcc728a12473ff870c233cc8dc24a1243eaf7bda6e2621344828a9ce345566275a938e50eed778b7f724e6a43742a9b23cc6f42473865011ca1d742a2dad39cd9d10a194795b9f4c8653a2ee43d0e43df1c43b5d08e5b89f64ef645226c81e84d2e567d7d6f86b888050dc984d3d6fd25efca0ac29ab846ced709e692f7c50340bf5f72527c4f4f6a207255dff9fb7e7aa436e2f7850ae30b74ad7ac1f667bb183d2dea911256e2a41feec850e4af1fea746e6240655c2b928c755cf1f4fde4634c645316e09ef624a3efa696f515a4d7a5b94a4f9bc273dd9eae6d4a2243b27294cdee61c6e5a9484eb934d933c73c9b328c66c7b5d65363de1caa2a474e687519d93846f63510c42be5d063d1e46048bc27710970b79ff1a7a45a9248f5d7b4df5b0bba2a0ff3227dcc464a56c45f13764c7b8d269275456144d307d52a94f5751527b3ac9dbb8266a99aad0f47a8f3452513cabb5afae3d8d4148031525f1c40cfb3736324748e314653149f7a6d311691ea4618ad2a8e72fa1db3e4e12a4518ac28696797808efac230d5224b3ebc375b87114e5681a4651144b5dc95d668ebe490c4579f4ace9d17e23360f8a92ead5743a8d8ce9449f28c924656b9231e789b2b58890cf1ad584fc3a510c3dda457b473bc98e13baa74c1d73933651baad8da63c9924364813e5d329ebe773cbe42713a552add5e7a704dd4930513cf9dea4cbf0aab3da25ca75a629b3a72ee97f4b9444a911b2d2f6ac429528cb9ab64e6a74489b12c564a3848eff99446974d20c5a194914374f5c533ac930222f1a9128f7aacbe6ce75933fcd24d080444912f7319c8e86933cc923ca55796289c1ede4a9d317341c7135aa11a51a99fbb427d5166830a2204a1e93d35f04d3504449cc2daa93986d3bc7068f449453fa270f611fda411e614344313dbdf75cbf9a8c3fc2b6a30b8d43144bb6e988d9128e1c3b121ba21ce3a7de16f9c9438ce64615a21842546992a5694ab27e878e234431ba8f0e621b4461bde2bc948acc25fd11363309d0104441947e9cec1de7e6326816a011885b4094d427793fd327391e8e7f40654e5292684a9e95861f8a51b3e4cc224ad33c6c7d28e9113a643e493c49561a7cc064bcd4bac22c375c4556c637477375f7461a7b287d868d060f42bf42090d3d94731015eee279733747230f25d1ff3b9e7c542769d1c043f1ac5dc74cd633f4d323d918e1e13c74e410291a772849990bada22b0e73a3038f726ca091861dca174a649d9a2456ca3a7234ea50cc19744fc8ee34e8d0d9589ba6e996763ef3b2eb13ca4b68cca19cee426ea8658b9d0b83ff408d1a30f81d722858ec8927bffdd9de35f3a51187e2861b13faf574bcb530021dc8c00126f08103a83182061c54330d7d17fbdabdefba8ca6a67a0383c61b4a27e85119b3269335f934dc507c39259f2a74c040a30d25e94ceca5ec9e985cc631011ca9460d36147fc3b6d5d9c72cb9610ed750d21c4d49325ac820fb4bc341430d25eb4e3a449874e1eb3d8d34943c650c9ac19324eb94f030375a40030da58ef7e2e13464d56d236c3a72e8c084c6194a727a8f35423cd7894932cfc3c06998a124329776934df69c3ac038887670800734ca50deac1fbd359cd6fc0bfece8f800c34c850d43b71faa16173fe788ca1704ae96c921293e4080d3114a49e8ea3276e7ad81029cb41230c0593264fee927592f4536dd00043c94ca86849bd35c97bdc41e30b4531e95c544d8a493f8db089a8f5a0e18582f43cd3f17483cce11c20d8408d1a69f63792c4060e1a5d289cb0ae1a45a69149691209e48006178aae27c96dcd494951ca2d9494dc27f7c6db94896a0c8a40430be5b311a74a7e65d05fd1c842a94379c91ba6a2c48cc14231dd8adea4495add7aae706d5bbe5d8edd9edbcbad0942468fab2f512b943a09ddd1e695a574b20734aa500ed573bf9327759c2c15ca961e4ba99f37559fa73185f2091e3ff3be34a450ccc94a26195488dc0645a19c9a4f52b2d5c6a4d50485a26552d599c424dbeee60965cd2c7f255f95da68e284d24455663bdf43ae8678b58635b3ba09a53375df7239c9c5249b408309a550ca8378e8cf9d4dd1584241bedd37844cdaffc4a9404309c58ce1a935ad44fb92f91b3a6824a1d47eaa2bf4b5e8fc181a482896889bacdb8da693f019681ca19cfcdc2c93244af9fc348c50def598dc4b1669c2e479d028424936cc7892a4bd6b352142316dceff677c87508e1b547e5eb327f3242194941421d4c9b10d82a91d5bf39a312668d221daf1ebe3230d20143fa8cc67828f6bc9fb83d62acbdae6ec342c467facd3f9ff9852f2c407e51b3f594af491a34528529723e1b080570468f4a09cca44338af0dd17190d1ef05d99f6e6ed299b6d65aa6b3d7c4ca2b183b227613465e9120ee4350d1d143495fa2b6d2a4308a55c14ce46c5ac6a21b82808f328df4188cf362621b728c97313fafc945062a33b72a42dcab9fa436a8c10aa9da945e14ccf47d4e829a9b1105a9463b8f593d4c8c7b4b959aca1324879c7f7c0f1b22889ebdf5b1396491243b128b989faa057dfa4f21885c0a2ec799a76b455e6cef95794674dee0f256726e9ba931057e8abb6dfa91ad38a72fddc283731ed7c0e3221ac2809b27c94ecf19430aaaa48c82a0a5f339e23377ee65c15c51c66628e75bf37261584a4a25c9acd4acf7efeda6d840d157755be7c7aacdd8e56bb98e49f31077527afbd849053944d9ad8ea27275f7634c414250f63a7cc57ebf7e5ff02478d1ae5839052143d93d2f5d3f324ad2645c17a7cd36b70c78fc4c0ac0e21a34049723527b9524f2a0ad67275cdd49a548b478e1b87ed0821a128c6f598a73819da9438280ae3f39e97231abd63219f285b463d4bc6b2d63ecbfd84b87dc7ddb3dc06219e286693e6573493219d284835d950828794933a9c28b9a66b0d66b24db837726e5da3a7f16a715bea946992104d1483e7ec2da34406f97626ca3fff77d285a8dd4631511e65e28ba9922f51924fa26f8229c412857a6dbdb5c77879feee1e2b0c219528be5b8fa649722851dc8eba5f32883493ce4994e654cea84f7ad3b29744e17ddceae2d54894ba2d3e6576a76fa8422051d2eeba3fa298b3e9afcaf99c5c734449ab3e492669bd3cab9b10d288e299dc5e284d33622df1ac373bb41ddfc302218b28c63a4f5977f939c62c8ebf615781104594e4199d41e7248605218928e89341ee9c8af8b074840d8cef61436406384c0c1e87c88e1c2286688830e3c372d4cc63ceda4a4bfcf8d0d154bd97c932e410e50d3b3f32578409733e00ad870c1e231062082e76c4333c36de453c7d64b42451a7496985286789ba3907cde6a19f104214d49b0e23de35a95e6d100559b2e7ac4cab204a1d3296248f1a0351fa6bd32c61bc940e7f82200410c5d2339d666fce3cc4903f1453b4d8e8381d53cf18e287721295296f4aafcd9f37cc08ce11217d280917d2d6d488eb56e4ec0021a0802d42f850ce76f7fdec970e1d61eca17c32b4464d9189dcbd8e198480c786e8a1a47af26b44e479286b9810a12b2f1e8ad9d326d3719b3f8967c81dca1bdf3e7b922471f59e1dcaba153ac834492ad1b5113618b8a0b712217528e8ff349ad2623a14cd6434a54acc8fc964236c30708148da08307087089943b96f4bf6176dcba1e4266407d12a8fb0fd17e83547481c0aa7b93c85cc262859331c0e2a1e368a90e7ef303a44bec061c305c7ece861e782903714d363124b75cafe18456e28e5c9f4fc312793f5da8e4d216d287514a54dfa2a495ccfb2a1a47e823649eb365eae236c3dd2df10b961be070f1117dc082351f335144cc9beaba1bc27491f9367f73417a5a1243af69a0ebea9f389a2a1989f378bfcfbd4df31e40c2553a5d9fbb74b468f8598a11c63882f3f53b156eb42ca500c1933fd8c34f1b7ce854208198a9e0415bbeeb7650ae3056f268c1794903114dd653e43fce665163fe062282639f1916e739de6e4111286c2cad77ba66569ad7e47a951c3ec781b216028bfcfbadcfbfda698f4170a7325b5c91f6aff45471a8478a1a8f93594ec724a0a4dda1b8474a134f7ed2763ac936c7a032710414108178a5d8206a126d33fe6bcf120640b05dbf4fd1beff335ad5983102d94631e2faf4d23937d501642b05032e9d5a3b375c8158ae6e7e9bf9434b9531c6285921c846a19bda3c466b70a25d9cacabe47a72937a950ba8ebfabbd2542786a0aa5ecadcdd47825ff36522885f498ba43a308199a28943ddd9924277d0f4aca502875ccbefdeb4d1d0e7942317f94f9f3ce7142b993071d64101d73993ca409a55c4d25fcc20d6142f13ec6c9277eb6c7a4d302214b28992925bf4d9568a5a44a28cd797fb6862619429684826ee61874967b31990a4142613f9e0aa1ce3fcc9f214728888ea5e49bd02964d2e3b0918091e39cad09428c500c7ef253eee6902264166fb2dd1a2a5ba297a5df4296249aa50f2142496e92b126de26b712f3214370cf832a4f8810ca5ed5a5c3dbfe222408a8a7ac89ddad587beec6d6f8f496a6bf1dffc517396eec8e1e3a428050d2416793c4934528d14d46d83607213f28b5788a6b9a6c625c03822f70d8d8d1834718213e40c4978a49f6e018217f5af27d1f8e101e205c43c97095cd79a3236407a76c55bbb6a7ea97048deea814cda5e201a24024100a83c15038104add6d00c31308001840208ac542a1683817f73d1400035d38243a3a2a1a1c1c0e16160b0502713814068381813010080884828130201c0ec3a54ab5078a535763c058dc6fbe7bf5c30e3345584274d710a6704ba399f768212ec8011c31c30e39ad04f3e886cf71a17f5f09830dad37d0bc670e41aadbfb2a68fd99afcd96680143af204925cd6da02714a6e20ecc8af98f8490d0940b1838f4e73d7556d7d323025a6d9181f7cd5d75c2942b78ae0df3217306fa36f83356a1bc154bdf71511067186cfdc08a638403fe627e4f70812124da7890fa02d4c57db4585c2e8b261904a63c21fba06fff0cef06f0065c5e140115a70c1adefda4588352650f25bdb3abf4ac785e67a19902c8ebf48c649ed680b020499be0a936036fa86324db34ea463154dd4bdafbe8dbd73c96fe17d751c1d47fbdf718228199e390f2971453d0bca87e29d3849512fc688300db74a1b9357d9ed62a8a6ca6b06c3d06012625fd5068cb331a2e99368d5afacc9a1661b2996ae31eb60cdb056ebc39b84a32e75bae645e44b38353cf0e0e4b31828f8078a047340425ecdbcddb38daa24eaa1d5766e5a230d5f9a95b2431d69a139a332842bd74e654482d5a822af93813b7c64b20fa5ebecedbf93b1f735158914978e16dbbeaeb94ef24e6c9314c8332b3e38df3489005794741fc777102349336fa7ef40ee47d9987bc95ef537ee64fc49cb8222fb77798890a52d250badcd2d3c2a0066c38e733fea35c5c12fb828e4f1fd1e38bcd84e4ebd395aa770ef9b0bf254b4e995004b8760841d6060677f6069daa192c07a7d23c12953fb83878d314f348624563a6e819c014cde4a60a3a721c817ad02072f10c49580e58924a157a146800cb2be467b6ba234b5939ae05135db3227cdccc1e7c4c508185584ce8ee6712b35220603672e6c04ef6c6a4c2ad7d46b7c861a5b83b9360daffe926484026e0c6896b9482465a040abedae62323382ebb9c34cbe5dd11d7396519e4487246770ccf52c85cb428da08a71007bae327703d4bdcff3cca48ad97eb8408bdfa20cb0ca5ff5d38fb1bcbef1c42d3fe6d2237db1eb62d4cd15eef0cd7c33f738b9bba7a482a9f8d341b8ef0931de53e2592f35d43bb046f382f0339a9c72cc95ae7888e57f863bd54d000854d01c63c73b5865526d062b722448cae1f1c002dc0e6a2cff831ccbd5303a2a92f270baee99782539354da9d096df40f6e63028af00b3cf02568178bb4a39c38bfa30e80fb95536bbe0460e14ea6eb54e26f00207699070fa55c35871dae6c571613436cd74644f85526a526fccc43bb80625f4c014614a4b31f328819eccdc7d509330fb1b1fda2753c14f3656a2fe513bf8728e04a60ad8422cd032b8229370ad45581d14e37031f633dee485efc9a83b9b6d2d1a6d2e9a82015415415e00dc39ed5f276a0d6633a2450883d89ca0ccd6c679fe2a2c3d04cd04abe3345385fce2907116a35565b68cd4af75ecc5d224f4baa4be551486804a9f7750f9ab94402adc02da8a4249ba9448c5a2b6c4993afb61ccbd3423c8dae0781f40a43b7a60c0723940eae5ca516e1720a242bfea1e7dfa52fbb0a25bed30046b5b6ce86880c3f7984c674ddff1afb4baa338469475d090ed841f9fdac103b334cd8022cde32b109259bc3c1147690fdcc99b3acacae11781180e3b973fcb56c7780acebf31978a32179afe1193e683c308083b9220ce39ebb3ac99e6b843729066b6788b6b0b7c0af5334e4a088f1544b2a1bf3da65e1b69ef0df4567e832ca330b4ac3b1a34602e41028ee9b8f0a06d37bd22bc43d653ce5c6535c58741beb8b9d8e14ef0f02e303bdfdbee750cac469aa1445dee227fd9a67291c95438a8cb1d545e91433a5860c61bf0007b31382ee0a4343809143851496c5d647c1f1733c617d4b0a6823085846780bfab844034d19f814da865e506c60b43d5cae09185d0dd0e42a4cfb0824da156f443c35fc448fad9b5b2d50a83570d2c8e1e415e9b7a704b0fe1e7f0a0751397d61c94090e29b72539cfe83d986860f94bf205ed322fd20dc8b58f5bf7689285d71c85b350c9dc5fba9e92655f20bc4cfc9c1df6ffd63ea02801c71d74c495b2aa45159a84f37e619e8550aa8127bb7d7bacf92624d01dc0e440649ece6608ef5968f90dd772f213c28a9dbd76b4d7c06bd62d0595f2d60b43174eff805b208d5046eddafd434518c6593ed4c40a7962cc0167125c64a274003f3018c14c00aedf5b10680dac52412fbe8b2a2d6b7677b6899a3e8fec986e1557de8d30ef183c024b6bccc47346473c296ba176caeee6a6ac4e69fec648dd404736244e2d1e34ca4ed40eae467a4daa6760365c644d226c2e205a9b3393bc21c5c90e91df81d7df5e3fd8c3bb58218a7a0b487f19cfec2ce1c23b4d16c108bf1fe7d02d4c1de8572e539533406cdd726e29a65b04900a3769f59a8d451000330297b6400b9e3175d7228852b1a7f4a6821e802f951ec46ce107474cc041572c7d40d00c82d7e3aa8c3fbff39b850dc39ffe9fbd53340665442c4410ba1c77a796c04314494051e38a04291491c1f0a06c5ed92411bc25b89ac478e9347a531a4ebf8d066859e108f3c8ece3074d45bc36fc8e9fe7ef3a370f85b388e75c34fb2124a684e69dd4f64da71bdf02b09ef64c3681ff9a100ade4a5a5c781e6c71a8394db2a6e5b6760f22b4430931de3069157435e84d3ae04be35b8c7fa484870d11962ff5d052d4de65f8ff8307223f28097c109e1a0b62210efbe65d872c7603558da82ed69c315e27836fe9782b8f81afde48d688c15edcb7f120a76ad81c6db902530e60059f7fab64e3e6920941e80c80061067bc54fedb58c12efa9e590f8b67265087f1f6d69104d8c9f566bee5a0d52d180bd8dea98fb64e6208a74bb531fd5f6ea77e542a9815ce8b19544ff5c1f4f6024e40cdcd614f164cf1195ea4234034823e872500fdb276a609bf0d7a9ef3fa714179a5879d168aad0fb9d76872bc9b84c64514a7e0365c6342931db8beae6c9c57bdc89964e487b55dc48e78aebff7dcd0e380080b5810594ef8f0d5908294a8427d5f2cf3d6286a11e97ace4967bf7986ea780d6a0925b3699b2da8b8b834e89a6e48e0c254c4e8716896703e9474d16f01dbe220ae3d3025b60a15f29216c5076d0469634a0d90e05f4af15bc0d1bc4a1cebe59b59b2bb2e33ccc1e7b39c304456f34fb40f4319aec418956e833c9f6f26b84ae791bd7fc83bb017e068d9d0a1ee84dd0754a6263c95e6e0e913b2504726747e4a29bc3ad6aba5b541283ce5d9107c6afd82ab78ddbb8bb5cb48f48a37dbd01c67f576bf076b4b107aa173be321cefc3c54d003ba58d34498f48882d69024364e609067362e2efa9d2a80f8604bc6c5b312037eb116b4f0aeacae7bd2289069fdc21056c09248c695524ca6e990ccb8775c229aaa2609b11b52ee08a2586497027bd61b3d7eafc119c8aeba999fc2389cfed4b09a99f6d45912fee7a70c855fe50063e62da8770b5fef1646d04385e8a9c28b27e966588c8ff6cb16f33f1e09fa2cd0a6f43efd7b91b8f60ea022d10f3da764c0484085e3367d41b0a51dd246b857c1093787de7da2858883158819f1d7fb5bbc63c344bf8a4b3a853b63df8bedb151093dedd6cd0567b28f4de7cd6b475af28419e7b592898c7832f4ab78beab84e34f3633527061c56c4adc07b806bbb1943ab0b2b7cac60220b6c1a4445ef8f87210c8d81748d29c5e0bc69461c99fd62b37fc9018f2ac25b2cbbe52eda0021b07825b9496560fc4f525334ab8259608415b04bdd2d029af212c9ccd20b03802769006d0c541183f15d00509841bf1f69bfbf0843769f81f1d725c9b0191ab91139a2839fe696c7209287ebd982b005416115278d70a07eee2d0f0e63b7370cf90e6c1d23bf014b95412f6b5b2952630f7e087761c659399a8f7dae82dfb14424be41da4a36745e02100ffcca858ea0139545e97efa80edd6d35ec7911d42771eaa7f855d7986a10aedb9da6a94f56a82ec096f87cf2f671bd2105e5e9013ecff574f7f1b647ecc3f3992d91b21af5a48e9a85e4448dd7eb2d1e91f0d9335126a1b701d39a0dbeb9bdb43bf614573f9cda4be1446e6917f87acf000ed1eaa17d7d196370957cb3a8f3880e0b6157fd6764022767dba7a5ec862310314da32d0cb9d43a2379c5b890bbf395a3a52944a1cd9a3ea709dadf99c977ba3f37cdb5abfbac81d2039676039334c873a95e42521b9d14b434945c6fe37723d94eabda7e767af4e6e2ed6050dd8b3b57b7eca49fffb93899d97a6546b7cce5aeb5530a11ac1f60588b3a74d4cd5c1af214b9602ec2b6084dbe1b6e3d95679177402bcdced49819b418b4714471e4480a72fc348779d85c1d4aa21924f555ecd8ddca33724ea7f8249fdbb93b99e78a892523789313ec34b2a8d6bac3589e3310f2223ff257257a1f3af124c3397df7d3acc208d743c42174cb37ec8fd628795d80f3275392c657164e9ab0368efa0c18903261a644173f85fe3e6219c115089f8c7339a379669dfa75c556a261522013b03e0ab83eaedf7e27f2ea621ffa84b5417bea6fe08c19962db65b389e24cf204d798d5c716f91de034c0107c82ce3f5e733ebd3a0c42f3803fac42e899753fc06cc19f92b42ec8d27773472661426bf615cc97b724a2799dde10fa2e7791433c319e051bc6c7cd2cc7aba3f53fea13539fc616f6672852ad221174566c6be68c29fb5cc1dca4fd7708ad9fa1aa24c06ced5293b79e7799e4c42d584b1fe9dfdb37122e7e73c9fb7f37ed69f890b393477f89c9df2337f2e4ee5e4cc4dde496ad53c2cf77596cff2196c587e45d95b73939ff05cabe6944f8a9f8113794acee87cfc22c242027b84ae4ad0cfb8aa477c2926903cb95efa2fc2d1bcb730ac4d51178571a82f2fefb9d4d11bb8541896ac76ee4ee6b9625a59e7a7f4e783d78105b15e1b775189ec1f536d345931a63a8d9ffb53702ec914afe1305a9352dcd038299c7de06129b4ce153c11678aa784bc7a5722c3fa6a3e4157a225b34a578f9a14d79dd21d3ec7a7eccccd91144bce799fe7277c16419bcfbe8b0836413cab31256a5d9ff3739dc6431fcbc3a93ca3137c266e9115c7ba0c4ff6bf8f145f631fb8e9f61e5d818a18c152fd6c33b34a126a454c46efa06ea33faba26183a1e314769180bc30a54bf4293ff3e7c5a95c9cc331867d4fa40e9c4fe44cf3b0abde6098b5d6faf3065c53867d8d5a2792907e02600a7fe09c99ae73613684fc77cc40ceda463d311ff068653d9ddd8520a86fd670d980360d17d0cfc5a524ade4641165aee5f49e4551a5e18524a828e31dc4379eeabd4011459790c8fa8969443bb94d84d129acbfa16963c763e8951986e5d3daeb742385aaf039eb1b27b53fbaa1af8b60b6f2d5831a24708110f5a32ae4cf1a4530216c73c54e913e82b94f6547f64873e50b9acfa3d47cccd50966a39602809324346084e34a2003f56c99f2340573df4d41f155e17e185a7ac4a1bfe7c74ac5cd4da5cc670a44e5f644bcb2e63049b915fbe2238f2917c7f42d84e8b2d2e1a8424411800e5caee144085818ec435ca5004a225d700cbd18ed20ebb3b61f0097c95b63ee9693d8a6df7164ac22edc2fbd4b08e3fa3382e5555155e3d95b7d680400464f0a01a313aef84dae77729f035e0c6d2e45358c91f97a2fd6b4658d3facdde01da66622b7e7bd10a6cee470e8bc17f3a0dce4c18c5bcf770fd885f851429f976b739d08f1be274e8215045c2dbd64be86d0731e83753c28f9dd25afd3b05e8db3e0a5c840383d7c7ba1dd248bb69689b6cc8145cf34e850b453d4da77fe8f7775883530c114a9f20f86f0465d1ddf87c5e1a52632c258df53138cc12d90787ce96cc2a81a8687f5c0b6fa72c056c45b520b35847f55da0df4f1cf840765eb33e5e838feafd2ead0bc3636cf45343236652bd9681d9edbbc72117be1f8bb873b5c183dce35e68f3f2aac026b647355b43aeeca1a9c3546d81668f628c71a5db95a188ddf403622200c1c0600f32ba48acf29aab32469c6e593a55b8578f78b4d260c855600d8259c9c1d787790e9254eb4cb6700cd3563cec89039a41d8c504ad6e777f11b5fd0a41961c6004eb2cad6845338a5475335a3aa853c4eada2329584aa6c997cd9c7e1669c5ee2dd519dc9242c1f937384fc8ab8dd27d6028cbcc376d98eb38baa7d6c846bb4883da831189bc48469e1075ba3e557b836f771d3a2d469e98a74fe331c1e0f43cee7e27a164a393f2d61c14ac5ec414d712847b448604a73ffa2ec7aeabcd4d8bda0e956a6a7453be2046d399d0bd22f37c08ba1f1d02208d009247fd4bd0ab5ac3a068275b74e0381ccea3c911bfdc4aba342da20a7a00d42dad1091da2ffb45944dac5d0e849fee347492ca09dcc9502c1b186f3976922b29c440b9f01d5a73ab930f75492b1d75d87558ab6284abb85481d619d0fdfa80fc516686b471b0a88c74aa77017deda114dc9040e8acf2b279e5fc20460264f2e9cf3712d8a1b1b032f7698fce06d26eadd7d600ea40a4d4610052a940bedebba5ac2301115c54207247c0121357042a684bb9c4410a81c971f483600e8affdb45b5f66691c19ccf32cb4ff9abbe99f47e7376f414329c0132489f7a83349b5f6e0a47715ac34a80a11e7e9bf6230a16446dfa3caf3cc3b9d2ca2d379b8e3f6c0c9cec1bc9b69a77ffa6114fe09488d4723c86aa63fcbec2bfd2aa47c3163a4c9eba89b756a1ffa12d1fdd26c873122633a3fcfa356ea1a17961f9028141f98dd1912b2741d65246e225d30960461deff2208c5a1ca50fbbd3248afc0fc279245b6d1be8dbf11420bdf9711aa011d6558a797c3ea30d6c4171ee6464a6e778a4c894088d1ec0cfb4520f09fabe87c62c3b03eeadee3cd38b2dfd14614e116d805b19391a128ae0c40d1a13b695c99bb133f0f585c53383883dd544c8cf39d207b75faadc602625578f995fab7924476a44e81fb8838343e94dd5b4694c695e2884ce0036d9d235711e3de7124e322ca03f3e9330794219bc74a15154942102ae948667d4b67e99bff83dce09aa643b082a04ca51d8746b658dae101d9e880ada51a06efc542cffaa81e4a258e3186d439bfe7d5549e8e2effe402d10a1326b3d9bcac520f17d34fd886402def72760c383f415cb179487934766ce94274ac989b0b2b0c3ea00e20025e11db05440af4a80f45d0aa4508e887b6983e534cf83d7329d69955cb6d6dcb16ebfbabaa75438dc36a0c8bae4e99c8a2dd80d14438eec08893cb46acda30ceca8b1ca763211c39adae17c784d311f9d8e70eed17d1de01a8cc6c9e3cc4535bc3e45944b9c3353324394c572310429b2459e8f2cf2066db4755818e9de54189a50cfa2a7271fbf251e4ebc5e0d1cca7e9cffa5689098fdb28037379cde2b1a8e7b290ae7cea2ae57776e425268a9c56af8517053322a058b9e56a0c8bb17e7b88a5d4c00312eff29f2aaf29e8cd5e5ca12c96f4eefd09f299c582c6f371c0aa207c99d6db69391b4f1b3ebf873262a4abe281557432c470fdc2705a052a18d4d1429925aac040529c653992bd2c22d2f71f4b03e848a0f6210f0a7c0c7b31a012e3fa98de530eabf6167ec745364dcf4fb7e29e0084908604fb8d3948523013a114b9381c892de0aff27b8c55ea6a0236c412a8339d931ef4e0eade946dd893407d90f10d0dc07948e184740125e4ad29361f70d354a959648a2260a38b945705d6b4a6f9fea6a10bf78111401ab169f0cd688dd52af93de6d04c9aaf6bf3db232741a1c56ed7172a4051c2e42554d776acab0d02ce649ce934379fbe2a4f3103bef51403b26b049fcc0035d57b203fc40cd04cb7dbefa4cd2154d128786fb4dba769e08d597312f5d7d5cab3604353b83f036e4149f20c8a398d0cd1486f202d4c260be2fe542e3a6529212a62bc6942ec03d974d6ac5977b506aacb1b3d3067e0a3479ee985fab3614a413646c5ad583ab7c75d2f5263436e603d415db6f2adee40deb76ecc481612207442069291ab01609344bec7de9013df896aa0d20fddd5198547c5d61aa02829defbb0e311baa637dae057da304ca5dea7346000aa8939381b6c030f6d8058b9e3da32f1d215bf1a415c82e8cae2dd742ae7e8e36865368094454e57300261e1a02dfda3f43c0ac3d197354e9fd25ffbc1119ef635bc70976a280c3c0e1c25a60ec6e7c82bd6a98a947caa6275c5133dc1400c3a0ebee4e46a032e8cea40c784d196b232d6e8066c46ee890d9de3172d145875c99f81e843b84524d51086666b0f8db518fd4d33bdc3b88a710df45824bf2e80f7b11c4b37802d8eefca98ce1d87d01df37be27fe805698f983fad00927b532bf508455591fa236bf6f2316bdafec322ce7815912a05269fe52d5c32ada47dea2bd71efd639dbc6647ea3a879d313252a239cf298b16601a79486e9afb3f6a4dd324f78a9cb4c25a8d168ddc8c58a97042c3afd6480a05121bafa83de7191bbc2f8317b2ce7ed1a67f1ee1cb56b17298b8014ce120df184f16583038821388543c84bca46e6c2d7d38ae1dd1a2a7e4efd6668e02b7cebaad92eb49c549bb9e88cdb1b0523e2a61382280e9346b928548ddcb88cd36a1738b0153e1de96a36af73ff1402dc41f585ae4588e2e0bb125dbeff71da51612fa28af13428d4a4e0e2b39012b52e6f557bf879a80f0228653b0165dea6e6fd14402da4045885d570983dc9297b618e082c4656b08c21fe045822da14fa349200e76bdab3fcc7a8016ed0d22deb8e2aece7b66c6896378bb1586edf4c88f4a987f7369936c7ee1b6e87afe02122306bdb13a8d3ed36de50293fb5fb44d5d225129a97bca192d635df6a52ee5028edf8044ff2b54fde8ac2f57c10488eaa542dd324ece9906d4476ec43e2f744fea6d27c4c00d1cc409690e26800ba5053a2db42e0a8b72d4c4b0473ddff7f97bd5d40c4d5b10343044019315c6826531ed3dede4410ef39012183692394cffe883b91a1b453623e2891c4f1fb2a3a54d8beea3972011387ca15a543c7ba0b222d4560ff640530e4593371f0c31fdde52b19805ea57e4b4bf16c8fdb18b0ba1bdc7ef320aa9825d426047f2b1b79ca8b8c147a7df58aa8295cc680948f23f59d4f939f0672c1e37a10b948d243a584d4f5c5a37fc008b4ecef4c409b49b92f223ed2b1e4c287848b818a8b1c3414446da92d769898293699ca69fef89dee843e57e42d2c3c1316f648264842e3f71bf9ac042e06910bcc60a77e692e439ffa514c5a79bf2890c1e4b7505d72172ceaeb5eec285dc37c318766d513c77f0637eeda18529b5d8d646d857c4716366dd16e459052cdeacee79537a2ea4d9bb42b733073535922e5dca0a71987364b3667e5547f7d6c9b6b81fb12dbfd5f362613428d106225dc2fb06d99ae37540a3b8a1c44c394500aa18cf1cfc31f3517bb6fa2997491acf8a58912adfd593c62b2af7d4b4aac89bf4b46ff7881c3f70e2452943f86eef7deff4f9920846e0ba82a84df96172a8a416b462d911ba8b4ad47ffe08684b1b55cc9994584cf16f34e1a34bf0cb3eaa65d637d89c1aa4f2d42c4ca04dbb002724003fd1d8938c0a58f6230bf8194fce664e98c1b3988bb48fa0c298608ab6a48fa6721a179e51d4d62160b650838b2a06cc94ad9a220ce9d830bad55ca44e8180b0d38e04a988f27d39b56e7c1b040b452214cbf355a1ccc48a2d798c417517d0cadd550bede2d03d0834e9a82d34fb0b67a40c360a8b44f7ec00dc80a5ed4e6a12409ec78e1a70b4a4dd7208695b3188c090f63d6dccfa82b8bd3dc8688b09c6d1f9201545706b754d10120e046753f6432799d63ea26eb8246eac8b15d4e62db6ab4ed571bdac9497bebd00e7ca51267fde71ca4142ab52f6703fa4d4f4a3135e26ebc69fe3db7c382405d32ddb3378d95beedf3bedbb012c8560849e32cf652601df46c142b732a02b4ad1e4e24a2f1f1a624bc06ba4dd2737c8302b2b82606876593bcac0deee4869834728e521b0fc729b11f4f703e9831c3fe097531dcea21d5654ac31fb2ff0c26b9b4cb5f6819761c6f45e7c5a177689f7e87eafb779ebb343b940670a23a4032ae997bf076cbc7f49054ebddf437ae3f9014f573867e4f75f0a6f2d069356325250b8caa17b31098848e804eabb4ad89edae16b2b768c3138b638fa90d2d1a4a531ffc84b33f373c8d51dcc91e80ed21d3813337a685da84a6e0d044e938b4b8d971dd9d27dc7d6bbaf9c97890b85d06d0fc372c7a6e1001d6680e6ec1f7e66ce93f3d4c50039ddf085a348ca50eb833dd509c8198cde3f8aa6923f6b56e2a9a7f47218141913e481157a88d7db2358de46612906b3eb31019a5d910f7a8c6db58264d5491ebb97ce6635498ef8c136a928fb12b06fd5d36d310ae3f4ea1795953c5993be4ccbb3a6d994d9893122a19650b1f1b3f81b8ca9b9a9c16698682aef7121b36299f525f32e2c0001f4fdcee974c8e61a316b21959b0d42982cfb326c60bccbb5695c85056f8e750b2e59ef15419669a092938e9013203e0e49003bc87faf64ae7376da7d50c5c7299c1a8a2cd28563a78b1fc7f3735cd69587f246fc4d82bdccb184fd0c16bf01911e124e285dac88321784d4343677201bbcb55c829e2ecf3653baf569f69d08653d16b08cdd980e17ddcd2c2f5c7142e49af4b9c75e2df6bdc3eb46f1c939193f86a51f16a022e4a3cf258c8a29847d758f43e9e039d3226e4c138ab8095ec89ad0221f918d1886c106316f115de57b0685746c6980a50fdc56c4f06b34f06a3efcf60bcba21e8e89093a10eed2e4d9ee20d4327d111952b704187ed22ace9de34aff9caa4a50805ae5ac4d391fcb31c8aeb031b58c18a3ad98bcded9567f9f4f0e1b04823bd79cb5ef832776f476fd6db7b0ee68e78b9c9b3b3846484631267a62c2749b067f43b4c37888fb49d18bf737d3176fa90add36fc61ae8bb5c62595bc652c40d85650d5bd3d74a0251b6b5dd283ecd661c59d54e289f7e32a7329737a7069ef633a8194955d795be21d2c283a320a5121566b29311d4303f63e0a06249c8671de8eefa6df0d9d578fbe647ed4192e532a4e0c2452ea17ac5418a91f18a9a02a5795df54af25d4dbb600315b08a343a85860eaacde49698601ae0414857162bddaf8dc36d3874978363bdd339abb45019592e62013f2dec3223ae04b90d476f6f0cde93ec76af8f68e27a29064fc1a2db90eba5bdca92df724b538b0bff087e743f5030b8fde99c3edc93c665d055b617d7fe75bc8310e6ced49b413a69e99a6248f63810d00bae7bcff02591ea95c204efc11faa3b151559c50bfb155ee68c16090c59c68efa7385e2935a5c1294bb5dbc4466d4dfeafca608df8fd95444902650318ea6fd757c358dd918e888b8b4650a8b7a54643f7d0e9acce7d76cc57eb1927d726de178511706e70aa2cb02bf4fd84f7aa31f1c6fb29678977528a2f8619febfc118299f47db70baedc1386b0bb6b1dcf0ff218fc49cd4c3b09b69802edec4c6f7fd85d8ae52ba8ff1e83d56163c0340c3a9be26c462752539b5592e01676cc1b4a0caa8118f56379aa0774ddcee0b1f5a6ad5505f77cf3b46e6374aed38e6da8cbe6172b575471cf65b3ab4146aea99fe09263cfd828de16dc64c89a2e73bb2e882aaaa0af3107047a18dab137911121db4252a89a3307c432eb7b9be0a1a32ccd3b3b243d853d76c60495ad9a864d9574edec6c4c0750481076ddd274f30e1b75488449c2ffbcd4394f392dc88a25350a0af1b93c0702a8372a5c3cba9aad197487f14d8078cd626ba3b78220759b7b98dedc3d02c84e303275c78cb5b061e35ec986dcd3acd1912182779ccbb4d49a87892227939d7816133ffb708f5089992953889c63e3c0ce6ada31367a8637d056596eb8fdf79ebd0bf91ce185cff015164867b01bc3bec1d0d175b3cafa5257a79b66820f0a400e94d332a988755c4467d8b8b858c80a45caec66ecb9fa09748489e3555e320c7daeded4e60dcde51183fd5fbec2c90c13996ca5c24e234fe4f8250700847e970d3063335f732a9c3e85e40dcf6932d4714d20835132e3ea476054eee8e8c664c8e1630835905f679a98391790f46d68238f1469ded78402135b255879eddf4ff8b679d026f556a25ab0d24365f39d7cf90db4cd513451073895b47ebbaaa3a1827452b583ca985713be1e7507d621fd5e74a203bd4be0f682e640cc1aaee2d60e2462c2944ad2ca4fc67df7b95075118637cf7ff026c05680276cbb8f30a7cf218fffb26440267e63fe2dffc4082861e6a916c2b590ad7a69f12cb844646f197c36cb651dc3c2040e0a99bd58ecc23589f956644ce7362fc68ff28aa6ee12970c8e9d3eb3c2e08b72967badb527da41b8cd10b2071ab4767363d703ed5c38129224e7a3d05a6b7a97327789f67d360eb590cb1be53d8681a681b7a08221a991463e81768aed6b293a9a5a874305d8397714cd36c5d4f85200beb8fd3a1855f91c8c099b6f5423b8696b20bf282ef085c965d90491493e646084849dfd994363e91d4a2cb8f4db7f957060e778f0eb88d4230494a92968f9bc3ba4f06ffd43ab8b065f268f897908acb48eb7948c7cb13c6801d8d519ca4113024bf8fd2875ea7caab396729906244dabc497e93567596c6455b3f26642aaea2c798e679d9a31ddb1e3f41aa526a48a6c8a07a45578a0309698888ea4b980c85d81878d9c7f2f8de7ffb012748b023e3d1832a8c807a6d3d2f114ad3f026dd8eb581965fb6c1e9ba28edd19154390c671077fb3e566f407ff558fd2991711f72357ad6b959957c07ef99f6a13a6aeb698f697fba6fa13c7eec37d84f39b65bfefa20cb89ca68fc50f0b3f11cccd546308bef25df8ace3ad0aaf7c5e9f4d4896dcb4d000bed31c0c8ecddafcf94d7dd7936413e2129fe44447d5204b27d5bfb8bc4881ced56f7cd926a303a8d3d3e27750c5d8c6f6ac71234445b7785dab6e391e324327a7282d799ac6c98808386fcc731d2f57a0ca1a23376fa2526bee206864d8374baa230df2cd3997e2445233ed9706e7d4b8371cd19bf17d9351a675e495d020e33807ec0275ca294ba5f52c03c350e5d7a8d363c5c4ad4a46e7ccdcf4a078423df3b36c3b4a816131ac6429b054ce183cf61249d183aa78c1bcb232ff04e6c2a45c0cce270efb7f359693d26eabc9aa4f1779d98069626177a8440990f54d59c5c2b33c88277c19c3030e2c208541d676bbb9b4194bd26821c5790cab40fec8c89faab3f207c65fb9fec8fcba3bb1604a6bd1ac082b47afe6fa3da34ccb3522940cc54b9f1249a6e0b24ac04d82cf0895a9e4ab228ed6965adbca807eecaeca3dad08aa23f6e9a2db1465b819c9a31316eae9dd795f1040f341bd0f4a0dd40047005351420941c74585423d9efa6bf55bb51f94b17f8dc049d3a7fa0c17074a8d51055e9cacc30ed8dfc0572ca5032b19720b96830f829370cafc8ad0866367332324d655ac83d4867c76b5f557e4123c0f6bba19074373af81ffa78928cc38cc48fc08f6f1e7323729141880a929608db659b4fdef8cd08e933daa1d29375233c23e4a3b0e3b2e3bee76a47604f65198be63f8a059e55599739cc21a9036ca40249d19700eb2ec2a51b375687c3c2119440d59a110f99e001d36aa0164016501cb01915d80561d26635d8162723acf38be634f4a4890e7f3742f03ac1e1226f9fab69fbe08924f351a3a3a4d818d3d0af726078bb3db37bbe2e8d246f736bab031576e66cb91539acae5c5a8d774854a7306f4f9a957d092c68e19f108d5fac79c620f37a050c5751821bb0069bf15d990ad3106e12e9848925bac85fc3892dbb5af974ee7715bf8dc01eb0cc272a1a308416b846dc01f0d794fe9529eb7ba50fd97f9ea55a29f88e57d1cf7695d6a0bbed8001f73c193f98d352895cb9fe3e3068da5a22b75ce416c2aa8a2904a186c7461d381ab88d45d6d9e6bd3b9f5d96c09b369fafc2b60840bc90b74ba4b64243f1fea1a2d7b57342b486c9d2f807372e32ad80ba7861113bdc5788cbac862f37fd242cbd716d8839f1f10ec1b3e64b9c8ae527099a59cea1b5f6b69bbadeb312315f5daca7d9c2b8810872b3023edc2922baf76fec7de1fb154ec9cdaf50ae49fa8eb52c468d63f6267457467d68ed87057adac82195ee47268d2907631635352837030c8f992f94fcdd6941cb9726a016a11d003b93362aa50c1a14f05863312849f564f32eee397794b283a044962a408593521ad67129343ce98f1cc4de97bf2aac9572172cdad2343ddaeef4422c5c68b42e4e8f707e33a90af8e9a561c1a62fb192d8d419617c10c9430a31d4de135bed65a2ba39496e1e9d603ab10403b44bb52defc836254af8efff9638fc64a0cc14033f6b6e489e10972bd3adabbb56d247e427a6e7aef09c0e8602da7002a01f52a3c60b024e930333333333333333323c4f1a2a037b6b5e35bcb5ad67e2993245de5fcd02d0117b54b32a594524a023d3a58940db824272ec502e5e3ff018c02830288029054706ec154de922d7f082a4e6d404e610add655e2c978676c9c5f0520029855199baa7ecfe420a9d2685c974d272a497564aac6c142697f2da4946a5d84a4714063361b37b5aba0548288c295b532e5f3675990285c9d7946ed72e450aadff84e1df3ce5a07e57c427413c6194a2764aa67208904e185d9c76d09519841326b56b1e32bbfe5f49187d29068d1a344e420c403661b61c17e73f5c770abf04209a30bf5ce9a175fe0d214a904c98443d8fe95141104c402e6116da2a457485d7ba5718018825ae12e6e0a62d7de7561af38150c2e8396b2d3d45a957b51b02c824cce1f36cdba21617524b12a6cfdbada26ffb357224cce2b2388f1d36f5fd8584d1edde92761d4464799047b4f3a1b1ab974e3eceb2f9ca16e5e53a104798a34e4268adb38cb633b911a6f9ac9dc37f96ada176401861927a42ca76e679907311a7318028e238117988289c2087405eab3d9d2c6daf6d08cdf55d1623f2d7745d08a3ae957963f3a53a3513400861b2d8b2eef56f7d8ad50e641009118451eb96192a48200c3eff499a0ae7953fb4050410e62b80fc61b7ed6e334b23a2c3cb556446ea8a1f8c1d9edef93f0bfd3b2fa40fe6cf5aa7caf716539bff3454076000e18349ffb6ea8f7f43f6b0aad3f69c5edf881ca207b38a7a5c55f6f253fe60f441f2607d36ed276fab16081e207730a9bf5b1d4cb4d2d4931d4cf2a4cf4921fa2ce5bd0e261d5d7889fcde0fda87d0c1e0facba2bcdf97c2cb39988392152a5e9ad5517f7230d899ccbc9b8b08cb751c0c0ed8d0808c0950021207830ea25e053d721ad2858349e437d543c9216f309e480f4289d7ef8a1dc40da6adacb23269c975aab60b481b7aef90adfd2e33cb1e436abf216c30ea112d7e752b7901598359d4b3ee6ebd2a7ffa9c20d86f6e06f30ba9ee3ae7b40cc6d0bd1d444d0693570efb34d78fa21c83f13fabb9f8a25a082fc560f4b8235fe5f5cb95f35d1206a38ea5f38708dfc060d6797352eba8b2fb8251f6d57278f57274d6ea20f1422bbf85fa8bd8ae58be20e9822f4be52c4208a3cf050917d411adb0f96137dea6f216b4cf8d8b2f3bae5ddf69e9440be6e0614cbf9b16e2f3cf8259eb2ce4b76b2f9115c7822987e84f41d3e40aa6f9e4c245afabf820b18239ba141e42cbcb0a259454c1b45ac547b9ac963da438a182599c9d0c2144a578a56d4ba660d032a22df4e70aa9762998746a4bae2676144caadba192fa38f72a953948a0605c4b525eb9f4246e4d37489e60f48b1594324da5f7b46c078913f49a60962ffde59fd9d849db98601a65518a7bb78f77694b508ea20453129e5fa9383adb59c9140c49124cba75dcd38e9764a5f71224184607512d5b9da24b941cc1f0625a52e55d7917f428488c60b4ede07a9470d7513fa3868d55d0e33e9014c1a8b2ec5f9bf9a73bad4b8860d6252e69f5e23c8ed4f3b6900cc1a4a274ee79cdf9ac749608c1aca6d3e7a3cb7636812408a6f0a9baa488fc05b91d03c1a0f6b5da9d7cb194b32ef98171b4f3e7c68554d2e51d890f8a0a921eac20e1c10e76cbfa2ccbcb79a70538c08014243af83eb872607ecdba2f970f225bfe855168bdd369e5aba095947861cc546b52c8a9f179310e8ce254e88e7a7649867b03b54ae31dee6445f4ebc2ac2a5adc965a5ea8f5121b78eb7afaad21aaa976c1cbf6fe36b578fa6a27a981c157762c7825f9dfe617090d8ec366e0890c8cf6f1adcf554b85ae9318c880b4c27841baecac2eb5fb4a082b8c72b5bf9eb624a7938a0720abd045772a11a5e3105598cc73ea69199eab3f05465f1941fd45ddfa7995764eb20a634a5152c6b8ce65e97110125598eb7c2dcb51d3d2c39fa4820d157ca7306cafd78ba6cfcf564c61924288bbdce9b974474b61cc4bffe37ab409298ce695d5aa9b2e1945771654fed0dba2e434d0b9989112519caa77dbb9af793a62e94b42619a717b9fad5562544f40919f48f384b9dda5d02afc48ad5ddc892b41c209a3fa4e8fd91f6581a2b117d8c286ca40a20df51163139768c2ec8be3f7bee19f151024994830b158eedc311d5d15d35cf5b4b1c272d65a509920b904a3a25b6bf3de7a620993ceab85bee853258c323ca6cc7a49a1bda4845149ed4b6fa3d73ba7c9248e43126b91c0830472d823124718579bd2d1a6dd2e741a614a5ee9a2e9e609238ee366248b5845184fbf958c7f4855aa4c12711c8788e320417208d368f52a9f6ea8075b134398f5531213d72acc879f14428fd5b41df5ec7c79e55fb418218c362a173f9694263c281984f163c78f7b9d2ff26d22089358297af18492a6ed9504c228ebbb73bae4416b91258030475929c77e977a2655fe6012e9a6ba279322f183494c7f3d465ffa60d0e2d38992fae7853c6ca88f18d845c207a3f65277ddf94ff6601e19dd10e12bd764b635123d985fdc94c789162f73ce834105a94f2e6c98e0c1fc364aae8e4aea0e652d662a891dcca335ffff472c8b6b257530cacb4abbbd10aba589091dccaf42a4102b2f553f3507a3cee1a22b47379183597b0bf57051db6b9a30fa3a90c4c1ac3385ba38abdf3dbe667030493fb1ffef5a1bc91b4cd15ee818bae3cba83e71832997287961afe251a7491b0cafd76207d539e931964ed8604ead3dc90c95de9469adc1a8e5223bf5acd4604c1bdda9f29affa73e0d26ddaa65a59d4ee253090d2629d4ab2ccac3b31aa13318d496d4020f48d3e24e0b44c3053860012d90f101638b1834b4308e668e6b40faf0b861630058b4006971802b3e3c6e70400058a82dce8d2d681c19060080870d95c5072a80000b78c4e0e21c000b1b5ce1e18138040080f3719e6300589c8ff3356c7014e08a0028208b1a5c74a0209d0f8f8e0e045c8145020a90313e64c0f0381d1d5944cec0c50c3318557c50fa63daa7730e8c2e7837f066281b1d2a88f11deff74123c6062265c8181f5f63061932c6870a62fc8d8e8e2c22632840440c2de02285e14379cc50330810018359ef7958e5f1adf653be60b2152a6997dd5e30e8f8b1e54f65cd50339a235d308b96d93a2fbb3da55ccc5033d283468c0f19316ea00e1b1be142761820b2858cf1610386878c8e8e2c225a30281def44a8dc089942912c18df5bac07f35bb552278205d378565ef1f175e8588a5cc1f0a943cbc9b29342aa235630e878c994ec7c8afb6f4676a40a9d85dd4a3a0addf0380944a87012b9d729d68e3705b314ad16db92c8b13b75281b373c68a8ad40440aa6fd13319d5eaf4793c2e86b0844a260b0f193ff7b4b222e8b6e78e8310522503009d322bd559eafb8cb179127ac3acb9e12d2575fdada092e8834018f09e833224be853424792701c48b82398562b7193faf183580411236859586c9d3d2b150a8e0738383c6a448ae09da6679d877d85086625eb827b4739b1425e448660ee6026afd7d4f27c450886dd33d57da65b7b2708c690f1e071ba2bd5ee08108adfb69f7239f79511f9813987d59e63696b4cce880f4c2eeade738a325ad918e981f156544b1d42c483342bdd6ea73ce96f97c80ecc6db299ba33c497e7233a30cc27393a788f8951b5cb209203c4f2aba7d251f4f3c5312e2cc9cf522b44bc88e0c0ee233730a55f5d42cc89bb307e7729f9d662342d6c03e35f542345648a547baa81598fd60761caa4527d6960ca6af9c247dfbc7042333025cd4b59961d9181d9a4d25aa59195c56a0b92201283dda27ab69dcbc78b76db0ab37411362f62515547a9858415264f8389a8427c8c214308218488884833e9a2091004414090024912442594d6031260e0308ac3380a842008a240cc18828821861062082122322236446e5be87ebb12c1860e73d0ee7097b462589de2e12154fceb4dda40adaa6b52e07e765b52a5533975756d7572253481a75722da6d2b0f525257d17c67cfdc99f2c873d0f47c6addc2009bf25f29e6b71ee120416714b8f67e7940f4493785c352bb0c26c57bb4d4eea1a159646a24f80d9bfffdfc429bdcd36cd0309e8d44aaf2ed7df885050e8d41cd82c66337518857b1345491e2ab0c66865a4c525309b3a5e0d82853878ce04942724dd6979e2d9f9cef1e74348e108d9b0a0bb54689c7f88033111393727c021e0d1016fe7282b2d7681551d03038073e40e6e422c206489559a91771eba13804e1765b3d20cb90d61d9fb60ca1caff0bb827eb9ad19fd55d5795492f6b7c2ae894a4a54d86073ea5169d2fcc79f5ae0ba98d5d31249e9bd523b17bc1b5b684cc783dbe7b3ea6b3348c1ab3dfea51efef5767a405179226fdadc6b4fc6a45d10e011e595f942279b4357161d358f3d609dabf237c50b78e3d65e5b4d1aba2c94cd494827f0ddafeec341218733d92288300ec132f7c86a3b8b7222f804e9dbaca90903379fddec6de2bcb08ea0c9c9416b427b7e5428b8856a051b7caf847c2034a06400d082055c94ec2f7ec37711684dca183ba30a4725f3b535b93f0acf50886c077a5d0d05f4e8bffd875fcb468fc77632d94cba2e665312bda5cfd0097fa517846146558a1987d76f65aa6f41c30d66a9ea0d16c643ce5ac71ab55620d49c3c6898a38e0ac7ae98e56ffffa8ae195b6ebdec54a98c13878c7fed9d2c159283d62943a40adc57f0872e879c2205ef14b04d59622aac053dda009cf33763275f18c0c0236810bac682514b3c0d29d1f21a77fe516a9ee9494949166df2126a6f4969af85595129a8523b2a478196b129fcd8341257bb7a1338987a2080f08132e702477c35e8fca80b15adbbe8762cbfdaa8999fb497339142142c8aa5d67f1fce532304c9f03c398bf6a2541119b8a4eaa4a5b1e5b609054b843f03a8cc0b98b8217cb33a09f9389483f5fe186a12b41317c262bb958cdfabecc94b8a762106746d012cc29601c1e28decdaa46a95461f95225a1b3d84cb13014dc26f310c62f2591962a6246f316e29b6562c33ffa9c661f64913573b0913356523597034b014bc13abcc5688daec37e02c6d25f360d959f4cb2531628c80007860738d98da601de05294ee04d959ba55f1505d208b4144567bfe90694c3c0e73104df4ce832a90b7150e115ff027a277984ed83ff12b3d13f8eb84a340c9d2cae4539f2555863527b59549b7ec0eb774e7e135dbb7dcf7d3df7d70eb3e604190bb908731f4082a1a20b95cacde70eabd4073aa3a09a2111e61c39684bf4737c4d4cc530e1f7e3c0b82e81cf866cf42b0f3f97ecc2d5f3d58f1313433da2163686db3d42f1b0f561aeb559cb1c4ce3abc1e669bf663d4f35e59e8958355ae701646de79933acb0451384f6523e721441869e679ca154a2102d8a97df44d8e272f3bf9d23a7c78bbbe25663df166882dbe73c2b606fd540460a048e32c381c786be82265c5820f488059e9cae97771ceae28510e6a8cd8668610dda90abbcda8a3cf61dc5e56718f0d5368799d1b53d43662c4ce79864905029bab0bc0a0bdd71242e5e059f8ce1b05b93257e36077f4cdabb17a584a33c7639307a27911fb242ab0202eb2048a46ddc00a955d194deb58d3f8214e5ab26172489526c0ae3c5e802f746812b091152bd81c97fc3692f77940c456c5b05b1327d36d90c15b6aa41cc212b5e26c8f949bc593b8b33742d55402c7b599beb1ca9c707ee6a0320cc2873a9f10816bc7c12618022c200c24013a2d57846ea5a414fe14e72d7e30936b2d89076ce6ec40912f94fbf56cf38ca39a73b936b7d7e68eff7895089b448205f822273fdd3291647f1edd0cef58c21fe19107c76c1ff248c040bfc6e366d0749938da817a34376571c4f40d8841f62f8d5c1143a8f72c31ce15c744343314388425c628bbec0afad948ef5bb0845f78c020824b6c14d4b703207bbd6d4310fc31f738aa5d3888b5b40b6a47115df970b18ad0bf51524746be81537987b695cc34e57f91c8f78c9be4f648810dd507d9eb9846377318e9f9aa861d3e77d3bd1c247a100f81ea821e0d15889647d84d32b6c3449bc9b77861cee1ebfd8cfdde8d1205cdeb9b3e312db5bda065b9dc39b6f722985bd929aec377a7946d27104758f2b1b79f19fd744a09a471b3016e7e6402de21148d0cef85d2e5252aa14c1d4cbe9d565ef21377f6d7c06c513244fd278f4c50667ade03c488c06184d69dc28ace879e7ce1e9f15861865b057539af73449ced6a63427bdf4d49972eb4009f79d85eaf54427fc1cc420492bf01cb59c2f351190308953831074a7e87808afcc70928b9594b136d154eef059d30a439bc2a2b0d290d478db2181e649a7baf693e2879a4ee0f51d5bb3fae313c38c8a6353427e7ac0d5c5d0618cd409b9703c24cdf8b026c47f3115f73de4a94866e79f6619c97923fd5cfc133844b7ffd82490d510e3fab0809eb8e52e06fc5c1222e842d22a22043f8f0fce5b2841c81d36109483288f38b08aea416dd97e1b8ee93faecdd02f5291946ab06e7735f2204cacbce9f169dc376bebcb6a7d79e0f25081a10bda004059cae0e7b3fe17abd5d6769e4a873da986a651a1a551cda5e0ac1f8add85f5ee8b7a754bc438504e76e9de78d901abe1ba6bd2e278b840e4d0580a1673302dd25d0a217df2034d6fa29bec7930d0cf77c32213849cb629b857182fedd4e2990a9125c9f2de419e6a0e66640f400a3221f72a3930a979e356d344b8c49a0811212e6988d207d8f657ee6eca60b3f2b655465ee3664a8f26cf8beaaf1876469d2167a9b24811d50b21eb1aa881caa2ce155db44325cff57e601ae2febebfcde3bec6387197ef62b99b5a6e81c61bd009311fef74c66e1e7b0c3176db43f05dce20014f70d1828f2f1cbe40c7623c33d83df822f21bb28207d75f5287d057f4f2eb8a878d93640651408a987b2ae947f42f1a180df094fc0f385350a82b725b77633d6a22767b45719c225b4281be31960a16f9b242b2dd0cf1c342c261a536cc2f64c535fdb7e41631336f6b223ad50529daa2736f4a76ce2792c5b00d7aab35cae07bf0038e97dc26acdd3d6540ca96fcfcfeb0b2f656630c79421526d0774999684a35dc37ac423dd733882d578e262ea632c4cc68a85efab2d0fdc9ab51ae071e96bde1c340f77fb22b2564ca068dbc0793edaa454e20b06899a8d0b4ad0fa511d8205f06e8a7119e58f5cd3ddc4ba149d0838fee9dc27bcde4960cb966f23513695a7a43396c65b28d7fc646aa35bdb43c0eed4e67a747c82365a33d171eaa531ce3e3569f655e2791aac4047a85955180953bfe4030b9349c8852d9766308563a41abf948130a578923219c4f626f73ae8af946159d9bf8b9266e0ba3c4f8fcff3b6e9a176051b37bd2ab45ae6451f8d950d088b6f3e3e46a8f49acaa8a1a606b9a028314217045d9bc49aeecea50a0e32c3cbadf37ce122714d0ceb58480fbe93306566d7b9c653d65b0846390a65", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x105a595f76d16ed474bf669465f7760d8ac3a6ac23bf8e47ab0bf91ee815cba83f284a26b85f39ee4edfd315d9d679638655fa1b271f033dfa0be167dc93335844d40a5a134e831c2311b939b811bb7aee0ca571f92d52784d35c43c9fb2fde36c6233ef754398ae4ee816f8209de3791fe26eaff064c6c002bc52936bd117c425", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x105a595f76d16ed474bf669465f7760d8ac3a6ac23bf8e47ab0bf91ee815cba83f284a26b85f39ee4edfd315d9d679638655fa1b271f033dfa0be167dc93335844d40a5a134e831c2311b939b811bb7aee0ca571f92d52784d35c43c9fb2fde36c6233ef754398ae4ee816f8209de3791fe26eaff064c6c002bc52936bd117c425", + "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x79e2fe5d327165001f8232643023ed8b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x7b3237373ffdfeb1cab4222e3b520d6b4e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00000000000000000000000000000000", + "0xcd5c1f6df63bc97f4a8ce37f14a50ca74e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3048fbf15fd7501d7fa66e865f8710e3373bd7042e4ee89e363dcea7ca2f46f118d5b5962967f3b09": "0xd40a5a134e831c2311b939b811bb7aee0ca571f92d52784d35c43c9fb2fde36c", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb399b5c77abc8db9a172a5376b58ed027e2aeb7093e96e6a3c67a5562ba8dc883562cb88ceefcc3c16": "0x6233ef754398ae4ee816f8209de3791fe26eaff064c6c002bc52936bd117c425", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d0eaa62d5a6fc84324f063334d367a9a9de80249cc2d39127236124cd65601840387a5048afefa27": "0x5a595f76d16ed474bf669465f7760d8ac3a6ac23bf8e47ab0bf91ee815cba83f", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3edade635cfad607bde0f015d686f4ef823353d5217a87686d3b0fb5e8a46d6652c3f217d85f2ff1a": "0x284a26b85f39ee4edfd315d9d679638655fa1b271f033dfa0be167dc93335844", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504779d1fc6560c09761757261805a595f76d16ed474bf669465f7760d8ac3a6ac23bf8e47ab0bf91ee815cba83f": "0x24f063334d367a9a9de80249cc2d39127236124cd65601840387a5048afefa27", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507e9356e04043d4ba6175726180284a26b85f39ee4edfd315d9d679638655fa1b271f033dfa0be167dc93335844": "0xde0f015d686f4ef823353d5217a87686d3b0fb5e8a46d6652c3f217d85f2ff1a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195096bf19dff4e0e85661757261806233ef754398ae4ee816f8209de3791fe26eaff064c6c002bc52936bd117c425": "0x72a5376b58ed027e2aeb7093e96e6a3c67a5562ba8dc883562cb88ceefcc3c16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a22b158098f4f2576175726180d40a5a134e831c2311b939b811bb7aee0ca571f92d52784d35c43c9fb2fde36c": "0xfa66e865f8710e3373bd7042e4ee89e363dcea7ca2f46f118d5b5962967f3b09", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x1024f063334d367a9a9de80249cc2d39127236124cd65601840387a5048afefa27de0f015d686f4ef823353d5217a87686d3b0fb5e8a46d6652c3f217d85f2ff1afa66e865f8710e3373bd7042e4ee89e363dcea7ca2f46f118d5b5962967f3b0972a5376b58ed027e2aeb7093e96e6a3c67a5562ba8dc883562cb88ceefcc3c16", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x1024f063334d367a9a9de80249cc2d39127236124cd65601840387a5048afefa275a595f76d16ed474bf669465f7760d8ac3a6ac23bf8e47ab0bf91ee815cba83fde0f015d686f4ef823353d5217a87686d3b0fb5e8a46d6652c3f217d85f2ff1a284a26b85f39ee4edfd315d9d679638655fa1b271f033dfa0be167dc93335844fa66e865f8710e3373bd7042e4ee89e363dcea7ca2f46f118d5b5962967f3b09d40a5a134e831c2311b939b811bb7aee0ca571f92d52784d35c43c9fb2fde36c72a5376b58ed027e2aeb7093e96e6a3c67a5562ba8dc883562cb88ceefcc3c166233ef754398ae4ee816f8209de3791fe26eaff064c6c002bc52936bd117c425", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d86323ae84c43568be0d1394d5d0d522c4": "0x02000000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/parachains/chain-specs/collectives-polkadot.json b/parachains/chain-specs/collectives-polkadot.json index 9d3b1484c09..9c8dd6c8b9d 100644 --- a/parachains/chain-specs/collectives-polkadot.json +++ b/parachains/chain-specs/collectives-polkadot.json @@ -27,76 +27,62 @@ "para_id": 1001, "codeSubstitutes": {}, "genesis": { - "runtime": { - "system": { - "code": "0x52bc537646db8e0528b52ffd005844d8023a5443ab5620d0ba4a075a9f151f05dd81c3978c0677fad5133d27a7814bf49e9d61daa9fabb0e7c6c761c13f4eed9b4fbbffb2c93b4b961bacff04e6f9db0e7fce82bd44b87e0b37d1765514949232458fb7b6f42e4de32c99452cd0bbb09970a5d74aad0a9a273858e153a5f74b8e880a143039d2d749cd06942e7091d2674b2e85c898511f3a233a593450c8b8e94ce173134b1333951724c104b236704392488bd11bb41ec2ae646ac8d181b3133b135626ac4ac626562646268c4c6c4cec889cad12127871c1c729ce4dc90d32487490e54ce921c253949724490d3430e929c233936e4d490c343ce0e3921c8f921162606264646ac2a36464c8c980d62596235884dc5bac460107b416c4a2c04311c70d0e09cc10983c305ce163853e02481b3040e0c705c8023050e11b0387092e0d48063038e12581b30366066606be890010b032303060646051b03530386066c0b2c0b18169817b02bb02f6034809900f6034c08d80960516050604f6040c04a00d30176032c0758131c305e66bcaa5e6fbccebcc8e0a0f12ae355e585c6cbcaab8ad7d52bcc2b06af285e53bca07849f1bac1cb8957921712171b2e33ae355c6ab8d27055b96ce0c2c295c695c54586ab8b8b8bab8aeb0dd7942b0cd710ae285c317041e192c2f5844b062e290084c0645869260da6151ee312e265c34b87570e374e806440344027e00d2e282c38624aeca860470a48065886978677860d0e2011e010ad273d4ef41c61e325968567c6860bbfc24ae3e68c24e2e60d100a59826d0a1533a5f8526083022f0ccfca13c37b80c1e1a1c12a9827b891ba89c14c62270cd814ec0bac0c8e414d152e12bc6aa8a102bdc0ac280a280d6e9a68219a88cf0ceb0b96172e275c4d7c3f7c3e7c623ea88fc9b7e46bf229f99c7c377c636a588033e635b573a526096fccc7c407859760281809568289e026780a8e17dc0266011fc1427863f0101e158c08d612638265e051b02c312a5e81eb3013a34609cf6116c60303220195f0131f153088591c332170c8dc488133c543c02e6018c82a66542c319c093bc126988d5133a5e608af8c1919ee04070997c00bd39384a7702898168e438d0b6a5ef08a83bbf850e037300a6a5a30bbc22f984dd5185183044f94efe04d6627e009014bcd58c05138053323680fde971692d691960dad12b46a60c50172692581598925a1a3050b0a568d6503ab069a86c6e1dae2e6c9cd911b263750373fdce07063829b206e4a7003e586043740dc8ce0e6861b1d6e94dcf0004a7113821b24373bdcf870e3e4a6879b26e014a01428033006374b6e72b84972137523021b343670d89c6135792df182c14b89d70b5e2e7825f19af242e2d582d7112f235e2c78ade0a58297945711af14bc50f022e235c44b88d7095e516223c08192637096805074045c19ee0c6e0c8706fd8123c3b1417de0acb8366265bcb27066e810db1307c3bf3817700ad804988497c085f020a818d40c3a066b0c1c2158606ed2b890b86a140d7ac6fc610e319f4818482a72896f071c1e3e1eb62536273626641152ca26033a45bda059be223e2c1e1b5f163565d48ca909e32a83ebd223c69706c74a0fb165d9b6e0f4106bc213e355b1117c028e0296060c05385fb014ac2fb120c02e5b148f8c0e16130dd6191d1bcc32f20699837432c9380f128759141717134b4d2dc6055c4279d0d9a2e3050e125e991d11b81a738aa7c60d14730c98e4260a0ec25b631686c3c05fe0556225e0243c32e418b20c9c2a3a586240c076c0618347873e01e8835422f6c43383e585d5a5a7065618302c2415a721c5708d000483f5065bc930180de9a59580506417161a2ec36a301ccc0417315b308fd8aa6021008ff89289c40d952dcc14c35470da904c7804740a4d226605ce1157028b9a67dc3cc140b0148f8b6ce275016d006bd8c8987de1798981b1951123410c0a9360013c14a0420a46094040253a80015e47041064c2082e2fd38d8eeb72f785d512a9880f0e1c0df181f4c2d151c712c812d2d1516b86a9f1233f8e84b4b0c443494908029a7e20292909410000dc862da294e4a30909c81112520b20780d2ba485a5a4a30e3021c540e42869486d5a4282a1033e1ef05e5ba41f4b42968e7c1c250da9483f968438a0692906213f7ed41e990688901f48403a90716c910e2005392a52a403482b2c09492a52044902a1846367481a529990823009b1000ba144b3484d3e802429f990e1082906a41820300120482eb8e06302009067b648901f482ffc78638b342d213121bdb094f4f2064b492df0c8abfd9154642989a9c908d2510794860cf171c4840444292986a2203f842815cda41b0bc3918f261f407c342135e046b6e18124251f494d494b4938928d0df2438812078e909a62f8816404c925cd2c1293100478728d2d8294d494c424e485a6187cbca41abb2424a9c907530c408e9a842815394a1a527d30c5507196919438e0a3692986168e9a7e20312501594a3a3ad2894d275c142b4d9ed47dea56aa56abfc2475b67935af7808738e0029a544400264021020a54400a53953f62d9a73b666d3288d79a240dde76477a734a7ce94a9531aa5514a27754aeb3951604add9d2953673a9d3a6d4ea693a9bb333375ea3ee59ccc3d594e9d67fbec5dbabbbbcca2edb3d54ca9fc80d256cb5b939dd6f8646e4a27339d9252cad475ccb93cddbbf68e9b93762d9fd27d6bb5b8065b2d564dd38e35e7c69a4e67bb579e9432a59469134daf716fb9b740e0d6ec11da9d29059a937bce964eddb935d9b9bbdba7b733738b9d76bbd3397d8630db9967f39ceeeddc92cc9272b76ce6edd9744a2a67cfdea694cea52da6eedc6ab950c7ee0e76ab6b58ade6c056d7757436e7d39936a5216dcd39a9942c4aa9a4947600034cf9416bca16a535d37dce59809d947e925267dab2a7f40fba5948484808047db27bcf5dcf73e79d4e1746009d393d97ce5232b3f4c9debbdc726eb5585d63d3ddf29ed2bd351b9ccc94e63e5b73720ef7d96a7d9e3bbbefb6cbbb2d4f4a5160ca949d4e14a6ef000104f7392953e78fbd1c3c9e730fbb4f9e01b45c870e771deb3ba72f77d4d979bbe93d999777636fa7b435e49aee1fbb33fd5ad6b45a2daed5cd93993de6cec1cc3448b6fb74973d5b3d73f8746ff756cb855ace519fb30329a5d36b9e3e5db6eceee63866f656abd56acd56b7d7d4744d4db773dc9cad5677f79c94ced9ad39bbc535d73d7db67c7e1f6d9a4f8ee338a639d8d963f779c23481190808885d0025903029a5bdec4074fa0c726766a7ee943af36cb5b85b5cabd5ea39674b3ac264e600b83b7b1c737ff001f5e9be5f0f33730ef7c9ec72669e944673ba747d7a7bbb7f9e3bacd50cd422b8b38bd0dd72e6783965a6cc0c007739cd7d99ba7308ad9f6db578d23c97b3e7f439198496b77c4e77a6ceb5fbfa3acf769fdc07d30573a61eb88f334f760ebccfb9e5eec5a84f67f61ccc2e864d29a573ba4fca94dda7b333bbb3cf9deeb3a7773d9bebd9edd3ddbdf329e974caeebeeb3d60f474f91e23484096928e96927cbcf0a3851684880f0489090908939023a1134a404a626a0a6161e0250189a9852326214d3e7e085152f2318321a969290626b1a785a6187a905e386a5a4a621a72f4a348120c3310603adf4e901f3e38a0a42424840e7638e080039dd9ac5b1292d4f4c34791251f4c4d474d4930c020849623f6f0c09690860cf1313341a8c78890199a38103aa184998e1248382a0129880f250e1cb9b094f442111f2f3c920c484a47467cc0d001cf92e08210a5231796925c704188928e009494928204ed140141674b68122284265b127c2031e52005396a3282b424424e13920b20c49684224d45928c208580b32518496a01896948108cc90792d28f2324177c3009692a72044429e9851f474d4a31f8680109c84fd7c4e4a3a90808259080d4e483096909c905a6221eb8b6042048458a20310d8141c88f2326241984fc40623af25104c80fa4231282089d50c2901f484586b6177e34f9e0c0d10b459296925aa0c9b084246f9684a32521494598906438ea400b494c48321c0d8084134e280108d29190a6211d60fa71d4640429870c4b48f2b5dd0126213020c1b0c9b0842443f8a668777ae2a493f758cee969ce27a7eeb1ad1eebb4393d6d4e4e4f4f9cd3d313e74fd4c9699ff8699d9e640f272727d9e349f670e21e4fecc43dd6c9e9c9493a3939790f2776ea1e4eece4e4247bac9353f7787262a727d9639f688f7d62f5d8a727ae87133f710f27767aea1ebbb3c713778f7dda7a3cf1f6d8eef1c44f4f4fb2c73e3d3d3d798f7de21e4ffcc43d8c641bbcbb0c43111f1b2fd4f9ae24db29d24da4352d0b907fa44dda3a95b96c6349465a8db22a7f5cabeaff821ce2de457e52e58f4a6c65c603b95655c7ae3d6171748aaafc1c073832d4c856d5ddeb2e90ff7e10e8a2953fe35655175b89adaa7f87d4453002b28813bb4afec827ea0d0ac83f76adca5fab3a768d7a205b51b69256d22a09955bda66a87f7ff6cbe9fd5bfd657f77ffc7a35f8afe24999f38e8ef3d44bdeafe05e84edd9ff3e9cf4dfff929c03d9fcfef217b15ac3ecaaabbcf7054f22aaf87a3e7fcfb1971f3e7bf1f0f173d0ac264dc9e7bb3fd8b6e7dc6202a6912942b87e450a714c4c50b7f7fe677e1eecf48abf3e79c33a8ce2160f5194483aa8beed44fb465189c150d51d2aafa7315d24a5a59c9325feda3aad5a495b4e2acb66e3d4ab91f6975306028933ff2bb8ef3f65381bf7f863d7bcec96de43c82959bc50d89ece6228c1303e41f4139bd06509fdee4d5bd7d4ab73e1d535056e7bf7ea4b97e0cbaf951c756b9dfbee342ba541fed258eb420973806e9b811471dad07c591765fc312c7af23f8899e4cd6892d71f78752fabbac1f6595ee0feb29abc7d370fca6adce6d6ed5a3eae678da9cfc8993b30b314ca8d407aafc09127fe24fbef80fb46ea24be1c0b81497e24ffc09957a98ec9bbcceefad1bac3d5bdc4222ebd3f36f8ab26e4ad910eb475ae76c7230acd009acd56a35141d31ff6990f95c8f1be07cdaedf4a001e76fdd5e7e46dbf62960b9f2c7638a9ecf91863af7e3e175fa66e4dde4db6fa20c5ea7875ed7473af1d3d613889d7af9fd4800ef47134498c17c3a48fe6c21d1d2e607cdcfeb66d00c9a54d42955e77e9d3dbe4e75ec67cc6ebea4ac1fc1bab57e7708943f4db3cee7c480db6fdfda9eb53ddd7a547fc9c2cfba719b0c334888ed23ec49cfb7e72ddce68f3729cceac664cc6f05ea2db45374eb33f2144e047fdc61f36309353f86f0fdf8ddef0eadfca13f82756e3fca3a5fdc2130dc1ddecfa72bc4da1dad9fcf8b02037884a5a2725c1890e39ea84139f48020393484018c023be111e483a00d5823ca3e719475e208d631a8527113c7aee35ea9dbb742aeacd097367f881ca2fb335f3e3b61147647a0ffb26935d7aacadfddb10b3476a53f761dd94995ff0039c451f2473ea53b257f46d928abe34e55f99d1772e5a8ee653210dc9f91d6ee475a478eaa72a7a83306ef8961278ee206c23a8fe6c7e35bbcb4393f1e5eb7ef38deae592a8ebc11c975ba542c15536a9856c154557e4741708455f9a3570aaa01fa8fb47ae0828151efe9c956c5b15514b4a95334d234ba82bdf23aee15f5c0adda2aa6caa15b2190d6ed6da654f9ddc8d57f77c77c17474f03f47717e94e8f1b20a745dd7ebca9f23be9adfc8cbcc5d1c89491cd80fe44b243256eaaf67bd8b33a458e6a81e413359f01f233711d39aa2aa7cf6d1395b8a9eab4eee7fe2e2e7153d5668a64d2adcf08eedcfda638729defbb636b9275fed230c0f9fe44eddf0a5d37d11768fbed89db7c7371a4c18924f7f2e5d3c9cd2936c9ba719b0c126c32baf51957aa4ab069b06e3e8753369be148ab2c3b1c956095fbd9356d3e8723ac4e0ea708864424f744bd1c58e510287f3af7f663c1f9336a717caa9c387295356df4ea7c7077f8cff9de432f7fe44f715482d5f9e00c9b0d70fe08aa006b9afc29ca5e0e05c91ff9f2b7853871a4b59b1e17caf80b6a9a7c07805ed3e4f38f4155fe7eb469d2c30272e721d76e5bee1a177d81e613f538ebfcc016eed2e6fb67b4fdce4d1c69a8febc557e3cbcf61335d8425b95cf855b378e1395605ef79b22cf0afdf3a7b804ab2ef6af54dd1c4f93e70af89558b592aadafdb2ab9ddd4e8f1b20cf0afcf2e5f3fbcf979fd15c679e41b72e2a70a59254d559572a49545dd7137301e69c73fe7c6a66312477bb02b8df029eaa3f51b3f8c49c000a74db42ec1ecae7b05f8673861ebaf4e4a702577fef50b6d78eba6eb94a29ee7736449cea5e606786cedbb419cadf2f05aefd549b3b97fb19c9276a0f99b6108f8b2970f57791368d7f86417aae44224e957f94df2c6ed3b891ac10e8d5ab9dcd3625cb97ef7353a15f3e516f0bf1a4d02f5f6ecfef2d34ce0f22df7fdb9eb6501b6d5e256a96ea7605b0b3f14f82a42e8bb469fefe9d4d1111a7eaefcf4644b8bac8816e5b3eedf7df16f2fe8c5c3e7f0ad8caf5895903ddb6504b8faaee6f88640a0995fe9156295fca97522281aa524a29e5af8f8401cc912b47a2be85fafb692d347aed7e9f16e2da3670a9fd5e0fc9a2aea308b5eb38abfddb1f34a45b571870a56c00a2ae54ed4a0075a56a98aa1f51fff6fbde42dcd7fd8e0bb76e21d76e8540aedc4b8f3fa38d014fdc77fcf1d89e13c7edb7effae301d6edf7f3a6f9ef67349fa8b7df4f76fb51717caaf4b970a4dc13492e1cbd72bf9f11fd8e0bc70454eebbfd58e268a4b29e0bc795aadc6fe1b84d3332e4851e17a8dc8fdbb4f10195fb715380dcc2adac90884c9326cd55dd9e0b470254ff8e3d2ef46781ab1c0d8970751347ae9c4884d3a44993a68e4f756e4d92f9475865ca324db73941b4ba758901ae540d5275a475a56aa052f7bd1ee2a27d590bad54edaa6e1d67757f7d96a85b113ae4ca21576f21feddea2dd4bfdf71c71e7fd7def20d0f28244ddb2adfbf5f7e462deedef08072d2b4adfc1e6ed33ae4da1fff7e52f4fd8c68d37a6b875cf773c07214ddd6feede71ff7bbeddf97fd41568afbd40c818e9f43570d40a91a551dbdf6537e4a570e6dff8c60e51fc1eacc4064b79452ca5ac85f7e27e74b9f53f4906b8b63bf1c023b9bf519bff66f0bb5107fd8ad10b8ef4debe7cf68c56dda488db669fd447d02c8df2f6b211972055ba81fd6422ec3adfbf913355173c8b302adfcb4b2c8b3827c7ef92c367175f1a53872e527eaf56931c8d7cdf124999fe8b6aecf08d6fe6e5b68e497efbfd3e306c83f7ab5b769fe2580fc2cf00791e236cdc591d67d0eddaacae0b2618fc3ae525586edeba4b7bb837f944f5b68e42a7fbf932109a0fcfdfd54d8a68d5ef7a5489bb64fd49df43894f59361f3a8aa0c5ecdee60e25a257280cadfdf1f0b5eab557efe7880b5caefb5d0d6fefd7870adf213f5863e2d0601ebe67892dc61baed6e7f40fefd65751b00907f7f59dd0281fcfbcbeaf8b785c67d16b769fbfb4fcc38dd4ad5a2d4e5bad501f2ef2fab070c76228e255a3d597ac6e899eaa1d2f3440f133d2d98d9d053ebb18107cceccbec881918b3256649cca6ccc8cc5a3073c14c899d33b325b32333243334664cccc4cc68301b6246c4ccc90c87591bb31c78d0983199dd306b3283e23963a66456038f193c61666978c8e0896316c5836696c5ccca0c8e19169e333c543c69f058cdaaccaa6666cc42c09366569bedc0a3068f183c70f094e1196307cd2cc94e1c3c5f786aaf253b6eec70d9a1daf1b2d365478b9da91d2e7656b043829d1f74c0e88ca123860e954e183a5e74a4d009610755fbbbcd63855bb485aeba5df5d0367f55cd0a4a5e45d59e5477a8ca3f7251aa8b3d6e80524a1d3dca959534aaf273e1ca9fd19f6ca14d0553476944ed9f21b83b66b2e7c69c2fb5895237879364af69d26d95ca3ad6dd89287f2a6c5454fe294a55d6d134666f5b88bebf0fad855acf2f420bc9e737a185baf73c5184a6b542ea35ad5faca102f277d7deb69009efd300505f440dc0127d68dccf90e3880ca9db73bf1f0fb0528e2302562a8e4366c805e17efba8082dc4893c7f3f1536714511a40caafc320439c9553df9f0c5136d584146131e94180a62aa07294796b8720515212b422019830c2ae068e204234f3c2089c1161fa25460821a9890021d8e20c1151938944c11809136ae585245072492c8e282128cd0c240b1840b291c68f00609337481a2c5064feca0461041335029e34b1c265802c5ca04232839628583551146f46044003c29cf051e1015a0628225d41023268e24403833bc66d82c56664055a140c992232200a165872b6cf0218a1b006064ea8a2c4cc8e088114f3409c188074cdcd0851753392cf99161026d10d143933367a4e00b6d860754e17215458c183e34016186a71bd0105104972353cabcf1c1185692cce0055610c102280f6248c820e1860e6f90c1e233c39a71a40b1914c4808c1ab420c7134d6c50c20609d83862073188323e0c31954409c26011babc00f70a3154d49bba5798d145955566a1d11bc1ea5c5db63dd43f8a50f769fc19c98f0901cee79fb5d0e853c7292af9541ac70e3cad2fc89401bdae54133167c0565da92654dba48b26394b9da2a0091664409bba524da0d8c42648e000ab6a32c41a4d7ee8d280605da9264b3c28c01c2b2f09f87de9c264ca09d0ab2bc5848aee056057578a491346303162e510287ff899b968f4ea9c524c4e50e77bdf50341fd6435e34ff7747abfa301a2cca5a00baea4a31d1a11507f8428305a8f3a55302a460cc00845dd10203fc9ca802bf23bc1a18ab2b05f5436b0910a7ae14940d95bf5506f8d5955ac246e507e59017314b2d29a37a759755a2266a198221ac7ff8633a805c5da92561d4aeaed41231d587a7133fb1645d8122451b5d08d1c40830a27823ac229644d1a0066a8819a38319f60c1251643943860b17553830f28113b8c00625980a02aa4bcf0c4cc6c491e4cc1b4bca283333f224ca1448a8a2cec042043c46464852658c2ba60c21032d76664840185a5ca191aa0295864e1216f080450d2eba605181cc4806b264d1061333a4be3822270425620c31c6042b980195d80c4e362023831a7001a3a50b9c7e6ac205424cf1e26a8d358c2882d5116436d2adcfee0eaffba37fad56b3a188283604c83f9a50f7570ed1227e2a87b856abd5a08af8693de445fb4b4139546408328668a2862790a815bd6affd7fd7a7db8999be8564a91549ec8a8baef73e3a8532a9be9c6d1cddb7029abd579ee79b2d9f36579dbeabcafc66b6a6473cdaef7ade76db8355675bfabb1b1f1361c656dc3b1a9eafe8dcb5d2ed9ecda52f7a95469291da56b1d655555650b159ec2511c856b57bb45baacda2ae2b85295bba5749f9b6f9b6cdeb8a5749f73e39ce36433e773db388e5256cb5b2dd9dce2288bd56a759df7f9f7c9e6afd579def7d5d4d8800e82b219fc3caef1d8c6c66310f4f8c6f5f2d74b36bf5cdebebc856d38821b8b799b2373994c36cb6e3c0e5d1e87afaffbdd0b06f3381c83ea3ecea702d76d5a87e37118fb54e06e733c274736e7d01aba40dc365d36e3d01a2032ddfa8c5e54edef2498a6b5acaa2da916a87fbf07d0ed975be490ff166d5125550f715cfaa71f4cd5182b33f28a43537b7f47da43455399bc8eb487da5dc45dd30438fa545e9fa6f18efc955be48f147bdc001daa8e0e55d5cf51c9a12dea91b3aadd95bfb3b14a41d61a2640de2287ba48d66d9a17553787f320dee06b67d36fd401073d339e1d1d594e0c07f672dd8036359fd7b55894dba6cbe605dadf8f08a7a945c8276a5e5efe513624c5dd1ffefd5ad9899fbabb8b94521cf7e7fb8ffb1f0bfb41a694522e9be97685dc65d31685fe71bfeee3600176dd15b80659717984fda76616787b1647ea4fdb9d86ebce713f15bd6efff2168ebcfdd2794526af4db28500fd86071418f9fd748ef3b769eef37d36cddddfbf6bf6ea6210b08ae3e873db8f9472949b348c4efe8a23aceebb5600f6ef50612b114e53a97fc7210e16bd0b3482db8fd42b7dff8e869412f5e6321c95605bfc571cc1bae2c8cffda43f72cff173df9c7703b07ff4aa7caf85785f3e0d5788fbb139c4c102f4ca5f83f01335e7fccb62ba9fb435ba305c9a0775fab782d74dfc059a1fae531aadbae8687899793233f39c1b23516273c2861326bb6ddbe673dbb66dfba9c5b662d050b9051332bcba890ed534f9e014f5c0add2b17bf4993fa3ed25d7e23817b7906e5bd762cd9f3deaf6f3896437bdf9ed9bc873ce27164b333ac92f59e8e7ef3864d19b269be8a228fd7ed441c24f589d7aabc3fd282322c019a007ca88e4d005e48ffc4fe689a36c3b9628b505f42f85ae9ca864c5962a7f734783876f9300046063298c0d4a6d6ce49c73e3388ee366dd449a4d191a6d526143874d6e3e43af1d7bfeb1e02f7f0ba737f50a526ceada4f44b6336351c51866666c86a452b831a448994e4559ad8d4e3ae59c739b2de7dc441d330a1d3eeec34da7656ed6a3acaa582dfdea14bdf685616565c567ca584937984ddd44234d934f6b4b3d7097afd86ddb422559ddb6b96d1ced8a37cb642ea5ab9b2b8739bfa04bdbdeab1b0d3f9b6f4628b74d6ece8ddbbac16cefe1b6f1f6cccc2c829341b05bcf3f238ec5a2bfcddf9ea322f71dc782ff0cb9f7cf8893dc26ee96857f46fd735b17c7ad52fd69228c3eeeaee4b340ed537b721c37c57d9d9bce078d0ea4600775d4d1411dc1caf500ad97af430ef9d81df29ef5bb42fe43e49027726dfb8cbe1ab6ea9043bb3ab6f7a3ca3d7deee3f1b5fb8e6e5b27fa13c96ef3c6adaaf259e1b860aa7c1a8e6ec489f333eae77e9b9c8f4ff5a6b9b8ace66e406b66e41518d20c0d50f2ea4a5e815e9da2438135702887a21e7875559dd674a0544ba98c0abd96267ff4a9fee10a81ffb42e2f2a5f268774c81ff95447955bbfeba84e80ea3b05d236186d994ef102373700f9471d55caca89e37a41a334aaf90347154656799161fafdf90660d55215ba3a4579b540aea82b79b54eabaaaa73544cba6034546aa151b61fbd26e595ac925b56caa1aa64f3655256657594d54d56fd89541d1d6aabbb40a39107acfc19e5161a80a84e4394ea50c0918628dbb4298e343ca9fed2c35156d5f91d8e4a0e55fda7e89ccce24f467f0205553d8a133fb99c49d01ddbcf67ed0e96f705122541457405301f097d255fd46a39b5c26d0530a95357ff8ec512e756a777db26faa4e1ee09737a756e73c963277e9aee3574dbddb3bb7b4eafe3bcede322e8f33781afd56ab55a1115b9cf683a1ab65aab363c90fb2de45ad3b8f7df42dfb6d9ddb37f6e38d23a371cbdcef9d39bb63d8744e4f644adb4893e4546d2b40903ae715ce3b6722bb6aac1ba8b23adfacf64cbcc23acfab685a357ef24efeef6cd1db737c36e2eb7f49a5da0fe11567b6b7179db96fb11acce7a5e181b2bb44b1b6daa4d1dc159a7485b20f9366468eb14e6b0994615312805c15146e5104755c603b744a18202f21b20ff7e11d8a2953f23ad54b5dfbb8b38515a2521ad681da595a49254dc14124b37086c24d8a807aac066dd3759752703ba83f39b5b9fe218dc6ca6e598ba2fad786c55822ea9a04cdf685f716c0548a9d75e9359018ed4c6fbfa08cc46069bd97c2a70056f5c2fd7eb067cbd5eaf974e0dcc88915636c091d66eee9a6d1aaf08aeccc0f0b71b65c336badd70d634269c6be7dcf2371c5d68806b851727445289a8dd97906168c5891329209d9501f2afd7f1b76fb4e595714695d5b8e2b0a1f2aa42854ea12099ee96920a753137665cd6b45695358de3388ed20e8bce6bb55aadaef32648c49c40e14d89721205889c0d8c2b740af57e90f9151d2792cacc15b8c3d595729266cacff0784d36eba2e0a0c49d4c6d607854f4dc5085ca9a168bc56239393818413f23ba133c0b0b0f8a9055570a072c5e68440f8c076e417188c2a10a9d2f39b6df1728072e39089183131cac9a82e1e3048cac2be584caeb4a39b9f2b02b3cb8014d57570a8728603630dc890f3c0e55d8da710bbaae156290a83216771728f4056a4d05e52095039533a8d0ba52374cf1ddb13b56d6b4300c43518cfde081e7e3e3e3e38107340f84cf88eb5a2146892a6b1a081f11af207c4644384d652d503f089f0ab46f9f43ae1b12e134959fb640fd3bae31e04add0086b53be8ee5879e3354dd6b4159b04187816cfe29e454b992e5ddcc1c8e259ac68f12ccc5eb45861f6a2c50a73192b5eb460b1a2058b15cfa2c5b36c995826162ccc58269689058b4f2146e1593c8b7b162d65bc787107238b67b1a2c5b3307bd16285d98b162bcc65ac78d182c58a162c563c8b16cfb265629958b03063995826162c4e8567b9c18b96325acaf8cc32bdf02c65ca94914efcd49ec38630c24801ac3210a7e8767793bace488bae5b2eddfa8cae5a18709c532dd90a70e33aca6a75de576303deb85e309c58ce4ca6e3ed773b3cde4e95fce9ef6645301555ed2bab99d7e3f1169ee2a91e0e64b0cfc88a83fdae838f7d88c354e15681395c87e52af2a7a7c852cc45aaf6777533a505cfccf3c0c5fc15c151e44f3f47a99a54f20a19959caf089ec2537a38f8e0a683f7764e4daa0fbe2b10586eb0acf6596bec50d75867bad6b5497585e8311430874f0863ea38a9bac6b29a54e0543f03f1e4c977e5e381f779d5f2e41e388aa3aa52e87ac58fc75042f024959121563920171cfb8ae05a0800d0a28e93aaab12a64a1700d8ef446069e0025b80f4a052faf95e00f226d0b4a6f5ef54edef02e06d0b496702e8d0910022290634ad5f844f014debdf2ab5bf1bc19343735a2d4faafde5a149c53ffd63d7dd217f7f8ec1f2679c545d6b902cd00c8278be2268342912e134d5d504e4ef46f0180a18e44daa5ed2b5655981a9fd7d6487e6d4d83754593353b1ac6a7f57f2878b39257b4e7d24781c062ce14bf35d7d6776886535d6b08a2695fce18265c5b23292565d091e97010ac0db9106d5f51f9ff65d81e05704953f53df951c9a7413a73882558aa3acee7c29789d545b40fe7152e97c4578530230a14d38814ff084bc9d616a3fefd0a4da9ffef96587be2bf9d3df3ca37e575620fff85dd5fe8e67e6aa49cfb1040c186ac4972f32287cd7777cd7414f8b8e9432e92e3dc7777d9b316e8c0d47ba4b0e463d4f0b3fc1b902721d3dcfa3e4cf3e51cf97a785a32c178b725568d7baf13acfb94daaee04af3e2c9ee7320b9b2add6557f3b9bbfbac52e33519c751a92bb300f9b74f5ab9a785fba62b7d7a950b9d76bb3b5abeeb2ed6cb77dd65bfb78573eac929b9dfa6f102adb86dd25de67c89cdd1a5bbdcaa7ee678e01520bff45d9f724bdd9758a4cbbc294fcbb8dfadeffa16b4a3d33c3bdccddc9d474a7f39f3914137ceeadf7593d5490f043d97ebb56270532f983fa9fb7d0587ab52f73be6755f8e4d0d087a71e3c95c372f8f757060b170cee935d98e275f6e95e128adeabec402641e4955f77bd6e331071dc8f7e4f37695e1e873be8ff2e777329cd5eb7edbcbb0eb36c3916bc781e7614fd781e7e1c82b1ca03bf4c4cf6845cfc36f0599264d0e6fd3a4d9e694524a39e79452ce2dcce1815e80fcd3ddc519763e5e107f01f27b5d7cf0010820d0dc9d26bfa3f1ece8c8726238b097eb06b4a9f966cdc3820880200b0c0cc9df07e59014bf59782ccd35cc6d6e73cab748361fa172687611953ffd1ef26c51177959b6b7483e81dd4e5d38cefeaf762b999777ab1983d47d9cba329cb5c3b13b975740fefe8cf6e5f3c8c383797878ad56abd5fdadce2a79ac54dd91ebd5cb67df36357881e67c76aaf2999919062c738bce9d7fe57e7b0f4d994cfef47733a4c99f7e991c32a17ffafbbf1476aa14839ad6cf5a63b96b76aadcf721af7f7a360538ca6acb2111faa7bf694c689d7bf3e82fbdae946cd9060a4d9081f2d2250837b80c600a299498220656f0e8dce8d51d7554135ac89f0b5daa56abf95034ceeae653b75f39c4230495346590d00283a9221d75dbaa70b245dda6c805dccaebb2aed4122e606fa98243617984d15d55fef250ad55e5370fc92b7e8387baef9775e1f2cfc843cb3f2d19963e325546b73ee36b4a1590b93ab47d2c709508a709bb96ee6da11cd33ffd5eabe6033df093a2ac7275e3eeeefaeefa2efd399fe2785bd8edeee0a9bb63a74af92098e3b17607ad72777055d29773776c3bfcf7ca435e20fe2d9c5559e5fb0ad1974fd75ba1f972687b49af24fd8c5c945b9ad6cfc1014a33acaf6aa1312dd4fa7e69d5422eb6585f39ea2def991ddac02a3b9607b6108f3f5759a57c2a87b69c33c4a815c99f379f919caadbf7790d823657bca4bc9e70ed3a722f205e515e4480b0d76724c734addd5f86239b01e5134919ce7729ad9ad6b2aa69fdaecf486e59a0fede021ce555edefb6b4505745de6087a8bcda1d5bbbbb327653b57fc76e8b6ab33ffd72cbee586923d3503924aff6e78c77c4eb5a2cca7d35527c4d71e227771711ddfa8cdd14db80c5a8fddc16cac475e414beca22b765816a00abfa87bc7ff8b700476e4b6dabca6de16d59d34db1986ebb8dfce7affb86de4292fb8e86740559e75323ae27ad5aec8f523e4be96ef305e4f75d2abdfd561c3f70354a2c207fa8e45075bf3fa3fd76f7ada37c1c2c7865f37acdca2dadda3dca64b316029f433a058e146ca1910e6d5c832d24c5fe513e6d5a8760d39a3d1972f590b5407481f8e553af87c096adda519cfbd11d070b766ed16bda6ebf237fe49edb9e7b0ec26d2c5289e5084b17fd9dd1fcfdfed17b7f58d3fa3d6c1009d8fd596c096a34414192e7f6ddbff3b96fff514956b9a74b9ad67ecac9c095455f92d54d0ce2ef4bb21a44bed7348e7b49c7bdfce6ede78f4db3f615c871a20cb36e62902952b19554e138407efe52b0a98ba6ee839d444c95e6953536deb4fea1dba6b10805e47e8602fa6744e766b3cf2df3331a9079653b3a33733333bfac6a8f7294d2ed6a7681f63f2d6ca2c821d68f5c1529517ef4a8baa3cb9fbd85359515b6ace44f15192239825fc917b19e0b39294f68075559610b4d9fd0baaabcd10df49a6cce2d046be71e5b013214f0a6ee70535c95da4f39a9dacf45f5102745fef4d327fd4cde41852d34fdd3ad2b0e0e70b489aafd63ebaaf6db00d142a352540bf5d042dbf7db3cf18d4ed5515e49a92daba4b7855fe5a0b66ddba270f19a315b8d55eddf6aaa1e5043257fba73d2b4eea26a17d54175fbed3ef37315203f91e4d07f432569556734e4a22d7c55a2f63a28f9d33fa354f6b69690a8646a982b23350b428866466620000009331640302820120cc7237a202af20314800f70944e545026164623a118c86118c4400cc430c6108008300419641c6264360180381b45eca1e095fc8927e9af412af5625bc53816059fcb725559bcc2904e5bfaa2521c68ba2ae94bcfe067ee4c820f64d6d1e31607446acd0360794df23572b5192353a9bdf30af7540f389a1034250cf8a4f37e499709eb22cb633536f009c042ff6c043cb0128201b571d654b8e3b53a6da8a97cbcd4fe16d8fa21277cc899819a8220285a2f6bde2b48cb3bcd3d07c9a2e9b56ec09bb28cec8af1144acc58d42c7511c68e8840e9fa1f8672baeab351cee973fa0daf2ac9f0a22eb95010ea73e7f0f776e9d09174d6a25af5c6aa9bfeaca2b229f84e07952ebbd9fe5fc86774144aed8f9601d3232c267bc27241eb81278fd9a6dec4c4881f0f65b19c17c1b71d67279970f44341f8c44c75356a308b64da7b7107369d8254a5307f038f4644cc8cccc78240bfa1ca9fa2a3995b1eb8db5796567aa1db1b1b177ddce219e9b1db3af69f5d39a6f29dc5f6bb0d8f915a149a1f48099719e5518fea284fd4dd46da67ff14cca4527b9b8de8eb56b95fb549143de744d3a3a9dced50cc0e6a5c12b250a60202e0bb0059a5574f94f2c09eadf4fc84f587209a04798b73acb72bc0d18b4bf72609883b7df704933e17b92659ec2a27744d610c3f32bf7803c2b57e4419d8110e4b54b62c5ae94d2183ae48780e8a7058b19fad4d3f3f1bb25eddb585a216d63c4a8986bd2d45b3b7248a95a9e98f06e3e1bccbe3eb21d32489c1e6369fabeb6b4a5c8a1349cf075224af9c30965a7693c33f60ec98a7c19302715205782fdd39fd10131f907198bb2d5ea04822a77284f0a44d9126531a7f8303cfe53700e7f32fc18bcbc4e9459436a4014b4ca9b28fbf5ea3a15775ffe6036a99e5f01725653daf90fad96838bd5278739b7c501230868f995edc7d02c28a2db5c3846460c8e34f444c9df8ad25d5410152968805347e1bd35681758d86400e499d76e639b3def4bd214207c16ca9cb5f06e933bf0c66d10e261c6ebc4d9ce10dba04f069e39ce03c1f89c5eb159d841b8c896c91cb59d801b65f7e357a40f59aa823c9168732d0f11d22e52ac712873a88d512189c786227d82623a4882ca18aeb26fbc8861fb4a566c9cb05c8801188092e0fe102578817d2135988c39f185e8905d25428739851dea35e3647830d7d4300cb735692a19536c123f317bde7d9a9342b1db66067329961b9baa018b24683f0679faeaeaad7e49a1c4b574dd52b9f331a8a6aa11d0bcfc0c742779fa0e3856680e83d414fb9cf1064174ccb440e1fdb007f0e0ed0c22d8dcc99c5ada785c44db35dc4f728d4728e636f2dd7d1673471a3df16f0bd22cab55b19d86f0b15188a76dbd282a2c45b8f463b441361429d21a0acb44339e5f0270ace1c48a1d266b36303b853a015f4bc4b48f5a911a4b932c26b427220c25834fe5c7418f64b525f7a3cd126373c2bf7612ced6724563a3814851cc8b23a88067b19ec6f0b15088a766df982a6c45a8b861d441361a2ae21a0acb4433972f8270a8e1c4a516967b36203b829f035b4bc4aa0f2a911d2ba32c26b822a2d91a148ab5af4ab43b2f2924b43d4fea27ab2af230f0b516c546af8a82695a5762470ab2327eba4aa23934e28e6753119bdd163c48798009be4ef9c1b02a958fa0568df8a5ded06b3ef43b01c958e9e3b2d9fd1839d71eea3edc967318a70495102e4e2ca0728cc73f968ff71ccb05bb60dc3e9f4306a1bbc746218d0a89d8010b369ad34a01108de190dadfa2b246a74bdac52257579fa3ab6226c24c7f29e1be69926bacd4ef4ac41e9650f5e7db45077d0b1062f4d64e0701407e77316ae8204841c144232327a5283d5f8c530b66bb5c10cbedac3b656090db0cf2a2b9491165347a60f1921cbc7b9a362560a7f7ea989835e202ed4c49c55838d38d41ebeaa7d1fb08188f11783a8af1a2d757028c20b89804c7b5a908d815534ed131ce9a2d2583a9af1b2531ee54360da9ab04b9f0467047986c57d4e00f8920a68ac4483a4b48c09c9b89410004fd9537061f007da58568e4fae0ae9a905a74e1a14ac284bbc71297f165ae1ee4bc170d96381bb4df59922fbe735450b6d867dfed1cfd9c7c63cded7f6f548aab414cbe5ccfc5753b36499f2990b8f1a164dc30f9ac8a315da00bdaf3f368ee762aa520cc7ee549f8d05fbfbdc1fa5ae1ecbe6c1e36e69bd8d1ecbf283e21f55521f6fc3ef11fefa4b2dbbe0c3c805bbc5070272be5672f971c6e08754884aff3f8c7c233080add570b2d0040969f6d2759b3b52802925d5da40750ae04ee6868eb477626fa9e2e8e38ae58eb938d2a6c12a61a4b872f949d299f141710f1a62a2cb1d5ecacb20b0aaf6f91c002b4de1b54b612e9359d1025af0c9810ce56da523fbcedb9eb630a55d99b8140c89731929c6fd753a597dbb16665504d755eca86c10114bd0c9281d2b2d57b9380a54251c311659b3c67d2416313857cf5f44de444518435b3c868206a82c977146984a589541269d1ad9743098fa89fbf9474e65699161bf046b6549d2b3a81c4b5f7351341b11d85a8107767c7ba3c9a06745c5b2d1c127faad728c85b818e3028bc82c8a76eefe5c60788703d1eb89123789ed993242e179cd6637ed35c94f47dfc1532ee25e0e5e5fe8e9bafb7242662fe96a8d8c1a6f1d84d14f2d252261df16e8dec0d9f53b73cb05a29da9e9aa7a647cde4f4fd8de515d1fb902a6a4dff0cc8c749259ee159e18402a60c62a01e8e6a11ab7917b861be113f0c222f1ec1e9317a4af5aa73db23cfb9c13e0d1739bfc310842806e78d5a1a5c1dc05017a33f18633fb359a285d0c5cc8690ebb43740d6bd30398198053a8660515309afe0deeeb366f8b503b2095d171a01ce9e066049b0003d188a11837ed1a60995cd8ba78a63172b28938fd081bb27b002647c2c5e9250802923d06e5c6a832728dd32002a754418cd43f173d13e326748244b9c0e1faeb2634fd44f010bb37d18d24fd5af921e9e463b8aa8e64627fd177430a43cad526942f1854b95af0b8da812b9b3b2eaa91e5363980c0daeb24149fb015f79a6a7c448de466a45ecbaad48a420a745053b124ca5722e70c778e781c1b540e3b3e796fdffd66de3fe8d753e07a1c7feb52d1869e8c1bab1379cdaeae7f180dc2140d8cc78cf0b989534953edc20ed92801aea59a0f07b80a781e27ce79512e525354d539e9d3079a113dc1e05ad35c0807528d1b2a17a65d15d57b2141b257efe4e68256a73e19b01e01453aaaafc8741a183f329cb87302907a9115780ef0644331548b1046a44057d991d6786c7e3a5313c22bc3e47ba06784133f85819bcf6b3630cd54e82ca8105c869b85db87e7a8f71325ce83d465deda927f78491fc6b1ffec50774f0a252817de5ec20b0d224293511ec751ff6347a01b6619bcde9cf7072657e9c0a38f4139adf428ae9e6bad76e0d583307a2f09aa4b5a087baeb2b699240bf1d3c23858a289c833c26ebc9f38d5731bb61fb75f5a14db69b6f99f5aa6749ae2006575743eb8744fbbf0badf62a5f856593427d1069ea4cce7dd1da167f6c89be17b62b935f0e039dc3eb60854d55042857867560968430fbb36f9932ded93f55bd6fd00e1f8573d8af6206469e2ceb4fdc5d47ca3bc7148daf847249aca6281dd7836fd01ab902e92c48c2206fc888e38fea2f8a95086ad6251eb478e5ad058049f94df0651752dd004452055a29cd3ae3cb2f93216b7d08d212f48ce09911397ec07a782e8c8b58ced4c152422b548c1e49c24300b21b0ccf8854e7f703991496f2785af6ac06d0185d198be88cf0cfd9d732da93d0cb6ea7c06a802dd9d889fb80c7466f9c5d8c9a547a149b9d6a2cdd209237c6052be0ca715b8170d8a28137282ac72f2148b7219de1fee3e28ac7d5ad8e0516e3f72a659a313e963d3efe59d409908426b8b0cf40fda5b37f369dadc7b8f4ff59bce7672f6bcb86b85b5174245a8ec60ca2a74ead222f52914906d90d870860c56ef368841c5ae0cab5f273c8767486b83603c251d92a03818ab08c6edfb9e5ccab1c22ccafbe953ae988b6e01d7a884ac92f6ecc426eab2b49f3280848fe9ae1b7b4e251c8379e908ec38ca5c1fdaefa00d1eeea6396c5fc51aa042d9ceb1268b77264cba71dab64eb47b19661128b81396f502acff0107781bbe263cc4015e83a7c395c14d5cbe680f63ea480c2c2e95cce656fa519cbd5711196f8be522385843f173a8d18224bb4b8c2de45775f156ab0a88fb73730034361bed4103fde435dd46c26b4282495fcc7c1a7c06e52a1c25593d79d6980c07ddfb981d8795edde21f958e98d450e2174b4c3801bd924d7852cbb586307076a29ee268645526170709c52c54d0ea7094733c8d1078961afdb8deb8f8bacd10ef7f49de2feb74c7e8dd6073936c75fac95a2c5da108059e8a0c5b20ad4e827149e74b0938231b270ce9899971077c075940c6ae5788400c17d56333aa20b5eeef6f9c0823e40b10056b19e0ff0f45784450ebd25bc1361f6e0fa76d39521cc18e3a4dd60e6d1b24ea59c13b5845b4d52dc0aa9be62f2abffc1d05d150193a98559c6d2904e2377a22b9ce6db42da50682640e2e213050f1a371d0f2dd95d5c5bb4aa610d811a898b6001696d0914b425d32d49e8a4d9ec62feb6d89a05adf3c643bf1b94740253f45dd57909a5db71b5390e75d5ee9f6570dbe21fbcd147977701871f0a080f611784a6db6764f66a2b00332ea173362a70289cfceebfa4be6dbd6def6e4eb919831227997bd8ba44f370acdc5e53f951dfd30ec46f7f830983e6537d7cd6b0ecd77941c30c103a57995859b97d6b310b082ecee9e858038078230b4800b83635ce98205df8ea5286d037f6f896b2c7699e69c81a104f07d31189c4f5b8d6305d1d8d4ba72b9959115709ea7f80a8acbde05cfe052984ebf90ea17c507920b146185ca82c5abab68a4a880092a332a79017b1b5450b453df9cc4550620f91e6872994fd781cd84d2425107b7f6b234fad59419e9c008192a42c73ab145a271a1c86435c1511805eedb9b4f34f12612c2a6ae18b59e7ea26dc076c1e3b504ea8b568ba4ade91cf7aa9c147c458bb06432c507d8e41d3ee25ecff9b07b9554caea4624fb87a8543470d72ac2c079c0235007a6ad0a22725aadbb8406bff6ffdc46246ce62d51455c5455084f10c5a4e442b2687a2ba673b03bdf1c41a823c9d210f4bf09e16bc7582ce6524a18006f4d9c3dc355c9904d7a77c2716c6a7df9d1fe15db3cf84275cda6923b50842332ad8213a6d718a65b877d99744b3df423c1f630092d32fb0be69a21eabcd5e483bb449ad189cf79d04dc8133c14d5d219575ac5aa14e1d5ab773871e16358782aa63d9cf024195c96c096d66f710880670e016e19c049d16f4f29053361dbd5f26ca281e360742f572685ee3cac9f8e14f76c7f2fb16b6b90bbeb1bc6a48c88e675f15bec917bc5092a1b4d01eea0b63328017051c511681152258e737e20424b53dda9b0012e28e2edb7767fa9de29bb74acec2253d22d19eb8cbb1eb536c1512e04ff1f05948baab44adfd0fc7ee72b8f52837500d67da737223a92c63484a4e5e4e1e1812a78f9d5bf055ebfb400d5161f26e60ac81955ac0c6c21d0a4cf6d31088d1b9738099b08459e8bba7212c02e8fdcec6b499320b82474050f463cec74560327e4ef59b7507563af859eb2062c7236b8cf42af8c1bce7f16e709a3e42d6234352dfd9b6f5f58d3a9fb171bdbb8427ce81cc5a1774d3d7a01fdf068f8c5f713d411b08e2adf2185f4032966f600d91969f0f400a4c450fc240966f42ac9bc2b101970b74bd6e868019219e3d6a90c66dc888f2d1e08b9b1188ce385a312ee0916644e1dd1fb39ab78a8960866744a56aa108691b33214dd8e5cec4dda4824d14cfc6dc987d3eac4898e1c251efabb1fa19d812d926be5bec1c786ce65bb875a80e0525753b99733cf25f57134287593c1095e31610dc4cd22459d77c278a457e23083494ae318c1499d3127707d0daeaa890a7d174f0e57e80f20dca951cebbe1f6c0e823b2ac2541e1e232a33e45ecbbae8c82b10a3d761ea2dd1f12e32f8b534922d83172d945b0376ce32f705525c706ce70281fc8f8d72d5b449edf2fea405db0b7417802bf60c8483fa171fdefdf01fbca21d2edf811a7f689e012396f801724eb44e1d8348edc27eee4b514a00a92fd03f69ff1763d00a0d4a8afdcfce92a60916c8dbbaef0d3b6118da2554092cb52b130fe190dc1d539dff7e8817a4b21657571d78be7a785ee2b4e72b077a78a1ec9259625b732783869770e20627d4c0362ff78113a5815eaf6ae0b1aced869183cb18c49af3c1a15b1d3cc5b0c69ced2de7611fe46ecf5476214536820d60c6879f5f67331b4158f82ee72f812c079a22d9c65502927dc23db45f3d4b9da6de2bea9afa1d594b7fffa151aeded3e2106c675c1f029887835d68aa9cc7c0df29dc36d367b4abf810455a5077863a4ec9611ca25034fa41dc30fb8397d69a7700938d84e0f9e1a811492a562da33eef51c57430c7a855dbcb03d39b8dbb1372977bbd81bb6aafaff4b03376def93e011d7f3fd1bb1f5d36e9c872bdae50ba71a9115fb7f252a342d2059b4ab063e265a7f80f1a98b872822775c5d2d165c4b960782fdfac4bf18c7f12066f3f9b0b94854f1fe73295894f8ff60d8e5e2c664be2668f6e5ca9fbdbcef7eb915eccb65bc5a69dc3cb2f0289c3e12de7a555322570e81a5b1f35d79fb9c766443181a97565264025f073d77f26fce32232bd3b5c83f75e67270df5c0d43b2e9a4ad097e09a4ae2668913ee45271edc88655485ae68a2d459f7dcb9646f56b0c4858a4bb16202b6a28ca524c550648a33562000aef2fc91cd434af1712a1ec49876d2682c78e9bbbb77f9976876d2a056588db66dc8cad052c74d2aad45dfedda9aaa93e784978bcdf2eb43f3d15183ca07d6dc26369433a426b1b2f1058f94fd380094ccd05e590e03632e951499ea96fdf31b381eea5f8802a4afb4f2ff288a587e904f3a29f71a736386d0a64b2bec0b8fb19af88027a6ba0ee85bc3eb623a03229ee15bf2b5a05618bed9bbd6152cf17de95a01b0697bcb573d742a2a9f6e9e357618fc610ba2a2074aa27aad105df74a1c29018674107d440a82acc9927307a578a16d7d59d67bed095d4c51f297324cacdf4c2ba5c9b440385bb7fd5bbcd476a119360072d761dfc13d5e604ad0c63ddc805810ca0a20350c21144d804e9f39db5ace41957378ed07bc83d810c56fe88538e88aa19c4c10df334cfffab03b85aa08e2b6ee386af05db79ee353a02262c7feb3f615bd69e51c9a696eda6333d64c556ad6344e0231805e0daebbc1a104ff3227c2c19cb83c2090c221746bc8bf41f19f84b99040ee6a04c893ac1103f59a310423036a5d5e687b02d453c28dca2c82425f9d41e83afdd45e2c52e5ae78968fab23667ea9a164445cea43b64bd100b2fcae7d1c719d45426c209476e313672b2b03f7a1143bee9ea64682ccc1494f0a01f2e55e225e76278467f153252a21c080a45855984a8548b56e3eea584c354d84fafad84b9c4c49209bcbd3273402b1e963d2af5214a656054aead00c3ec28c3472cb2f04f1d065d44d91ee38388809254093df84ca418e839308feeb9acbe6aadcbf80c8335c8af92e7b90ada61088355efa7db2f1cd261a2bed36a4e524a6efe11895e10dc39caf7f3a5c4a0012fc234b44c62976c9daf7f8c209d378c60d8e7b2e0474be19834f8c5f418bb0e72454a0b41d8812fe8899ebf88de834ffa8132123e065623a3f99fbb3b26b7a3efa4d6475dde6574db7ef4e3d3cb2f491f10de0555b8213f09ee324e8189b2f5044614583d49881075d9cb1792a4afd8876d872b13a9f7228cc389ce7e9032b03e1886827261ac406a0de551082e90303c7749b5873a9c0abf77024b5d3487da49e4955fd5b0e782d3cfc61bdf88541f7c092e7f907fafac62fecd2a1aeabe5d78d7cd9796b659b1cf14a6791255b603fc5681170dd29ef18420b281f7c4b6324cf6b6154064d44ddf7b217d94f1acd7f62a1581a9e25a8b8a628738fd78900ffe3b68256f2c6e2ccfb4076f7812f9f3cfc41c30f46d4c876060e2ba14fd9288998f916f7d0c6fd8f91361082baa49c4d2a20a5cb4a2b2f90f228b544292d97687e08143b0aeb3b65112f95f6aa2976eea94747960711be3a703640c257473117607c8122252c810e13ed09f6f123f09aba11f6b4b4366eb4efc04f22ec7db3b17cfa10667ecb18b205f724410fe59fb7e1022a43a6e148e3c8e1c1af5b96e8a4e1229449c636c9bcb944570189951c612b97d7da672c26c4a5d55bf227f589e7e034ec213c7955394ffd7b155e0a0ba79ac0596f87eb77292c5ff4b7b93729140b968381a6b3aa82c39b70d21109f320d9376545a781517cdaf425d0ffacbcd82f2c9257af26425a2efc8903e3789f24cc5728db570b5dbea9aedf2cd19e644bd680347e4647b7513b2ff5d26629800d9d7fd8349f4657c661ff856633734b9021e9aed6ac68429127fd7ec819dd8fb44a1b265795c0b49f24e88a9f5b75aa20fb37f849db1f38c7edce0954a6c07927411ad901078277b15f29c89a916ee3fa5538d684f183909f09b7989a215dd11514c8d5582ab953b9351785465b3b849abb4f6ea3394c86e2bdf3760a9e3a2982114e6981d4b4e73295a4a6e1bf050e1c46819d603bb209bcaf344392d62869cba1e7fac8511e634dc616e0cebd49432e5b45ce2680cefc6de7d4546bf49e9ce8744b60e50fef3c42086a10b5fd97b6e3b4a98b2e1655961947c6ecca1f95977695a274442b198c785659e85b0e13d9c609a105b37f0c55515f2ae221d43803450a10be23b0f533d3195ba8147ad1f03a89a6e2af491acd815319a6d444309870044c8fb3901da061f80959f1c5d006ecb5172f17d31a79512c430a28048d0d9abfd7b13c22dec166c19602859fdacc515bf2783e7cc8252a7b605b17b986a0f7f791d5dd7f2a817148777ab44a698cdcb083297385342319280109e8a8900a026c91bbb80b0bffc3b73ec4b17ece12e50f44fa4e6269f02893ac633db65a004ec2ad0a311cbaf3ec4e7f9fde2a493745a75771e3c849418360f9300851097b6d2edef534e07ae478e7e6b42d0c560c1036b9ac855fe71e8baa1578cf4da4b5b8bddc6b97f685cbd2761366449ac16dbaa4c61cad8ef9c4778f2022858e49d9bd5b465b6f656ec283a364b75195f2afaf3d109b2210758f22835e347d1c633e8e03572f230bd912c4857e8e62623bcd82d038c2d63ab45dd163b3a42f85ddac08604489040801106b1e629a0cf5776e0e7f96230ee16d34b8bf332b2cba988c8099e3a1fa2b5fda77853925543d7a306bbfa262977616ff1ff12172f9ca0cd260d05db3d3fbadeca1b1bef3076df4cb72cd9af42f5de8cd2823501595d58d5d36ebde10afc5115ad7c7cf3db9fe89b10dd3de5439f91f41681cfc0b129cec510edd6f03b3efc3420c10778ea8aa997ca39b2074d806251cd7b83050ddb1881e36b606607e9cfaa64b3d5b373fcd9d8fdc20fbc781a409f4907e035003b0c82707d4338c752a1b91b3f18057453edac8cf199085ad937030c9809d12995e2d530a60d7ec7ea5fe98615c90571e1de8c09b2256b2efeee6abaf60d4a438ea6c42764e6a924214e3a9e79a61ebf68fa8c6cec85f15251e2c1be537f2fd5f5b7ef582d8cfcd475df5eba709fb7f0ca4324e62d2d0008aff0d258c339f5c72939573cac01821330d07b0b9b0be8e429b6afb01e044701f9d53a8c0d43d6ba8e591bda0201429761ca347acff0399e042620e84ddcc8879767890c608218fd1f977c8621e3702edcc474f7bb8c023d197accaa02fd2af80b6d4d6d846db85e2df5eb5ec81826d9d0c33d48596672d4de00eed76e039df1fcdd67b65f699633727615ad719b39e9b769bc45a07f9ead0750c5171dff7d601ee05cfff7542b268ec27e2b4150da6d67743a55099d46b1ae99c163b1129d88bf294632636394139cb34238af412d1c5df0245f6e8bd2e383ff9d487b53ecb210f9bef468732d28ea067d1ba346595fb1d43bf92392321b0baadb2f23c9e365542d15cb12a6bc2347b1566dd2822d607617174048ab7091d62995777ebf4cc3c144ee81555e980d0d9f5e58f03251208f7e62dc88725009425ad51d24fe5ba5b4097267ba8dc921695c1ead522b4048f844c0d873890cf1228f935e958fda65b2954d3c0422f7f88ba70fda89a38900bacc07ebe289a75656beb4be40606152209106775f9985085e1eaf2d73d15f7169666789df40435f243b8f6a0d91f07386787b577b72997cdcc052e9610da51cceb343fe74bc1e3fbf44ea41adaed572d0a84640c1a4b6b42680346fcb70308e54000d5a6c90bdd1f546b792790d33f86f1b0e45e2624f0fade9eb349af0b367e6497388373722bbd523d556aefd7467ca786da5e7d6edc74f0a2fdfd46e981c484edb0b7e47bdd86848d5274fd2405a30f12f150b35f09e28cb7bb334217a56d6fa89d15df9f816a07f58ac8e0f2a207ba26a70fa6b09c70058414e73469ecbc90017597657f1c9dea0ad14022c766dffff4396dbb6576cdd932fe57cd88b69d4ee4797e50c895bc216f446b6e5a629eb021f48358d83f39b8a14e985c6fc313a4f2e801767fb8cbc5bf5b68b84af4eac81cfd988c604e6cf0c5796683716e2028c7cd27a47bf3f758aa5a3de1fa7a603c7387ea0b72f081c8309ed3a8f8c7f4c482644c2d1a99a40376c9e1d1ba1f260b06138d7bbc79c744e237de699f2587bbf4d87fa6ad18954efe5ea9b93fbc48a1ba1940bbea00091bb07059cbb9c61b97295b6a0a57101afa87895cd7a0aab2b3c1677e55142f83eae920538266c2a8f80b13943b20304d52d1c34b44d6e0af1ca6672779b521b469d2f18a564d94cace60818508a348d45e2a076368c89ec0b3d0ba45bf3c424f952244d94881b7f0db7a39c9737b5f9370ccb9e7632ff79dc7d7d6eb021003c281e116341060a4025a0bc590630a7a2859dd6550e0936830142f3676863ac09f34eac5e0285b7d1d9f240abd248cd2398fc1800f06f928bc8729bba81aba3d2f62ccc3468dd207e43a5c8faf5ef382e1b93f9db7b61f5087b66e93fc67a4b7cc6ebb485934020c9e9e667744d80144c78e62e47e9f091da519d5103015319b5f94dbbe95906a306a71c2435f0a230e10a725b5963b805c2decb285efd0b32732458083ecf4ab9f7d528a53810dd14a9ce84bb4958c989bf317c751ccf3857cc23e416970cb2424b2412b80d32a67be09475a8e4619a817736fea25473f709f59e4b32b43b35333a8e241b8beffb95ee8197eb6f414345b0e3520f0254e58a6138f841a22e2156d463188ceacc1afd35a36b7e9866517403e6a23b45db4d41f213e02c4fdee13e0a3abc38d2315e8d1200fcf1f03313164ecd036647819674c31f6624dfc85d11d80b8af4951f9f68d144caac28faf97fa2d2c21f06f93f540cc3579f29e91fcd563bd2e4e5d7c784286de5207b97827fa023942b625b213cc4ea59a175d789faf1a401249c53ba5030df88eb92477e4409b04b113491bb3a5aaae346684f074fab67f20e9778106eaa19fd9849d56616230e5b2ceec70f5620e913d0edab5fc166427ab9ad43041950e0e334c38e29dc95638485030e4055a9e6c8086cbb90a806a7ac19454ab9149c3fd377b23561205ca390ad38f42d21d8a08dc36a5a0dbf657c9ed49bed7a6196d70a01d1808da5212eb746c25e77f8c388a2e3207ac81fd59fe3506c02c7c5d846dcae9c1b637bfa559fc883b0fa095fa60b5cb22837b63c1e4438dabca0fe6aaaee6ce69cd1a505fbae4d737a3ae0e00636924a918d351bcb493cba23629c7a20ca2f53cf1f2447f6968bf9ac662dd749892074f74e8b2121d9020fdd5ecce3212f7b8f38f1b090e00a2aa2548e70f6aca6643dda8fc1bfa13f3b46cfb34f76456a151523aad8107090c5e28c943cad75e80d0eeb27d4e98c0f60d3477a92b83bfd716281e1bb4d2982f2fcb82b5f0001afe734f6723b890d642178a3ad08f3bfbca70ac789fe024f54e872e17827c5014c2bf781a3cf2b8a2810ba159248fc7cf26e999a7835f356c4a93981cd6e15cd9f79f6d014fa6e3a0ae4b4f043f5b44b043b484c169489f2dd2767a77b2e1915ac084296c900e695e98b774322659e692fd43147a5fc8be75a16352ad240fbdb08a680c6cf42ee016ede041f67dba5f2797010e0962db3464cd722a1145e22c05b0168722a92da98337e224bf4f1d64360363d65560a572b4b1e5c9ca42b824651fd8687dd3c881aa184789ab56259dfe03e78d8ba75c64637c652ce375a1864a6edc14dddf5b6a60f2a53d9a648ae7723723aaa47c89aa2330807d082a9b3246684ac3979a92f6aeed893441be27777adae5a2b310ea4f85ecb88e7529b814ef73aa5b5ad8ec668e19846df1af292f86627ff883c9243a1d1c47d4eca472aacbe23a86822230374e0cd21a67ed29d77103c407443f53140cbcfb7cd06ca1ddd54fde1b104b97dbe7fcc1ea89031c31c8f258c3af09b5d93f11a4c4036000e95373b983b2948d8e6e0ca0fd9e9a2acb6e279faf0b182f25883ae5c46b021f651c28c683270bb87e207410ee200f94c1c98a2fc96544ac5088f4f37d0ff0136e7f553a5cb6031b44010a0b0780e4b7637423dc6ae8afd0385a2d3fd4e3826a517375ba9ff6c914a1d06038b4d96205b3fd72d52bf47b4e1ab1f7f5421d6a95b02db676fd19ee5d28855d0a3dda563a6c8284b3ddf17ba0f0f9f0860f1ffff854abe3eaa159773f990dce9e15ef942e7995f907f3549e412a6a1b6eccbae712fa3729e3c7463454d24e880835a5390ca7263984a186d4d30e1ef76c152a88f6589bde4d6f20454fd42652eceff7c43ee6649348a813211083848a621af82d2d3e12fb987a509829774984bbe0519dc74a0725e995a51bbcd009dbfe952b662dfc5f80aac0b5353443986a2f355b307e8d6d4792be1a91afc2609448e09028ca0f7034821bbc99ebd5cbde35f45664c5c9d25decf8f71587e5e6e89e3196fa604221987e5fb2a11d8ed4f5dcfb44f2943fd6132e52f4369b063f45620343b7a1ee743639d60ffb54abc82585b307adcc239ef29886695bbc0a91b927032845ab01766d003e768b204a3b2bd92e92ae49b9f8669810f5ebb3ffecc9d62381c463ec141020d3335686f1c1ddb3c2d24b54bf894b0da99ea01169fecb36365f7fe7d86ccd275e9d282fab4d8d914305a93bc0309adac476f9755de8bf1369b090f1247ab835b7cbde6c031dd2c57c201eda0d228aab80683a0487e46eb0d7c5681a6bdfbb5a18e24a4684b3680e60b80bf59b78e066f69d6f21a4c9f43322c7d01f16d24ca1aef54223f538ed818b04ec5238c2fc7f25d163c92fb094dafda6581943ff9b585dc8f47617238506a52ab8ad036b11b7a1a40657c47279d7cf39ff50a6d892b2d2b20001d42f75173b93de172d8ccf7d248ae435326ca0e67d2b977aec5211706fb1411608dc02d14bdfe961e4cd589a3ae54266c03c7860c1e3915182e7c5f348951d525e8601c62bd8126ac7fcc6d8deacb292281530386a1a1d62ed8622f63412998c578c8cee102f6d56913ede6e135876efea8a329b12dc6bd937386752a136147f846d68b50b23cef8db29f03331079f6c3b48cf86711e1d2fecd65b891128d2d244fb50dba8778428c5e0d429044c1ad884c19157aa09c1ea049c1deec6811dcbea257c776944d17e0edca581b61c82b628cd95451e5a36f011823d58065641a279118482621efe3fdd3e48d155b338b522c56fa3905e74a6483e780749d4422091e2730a5d6dea09c41c871d3bb0ed6d8988a9be898c109e002b8acd43b939f830c90150ccba212f8f1d00a99f00ccca55a65082f1923b2016e5ed396cb5d25d6d1e1b61996577fa2f6dbd0d6e2862db2a7a6de056237b02db4243dbaed7a0af5dc19b75050bc614b2d100ade5fc253848167fc3d4b073d40450f3cdd13140e94f98220a28ff5571454173a8dcc120984a000bebe00d340c17ce7ebe8e8add89511329fc5e7cfea6df37d853fff026cf0f114a0e79097e80a63ebd905fbb646076488345f00d153748045c752e73a5241abd70134d0e7f72321eb7233585abb9bbaf9aec16477575b489352f9bc8924d21ef45ef5cb7f4b825b9ae8baa150cb5ed40d2a64826f69186a357ba38a9174c5a0a9278848482e3269bca0642220296860dbc6adbd1cc3aafd039c706d01bfb0ddc8cbe368cb5c503419723e22908b181e703586cfd233d38b444c69bfc16c5e4c986174dc55692538fb493005144aef7d97492367fcf623a3d23f4fdafe64a2e7e0f16fe4c18471fe28fb91ccd4dd259925429a6c466b1f319119f8523792d0f7e5fc86e86d9f79223670601c81c73cc2168369ade2f71d211551457a528c81dbc9209d765e5448904a45de86ddc2ede5e623292517aa64656526528b7eaa96986c69c041c830870a11bb7b2f7bad5237b91248febee9314edb10b7e3e7f97751d66027d8642fa3e0669a9a636945c614009f84bed362100354063c0300c92a0ad49d35611b4224123ae29dd6d705abbd65c0a412ba12123ff3a4c59340409a8e02d4412300d998226859c30c2c06a0115f041ff8755453d2861583ff7f17e499f438768f74df3c4b20bae24e557e8cf872572301f028f82c7aea98d6e0a98a541c469dfe8061a78922d6fffe1adf093dd583700586e6f6099dc1a01d3b51764348a996111068e69795413e1acb8effe92dd3f9c81b6d0a4ad7dd829e84ba20fe3352b2bd0c9f2e976d1ba0a0a41d4e919ec9a826b5228f5486937254452240a02343471db59d656aaa9092977ab10ee5825e873c11e0e85d5ff2d6cef6c594b650ca05ea861942196acc1e64c1a9a57913f73d73aa260740ab1878af5e949e7d79e18c416a5c25123bee3b7436bd8fce14284fc2f75b29e8be0129e7ee24148f8730ea7ce955b814667d9e4b067c8255e11b3e99e4d050377311b56a6e0cb2505973fcf9c42fa60f64c61215423a4745bda23f06e8e81f9d5b50c4cac38772b7c75097f8f10b2c4e7d02dffa5d6a9dd7d9859e80a72a2055c50cebea48cb131be5d45779a50dedc230b170cf09da3561426fbf5d5efcd83f1abd2e43faf85cbea6ded7b977132d3c5da7f63cac6ad9fbdec24a9a7407b4ed11a0213c244584e67ecca9d0d6cd5bab19eeac95874b493bbec72c640ae53b4c3340832137d8b343823a0c4407eb1bfaae1f4c734a5ed2a96cd2cab110ec3858b1ae34e62b4c680c6df26252bf10c88d34db4dd7ee2cbe818b1116a5db367922cca8393f15c355d8a809c937309980e3e3859e765ffd0f067019823764ac496541302ca424b86a01db24cd44bccd36299c2f980cfacb70f9d889bba537974ded280ee3bcd9b122cd416df1087744254fb77e6bc277725792374bd327dd214ff11724a07bdc1af18d50addb6cf91ddc84ff05f93b68325d2c096a4ae4c6a0682d76d34e9e38dec94971e3397ffa5139dbe117a03650ed6e28a591f5dbf3c56202ed8603d3fec713801f12bdcac0c14726f75c67daea9af598da2263554c8174e454a0ec2ed2e02c11e80c47cfd1c7e96a01bd180cb3cca01de058c9c23c263bd81cdec15b332bcb086a436c963cea3358e930f2f4cb9d2f2798102b5267adc5f52eec9d0b520b07002069be6e369d6c46cf9a08caed4e25f91237bbfebc0519d896b2b85ef363f19bd6f4eb67539248e962841d481111663ff4ea37e9d3e2b068fdd1c04466d60c9c049ab67c5b88e507b4a6140b31c44c2ad300094e60368fe3f15dfad680cbb8a9b8a4341fb4c1ecd380713f70e1687e96ff53ffcddbf31ced7718ab17db7c95e2918b78bdd25c7ab9596d955b70745896607f4f3e657557515250339c7ca6e2606115b725f4a69430d654609397e5b770e2231fb74c652ec0faddd4070ad9108f71d2bc687738bae438ead6f51ee75874b02f157da5f9abf95c21cfdffd9eab1347d002ef316c1f675e5f32ecd5cc6c3cc3b9217b5e3c69ae91e402167d904436b96709aaefe7127552f8a5bb8341c8517b4ab5835beb175db2760ca9243156df5391a640f57a03d5074506c98647a22673872d7d1bf23b53e8b08d1aab173ce2d99e1c1b534331ed46eae780fdab4ad2cf9013ff420e291bc90394883b9e2d847ed7a262ae03dfc14d7b3b24487cd3402a307f91a4afa32e9dc2783c38a97383753c4f5b020203008b4dfade6355f3f7ceeacdeac855948eb776a357858262bcd3749bfebae9abfcc37f5dcdb83d3295fcfe33c0ab88d9848878439eeea4dd09121a5112c77c7f5343c74be94b041db7be6766703b44d64783604911b40870a9ca4e2197daf021df03ecb1e14f0a730c8eaf2974dd7dfde4c02e81f4ce9f3b5246fd6b5e9252fbd1ecb99994d64c1f0245cc65fdd09b6de60f603e70b003490e523ed034d5472e10b2acd6582731080d755e79b3e73c5c1dbeefb5d76a0b35b6d13f0608724ec088e8a4d2cdee36df0cc9db9a67841367d42c9328ab783984705b3d04a81378366c0c962a9c676c7b67bc35370028a4412db7042077c2b3c859dbb55c26d3859e8ad1ea7ff0bc7e093ab258cc2d6e725c3aa3f00cefddc1595f752674ca4573a070e3e833ac362216d85a1302f55bcd499c1b519866e9b33633f957df578660094964a828ed40513f459e52907236a942801305b4bb46ab5d7cd3e879e13108521385883feda5764ea4813b5680633fbcad7829f3bdca6399e634644da70a05d33055014cd7590538d761e38ec5f99730c9019364679afac5dad1e60ebb540e8c09e718919d36d4df647085f2fa0b269400c55b165597594032fb16b2e576bf63619016d6147c55d5989fb3c16d28d4c574c75c918b093f9ce9611500f208fd50a0baeb254ea3c8563ce198986fe6aa606ed62ec2668ad211774114b8894d86c42b212136c437d3db933df357ded62b002fba300d69459f41a17364b3551632259e5b85e481904462de20e5b62291841948f989ad895108d10ac96aa119954416cd0222aae922a6b652f2418e6773bbb030f5e918deb68aeba471fcb8105238623842aa98b4c6a20127fd5366efb62a39daf373d8d527500db6ebd60d808b3c70b2fe6e2fe4bcd80593464e89aa43462753e9b4957a14ef249a1532accf949ef1cd5be12e44c1453f6a7bc21640be6d4e9db27ec0fd46f031a4bdba356209e15a703695cda02fa82305b44d0b332a943de4c57cb6ce5209ac25680dc63e6d2569c26a9969b35002c7e1da0694245780f78129d6b7e8dc0585af7e144eca8444c4af00cf238b3e2a7256defb626f7de32252903f709020a1e0a6013d3a503f072312e365d9c13ba30a62be5a751005e94ebd96fcacfa35c5c6cbab858ca8f4b0f1a48af87694ed034cd0e9175f3ce7a5ee722111b40e9a3738f43debc3f1fa3d855f9221a229188f4fa19021a9a1340ad8996bdb44334df687f3e462f437e6708ba65419f15c0dbc99e5d76b2b883f4eea5ed190e053d7b2723c1e48683d69f4e21873c38649b836f9676a845edf5d7a326756fde79d7d5538d890294bf390b87ec31ac22d92b33b237260c3d7b3dc6b04ade481bf939489bb03b7c2efcced959baaeebc2ef62be93f9ce635ccdb8fc68bad653b992218829f62c9e5d64af0c109e3d646f8c0e9e9dda1bdae0d9397b3d06cf2b902678f66629ed75791361d8c11878250cd62b4aaf843df768eb599d19dac86de5ac0b29a18b2f97a5f5ec1d83b1df7c13d92b5fe45d27f29077a14ab90da07c910fd1945c941fb261b1cf0879c8e347130263ef45f1ec77c66b53009be0603f44f3cdb5d20dc03b7be20eb46edec5cf0707f3117ae9d4af1785a671d282aead09784d3dae37f5f4a03f7b220cdfd9f3ec334d4117c8e166bdc9d212492d8ce9dc53e4d2a528c485ea90766f6ad9bbeb954f7d0241051172918bec90908dcf75d31a9f7a1ccaf85d1392fc054dbb324fa7df98a737bc3e2ff8944ea7344698ed824cbce69b77f2230294bf6d533a27c51652e448d17a36fd36650610038030e5f534e396fe865ebae45c4afe6284d944a0843068e1630c6f067edb2ef5cda68beddb65a266c96bf7e5e390e9edb363e2cdaa55f95f8d30407fe95789fb32db0c5de4016cf6c99399468d20b088f643a4b74fe93188ca2b3f9fab145e99fc9ede9fbf1a39c56eaa91532935720aac9153f2d6fcd55c7a2792214532ba7a6b26dd4c4eb77ba20989ec45f2229f35fec42c060080d40d5d86977ce49d0cbf3ee3a7dfd24fbfa19fd369af4c277b5d9e7319f6ba7ca0afd01457b1269b62634ca1d892b531a6487664a36745950892a792887c3a2b7f341c14bff9ac975fec9afdc89ca0f0e724020510ee2f929a97b24794483fb591e371256b1a8b014ad734ae611127d209f29d879cc695c8bb520d24896aec947f74ed441d0c43d1a9addce62e3f243a57998889ecd3316a9a04a526656bde334a39a7a52060f0a5bdedd363d3f6d93e645a1a466fc6d9dd54ce969c051543e3b63935bf3db539a78cdafcd98618b718639c73c6186344c2dcb8397b72536eb6264173f9c379a6ea23fefc742cc2684ea37ddb34f91cb745ffe0c41d34678db9cadf498fb3b7e635cdb7fe79f6cdf9e6a7ebd4993e67378c7b9ea05fb471dad539bdd33d3eaf9d9d9d9d9d9d1d276266a1cc63272099c691e18062b25950b7fa66676767676767c70919191919a01d19de388777b8c7e7f50373b95c2e97cbb5b3b3b3b3b3b3e3449cc5599cc519e7ecb4269b05718b6f18875d2e97cbe572b9646c6767676767674716c42d7b7c5e3f30201973b95c2e97cb2563322663322663322663b2877e106d8137271c7785397287c53097cbe572b95c41aee75e312b6616ca3c76028a37be18c63086318c610c63587c318cf6aa29089e4eee61d8324c839be75e4556f42e8646fddaf1c423c51718ac5341e08c7af4d9d12a592deb950d8fe7a2cfd9bb09ab9e2022c778926fcede5c883b60007c2d441e46cedeb05e713d9de2b843a8b99e67873d77ecab9e87eaf65b0d3040cf372779b77d3424cff34e7a24cff6175bed261c86aac6f5f87ca8ceff6a7fc121006ecf44fdde46b2dd64e327d56e1261a48fea1345c0e7c24b6f2d441cb6ff3a512582a4f59ed5e92cc78d3617d5cd762cc2480fd5f89df45ac61deb94f4066275b3f6e69c73f2b75837e9d80e37378d33431757e028f6ed9386bd354fc3b99f5ee1e031e7ce56af7a67e2f40ac6a34f57af6ef0e81deb550e8fdeb25e851ebd67bde2e1d13ba8573b3c5e992df6f2363c2c2e1e3da657385cf3e8a75eddf0e8ce2af718e30e28df5cc61d52bef964550ddfec6582bbb2baa36ae3a8319d92da8bdfa8363c361c04cee2b1bec5bc56ef6c54cbe279a88afaeef3509506aaceb0a4d383409ec9047aa82ae3bb9287aa2b281eaaaad4b0222f3895e2a1aae93b9387aa293d3eaf1f1e23222b070aca4e8e1b3cef46c5435594195d270212c5443251a984831c4d01de8e898050b5f4a00c0fe766a767e4330341916809a7da6bd4f6e1d09b412f1055c1ef4ea4cf51452fd18f08d6a91387d3a92d886b71381a996ad4e029c00b76333c541d3d0e55e423c35bab3638dcb47276463d239f6d569ac5be0f87daaf96da3eb3f573a2e1a1eab7e2ed3754ce0553399c518f4fa7da79eca85bd04e37c977be77443ede26bd469d02e5a1aaf72c55a725478ddd5251b57b96aad3e22ed5f52a2d386ad78acd3c8f76353c540da12a4555ee6bb0b878bebd566d78745822485aafc33516dfbc86772c7ee3fb115fa66e54ed73d491ab53ed611de574aafd46b5f18013ad56abc5bae1394c32200ebb2e47dd82588776ad6eb34eb5b314e0dd66ef281c383aebb9549614bfedf3ed38aa28a853ed5e45320edb6f5451ac8a8062bd8a3cca893b6ca2d8b773084077a7d4c5857a6571179a2387163f9a1a953eaaceefaaa7d566bd68955936aa8ee6b6fa36eb95084804d43c624fe3dd4a1b5efc286561b1f1d16cd659ea8bb37c342fa91b9eba612b7dafd56dd4f8b6c68f9fb5acee06cb78638ebc56d76a64b5bc702a7543ead081c373a92c8eaaf1bb2e7e2ef6d6bc8ba350bed5bb81a0df9cd63b6f5ee47c03a25cb64b65715a6b38eaa3a981aa3b5a7c478b45326f583c2cde49af46a51f3f169b0355452fbf1e21971e2bf599a651d967d4dbb9befd546f28a35e5fa937e6efa6526f8ca95ed1ecdb53ea0d51ea1dd5eb60bd94542fd7faf6d156afa8c9b77bf58a9c7c7b579f98a27a4d7f45409c479f517e349c8ee6fce9dc384bb34838188b675656f4f88d621f6d20d16a18c9acd990c89a131259c334c717383f6950a2f1c69ca4d463ea99000961f00cd3e7a1c615656d88b2aa804eb6018c33ba8ee4813ee4afc0434307c0004d51506ef3b4c931c2b0e5d66c9653e2107d86b5982dd2de368e0b79d0d0301412893a1a230f1f1ca214a40991449df7bdbcd0443fa9010cd15289db4adaec12974a25094e4a3566cbf2cc92794a9f779aa46c8d9d432111d72ea6f3bc8feb057db0a7893c11897406f0c62e7e70b80577b4c89c148c302a80b7878fde799e9c11a6f3989979cee9fde43abd0f5c824f9e348d68684a2812858e6ecd8f21c700af177d1443ba351f238cb671f40b7da26ef6c772c4c919ae2e72d7915620a5162c994e0f8a1e0ef6446e383324cc9c7c90cc743a6d36e866a4537a92654b709a36209b2e31a404e5e6c9c290d5a04d9b4a624033d98f0f904fc80b8d4228a199ecc707c8473277cfb985b8a96d1bc7512a0a7d21100ca5844e2119a11baae862189c93ce4423b98b8fce71304abb510bbac9cc2c995932cb2337370864efa0ca4a9abbbbdb4632745d94520cb90690d7d053e34d3adb8052ca34ac01bc9452d12846185a82ae23c999ce5d8802227f888d09022f7dd9f302f0462026cf4824a144049cb8d1c9f3f098c821b5377ef1ec9ddc86689bc468084094528ef94b65422dca8174a259b16ddb36a715dddd564c59ebd9e70f5675d36d52ef3533d31ef290bdb23ac1612814aa457c1480436e16910e05874582b0aa9f524a435da3748a9cbd0bd22bc99a5108121c6e4e38c1210779620681c16011a60a397b017e84a24c13a71f32e547335d56393d073a3dca9e03c8aae638ceb72a39ce27c771939373cec96d9393b14792678fd6ac87e15f50b6344f0b73b6c44665a8d325647e74e0f39383255a8c60c9eff8a8051538dfa3070ed96594538b2167ef7ef44ab23a6e9b104138e41f4bb08afd89f93f9a52106c5025d303ab28a53e2b5764fa9032866a366abe7d34d5e350d32c8501f8c4fc0b7660af24cba3a2a747c54c13e14c21197b04c6b08a411004e32c54852eaec09077b36af24d9c027293648bacf8450b96660052bb61c1a7fc66d3f6583c9bc76f8821d2d99d79098e1837e366a42e485e908048b0d6730b17440a0337e3669c1352186400c1e5c68514e3669c13194070b9910104ce0bae0917e38038a42d971bda3a01c8c97000d11627c311d3b4c88989410378e3ebe6bebce732279691170306c9494ac440e1490e39244a0249a41a72b0f2ce1539601539a95ecec959a29dbe7ccb9b9c1b65f1b5d23a260719cd5eea356739ce2773fcc2e299d3678806f0d2ef9c2984a317736a73c7fbcb39cf3b39371c52c1320911c04b993265da39a2d02cb6386979d212f4cc1ea8a20a49bae2b91d8b676f528fb4ec812ab624323dfc808111c3aa6d234950daab39f528ccfeb60fabe22b0a4bfa270840bdc5e63754c29ba1af715825bf2439ac1a39149f93ac685459c621c79c8338eca0f86c9057e51772c6a10c8a31254bdaa77d56edc3dddbe61b18edc3213313c02b6f3c79c32a2aa48b55343bac42498fafc924cfecedd32b2562ece013f07a7f39f64d2ac7389449ef64d07f01f4976dd895e895bc61199bfc9575f64a9680de308a44d6682db202472905b8e04221ce43d44321ca51808b6deb4e43b756610c496600afcc4808608ce7d7a444a7d8edddc235809f7f4870c8af2850f1f1c9c7d7135adfb127bf1e3ce647a37d4ad8d8e779fc683aaf86fcab7cc35470c822f76aa7cdd377f5cabc0ccb9007abb4f77825339b3967ce2239b17834cdb59aefa4473203c8d3413140998f46b31e131e6bb48fe6c67b6e3ddf682f2d7b7fe3cc895a8453dc1a090164bf9199d9bb2535aa832ebe5c098b404828d9b92247e2709ca422ca969849b412d34a9f297d9ea54fa734242e4a52f157a2648edcb98243f6697afe68e4eb08e08db24b9148420956c9672a5ba2378fdbb4573e2a887ee9fdd25e140fd4cc6360fe908fa6ed0c875ca79c524a4df319a79cd15e275e1b327378761ea3184c27e411c04bb780c94e0812e73b92e7a17a5f3e34996b91df23df1d18a0fce963fa0c7773cd893af6a4a83951f85e9c2c4f4d4fa94fea9155380f7627b217a4fff2d465125c102ecf858ed8a9cd800b2ea650b5482fd2ab53dc05f0b6ccbe652623870423fdb84cf1ec5ccd935e97f47a66e23205cb56b927dcb01361d85d5aa4178989cf1b7054e1b52e8097b4f3a41d0ebba5ede5809cb03c91966f79e92e2f2d8d309f0f16d20d3b355e5a122cc2b06b2800493e1cb25f1d829e9d0423f9a85a4490b47a1cfa8bbcfbd2cf2f38a24eed0d025140424e725288faa5af753ec3db672ff89b67e3f692cdb43f27e38f66669626d8ee511adaec13f243a1a83df5f8f9a04e048831c618e3a94505f19bb54b70d85ef39a0567c415139c6a6f5fa257339d6a97360078f2ed37159d7cfbadef7e3a510aca52e490e90c87edb334adf7498e043013bd1ee531baaeeb4c1e6ca35050aed97a46d1c597abf504e914a701bcd26606de184382c66ddfbcdb6a900f80353fb78a0262af5452f31ca37af4732e9570c8ae840d873c6f9ebf2298a5b55ce08db12042906095dca28cd3a28298d2d6fc0ca380486f6f7b6b3ec6a79507879c06f0f2f87e1ea419a55a4bbaf8e7b59e6e2d055d54894e50fc76e4b7cd769c0740f9dd49af0920a594f6e945268e73caab90732e5f1fa2b6019246ce6e9c6f1cd73d46ccc78060c8bb9e5e24b2b79d7a472bd80150bee41996df9cf2bb7a1faa43dae7956fa23e79c539a531cfd5174eb166bd8d6e967218a37553d175d16fe7b705caf7e8a4af044b7ec6c7570960df69de5751403e1ff9c8de917f5ef3dd68e49c8f4695ff63ea5e6deff8ab3ee28f46f663fe7c7cce869f4ef937fe6cc8137d3dbe1a9ff253f75e7e3d6afc4ee47df5fa883f8489cd3fe7fcb34d7c349b8b3e1ace451f0d751f22efeced9cba7c424618ea45e6c708439dab433ae7bce7e5cbef220a17c0984518391f3ffea8b3a82036e79c73fad1704ef9934e443ef3c7cf0773a8c6f7eaadf910bf57e5181faa1749141f6a7d8826d4f9acf1bb4a44febc485ebaa8829b362906e8b38d12879a4f6e6220800b203e3033c5cc112e8040c205089a68356126034db89971820b0960a0091a78820b308908448c31c618bb79f6ecd9b3af29b20fba18638c31c618e5133a965272dc41d7dd8b438e4994524a29a59cd3b54dd35ee636a7895f9c46dbb4b96ddbb6ad01044fdc130cf0f2882fce932b00a5735f112156ec94b4d463e1509b736a939e3c11382713de34c94e21ca6d5a37bbebba8e65248d6ecdf3a5dcddddb23b8a46f748d75b84454fba18638c315aa0ebba686f6c220618bd8bd5e330f2f8e8cca3238d30d1a54c032131258f72e0c4e81e38e4c4006ff4e2a3cf6893e050f2a8fdebd1df5626c244cfe1c64f8b92f6bec8d869a01387d22d4a49278e64c2f450bd3d7cc8635c4dbf007889e237f5b2be9cf1529246a697ce79ec95c9c64ea1d8d8a9dbc36fde95aa7cef558cd1a3db1bf2eba5135849a34a39dcfcab1e879b7b15e470f3ae9a38dc5c546fcd8b5c6b5aef8cdf9ca5eca1e76c75b2e6434eeb353d05bbcfafe7f90579207924f9ed97d27ed5abd43def64eddcabd7ebce450e829d873ab0b39245f5d2274a23cfbf4e4af9a5d1e7795554e383f589911341d27ad03d567dde3949e49e77a18fa693528e6a8c305ff56a8c385c295fa435cba851df7cbefc7ad0506dae464d33b1787af6b7bdda95f876ea92ae38ae6e556a4048245d33598a814edaf53af1ed52457df390cfda691f4d68d210b51e8753ab2ca32d32235356b1cf1a2a7905244e49bfa6edd9b5e79eace2f901f089b98da4f6d14c4eca8e3bc452e9c4e22fddbdb09cb6a9b107d28ef36ee863e9a5dfd2c7192ffdce780979c4c89892f2451fcdfc64dbc8aa18a227b8a2e65b2e59a2c4f52445b4aef4083865a01cae5081062e2ad0c0b5c516f2e5dc1c0781f2356d8b59a24994458055b429c7711cc7c9980ac4147b14318c6886982536288057e2449c5e510a82a793e3bc382e28e7853383cd665f90cdda66e6c9ca00fb64b0d917727e46813383cd66b399f78528669dac9403f076305919609f0cf67ab92e3db1e5c5c5680c6396e22cb5bc6e1746490a013dc3aae87ddb21ec9ba380018caf157cf1db109bf392e79ceb95ff11117d3a6f16d51e593df0aca8f6f9252d80fe17dc3e66e10127c42c7ad083f822ed90189bdf1ab658a2795784ab1cc781af3953faf1f44af378c3b682551c054f4e70e85d7bf1e3accce1100a0e398e611c07fa0537eb0457a12003c815b150ac38d629cd6957f2ee9e52fc82f6966ce4b0b3310eb5bf1c23d94b9f4bb1177c0ec5ded3cb9d4e69ceb18c55b19f5e316c732cc00bd23002c8691efb905f9e495984d15ceef44afe744a73cd5e5ab29782f682e0cf49f36f07e0f4cbb308f49c4be7193be120567dae79b7da86559e6bde37ac1ab9e68dd38d6afb57dbb7d855da71d68382434df3191e2501457e69ab5792a5b9bc915474de858038ac89dcd75bf39cb4e150bbe916875a0ef7c40cd51b6a4eeb955dbcc6b52805c1d389b3dd7acd9d682858155ff327802f9a1dd224e94de18a152479d2c797eb051f51bac88ab375a2f747d3563a47db9a0ce0164bdad6b4a823246bba644d7b84c788c8e20092d884655bb109eb8820cc320d39c801ec77c084073e1f5f39f8e2a583264f59155f3c50f2a567ef48ed5d9b78f24cc4262f2db76d82086ebdb44db4450521dbc6266f9b884d5e36f959173bd9de35fe74ea3a37ce0a9d7815b293ae244bfa895721971e39e459593834712875369f75726a7a7f349af4fe7a70c719ee4a03229135cc44e8a490361c83e67a303735682f68e7507249e0bcd3c7c88aac927e5f2e8f1e38d52eab0c873e442fb33da1328631217a3abd740fc32e44c166cdca74aa725a8053c6aa1b67ff05ab6e0c7a277a35bd1d0a8f0b3f3f2fe8489d824e41a780468e0ac02ba251030c7007c4d9e9544b9bdda4f36622e23ac4ac4d9a11053d7e5cd7d97da0df669262efb6cdbb28254a6ce4f1f3367e91a86b3dbb2848347b76aae45b11018980508056ba601dd8b99a02301412752211e7f193ddf3128b97de499426285c959674e3d51150a75aa399ec5be124b8026390e340e7c0100d8568884234b46d73d421ba89b650a8c9b37728324ff61c7be4a178e1f1ebda4f779e7db472c5b3772b3ecd44e48508e8056e23b96d1e0d795d0518fa36bb22e547b3d205870c45cf879e842a131c6c0588c315180d18700b56603460404774ba9c060c3caf53008e7c86a318d463f7674488e5d9118c04e05d81a10081b509271ab57338310605456e7baeea90a424b99e475de0dc3cfb3792915a200a10b52318872c4c4440222f443114a05e919c7d04430122d9110c4502f08a4e5b57ee6945c941f92a4af579f6de793d3b0aecd963cf08c66404237d343aa218378f3a37ce12f90cc7b803ed2cca0e4b11c08b32823d8b8050be8f66b32840a3908f3e1a142f38642ee45c65a26728310e190588c31558846101784730a0671fc558755760cfb02e4640ace29c7de405ab2e139cb3afc0e20e91566ede043d7bf77d74f434722492c9e1a0a2d31c6c02d8c559327188921e933084d9b3a3a4edc13f3d268108b16f0f79b02abe70acf8e848448057b427be5000bb91498ccdc441c1ec6f84d94c9ef84a81093ece0a640a9c0a448a9c0a440a25aae8d14156451c1f3d3a0ec9837c913cb04726fc6529fd803754f9a84514aa7869afccc7d0df901fc8145670183f8b1e6ce14371d61ee83a525711639c72d3a28cdac6e27e3a9922c79730746739c518230e4069afd7557415336e48a6d309043d4aa547c1d97a09437796e81df3b6d90876d36c1b7b008c1ebb0af076108bfbcb93696a5a5701ca22e3008cf6769398e649df6441a404b94edbb82adbeb1380d2fb03c2fdcece47bf8d45732e7f7baec5f406c439b93c27fccd2fb7c35b17eb601dd016dc0ff73323730e0267693ea3a19f9c9d9ece85c5ebc0ded5e7398ee3e689eb397f36e3007c6256ed2f173493fd748a9d72b11e6e09a798f379025e520ee77305e75b0eab3625acea1d566dcdfd8055803bddce737739cf5c8c31c618638ced5cec947c9784c32fc8666fc7b81f8dc361d7f39d3b5e68a11cafe5774f386452d08f664938747515e0a57f3b978bf3b41a59a11a595ce57eda742e2c5c1cb22b0875d1ef388fabbd6953fed436c93537ba17f818617a5c70baf8721b274a58dca11461a64fe7c16bf5aa8675c18f37e675fd63f842a4c74e697c65ec279f7efa953030c24c376d0194b0e91268ba8c4def9b29653f65d04f6efde49b9f8cf3935d3f39e727fbfce4d74ffef9c93020d94f0efae9dd6928205bfb6651736a8da355a17bc26bfde6f1e5ced9b777c1de5663174900c2cdc724fcc027f631093e3adf3d7107698608d3de5a84a0c907e02312d0e0e43bcedb2a7f280d726e31e4ed32885bbdf2bcfde58c55ecd2d3e82724baa43ddfb75fdfde3d5487f3f821d1282122fffcb3473c2b631625e44867a5ccca1a560d6b863bed3b621a215921941091d31a96b7f9f6091139b547a88b6cec94947dfb95b3cf08c9e23c7e454856c89e3a357d86c34e4def668feca06f8f5ec342098947fa25a38c71b25ea136a71e59ed72d62bd46683883ce491d53d325425ad1cdf7c7ba90ba07ff7318b0e78e0a735b10b7cfecaa06fbfa19c459876d316c0eee9150a4c054d5aac8eacf67eb54f59af980d4b705aad562b0ad60f90c8091bc0d8a2c5ba1d6b59cf3aa815637fbb67a405149680d362dde9fabe33e7fb095d4081498b75e7ce771376f062ddd9e3f3f3ed77027d3bf705d1c918658f88c8311e054473d62ceaf42ca52d40ffdb3de0c72c3aa082d74a40a470c261fc97760edb5d00ce6a2a03c8af56ebb90bb01cb4e6eca30d245ccde411163a3ebe54f0f3a325e0f8f83a4114be2b82ccf1f1a58218bcf7f165021efc057dcea40c3025c6887ae972099b4fc984138b0a722468e2f1f1a582333cf8f1658219fc057df24ca4448233e4daa6692faca273e2e0205603d0eb220920c8640d38e0f9eb63c041ce5fd07b808311fcf52f80dec7170ea2f80b7ac8ce79fac9c38697adc821758fdeab49edc9042e017c7156cdf9821e7f197d7cf19481270c7f3d86d344d0c55eb147a79207f943089290c3fa01278b19ab638f2b4a081ff1c1e6c5625bc3ea2277c7d0e8d6e0400523b45848584ee074aa4277b3ec9b9beee64905cfdb3617962c5f72374f22984cddcd1d86a75357a1bbbbbbbb793a77b3bc024bdebab58d35d9dddddd2fddfcc2967bc6599c6926939461186551c6c138d86cd6b18e9d4e2f2f55b8b9d17ae841d380888991dabc993772462691c915a413e9e40a2d5b3e11e68cd3355d11280231b7b6fd9c45b61ed289b8cc28b4ec8d8bf4cb1ed289c8313429a920935d210c6362a6262b7d13ff80a483a4cee65d8bf4d374108b479bb6887c7905cf939be4298017d4bc33f10f4864583cd2d9411dee6964583c5bfbfcb6a8205a93b20a52fe8812e8227b5f7bfc2a1120da48c7debd79bbd4ba393f9ae64fb35302fde814fb4f90e9db83b85cae76cf3baffe400199be391428209bcfcd4a1b2b5b4248d7c72e7b2416d287552367974b58c5bd98c81fb9c591903d225bac621f55e9239930cd36b59095d44a1b8905874ba4e9bf7aa515cf118852103c9ddcc3302686fe6095e7ec42046195fc1eafc7ebf1ba598881091e2c0b3178e16f7bf13c6933d04d8c55977718c6aa988518963c3b77c1aab88513feb217cf5cfce526bcc3aaf862c115ac922378f66e4a669ed327f5aed3ca245553c221d350e9db6bdc217ef7ac53ce61d87eddc74b10a26f1b824800b72779fc689ee896aef894f6477379a72f2d797b4f972e915f8675121808eb55645116e8f1e3598461ef9c1e35012f6fc1ce5bd020a6454d8f8fe2d44a170fc02b5dec2875c691d35288763746d36ae7602535cfdab5daf957675b1a8632f115d32eb2211b8067bfbc922e4e314af3c8434cc481bd2df5f62f809beb704e5dfb82103db5ee2fbce26c642dc43cb756c1d216a0ff07b8f8b657ee3cb35ce93a71c87e9a69d3fea09b1e5f2e2ae7a564e24e264ccf795567736a86219f73ae79ccc47f4eaffccfe3f70d69ff2ccbe7afbd73a2c8730fe15c3e13cfe43edfce9b173f203139ea0d8f29c2618c16c0f61b3e8f1cf586c7c8e722a2dfc04133f26e547b07a0fc06238c1744e7239ff5c8741cdec51ec0f892c1cdc7079d468d20b048ffc8de9a1f79c982258f1f8d4e0ef776f12ea28801c6970c5c3f7217efdad3e611c091b7388a778b4ba7496892110cbc29b2ede30edb374aaf74782a65c6a17432026dce00de58903405a8c353507ce42e2e2ec156af8e48960e8b6af1c8d2e13a2ad829e92526a03fe963165244e16dd4000374f1167f79217d3f8658f191cff04b953fbf2046ee6251418cdcc55dec90154b471e676984726971930dab4c1ca25c6c0f7e97919b707a65d3aaf8caf9913fe3a59b6e4c2e53925594c22cbe6400f4d253825c5a461588144a5cacba602b09ab62135ebafc68804c61454b82ad0f89d0532ebf23449eb2d3a753327ef6a084e0f094a7ec91d9d329e938bc86d53c003980c3c3b9d3524b61451d71e38647567f3dfa372e40ea7ab9922de962557c95e08b974e93b02a3e4dc2e18866040190c5e571015eeada3e9a91e3a891d5dfe2339c8455232b9dba585572e99dcb17a58a1ab9fc91e7a8a891a539acd20cc014179b22e350fa04028862238723d98c30231b39747be77b386a648d2287a0bdde7bae0516623fe3a31658987dd073fe790c64dfde8d8a3a22fa117a2487b742ce811c1e8b88ac90779af701e19cfd468dae7d4544cfe137ea05e48f3cc547a451c94b5eb2773ee81d38c31e87a0530e41975fc947357e6455c9820e5aefa60a5006dd893039bd92aceab60a1074fe8a08b1e84ea7a48faa7c9ad3abc8920ed6ea3645465de0055bd773b546557efc7cccf75c11a608a0e77a49da99fd7402c829b294598a13ef73cda5cb8f08ce3f1b390c87606f1bf309a18e3a223a0ec76139303d7a64cd3447568e1a59b65e2aa35eeaf3d24973e7a5d77aa98d7a414e67f38e93a6daceb50767f2192ec25ee8d95b84dfe46d43223e22a49b9cab139cb3abc8545c3a17e1577193153aba08adb8d105151c4a2a7698b64851c1aabb05abd8aed8ec30e930fdb0eaeaa43cbc61d5d5c981c3aaab73c3f90787b75d69a9c0587575a6b35db94991fd70e9295f0071e9293303b8f4142741b8f494a017979ef2c4864b37b5ac4b37d954976e72b1ea06c07db8745312565d00788f1c565d1a5f712961d52d80af24e150ee20e00a237a8ac022888f2f7171e9a6578b4b37314171e92620565d9613c0a59bbc60d59df177e9a618102eddd4e407976e9211e1d24d5f1cc0a59b6643b8749313215cba29a8e4d24d4fc016c966e462d5edc17d48c2aabb83f390330025322e5d65875577c5a5ab5cc1aa2bc3a5abf4b0ea9e5cba0a16acba335cba8a0fab6e0dff5cbaca12565d16f75cbaca8b5517a5c2845597860a10abaeca572e5dc50b56dd1c5c0797ae1263d5c5c1635cba4a13565d18bfc1a5afe0f4eac86409c0a5abc8546afc2e7e2af6d6bc8adbfaf2006fa99e84936a8901def5ab463824dc860374d8f002e870f7a1c3fed0014447c986bd3fdceaf0a1a3002d0ed0e1f5013676b8f7d8414363007baddb08a2d2ecd841e3363cd6de1edc0fa7b146a80f7b69a80e1f3ddceab0f6be78d561abdbf0fcb0574787fbd841a3c30bb083a6006ec3d3c35eeb0678b1b77a106ec301ee2d3b76b4bcecb0b1e3c586dbf0b8bd3a3bbcc5013b1ce0a3c78bffb0e140dca501e10fd7c509608dd0d0860701a11161c943177b11e02de10f46941a103a4a122e296bc37309e06f8dd05b7220806871972028ef405823209802c26d785aec2580a358235c0b4a110e84354211602f10340c42006f095b5aec7547095b50dc86a7087b75420f920222f41fac1110881f5abc08b717c583b84b03de5e02b811a99293ac119a7a92a75c52f603363c6ec343007b7552fe0d28a59cd40002bc3b025cdc08076bdfb0363c57c895711fac117ac387d277007b1b24f97043c6de0478c91a016fc81c005c00e9868f1800e6b0363c9788cb03f561087b490e5a239e10231f78b0d7071f000f6ec343b257084e880fc01aa109b07700f4c6104238e90689646fc94737ec076c784823b7e11162afce0d1fc21a010760afcb5823e00064dc8647087b493e44c9de910be1e00288f003e4f081e638c0e7a51c608e12e8363c44d8ab93c30fb0001f72380f0bf08107b7e1f9ec2d3911f6827e00f778cc1bac114a85acbc9e5f1fb1b246c0a900219f35c2bdbd9ff774ae46b8d741c2c3616d786e02ae0e1e638dd0558c378379a583bd2b8fb146401c3ab4bd27ee089f316f7005582374ce3879cf6e9ecd6ec37384bd3ad36370dc307d068e981bdc86e7646ffb897d867bd608f73a3c642480be0e8e15c52164c565e0b057867bd688f7f603363c9fe7363c09b05707870be1b1b257e7c659385c076b04fc0fd8f0ac74701b9e157b3f5f9161afe7327ca611604411418838c01042046100203f7cd400788f0a00a7a93878012a8c13a0b2bece4896001c888a83ff5061dc87da030f75076609c007507170990ae3abaad2a1e670a45902b0363c01b02b381c4a00d8152b38941e5371b03a3cfc860ac3c3aeb83a257d47c5e13aeaf454c5e1619d9ea3e2b02bad4e49bf51a75db9e994f4975ac36d5416b715e5b5d270af35dca5b2784b45394aa5e1a55ac3c1cae2a48af251a5e15fad615566cc62559ca0ac4a100dabf28443e92a55f433ea56852896e0e44f9563c28d1576f0326aaf208a1f32fc4add4490c5ac0bffea917d7cbd8a4b15ab22638faf37d5f8312995c8c83fcfde9af7bceb95edf90c7fd507ffe8f3b65cafcbc9b4bf9bfbf66e22503c77bd4a847bce7984a34a448ef1edd922fc1ce7449a731519ab545c2a4e5482549efc4aebaed894fcaedc3c8adf152a5eaee0bc741a359e80dcfa980286184af76aca186228fd33c34b1fa5e1a593c278e9600a1b5e7a298a978e52630cafe90329b208237d86516afc528d0fd6f8a41a7f54a317bf04051070f197f6bcbc348786ad7328bda6cc3a255d646ae11c91ac14591797f0ca024e8b15aacda2751b410e2b7e34415264a525807e53642fa308c35f90e6bca44a38259de670289d55da424ee9631621e0792e8101f4bf29b2d1c72ca2f0e2d9de94a097293254ce0b1259b321a1353490748df43e045dd300941eb92eb26420289d5219a9a43d1dad6d737773b76f9123478e1ddbef89fa052f6df790bd9452dbb6c108231d5c02c8595b02bab9a04caf4a31d5b2bef44ec11e2c4141060481ecdbfe957999b8437cf9310b2954f02c787d7ce5e0c9113ebe56f0e4756438ec618643e95eb3643e01ec5b87b465e2ca484f42269e33a8e44bd675510f33a6d00c08460000007315003028140e0ac7a3b1248f036d1f14800e7f9a4c6a4a1ac7635116c3300a840c22c400030020000001323443430502809e240e7b273028cb9cfa7abafa8f94f3785a5f7f5f9ae4c797ba2f0a9ee60a11d611b88f3e380b77fa10ca33e5b894251a2eb17a3c88259c1adae6e7be465a458356b07cf87ec2535617daf6b7610201ff417363c0430d1f8a9dc8314f167feefa4bb8151f98804770a3b5012f4735bbefe1909f351f981a7aca3aa99a0c471daca85813d10a2702048d4dd2bb7d3b67e9daa4b65c3c651237bbdb19746fe966fde74ea7dc13766e9d6deeaa61aac924e3518324cbccabc37b230a35c1e98b912a63f89e2ce401f842ec44f958bb25e1a9c4ea394f81102312a6d7efeba2c288066c269e9dca8c58764a3b5535cc259d404fbbe5422a3a885f0102d360141f9b7030a79d2f1f7950d9ccf08015d6cccc02876ec8f18c26a814480566cfa5d90646e43d2f1f54f8243d2f9aee120034b0cb68c84d126750f84e801c2fb79562c031cd6009429a8f731a27c1b1b9d6f9f8b66d330205a252c488cca63e20e3885d84f7eb5c765e332358a0e4b237e93aee2505fe8a5c6c702c604c1f66ac02eab6f614d1da101d71cb98a25ac075e27410ae7959b0b6ec15bf59793188b1ea47eaa8747f8a9774083a04c6c6d0ed25d75e4039ffb110fab2f1f0ea80398104958d9ff57bbee2a01a830245a47f1bdc877a3f8f6bc9fa799f9c461688ee06ff133f33154976181e4175358147691997bec5c9630aba5954866a19e20f1124bac80f681a7ca7bd6d5e77a4c2ecd97e3eb7e6e3f72b0c9089c42390a4a9eb0c78c9eb23c2b42ecd2901d610c0acc0fa0b3f3c4cc02952760fb27a972d28609820348bd6ad7c797ebeed80237a255894e5af12e8d7529b8b4de731fa2ada1d89f9588aa68e5e22075e4ef7c1d3e113d31ecfcabab4a7f68198780f51b3801665125f5b14badce6336f84dd798ef4c14de5e1598ab35f8b09d03b519c5b7a2ab92baa0912053623ea139a714be31341956ecbf25535e83272ba138d5722e205eb28e9a5ae1c83e1275a31d35038c9b4c3b59cdf5480641a10bf11991f9059064cf7817c7ebd68d541d53e1e1fd60be2731910be8644dc47228a16947e330e7e6e9e0993d0e64436421fcb6d1773f614e8c7dd61693e32e818eea52e81bb1c38aadfc0605b5a2e29db75098bbce0f616ff1f0eff01c6762e894facefd7d58860bfd10bdad0eda62b80fd9260091489403c9f076c65d95c896efec9257afc9cc280a3f09a247c33fb99c46f70e5343c160b5f9ed4c41094bb5f0700351294b20a6331e61c23586bb6c6d810f8fc58255c5cc06e6ec2f260c5f418c3e63c9ea94a838e7316e23a5640ec898cbc2718bbe8b9b29b01afbb8af625763b0a3a8f5b0e783e8383507ec38b8c94d7fff2c50a7bad38d3011de1b5ee0454e164ae1184d257325e57b424082935ae0ef05845329f749c5e97d62c69aaa854c96affa5810d8f3f8cc640400a1bb2a7315e72233f490753dc523495ab60e7a26114fb087c63b45d69acaee1b08ba77c8d73199f037509c966a87c975c5f628c5e6acda9c5e488df01f44428108f738c3063f2910434537d3061d139af069d6770cf98b860626a53ea3a267f35a6aada4ba60b3d4e488b4c569b9ec77c03d8ac1afd38e29b731e780408eeb2e9d7771053e71e5534a06d944f261e291c64a7818b69c35fab0a8fff76a6a43a542adbf1780ab4df2e75cb67fe2b4fa28f2ac19aa259b42f93ccc665f663bf244d356ece7b0afc64921285188fe156459b65cc70c9eb565aa47d674864a6214ca41f0903efda5ce8ff2ac08d7b03c245b98d57d80913552433767388c0b090a0a64853919c06680df1cf0ad8a97956536549bed835791015801f7a6bd42a20eabfd73e721332faa617a5c732ff3b6231f3462351483c1e04e51a783d8ed7399686cba38fb4a91d21f093ae439f75ef99caa58afbc8061791376e2005b8418b6d5eaaca8ecbe2b5f5bd0fb1d1fed9c1a57e63cc2c72a03c67174d43a9860d18438f1a600c30705bf93882097fe66ced31b0d01c6133dfb52d6b4203dfa7c86d11acd54c2b80079ce99ba637de86f528cf691b5487a3e8538be9b1e0d569ffb601928a6609a16e55fe7fa918553e483cdcd6bdcb8756d53ecb35ffcc03620cab5fdfe8dd44446fd387329bb355967edfd058e0147687b755a130c461745be0d32b2a0c7a114a040947a621e18767b9bd5c6981b4a15332ed5a572594201dd962f21df160da67c2005ba51296c003430214e51cc2091a7672d976c9ffcbdfa67302cd2ea098887338c4628eaf4bd35a8633fab1d930dffc3a9957b5432f91213f778f3b8b98c7c7a59cb71e10bad2717ef5a05a18820012c7f35338cbf16e3b86bc89be8df7b93460e0b9e123189607f91214ef670aa6f9cdae21cf44d313dc9eb369fa111d7dd6b1777e7ae8dbcf36400a151b66b415ba5d12972a560e35c93c664a24eecf63bbb5f4fb7d73000c5cd3c344854c2441a8724a7777be5e1cb62d7e1cd495b8f63fff6e4882252827c697c937024d8c20a4c5100f6ea2e0933258e112349621cfae133ecdbdf5cbd406493cacb4d28ac1a6805f949f7694c88608b4e10de64fe69c3c99a323c26a4afac079df3e15066d950dbbc0ab961bb35048dbe1c7474e3b3fdf286c815202f5a34526215cf1cca73d572f5c3a810ed0409796f0d68295b893da01ae464f7757adf22a89d641eb5a18d0cad4ceec072f64b6b07d60d99e4ecfe61edf6b942fda110f7434f5e8a24081f1ad24c4bb43019e75a73ec70fb983c2ee787ae0e847316728d4d0fb1fade96a6778daa3311fea7ec84a4d265841ff1cf393742a578b0c6a8175edfb833a5136da1d32070071eda7302611b6e1e318b5b5ac5a6fa5233fc155e71bbdaefd73007a6e6ae5546c489db6f86488c8b33f7220ef218d68878c0339e4b6c092a904221938a0212c10bf821b559fb5e7bd7867e2d2cd19cef70e44ff3c6c072b16dc20100fab1019c48bacd007e0b81f5757acec2c1882759a5459bdc1f7a2e0a58974229d67ea4cd5b891deb660b43e192647e9ea3b700a5af5f1a218c4fe6c36214c8a947249480219c98dfcb5361200f4dfa8684a09e911195cd7cdf0eb190ca228ff4395e060185d707ef066909be04ad8e09cceed1f5c067338902f187d46eb7f3ec48f2fc81317912f62846e0ed3c6e13a6e696dad8b11a23c84e8057b9c669f3ea607f493a3f2b8f99649bc1ddbbb3faca517fcf293d66061ea88d8430d62ebf4716d6e5c524f7da675abf9f659fc67cbb52125e1fc41a8057e9ae460de41c895c7ab2e5f34e608c89cc2c6ef1fe23eba42a5ef9ff0bf51340d89fcc7e5174d7ac6629e9ba98727b9d090525ad8ea5dbe04c7ea255e21ec7121bcf5f92d678345b40fd1fcbf8992a14a0325ff2d7ead00b660dbd9921204d6c353e108ec8f3d6187cc8e4a07a0a7e784284777f4a34e363d0c77ad694e6064b4368503630d130aa917d56db09408f54cfa8b442898a04490a979a8d9e849bc444a4af289e6f7d3f91b958fca8b22a5f5dadd4f537973a08e101e9925135cd03561cee159f0c40cb0880ef0aea12678e62df434751e4838630d5a4735af0624417edd7ed0e2e4ba81371e77393252e9952c7c06830ee722f9bea2b87603723000dea28d0e02bd4d9d30611621e43971fd274f8ddef6f39916a9adcf277d9a3e725dc6f2280c6a74130c5fc4804616e5d78ea55abf0294fe76570cbadb890d4327dd72624ce3e21559dba363e2b72c6ba414ac3c66dba807152216b41bf4e8a07a19ab57dd6e0b62f5e9b9d9381a33e14ea797c10e04939f219b7341b2937c9732759e00ea220bacebb588fb49c2214d0c9b6e0b52ba300cc05364d131911f48d0ff35613d8384bb57ea8c98db50a4dcb1f43a1a6364725ef284bbc2aab752564c3a3ca9cd47c91ad8de805cfc3dbae548766f94a9adf8e9cb52256c6a2ce0492bbc79ecf229735668843b58ba5d28f1719b65f55f7a48eb48501fe959af661ee79b842a2c62849bc6c5c6dd0eceb0d5c9b7d9bf8e311d1614e489ce7d30745d6e06dcc4d6f64f7e0580b3ecdbf5f7bf0f28a61b5f08441917ff20b0e9c16a14a20b007ff2d7783a0eb8ffe54a1ceaac6c94dbc50d742db975a2c7dc51eef145dc4950b3f7504cbbd0f19f8fdbca4e0d818fcdd21d3e74a60dd643b86bd96a694a73b2d713062941fc4d1496934f0f83ee1ec1ef840e780b300b96e250466ac817ed2d77ab8aa6aa9c7a4f995dd4d44014a25c719db18db3439e052a5d03d70eecd11a47effafa138df44263eef0cbfde85f582dfdd6f70f152bac1286f7f55f8cccf61cf72cb123fa47af751f9a32d2c0db429e68dbe4342f40f46b0ca8c342228e44d213c3753bf7ca1c8031604c7d528456b3b06dd14f54ea31e5c0a26d7814db647ad12a0f3c4cba34e563cffd7fb3d882a7ea906cdf754e745a3a7959600ff5afa9b734f27d83842eca678ad1ec622ccdea8823c3f3176b8efb7115a05e93f0ad50fb7bbdc2e14895624dd18aaa35a7982ba641340a46115a234cfc353c2f3ab336c6dbb235179d2795823391c08c81616f4c1562273cdcc3953e44d68a3ac44324b9713975a9d9666018db023b767327221a197b372351a24effd980b2f79843c50ae1aa0a8973b25d54452f0b5e32d2c4d255be2e0826ed19e6935fd1a5f86b5873543097bf1a29f4d57cc30b8d8fc7dbf267a0ea907015b2de5e74da2d229729db0a126756aa208e4aea62a10c6002f7cb3d7ea953f9be3e910181139440cf6efa64bc77d83ef51da0956b0fa8d6a78ca2d1a881ae2ef19a1ddfa1daa0e0df668541cd1a610e1abaeefb716a6c41a5e91d1ef766b87db8d5c984873f21a4a2e3ffa1e70dc202d20c6e057413f53e0e3b165a6e8feaaa5d5959e90e19533512710b8ad009060237fdfe9ac1d18833c6433fcd360c4defd6216e0488da0d6ab156fd23c411eaba2a67c67daa8e61a82dfefc82eb6666112106d5ffc12ac5947ce14afea363a3dd18587b0fd5ad4f0864d038248e836ff29ec94eb42d1145aba7642f76effff1be747288c3bf95325e68c0d8db37e235012f0594144fed435d481c6e6071c585c515c2b7c52eafc6617b1c311d0e7e712907e0a6123b5add121b6bef703510ffc581af6cf215b6cf17e6312bed4ea02c502d4098e382062fb1e76ab251fea322a831835bca9360252b327a2d74b92ca0ce5b9e361e7b5b94f188a6c8c0db6343b938abe5ebc2393a56cde099717257df680af80bda3a3c137026753674766a877961d68df95dac7ff740e1b0e8c04d974be7a3b6bc26ba89c2e82ef09e16c943e505eaabc79f41787dae76b89e39fe537b18a2544108d30269339c5634cc1552b23bbfb9b305d2e840621c48924aff6cd9596a3f9967b038f4adbb4f56098986f5ee3c29798c1221c3d785ac70188b3469da04a8433aa4c7cde3a917406fd3fae23ada1a48f54656f79b39272e9739aedfb458deded0df9262375d4d4bd2ca67de5d0605cd3ba88ffd93dbf61acd05b80c2630fbb080770cb2f129dd642e9a0dcfe8a38d547b879454120296ca3d12c61ec35581988846555f2b083092cc13a85ced8bda97f6bcb1b7616011da6778619ae78ee017fb0c92b3a701a33043667a8e24d78e152325d1cc50141819436286990b197292fce22a26fa396c0828c486c154ed1cda8e9ae76b525161d05e0c8a00f92bb87d822e38d2b8e638966aa6288bf478cc802e84d1c0279c3284c6e2a33d93a8b5dfe980d1b17dda7bc8182d1afe2524c7736a28fedac880d3e2a8672d5e98818fdfe2dd2bbc8bcf994050363f6f2c146fb6286c408e3c7090c3d513eb82d687b8f244342ea1b1c72eb41562125eb46f73df31d05e88c8229b38743c801665012cca49255865c14aa39a95a4146e48aceac6453064e6dfd03f04cb075dd6822194c68336bea0400c1d7178157d5851ec45b2f17470978d022ff3f7a05e2e476bf494a79928509f286a1cae8876a8e454b92cae3564232877597626300cd44083a4e39b8ee40a3f388c2123f3e0db90f81f4dc16cd1d6463229b0e1cab1e10dea415a74e9d85e4c27edc97c6978eea14e94d413cf18646d82d19f878fa2578e4a83f562315e5295ed549d5cd21b4103a24b291f6d8943bff8752025c53baaf59bef097a794e50d07b8314993f8d3c8a394ff6ff45bcfdaa3855390ec23fa29a4351621a57b2936e411d0bd25ca9a137e1fcc8dbcd782f015bfa12daed274287ac03614ff1d7f2625e21c2a13b2229b2b17ef07a7ac77373999a8c66702ab970e927d7827f23569319de6813b7ce4f281ce6230b78758d8f40b1798c16b81b08b0cab9bc428b9db4e0f7ce05b4448cfda0f86ea49fcbbc64683e617115bd2a77b138e597a3a3c2112da629dea33e01577c731d4565292e9531f27afa3cd5f34ee87bde77a8d395b251f828688ba4bfee7a278ca47a3b1fa1bb0801c4edcea6cfddf3ebdb54f7f86ee04c769c3ee5a1af821220775aa1d710567eb8f5eb9bc859428be2adf4d3b15e33878db4af91a3352f1ab3deb99afcec144bd581a7421accb999e2e07a7db1d58075683b4e9c6a1df076d4a37ab5504be94a0aeb9befbc5c28506cabf43088ddcf6fe345df9b40666ad3f9d371b701e4a067160501ade5fb513119c29d91cea6233cda84a00e64419d8422f00e9ada659d2a3ca0012028a0b1da824eaf56cb4208d769a93fc346136ff6dc3515dc39f1a96be2fb81fc51c139d49f45455b0387e77c4df82c9aa60526bcab18f23209b163015d577364ce19dccc1adda7692c67f62296af3815432995fa87eae8297acba443292cec3b6693e580b5b757e3f9b905d4394183dcee753d5f33ea83128fdac645a9b5550a2412e163d88d04b326ebe7ac61d0e01a94d1bf7b5a1d0cd418cf7554031c8dbc874eca983d83735c5472c99ac4b4ce4350e6d31023666504cc97b908cf8d852ebc339b16dcc5faffdd2d1b021c4733e6a9c80f75d7f2b09990337101d522d2322da98b4686d59887d60b052ca1e01bd76ee881730fa8b012a1c239b74d71ebb8bec23225ebe3fd3adfe6f09b6f7366653003ea06fe0ab671622d4713990efc481912382a0f8c080dfa73b28b82b9b2545b8fce8ac4185c51321ebd0401a9588e6649d0b190e1601480fd6471c4b4c2e17850f72b9e81de177c2fb9058ae4c0d13f59c22c5666b485c703810e07a2b90e05b3224ee286f59bfe59fc8016a1434dda2aae7f11b364083c127c73d71f85b52fdcbf76f59796eadb974a67e81219f101c0cd734009baa7a8bbbeb39897c37648eca284f063890afa16bb556d97afe0b9f5e2b995fd2767a936a27220192684821976434a4bffc4d1cb87fbe57239a0e82579c565824f06e753233a990b2e216258af209262059a978196f54a3bcaf375b13f0455af40e410a096b020f032046cd22be7ca88337d2845e2da2389dcba5f093c8e45b5e5f54c2aa08c4766080416576d6516dc19ed8cbf4694b1905414f4a249e754530d13e96239b1716169118139b4ac9372372b17321442b7f3e007ebe031742c0d71603171e1f19f92368b1490a41addea0e659fac700a8d9d06bc8b384d576cbf1e6439e179e23ba2b45646b42181647bc455f878a66ba255a26cbc09b68680928c1ac6b6ed50e55c3a47a240efc690aa5a18b30cd5b265500a5b405095a75d626cbc742813f2d2bd9efc5f7d44c13bc4168772333d92acac92ba6e6a14c994838d5b4c01840751de368b344037c7c654a9a2b5c603028b5004f9376695ae9df52355432759bf17b7e90c478578ab33745d587dbfa7d960e234235dacc518511be34ec5a087afbde203b8da3a9d5dfcc03e3c8bc18bf36e97d182e0dd53aa1e72ae908f6ccdc3ce8f760e34a98dfb585ebffb211cf7c8ccdb3566f120caac6007e1d753cf3e0e3ae1bf11c5393997e62e9a84598363ed991a89a28c3b0709167c4b3e8395112b174d8e74cb3c7a5b7b5976791ffbb064ae1f4f68a27a30d5144f03af3fa5b41e14b080fe2090448d1c287f4d3d12f00224741df08135cdfa1e54409fb2f6bc7073dede047201bc66ac74368298a350adb1d922dfa76a0a908325a4c48c2942e838a875b55ba589cdf56a712fd2ffcf90e2ad92689dcd82bab0644db5c8e32b2350957732a37debd1431686a0789f5d3c29661c10bfc40a6ec2272787eb389b1818669b678f0cb4afa1ac610ffcb8010cc0f2b64b5f5de43aeaef0205d450e02b4bdd94cc47c6477f981d8556cfe77e12b8987572ff8fa4d698d297300231ae02a34cdd374c8d001d93db26791cedc04780540527f81b439e4491a983c6071692e7a915efa82d3175d7cb904ae4c80b3701a56ef469aaf144c33441d6b00dd61325513bb468e47d3fdf1f79718420f2850c04c0a7a8485d955e6121e57da7b5b8c9b705535309c00ce9fd0aa8a4239183e1f473b765a2b51646124863cc5a393e41b39bd6e261f66ed238c3a8adc5bbcf567fd42abe68396008ca25caf4281e7eb528910bc1292e8718722177566290cb728b5297f219486e00ae25c223d070379b1cbc31735a72a175f1040416a2e5a69537d86d1364b30b42dbe45aa2ada5804c6ff891b9a406d2ef5a622deeaa719f0e2ff1590953a4c9b246372de2d82f007e458d9c4dd1454b7f0a7bbe87bd08414f73fc20a3fa3afe71dada26bf54512093d3fa45c8a660020a8be8ae57236756c20e2bd9638ae22017dc6cc236d423e40758ccd85f87105e6e68f17fc8ee137005ca53eec5e62d1888a5d1e03ecf52c72f6128a1393ea257e816026d9eab7b8822979e6e4d3ca7d603659a90617610a974ed219bb8c071524b7187999d52ba129afb43bcf0afb5d7704001c0888d510981d8a1ac1420ae88159486c549573f956965442cb53f56612cf721f2e2e6969295400287b686832b81be48df362b3d691f0083a0255b4674b7cad2ab2e34d312d6d3322fb66e45f7275630cf85b6230e1475026331aa24118ef0877a4b5c48ca051ca6aa0df3c21f673e513d273a22cf139764db390a67969062d9ffbdea4c898010e1d84a18fbe20375a28fb086b1f90f69377741ecfb50d4cdcd2f292ba596fe5c5c113ba0e46dd4d854efa804c07e42b002e730b8486ebea45da9e4f5f4fc527afcf05cfa928ed21cf121d63076c921bd191776ec7b881037aed4a954b37beab1c32360ad18bbe2e1c11a6b000bb9590b20b6057738cfcd5eb0588204a3f4fc1d831cb550d4064b2ddfb150ee8ce95459fa3361050407008e5b3176ac43380b3754acdd8da8d8c4f474d864647367242ac13ce57724ab33bd822dffdc7607008152fddc28d405cef33ca9986df47421e3269d3a8f44a96c594df2182393c2c21c2a7a13ec388977a0e8195d39070f07afd812079f957865e361c9abb7fcee4680db27ebc2da76f7bf785a5d4b6ee17718db3e8ed6a3001edc00ab36bd96e27f1f34ce3bc21e6fa83cf4f543f2ca9519a918477a47c0cead2e6c6feb0ceeb412ba1bb32328cafe3a49becb488401c5fa6e7edc7873276948737904403f2f602dbaa8c8b847cb29cbf92e8ca105b83de761d4b5cda24cc79b89b050f7d6758cebbdb26d2050abee65872c1c44c34b81c28a7e246db610936670df3deebe3b3eb522c78f940b6eeb16d3f6bc968cc2bb0451634e901c2943ebc3163c67a81002b3d838d310e5ba881ed830afcefccf909f77825736d7a124614a7ddc0353990b88f1583aa58f2cbde201aca960e1ca1c9b8ddde932cc5bc5d051c38e5861b876ea7338343e02650e1b604b8ceee67420db0efb3ebd2daa5d916880160e577ef46df0957c66708e92de6f92bf720dbf9d0f24dee86c784cf52d829827d2fe5788e17335c9634dc5d3296bb810747b10430a6a5841d868d627662902af3cba5b85090bd0308e5708e82de033ce1b06819bda6228526ed24827cc8fb61c5b1026588ce4923ccb739906ab80cafe527c4935afe14a1398c54938c350478ea7bf41e10fb65e7549b5c2d7d58cf616dd3c7794ae103457ad3921b3edae534faf54c5fd9e6d68ddf0f3e4b41b221a8af34d08924fe3833ce88974795a2fd801d369b9db7b7ad53a2f8370ed11ce787acee7c43025faadff46c721d22836fc53a6e1d3b70cd20a30bf2a07f696ca1d798bab37bae6dd94b137d5332bf06a8e186447ba56e03987ab91b7f1750dbd911e099a4a69b42282f6d01cdbee7bd97ace855f37cb7c04eb2328421369ba2bae7936b6b72bcf5014d35ad97705f008e3bde60626f207197bf7573501c2124a451d225c8c6b077b81c5eb82076c2ae7967ad752c3d177d42d388b3d31607d86e82473ad1d78cee801a50873080652cb6bde701d7652b0a19e69809181ee6d05a41522805a843dfd3812318b1e9d5bae0369ecbec7515882f2e42043cd333d3f46aef3e4c85b4ae63ba797c891388c7bb2420b1c0200801c8a451cb06d97a3f5da7bd1fb7642da1e52805757dd168f2f588e36e20abde34e1e9fcb466895405933a73620626528d7c331da979dc7afe18af33eff5843c7afbfd0442ec3d0e5da81384de5df609f4bdf659c7f66e29646d5f148376a17d3925b55fc00f632f3184f966786848c01f38cb6e1c02fb3a9825c6c6fe171cfa031ecf3e656072da1b4680fd626fa937870c8d35138b56e6532e279f20c7abc4807f33d34a26443ccc8d9e37cb8bbd79fd599229dc5b2e450ddd45229fb408e99c2ec7aa598e53733b7bb42d281d40dfab01d20961db416cee17b9d0fa4a97bc8ec17d2e5800bcc7752c8ae8a6ef3539188a007bb6515f24946e1d2f1016489194f534e0355a0cc6f490882fdcb896c2cdaa2b719220c814406527ae1bb4af44bb98745cd0b5982ff28bb36bb5a103f873002990fa2540e922249670dc3f4a89f46dd397c62f20e2509887292095dd9324908ddc50245f3e777994d501c603f47abfda16be925a2fe4c9db91100560722bb5a9b9303befb010b72c0cc6189d7160f8abd578d508011d6c0ae87a3d19d7f13541f3e50037159bf5c8286604edf6f442ea096ec0168eb253eaf5410b39c30a2e04bb8dd4144a10762046821569055fb539f4208d0feef2192659f1734abd03277892ae29455a87cc921a836e15188e1fb8713dd24e12568449929ccb4b8608d09b3c7f6e8b1c73e1d05e59efe19c082c84d760235fd4131084cbe1f04ee4053769a0f972dfe3718e4d8464d97277a4c441b21a6a0cc502980d54cde0c204071417d4b16ebba638fa048662e4e08bd6d9c40bec96f184df22388571c28b51124839b63d9f0c949ff6c3fed24c4edb5555ccbed5af1c8aecc1952b30261df1560988de8b62ef2e217de28ea80a712b597a66b022aa12688c58f6d4769455b10ae6df45e82e9edbd034c4ddff5001df88df4a9d210b30c6ff9fc5f38dd5dd4c9c98281f069829825806344f2ac8b22325eb313405491a3d39009defd89e9c6c974f46d4f9c687fcc0c10470005e972d266604aba4c13b8dacd46bfce08c5662f5b0324e502e700addaa36fb237f4765832211ab8ff3adc3a4b4d00bcb0fad674870c4453c643a88e9969fae768124061ac95c2f81f647a7e50f7b249ff621d240153bf9bd40dceb873c62df9a35d32af42e254414a9b3a332f3408e8c811f620805b8c8265df26f000558ff1c8c52b51f1dd1b7ec194a3fbb8d4a3476802bff922677957446926381e7151da44185e4d374a3d7c910515a07fb573a3a8f9a42efce8a29ed22bf6d735bd5b7452b075edd79ab4524514944999ea9d6a027a3cee93c050e51eaa2a06c20c4adc83da7f11e416478aeeeb1bc4e22ea795b81ce195a982dcf4329a5a0026857ecbcbe3b65b008b2d3a341681b61d145729bd23c22f330f091a46a0b380c72468de105c13d7e6daea26090340c8c78f838ca4d154a2d02dc1471974f36e3d18d98a1333d059ddc60d6d86ac8b300f7c4e16bccab86c6560bf1c04142e1949b80c7243dc60cd68fbadb110548fc81ac943abc4befb33314e6f66f52cce6709b86b68157c66d9f4a28d4ae3e4b08bedf9e3625d3ca683386b71f263d5fe0a26b07d518795518028e84c107cff0156780de7245af19ee30bcca1e34cd34c5d5fde9b9a2c443e59b24bf9b543c3e9390f1b05a47288dd1a8beadab6c53fcc95de41736f3910fdba79080dc76c779de824738b40e88c0a8515f6e3493b544d4526a2451fe47b3f6f8543848185696918f6a372f97d0c4cea59360d41a84ad7c92680793e35bec91ae630d57d7a62128bdc79c82844535cc6ad370f3dba3332d3c5ec388204399faa4fdde3c41efdc4f30f09502206a7d4736959841bd68dc71fd4baf97e6b3b2d0602c0f78c58bb4f69f7273eff8fa59868c174d84f71204f186e4530aad987ebc5327b60bffe9ec1de5565f505d230d6caddc213962100fd2060616a712dac98215bd3aac9c2c449c49af7e44454ad24081b3c5879375aed6da3635ff5ac6def1088b75144732ed7a3037f3176e0f466eedf032e80dfcebe5a8e4f46213f0055b126141f1cd4c1009b9cfd9016a7171d0e74fdbdc8747463bfa4031d5dae58ec79ca46c81199dfe66b40d7a644d6d539d51e00d10d1e2a4b971a354321e09a27dcae6d3b2842448bb1a1711dc0c835b4fd6e613d370e13bc424340d9e24179a08b0cf68a682f9fa3b581bb7a15dc245a3b34291231752182fbdeeaf0ad701b5964612437b483291b8e5031ae8a7139ee1e9fd95ea02b5016b185c5930cc14fb59a6557f3d9656b87841a9c73d2631e41bbd626e98b474d7c05bf6cb2bbb8d947bb3c7d0a52e2433f24d5cf8cb4c1c25c291031630fb7d24cf9f67ea31619d7bb6ece7128151c8ea8dfe20532cde6bc7b94609dc15a6c6b14f438cbccf54048bd6bfd43adc4711066f2b12eefe784e67e74e04f412891660db4e4f360fbe2c49c037f166e74fc8a6b591277c7ecd498fdc3ce5628ba49899c440d74bb215abd00f6c990b05ee4f66895e350329876195cd02abd3072ecca6abc21ff45e4d1d7de028774edc2d51a1058185a88810f5f510f03b67a62268d03b0129d2231896ecd5f7be7f2c141cea791b0669035ff18098d1a824323f2af55336fd88dfae17afaad8fc62cd392b2a35d13f74c0f0c3bd413ede5f563a350c8d2ebac46d9ce49e8639c4fcc70ffc90734b9bc251489959ed79b6be7bb4318700612e34d4d88c7148ca13a1ae03db2f90736be5c922a05c622c27d67f9b6f55c1f91cc56932a36b740a8781ed3466c6179db00e1d5890edba24898d06a3c8d5653b395b924a8dad5b95195938cd2d84e5e27fa6674d44c71414b53931f12797c4090d90bb50b11fc6370d985988e0c476a135f9420c5d912f9137e4eeb3893794e3482684ceb560d3e372caa872231ef913d1291b8f6416a956a2bd10ea9c424c5b89e471183f5f8a9622db77643de0dd76599497e83fa8995841e455775d8e82bade94975f89d91040b206d420a0c9cec19359bb6f8b42b9fc39989278ae3d7e776e0deb6ee6c02919909a4ed89da247308cc15884ccfadb0698b1cde69a521025106363c97bd2523f9f05739982eb0957d5e75e8aca63897a54637666ed9631ec5854cbe97655f2b033c28dc6c76a2cd1ed651ade8118b271ecaf34896a1ef3222c344a06c0425c8d52dd20edb8344be1620ddea44beb80a39e66a6203fbd1d6bca57f503fd98dff73322a2078832fe09163803cd1410b1485f60ea3bae971f7f7001b0614aa7f90f838f619a382abaf7c0822da6857e2efb4ee4459ee2b71998f88821e1739a5e2960c8cfeead96ca798531089181c8061a47179090b23d1bccd40dfa7abda93d09281c9306a297e292ab0795a5ab069d1bd246769c1590c032c768da33028e009fe37895f443445e076b2c4e83472a3eda0a431245ad1115c397aa9e826651531a1066fc64e0fe7e80d2494913a7b7e1af0745ebae39c77e30e217b3481cb4e0f80d88f44b1b64870a1bbb920484b56375fd2d58a42016a5c3f26d6bac4939456c0945224b9663115f8a9bda32d189b5d0004325c85647155e9f8369686300d6fe49388e9d901e94608959232c6607842b82aaba4183ac9b1fad93876d2219c2a293f9658835eb7134e8483cdea2b6f64ac7e047439a10c2919e32ee37a00dd8152c4a9bb38d8a93b3afa6802b1debd8c1db9e8e646c1e6c225e53f99d9b3d904aca0ade3376fd9fb4ed7e8b716356ddb8f0906e3d7832033a41b07a895c2f49e18e5086f8c3caff827281a920850f2d130d967df6b11ca699b83f3b4a794718d1b4812b60f670a36ad084c675a19715205c6d9e4534e08a1bb529946afe6332db92c1c2da84cb46f0b148f27c24ad7355df3004eb080ab245484bd63288b4f45194954b390d21364065818988638b0387e40711775c62052b8158d55cc04e40f783bd901159356dce33c03776baeef32d84d44e0191a6d0de1f27694bb70498694bf83fab9cafafd570342026c09574fda25d4e14a38d3de76ed27f794677c44d89378b2063e56a5f94c49d080e0a880e50a5df8b56753d9740194c8d86bd98c6731300ad0d441d08407aea4d39d541d8a6c2acc2442427a8b481f1eb7d8f62f3022b1cc5b5ca82f385161d32cd192984dcd2ddb460003c0272c1c3a1a3ad2d7a1bf0d279f6198d21a8ce889d0778867b56e0749369abf441344e1d81f59be1a88ff6610a757deed061e524fb6720b90eac453de73abb525c9ecb1cadd4f1dacfcb097e6654a56c1624b48e51b5bbd5221e1080795ab84b6e248d7f1e3013b2793f7138d479bd49e9916d388354d1838dd7e2aba8e6576483d1f6df894bb62db5afe3525a9b6722b01dd1a2963995245046b1df8f4ee0297d051a4ee9361d7a4f139154a92aef26cc0f149e38bc366c64e743e733f3b5028fecdd72299a92e74bfc341f17a2e955365657b4ab4d658441dd55f84fda0ad73f4a913c37e5461014038ebabe42230f5a4b576f6579458db46ba4e90d422a8966aec45b15a86bed4a1286a1eb4f0aa22dd354d097ddf8e477188ddff4537efa28b842872b279b987aa7658f1b007d570ab1359e2503dda199158148c50340764e020385e55448b35ae0f662b4bc86acd10c1fdaf13ee952d5594080c1cd73d3e94b9eb848f6772ae0fb8446431865832727ff775c6dce9014bf79ac8074fcea82768bc5be04473e828a91c31ecaa9b2e81278f7a09247a80117b63e4004689b4d526e7be17f5d244b7923a4f8f3f713a850f7d6d3fb7904d5996c0560713c5ce58a65f76410481e5008a3b4013149864ba2967bae630b88610c5c6f4c891e5089dd7f73b2a58e7316706c5696938eba65871b07f1285248076d5d9c3cb512fb7fe49c785b9cf5118a7077580cfcc671468488c03cb68900f784a746910072022d67617b1dc3b8964851beb6dc2530c80747b7ba4f6a80ad5977abe350b193c8f7177cc0a40b0198b27b8d86a996eeab8edb8040a3b58252ff156bc826800fc6ab0224f1c81440895efed5148944c07c945aca865e7f3a80340883878758830ae7d72b59327defe294278616c4b919b88c5e7eeebd8bd6d0509affd48b83985fbe0265be456557197daca1e1d2a3fe0a033afa1d018c850b522d8067123ae9c5d083b5a0ac469ef687fc249544e24d748ab508daff3f074a30827bb694820af853f0816d76473f730733bf088070782f99d46dd938ca897290ad7e35078277208d2a44fdc686451293bc8d5d606784d954780eb44a0d02a86cf979583db73dc08ac3117587ec40c5d9c6ff51a092137070e826b480a7a1a3363857812496dc94387038a22e90e98f70e0c3878c0b007023cda36e2cf03bb9707aa4ed71b08c66006ebb1e40971903080ff90943ea8bdddc1c7001d5c7dd72fc3dc922c19b94943c80c8344ca00aefca14a6d327b0cb16ab903867bbf3ae67eb952304013c72f12c57d035dc5fd653206b9e40540b5c4b718345310d40c696ca1b023b3cdcdec6149257cee1e116865e0e7aef98492e8a6e82b6b22c28ed0a98541e18512a5a0a8500c454a4d7d760841e66fcc54145180c3aafa08f2e912b809c2b80d2d263d004419f8f1fad5e038bfb05ea1323f2146abc037e8adfe133bb1d06261302ee68599317bc83d30fd0b7612208f5c798ca94f00b0e0136951c1505a34f2aae5be9fb687de715575206c03366ccad3c67cda76fd64c4ef4b554897b10c98906dfb54c05d8d706d4dfd50a6bb11a88787510ead40d2d46eb7aa131425c02719366f0b3e0ea72ea0117892bb38e891aa7cef30902d09bfdbdcb8315dc7cac6f53319dc2c709f86f27846a12860d2f7ef20e9f747209066819ce2616848334556f60a59b98aa0212073ae8cef17087e5a4574548fea56900ac470f6f6584462b7c6288167f55e75378702d7323dc0098a1acebc0289fe3b636bf40a5589749445e2111e9231d850eda0bb3fedad31baefd4a5be0a52caefd4b926edfad88e7756d91c9d17fcdc3febd09df8938aa85c7aa73f297b9a8776ca5c6bec93f991626aee9ebe227db78c8972254b807094bb7b80423843dbaf7edc81301cc14400943da6d148da4148260d4a941b1196632e2b0d738837a9dbe8af36e13f8434464b3b625a926183339eb0fb10b8fc3187d03ec48cb48dc63112984fa9d6a8df2d7bd7c2a4914abb2aa9625f311f8e92a5427d0eb4392875e420bdf4f9f6f355a2b53a8acdec346d67948e906dc9c759bee3a6056806629b1df60d4c1b95be30489b66d2a201fa1696a5c4169c71c63193f26da6278340d928d380d739ae9f37509e3e5c087c411b64f0327fe4be62ce0f9d6323086f31e19513d6374494f8fd136b015ded1a69a59264b8b1845c723fbf0783122b40127ac3e148ecadc06de4aa6d391cced588cb60a3db1b872372f99c6da06d98a94d05676ffaacad59814264b96297f876695b085316da1137fa40bdaf37acd846d7945ec6e667ad67cf5921269fb89d1493aa9ec9f1c66584a908a03b7000bab0028026817119842b7dcd70d8ed32f02106001b7e1880b6c1c1007c51fabbddb270dd3a79fb97657597ae1e6a500bdc5ec4c8ad39589f27d343915bc238ca11c8f69e369c8e9f92d0941cd64a977c6ff38f307deacb4991cf17947c8b55193698c1f1a199dc22e186bb91d2d25c9459a03ea621bd1d31c6950161b023c32cd3bd11f8235e1463f2702fc0e00bcdbdb361c6845dfb8f6e89c991226e41d12aeecd86a60fb971d9fc57b4c5a5415257cfb677e0d47ace3f12458aa44f3d1871c936489658625044dc375d86f98c0f08dbcb7d275f52c75c16a00ef19e4560c339d4e64fb74bf6ff8e92a60cb52c7421eec975368f1a3a3abfd40b00333133e5048b89c403cd780f265f816731ebdec1c959c484fc79bac37cc58f28d07328d351407fae051d765113edaf60d147bd9a8a1a9f43e662a17427a4ffcd3fdc942c8a324472bea4c3cfd3e6b8af7085d14b56902d9e9c0bfc8baf0b0d7877fad178fe2828e85a7ce5c7005aaf4433e8c27cff05675d5ed56c431bdcf64736b35760fdeffd176eeeedf9708ce1932ea88b3eb3df486605f5da3a37d40341a716531a75b98b8c15da97bf729024c8beae373a58bdcb2f0ff66c202ef5a85e8e1d548130c79a00d9e4e1b5b823cf181c6b55fcb94b569be477ff57c69f36f5c45dcdd121104c12c320fb863cbccc178eb2fcf9e7de88a588d819f143fc899b003f07ad06316728649024d6fb2d20982fac8eae314209301898bade65b5f64263241df98f34e40a26c8b4de1ec4a4215a03a92ce49a44708880fa0d7165fe1ca47100ee52ba009d992182c1ede62a3a22881e6620495700015bdf1d3a3f911844a7239a280241b441c52df96b89d9aa850889b4235a97dff5fb1ff38e41146979f4cce975e1d48a71f8bfd004cee8599d39195e4ebcc2df8a3ba1f0a9ed019f6a6e9c7b20bee73e70655f43164f012d13f452f7c6c819a4010d36bfb8711e241c05baeee036405881a54be8bbf019f0f65cbf05845cc6ad07d7f71168247bad56c3d2162dcf88f01ba269d4ff8dbd560966e7a2282df5742544b79d0c9155326f163ca89afec3f6e86b18f55ad48a02e2e8e54fe8c90e8c7806a7f614ee3a4e73fa3a37f7f1d7a3798b5df46cb869e85399c43c7d763dded14e130ea1672e8fc02e0f71408b0533fa7c4ea81cd417bd46124b8e7a91d0478d431bf950db6804313ab1be18395d218f7af332e243fa8ab3315b6f86afa6f101bfa4843d9749eecc1597ea7db800e639d7d90aa6456081ca45eab1509040c1fcaf195d89f33b949d40c3f265bf3ce3cf7d957a4dd208a798f63c5759ff744d766d9c69122682f8c07e45d3c2c728dc1401c2933cad3a69fc0e75e56044102e3e098b4691a995637e4344a10c4cb7a1663161da2861395b4cfcf2e36d4ede5030ec36ba703da8201bd93f067a1180eff2574f6afb306d1755db964807886a34c25e5b48fe0e5fcd744963c0b66bccf479d7e965e4fceb2553e4aa05cd6d26d3017733ad6e766508ad313ed1981e45330fa0b3b70a8f70b31ddb6deb15719f860c6f4c90653eb4eee8f8065b73bdc70e10e14e60fe462c214ac85af9f60e900ad70e10a89a2ca1b9438c5ecbfaeca0898e7e8ce5c581dda9ff9cf6bcc5de8f11b4f9f27249a874adf6cdbf5d687e77a01d0038fc7274322cf90469a91316f0dcaf0b9e19540c060bf6a96ffd6127ba4c7440f2d4e32581070360fb4ea5a3d4cb0066d2ca31b7112f18fd32111a5b0ab600fc171fc0a3bf8e048a9a865d61e67a8ce1167d182472b9ef99424f6b0ad007747a1cae5d94bd8f44758a6ebb3046272621b2f9ae894adf0ed458d09af395c58c9730f428000897fcba520bd50ae2bd6f341cd5e32ebf7a0e21818e419d96bf3de2c1261406c246678b7d43bd6d6a8235cca04ec61c98d68b21c4b6852765d2a6852c17d8963c0d49c32318a518644463bed048a491584cf46a6faa21267ae150122bda7fa070f3587f4158e5714017c1151883b7186278385a5a76c48042ecffdcb2361c454ed163adb55183b52c8ccb4cc23fe05a067d6de73d5e8863038dc72a62be3e46a00f14ffda0881cb2e93685bb80b9744a3894b242551664a5e9cd31153502f3b8439a73134c8de46f1c36c2ed5a6754c0d875f4f15c72d38da812f9a528fbd0a16a94dbe214f147e87edf9b3aa94afb840d011f47fb2444c60e675f91096fc00d7021bffffe3f66985dde6d247e288afdb2c989343a8e4f8e126be960f30dd4606a8f80d50c44a10afc91d8c25bdb06f60af4f991eac698f67aedae0b043c11ade3f02431de9f9c801b8775fde41f28b39634d8bb9572543ee45c9d3fa722f2788fb9cc64e6db5d19904e723afa51e6cd7db2f86bcd303738bd08cbccc55f0926b4365406519c8619aaeff0294b68d52d748482c72fe6c5ecc2d2de8b390536b00477701535b97326a721966ee047b2c119c319936d4f145e2a21b13b6ac84813b9693026caf8bf277f856a8aa0d23d187cd65864a5020089ad8340ae1f152420c1782269798b675ef9bc8863da0208d6cb6e8ad5d08aab56806839ae2d57828b794d2d925a001ac4b11af02e4c45ecc552a8f6e5888083fd87a0f35747f2dbbfdf8690ec2186b3ef3354ee9312908e2ac9a65a6cfaa60f37de3f9c0915c94a0e7e3cb15438454592433f049218937c3cfa1598bf633c01472a373b96ce2977c8e7e9389161b7680549e41003782ddfb856c9962f66fad75797cf340f263fc0d8226eec440f2b2f46a68c964503fa038060887273e2b5964c4c867e59ea1ecec2ad4c912a7578ec6b3cce5eebd3bb15e8b9f991e36d4551c2417c70dd85f48c4c124a60ffe10f6a70887fee289b21073f88821837ad4116262e002c609407092cd79725628897924528e90709961cd01eb81d77773d6d5c06704f88ed2eea5ee6960f667993e7498e42f4c61c51545d663f7eb36e283f5e02ab0fc6871f4cff867a10ac5994fe7814d5035805f3ae4b61f0520a125fcf55c76834a8cc3c106f668cb0b9f6e13ace8871f249e819220588461a60748d6ffde284d015c874843771710446738f370644e16691c5a275581d949b25dde575fa33dffdab7d84f2066991b1f340abf3ccb5cdff848e799b15d2ddd32ff11962e94019dce5d5354b6052ba34fc8e458f9ad8539b6636dab8859ff32988537a46c1f8494fc17224647da507716a6a28d33e2054c9313da42e06208e2ff0aedf37fd103bfe20d6a188f9a42521e094e784be0b97695f9155992029ab7c3f666a2bf66cbc1e7d67a0dfd2538dec3b254378b333a03f384e3bc1eb167e7774cb81a0356c93e664587079eb2df28716e64acb412703e0d8abc6b7fdb535efc3875243f0a5fca2dc8172c728c18956c368c15af5c9a6f549717310706cb5b86111d3125bfe524425d0df92e4649436ce8610553f3ac871c38492df453c8cd9209e3073f50081e288201811f8424a3e5af625124e82587bcdf17a2f0c8a80185e882a572a1a6371a54c822f02e7e8dd4bf31ca132ac067d050ee59f93a139c1e848ab0cfbd4a9f4bc2cd861e52f9dd01bfc5b9114a5fac22f8b320f207b230de0b83f53e07b87ef67e96b0fb129b85a26231e83d85b0d6d341bf798b1a12a1d7bda88f555062f4fa5f9865140518d5c7ce606fd4b1b7fd3c186c03815a7adc436b00df54724750d40246c558863ec5ef91eaa53175343f74e27b212744f1f7091af063c76b367d6dd52349b3155559cceffc506c51ae888a59e7383e4505eadc8c287b8a90b709e26318f23e08f28e4f8f0c1035a48f91e98b724aed6679e6372c54c226f6abfcd6e9971b0ed1f3d309bea5f311545fee3bfe09d59cc395427b02ade9cbc6a213acd6beb2bc94b3cd36dbec33b638390c8a07ba11002585afcf13b55d8de881b3fe86882c5a288f086b062605cfa3c308987c139e567bf26a492c4851ffc93bd7e9044454dc42ee92d853e23633f9de2974f7443ec4f240ac1b90ef8c0b3ce0fe7f6b01b7e5db662ecb8b413dcfd4715b08c2ada7f8db45f885e3306868fe489ff26ebea1b79cf158f8c2c2d2ce36d3d9b398e14ccadb9032083a7f68e3872d465991b57311ddb631fab97ec7a77bf564d1729bda6d347efb460d159b206d2f3c9924de228955179ea36fbf4283c3a7edb8b458bd8532bee74a5c4665b94297840dbae25ceb1e4e1420fb4b263db4cec0e11f213bb2af13a3d53ca31a8a2372d4c668f782d3177beb289cfd2e3b6ee39d5ee6861ca9fc6cd97730449a8a2abe09e9fe8227476f6d2d4cd53dde3c83cca6c264f1846b7208b76cdea7bf6f42cd416a87ef61cff1b43493b199f7c0c04e19026e3cfc889972b2e58252fab0d5ae78f35c4715982cd614ea4cbf80baca4c6f16a86607ec12ee2e509b92339db3ac69d76ccdbb9502284ad5855f0c40c60ea4b1708daa53ab2dce1350a181a234b04081d40b5bfa060dcafdc45a2e550e33cdbff3799fc0ee35c8a89ccda0ea134832a18ab427a34d93cc431f93e7337d255597d7d710e1cba6630231a081a543403e5c73a300776fcca85ddf4a55be2b5a920a9425956cf04828349847a15fa8a12b7f78795e6b921eae9fca00242af27060bdf1456f7d383abaad85e4cb0db80ae206427d6f88e0263cad27b9805a304cbc925b020a0fed33f341df0fcfb3ee59106006f74dc164a9f80df78012dc6f0c34a3a932e5d7ca9833e86652195e202cd65ced84076729588be0dbe43a55cf77eb4054aeeb09701dce436e0e682ba95545460c1903245ec1cfd321efaca98e8cc5f27cd7ca34c9f781a48f6378452a5cb17e3c4f4191ac329a4199c1d67519ea255d7f5aff5141ca3aca8d280c399fd30ff751823c6f44763646c4200c1e083b091da7a67e9c514566eb02c0772ad402c7ad0c7f49c4b697be890bb20a241264ebabd300dfb340d89d7a8a84945b4568b6c2fe5f21d61f5df95a69316436f670fecde4093484db9bd90e5e85cbf9a02d4512a92afffeb7cce1c1ea22a8f256e87c5c06c218d166c0c30d06af34aecece1ab08e43e754b3de2932b1c595b3e3549072bd8f7e4bb249490c4d033f3bf19eb130feda39b44882ab31996a77a6776ddf645b6af2409d5340b8331b060917d622564cf17a0d7444c913f2d434a03987578b62ea9dd38e7ac20d79491a3fa726077b3a70f330a9d76005982db370cb27b818a8f21cc5968f5cfc1b2714b3b2fe71730478475d55c1e7c128d191d060058e5e24ed2873261f8cdc4c03ee88de299c5027c66784470f30f44d50f021f86170dfa7207057f55b57113e1a4bf09056fcfd866b6f67d39cf6e18f3d5ef4ed1cbe890477b91bea9c7775221b130cca2df48c0d394d7762272660df433e656875fe927be677167fbe82bac7220f747c7c24beef07b02f93ea411302e448c176f407e65dc4a40ec334891f9b3cb96b16ae61bb0a64d52b359ed546712081f5f9c9c3c9f06e11405b40da9380ebc900511184c38f280fb10b57035eb7c4bc07598013b805a4d13661c14c5c5a801c06557876a89596d5ff588c57b7ef230d8b58196a27f881d8b28418e7a5a61455f39b75b9896c5066ddef82856155b9fddfe1e5ebb156129fcb4df838cade301d73115e068aeac04bb63254ff2e8367e0ca160654f02a2a6477060ad15f6bc87b1d9823a97d103302317b2e8997f147c633a337c3d4ca2e9509ead0f097709890a2df0ea9e2de2eb5012e989e7fe700bdeaab96320df63542ea39e959e0c8921461adf5be8d8b9899459086b90ca6215574994de68247723022f84d887e51038f2a79635140b35393f5e40b2b20d21efebc5e9c7e2563c595cc599829202e95ab9f3ee469d51f9cf120461ba28dca06227b217248b043c00af3a5f9d8cfdf2c07b546fe1e4cd8589b939b39ce6e40a84ec5d0ae09e4e9ce0262f8bed37e26d33cd39d1c04bcdd8922cf970b62bf0578013b9e69f6e7aa8290dee2702d27a267f932e53076c68eda3e0f2051d88b9b1f755b0bec88cbc6bd0c334fa8a387d54792e5b02b0dc8ec577be888423ea456609fbccd4e35908efa7114f33625404715768906012ee8a79a0f8be89c1c490409663df32cf6e94b11c06831f5140eb7a010990d1951df883800b97224fe01afaaf1d00f4cb090e9788a75061d3bd017488ec70f289c7c087a57e8c0410d154095df2bb4e302e879a04b9872acf3877e01b3ce5368fb9c4390d91662655a5f1193ae066c6a4a3e4adb7f83760da01f821dbca6059a091833eba2eb17454816813eb1344bc41ccbf48fbb8e857d5ca9be2dba03078bb585a1805d04349ba746dd8c7cffdacc658dbf305f60cd18fe75c0d92d650242b0bd08b45f97f9ccbd46f00cad29b5bf7866035080e2bf500b716a2f994e6e4a2e5714e055b12c20011f0e9fbd0bf6470346b3046c1fe605b0eb90254675c9b0b08fcd08b6b0a9aa5a0239aded990c10b924e61b49eadd55ff50e0d4d421175d31dc88a52479d3ab603e5dadbc3ab9b109c73bc4f6b2de2e6ff8de606c2015ab205434ca091b46bd6c0456d573595185091b6bd1ebe44f19eb373d4ae54e127547365c70030a208dbd1c615509a7405ae3364c7abcc90aaeb9e1a6f5e7a1655164d529d6190a17f55b8ee198ec3ac03b9d6aa149fc88a527aad1e1859067eb125eb1087988b0bfe4d7826072be941f28fb7f46836bafdca0b1051026cdc972d0cb6a70e7279f04cf97ac5bfaf19f541341cddaeb73c6dafeb6812032a5ae3d87bbb4613ff18e5f65ed6c0bfcd9429d4208202d8f49e0a6370cfc295071e4b37d2767cc21e89207838c9b9d8497090cbec1507c8468dc14dcacbfb70a1e607c03c952d45735784b64e54eccf8e8662702446f3122d43ad075e81a61d2cd022045f9868efcb87e1341a8cade330311eb6178f65b0cd7595813e102101722b0270b2a29348c7e0bbbb0ef3cbf5caa03ba547d0aece59e12ebf2fa7c7ee56d83daa261382d1a4d2945dfba625e139ac139873c15acc64c3bbf18c47a5c2440238c09f3c7f41c605d84276e8f5b5e12ca7d891c552264a3498cdd7ae6119431ca4cec134427d11983dc2871bee8dcf42b8e6a99aeb9893bc639cd672d50f77b74d17ccbff26d075a9721bd5096430b25bb3242dc350d6fefb8b50e52660d1c78dd37193df208c9bf6861e6355dcb4482cfce8c144dce4dd70d3feeba794ee300537991eb8a9a84377ba7b8cdea6af972c95f2367de775ee77fb5392a109b7497486dba67b5fbdb46d6ac55d34bffaba2de85da04e41db546e66519d62b669dd44a9060aa491ba714583fd1963e35e89770e2a0d8866e0f515788c0511dbb45765a42bf035eee258d1fe66fc216b09af4deb75ae4d57851ef5c4370d61b8888e05426b537b4d606d5a0f84d5a6eb6da4dab4243666cb66d8fde23a885e68e23a52ef38c2ed503dc5d141969cab51fc87c462cac9e14d29a77674267e6bcd1bdaf28c3a3453eba71a822d6e8a48f61d8c5ce1163868e47753a6e5ce293ec40f89beba0df20c3f6d784254ba02d9ba0dba8813d616bd6ffc54a1b6d800386e3609f0d6911140a825ec6f9441bc8c1babcf1a59080cb2b23afa8f1e81fc2673170c0adf6fc2612ba943500c46ee72ca27bc489862f0132bab73c8b68ca80743659860f78fd9f08241c6df41b4ddd93980b4c845816e2a1143c18d2eb6c5e800b41084c3b693fa6770a5686e24883bb095d9f0617ae32be09560da1666f6705f4ea8d8f75c3d577ecf0b6de79464546d4a61f4548260c0fc3551fc748b6cf570016c34032a80c27b5a405616a50305f48768813b4ef3aa5156a5e2337c1358f2cc9112ce77c0a385543b3d16d3859678af08deb7da49b063ba00d341a4201f197aa8d3184e66b900f8f08d6faefabaa2a5fb4e5549d78a5648237b932df796292599028e078f07d507de9dc6921fe4f875d6d11f140ae5839220c6f8752567fcbab62e5ff0c4afbb904af02b860a06673c945fd592172816bffd0328aac5ef3621bb9f7949fc017e5d65d455e6c4e5821f14ec60e502221c99b2a3c40e3e4ce951e207233b0052220546a6e0b89060b021744f8a8d695008e193a140c2bcaa8450423645024005531c61f2854ce15575c4069a12497a551df1d1150a85ea013b12f418e62e18e68e6d1df6ba21e0ac8c22893952676574083b2bd3bdb349d2a05028222928a282a7646594497c2c0d272ba33fa5868214ace063bc2cb8bdaa54101479a07952cabfd72853a8c4bc5c15e3d7b51744a63153433d7496956c23bc52f3449f9d8487de3a7826202c03675f81a88730d56b3c747d683c549f5dc6436fe8edc5f3e6d912cdebd8d43d3f69fa67f390acc7c190ab67da16f22cb43d15c6bdd754ab85b61a3e412ddbde498553f770f7740fef63169aeda04b17483db5cfe699347a6a1e36fde059f53603cb40bfde75595a5031440a2b2da668e3e10b52f2b383329416543821ffb21e50cd96a6eacf4387618041f35ffc54283eba06dda10f1d48efccc0a676e83fd8e42c031dae1ec22f2447cb67f73cf497182fef9e2d5d8145d6a438d881de606c49552df879a840541ebace0e7ae82d05f66a761b0f1ff478599b8f1f9494a04307b225e841b6a43a80005b3490ec1aead5003af490ded0934c632211a2bfb749924b8e9ca3279130ddf1fe5d3ee3d3f8e366cb322443b7599a8b9b3a30f76bc3b8a9fd25c486b79943106d5b6239dc366665b65fae93d6695c553423ddf17cc55c64cb2f9021b7d96ce4bd8d4830a30ddb4422d7168d448e8ddc666311462e8a1247caed18a60839aaf2ec41b644da5c0a191df31e5bca9c1d862d859c3d7b3954be5de4d9d34623d10dcf443d90a21746a3d93fe2a6740888bc25c03490dae2abb5f88a7c406fb95220ba09b9a50249cab45ff6df67bda9e2c87abbe28f462397ba437f34f238dae40b234e6ed7deba43f307b48f5cb4d1d03ef2ac31bfe12af281790b372517c4e545dc6c0fc17b91b38c3691b728c3b415853c0be95b66d1382e6ed8d6f1a59d1d3edc5e9afb4162997dd71eedd9529b60581976d95c0f34a43fcb87fd3ce181ce1be0f589193cd6e5364bb22411a48fe668801edd664541843c74b67a62cfec96f74603bb10237c39660e3914070f799ed85b1e12424ed2878490df2b7ade304ce450e442e622e7cd5168f1494201859193b6b4bf6e03b3ee353d60588f614daf879f18d5af773ab6b48ec2a845453e1e8fc7e3797b7c3c5473ddd248fbd1c87b4b2c3e1a8db6a52247ae236f5972c3dff622fdb93e6f2f9273e1f1d09ffdfad847cb7b1268e13ec0725772a4edd466473dc816dd2cb9e14ff480961b2e9d657b69f1f72d0eb3ddbeb4b428211d0ac90ebd451060ff003fe109cfa26d723b7ecc12b75b1c48c8cd88f5cbd1fe36ebe5688f8ac3726ddb6610eda35bda58bf80712f0f7881aea717e8fd90f7e9f0206449828960229a208299e023a867cfd459565207cf74ad58a6674b16d01a68accaf8ede167fcb7bbcb127bb8053aaf8057558e95cf9ed649545230f9e584ecc3268c6c1789203da6b6c3d9cec876cc440819773828e47afb8c3a114912c8f1e5b3e31c9484fe68e8f8bab2ddcbd981443fe66ce96d171b8aa3b3181275d860b2a5795d893b5b9ab1c8b37344623d1ef3fdf6cbf17c39ebe57841521e71968b38db3d1e91c9cbc11e75b65b6e429c98b27cc6d4b3db6cd461f278e8b3f6789b4282687f79666d4ba25fd1a39135a5b60463929561cf1edcfa638a4d7d628f38110918d2f9c6eb131eb0f819799e596326e48cab5f3d2f9128653b8e603cbf5e96d8935dd98edbd88e21b01e519b7e2cb2a5e517dd40b6c79e2bcf7eb12145618b8f1faaacb6639f4ec8c93e6b43bfcfb32f177bd09033eaf43c7bd4e1a8f32aa5e258adfea1443f368a43434048f539f35dcc962c4b7dbbc7705ad02d9700a4c1f2de2e006ac829dfda60b43cb277ef06400df97cfb87b5395114d91886612c3ce68d45aca3f38561dcbc386eca6fc8b9caa8b7421e55552f004d8daabac793d4dceceef619999b72b9a832ea107e6ffdebb321d7afcbd057182cc1094408a1065758e185f64311af73008085f79a2db5f30fdda11c80df28bffe5ae879f61f355c01223f2c018c25786042c56965fdd4f1ec4ab3259f67464332cceb3fd5af95e351a57421c1608d757392846d2edb9991b29048c523d2180226595d4728c1481f0164f56084357644020a618295241752129d6601cefbee6e7f497058d924434998388279bb7333484c48ca168e5061bea21b4c927262bcb6d8ea4282912e49a47e4a8f5cc4d2e50aa5612f86615a1132f45d122896d17f0bb6c774332f00af2a9c25be5f552cd8e128d9d26cb73ab6db758f9163a4d952a4e19a2da9dbecf327ba81db0d67d966901b1ec3dbfb87e42579603c2534cfc9cb793c4ff5a43c1d25a5c9343a585028cc221667871b7bc61c99393247292564890e3b4003748d85c5339666699666e9569bb554758350130a5c8939d56e4a232e4e758ffc3a7122b390fd23cf58935948f823cf5a9359c8f723cfa026b390d78f3c0b6970d33487fe9a23738c9e458eccd16fb4b478d6b2cdf82dd26416925fbdd95f3a3aeb301328bfce3e5bd2376da87576b2257db20693e59d58afb644c62f1036fd609955e87f5c476494b2a5d92b55840281565b52e8d0a3b2e939fbac589d53af6a92796ca3c15cc796306f51130dcbac631e2586f913dd609179a53b5efbfc45859cedd364a849b68fee78df456820fcf6194724760289f9120bdb666c1f3659dc0be63ebc53939790c760f9f3e8efb4de3f6c7ac13c87cbd517e35e42dc049e5b1ec3cba109c6e5f0dcf21c9a442e868bd31c2cce0a096920f589131f5e426ec68bc8939f209e2427f8e1c4dcece24a871dd21c9d70c1824c62219f0e1a0ed02091c16b61bb90605e6ba6aa425996b1e8a6c5597433f20f64fc286431c618b90e79dcde87b897ccf71fb08f826fef331436ddcec533155160c8113b3b1c81082d9a84d18393aa0c0a1e37170e852db44d211f8adbc4e16f702e5b10ed5f46dec2c929b92deb85fd112773a276996b2644b435dff0d1bbcc57e4a33fe49a61ef490d48149eb5ca3466eeea39a361890e34a7269d8adae14604ba454308f8978c00bafec361c8097a6f73c8afc3ad874c4513e0a0eb96030a12198252e5e0a48af0b003ead4c390d39c79d655099e77d8978719089b9e172ac3eecd9df1eccb643cfbe33820a4de4ae404b9be1d3b36456adc559f91316b5f166cde5f9e4c6366ab6af036bc7f3e637a04c171e2a33b3607ca0219d901e37927d11ddbaa259868628934333333334f060ab28f1f330f1f6122580bdd34de1a59c65a50e13498ca8d2b725f554c54f9e7ca0224e895d32c387d92c1e40006073d40413d4054a8f8a0bd0c9602af32e4736e35d4db55f8141e8597126a86d96575642d8465da22d18dbaa68d0a82a3c884c969a8655956e7b04c3461d8d6485846af2baa3686157f222f6cbedcb22ccb820dbb68264342d8d3a825c928eadacc6d596c59accaaa7ced48891333804ff41b6265a21bd8f186f839880233a055a6b5c0283d056c12290a845c4499224a18ddce517a8730bb5811f47b55f9a077fd688f97c41994ed36ebf16165aa1f190fcb50d96e812e20dd8185ae46d23904f8672209e0991af5b85f149b80b68a0c8ba1c8bd2ccc49c50155067a26bab91cd620f211fff21ba2177c64b4e22dae9f4ce7f2914b62a6b5401150648937ba9b889aae2ec1ef8aaf5c2b3691385206c4a61dc8cd3833a0e6481c869cd74fbc118baccca24c59950c48d7925abc1153882a64401990e9fae1eb278ad5f543ba7e6e441462bc7e3603ca987f32a018593806bd1a60a10b11666eeee6e71a00921700323794ca9c1c35c77835736bfdb4539fcc6fbbb5325e6faacc7aa1a00bec8a16b66d1ae86ecc82ecafa143f6d710725f315e6170707b0916ec7782ad8313ec30de0d7659af4d65d663d464336303a32231bc1cb604e055c66770eec654659eac4136e4784384fb2c36414b2fcdba2ec8b3ab3e6cbafc39ffb0c9f2b7facbe7398865ae1e36adf7d5733df34a4f4b140cf95cf771508fbc7e78d989ec8ba7dd5ac66a37e4b61e436831e1db0baa0f42d6b6d3c7d6e56a41e6e2333367fb226bf7c22064aaddaedcded0c800d23432e47beab39d21841a912cd32d4df5b9f12fd84fc6ee6e3a8406bab02c9fa738a043e96eee063af47b8fa70be83d5cbce29e9e229357abaaef811c4b3170760c9cdf7d108cb7a17f2010e4dec5c3d3237797f5674bec5715178fea2e4e23f1de3b227db00603414e1706e223ef4578bd177fd0578c266291db847c5cdc1ef3dbf7debeb797cbee7befbdf7debef756eebe7defed7bbb2226fc03fe8100885c3f25cd74f9fea1bb3b0b2056df58d40008dfdc8c5c109a276d3725ba9060a44b93315ef4aa6a72839fd2896800084d773c57772e82e8e203f2472fa30d2c4b48816e6db37d5edc3146bf9883f07b832f649bd1a7e598c32d8bd84714ca7ac5386dbb86ef2acaacd55874c3dc42669bedd46f2cd1f1ea3b1b26cebcba0bafdaac3613328d795d5683452b54c326203c5d228ccefc0ddc680cf9208c8e611816319616c8f952d9f68c6c093a0ebc617160c9d15edbb4ed8cbc140fd2450261d30d5780c610811372bed4105b9acac6afaf3e260298ed48a4e83dd8f4485a84fe1e9012711a97cab80c3c8cd0c74bc5b8bf1ded85589003d5dfa6a21bb7144257058324e595854e0714eed8f4723872bb5b13c40a0988922040a4b65cbc1c36bd1d96d12dcd21a331e47c3baf09c5b1dee2444e0512b2a5f99a0012a409171964bbf59a7d48bace9d040424ea017a171ab13518a879ecd4865bb861ce8688dc18eda07732fce6da41851978f6e70f42657fde55a72093f18a2c73915826c68b6562a9d9821036c3557d570dcba86356e4f3e586b0dfec54553b96511f01413e089b5f0c1dc93e8befb21ac2b6342d69f376ac3b9655777725cb687c5513f478a9f7ce218ffda027c3222682a82a8389205ab07b79a4fea0632ad3f2ed01b83d958913fb160126f211b1edc530ec0a0f104d60a0469322b42864cbabaa890f9a0f127b55316942d6830cbdaa981c210cd9af2a264458435eaf2a26404c7e62ba19191ca1bf884f3a4df482e5a78e1da684742503259e1d13dd703c4d610119394834a97284cfe8a78ec9c2efee9eba8c6719f0b03dbbeadcf08f66a08a0191df27bf1eb58d01945f77512d714485df25b909d0488309448410450f4e637c0ba4dd4eaecf6845ceae639365829cd3731a36ede9b90d9b74f574ae78cee279c4448788ee370c855093a5e90efd8529cd6193c5c1149733616af48a03a6d8d4403492229e8578f609719e83443f188865427f5521274c017154818c511c54c8095340c0163cafe0190aa1f590b54c81e49f1d13f0ea32ca437b39ba9fe9c69369d7e962ed8d67aa7932edcf213743d043f23be4163705f053eaeb2c5f6e72af3d1e197839daf76b9e89c5db33f0785cde3e039b583cf3103705a039e4e68d9f2593c81f374308f8e73be5dbf595d62d6e723f4bdf07d01c4f14a3c6c98c23f58a6e966578cbdf363b910b214f716fefa6522ec0879cb505e95c801fe23ef09e604307e9def297e77d396c37b2bd3ceea5da5b72201f4f3bcb95f6a7baf69a82c4851a995aed2f96059d04e3e455d8a981121d5eb39aaa6209aa01153f2dd82a150edef211c410db2f49f989399825917e388d0cdbdee9c1863dc39524466c555045ca48155b6a6713b6a5e524a0946729ba23863b67c2543b54c586362882da52bbc7cb821d2f0bb6051bf60ceff24142232a880351dbce33d481390f913cbbae5280428376280f0bf5574782f17f8f857c62ebd8629b391663cc307f1816a1e80693c08b97635b3fe69967d876b9e6578c526adce521ac4f97b3e8065bd1cd25f211fd71ba81edac971f91652cff963524106e86ed2c67d9425aae31164783065991d9a02e24fef39707a85fbecfbfaf2316e84bb2a6a8e4a13f245b822e039b485192bcf3519feb39c9ae2de7a19295810e993cf42849dea90fcd43f290f490c4263d41d8d1d4a84e32b00c5c433e9eeda05b103acb164fa53113a29eddcad68a36faca96fab1aacad650e929afb9c0c4f012db970ebb6811468b8de83b333a5880e2dcb545040c9f294f7e5e775cce7e7a3cb604fd821bbc4ee0844777406f61fff94ce421bb302162888c8e3e3dc633cd72c5e102b9c3ed0c5de371f9c7303db3570f5bb110cb1c0251377640e30309acd8800a2cae084a82133c08da7f2de39d10be7d86e68a28574871b511a921462441032858787185052f38b519aa2baea8225d0ef0aa5279f1a157d5154dfc948e840cc60531062f382d3c36b07e3045e3014c4e0b151614162da4ba5edaf3d9e8bd78c5501412beaac6488112c628c2af531083089f7d3ba9ddb734f3ed9d184bf8f6199af69a2d01e05b258613bebd852d59df3d1e23060fc458fd741a4b88e8bc0f88eed01d0650a180768587c31249c213d4490706a84edaaeb0cf640d1e5c39e1f0d458ad56271d1090ea58ebed2586c6417148e1491524271d46ab53fb90d3f544ae30e3f786838e299814519d70d0e1f2d999f9e73af411785427dd1526cdbf7e6a91a1043380564a76390b302ea4d851c268cc4249aae1062a724a31e4d4202986d08234958f0a88955fd764c8409595114fcaaa678b1ec5b1de2a1bedd9b99ec8c74d5eb54a7d567b7674d5f3eb3f62e8d50ebdb3a5d6791d26343aa0b493c656202d2324af92d5d91cc53101c9a6f5fe61a03f4dd25bdbead52f1f72f27951ee650296438fc172e8ea90c3a189723140bf38d5e3d0c3f3eb434e434ead7385d4939eba058a637db6ceafeb0e0a6c23d93a4771ac5f4f247348687226cde7a458c6f2819c5d37d341bb16109107caaf6b2498191755fddb58762049bc4ae2fc97d0bd15b1bc5dba702b6bb3fbe0a76e57587f3872baa604d91591be2bacc7d8005f866d31263d430a2498e0a050a89c937654a4fe748bf42aa3021452df2fd06dd35353c3c3e4d759c8148605ad7171498a21c1f0f5054dc783f3eb33d22546c7eb15d65708393b26724ab9a4653839bbd9fd7633daa8164411d4d3413244e1d303069de282f3eb3333ec6f635655cdf2f9d915d6338d09525b829cebb33fd167ca96deaf4809393b28884dcb1365072d0f9b7a0b9559f7e2978c5f576e79ce782fe8e7fab04ad4043955e5f3eb362d409c18e5e5f0ce4e1455fcbacbcb794a9c288bceeaf06c0f932db1ef6c15bfaa97b3b32bacebb63a3b90cf5767db9d65f29aecec8ece76fbb6c7446777b6a45106f2e1f08e64d3265999f555f270648a091172c68f1aab6011b2224dac667eefbdc7a9b7f3ebb6db15d6ad27e4e3620f6698961c39492498ae260a25dd0c0b2c3ab2abf9992da9d34c167ed9a583819c24128c7459bd22a048576e8822f5eb38440de61581efe2c7fcf8f10ce272c52b5ef1baae8bd3f606548f9c519423677c38cd84ac880f7e6ab8e29f5d01685758c79220e70b122591ddc3a6f6d40be29f2bf3050559d9924a612a6ca50d23e45c2bdb5d79418ac36d767dd8d48fe31ffe79417c6aae7bac23e48cf00989c6c7637434fb8f4be7dbb57b778c0a3990d37d9c4d2a84215daa90d3a30be474274fc876373728332bbb2a54a85055593921a223e4d4a087ceae579ea5413f2f25143dbfee52839035ede91581814fdf7bfa9e3a5b6cb1c5cc0eb70fb06adbadc5cd87aae1864ddb10e244cef7f37eb634239535396a3d6af189ec9d344664848c48daf8f990cc45927aa99d5f7f46a206f386f8242115c8f5456d2fcfd537e78ba93e3da040f2eb302818eb3ef8a99d9d46c70c49f6d6e3c7aec0ce4c243ba74f9cc0f9fde1152021e515f0aa45113993f4351f2314a95fd74830332e4d5863963469bb5d611d4691ad6d8b1a455239729d95fc135596a47a22c9afc33869c3b4a7f51953e4a1d8cdf839b1e8f91055bc907d10f45b2d3e822892653e82c0e1ec699bb325ed39a2c8ebfbf841c996b4c708201f41e06ce9c5471038ff16894eb14f5cfdfab40f4cc121d684ad9a4a955f572bbf3b13a27ebda758f98d57309493227e4223bf92034ab2422ace76dc43e46cc74ab6e3cbd5593d6e27d56754d7b6b3f43d0ee22095617f5a547eda3a8da4713a67923a07e7d93b47674bb393bc922d4dc9e4b99374922da933077150eff868cc425c6419c932ec2d50e4f3e5b21fdb313f7ea82d2d17a3e4e89bda1eea15d98e9fefa658861e363f365004c80c4130ff500f15947a45aefc3c23cf33c823380c8eb59614e9032850a0a0b0eaeeeeb576bbbb6177b7d3482abbfb54aa76565577ab7840e4091428b06c90b11732aa378f649625f8f1181a1d5ad339cd763fb4783f550b171e8ff5158d0c3d316ca947a750e9e9a1f353ea8f12d243ed1a0a347c1033434de45a215777639f578ed019e872e8d97b4ffaecd6a2389edf981df87518373ded3c74eebad1839c51e7e9b248c5e18117b9207f9f4b1b18d6248360520f7766cdc3284fe03c24fd447942899f0ac51f4671f2f373e6a1f7db170a9202e68cf7bbbb8bc6a3d1f1de7bb1d79f947257eebe87ed0df65e0d0d8ca1861ff98f0a27c376ec8ffbb15d0a4c481731640d3f376c69aaeaea07b37c2838c6720b712f6f9fbb97afabe5ef3d4649cb9fe534bc18e3736c751d5bdf8beb41b31d7b67e344ae33333333abcc38c277196bb2f97975987e3ddcb2b1b61ecf2d779bede11ba305b71e36dba16678ab7dd9a647e72246f73553470b5b9ada860e1daf2a33aaf8497a22083fe3fbe0a7bb530c3bd59dea54a73ac526766f772fb176eb93a5bc3a6fa125d5d3dbf4bb1b45e38a63bde110082fa046d2a9eed475a575875e5a525d32b45b6f24bf382cb32996d915c8795dc9ae24ebd96e2ec4f7f0df8e6c70e185d77d0353294ba58a3b3ba3ae2227e7fcf3c9394040bf3b7fe58a4af5522f3575d5556428b2bcdfee86452f30f71487aeebabc885e5d2c876e45b02dd66f987c9602fb678ee71e8eb56cf4ffed9e2070064fce41ff9cb5efce41f7f3daacc978a835e78ddefbdee0dc974ba899c97cfd5a33896899c57cf4585cc76da88a4ed2c18f8fa24f5825f48c6f5faa487347eb95963796733fce5a324e424bd6545e51502335f7f4b32ee654fbd3296b7fc48b77838c1470b8a241f3281640fb95b334c2791ae6b0b39694b21b71c664537a12744f402fb071af09ec4a677c22c7fc1b06ec6ca5b2ec306d6a44ab05cc7965435c694b72c9ab7d65a1c9f1f5eab6265d5bce558bc2c2a6fbd65693710502a5613b24ca315cab46ecbb2ac1717308f1e5dbf7b091227af0d6e1987324dcb4211d01f8012e41402ff05f6ebc505f6cb2fd7b7367dd2967a5508ec35babb6384ecf1da5ed8d75fd8f55755571130a4f07470a738983953e1cd65def89ba6d91ffc9ed96ebbe70761777f368aaaaaa30b8a0bf0dfbf6daaf0d6e7ee6e737f27f73b9a010c1776bd17f782ef716a59584368c5683e9acff2e8665e216b96b56f5f0e6e0839ab21b418428550d7b2a06575db4108a1c516b42c784d219f776a6857e4f3b62c6859b06ffc30626646ad2fb1206ceb8ab0ad2bc2e0c7ba42d615d9801db22e36baa1854108ad2b5e3064b171c10b862c51a689b4acbbfb82218b8dc62cc805a69a83c3bcfbba2ed1cdd511f67b8f61731c49d2334dd3d8c8b6df8ba427fd357729a76c849a9bb9864108c39c2fe7887968838f45aed9c0960028c8d49f03cd7e057a1b7af4cb01519f0af4563fbc50d7e8606167021ee99174ccd0c42023f2d99174b0c2b8a2b61ee3ce902f033598afc750e360b8005fc4c9a038d675446eaa955f8b23e9e86e68611042eb8a9615b564cd5c355fc3323b26020ea0853218daa03fecc85dd6057d6e37b32ba3a6c5e822924f7358ae560e0fa3e801ef31bf2ceb75477d3c9ecfb534078c37ac76d02f918ffdb6460001fef6eb290eb83a5c9816e22bd3342ddb8ba45d8c2d1289b0bf38ac64953ae92f0ae0e2417a39d62714b1b0886e206b2b910f3ec6c5083fbe1a2a8f870534c7ba15ad8201c52183968450bcac90461e40122fe842b5842ea0f8291d8b2e9a8484d005123a90a2575517385da462ba198fe102c94fa72922eb2e35b7b01d3bec56b7385e4eb9a94f5e9db7d4bb3cd4774f2f87fa7bc5a1ccbc7057e7b6bbbb2b8178aa3856b986afc507971edfdb9ccf46faa3ae515221c1d0d4d8f4f0cf5bd8d28d7fde03861864783e03901abef8e7426ec02185f352f8e72f87897ffe946c29f4cf9fce962213275bc2fcf9e351f5bc150fc0d81200b634e551794012b0f284173b04e1044ac0e2f4fc5dd992f6e09f2f4a892d05e09f6f6a4b9a3f5f236bdae73bc49644fe7c916c818417796f69851789442e6fb0c48bdc458403d48b1c664b0678916ba21b91f3913554274df34c74a36559b64591cf74f0d916627ce6305b8a9ff5f07ce621d14dc60425a85328e498e826849911fd12dd4416fe8a52c45f6e896e2e2df95b10bab625251eba0bcc22e8a1c3402d7a4a0b8062e5a1aae96df144cea97b4b915d933b7876178672c4f316362842d57451718329d4a427d1cdcb79d10b1169288af891153b6051250135904fbef0020b25dff3450869f4e1ba823d11a2043d4f921871000f489ee800e1801d524f665002d4932a523f4fa0a41c80ca7922e587d31356242ea20b0946ba4841f253ba88093421c6ba0d29a678118423a4704216320ab144b2ac208b25cf497f3928142a8829764ec0036043eaea150b31a8bc36c515d91053dca08b29be908213e365c1986ec60a357050c54fa7b172541f9de1a8f40cd7653d2c15d18800004000f314002028100e098522b1503c4fe5ed0714000f80984e6c5017cab324086218a410328600420c00048000c00ccdcc28082d636b65f9deedbd57949df6abd2e669f4d6fc3305bf2addea4b43cb9def4170a7fd56502dcfd0435c40c3ee223966a3be56faf2c2cf296aebd855eefccb9cfb8581d3bd14e8b5e56d2d1db7b39ca3d93a213709bacb5ecaca3629ede587eeddb6209bbb141a5013c4e59a8db1a6f82a92546ecc00a7fac64b8655cff8ffa5674785ee1fb1f7331aee93e2808d8738968c725d25aafc3ac3cbd6cd8d67ee5e4ff822c620e3d4bdf9e9ee94a4fbe40e4f3ae81e5c52d1cabf0182f746ac89a96c20f91fc05fede07379303921281829b312f12476f7c8f6d0b3759d9367b0a34c9600f3ba83a8d6e3acada0d4d3dfe60ae48fb158a4b19d06a3c94ba9505a1d4ae8af35a4da3d8c682cfeeb53da5433d6998304a18a5f11dc3e16f0c040b3ae21f78e72a022ceea207d9d0606287ab0c0adfd59d437a095a7901666bf01b2f4085a94918e691c7e412bd85af0d2b0c094e22f9958e7715d415b226c3857172006ae2d4629f391676605f5259d37c83714c7286bd324fc38a10b3c7875d78654d86cf292b62cb0888bf1b01ad514b8d5000b53f1ebf564de95c0006bcd9a3004c2f74bce5a2f18df3348083f7e18ae43108844303a7cbec94d30aba69a0859af89620b81adb7ffd14461a3196300dd137941684ff304dce8996130fdb805a1308f79e155dac436d86c79d25698425379a4dbeae8e250a37167ca4e3b7bb9740242907856931ad74c0f888856a9b24916541ab016e4ad04a424b7a5d68cb702fc6fdb391e8f3fb50eaf440585b14da5d3dc582e45e93a02eb0b6c0a378237a3fcee37af7ee021d9c1836df6ef08e60ca81390869b97a558e705de492ebea259d4adfb50b2b321e1d42222ebbc855a856508f88f9b48c98faf925e0c6daf3101c0ae03cf967fd849ab690225e0548dad435cfba280959d28c4c8c9e93363070eb69c804bac7d6da8744c054284daf9b9b7fab428f30290d56a332727b0015eb5a26d020df72e0d0c058e721ba90bd9177cf4f7270e3f946d7e973e2c86a24def7129eda49725ca5215adc2c03d23cdb01c514a2750e08a4c687a592b996016275e83454b2df232b8c1cf1ff6f2341ac5c370dea8277f5364c508292ca1a4c221ac015e90b32af0cd120e712659b75d293da407770a88f5e6e87b03470b3a77f83313dc9f92e20149e851e4d84b60722a01457c14ead2f9bd3fb3f55e7af60fb5556b3497044f5bda72dc946ccf4181b1c0c1bc6e9e8ae70a16d14aa8c4a20033944be4b100c64cad09bd5a768f88d0b19a27d82b575aae340f02ce3528b45541f0bda5f21538ce37dfab9cde897b591c4e4a035dcbe95203070ea79b769d1f132b68b2c473c4b842c58892878d9bec09ade2088b80bd2b143a41a568efc5f6cb6523c1b69b8536fd5954cb2ae566412f854b5b7875b06be16d6cbbb2054823b086db67413b8cb8dd35d0a890cbc245976eda2afeeee4b8993941a546a14d5553b2bb66450dcdbdb1bf14ace27f553cde422bc6fc1e859a4d7ef5678db0eb1e8c7cfbcb77e64343195e01980c391312a66f182d7365e422c19d5cb82f76cf7c9c7433e32c9fbfcf93e9d4be08c1f73c4cb34b0c5420a7ff89cf2ef2e693160d15987571ae068fb281e414c2128b459ab55f34ed0150d149c10dddacf868aec849596a4e709e96176a80b68f2cf0f4aebfbe38d8e963fd28eb94bc008151164decc5db5b3289309237b7646fc5eefc2a152bad2944336b5ff4bee614e93ab4a1a10cf72b4f676a73a63e79012b10e9e72d1e5d238b751ed2d0f9133d9ac3b670aff6a8a788d0784b782874701531e29e8cae834e7121d23fc9368404235c27d6e59f85dde1626994c294dc483922a6392fc8656d3ee550280ea84bcf6e27043b60b9db66629123ef175d9891ab8561da92943008b078f55e8c5dac6290b0ef45a8e48746bf17145e5a79e2ed0de6b12567667fae12c2f94afd2951cc8d3e1a297e197cbc07ee0f5936fe143a584975b9d5c35b4762f748cb4736b54b853188f7c15249d2ca4b26a43f2c695b565121596f080aaa25d596fdba60d59bfa67846e05c3ae643ba20e9a5769d0841679dc5fe821b8e2bb77aa31fda565bcc9b0770fbeee65ad28754df0bd1381738aff807efe9e7b273ef8de9f7c3fe6ad3f4ddf0fd601d7daf7a39edff115ed8db47e5fe1fd1875c9b61f51134876cbd21574fc21fe16f3dceaf7534e4cb9357decaf1ecd6307c0424eb81425a05c13170b40aa25a0bc670f14d90a05ed839877312bef5cadb75992e690941b9ee96be870ac99dedf60d4592a63c2efc4d297caec35f7f926e5e784e10396e3faa7b8fc306727c86a771b87e795768aadd05d0a26b9ca7663deb50069b72d5a6f1ef78a816b76619b82a5b67e98f2d31885ce538c26e14b1981d3d3f9a79be5c9435ea8f4f515202228c6b2c981375a40d85941516e3ee14713fa084b5a95fe56fcd911c4d6c52e845b5af075792598e95dc24cf9565ade18a60d9833f664f02f7a657077cfa3e12f15f53a63dc1026502fcbbb5a84dabe9dadc8188bf824e6bd8d91d25f0a909fe09c7db9c7bd19ee7e8c3175f350212fd08e195f0a6c9541f12c0661eea5551dfb5dcafd4ecad3e5379efff3d5f6caa5e5b27d9548875891bc52a6ca694c366a11caab7e5fb8025e7ee824145c6e35d2cc73096e11880e80f2212b261e2c0759d91a209b654c89fb478e2b93fd0c5b2c1abb093e83d92d39a6828bb243b57db980a4d6e66fa6e1d4a9a34b8e4ba9db89c699dd812570e8a91f48854e91fb670b64d8964ac8c9835867ab82ade6ca10511d888180a93654e77ab9b638791b1f79c676d9eb0c042ec65d568f91b7ab729022f99f5d252b2c98d03cbbdc319998f8f6fa2cbf208f3006a235573b5d944c926affd3e31c17ba797714c9fafad8dc2a9a1e28edde943c0182f385bcb02c27efcf510584ac1f510eae09852c6fc7fc0971cfebabfd50f385fa72cfe52081e320728f682699f88932cfb1b72ea9a2b2652a4284be50d263479e7fca3f9d812556f68bec0336f1968401851197146033e454acdce2dd1d8fa17cb77e75cccd4dde28c69174bc550e21a4e568fd64576bbcc8bfac8c780d7d79af70431155dc8163fc158e98345e38d9d05fcbeb3a2e84576370558b31064ad107fbf2909949d371bf4fc1b277d708fd850e40ef05f690fcd7589919423a101fe965ddaa90cba2b65899d9e7e6ffb3c99ad1bdb6a8182f44c840a0defedf3f98eda1ebd1e945ca95303fe9cadeef14f81be7168d9fa2ce5176de1391b42315091c28605b0003e86c43e4c2223e254db08f581132f9ffca84bc10864bdf667bed6c10c9517f8d441a12d60fb4a5f911dd889dcb5e239ff06d93a06599f2ad8cc00cb7327b63caad73005d0415d44037550a890d20d2808f8e62adc42a76d02b167d36e890ff30c6da8ffa5fc6292d3a1a0b360343825aa35d657b641e5ceeabeb3d7bb964515be0ea8518fa109afcd30836940075bd0fa71bffaad7cfb280be22ed8e8c2314b22ad018436ab1867042ecc835ae71a11d36b9f76d1cdd005f384754a9079a009ccfe3b5fc714bb64b658dc4215ceb05e598583d995add72f7b892215f70b117ccb40c3aa35cd0286e98d0f09e34ca42a52e9ec016d260d4f7cb4161f97b682f8e7eb08ac5446460e8cda2c0b487515cc6511226d676a3524a2b785dd3320840e121c59bae2f29f4b6a2df571701374cf1ab840bbdda64f4da172e1da645f272118f03cdb9314dd0d9860980a3279888e394df6e29072d1ea211759ab6853e046755ad961fa9f381cef5d5827ae84f8810565a36529e60582f42440ddee7e0d17a0a566022faae8e2cc7f01f32a9a3c277613f627a124f2c8311b48cf09274f2ff15894a396eb20c24cd543f9067715ea65b7eb24579a4931e083e8ea8a122070f57c0479ee537838ff2a027ca4b9ea7b651acdc983ab27aac47f9c376103a8755784f835a4ff5798f842ba059ad315342bcadbe3cbed77af7cbcf576aeded3370615a7fe445b7262b536c9365d46bc37b4a988342aed0cbfe9a92bfe990064ca7da006e927e4308a33bd485e8243d4a10b8d47d7a773d35bd750b1ac84ae520cba9168ec43cca5f128584de6101e4a72ad34ca0bc514f481195d965fb8bb82c358be31a19a74eabc882678640e384f7f8ccad5ab6b7c495d75fe4406ceaf4b3e63fc6f552b7873a39500069c4597684b80745bd57ce88402afc27e6c71a6ffc295d62b96aab337d250623e9daec6747a3b874d0a4a6ecf7c6cb82247fa74806be67f72dcc0450744dd301adaf5769e66b637d264d5e3dab310624817c23661f52ace288bf53cba1d71c70cfb68327fb3e5b96bc947d5c1a024e3babe5c70634d83fc1ebc6b062e015835e44243f9aeaca0f18949fa8729929c211aa4dd77ba6fef5e7e19f7234d379b3816e8fd27ef1fc89abfa29e1f2daa9c67ce4f227b0463b3fffd6369c2e743993bfb6e2cc8193ef2b0aaa5d4c6dd54ebeae8f3170e674a3c8ffffad79b11787eb2c723c9f846b82a922cfc88676d37da014413ff12193c5e6b6fd753cb529e7470ebf9cbe67b028ae33d52314c75dbe79c5ae2d2798de5e5f7bd7dbc67392a235e0e4b6ed60e0f634bbf9207b9ac18d3d85bd63e8d5555ebdaeb6cd93ca114e0c4ecfdb248c998919e2504a5f9c2439681e0d9b135e202494b382bd36ced7d969fcd3c225b9345a1ca825a50ef4a9978690de31d8e150364f66c9773faf6a8c0db442d9409a6b16507def6ed777f3d976dfe9be4b2085729c79726003a2bd239866d8173c86137b75d9dae520612ff924695ba31f390ed82fd2e389785a03c4d488d2f65cf97658672f291087d907540c70b2fc979227db772bac7b8d196370440c3951921535183144c4c36eb556eb91c519cdaf8e84ec795713f0b4a3d0e4be5e9ebec79c17f542d8a66234b84451d47fd027b40f13292431ed6c7c2924c0e6e0a2982b20ea7f6af0628635d6826cf7ba749609ba4d0e96235b71fefa4c2c168d6bc7cd03b97e151d6b788672ed239cb02802f2560a84940cc811b4a05b95d1663d38553d598ed70a254869d19c5eca0d52e6534078bcd6d42b00613cc9592ce9c8188322985137ea98a64b3a264bae2e291e2cbaf905a8578875d24c6a8ec22bbcad4add43059b51453517c5daeb3827f72756c915df2274511c818b2c798a7a5eaed70428a8e5e3596681644c7ce5b3b803d28c5bc72c2c049c6b15932d857cc96b86641968b11c92ebc6ed0d1c07becda4fc01bc66a493b9a20b46c3a71f7c6a3abfa214321d78c461aba60858054668f03336373458a865b8f804df505afe53474c340d8adae4c9cc617413a10d0ac46b53472b4e0e81afd1739a611f8a881955f2631c979282332ec93a51d976103d7da742e89e7f882304a5cd3e4176a807eab17a527a28bd6821112b80217d9aa796523c8b6553fdc4f47bf9896ac069415e8251b2c5f45980378ca0374c78537862f74709f6e35650eb7442324a19ea2fe0c0fa477a450b45038eb18cfb0a59884589f58929c738cb008dce9a0b151ebfc05b5d70d13a38541bd4339283108efe1fb3adb91216a394028b203dda64f074dc184c2aa587a22daf4e740b341deb3e1432599ae3200e96c3be40358822cc523e4e00cd5167f7e8e9430c3d01be53254b7a62927640b283c8eac709c219da51cd806ba79266129c0b42ed6736c85f5cdaa03651af2a902ffff684c6f280517a2881e1538d878eb837b8ca44ff14c1e5cf100d4a7720e900585560ff6c97dfe8915545f3cb106576156354ba8a1b2f1efc8495a3c59eacf36914915a3c3f5081fb2e4a80c90a6c76d8300201862b0a41960c5877e2ffb83438aa56e2cf8ccbd69a7a5abc890f0626220c6b4fa397e191f51c709e2f084a602913aae19c4ac7ef9a9f5bcb9166fa1a8f89abd59c8c7a52358b315f54f414d7e6d34575201bd1a4a640f9bed2d2b54d33ee1642ffe777d4d059400fa7f2b50acb5e732afa16948a2aee3231475d67a85d72a052f1a51563e4bb641d562bbdd5a636b3c3c750119c0b11dc5110fccbc43877f9d853b836d206b766d969cd8270d6368cf828b3c87f8004bc7cd674e8b739e8a5462a874e4b0ab0e6797e9b9638219c2423083e5111bd47c173fb266ec8a02ed32a18a26ffda3f317fa6cb505bc689c6d93fb7113827fbf0d20a1e5c46148aa6eacb96171981a42ffdf41daf951bca5a7305ec14d00595d8d5584c5f395b5bfddacfb55925f40a322c5d80412cf79b088305ae52e8e782e862a7d707d6832e41c6e8c984f804e88438641704812ece4be3532aed6cbebfe0b1367bd83be0ab5b1bad84abed07be2f85d6c05c5dafbcc3064052a46ddc964fb86aa298c197a1dc1e16eb63cbc9da1da5c0a3b2bb8f75f59894d2b00619330b649b94e9fa0e08bf437e43f48f14409f1152739e89b154dd70af1d08b2cd777208d0930b3f2bb3d45929455ebe5dd3f8cfbe9b99db3118349b7520173b0e0e51c5abd72b88eca207fcb941daf8b89f8521607730f49733704899c39a683082a8f972ae331a7ead77e6360d32a07c12435830f6d6c582b0826e64241a324413e7cd498b38dbefef8dac596719d445bf2a9996ab10cee8b384f882c156e59247f2f9efbc49330513e1df6b61fb20222da2841c020a8a60ac6649f5807b7890c53b09fdb368d606843598e62b57601bf91fec5c7f347509c44c0b898ab00a3241f249c4c4f54419c526aac30143896814c88f8ab94ee39952f73ca8ae235ac251f8d1760e97d40bc823565e189245e8731c99cf877bc0cdbe4e3f68270a4335f9363c81580bbf930cb7086f5dafc0cdaac8af3d233b99b2d1cd276e689b031ab92566a8587de6c426a7f9cd6513e18374be575c47598741d81452b10652562915256372d18cecfcdd067cd004bddccf1849b846bae9e6f4f55aaf6669626c4ef74cb23e028e767ac2474def7e2b1ffe30d13421fe0e2004e7fab82355c1cd6d73fd10dc7e932d3bef32b70f5bbea64bbb462cda93cae13c254331e9652b61d4b51420dcd1a3491c9634700403828645dc9eff36018ad4fec30193c1ac1fab12e03d85c46657fe11abab4b4b1a4f5201c3d9498052e5ae554d21854ea14161c5367303d03b29adfc37478577841ee51b90ec64703d1ec225e75100bb8cf8a7f2021086dd8912ba1350c9cc744857bfdfc09e7d4d624768d72eab65928c0436910a544e8bf8118d93616b03c80636190bef6998bf1d0abb9f1aa031a6e94a9b8a4126606f41148f31be3837d3efa207176aa6c63ef180fc1ec6e8973532ae7ede5201519e22beed58e055ad0fd207af04e37c0ed40a3ffd4f1b851c3a0823b62669335d8e9e9f162efd86111e994e6357db66c5f888297b354c3ec9a761258ed21bcc4f7d83a0a601f46f5d2314b44c6c261c798e802a9ccb0856655ea96616360a3d89ee057b9fcb0f0e48505e8ef0669e89eb143bd3266c6230cdc1a2fb724a7cc87d2d5edac572436c22ce6816dea436dfff3669e0558a90a0c14546754a72ffa3619f272bda7974c86316601a97080318793b5fae067fa452913b5486212f6b8d2ec53c885eeb505d1459929a9baebeb8185445e67aaf220ab15e8188643acc570e09205d2f1233ccb13b7ef94a55aaa226d5438a6339b2afb9e14d10b64a64e3b7b9630f757e6d854066282b25db01946593f16fe5b743764871c091a433296f706b44ab97a1a0b755ffc00a2af384e6440c2258d33f11885f442560a884647199ec34b0ee47e1ce7e41044488b414605ab685125a4f2da50a70e73b395eb767e6ecaa044486b3cd72be14d27de408990c99c53438ddedc623ba09698e7fabd7f0fab477b0f5d44aa7738c5ba021145cd0d99b9ca891ecf2e3abbde09f7315a2c0b3d51d103e69261285e7d391ace595a4dd130c264b0a608904f389e6c0787ae71332fd7c7fc5943ca2b98f861c467e7bc517871b9a42de1683978c90e602dbdacbb5b5ad02fa2df31c7c7a50f83a9f5566bf26687a1aa49d2fb50d593795935c9540f15cc103756dc1093e79ca5de159d5a226c50686a40a35e19731296a6be8c808bc447d20cc389ba245ace28e0948e60e3024d6ef858ed3d0a1ba18a5373b90583ef7a4738e512c7f64146cdee440810532bce069d63e317bcead1adae1ef912acc720abff667b1c8631e6d798eaa51c3883a78a61b5dae17248f2edde92c22c9eea7ec3bb0c3f8d9d9cced7890d6e8a706950891ddbdd09780f1fe8cefa540af291a646a46360f57906c9cde32311a83269b4106c64aa8b1ce350c2199fa0d353be3ba41e47ad173fa6a98dc765694939616ce56da7e3e3ee182ed3dcb9afed410f30d1426803e8a24d4cb0761b79bef18637982974e303aee6bf4a8f9805f1c9e606e7a723dcafa7d8b7be398f1548d90eb244bf379aa8bdcef802af2ce777d494deb2f1bf0860b6ffeec8e5374fcc7240a22d351a55ff3ea193fbb6dd2af0b91d842d5f4aa0dcd5904ad9e4ab89ae9d70e98896267b51f87779dec0e4dc51d8f893ff1b80dcbead8def971f1b193d55f514d1f5e54b680542648428bd06b47461c12063272b498a4919a8e5c90f8c051bd1055345dc164b97ea33715668f5dbfeff934ef2b4a62c44d6c60b497a614bcd6df20dcca1a23af93512707a81f7a550322ae8b734cc3585fa9185ee81a1e67281bd430c638f20b81624dff320dad5ae20a0b8651972ba263a6cb4f3581aec95c9c8af1159f3bc0c6b70c6bcc9c939b51800d1ab09f1ef524f320560e0f6503e645d855232c7fab30d873aed6e526a58d47797f85d5524134dc4ad2a32027e165c2dc3698e0b3d427e02492f774b569373fe0f2fe200d1727a908968cfa53d22e0f620fff46a14919bb391b594894ec6fe8ec0eae3a695b39661139f2eb1aa22bd8aef38fb16d401eea1149c5da2340e0d2ac67dbaca984230b173120be04adc26938e933b971be79746641bb1dd8481d6a221fd28c1e6b84c2325c7f9e2c5e30a80441614cc1b5a1d35536f283904d28c3ff33d3cfccc0bae738adb53817a0c203a938d03f45e95a9207b9b396d421a22763507c6bb070a8b051acb1072dbe6bebf31f7707ccd99fcb171124c640d3df9a11f3e08b28200521007224d300db92150d953e7e9679b187e41c24728b6c228e0f0faf4c3af0dc330481151bef0fb407edf6b557e1d5437f9df6e090cc8ec73196eaefcea2d25f3392c4d263c41fc4fc7ce0f2dffa706f0938085a11fa646c75854f072eed0c5281efcb94d4b29ff967c50ccbd44d14ba29bc8ae4bdf0609d2e2c364f7df162bdde8e408f279514830610c391528fc11061d6a3c8abd6a288d538a7d8b78495547fa452bfc27a17021d15947abe07079cd64e8716b3d90caf23629af0e23dcf3b0a21be900a3a15178be54d40e00a982e2f5dd7d70ec202f1e77044df64640f5a10a356f714b57b8e8cb2de1df0e82a21a79570dd3ac40942acb1593592ce23ccf1834c622b0c70366522ade85612e5be99efd0f4bbed686760b7fa8bb684e362836490a1eeb3297f94e74f47b07d7314543370129026bae7fa244d3c1c3fd1f185e9396382ce1b8bc1e6902bd7850178cf405d48ed50851a392faf618ae1d4538e4288a18828cd5816b32f23d33b86c5189d362ee726e9d465932ac72f22bb4c30898d3ae6c9d57d4c6ba46e4dc2cea145e129481390a0f50e1450784ed1064c5224a0cc3a6d55877022568dcf8b3f41c2dd76468a240556d68c2938240b801f3b2ce624591edcde940114838325b240032b73a0fdb1c0ef7ec7bb00f13d0c2459152801305eab725eccb3391e778c2d7a1eee9b161ae28443d1c6c7d4c13053bd9782fa3f2c01b91d042617aad81a1c6845f950073c714e2ebf7b645e1a90745a7c9abfa9ee4fcbbbd37b4f9072c8b8135ca27c170677d0cd8dcb096d4e4743cb023bdc2b7b1a3ab8052875043ddb08b25ea8b1a429bd012caf6f99fca7442eb60a9b0bfa4498c70ebf7c1df7bc3f674742d338021ff1c7d9182298d60c1da6bb2283709fc3b5332e89c521b8ed8a83301cccc670458e427c20a1532ebc1314b4001487bc4391c20dc04585c9f8ab90742f845cde27f0799bf0b446316fe2b27d29d85c081b410309675cebc61c6e651b8d11c73e8b4ca97435a51e5cc5f4515b6e331ded9b8b6a5e5fa960b7c02b968a83cee0bf33b0e78f3d39c72c10e20ddcabd758eb08f2a167c1de10f70289e26708fc257a90d6941435385f3e643c5a7890f7f27d0a0cb6738f3b80ddae380b53858b41e71e0451aa135d1a16cf26c2badcfef89c75adaa1c385f4db3acebf00476703e92cc2e15bf02dc18f1d4a97df4cce5c51bdaeb871b0f9b10a7e8842ba32e3cab45e71083ae88f2d2b4585423364ea0c0135d5ff6f120d1debff8966c1919c390e3922ca323f160e676fe9005db4c81bc81c1f094a22e9f04954ea7f44ff38c6b19b64f9199e082e84ae18a3c2e1f7c8ff873516d382b6dfd6a8aa07173bb7685664c308152e26b84a838d74c0b41582f2722dc1532e147feefe724baa04642b384ffef511ad1f9e3bd31987964148b6619647fe10a5cc2c33e469b79a55d5fb8d57cef34d3ba4445d701108d1c9977eaeadcf8f1165e111d1e441f77c38629596aaa97db17952e9af73ef49409bff0d588e97e4a3ecb229d7a3a951c00167226e64f1edd719cb21b3faab93b017f3c3297553ddf833c3b9db9ff32a0ab599a164fa74425b2dfcd3c07650a362df9c252be59bb6b582fd867cb68e53141e8b8c6e5e7955a8fe8039a1306bb5d1e8e82c82ff5717ed8ad65456ee26991310cc3459f44fcaa82d0e1dd4ed15e93f28553a474efe83e0eb5c6d800cbf0d27ad520b48926daa29f5c4a94a8fafe9238fac31bd05c6c3126eb4bd8fc761a712c754f27887f54a8f546edae7b99e85a9ee1f1278ca88fa576aeeac4cba101f3b8be68c43f374fee1957d2fbd946f9203334c1fe845a2dedf40ce077571e92c06a571e38cc9843a0e2d81dfb72e2affd13abc1adbe59da3f9f65b03f866b27c168aa045540c2a6fb00d0bf2e6e67872133d4ea5af7c206fdd3930398eb65b98a26c8878f856c1c4f9a4377767e32e665f99797a617784a8432351f2b053ce6aa1a1eab752dfc56b0fd413acf48efdf19549e80688cb2f55ab222273f7d85b3633d56e072160d5202df7348de13f5a7e485a9d4973e518d8f15fa0b090e214970e46c1669d1ec0fba48c9498e20728756bb4151df1044b7f9063c88113132ac016017c2825984297695db30fe422e0b4ecb784a0cf234dd530b385b3f889d4f03938db0b04641d45f746fddad7894156d03b949808f04a3ed0593584a94d004f1858aa9908c720060473d462841b7daacab876741eba3ae7952bda29b44bf987164e05508fe0f7e4a5c9fb0cbe11ad2c06d30892fb74ef0008341c1415bdfe2dfaa52c190a5217d9a3d0418521d5a02cc0878b7c3bbdd5d1a93bd0cca63ec4e196ec909bccca1a791c8437368dd0f26f8368be5164d9ffc495ccb4d3cbac040bba30486d8c4a415c1e7cd053e9688843f817393c1f2c2029029c7c9508d70f82c64e86b972262908ba30a040c3decef16a797d69a3fe89efbc06320e91bb9f6db3dd7defcb8902e029beeee9f081275ea82e88a2401e529a4cda78ce32965b3f3ba64da14655b6725f3e92dee39e171c9c05eee486a0b971b12dd408ec7efd6033f22d3bffe875c3eefe9f0d5b478fc1cc111a4397c7bd92c284d2ac44abe8d9a1cb0f3bfeab315976995c56d6a39f4fd806e068140884cdfde50501adf9d00dff533b14ba273da2b31fab317ac174def4dc57556cf7921caff733f080327ad36cacd5e1a068c0a8b48002a4b8e4debc8c58f7d24fc804aba91402f747211af62170cf8e5b7d8caa3edceec3e44124b0dfb0d0394331cba99ec344cf2e47ca3391ab5076af2ea320f765a4c04c56d56f00e58479441752e26dae2d37861716220f73026645dab2c68570a039540bd7ac8360a091f99273d9346e0ceee49e731015c6bc381496bd830714dac4d1b4253aa533577d134f49cd231fa522704b5011d06e71713d2fde8f307b4e077a94103ca230806347c640444860630b18f44f034bd65186290e9352b0a157a8e2450fd575ff48104f8a30975e0445b6b68c68eb08dcb8b19300c3a01a79650469f29b8653fbea0c954e3d591d15712ae1a015688710e7120359e094cf18d4bc5299840bf6a58a80717daa19a1944eb4bc923329d92550bc79e5802cb4d1d300ca9abe8ec99868dabfb9ed150d93e2b5345696be4de50052a35b3e2396efefc12c50799e1298c29a7e7d67a9df51179db2f19a926854bf7c42fec93a275dbd80edf4b8acb0cd35603e1fd4b540346a1a81d363aa8df80b2d283e64018efc08f3d3af5dd11355426d014a2ac9f4ea4c54ca8c440adf0578fab9fabf955ca16bd054e7de6bfce1b29e6b21ed290300114bd0c2404966914d696ac5f238389af9e7a22ec20d341518a063dbb2703c786d0d8e46bbdd21a349be27bfde0f31ea77d8e9f97acc4f7e35485e285cafa8a825e1d4befe43959054b4f0b462525bfadb667e675accf11fb3151d753b729ef48b40f256323600bcf53d4f4d0ac28689cbfa8205cf97524f3fb1f4fdfcb1f12e1badc02d796c3645771699551260e5d173fe241f7a572b0035339e13942bee08c0ee07cf1fde6b4066cf471268dc90d1d3236ea709a19382dbecbbd5bb731781b6c6873e99f0735bcb61a911b475a06e325d0845552411a8eb89cb499f49a48baae83bb471fa617977c9f40daf71238bf1abb41ebc015b3fa0f818e6203c1f2aacd9427d3ab207fd56f5038b858429f0ab556c94035c9488284d08a78fb150910729f3711aa360adb29db85eaefe8c596a61020eccc7ff17cadd054e621a87afbad11f87709c77472240e3176ce1579dbd9920883dbde10b70f8d180205dc10dec95414c4fc7340d52d8945eeea3ed08806e5441e2a0ca6546e6cccc104432153d67792498a678ab0d511b325050d691e767a16642d243fe54bdbf6585e14cdb29b571820b8b705ddc7a3e1de5ae16a98c9020fff0386582e70393233e5bdea631a28d47c7190611bb11e0e634c651e1078a4760c624babfe3a6b394b923b8060d9a7e479d47f88d8c754411f2efced384c34bd13dde13493b74926bfa69f22e156406159fb36c6e1bb668202ca62f772f2d077868d44aee23bd4a1a2498af8b38874523367d957bed2e9ceec8c28e14bd43bebeecfc207c0c1d2ca5b4effc7421e890ede6ca22cddf3683cc68e64a1b2dd696357cb5379c2dc56e5bb658a5ed9dcb9f0fdc5896a704e0a3a16a5ddb29e8922ba0ecc217481d312bd686440f69740a342140ef1e3827dc490f5a0075c431619c2c81b21b3e68f13372bbf9eb3c83b1b0f529455a0e8afcebf3665cd2c7bcc882ef7aa02bd26d97fdca88ef089b9a30c5a7ba9179e8af2b4d58f5075df584d10d0c9722b83984cdb5996dd00a231c130f1614b044b9d38ec58ede7d993e507f0deda011a9d49943f81cffba678f403078470089e669631b65ab790202e7d616030d00400e48387a479fe0c270b1bf3e245af889c7a5f464c36efe63beb85c354e329786a095541c3a87407e82bded3ff8f5545d5b15fd8199fc9942b7e3ff704bb60ea3fb5012027ebee2dc645e16017de79dde8d2fdc3451d0c4963a0242043b161b479cdc4e9c9c69b815a220abc9133a74ad47077486e240b26fd4ef5ea014ae8200d33d10a5aea61bbd5df2943640cd8be40e13c0617d309771b8ac56a5fc40d4d2b92ae4dd2bf6f4a0912a761daba652bed351c7f7fb77d9015cfc0d11ff16c6e7d56e994b9d3e9b9a535397520b7b7eab3536b8ede81af676206228703101126ca3856f6d15d37a5cdc8c60778a16ef25489646f0b9cfc01adc5e590edca0bd94b65e8193873f502fc8ace70d48dc73c48dc356bf05801b1ac67ee81775cb9c6d405490dba3dced9b8a3392e0994332648f7f8c76830ccb6089dd890192c23655badc4ba3ee73e1ed4138a03da94fde87c24721fbc46edcf42f087d9f57403818c5016844ac6f3af66455b24cdcd8b7d9fa8d211ab6e78ac914cb249e91087133a0d9d0ea77a3da7d507a1112531e33337c34d2b0da4134feab903e33d7c536b43b1ec6d3750512b7a85832641aeed96d511df3a30dd4652ff20deec72bdf1cf8e8ba7838add156d5303ca1470ace055c263ef6ae300b1385e8fb9cf1c310e33ba941b1f8ff86f1aecce5be806185c73b52316315d3cde00fd9909649848bf3b2b11234bed850b286776e0a608a2b0b198f40320c8b14c7707675bb6bc8fddf39153d024120afdbe88164384576c705d2a1efe50609b7214b2684e8d22129c547daced52ee9d83bb5172698233b91c0215990880a3fbb4ec4a45c205a347c3b5d29ca45ac69ce7805270e3e689adcf9e96ad325f00aa90869e41804fb05873f1cc2aeb0f0df693001ed075465fcf042e2afee73f2bc133be8bd2c63533f1f31018870e66b17dd45beda74b0ad8419caee28399c7c88eedfbfaf01e3dd37a1f513867f75b9b54edf52c36980214206d8f01a87f60524ff51c012c2882c1f5625a9bfaddd4cdd2be07dfd7f55cbc22608205be56b434cfd26330ae385283d5d1f10be545778184c74a77d035211dcb0b42ed8f444c8442fbf332b9e5c1134bd773c105ccff556b52268fdef9afc654933abbaadac760434eee14e4030d909c1d91a330c5136afdf420faa09db4fdd2d77ffe89fbffd5bc87dba1752fb82eb61c17adddac016b2ea3fdf6a99ad25fd81d302b472d200acd436875cc3596603bcaab41a07c1c2b374241b32f37827cdf8bdfbf14cb336935437ab08e718872fb036ea0d913fc32d3d9d6e56661a539d4daa8e1ad4ea7c95c032391f5a4158dc32a59f5d2bf0fd88c58ade5826db1dd8135094468e6f1ac36c08d3ed9ce2c958e6ac81f1fd3e2296eb1d9fc882ea6e1f6ad0b128c11fbe9299730ad198a31e395d43adf92e324d5cf4fd141b16e697c14c43fbf6d22be6349836612e770ee0f70756f9092707c3a5b4274027289ca82951b560946ae6e80b3ecde60b194f5c2ff292b1d0bd986c0ffd96e5350597a2c40be8f24020549ad8705b2c0460a1c533d512c3138a4f846473f93c888708d591d14d94cb94750190ecc3f17aad80a424075ca435888e14d2b60ad8491135eba76b1e7daa6ec87b8f19e597b8b1f78719444723759f2a608cf3ec59b8b7584653e3311fced03fc61805884b3d0606a618383d5145e9a30c085d9d482baffc3476131f933b63a1b88f8f7104667d2b28457c42fdc34ff23e23e36dbf1103deaa1111b72e6832a3461ce17cd020d64809b526ead509f9588addb2b8ffe9eb51bf8b0786f6e0a6da650f6960b129f001a69bd499538ee0ebed6cb585d9eb1d56ad194736f3e21389089bfe72b2b1f31d37541ec2bbded7452fc083413631def304422655986ecac19555c224b1b1b7c0722ad379d7e7e15a8d916676e70ccb41c78c22b6c69065e78be41f532bcf7b204f8e9802a70930cd24576be5c0dc89e5c23d55b141318b71d4eb9ce369c8fffe5ec01826c2904ffc53e8d46a471c800274a29149b6086fa8d8c1a0c397ed685282843fc4a35f491f70a9dffe2c4f8edaaa808d02d984c90c1dadc3aff9ebced30772c285393329ca4cb79a295ba6b1c4834dc2ba628f981f712acfd98d20dbfa1e97c5001995d001d8a840a60fb06f3d402b26309d51b538253fcf5f1ef25949c90890b847992d9aceed4d1522807f5dd539d902af9d13c1d4103cf72d45059d9af2a6a90139860d3e736c52c542303d7cefbc66797066a6a4532a2c812155619df5633875c325efe4a557772f023bb92ea72c4a44b12c1934a8c6e1af196ffc9d7a434f1457494e8a567fa012b7a592a9809af5dd51ea307495be4031196b6afbf47106e5b9b3073e2b4ccbea232a913d08382d63a0362f03c0307e581c927d8594d228c6b0a2748c5260c0cbd535685d3ac304a2cef59b8c0a12a7fd77be35276d30e11a0ffbc1f3d09aecd8d29f4f7a01cd0eacc2fb0c52fc250283f3e877bca7ac813560f84e2789df495dfff0e330cf9dc66431d3a1f9f3cae6091e8810224e08c3bcdc1278ff40f72904165d901bd470ab01347e797fe20b810d3aa208a426d4c0fd1a61c169bea1e10ae4465894bfe5274d4a858a170e572c9637688ab5adb641b96120d2616815f567631ae4971c8bef7ac1378651a227506047e9af2f32c1c48910f8a258e2ebbcd2058a9655bd56fac6381469715a67f8459c501379bb47d888ff8453b5ed1f76d7cc5adc030b1e81876806d4115af28210580ea51069906dbf3e40cec3925e0cf4afc5f76d88eaa3e2503468b46986aee7105029e98a02532fbd086819921c438d2db4bb193a5b054d91256336484a65c048584caee22f833e1421cce20b0e13dcf1f16927625c9fbd1cdf6bd5db47bbaff3b3c9989cec607ec3fa049e5e2c4c84a875e287f87b62843c37555294dfee16c9da0457d36f3b7a48d12d765620bc2462060efd479e5525616c990e54e3da3406dd3e0f7afa872ecc4d4f50ff09f798148ef4f5ce2d9dae0ac96520f091b5d5a3204c0502e14ac617c91c51027be55d2b96a1077739b8ef88b16848aeaef2ddae67058bf45f053f0138da7bc5c0b98a244d740f49c13f927675f5bf3bde3fe7ce502bda68096fe7e96f8b3b3be09bd30f7c9f4ea1f538dc3cd8bf2bc3536ff9d172ec4df0d0f796bf92c62ce3de1d395b397d623a5f2c6e07e9d55d8f73a1a8a021f4f7e7c098b7d7b5b69eb7944ff7248467918702efe0a4efe8a460b60eadd5dbc8a262c8f959a8460dcab2520a450b36818e1cca75890a177a64c1b86f276c137c533515076c411c6a1d11f7f0c049351a45be1857034b35b2b3978a44907485f9a4c1bd1837fc74f0774ce4c085c1162df02451b2483a9b3394d249c5c63b75e7258d02618484ad5673600a1f0a0c60d616e120d325bc599101138b4eec64804d33e1126029114a17a810ce98e0f34c07917c0521496419de8687fe8c886ab734ed040502c960ddb27285380c04607c03ecdc9413c2ba40955e58aae80547cc382b869d23f15ab07b8b29983ff8819616eaeff5ab8168bcef231435a772402240812153bc21769d1854d935a55014914119f74367aba18ee68cda88718f9ec49f74bc08be6ed85badf19948da9e891c1cc4412aa29a2f1b951a1c3ba42e702eaec1c855504b29fe874295afdb38342fae937404f58d3ba38fc3500b628fcefaeb44511390a0ae32e2283ee95a5c7a853ab759fb0f8c5c8ba8a7047c9f08311930f0c1e1c46d049bdf04f737161e1da288bb4def1f03684f963d0d5aafd790f674a72e4a94dd6adac625e67779defd5e828bd4e2cbeae9712d9b78214ad953c10f7b77bb21acbd400498ab6af7adefc7cca990aed5e9129a1c21518df1df3d2c262580d1e575bb37ccf354b8d104923ea88be44fecab0282e13d2858682124594ee5371ffe10ae4fc21c0805ad8329118354769b9710967315daef3c217cf2fb0328301cea49a352eb66c64a6503d3881993b42a9b62c8f5701bbf235e0053310ab64f38b507e41871f6089f4d558a58279e1a89baa6bec99223d982fefdac35d0ea42080d2b4714bd201b837220c4b819557953f4f7683a2db7e035771f05bbdd94fc2162dc3c330394fc75538275d3f9a658cfb99c9a4661e7e5024501616654de947a2d0617549085d1851bec328396f55c126a3b0fe6fd502e555d7e2805a62a51643e0d627eb47c3565142c1bf01424219279a0bcf6e7ecd9ffec13808edd86931c2f09e8f428e7988b0c2d7cd4c7a6d24204f675f723fd37fe723502d8ba0d2c09512c8d1f5f57314e41e7da7c4d9b6c24ed9d8bd0ea95002396fd0bcdf9cea01789f9a6f8d0b78da3b4eff744b2a6e10aa21bf8457a883863fdf1d65d5a1667a7aff59fe0e7a1488890740f797a9213e402b47711f95a82eaf7a5e89c0fbc42fa68c73cb83a285c181ac9ff3e3a086b0a8928dfe9e9f26aea0a4592aa33fbe835cddc47be8f2bd8a490ff650fd45d83d2405fd71c8a24bb56151c2c97837d6e6efb72f54c910d33d59650245566241a3f4b8272ba897949ee67c0af1390d3b47f4c9d5e3e86cdfe138a64cbe830e0bcbc0625e48f204292c6729bc1ffbf2384c37d8c16fbf0b336b30ecc78c23facd5560b2dbb610ff06362078d700ee66cf3013321d385a5254aff75b38f6ec958c43a5e2ff6039b67e1e6649b1e818060dae458b7fea82b1ac0898a289db506b2a4f66fea9be7e6c1af95e164dedde469578b6728ff369265a3e07d60b0d36af569fdbb9b0754796a793814618304d567fdf4dda3ba20162c4774769fcbe92495f029601d33350c9fa8f2d6ae92654d331b456e4a2818b30d62530a30fb5449bc13495612477091fbb9558b2ac1c5488fb4da526853e1a4a9baae968e4bf07809533d0beaefe5008246b4ae649d6e3f72400219605d5199f743a3a9983011ca6a1c4804127fbdd2596c981f3c2b43cdea466f66497f981888a497f827f02be17c0169da9613f23b524aedcb06c5c1921136276f6f6c1186196b567a929eab674adf6795bfc692a5e3b665a2da03df9ccb894f4f0b3bd6ffb639d70274bbad3d2177517ca0b2714a046e7e49ed118c869f152cd2baae5f692dfba7a07e80b8cae6da0c5dd8541d104a56ae90a72207f5145719c88cdd6e6337e4b8edb39cf10b0a01dc858e4de50a5455669447d96765ba47982330d834a1809d3a61ef7f1490c84f8ee55d4af9599d53b2180467e4a289a9acf550e497a47e71ea3141672e1a3ff3401841f4bdc1bbc62e3405a4666affd2c805dee24a1d5e4d5a7fdfa666867f3ceebfe78ce1a926447d15de689dc7c4fd614660dffa5ac982db37428de95af6c4317a7eea3c3d89179759a0814e19fa3e9d8de1cdf41a43e162c80712b5e47a4dec3a2b96aec3a45d17166ea24242249b48ab0904b145a71f39ba14b6b8fc2fdc66b045c407bec3af451ba77b0d520ce43261b95b34f42f413f4658f6f95fad04e71647e5017a4e08dd501849cd69cc961e242a6d496e48bb4561030c9e0e76d20d835626a3de74f5f9f26b9cddec9af5892612625189fbd21b7d9a48a961c26a7e9420c2e5b289c66f2bf2080db0c4282589ff17bc4ea612a2c3a52da8396787d71a0062c6c54186d199f235d98a96a317636cfdd31cdc6d51645a743b7e0509f587d828eceb349591951e049d077cf0ccebb31b0c3bbbb0091c049cf06bb5a881d4c68e1b7481b3aec93b2ba08d2b0c96da13cebc5a6849a83f8ba7b61d820b69f391481c24fa58192b8dc73b9caa715731037d913226f09242ff7a357e75e5696447590a2e191c1b51a08ee15b4e48a18d4138630765a7da5613bd8b7e4aeb38e91f225970ab5a7f004cd588842cd2ae191bd303f5fdef385feccd8ee713b43dc68434448e234eb9c3193e63efdc77af2c07151d26d0fcc102b3c15c40e85c5fc939bad9d617cd1f671793ffd8a0f3bc70cc2083c3775a2dbf6ef3cd92397319aa263101c0a5c582c0402b19710556302945fe2dcb910edb4eee09d387cb3acffa21045c9c6f136f33702adc147422d59049bb094fc3271b5699305af2e8d27ee5dd521e2dada916a607f237a2574bb404c4b29be8c88a157d96533b5e32610d61980f1c2c4839ff82f047544b4f98a5a144cf6d2eb8ce8e1843b112de12dfb6571ae1fe0e42a624ac51491a3dcc68a105f059575242e6166f0c018d91a9c88ea2d7b5522439cfd7a21429107b5d1989a10b72a5e0aafe364eb2d689cab1b690dd724bcec804d187859e977002e18975fb3d13a4be88dc0f818f0c21014af9ab66ccedb29740b6d47233f3419e008c577586f8313a38ad770bb684b9beb6f5f5779198be549d72ed3759d1944bf16993caf70ad22f119df3393b90210174ca727cd8a052791e78c66765b9bff7ce70ed10b19bb45198b62d10dbc0b69730cebc8656ac4cba319d4d9af85ac80ac83456c395ce0a582b70e49a5296b2b2d49177912a21c834ec703c81b17b70610c3848c83dfe3d81193f3b7e35086a4ae0d6f5f3086210a6c4ac70d946c8646f7855ebe1f02f272d2921934addb97ca854db09ecb607c9650dc615a49165e9357984dde4436ff96600c887212d342e55f5232c61aaaf43125a3a9a9cfb52d062340cc9baad7f3664b867acd1e891f203a3520a91ce7f5371eb89728e71c2977e243b4a011e4bdeeef627898adf186728da2b1f9be9938354500c84a7c6232e9e7b4df368a6f3f6779248b03baa8194fe49715a17b5c3ab797eaaf03ead0a92da8381c279bae8acbba02be800e81abb1c586845a1c3cfe0513a688ee8b774e95dc7988b53f97a8360a2394b28c8997faaef979b97a3c9719f57b6dc0917518aa57220aabb8e3a1ed5708f09a4df5341e7e79b703d595d81db8e5abcdd869962cf5e9b2b4e7b077db67e4f1efcf5ce82599d0a40a0b311873c72a2853f6707f1f20be872eedbddcd2e22d8c1e9bf8dcd79254948993dfeae8058849517459c1da16d846623548bf97d5d696af8bdc0b291f487a70434f6d94dbf9a5d0c13127f71ef07577026a1e0119d1605446abffcc53a045b49c837c08349187a6b22f667e7f34e2efacaab56aeb3d57708656497bb49e238539278857620522920674b5315c1ee9fe35b6879547d484a22b2969d22aa5e5cb5765e726052f0f945783381245c4a5cfd05bf39b7587755e548670439d29e1e7d3bc1647c4992f0b8cf5218f247bd8b5f5fad8fe2580b9c27e23629e35235c46541a6421a531ffb12088af0087401ab708b7b3ffc4ee229bc33261808e9da6a600aecc5eb3451192705776407fe9daa5b488c841b0b92dc369e798ee9751dffc1753a1d169b80e4b49d1b6111ace0d20e6bb0dc3fb24a09a99de86db468779e460347adfd04204b30e6f78010c2fdd7d1563b42ea3f315474f807b1b2ee89424c1c7cb8a1cbffabe83d46488175e944218a04d099db51709a7adc7f0b6eab5ead2eef51f6a30ffd0aa1f90712053be93a848d5a60177f2099bb96365086b0eb023cb6f324afd931a1d24d5b843fa0ae177fc286af452d8f916d3b9aa24ae51b0ebc99405d8d6cc9214bd954db30ae65bd86c2fbf407e661fe9507302b4ea5c5ff6d3f3ae801b92e257505558325d06ab3949db258a5a054c9520d22b22b5e0a5da479d5d94499e1e7f32a07912e0f2e1e73cdc0d94782202efa0bdf60721cc17d7dcc6683233d2746d3873ecc3c986f1e6b8301dd6287dfbcc905b04e4e0d29cf5c963014c5fdc8bcc2937af95bb7a7b7f262a284c0d59c0cfc2c88d23661c542482f68e7d723bf8cbf41555bbd2fb269ad7d0d17df58630cb03a6a7e0b0b6fb2ec935ef3f409e3d2e7b4b7042709d12381fd2109c0bf7364c9e9f797cff9353257a73b8f1c9e3f2d6e7e13cfa7a8f36d205c01a5d99c852b1c57565f64fe590bc5a3160d90c8141bc5cca32b3482231c4878a7b9de71ae7857765ff551401f81cb5be6469de481593fa519b301b9a6b2ee0a50ae58748dd4b3bbf09315ccd8df881322ed05988da3f6ec4929687428aabb260537e869466ded336e61a0be87d6c34b071372f5f069517af468e805a47f38f48144a0f2499545ad8f19e36684d9b400826ccb158a6eb4c2be6c4c9eabd0937ce73f99baa2128b034d394e69244d64637e1f5efcf3be515c606acb6fedd79d8b2531d236a1cb9a83b01521233b523f3fb5a56dc66bd40a3cdd3a9b247f28c42b31c164a04232c811a8c95ef38674dba740026a2f3c7d4da4c21240514718aa73bb088f9cb7826a7a4dbe72cbe49ea9846181f112c61de114868c50c70b1a56b68f103d18955c85a32a28f0eb9ed80472647cc4f25de499d61b9a5fb12083504a71d4542806cf2a7fd6735f45094de6b44cebee1231d764a09697aaff0d8b259ecdc9b4575009826269ed69939b0354ae14aca08c535cbd4dfe08b9230044a8d4a6366cac13723ce91a5cf50b8ac3274ee31dd16d5c0930cbf495a094814ce91ac4e2b19b2bc2620d3b0037ba989915d089339fd0fed473c95511610a1a7c976eb883a152c8f667e3603153e9c5357a4a4de1e8818fb1507dc76960baa5370c21719ddcd770707c3a7958f2b1f3e298691bf676c7a0061c4992adf77fe28d53064cd0c3888a858481a87d89ea4edd8c36a640ef87c372a52e9e853c1f59259087e7a3baace3dfd6cd0c1f081f6e8e1adb3bdbfffde6ae2a0d4b8aecbc8ae6fc9fe83a304b655ef8bbaaeb4b1ece6491c44fdfc9733c08d740a01075882d1eaa5aeabc05aa6577aef0116eca34b3e1ced5e662d0b79ffb9deb5d83973255e976ffb2a81befb51a8475b5b0edd5149c51fb2a7ee063e7ed1178947a3f9729675fa0aab071014201239db158fe056bb3e34ccd5af9e9ec81a6920b240a2c63c7ec1b9cf5615282ec6fb5eb6c6b40831f2e4990e897fef3d1d0a07a739ad07464efc6fa3f8ca9a5375c4daea4b1ad758c8d45a882753944d0c893e0caa55fe3a00ff2f763076c08243108b9b6f1f0e41620309525cf43953fbe056263df1fcf11bd06ffc824388ec584bd49414eea8ca4aaa699d18e82ffd5215f4c55b0b9a212eb2c93d71880ed5447c90061851f46d0aeb55a1ec4dc0720b92f91e8fcf731c1c415fbb96919f5d99c906233723d1173efc9a346e0f11975956bf2387933fbf732abe0d3a095e1191bbc939380e3c384a3733f5481faccc8a81e0133f356317a0cf0cd20c15dfd25cc993b96a942a7ce90e338aa51f7c5bd280f2b3c982dc5258b37ca7ee23be4302c2b9b90576f4f495b46a5aaabe688e79ce70dc2468ba64901985589fc3422843bd7c4f0b78b56113a8eed389485d605e3df107aeb77dc42cbab641ea66b460b12c2946e5d5ba9af5e51e130908efc8ebebc776378405c33247c30285e605a66da7854834311be1d0b508f21db9766b0dbc8b92342075e0390d75964c8ee2cf38e19b0f96ebff928c10af5b7c358acb18cd0cf65c2f07aa2e77d56a9b6f71ecfad343463e875651ec9bbefc86c1ee59e6941a2292098c854ba2cc6a0cdebc80e01a462dd412fd977743d556ea4226a7c4416a45809c0fad55ea9fa38f944cb2d52832d0f7243bb2b523ec38891a14cb5a1392044d71e859e50383cd850979c35155c7ce01ced8dec8615fcf20767a8b8346de9dbe978e0cc63051b6be72c89a488025c6442552df2c20db1518be4279548f319bc178f591c800988c493fade7abc8b3953216dd12d58d4b5cc1369400a60651586beeec192ba9c95e5ac2b86b9315a3f4bc588f0aae42fcc5dbb8c20d505471b0e861be1b9fd33fbc5848f6d1d2e8c4f38f96b7e597ef9b601cbffe809631c1cc3f686a83cbe7d15a7af982bded1e9342958e56d8b42021f02895d52ba86317928e01fdcae84110c785604f011e0d3fdabf4dbf7c6220634f7e7a5d4e507d79414326da7567a7e246b28c4997b65a6254b0b2608cc1c5915e99e2a3972031254a8b673e8a12972bc15d6fe3ef4f2ed929f16286f06976ae3d03a20c10d821b398deee66fa16d838dab9e582529668cde72b13a7be3b594cefb47a2632c7505d32776aa78d84ccadb9d5d090314bae44bc1c10f0eca9d2dac77f08712a49dd2383e1ca4c7eafa354846101fb876e6068f00190d39878dddce6959e455830e05fcac1be5599d3c3a5a4dda91dec37beefc6a7462975c0cf302dd5141e2fb5017a54118c152eb822484230880344bac4d1ce6ad5121ee0d9c5f1146f159a0cc433a24ed478b4554f1d9efbb122bfc03059b03b87cb815c89293e1063fb21ab3c83b49c643409094be68e084d4d8a2cc58ed2a0fca6af9421d16b103c892dd43a41d33dd18d68831975f369e766186a2ced63a7dcdbcf47100df1f98ed0140d946b28ed3654cf3b1cdba4f0e07e2932b6b10c9ef2b8fb3c6d01b0f840d2715d90008f9c0f30fab068409312a8578d2062b1e933702bc085ddee30bba042d93e9a95e6f320b365ce451723580874eeb31bfb9def014787e96ac2120c730ec95f13b8f63bb9af2dccdc21938bc1b0e24dacdc7ce30b3ca688665fc1b68f3f3af7377bd5a86611a073010588a4ab9d23afa199b66f7e0a85f333028749775deda278d84246b681bbf9f59af6c93c552e8f666653129c781f34efa0b8515c8b0cb5b05a43a1039217fbc75d3ceda6b19121382256f58fd88f4a67e2fdb2dc10a6dfa1cb976f313f79dc80c66fb672b89137b9bac937bedac45444d8330ba4e9b59569aef83df01cf65d84520262a7bcbb2802a2f634a928c2f7d634fa80069a5768aa0d54b0691941d76a616f26535448ab11a45b49959602ccaed9806170a7af57cf649df5bbe5cf67c905d89084e48e31aa189af0462027079727b8de519b4403363d0299b84e95a9cebf06a23cc3821d8b71222e05cc168564e3c0278f2097fab095d7a2ded0e57ddbc69ca5029229f305c3e74c6c986fb855682464b46264b9d6e29c1f62d6e0b4f1334c8b7c1fa125321eb22bf01a601b664846e41da6a2f0bd7045dc99ab37439113f103464dfed1ccbd0b21c12008664b45d9d3c2741c45544e3709e59714f92b4e64cc723a9c42fec282a30e10333c0517435c94c98e2e991a107d0e10bd49f482618105eb3707615be5168b5e768f26da75af8b8edca3f731b39b7b7d95d705216576caa88a842fbd952c3c050c36ac3cfe1fea4fee1e0c2dad868896e8017e730474689782461ffeea45350aa85a296bed8c754c1f33bcae140e9e401793854a3f3272df4c38468026398ed83ab43253857a5f908aa42fe699da16074643c59ac9abd645f6ce56ffd387ce9425bbdd0904eb964535ef0264baa96a761127d9661fa9656b01dcedca5403684017c3cea522b9d0d7d2c1c5ce6705b3a229ea397ebbb6e739db9a633bba95245b066d97817abb59f1a2d0ae3660624a7546bdfdc595f569eff56a9092f91fb0174d3668c82cd6b7bd000b459b6e85525a13051fe79d9600a65076e8e6e8401a09f84d98a892cea509dbcc49dff007165c56a9a3dec4a836ae8cfe3a79d75cb9ea42c86cdbc65a02395f28d9c40d4af37c7fb230f89c4c7214e0ca64ef3dc8a1d018585af8cd37f1b3d02133d6fe80bcec3dd2e46bae80d079e19905d57755c19ef48fa631cd0ca9dff2ce59c3fbd106371b739ae23c11d2e4b5050df3aa57bc3ab110091e8f197d7ea7f982d7b6de1431ba17c016eb5c90c6488ef4af55d1c8e90b036442567f88cc22f09456b5392c1a01d7906f9c1ba1c60d56b02c32604b171d78d18a66c427a762bf343848bb470418517214a4955021b896f5c2491aa420e10ddd79d73504d43dc7f3d3a7cad4ee8800b79799c5087280eaf581739782871d9bd011e1bb99e680c12fc8ce5ec622805e369b70f9d3fbde89356f20134208bcc53f5685defc85562ccc6ef8e563512e2ef3903f69b351b27917cd40cb4755cc025b63e8ce8a119934ddb1a05f892de3104bc0eea57a79a1d11fd8793d3402519bcd547ac86d5d08844c8e0e06ed90712219973299ec61efbaf47fa228b9c3ac73ef0bdf392e8af9da1670deba8422424c79a1d409a36a7b5631d6ef8ea610f8aba85ef148444033a63aa785b4094aa4d0739ee113297af9f2e38a86863c0cda75e0178488e1f0af10ad4547106f833c1a240e531c6992493711981d1e786d5bb9f038b3ecc0152d0ada8e31e942f0cf0f417d8b27dbbb0bf8645bf6da146f6de5bee2d534a32054e078807ad07718a24a8ac4e35d890ad5c2724f16d609dd60909e8434a2ac2a836451c164631aabb4afadbe7234eb348ae7bd187c34518c544b606abf2a35fc832a8f20bb9882abf9083a85272922a9f3f10f83ccc0ba0e7e76f06ee41bf357e20f0f98e430f0a7d91089e91118741c94c8441f99dc738f2b767148392816022aa7c54957cc3a07c94a6dafc460b74aa7cb95ba37ddc9af91b72010db787046ddaeee9913df263116bda45011424a821e2a0ca88a4ca288320629129a3922a5feb9edb1a8ebb491fd07d7ff4f33131a01f81bc18d087a32a3f21ce3ffe9a27ebf4d644450b448a68f71702912306e5279f3f0fd8bebf180643dc4fcea344a0dc73fbf984b6aded8d4031557eb42f8c55fbeedbd35a7eac1f2fd6ee38d73caff2734413f6f9781269665f3857850a848cb0a68e6643bc21fa5603ce9f8badaab2732754c3f6c5438119ff971656c365c35b0cfa8750347ec8ad17f8b7cf33910b28260cd66d07872b843455fe9c916767fca59cdba679231fcc495af94b7630420d294fab9670fb589123682806b3f9412c0aaaf1bbade91ac3007c386afcc21b996a0a6e65c29943fb3db0f2639135813df3636b961475d8247caa8c32a832161183a8f243435019b8d41f8cf6fbe30330fdec829c1ab20b722ae8e9b603560ff2baf6a674f9fdf24340d0fe8ffb42fa759f03b804b37dac9c17b37924d233287f7a320ccafdd495228723d5bfe652f693cae0fd588382200fc8034a1918940c4a1918949fede0035cc23e199647062eedcc9947904740df7de8b7080d252a74048d01ddfd843c1e1bacc973a4aa4ae984d74da7ca28a5942fa5941fca9b2a41f2773048bebbfc8c8aadd9ce932829a87f2851b2c89a24a84a9632a892ca223a88aacadc89e0541c4911aab81a341c3915479286a7e169c8849a4d6d7742e3735c435f42b71a3acd872a7c0e92cc8a67fa99b009a45101ccf132a4981ac61583bf42634d31f44c89bf68258b2d816a7f64b2355ef9b78f44060d8217b5579f2bdb75615b118cdd22b268408eab8c0a30079762ed975fdc00cf740c0cf6c715c715a80d1ac6d59cab5e31d831b256d90e58f1f402bf7f51090de36aa5f9dc69a96a485b3b2f43f384e30f05424b58c2129670920f033d223f77118b7e6ddac3aff77500f300b4a6ee57f7a37b94deead89f8f4d4d7482b3fbca259a67accd2c622ca574d17159b9b06abbecd47ed9acad5e6c466bacea8b2455d6d025874b61a693e2521872d9e18cb87811a45d9ee096d09943d0d02515b2d953d7900d162c2d2b389d26aecf95e9c453a6d3335750fed025f5a2e3927299c19a3e5b13ab73fc7c2e337091a287bfd0c58957fc42171bb88484d4eed4ea4883862cadda5cceea68cd25a569fe2e2997255c5a2e52d8246d5c923869856c5c9460d97481225ff318b2d1417129e47242414244a2c70fead91a1d6ea74d2e35d81997d40a60d0680156f13da8cde9b8e8a036a753b52f7411c300994bca25555d74a48bc7e5845e6c382170f2f7e448688c359e78f4d4170f0fcb8d1323aa2f9620a20746aaa8ee921edcd425402a3192d455854184a6ae2a0c226a2894a186daff2055fad88786ecc343d334eeb70f79b12e97247dfae204a5bfbfb487fc1008d36f54b9ef2ab77db6d14de46d0d79b1723faa1d9bfc4443bfcf6d89d2d73e3d486063638343a59f8b72a0b16a8f711efd0d7994d2fdf0a0f43f3c44cf7527f2b40f79f497f364e5360ff414f4a19fcf711f1e73034dd03743df323843212f9ca18f1f1e30a1ef0559e9d3177da2a7def460e8c74a7ff340de11960f867eda0707b41379b1863c10cc173d17f234fa212f9c55f3b8e9710d41ac212814480d41ffa3abf42797b20f3df6ee516f2bfd3a06f7073424d598df3a6ec411a92110aea1e7bef3f8c3a37bfac138602bfd16b6d20f46f4337c38ac501817e8cfa73f5ff4dbdf50b5077921900afa9017c61a7a11f538ee42dee7f703fa1d1cf26ea820ef47573f5fb7432c00f79a177ae57e47efe0ce5b06b9c4a5ed4715c364b8cfb7ecb5e7626758c79f1cfa257efc44209eb29d6c277382ff841344a230db7122186c9c8ddb20ff1c08069bbfb05f47e4d73c3d13b6cbb5353c432e97941b2eadc904d71456b6d357786c5040bcb21d2e85345371290c654f644a42998bcf2082f6ef8d1cd6134470739b676bb647acacd5d1b3679abd6c75f4cbdadf5a98325653e1d2aa9abc6a7f2b48ed7eb984a8a1df04f9a8b44852639835948e52c39652b7869f63cf80f9a30bee4c83a086ea150424a89e469cbb433972e478d3cb3e1864ecdb47f7f7c3c020f7ca0ff77dac5781656d05b8b41f6ff615e8676f1f1568ec5b81a6b9bbbb979b9b8bc0cdf7628d3dc48f5e883d7ffc48db87747eb83df6336c7f44fb65d01ffb648f8debf61d41fd88a9e6c9f04c3ffdeccb413bd68de351bc05315cf2f78f1ec9091a7f670776638c31464dd334ede3b66d9ab67da1f6db73da16e316372dc6eeee66c36d62c01c342008e658ef4953d0102435751ecedd7df2cc66cf4cd3cc6e681b224733469565685450d190864605368d4ebd83d97bd00634fef66c17b732fde9a1eb0a67ed0af8d8a131f49cbd72b20158f46a7564c1711b43c590494854aa0b798486239984447121b9905cb04ae53a3af283e5e44c29041af64ddf4821700ee7f0f0e8f4f4c4ba1f1e5208349c73466c092751343e179242689c1f29c4a3518cf9b42071e0e2fb73214927b63e4e984bd88f5623d60e68e8a11f68385a71464509834ea98a41974568485574a5622f7b79590f832f5dab1515c0388423d60e96445eaf9ef1cf5ed844d13073c2a0b7aa3f334143ce49e5580c66ad393d6331a8d5112b7a3047b6cfbe9fe315c81d46ac51cbc553dddbd3688b1117cec3c7e8a667fc376f84d333feed654fd09bea2db7994374ad51fc50a03fcba4a021246874ee15b5a021a77a557f4ed5a6f8fedc6a6bacd81af9fe1cab4d194b455ded3ed0ad612aa4293466b4e219ffb0eba0b0ffece828c603a9e8a8a77a387ad5d18a1f7baa6a13f78d563de3bff117cef9a9ea8e56a31597bafa8f98702973c2a0ff68c5259652bd358252fd69e675adf6f76cca4b1dad98069406a7c147abeca533472b3984eeac0eff5e3955f58cbf0a86071a8e56aaea3285ea3fbfea8ff99c9476c6eaee248a0aa1ecde491550f9dcca8deca0b927c776577bcc0b7f681af63b18c4a2a41418e1688bea591db1aa87590dbb56f59741e8ce5f1d4e228d9888c0a023d668151242e387a3558ccdcb116e6578fba6713aa753ade9a23ca41768b3af54746dcfb4a128d2cde38039383145f30279de456a5116cd0add28d2f7cac3a0f167dfc470858c5b9cc3fbc23887a75392c73dea489ceec198c5a7e8c93032543c454f03f56a75c48f9f29dc9ed4d8ddf83a4fa8bad08b869edaf155f525fc890862d1d0534e7c8b3579103b6383357d56d948650fe2c90a5654a691a2ba13957142ae861e44e5946421c2ac8b98d0fd1cb0233484869efa14834b30c8aed053ae837dee2bef62a4781c53a833e1526a629f7da951ed2f85fdb29c547657e5f86d751e34cc27ed5cf4e2ca911bd41024af13d742ca70e2e6c479c499e2879e1327af48b9784e1cd652a20aeac4655634c941eac4cd0e4915d5090686ee82d545ead4dff60cef6ecb840723784ed159090e043de4f3f7f01efeb1d741e10db5de10e305a4440182390a81c6df6e66fe3c0f7dca60e9c18af7ee6eaf826e1363bc76570cd4b6d862b2e5fcdb98d4613f67ce811052aff8aafdfa54fefab53ae27f5c743f73a5b8fd95e911cfc48f1dafe87e48a30f1b7f77f6ddab48bf581d18f6cc7b52c5c822846efc361603c1d1f097237128dc091a2f3f822371278ec491b81387c2a1702338147e0437428f6710a4a19191891d819e9352feb4c0a31a468f8961fe16ba475c1dee2308d5a10559f9b985afc33e2d6012071ae3078715cacff1d323bca1720b73a706e297677012c37c7db35d2cfbf57ec497bbbf96caf65cd97ef38064803a6b1e10d600ed5cf5030c46d7646cc8038ee0a288114e48c13172460d49468048c2430b0b29372083085a182948b5681acc476ed0284910018a22a87001146490b164082dac9e358e14016709393c9f23a891460f4aacaef062cd18b9b377ef2ac075a8cc472a1307c2122492ec08c1c50f7c3885b47a193524557715aa3f0bfbae0a42aafa18dc035d056c39d4ca37e03adb1c0c82ddbd9fcc19743f16a19d15bab1633066d9fa8f2ec676d13041b1ba2a284e94a0a0251c9228ba1f2877033194b80225896d099d755550600006e82ed3dd8d49c6dabbddd77d334c66187bbb77776b2ef213dabb7dbbbdbfe69f53bab3bb3befee3a80c1edeef66ac60283fbfe3d0036237591492c9398ecc0c8366dfaa6cd4c82de9ad7d33377776d76d632759bbb3decb21dd0d8eedd340c7eddeab2d47da95bb7bdbbbd63c750a563984f20d28acc867ae06062f56a7f0422ab7f63b51febc0ee0b6f89c9b9bb32cedd53ba6f5d7c1efeed855d8e0ecbd4e8d576c340dd07f4e99a6cd1644ad904c3b0d9750c8934b5265846837ed1b61a390d8b71f3884da009f60102b732bd18a8fb80bc4f17b78e93a151818666c76705065798b3f36454da8a152bd77ddd397afb807187f4316c1f17be7e66d731249226b56e99ecf3de88411aa578f708d56943b3cf0b73a34c29fb30c70bf73e3a6edbb6b176766adce99dc6be27f7edead0b6afe58e0e346218b631c88c38dd73400448a264309f004149e5cf3e3cd801537ea0c2065d98a1841064643a90d1fb832a95dfe58d4f0d55a8417238124bee2c3f9052390a1de808edf40f825404d4ee700895269018c2c80e7690a2e5c0437ce22ac9684b683a9666858a6b45f9618e48ab6d5b556eae403d51014ae7090f3eb06085cd939c223a4f90ecc0f344072c60010bd693253db0b06a3d0163080b57f08c48314e439140e30228d8e0a25059a4864f73a8fb5043fa6408d1451445703950aeae2a0a2332608e05a11451fd73d0a89ad054553eb7597f86715056e0d2e142a7a7e0cc05bd779d33758f4d7e5083575371c39c04029fe72fec7efb1d1c72fc5ca47486b0fbcf03400f24d68e7a2d6ca5229187c34a1843a5dfc61ef69b0744d68e7bc871011f512565d4ea9021dd1e866e1d318a921894efa61018431f13e1fe96674206a2caaf4d3030f4873ef4d5d05f0db1c9132b38a71a6cd0ae589d5abe061b04803af5dbe029609d90803ef4379c628b077202e487bcf782760ffaf0fbd3dc43837f18c5608be435fcba3504dbcb8c446a83eba4cf0d086d7c406d80426d84a83b2f284d4045524a2912b14829e5e7b2b308896e741b2296918b74ef916ddc70e9641271b1688312915948263c99cba6c66d8f4d12a9bb6edf19cb284d3d12a160983b2834435db7dd32e7de55c452d7bd06ef952a6361d5f86956f554aac5634bd753e3a7d79b2c657169964e1ea1a1a75aba1bdc6198a7a212687c1a2ead4135ee462793a06b42473f3cbca77a8ac90b3387af41678e6cd114dccac43d2d6bceb852ca133fb149a9b2039c2a4930a9c2826d08f4061bdc16f453846e09fa7175395013ac688252277ea02c47a6a80104d7841a41362be8bcc201817e8e90a2120423a83ce96840b5ba2a2a2c2aabcd414ca3950628f2c4293cdc2d85c1293da572bb18acbfed22b99a0aead1e3d8c23a328362efd664317236bcf56c3dcdfb21d76d7563f3398d0620b3f2eaf0df7af3e2ea701bb4afffb1e79a79d1797548d91f258f64d181462c2e836273cb6f908a7302c90bc9e6e405831ad247e3d5821b2f22dccb7075552f1c6af83458175cdccf0e0d339cfd0ca7258c94990e97648d9f25a152e367ae296c8a3ae8644f1c414a8d384c6acc76b2568d99941a33cc71b81466a91a9758824b292e7d4604971a50e36f9819a9518bc8f5d01f19eb5b2bed990e6a9443e8aaa6a0bec8d9781127b038468e31f627c61837c6b8317631eec6e82d7f268a8631c6b831c68d5df7dbc7996270b65a5df7b3d47e61b644a99bddea3e9014900be4ea960bca05c5b2d32d908b65876587bb61d9e16ee604750be4ead6092c8e070e4710ba1d9dcb692928ce0897e272fa432e277e5c0e779303044c8d91ce9ee1010d297fc82636e156266471f5c7974268f3703882d010843de8c5257feca3c16bf652f7433fd010f46271c260a6245ba91894456896b1b0585a42a8fc908515060da0575440accc2344e58f12f4f2403d2dc8cab2434316160b8bc5093f77d3261818643cc90f06fb3dc9bfe134f903bd4054768a5c4025e901bd7468d8b579482e8c859a9be728af7bbc569bba795a41b884d52b6ec325e998ac2f4aad78a8d9d444a957b8a48016c216a0c7ca96e28298dbb4e9e5dd83752b0bdb25b1efea0c06a1923122b8950907a0aa1345f7b9dedd0f0fee254a0ae9fe70df71d1658c516e1e7be86e1f7737e9adec6295284a6de8f6994acaed777b6a43a7b6815cd486621c113464517d3cdf1466827e3d29d84814e55ea050a1fbd26270beb8a80df5ba363493281a825e5b0a3da480e25256670a3aa419d479449da1c8458b35a130c1a062d4f9b99851e75324a8f6da872eab14502eab36bdb4e277a379337e8eecfc97d60b14e65635baaca2cb2a8a6afcccc966adcd5c5ce2e11247172cd6f4f17c3c5dd4f9dd8747e46eb2cc49d6ca5c2caaef0a0974ea16a9d01f19ab6e2fbdaf87c1ed4bc1667e7f8ed09e998fbd68f8f5d4f9f57c575c557e8b4ecb8ecb6b6b3e55be0b152ec597efd263820d97b84a16848ea8724d2fad9d99bf55f9a19cad69a952baac3220ac2905d44b943a9f6940c38fa7cee73e3ca41c82862caa4c85fd0e8e91e2e3014d90abce9797168baa4e14747a26260a1a825e7208ba7d8882eb01f223151a825e753e8867fbf920295ce27efe4d9dd5850983d365c5e07cce65e5b28a51a5806ad3fc4c55e773a3e0c2ea44c1d533f3b91005579de14bab4e4ffb39b5cf65d533f3773013347459d59902aace5f99f9cd300095093b241a3f9ec1ed007c3882891d7c38627573043a240a4e0067a02abbbbbbd0022268d8a4a6a096b811fc86bb0e48aabbbbeb547e9f441852f93b229091020ff632786a0065082ba801a84330c308d59dc7cd68a2fafb6393827248e2eeb2554694d5a28c15f06027b278a9fe534af5efa49851fd476428a95e45f5ef501297b2536ff0f0493bf72bd57f05167c6c4d1c637e5284a8fccb599994d290133d7447a44057f0c0e17cc668ad601b9160a004064c3a1a6507cd088a1ba308452612af6d0c368a64a79c961645080fd84906aa1925081da4119e2cca0b70fc14831d2c4a133ef4c9884a4651826224561e85c90aa2112d235c340a182ba045a0ab9d90a069b046a418248071a305ac699a1290a05a420150578584233624d0afab42020e5d1114852859a0718510683831058d263628d01842070d225ea08142c32656faca41f51f915c63bc9a6883f322167185739eca79cedd91ce8644c77a9a39a9045303cbae90f2921f30327d051ffaa5d484a0fe3c23436d3051051355b4c4b216ab99c3404115c6903d665bac4809eacfb9f698a77df6690147c5b22deaf68d7da19cd5b1fd0e8e4a6818caa9dbbf6cbb3ab60fc71ad435ec632827fb5235867270546eb706009f167054f9196b6b70a050e3ab474c9538a4fc160555f370d9c708b2ef30a8c36033883f9859454ca8efb80e83432808b60acc5fa602839d6519cd0a0c760ed7f12498159406a755307fbec320d8998eef80edd9ccb22ccbb22ccbbe797e649e49af9b314250703a587bc6f5cabdca7e829cf94f4f1ec13e62ae6a2e0b6e7269270fed9f1cf7ebc9385c01c098c2e6b432b46350ded01f124575319136ae2538c73506c7725159ee8c333824705cc45c08755601650681a0ab8b00850a0485ea2b7524111a663a9de93433c85f7ab1eed6ce9230c8d9ce97e9d87412380e5bc235d86e73941826e796dc0c7a058dfb72bb0a1658a85458f0d0d151a9b0e09193d3d383050f89050f4f4f8f0c5288142299482162d475ae8a97119514e3bbbb7377777777777777e3ee2e1645e4b88b496f1548ac847dd84b190b1043f815931826a5dcd14cb16f7f5daa7f40640cb0f5300cc3b22cc3b2176cc48f51e60e63969344cabef9fd0b4efc52d973e86729a5bc8185c79f9f87fbef588d0e054bc80a88ccb59fa34c2c40c791ef8ca495997ff908cd0e1e7d414be1f7b373fc28831c4e2a6b386ba8fd936292277d712981b62cc1a62029e8483ffde17144caff7c44a2cf8efe78f4f9e3c2925141df0c9fdfca61deaef102326ce2a785971a5a15415922d1872da97056d18bbe503ead21a7fef87833c8076d3e50d94f9f6b0f069e894fe9e7230bca2da9e50803833e188c0f039b5cd53ec2ae87d7cf176231a8ea1094eafea13f0241aca31779b12e60c70e061b068e85a585f3b4efeeb9b259e0a64d9a181514e2662751b4432d18bc0714a725d526ed5b765a9ee012fdf8a2e77ab6a767e2733da15568257a6269e6a439b6a60654f42115795b475eac212fcc6a185ac996548b0d6afc168f85db96d4d6446075445761134217c060e4384f8b2fb8920313506dd23e827842df12bf45676b441fbf250997d803551c415c350cad4451f4d1296848b917799d14b4496dda9e5d155a513a8a1347a4bd48f4346dda5ef4fce1218a128011bdf6379c3e1f0f067f2d0cad4435706abc542767d11701ed145ac91818d0cfcb1ef9312fa09f97aeda3cd789212f6cd9094db889009f7c9c41439a05ec885b03ca959bcfcd19b5f821169736e4a49b78826a26d8f44cc76d5ac76d5a134c580cc6ef3e86536a1db769b1326150c56054c26094407f2c80bd7f3030780d379c385742e587cb0aad56314150aee18656ad659960c360dc534baa67b029d4556de2542aff9e36715fcb36a746694f8def49e8729cc76d907c6770da6c271fa33168d8926a49c56fd189dfb2137fe48a2daa1a5b5835b6b46a6c71d5d8f2aa717453e308a7c6514e8da3948eaac68def3df6249a423ff217d296d48bcb6f887c03673355e4efaeaf4be97dc2cb95d2bb73e066ccb26fc433912373153e67fc1d1c3f18893d0c5a3cc1c8ed51b0c90f06d3b4978f022472d31e0548fc8361d3bea658f6edd819feafb1ffbc0080c5e47f955f38c9c0418b092a86d8220cd629ec6f051a156822e6030d571524feb6699f3f6367429ef004a5377e41f4b75946cfbfc30797b2978f012e69cf39a952864b6f7ce11c7d21583fdff2859fe80b7da0ef03ae942a3fb9bdbfa6691fb5f5b2acab59f6eb81a0bb24b097aa27581df2c32ec116a004ab00c6a1caf7a87911882a3f437d48b03ae4c700fb92a0fefdafd337603d69c0ad4c88e5548f71524a22fd8320cd8721415731b4699b19b0edcbe289616b3609f049faaa4df2a3e9197fb0baec9156d6245bb2676be2937aa043240ed53ff324c027295b6d9a33942dd9fa0af68c6f5f38b3cf77a05c1c41d7d57a7457e88e6601eddfd511ce1906db1443cff8fb8cda871d1157adf9c7d0fd3d131fcb9156b8425ea2b6b814469c1a597c6235e2f354afaeaa474955f524a929d455ad31c58b9b7a80ba4b9c40b1024465716955568870bbe273a1b89f175066b1222a24692217868440e4d7907598071afe18d58ec11394508ea99d89aff3da51b14d188fa05837ade83a22040de3111abc1e91efde479c48049be4c74ebc58234ecc89cc129541bf79ec1114d5a656c59b56b5c9553164d6ab6e0c9bc5ca82702b137239d59fc311847aa68a9fca7b40c34cc53553b589dffbfd331697b8ba2771ec31ec69dad48fed601904cb321583ce35cc5435478b1f357bcd0b47557b6ece656d5773f9e01536bea6c519490f626470dccf13bed8d172a9a8fe1f1efed1dfe54e517d77f7c3e75d9a287949fddec49c118726599665bda33ad6ddfbb5bf8db14977b7dc6119b127f1b868e8d260cb01ea2f1fcba2a1a1915ee7c2d759dd5d62f1fca34ae7189ffb23c52fe8fc90c61fa31abf968bc707377f7345d3b5e8ccb8657bd3eeb946539a9de1a795431a1c5728cc0b0098a1bf86fdc1b850637f6095c1a2f41046116affee60eee2d758c272811a62a8a0ca89a9340065842d7218020f6c10441a2cc3ab891554809103173f9c18093ba0e1a460430919b061847413d83042c3c146aad9b861c3a6864f837519343402f814d64409f02f03e600737cc454703a43892ca0c829220934706050fd0bb5ef074d7577770fd5c066eb41159bc55440c40728dbcfa76ddabe1a8eaa1399d4884d75ed833231c93455a860340ca9428732525beca0015661a3fae7a081a9abaaf2a462755555baa8e1d7986950b65d57b86b5440fc69f7eeb8efe4264955ca5fae7bd3324cb6e4a4dc304d868830e766da625b47ea999e19ed9996717560ed5d1759d367cf34fd74bba63967d6ea1916cfd04b2c4b552ceb342bebbb4eb14681ca17d1bb2fc277777729dddddddddda574777797ceedee218c57299d3ee1296d328f4bbba091fbebe813e734e94ba0f1fd5986d0f8f21329c17560440d0ceabbd9bb6733c3aea0f1b11019beebed3de787ee3eb3afdddbbde59ae6cc24a645675c72df959815347ee7ee180bbb62bb3f56b02d9ecca8a46d5546452b158d8800000000c314002028140e0a8622a140280dd5791f14800c7b94427c521b8aa35190c3300c4206114388010400000c01a1a1a1e10401e983ce4a612bb7abf4b571a5eadbcbe7015879ffe8231666ae0086786053be3f38aab5257370cec2c695011eadb50640a97db3fab45c2045cf27117d8e43aaebf24938006dad624fb9fae99f6da2cf83e8583bc05634c1bc8adffd1fd4778e22de9b3d992d02631d5616977f525a6edab730a66003e5237e1d81414fc48e7e9d0e18728e5c718bc5edaa06bb7e23043d7bae8773e749086211280532662ecba64e1fb9a9319e8016e651f525ef0e62ecff85ad35a7eb5d14cedcdd668db44d44352b463136bce7dd7b641c5bca20481af63947911301f3e79c234e011a746a08ca48b171d2a0bab992366c55ed6151514ccc429fa8d3d99a3aa2dd4d1a0747d6b38790970ed1400adafd438c3e8e7fbbe1a172cb5aa5d3262b86bcc46a8bd548b5c037f1f04808867c92ff89fc5fd9d0ddf096d2ced9c33b6f8f038c5f5592ab69bae8881d1a416198029dc8672db87053c7c3aa30f90337e990caa2482ae7c32956d0f88ecd735a439e8f2b9c2853763b2d864d7b69ae726e2402b0fe968c5648e0378c863c37cda40c4fdb06e31a2e922da6186fbe3c0b05fd7282bf0f32e519c9bb1e4db1c9eb1a4b2cd74c0e8816673def172df64e8828505cab8fb6f9d44bd584221146948c9e64ae6f1e20e933b58825ab0939498fdbc91a7597a068b97fdc9137d6d2a3cfc79b1338f8fadb2d1b714a1309ad6cb366423df74f024df94aa5f2dbc450b1059f734962909002663d22399265f405177194a46f26b1347e7d189b543619d296f1693a600fd703092ad935dc1610e0519230a94dd80b54117bafb884a0420588997905b7a7fb71025c688bf6158ce3bed5899b8847f67f9f3b6591f2e4d66d58c30a7e0f47fc3a8b0b7f9d21ef3710ddd035999d290a6019dbf12d61c2c09446315b51571778d51b72f3336acc41445ff004ce046a23dd83f00c25f0402ba6bbacd4db6311109d94b302d00437f22dbe635a07a25a9f4d72e622cc4e640148ba9c39d0477cdb3f467090a260dd3b8fe4f73995f8181da62b96c74c913a048dda5d6ebdb1a412e2196ba7996b592f24045ae40deb859ed3a108a884e0868fe80881e46c32ecb16e576cb6a2d57f827af8454260f120ba075f2130b713e97c9588be24c0f74820043265611c30e8ce6ef221f67171a861c667d66db6a671571a4d7c8976d8cef2ba3619d248d6148b64116c7573e572ff81323fcbbbe9e969ae8620c0b14ec4cefdddb7ce8cb5fc61681c1a6df5e1a94c0a3bc7da83422ab25e5d4ebeb1e463703971bbefd202455f9d2decd6983216f82311fb0c1662e62c3a08167790500e344e8cdfcdcfb01629719df04811d8de3f1f2f42f5ae089ea5b6c8e93722d424740a23a92f85a34088b310a560ea1aed6ab8627945099d3969c70d2113c2400d1ce03418302a5ff7a094a7973ec890874050d80ca3bfaf0de7e6e5232610143cebfcd4df05c26fc7d2e9be5db5a7486629f9a529161f67427adcbd0d4947e1cbd83bf3414482bd562c2614d2eb7c119b51a94380502ab7987829d7d08afa3f3069745c96c3e60a239d63bb3fd1a011e684e4c99a524749c56aa5ebf023a7a0084b2d24b7c26886d675afe3c36bfd4b515591be86d319b00d254d3312568041da42d69f4e598238f5eabb8e224c90f574e961952e927a42f37d0331e22943bf67634915179befb1bd85e237c937face06f4314109d1e51931fff3cc015af25794d3f368af97addfa3d2c0729f90fae10f62cc22c342999243d1f20c43468bafd77d67850c39155ab685374f54042211e42f255e6c36f1fb3e919420d3c79f49f181ecfa0f9716be10d541736f5e950d8030bf7bf92ecde92e77b184c718450f22329482cefc344d20fff924ae289e0ce046e2478c8f6aa454c86b09e733011fc0d506464d04ab04a7e03a2a9c02406ce431186d3a655539904e30ae73cdee548781ce5aab0c0d87fdefa532610c067ff76d37f2bbe0fd8231e014dfd152580a4e1d1c84698eb3cf613cb5ea78e32c4cf3b101649096efd3439a946e7841cce35451f012d13f5c433c80956fcc4de55653dc3cee9cf84118cb42af4c9e48fcdca52891331ed8a91baf49353457f119380c467c13f27a974195a2ec5a8b190ba26ebe7264ad7a1016c04f66bf1200b3b6ed7e38484ad1f16fd8b72c546c025170668a1f531ba6a05397cc157d4ddad01d7e8cf4068d47617adad5fe3eb552fc22e71398cb824a888ce8c24e691244efd2e8d51f0709af78f9e04e17fb5fac8e78dfc85a1bb9718cd96b50fa76e2dcb65482af0d771d7dbf2a6ee11e100e45c937658339c834cec723b2da0f29e2d807a4e11c3bf5fac0dbdbb6bdb9d47a2376d6c9329c9839443c69529e2a3102193e2191a43413599b842bf1ea8f225cd201ccf1c6f005cfdbee4f91e106560225b6ad437135e1f7cd075c4ab8721ed112fb6b7b1ff1e8d22ba7a5a7b8e65935b0ea13b71f5d17d4618600ecdde294a9ef2432c068ff6d21304ef9fde2dd20e039cd0adfa7649afb03e4c9f6b8fb6d53a1586490d2ed7c4746615ef8eee200e532dda1ecb58ad0544c911fa46aa7c4a191fe72a3b5c9b093c7ca18221e4c39b4adc7f4a6f448af8921f0624ef2f037e98beef6edb94eb1fb66017d54610aa9c32c4bf4e05d1dcaa339f8dcd8ee645b5605a150c2c5bfae162064591ce2d5f57fdc288848b25f8ec3552cbf08b4d98f0e6f120fad2509110f1153070769e6617409fef9868b8b538a953f6b9a029e61b1391af099489a927a1a60eab2b2693c38ba8f708eb8a0e7e6887e0d7a13aaa40824d73fcb3875fa0c0dda95eb9ecbd715c5fe46017e3d2f3b3f3d2c99faf4a27c08662949eb81091eec0520601a8c3f7146781b7e32cb09bd2dec205655d05586a07a3f62806a870a466fc3e9cffaaf4080bdad0a6e9cce0dcfec4b79c0d7aeee25ed6a7464a130f1b4fc890aee223f44487fd354a3334c6aa031af351e30f366cee53610387e7476a264f8a296cc0b439023b23d3c954736444ed528b61c938b966b0d1861bf13557be668db291fa8bed60a537355fa2645a9bb3d05f2fe771adac4d3c25384a961b424fb8086291edac3dc3fb1fcbc2c7f5b91e880715bef623cc7079439f8f24de79009efd72356ecdeb65f24fc6fe8988cb80bd0c2504873231c22e18e590069143ad198c7ae545b3052e8af26740f34523f3a7ef348cb00a8d5f94dd3db892b23bf4c96790a17f8a191e73fcfe845a5a32ea5cf617c6bb6ace4c2f6e0d967bebe8050590a24e8392b75b3b297497463e418a79ba8af6af1898ea83aeb9ae3342105aed0a1d528513182c1138c5346f3f7c5732cb0be92e5d764c04d6059452bb0f5035d546a8a0354c0898397a00894461c3ba3b3a713d1b17cc771638e23a7e15b4ff8b529dce4e6eb8d10e9485a399bbe10de375ddae7f9d7d3b51ebb2a3da2dd8b3d78948ace0aefb7cb6dbae464a96faf2b280d16833d355ad70a426c59f10ebb1ebdac95827fdb50e9c83d1295b0181a3a25aba61a41f407dc1c1d53a89bdb570b854def04ba892110794dd3557dd51ba752f47acae29974429b495c0e7c71caf1b75f36234c5ac932bb32663b433f9e4822f8272f0b126b31f9995bcb10db2614d54a952e0c2a53d8be87a20009643f208c012cbf5f70b5b3c0b416d8179442b7f0c06b49a47bfb4d383a0fada0296f5b9592ca44ddca15fa1fd1982e61277dccb7d6de92aceb39878041988da1dbfe7a5911ac4be44679757d71923d3e92c838bc548018afd6828035022487fafbfe0fb6023c2d4067c77222621e8e8450fa36b546071a28d4def58309ce5ef0caa0f586230f05ee9a76a35348fbf18b1b8092b912765fcfbcd5b735fc9b7130b9f84776cbe5d5ac753b337e2a132f7e7b81aff8514becf81128417a6b2fa618c16c58b58163b25c72a9402da1b2ac4ec97ff4924bb392e33cd130ed6f87c53cc9796493a497df3c1bd7e818333c83212f92b6106ce3fcd563a4f00097d5c0131548348810b3dffd4bc545a3106735c9849ea51d4e89684c85912748d653d463e7331c00c429c1528d3381f397a776cb4185e1bd0da327e429e38ac727572b5ffc99d4d14a4c50cd452982d40102a2e7ec569ddb32b06e2e461ba198cf9160f8569b6d7bf886d6c4534a90c8c359b16fb8a5b0b95313c6b3ec754a6d71c3fded2a2a34c3422504cabcaa09646cd38d88856ecb5a4f6bcf0cbbc8af96cc49b9ecf37fdf733852ea52f2270dd774c093da7f1d5638f17360271e82347cce777595923972350c4fa609a666dcad1ab8ff5bd5a6d53728a7d96ad6dfcf6b62e2ed387a6ae846d33f4f41f746bfde5eeb9ab98ddf9901e4eaa19d5e2c7c3bba841a2b6d1ebda30d9e56aa1ce3440578f9123dcae6de9d38ea8b663f720a22ea795fe61d83b525ff0b4e09d1365807c3b342a400a587322e7a2df44f39eea45ec199b219f7e42c1a07b81c818ffda263c6546db434eb16e46ee479ee718a76c70f1a17fd91c50809ba34afb264e2cd3f3b0b67ea3b2e6f8552507ad558587d3f98320fb0d15603a85cab8e84c507a39f6ea6d52cd48017fbba7c6d3979daa97779c64bb5b14eeb1a43ad55c7814db431714c371b9a02217e3046f707da3b5292285aabb9c1681326424dbde4901a1269bdad18270f48521f8d627161790ed92565e55b02ae603dc4d07e844f6df358ea1d4018712c737cf467bf81ebf2ba1c8a0f891d83f2fe236cd8c6825d6cbad69ad64b8a30e6a64daa5596cb7d6164edebc744889e31de316322b2e5bada3e12eb16702e8e058f9f56c0034fd6646094aadbad86dc0f1c676b22ee7ff5cb182932d649c49e674140925fa59b0fa0fe2512ba3173426b62b0e062e54dc82d4de7b18f59ea364a44eea86bead66ea0d4edb8d36bdd72da5a0cce07aff9a1e1c6baa45848391261f294c9de95b90678c40095a0a197af1a49650c4b84d5ff26216fd90bf045aafbd09e21e149ae844745328e38635a1c825caf8b616fa76279363b09b0d4b6b3656dc76df3906c1b2699de32db3e41f234db3f834ed7869ae4cb675a712187605c9077f3c8ad8e96a98cb3c527d610a3ce964f739c205af6f8d52e50f4c66cebc912716b8e37739270f244c74e68a49eab004c3d27ee36fa3a10c084902bbefc7782fd0a94917ab34ed1131240bff2ddabda8d68217547257e39a4806e4cd82f4e158df5c701a79d847b6e931c4ff9837dc6710b929915bdd0c33d2468414ac5d0e84d653bee59b3ccfd9f7618419ff68763153020666a7aae1b6caf11103bbb56abe1995ca62145591e288e74e6b2575eefa46735473a47ae0963581acb042e176021ea84cbc9ae20aa0e5043da79bdd74260b20e4e3723b3778875b7ce126c7bf9e2c515d6aea2a5d0575db23515af83a76d2acc32674b8a0e554727d292c5348996cbcf33c3f1890c3f3f7e06371de462d29d8da90b6891310d2ed5323da0d235fe3518ef135c750e282492a1681da55dce8ab7e8c6595c5ee7dcdcae66e200b93e1c3f0e39861d0f9ab1a464b5e4a352701fea36e854728547420b281b95a52375450a6715d2a8811e698ce910403277c1b19a24cfbe71aa8ea8fd5d41219541bb88eb82bfbe3cb1f16714c82d7e5a6ed8eb16112055bf0d722bdb595672558b4c3b0f8ca8878f1a8365fb554203a7bf62f2cf2873eb642ddd04d15d7ade6aa728a7f5a4344339896ce6e2fac5d8db613f6c469b0a794bd402aa86ebf0a3c3b1cc6d7456a741d2b5082da36a9bcadcbe1f494df4d23820adb0325b80e7134b35946dfd4516f0fa8ea8a511c4bad8af11c656abcb1b7d8677c56f56000f46565c2a392da82c07f09bd702a4c0a165be362b2320ba9060faf2140e6414539e923b6097a79337861534f426b52429698e3757634c09a89e3c44027a27fe08854b634abe7dda607c8a725f1ce5ce61bbb526a1574f2332c2e91e5686d094f06e0ea255282d48566f548ac841a6ed628eae9f30a7f348b5798ec716e1e63e146bbe04ec69a5a92b70691821e4306dc3197fedfdafbf45d60a7d540b7dc06983562a254f91f3d971e0d461838c4f4663e5c48803f7ba934a7feefc92df8f723d771af2881cc0044b5182b1f094692343589c5c3ce6266b719646ec2033452631fb81ddfa735cadb7b5fb06e4c1ac46b238362c2f74b29161092031c1ea93812d64392b95ec841cda9f70e85d9afde7957c8c67c1b7ac622276d091f163e318de860612ace18ac7250a22dcb1ca3a6747a9d6d577eb625cd0d1864e6ac8bd917a17b9211c7e6b8cbe0b1601adbc75e0d37437e1b9f6fea88374cf954b29d057c45c1f599e78788e96debd386871dcf6e3ac77d3d952499c186ef771925e6c145b117b2947dc579b68852680da0cd5d210cc2dd92a535bd98998dccf716d512f41098ad9dfd6bee39c028ad516d4b864a352130fc2a390bc2ce6e28082e1c5d631f544ec6526b86b10a86831662bfaa3f4b6fa8e6a7d078c0c6c615761ad0610615a0ab913901fccebab4575b6dd5cdaaae089ac29779e3e7ec365cb43292bd57b18d4ff63953331587261a9a43628c81633da2c6c1917400293bc1836fad3d25cd36d1e4a6bb00d74134c924aa50e47a0d95557059560ac886bdf7baa6011dbbf4fc52d830dec9b9fa43b49f593d412e885b8e762b7871f856907ee0f5f13fb96566ffef0d718066111d112a813fcf6495e28f86b1b27fab02ad3402f7e94db45fff46e04785068081d15258251248b59ac3b61a8685a457a28015e3a25f3596b2f4591cee02ce02e55994066a2952dc62b0d262d02673170cd3e668e706fd68ea1bd4f550e6883891cc822be931693c924691d1c1e1d4f7d7f41723c1734502a4adee28618fd37187cc9eeeb3769885db90f15077649de0ad8004ebc9c7759ae0b1631e8b4342c45013b258df5ad9a70004c307e4b416c11db374c206c4cf6b138e97b6c8f1ed696881f03a4d929c8be5910997b27fd6dd0abd1c324c8b711eda062958e807290b1232b35591edea0458ecc2930c808f38f337d8b7873d07de16e1926859cf88397d263b74f85dc8fe116f164fbd55c7c9f0648e1efc661a58a182a41000247942f93a333a81d70b46f1dfd4dfaec0fe6e96df77318443d636818233b9a1aafd8a0918124f3968280b5e8db6d68d5fb76d0b757601591861859a30b41f7b864311dd77d64ec09e52b8a6200d5b96483ff1a08c64e1abdb53aa4c189bec174401364027322b1a594c4171c011fd9acbe685d13fafd1155b5d3731348744189c34c5a868ea5034d5ab76124a44453e7ae94e8b716648abd3313f2245fe75a518790ee6bd860d4110b4620ef99096f29bca515ec7a8a7e218efb24bcfe250e557a1b160daa4e839ae821299fba3c346e181ba6ee54ef50f62218191c2e646110c7fb9552613a754b6ef50829eb2c7acd6d7da258b980d6b79c68202992a525964545cac668f22201ccec1875d17c5400f6954336b07f5f6d9448bb4a56032916054331e39ff222329fe615d63d029c43c95b5b776a848f77b552177345d3a70c51132182a70b93ea3a35b5db59d93a874cf153ca06250b83d4e85ac4fd21f48f1d964c003d899cd06e67d868b910092b56856fc4beb8aa1d048058def25e544fcf0ad42edb2390f8d8b386be9ca38572f439313d554e0a644d818e801293250a5752568cf06bdf9d403a9b2581581e2b2620cef6817e2513d9d236062c4c7e71d47a2cdb96e2ae515b6138f6b7eb878da5f8f77bc3a47d40d74fa1870786a6d2d5aec1881e9ccc1b5b5382c61873206b30aa2de3b1cd2946eb9155a11eb75be095605a36fe24beca3f46dbf8200076565936a9bd07318ef951a56840d2760b5d3f06f5390652797e43d1804382304ca9cfdc1a520d2c6d16470406e7b00f5c1bf2ee865e265b57933c07e7ac49333b57ed6d2e987bf0648c3bebd10568f594a54fef63bbdd46ae06bea6c02e1361b26425dd313653747476642519fbafa0ca5c619ecd0d8d30536544bc764662ff785e47da3df2824bf13d3124000d93ac62b01e378b39e44339b14cb3f6f19e8de21e0db5d25fdc9f6b5425f0de23f7b133b1a0c2796081547af54364e5c780fc9b61b3030a368e0f0742a59ddd5ccd2db189427325b4e6108d824132fd0a0b23fa5eed64c0154de9447d8081e891ca74063a0f1c6cba14c6f1d01b72461be709b4225cec100126bb5b8cfeff18490f953011c59332fe5002a225906bd62bec6cc01ba57bb67c947405928ad1d409516e6cc2111a7f4b245ed93e33157d7aac60c29f5ac566a04a28d8ae912095c09e1d8a717195eed3400fa6b2a33857c25430d8e25cbb485a7734f23decfe4cb0136246d696d7bd5a8f7cb27d9e0e9f88e3d38e217f0932f622aabacbef167c12c5c2f45b577e565371c1aea455600e61d7746785dee841877ed4ab20ce73191eb755c71b1b5e87860bf360fe885172148413ed7c284c178886462c6c9ad96c36f9d58a8ddf4e7db5ad1c414036d614ab6706a055bb10b1024ad7b0ba9c09bc16855ff0b6a066a04116da4bee142b273415f387ad5ab2999af931fed38d15a5015c51e52eeac9adc4b1460e10bb53430db97b4c95801a6ee0064f9f4e04cc9348f17849ca2d9bf7fa0e54eaef7573a32c0759844aa6d28ee7c5ef3820b3c29d312e928793d14a8d767fab1c6cf70124da423957d6998b08d8e70fd1e9acd0448d62c4ec4ece6943059b5c311466988aac91a2a6000e0cf33c32c2ed938b24b688a4f47ec8f9ddde2529d0908db7ea33852b9508ee3df6bf4bafd63ca58c212c3b7c9c5dab7ee926103b0ff86755c750d42554a784b67cfab4149af0e84147862ecb33f3c2d4e6cb6d3f193016d57f9647e9f72632fdf109a9a03e6f33102644f2936bfd32c36132e3c732519f94f183439145d9aeff32c6b33f1f6d9ddf2782c7ff7cfe8315a58d583bd1da523b74bc197e425fd347455781657d21a604ea2d1c6a61498e7795011fb7cb9c9a0582e61dc235de60aca23336dd7c3919c8a60e40b2278759087bb27764f8ba442cb286006859b88895afa669777c957970595b0634849a644d3abb20743687f6224aee60217e063a984ff0041d3cd96427aded2c134c177835c94d979c500c7ebbd45c7e298c3024e87f2fae3cf9b387df1aff2debc4c36266a35abfafda06677ee4aed45ea1d162ea4b07ffe0d896b3251f3fd6f8b4ae8326341c22c80f67e96f8b69a2605b85f9c41aebe7c1726168061f9466f741d8dc2c2b9c7419afe0ad1ede1c63589d7ebf3c7367cf0e989410d99b1cb864bb89e530cda1fcf48140603b4e951025008a02d7f3f9fcbddde94c04116ba185ccaea1b612aa3b4e455c6a4313e25d355f1f19a4ebca2e838295b115369c9c29250f19602f14c6b0244e4c3cb24b2ce00c941a8041e75fda9162cb1ede9c952250f2e490f1d9ee8749f6a125c14528a91335c3586361713873f476bc0e95d9c3e63185597be638b303e0dd98410ac0ae2123d103c86f65a063575d65d966a1bb4f3989255a66f416e4c24fa0fb966400406cbdbe6f5c5e0cfcdc27aa29cac46a271ab15ea0edd8082bc2fe04e96a76b8de668367494d6faacd0f599f49a1b663b9b6d788d65b2a5d50806c2b61f14ad00e7109af9ae52f9e1a72baecc97105978cbccfd285039611c331721a1c5b03ceefc1d462466cc4c82b7118388381beaa33698df33dea7705a72313a0a11b1794cfdd34aa5c5193ae19d430e266f5d44b75e90d8687c5df4330b5d85a7fc2333b1f4de42e81f4010680e685460ef1ce6a69059c23cead98e7389fa73de605378ea7be2081e644893be419ada6587a5c49e5429ef3c71f9b5db7274a10e5d6395b5ce7a840fdc46a1dba8809ac298c9ae2fce712afd061268584647a2898d835c9b46a0a12313a1104733787ad0c5d6802643b91ff62acf2c82d77ed5132ca3285625090c1e8dae7eec8c7de3cd1a9fa2bb18e2fef8e027c81c605442e72202d737afaea1c9238d1c50e7a9521401a9adab010825ba62cfceaedfcb5caeb9f21d40698a7d1962e7ce6d4408558f08810790d35b41d08538af3a405f1c74c11c6fabc5a1b7873471fbaff66082cea7f23a77f0ac8b2750613001fa7b996e2506e68ce1342aff3707f7bc4121f1f4836702d2f9c2f72b0a3c31f12815bf6d85abbf801a1e8f0872c3a15949140dcf51aab5161b952f270a767bb4028b4355eb3c5df3ea566b519fae499b336dbdd0034d27e0412cd9bffa2e104e5ac111fc0af6829abe99e0dc69ace021fbde38884de330553da831f514f9620980d53bcc89e6fcb3f7aa069f7274e4d1fc423c3192d0762f3026d8059c93268166a3ed3226d87e8cae95f521d717d476df19c6c32b517928a497981816204b4da97c49a43d0df781361e537597294c62ec21b80fa33f0cf943d490cde9fd8caa75f047cc2846a06e3b0590bc61317cbf74557bcca8c5c1927917fbfe544ab58132483070fed596a803f145812c8451e061a0fd1cec5be1e0f3ea6a4eea431c73fb42b3f6e92cd8e6026e1c9e1d4f63b5eb577cbd1c4caae1abff084adc201354d66aa480b5b5ac09de92bd7453364b4d02e202bdf9414f209319fb9783bdc67dbac2a279d0841840224fc9f36e85ad20ab3ee48c4f727acca6d90c5e3e08e7f1c0d434ac31992067e52589bd70baf8f2bd1bcfb4cd05872ba2b8115cb4261c5d4f8561e99ea37e54f3b5628e0eab2c010a4be4d4e092eab06202e01b5d9fa330b80bebef90a93601529de5716a3117d6c21553cc7831f5d625c930af459030a6c6a6f19cb629730a10141ebb17f079a22695cb13b7eaeca37db1fc789c74e5dabf39d6f3e241bd10366ff7aa30c0adfc24ace38952d022c989cc49f3eae24ddbb76bbd5258308b788d5b514f1f55408c1a082f3228999069891d4ac10c4443dce6bccd78e2c0f922c021837a8fc394fb3d3dd276ca5761ba6992975a0bafe0921e02059bc8af0af858daea96088a5d8b705513da8abe3e195ce4e735d93918cf241bd939dcc29b0405342e14138ed38395ab5b7f11f47c2058611cd78fa78316230a44a318ca97a3c62ce9f51ad3567f5405537983805ed53a43263f8258a5c9a4bf4193aea2100516212dd099a17c8df11034c1c5799c2c3bf58965c0f698f2eaa5f7112e8aa3406fe720e24d32aa87623608bf199bddb26cd1ff61206386447a7ab103aa8533f7e85d82d8774d45b98490c49533b533e4fb07337c233c8b92713d60a399eb8fe2835fbae799ef466705fb509b1685db18a03bf4aeeffb3b8789f41fa07e582b62f09849afcfb38308591b8d039e06199bb7d379da4e00e2ca53a562d68f968b65f34848dd90323ee0b662ff43d96a80ae1836bb5782faa0ca1a85d764cb0b160fb1e52fcf4c9180e9918d0f592390d22d15c02e13b4f479c5d5cc7bbefc54516a0cd42c5b5c321fcd2e4f2342f6c2f23e372e2870049a4a5c34ed31f9681804b87f4a0d9a58382204a7cea0340052b2e04e79ab655b2c33e439aa1eb21440bda954b6299ac24ea2c2acec0e7a25fd946597a417b6ceeb362445101f3c1aca876831b90ab82f7c54f719020c339d4002dcabce40e53a0885c8ddeebf7a6076b20067d441abd189c73ca658d03b0ac75b8eeee3c0058cff9eecba2bb104f2dc58aa28de0b948f70d766c2bdca580fddab47c956f2ee0e7320c0f7240158e0a47740cac8135253114c320f0bcb5dcb0d255622bb829f1d336807c36d80300817fb4bde85e5b8ca934fc86761569d600868172fdc812dc691d05c8771a4af19205d0b2208a39817cbd4f27fd5e39654672c7c3dad964a4ba81997acdaa0da28b09d24e2edfabb076ea51a57db8f62d5856622aac54779df9e772e1950e7760f4c6a92d6097547851bca91341e00083c9f4bdd38ae9c0e35ee66c3a782c57a33ccba9ee290cb6d419028bbe604c94e5b3376c74c8674315f677cc3fdd9c911135be6c851c69a849b412aa9431b2df2c379161043b07958a2504981216c88c4a19958b24f12505ebac44a867e372b25564c8c6dd2bdf4107aeabb013d905aa9d8402e2f240c71843b3338d51bf0fea21c56384eccc21d851265d5b153c629fb42d61a7c44acf4a775cd51cb542092f1a7d277c0a8ed8faaf6ca757907baf79c4d27bc59dccab6b8aa013bb33e935aac0297b7ab84c3ef8424a0483a0514c666d4353269f1f337080255f4f6988711e7ef29540ae26fa8b6ea3e426b7fd1fcbafe8b0b9f8f32df2688fd4e12dadac434da654e79ffcdc7840f941ba79780e1b26eebe4900f90e568eaa00b4190b08137781db84e2f7e054b622d8947fbb61d9110ab1fa869511c3ac8fdef0ab9849e713c3afa2698579f5fe3fb00cdf675d01097db1e5e253c9ecf4b8865f26020b493a808fcba393e7639c1ba8823dd8a2544535ff8f631fe109b6e93e2ab866abb17d2facec2281ef5a8f44d4eaee616cc86e898821961d5c087ff70cb129e21d1ab9cd0bf2aa5f266a7db9773fc56941e7bbd0e2fdab9294b0017607d546ef1f207ad150db4d55bd2b692a6267b60060080f3a744d370d865a551f622f4cd33f30c41e4fb7ec890af5eb34833e2625bb6e6c6cc3731dc9454b6649992891d02b37d9e232518f9be80964a5b5f507d48f004c2572b691494912209bce16c6edc8a72c09384770937090c304a3de453f1068c5de2a46f5911e2e65b263beab8ca3d21eb5f687a182399c6dabcbbb5c7a606f61cb1ad273c12ba3193f6a3555b627e9267b7c8d54d4564357096134831a58b456c2f18759e5c30dd4f27ae12419711f06fed87f5e6373a97371addef54496d8a0b0c96f6ef3dbfd8fcdd996a38b5c28144ea25ab65d120b50164f271481de311bda1f0adacb7099c20b8f1f867ae79e7d3ef0989b95c00200ee8ace2b262f8e8cb24aeaf79236283d16a6046ee47d60910dc6dbc74986157c9dba197942cf88d1a4d67e834ca082254c518b5ace8e699d6a27830a9e4598b4bb8b847e443c9167cdd3d5e215d1fb87694655d02026bffa14c702070a35513ce47185dd84bcb2ccc312c86b138fc017a04047ca3ffa1cc1e04b0471a7df0cecd238f8b61045b5b7b85b2778e44c0400d26bc63e793a5e56dd818035414a8e1d1e9c20448b0285146a5ebcc8b9ff63fbd1eb9a18902861af74c263b495674d326d4f1b5ae24dc04235d6a5871e282cc6c3ca117b0ac0ab3fa9471a8ada79b98f6a7479546846354009887cf5a2b780c46c9e88fdc6f4d260b4f6bbb07055fc12f563ceb821d24a6001bdda50b8514b830dfeee4c0febdd52e3498ccca428447e7596251fda847449031dc08be8b1f11f31136b1f7c892d119ffc901369d78e4775486dbb1f808fa9a90d74f60f35af8b1ea6e30085cf5464162ff287a3cd9037db1309ab7e450ac951da4e144b979e7afdb6eb3c59c3e42c3c4eb4b7c46810138a84dad981f10fd45b2b0cecff61ca374e214391e3651d174f963a3c22edbbc2b4762be553992d823064aaadfdace5e3383e3342f7c28e790621370ad7e19fa8b6514dfb04afa1770fd3f625f37d92b42a0c2ac069fd52cc9ed1a4cc630ebfb903fa144e45fe2f2f269c9e42994e7880b660b6059b2f952316c952d1320cb2e904a6095fc03426c9e33d750fd49af5865802da8fbe05bb61e10e59e64ba7f22e33234c233067a9c902da28e705e8fce2632b2234d762d8427875ae20655a404e5189fd0c32cd198bd1e67cbe65776ec541f75725fdd595c0a38d819f57f0c865bdfef0a123fc932ae652846fb71329e4301403fed976f052fb366908101d1420cb5ab3a2e8a008e5b2e8ab10f7b54a4f157930783e4ee80b3b4e8b4351b7d96b1ca512a52e2777dde069aaaeabae1415234b755bbdf038b4c9c636f1781e0c9d5702619bffed4b1ee09ab492b2c2ae486141478c759ac8fbb8fdd708d88eaa37b93309361e14f149e8751b6e9cf0d21aaec2a4fd22424b030d1b711373378d3f2b108205bc89a0fc22d94a6caf89130e24a4b664e6482aaeab2071d7eb8447991e4998fb0a544ffc4e2236bd7132fdcdda54d5d287473e4d92b0a0f01ca0207ce22b5959845c1a37cf08a7876ca87a073df705bb6f097abfe25f69a3c0d28aa85f587235563171dba4017b05be22407833d8b888ce31ee2c7c49b70dde9330715f074d7fc99f13d2d4517dbfcadbd92d1a08e9de9c09894dcba5afa9a8496fa59c10369d02e1fa85f9cc92ab9a0bb569bb10644932719f5bdcf58f59b038c5f00844a71b212c983244e8e4d2f89992d7efa1e525514f8ac07add484109b0b505bddfa80ef11366ac550f3cfcae6505d398897e6e9774e34889d7e29062651a18dc9049de8fd8f728638bce4c7f4034f87af9fdc8f5276d7c92b95c5965370be9980fe5013f7deb40c3c99156c0140ffc692660e676f346d2fd250e891edec77a20d6ac865af5e16ef8f2d5c29a60122e24ed8ac078ce6a4774a16453e6c3515919a19e9a082cd38a234950bacdb7bb65940f5e49264adc169e6dbd166b9ebde956c105ef3eeeaf18f3db1e9fe6d01c8ef5d021fc6a5327a995ccd897101f80cbeb40403d29ac26c1238757ce5a1a20d53862eb104bd175d6a784d29452619a3df71509de1e6f1cabf1ac30c824358d0ef11de2bd2e1a4f622388de9359690ba68eb3a64ac585a6462100e33a8547e289aaf8dd0caa1f46a5d531b4bcbef302e3b89990e61bda4ecca0e8b21a04a14200b3bedf0bdd84ba6c8b0b555f6409df77d275a220b8b9ec24d6221ff2a41ab7f2a22e794074b32aaf49fbb64fba0d638d9a898bb53cea21a4aa0e9ff84b16a683a09b813d5806d77e0257e3c25e24403e5b9dfdbd085a0848d39bf06488230c2207e14559d14d5aaed34b2c329e2e976e3a89871c6e99454b47dc74bd644319ee318f16086d529ad4a0c43cacba8588dadb42787e7350346c1a756f850427d29d0ffdec9595d5c7781ce1bfb0b162d2316869d3b543797278f1b12fb4008544dde7b50f4037123fcce415959a57069de6ee7798652b2bd880ffe3ef5420a107ebda829520ae1485f39718f1e4c37a76c0f89d5ddb8c0e0151365c55a882af011f68f1ae2e2c234ab47de764e1a4f0e56d9875fc1285374a7c932a148e19d07f2b166100373d7cca9a35e84b853ab5a466883524aafa1ed5658def66d2c47d900958a0999aaf136d0dc2823c844678758319fe0ff8cf83606ce97803e2a8f2e17b91d8a32d578826b569971ceeb4ec02ee42bb33cc0e28dc11c31b0720bef887e1d5fb6ae55f4eb868cb08bf90af4b177cb2b87372d05c8a8e4e36b41272f5db78f588a00c41a03bc91cc2c36f99a34289fa8cf87d79849b02b65f60e86a86f99564ed68387b13dd1bdd03a46182898608e64a184cb5bd6595cde5a7640fdbd1bed3f31429a13b670c2c5cc560094ab5f33d0985d002c2073b4d6708a762866ac31e59cc85688880200f7b96c3ec3253b3ec0d4cb473cf64d086966c43ea795eeb3969a3206e04aa27c26b78608b792d58b28b6a00708f411f2866305c1366ec64073a9279b897130ae54d0c6613659337c18e24f898e5764ad4d0a5969405af3de882a36cb9db293fa708f06bd7e6ef564437495b323a059acbb6475c61ab6c790405c2b73d44b7e36b3817d50c205e683597a635e046dd05c7ab7f5f78af0bb56e20267a61588215a7c0747783b33c163c6826b63d16153a7c69bd85b0a0a5e774840686ee3e16a40c1c8d988141d38fc59961dd4ddbd070d2b6a821d5c2b5399bd5282a254991490794b29885002944bfdc2a5d20771c16e2159a1218245b9dce9fd7cd68e43a68f6adca3335f95d8f4f039110e35570596fa1bb337e5483c07cea00464c0f6340f2b745176a1cc27b1a1e475554e68745c707a7b1ac7d52d53c3a75cf473e373008d059e66a6af6e14efef834deb1e49c8363aea50c3128860a73108b8653051b7b1e92db628c0911205293157aa66742ee260d84aa97da890659795ff8fa3ea354233100f79661c877002a330269667e22abc6f6f402d03820e72b032dffa4176ca95388544e597ff450acb3768a3a6ff07a2ee61c022b280008dc3341cff227e82a92a48b73d4f1d6f94703bb6f6180ad372da8b700cfd304e00c673b00ea4c97d71207c3f715829bd40c52de64a26575c97194d987472c6bb0c0c3df644584bc3b2b150562c93c3e28e7c2994da751cf6c2e24a9a47299ee0e81064a86458fe45153fdc55ec7d0abd71e6041b94c968fb921e379638866031bcb6494e255086180486a00514cf3cbc211ccb7f9edec5c9b3cb00670064e2620fa6f7325ac078a723352b5c9c0aa3ca05bec01c8c0e0e4cc2bdbc084d97d202022022c6da2f0cfd9847b83e42e8efb1caf1bb12f58aff937c8b7071affae6f9770b294916f334f848594f47f1d80cdc5a8aa8066cae49ab879780c32be8dd184955bec8ad84c6314f0224bf62b8c273b4780acb813cfec13e1c2e54f46aae5b88395d0ea6ba0ab48a28fe254591e152981f6bbb7c499156f972a225890122309b26760760df423f1b2ee9a8c257355f6de3106032dfd3402bf5826624b21fc5f2795b8169d430b733828dbf3c9bc5058243247b3fd2c9ff7e3578b1ba42407a8ec77a0a616280ae656e2cb30a5602b9fc8cd0f31f05e81127a1ffd6122378bad9b7be1e5fb6d3add0a036c05d05cc8a7792ba6e393586225161338b0c5e73b1a8a8ae82676c5d90cc69ea8b41a7f8f622a419d523aeeba319ee25c182e84cb0a876f46e38dc927a6607249472599449c43cad37017edd06c44854f32c6a530a2ba1684afb5bb7f990683c25e0af842773ca1dc544664d9ea1a33a9c34d749e350437e28948d25fe8bce22205e9e64779965a90371e83f18070a0be16ca1c52a9e0942389612e78fe49197066b667bff481b5235a034ac3e20ff38397c234c9639b011580640fe2fa70d9d05b07103d48f5db969bb6ee9210cb22b9288894f5a1858c83d1fda6853dd465cd8746e9ae38b76b3ea6b26a12c807852e801755a3912eed950f8e9e6a8b2942811fa52a5694cfe43ba71842108c628c75d8e76d1565917349dab0f5de87d07ada48e63a86d5873d7041e2544c040addc9e4f24547190a1c37ebaa53f1d40f74e070affde7556a8455ab16f110e175c8c012dbceb8bf6c4fe01e6bb653d105c4a0dbbc0077f194fda64173a13b16a16285c322486a4686740b10f6edcc097de6b01b65a96a79e65806f1851588146f64c1147e91697e9d533f67659563ed5f532ef74255f5a3f0fb5d0fbd90c8df91f400f3ce1c0ad5d88b30507b91deaceabd55e2d7829e5cf48eadbcaa6049d675f187d54708400b6e25143cd806ae541d4ea1d75078e2629f8af197102a8704802f8cda3a3bbe9b42e42e42406afec569b68da2011f0b26f270771d1eacd0e1c51864849c35304f3b3675281381949c71af2defcba6573da0332552d5ab10700b10df5c632b44807397e502cd30e4453aaeac10a82bbcdb6d38bf6664d7923d161c5fd6893c1f27fe55ad050a6a85cd2d02b3afb01bc95d3fe53c8364cbce9f999b953b37e37211bf006a221b9d5cba4ef87cf1e7291801cdccce8151331ced351d958fe36157e3198df6f7006c0680c7c543c7444b59f1466620081cd43ea411948803fd2676471a475f185535f742f8e59ca83014c7e29a0b6457819cf97e58e2ee61818caaa0bfb9f91b9408421b3d52bef5e83b5cc09d14a6a882b59338c54387f814ab5b3a05b0350113f5f896e6b45d9a237bcf787512753835e730551328fb8847a3854c05070d8cbc7bb8d010678944c2cae247fa84a0506c6bb94f2b9ab0587092b8a0659a98d7746884568947620299e044056fa3874491c000a8f5565ef4aad64239eebd058661a007b3da4858b3829d328436f4c2ed70d4d34eb049f43134eb139e3721314321e05c38c7e03885225716bde74a31f1c1098520c43c16ce6e26e64b2bdf0473d2424a8189c56e5c775c79c748a0b262e6dca406946198cec722c2657160bfc70f5cf9f0842de350ca281c4a834a00e7d48243e10891d41236c203d409cde66bdbe819b14fe2ee1472a2081da8e12ac5d3649929042f7af67079de41709f5963eaaaf79e9f1594f165fffb4a57d045888440c94d9755307aa21d54f019e27d0c8216e3ab4bf117534fa427c7f1446312cb9c372755e2b66083c850e9d2001cc60aa974793f752a42b4557e4ec03640c22959418c919d3821fa258fc174ce09ae7250109ba504f1de5f7e79a37a52f914bfa5a7e0cefbd7154f5d0889ba72ac6aa4964d5bc9e58f48d3562d72b5297f64ff6750e123ac4e6acd28860023519840909fb43fada223b66311d388d094404322a6d81752ee818253a9475a2fb0b6b2ae3549f32b2811898298450f86ff0cb3fdc48f53bb8230702f67e12ed94b7ad29b8c917adc1306050403c989e093c80bce848b458a84a13f358877bf01f884de93e85512e2c7153e1ad916bf64c1df46668851f33a4bdcde32062c47cffe8a411aa31293889b08094b2ce29617d72e6e04ffcb778e5810608d2775c6788c49f3ccf212632cc670202d8cd64c836584edddbf866d5a0a1bc51401eff4cc7f351687cc147b15661266053ae7f6c8758d154d1f059bcf321eb6727e4ae69830d0b043e9d8f75ea822d4b700d0ba5e5fdab12608d61963078f0078fd33cb595f1300aa5ea9ce52296a2e039553ba9d8991e8f27c20e8816e6c1fb57e3157e301ba114ef298cb44f7fd4bb61d338feb444b042b57e7eedfb53ee0a3ab66f535a028bb72844cef7f5a0b8c22614c858bea2d218984b811260a63091f0aef29d9eeb7a11815f0c2905cf5eadb94e33714d9886953569ac27a6fb49e10f57571d9bafbb59e0a5d5621967e02475a8c2e75bf1ce78830441babba6eac0b78749ee37e7f0d68a7730c56dc53fe8eaa8ac4f48b90f7420ffc94eed65e7298b2d9fcbe137a03422cf1b724d06af5551c167a9f7a53f8a590381853a2d9a2ea00d2d50c025a428b41463159ef5cfe4c7984ba8db0e18d69d9cf0e72f6dfcf9e917b8febe5142629084316c0af9b2eaced12e01d56e8fd3d44f6e52f55936e5d97d6851ca352de91c81493f91fd0e64d93f3d6c7daf0a656f602c4b8081f0528030b13d18456ee6464e448f8c13cd3b331461eff815ad05d282e07149ad290b601d055f8e0111f93049a2954da61346a0fec500c8eadbcdfe0e0526d191cc2ea3be1fe87891c06b944c7b0b125a07fca4756f2baca4f08e4e56030db3349397af129be3fc727ca4bb8595889c6ec668213e8bc1ed7601ec83d3dccb74c98408e2fa004471da85a0006f66f129137092f1cdac0b76ebb385bcb05dd286d28b860576031f4cfa9e88f1048f3fb9cf46ccc22c59943d6d92ce16c059de43c51cef8609baccee8f78cea9af5a1273d3444b197fb00066485f965a7cf34029c64ee9f45c2060eb133ae04852df3418c4ea30864b06a977140c5a1c044fcfea0b6fe884108ebc68f7bccc8bff275ee807813e4de89913b1dee7782cbcf40ea551612d4b79302bacb1caffe4fffeb96de05a8854900b5ba20a5fb6bf1584be07c3bf0d02e5c812ad2d116ae18c23a1089e5affd38d0ac94707b71ef49fac74b0724f1211c6767ed483039a1410930a174526e59327a7f5e2f3ee385cfdf8e2da109c8d2876de7e698397bdf3850b84a6bd0016e7b09068f770f89b05b6a3dbba8e655024d92742890112a7b79d42e3bb80cd87fdf4175f1b579516260fc2e4192c67711a730a0f56db68958fe5d10bca0f12d0f76c9b1073818ccd3d9aee9487a7c5d856fd330c4fde9b739a8fad795cb67c55e2f12437b75fc936224bfea1f595484495d23c3d38511b4d9aa91314dd4db93640c24631901099ec6187349d5eb5a046337edc560176394477350dd4cfe8ddb7522552ec1e7eb27030b5d0eaf75916c871985d8a599455baea984c8509597bd51b0b394997e3ec15d0b8470f6b9c48323805a40d99ea0712ee671de2931f48d1c4ce2f678656c4272f546e417d4bb1ed47aeb9dd636f57e448effbe41ef4872ac6d4188ac656f06620d33684baf83ae163074f9c0b3bf89668a1938eeba77a9617225fa2a48f7d070530ea2b3870c738ca7d9f8d6bbdf50316c2b9feb501a7363c141db6f6f17085974c80a4bb6f113addfdb706abfee03fc750c0e7d5b839e99032044c39c00c6abff8630149cf357ef7e2e911688e86ad65d72623901887a88be3b5e57f352b2dd49f6017998e92d6f2293f96a9424dddac370d836728eeaa65b3dd9e291028da4c372102a4bcd78449a80e8a8065c9e1082af5c9822f7376f4144d2618735d662042b620d952883594c635fd48598c935a64ffae196a05363467158fab00ff2c46f0ed5bcb6c0d7694cbf3603eeaf4df65f57de22899fb2252a56ffd87334ea66c268fe4dee7691ff316bdb3e8f5d2068d03019e46d575624748de53eae6cf657e062f68b285dff153220dfbe8175298e486c8902c34e86a817486ab2b633665da1405b7e8049858838486c0f2bc9980a26dc256ab2b9b23f674edfa2fce7235d4359ea7658298f414f35cbd01640261e685d312c712108b5222968d3c3987024f1b2a13ed8d435b48a84964f13defb8c2d3e3298cdb00214e9256f6695d5e90eb07291830191623f0af066c90ee6d67e442f72d2b595d051eccd5dd13fea3f49bd8e59c8c14e54e07c69a4daf75c65d6a6d2fae2228c1b54becd429455926636a0ace266e5cf4f8858c594513daf01a9cabc4c0564558d66727d3072cceacf30b07f3e41001731226a910b6f8276d68b44a9d65ff07fe6bf78e6161bc560e7030658f74ca8b837e5e83bf40eef8f01580e61c01bc4ff4fb9331bb1afaa942c46aeca2954f37c91e34b09d336d8981d37b9f6f61b022d73c6b97a7974149990735b37f23909c0f09186d4158a94a58b36baf38f31732d504c915688541ac72b56c2c87b1a5fa209d10953532cada4a532da955deb38c9814f23dd2c1453f80c22f3c9c18b3421054ad533db055a0aae0e7aae0d5e951214edada2a811d1851ba1c8b7cabb5563d6056f5769aabe79506acd399fe2c875212435e645d02787b8e7d7fade0b24b4bde5b9e52b71e227e41d4b07f3430fcf261b8b99be508bea32967486ec4396a98e13b64bad948190c46aac272f97caf07ed42c51ec9776bbfcb3c4a699d73c2b80c885eca8e7463523a0b889de55d7185a86e9885e770afb57511084999f110c09b3c63a7f6cd78f01f42b069ca42bc9fa2d11fe1210ae06b41501874b81d31b006bac794b47a1d201387f46ca7e2e1167a5265b7f3e353366f14531bff649b245ebbeded86883ca460ec39f0860a5aa7281f847e09979cfafcf47f8006ad47d16524db1cbf1d310963ae63b1240d5f325aaa5026c4787616ac1a09f81f42c24d07ea2c05980f7c681cac3ac5e847e0414346aed0d876f7cc9c33c2a63c764e58fc93e4f7ae519d9b1974dced44df90761c450b14122b05f36092138d1aeec66293ac44530db8618f03d71ccbcd36c92d20b5e07c41e6253add0700279ef9b2d7cef8d4c3a923611012b10a89b80419e26544ca2fea672cc2c28e163542330a68908587ac90ac57adcc862c432134ef64b084392fb386aad160b4b703844c19d21804f2b98763f552238065ea0b7fd7186d1fe20f7d79f736ff1a05f9c2e06bb41ee331069e9404784803eb505bc46a8f24aa40338824c1fa000b77c9d44240c71d4d7b68b1ea24d264c7da65561c885d65671c103c7e56d801dec5127a3adb15e303839db0c82ee7ecd17ed56f2d0f20e06057ce49c57769103694b1010a433c147bd771e300378834c29198f197d8d0e9ffac14e907e436d1d8ae8624ef204eff905f469d5729333409bcfedacce25d0903d30ce8b54c7e76279adeebdb84cf8f5d66380a53006eea85a178a9cf05e129cc31f756f8893105df9953a6166a3c33351207e60432db7243c1ec41b3b73d601984a5a7f0ee4696610c95f373d4b8aa9caf945ea1791710abe924e452be6fc9dcbdc0b251f924bb820eb7e98833190365658e4293f1a5f6af0ff2f2e15fe9341e8849a4d6b70f2fc15a4824457cac95e7a2d30d39ba5560deccfcd58bd7a50b5c8855b769b5fe6e2c7b72ccef80220646beb053f334f22cf764e10dec45ccb17cd0c0540b2a97f8ea3741ef1db376b805527201b7645ef7faa321831c0b03d98259d82eb724e0cd2b0a138860b8acb35d5d9b9eb09de88b95fbfd7be3c1466e75bedb81a699c2d5889bb2554854abd8c9d1c189e6243dd99cb9d6c8b73ffabb7989c34b63b7887a3ac6928db3dca0fa63c8c56381a3fe0686887c0e47e645506c321425b54040c153e555231a09b9376a81e79de082b82a254f0a6693db3949fcebd7b1dbfc6fd33d321bf5f0d0353bece660bfa19d4fe1175da9f69e559682a219de1df66a5bab7e28a921014a9f8bfe681b583b0d702c90188ac48c1e9ccd5f3307889c4e2105e92fb2a0e018d613836e00e3571c32d4ff8f274cbc8a04c1c0904f06542e9336e08e1dc27a1519f1493dc9e73620b81ba39c593b322c67022931ac76765c0e6dd4a9940b9f59f24295e81dcb8d12e8a5863b7b54cb915579de039814d4c7adaf18099c5d668c724afcfe10b53132a61cc41ac3bc06aaeb1ee2c2c77c87035c1616fd62db4071a3d152df9a0b0d9177a6240975f44f56ab707943e36c17f189b5af8e73504a39d0dda3981f048c9ac48b4e5fc38a8d4176680e6f89069d7f71c789ac227b2de79c4e2efaaf1d1414787fc87ca298095c170fb3aea2f083818f3274d873b111dc7411d6208ead0d47d1d9be8d2b8076ce138704d7f60214f1d1daafebc96461478ed828977aeeb4204bac214d937098be2c02bcdc97bdbe28d6f46d4c23e9135a4a277cd71083b9159341509b3d4de4f0350229ff097076f753f06b1e66f89ca0e039ea6865b32227eb63b76c49ab9057873ff92c391da1ee4eefd8c029c51af368649cfcd8623e08e9fdb05055a838870b0abe6a4bda39a8aed0e5bb24601876032a741fa37852f0ef039bb4d455304f46c9644476b1d00b41c02381a3b9cc992b6ef9aad63473f53756d0537340e8d5642b1fa9e4196606c700fa70146945eacc5571e38c495859754dbc3232553d8f5c0699cfcfd4a5a35dd3511225cf8450642ba9f3321bde972e9351531e9bd9413844da740b8bf309f19e45a1610b4e176226b1169a670e826dc16d676ad84255e50844b413fc7ba54358fea8bb49d00625e6ca0c0ebeb282bb681705f83e8048130d6b18e91ed12b39dba076bc84b58ba4662e3a2e2532e6630ddf0a7acaf3910e9588875f7dda762d42824c8cb5ef7c91c72fc55b3da33dbae9e889d9b93172692ade1f5ce045f148dab01cc73776b06a7d3c3cd96da8234740bf7db378e6102309e6b8f0d86ddbbc4819bad68017438d0db7aec077aef7a0ddfad8014df250ac238a405e462996acc1a43d725d462c88bd1a175d717c1a6cf89966cdf1180b314116431543e5e4d40970fba20b1e48495278d860d9ffb443511023eddf5e048d6aca4a5272f4a6d592e937641c4b4f459df1330c850d078f8c0ce221a9f19b63c5a43c6b6664a141cf9ed8d00f23c0d37329b564aff1dac36a89f2d163327e7f4836759869728bba09862a666a3e05815ffadd58a714b00f158b87dc75ebe3f97282e2917ba40228bed2c9a203c042d40a950698de91388ea1c8a2b9e0d9033d841c033128e3ed30087cbd016357ee214d3e2f9514d6fe078b979ebda8c7bd24d56a2dcd4d6b6965352d3980705d8aae2c062e36b67a0c808b2ca59212cf4e8336e54804f0920662c18faf3065665067cfc5b082176fc9269c74f6030cf63ad2e2eb780a6bcb131f572dd14f16a6aa58862c7561b7c0d5d3025f54e31984535a99d7850359306ed70fc8e0c2e24d475a2552f3543c6b181f77a72b761d57955617905f75c041b9e9ae9db88b65e302844c1a07e888043ab5e2e9a78a0e1cdf373cc917b6b8945e7c931782a30da6f0111a1c1d90c94bcda1a77df52d099bec8402db00b8abb87b2b07808fbd728f9bbc3aff50260b602c5ab2af1324a9ddb96a52ef2eacc93801b4bd9a2700007c1bd444add0a132a0a0a0ba86fc5a05ca2c757a2a23b97eea31a38f80b07913250cb407f33b1baa77a34d92024cb275ee28e75903a3341fabdb9a12ad56308d0efae3ab4801f82816985621dbc7556f0c65aa6cd1586a9e52c5110242d65343baae0145546b39b702c4a1d569adb74e207bb743933f63e9413c512f94c64487e0b142521fea3c761813c05f4ebbe99ef18ca375a5fd5e04452779900d1c7522b8de91ce200fbd0c59faa87a81e548af11c18d2af48ea9c109212f7c679645a01332578b2d2242db7100a5eb8e0417f29f68fc8d164ff316b71aa416d9950cf7a29563f613e3f16672d967d62c24bc3b4c65b21cdef234a916ead7d8c1e9a294061427ceccca4d076e68e48e56ae01e8647b3c1f5ec022de731009d17f2813eefc80f16694a2e40e45b405b2d1fcd6b57296ddde3e18c6170fc189b8bbf3b048928ef7b2c601df936529917932e1e0c52a53ec169527e3a7aabbf1ad5bd99a37f50c9bbd59826c0981a4860e61f9a3b5368c3015b7b2637e451c1144b46997315ada4641ae75c9f17536f00ee9d1990d12db08d629a81c497f4846b3848eef90b9d7b67dd7c27727260e6a435e639d97fd15a07702654a0d1e831e8c451887b89ed8cf13f9dae7ff5566f404be0121650b965f0fb5c65812550484d95520764075359f4ac27497061432a090e94a0fc0ea218750d0bb567d8dd719a0375e0edfe92feaf5b827ba19fa1537951c905798cac56e09c3de108508439417fe50c3c94a08e63bce4dbe5a4d05b69d7accb6ad45ea35319c8b76c4fbe0179d380187c8ba1f838fed08deb2f8b202003743566e3b65c8d33c6288a8374eb0360091f98a642b48737ae2f6420da0ab5a1b1a3a6f19fd241716c56e951bf5ae5276caadfea6c1217dd341ca5646ce42734f97faad047be255d12ad393ea004e35f765c104e334ebb4f58dc8f2bb3bdaa20f2c0fd8e2274a1102785ee0bece23fd287fb7f08de82d8f227447ffc966aa6c79691a4b1cfff6c815fdb2aac31d6822f8d3f741774463953d2183f823b048f2cacc90b8aa3d096ca412cb493a83232d379b687b90c7614c7768022fc51845be31c018c2e0142122e4db06e546280327cb0f54b267516ae8a8bfd0083bb3011e938aaa404e3ae36eceed60cb012231528cde08c23755ab41cadf38dc00f968ff95bc66dc43e34ae366b560ba055b695e5b7f55fd76b38bc1d03583bd4198879a84f9758ee8c00d7414e807c36de7a2f1b0f326a01d41a01cb872e0ccd630c2b74a1f9da7d57b5d262152048d5352f15f535e9a9da88b6fdfc496440b870899a10d4320ead191deed54ea74da287c68e070d5189a4cbed827ebd794a0dcca362ad821a684b729e48bf08e6bf29523122cf60571ba80c3442d91c398fad4cd7263dcbc1cb2800f30a59a0da744a2cfc18c3c3436b94144e4f40b39ed86c524daa63669758c8a37c4e6ce59e6b6365153878b9c52c5d4308f04f761a5a17d3fa8491202d1fb7f9d3ad59695cc1b9cf7e6457fc8d695a8d56a9b7e7e00b48f9bfe7fb6f33c9f7bc9f1680f597543902a72e80fe45cee91102dbbb63d7985be4805a3ca15194736d14819c4e9a5d221acfe25677a54aa0a62235ed0459c7c8054ee379c0e77f7890dc8f5f73ad6b6238bcf4d1d4b6671a872e5c03e0caa50ac2dc316ef302825325d42e8505d842064cc2032889494ed272f680eb0b23fdee6fc00789772ea23c2548567496592a912667c9735e1c095f1f145bf52509e45ac1d8d48fda7ce244df0b6ae12c9563ef6b49c108573af7a268ba901c116fb399801325a5f2d1714746f1f24787e2bc9bfc9f5c5724f457dd8adf441f3afbe24b774d2056f4943caa088f328449b30c808c2d92511f3aec150614012a8ffecc2144eab0afd0d3add672a69dd8cc132451d8e663080753f9ef83222969b14c13c571d3b81b363fef25bb62d7311e8a9f4cb4f761e9c3edd77e076e725752be56b5f314d3d9347b09a9e96c092cd0f4a1ec3ec097d32ce72bd6fb68078730385c5831d5c3b0f8755b61be951e11546802a798a40372b4aef37f8b28d81dd4e3f168ca4f592c5f591ea7e4eeff1eb9e010af1bdfeb61bb6273d82d9557534c3e8a81a6370af7593625c017d34d00edf161f6d2e552c08773d73d1ab09aeee2f356efebd36937d22efdcc07e03f4e1c76d26075c03d72f9999d6940c6a0888b93c88bc4655dc77e164a37ed7f67a815ab1b9c70d976cfc2e031e26982cbd66748c4eab2d3b2cfdf62765b37cde94d7d2bac2e8c2d59bf9c529750cf3e78e7789f1de221757979fd9af9a1213b2933feb0bd25b5562d111f3c380d24f73c0ff63d60cee1508a963bb04b4e4e656780ef2b5b698b827b115f910cfbacd7816de0bcd22e2e6ef56ec7843d76d1e9a6c0f675f5679c6c0ed91eb91d92220d7b56e60c1598e124c34f0fb21301b9a43a5bd514c633e8600b73b57fe5052fb0028f685ed39632f0ee6f5fef163f051889171a1f7b87239c4c70c13c83f7f71adc86016dd486d40deb844d180cc6532bd5c221cd8382cfff4b2b44c002faf299625b408ec24d07a63688fad22bf043ab5c5c187ceaae8193f607f0691ba76d217fdd27fc45a196f82370fe87723ba0e012ddc817ccd51e8f2887ddaf844c49a1b45c0ba17ca7d2d202e2d465af90cf88a2ec4dfa93ddd6e49652a69452f805d8053906b1c2df7e761fabcedfba8f06a9a522ac1a7f9b9d7cad13227decb86e91be7f92ba1dbdea59b559a7b7a6f45864e8d76f63443d41542b465456b7a3554c6a6263530cf4b92e91952eb5022f9d2134dc3eed2c20911c7a71198c3a4352d06f675c53848eba44af9e3aa3ee101a195c38014d0b473c0c490146077e0d2d7183c2217ab9406f567587d254516bea0ea179d58fbe1fc9ea76eafa0158897025f8aadf842043747eb46a278b47ab9af5db25c6440ac25c2102315e2ee8bd2f9aaad3dda3071d4450c30b8a9e6892a676ac478c2d70c801cc13495c5dc65e41030e5ac400cc92277870359adacff2164f09b2bca0c40b8aa32f4ae0da337503301461051193166e08729181802c8e82c8b081872021d718750063ca583942872860f4e06a33b56555a7e1170d660c002d09164874810489255c9814456f28f5170080c4911f236237281c002c216141340350858fa38c1f6668a17ef46316395cf86051a424899433ae9e69508279e081e6af79aee567a5f6d757d1737941ded56fa305fd1dcac1ce258aa1df1a31185442a0c5c56f02878145a356c57ce8c730d210b26ac2cc42b7c2d8a57d0f9207c0d8955a2f45827fe9a2491a97f624c89f9e0a5484f8972e9cbc5cda4b2fb52f7f5d24683b3b3b3819f372695e6abd20f3b55fd7ba3eca0c73fee96cb8a027d4b0c0c884cd046f31cc796b7424b2ff756b2a04f7d61be20569150b09b24be79445d7b66491e2a86e96161ccda89b458a9e7afa22b26d1a8170d2227b5442ab360c2fef6e74ae8456b551152202bf18d60be8d7c00bfd180b6311837efc7a796bd670a5095f93f33e8a7a7ebd58f59b95f95579540dbed01f22f090a9b5208d9df4abcdf78ec725a59c7472a847996c389b5289a462a99a0b4f2655a9526302815193068d86314628e1151a3538ef52f2fd795cdb7492823f9fc7c5ccf3a7553d817808f19fde8e7b3abeeaf9337f3ac7490bb5f6a55b7406edaa9f6bcc1d76a7d47eba260ad440771387e2a4a9f49b348d407209b937837cd55dc3c68c9248ac7131ce19a18c124a19238c304219531cc9247f23994620b9e6901618e4ab8655a257a57acb8593c3130a7f5d906150c32af01b6ecf2a0eabe098a1f2359c3254be264b2610a20d6f1b366cd880bc36aa74643ac6eeeed831c618db3dc6f81d9d061a67ee8e31c68edddddddd104a8fb1bd638cdddd1d638c1dbbbbbb3b7677c7eeeeee8edddd1d638c1dbbbbbb3b76777777c7eeeea884fa73dede1d638c1d3b76cfd8dd7ea236b1db04828c31cad8de9e5624d9f3d998999bb999390061b53d22ecf138731532fe3c33c40d55cef86083c280a642a8f1a86b61882a9950a3d843f937c952c62e624c83cc0b8a000ca1c8c837389df3801a6fbc552e732398829894818f66b1d87db053da10421c14cac708ebf2b19563ccdcc5470a3e7cf8586ed24e384c5118ff8c78757776e7304eeaec66f3731cbc51e3028f2167e8b32dda2b5612a67ac7c12f8c857dea766286710f29ff639fba1ad4e04aef63c94ab497bf0c83cd4ad8a77320967ac33847e8c75aae57fb9095700ff6a9dda15ab53b34024fc29dd4ed04e3b3b807c949ddff8ca09cf83689cf83aadd6824ef650258c75c16f7584e00f770b249d4d9b5475bb55cab3c4042b76791b3ceeeb7a342b82301dc8341804eaa77340e19d5afabc416382861e4a5b2ea2a612465888c583540dda1318ef0a9dba98766d43ebef61fe753fb6f2a7f46b40a1b56293dad5461bf34f990af2d07e31ebdb59ff3c15219a82baa55dc43837888ab7495282c65e7c3bab5aee594700fae3e754dd0bb6e19dc5d3284504a97efd2a5bbfb426f27b60e9a80c4f8907d709a8a02a791df5ecac7d6f66c98f98cc4fa01aefdddff240c6e676766666666e631ccee0e7d32ce3fea067583e3eceeeeeeeeccccccccccecec1edddddd238450fec89470e8eeeeee349a803b2187e26e7748e10d24030251d4c72414369bcd24f3eb3884cf0e5be0fe106846b13973373373944e0859f27a4df430636294504ec8691ace3fea06758333e7e4267cdd50a91ee771d684628e296772f78f30caecbc516a63e333664076e6f7b6332216c528a2929824090e4551c427222c2a89b0088b4a6a9f02e21109da3c0e6a293bdc83a1b08efe662875cf745afff8aaff4bfdd80796d27194563114eec122581d3b700e2678cb5d5d23349f4d24b06b7a3b2bb834af4d2aa022f0540fa0aa11548ded4261d3d4e8c5159c077afcb231150d17e414ca20c182a231313082869e0a9fbebca8f06f503a5e4705e0d2240a3050b850c5071774a1c2d799555285ffc35b3c301c8922c4183060a14516176ca1c21fc242856f81ce8915c65475895e4abc84a81ffd325befcefebb56ce2f68bfeae351bbe1deec4a3eecb85dc98fddae4ad6cfc84e0810c76b9e108437a017c402ed3c6c3bc9d0afb355bb3d28ebe05f6f32e51ecf3af8b9b7fb8cd4dde19b5ef14e3a244647b9553cdc99d1cf4825b24f324580f424efdb87afe3cb35c21a2117f7bedff6b2fef24980af792a680f5f7a2a5011a2bd0af299f0ff9c52beeca8552c6b15ff9cb32be23197c97cd639cb9b93692d60aa54555d2d6060553b42b5e75408fbf3eb7a9f7b31bd2897c665bee2f79904368b1a5fd3d2398c926dc2c1816a20e0e840b5ff6610d26f91635310d2af0984203e84481eca57fc42d0fbf9cdda09c16fc1f7a359a9cb3e2d56b72a50dbd2f18a6da94ded4b6a7fa428e00f5f08842fbd1d085ffb1df752f1d7e59d77b07fb68f35939986d323229fb74951a8d73c227376df13d17eabe67dcc44e273add1143df6a6ce65eba762e0e0496d94a0fc8d9a1409faf563c1a0d48fbeeac76a1b1a40b75f22254eeaf6fb73772757a7cf8681abad1e2a722bcddf6efa76f17d3f7e45b68f1de94b5d693dceb8f9e611d9df4a5de9b7680221caf5844c2f4dd2132ab58f17553301d966073f76f3b90e48fce911d9f7875ed79f915a84abdbcbeebb01425a2f0564a68010716fa7b745b8ba79a9999a0febf4d68b2467aae67d1fbbc951129c571a46a9cd9df1050da3d496fa4a93b1ab8c5dbb602763086ae771efd8169fff87b7e6f3b8a6f647785cf0f763c7e34a5140fbf942b49fde0e152904a6dc9bd45756c0d058c1a17e5f61036d24271e7840bdd5ff3dabf28ecabf759167ac1276ed5a130841a6af7630417fb9b9c190a0c2cecd51347fea3a841036f4eeee7ee81042d8d0bb658f3c227b644f64c51d2c96dcc16a150ed9237b5ef67477b7ec913dcfff3f5fded264bedadff9aafb7c9a42777b8aa89f16abebd928437ffe6c5026f747e7e6d8ff20ded2f15517028c031750af423a876b1573d7da6d15d23929b0f3176f6e0efed9ec697aa2b012ddbb1d3b76dcf7dd85be4b37a7dd4b16f91be10c58773c917b895d0877631a8f3511aa6fee336a5e60bbb87b03e98d8aa1aa55436c8ef663574405c9e087346ccc5fa5f458d334cdfb1badf2879dca48acfbaa56e160175bb1a2f2afc760fbf855df84aaf2be4eb74e2f111219d48f0e21866fd3cb105ff174459bd92a117c48e758c00776d22d1fd240e7ec125ca2d4a39d557e71c1c2a6a025b608d58f7d2ad39c4f25a4739885ca437c4e4afd835609b5c762181615ff0c8a49b614ff8d661893edce00a3a6c90c6b284ae94d1c143317d4df0703d92caa7bdc09c98fecd18b9164189249641b372e8c2a954aa5da36ee628c1eb9771d274428922f3d944ab584721f6afaa38228e3a070a0bc055dfdaf920155c5b648d65386ed0f5ad59bf79550b71fa552c9d3f9a03312abce0f1f12a173dc7b9d1fff46e2f61cf3b6711b7f5f8d44fec9fa2963c03de9bf7eacd80de91c0d85627e9217a455ad692f04be6624d6186448b4808f524571a8520c343ef4a6f6f1db48acdacf19e37b989a0ae18baf793c959ba82da89e584c2ed94acf1b3397f8b7d297a18fe359b105b78352ed87ddce099be4ea37bf033c95fb8faba637bd29c22f6da9e3189f3b147c525aaa1408ba5520fedb973a22fedb6fde7969ebb852a9e4a54e4f84bff427fed2b3e9495fe36dab4c9cf7f97f806be9e3f3d4f9a56ebe4bad4bb90ce813c1c4085146fd58b568f6c0b3b7641a837e1522798be4cd923763f34ba881d5af06b6754382f8b036548c55ea9affbe964effa9aaac79daaafe42e3476d0b1bdbc2c0e26c07a59f04a82d46f6809257c2e67082aeaf50140a1a557bc9ec7dda7b11168e5ef5541979f98963280a055946d860614a4266aea40788014c510c4354940d1224104208a17b00ce70e952fb6f9a883e99e006910f50ed20d0a3040a2d4c00c5a70726b02708d31162d81f03644481c689155cf9a9f2037ba2ccadfc9c190ac312036001818a5203098c4d490a6c985f14955ad004288c930fc030225232d3d2f3f3e344c991941c927c10c68b879f0fbe9011c16085c9074746f5a70ad1922bb40ad64334413e241289442a23ebd59699cdd98bce60a8d9cfcf807ab52c343ed0e03be13413336364466666d6abad1f0a084a8406cd96cacfb1406dea0ea11153673082479a0e103e73fceef627d2120ae5f76f0e635b4839cbec7e6766a960cb82eeeeee6a4177777706babbbbfb023318daefdccc1dc6bd194ddc9bdc446c8cbbee857b052dc8bd68405b8a390e569830a1849929bab0c28b25362f5049400f689a8009fde033830c37498cd062742bac50e0282181e24b305814698aa012861831c89e22a8501c47b9ba8a10439040cc14a1218270c2675d5081bb3b6fd971021b5ef8c122cd0f6438c3e05848ef9b147a65a84851c3141ece60f941c9d60297fe30b59b0ba4be1fb4bb1ba165062a8a78c2ccd0172e7e6146fd761cd1d005bb59e04932d352032c8a0a6430050cee70a1769c0dbd49863ca986d09ae8a250ed356f8205ab436ad91cf2fd87c6d7de59b03d66bcaa7cad9bf1aadec476b05576bffad5afd2ec97fc8e798bf4f2dd49b74853aa5036336233bcf595d4a4bc513df99f63712dd0061a1f76156f7191afe4cf4929eaff53c9a22a532490fef4274f855398f6f2b916d446ea546881f4f477a89722e1f4f4a9a702fdd3af6b87f4d40b42f2a6af98a948c9411cc44127c8643ab3869a50533eb743bfee3ff2e5a4534b95ef5a8adc8b6cd352d272f3aafb1dab32d6393fde5a977c07f2168f4b3ea9e37179907cbf22a7f7a1b41ff8a23eaaba9dcc18b1557e39c60a808864a07941fec94f7108818689e69fcc4c7698eedb8d84320ab2319e3c71f24344191727a9fc373a6706a7c586f338db42082184ed9c9360db1b9b8c428bd81cf03f77225607fc8d39c042bfeea02ef296e9e17b4fb74c9e0a456dde86fa506f7d053d8752e345a9f08aff7490b7784e4a51a87f19940d0d0d0d0d0d0df10ffff0cf0ffffcf0cfe4e816631b9b1cdd58a5f797b738ef9b30420eb050f87e65484b8c74655ea9f0fd05f3168f0bbeffbc4bd90e98abf43ed4ab461e526f28d852a0af6db9bb53ddfb289c246afc1f42ba6563e806961ae329c6d8b74335afa12666eab74ea86afcde9c88a4c6ad5ce7b444c2232cca5bd24b51805d9b2241aa203d572c71c72d5b0a466685f9540eea6a4922ab5b731f9815052d4d19afeadfeef9120a7f738e4915d640e1a34c1458d7f455fcbec65265ae81f2f7936d7f6788a1fbfc6acd905122fefbf9f796ca9559a8eb7dfcaaf0b7fb4007e4c4f3c14f8550aad043e154f7b74b65d56fd3d4cfb7a3f1a2bd807d36a1f0b47a16a2253d75899e48a9457589643041dd4e7b83c78e9d151410f484914bfb15b68b172780b9a810d97e7eff8eeda06bd7fc67246e359d0e8faff9ed759abb8d33bd4eeb6ca78e796c907b1b6a4365cd7bc73d77a7e7d139a7aff993e7a3e66b5c1ce77d089a98ba797f230494558455a727a479ee00e992afc35f034bcde97f83cc3ba7183e0f138c74eb011f0c51fbb7bf8dd5dea13874864bfd760c7f84391f4ef391fae1a8cd1e0f0974c5892b340f94a424b695396c61ce5dcf7ce57fc2ca9c5ff4c7e74bbb827efc83b7560b132e7f2f0523b4d23ffde723a8ee4754ff1a63a0bf66b4b29df16bb25fa9ee4254f72913e63b54772fdc7fbec59bf81c89adb9d2abae7c42bf38ab4143d9134a09f138908252e1f7968cf9ca65cd10a59de6c2e6f03f751a0babc37fc2bca5f5f4ca6bbc8f831070de77533fed0573cda7460bba757a297095316fadc759f5e72f2a19dbe27625e31ebc3af8fd198ce5322b6b17aad78d9a36f788faf10fed1ae24a4e6c9c97ed0153219c2afc53855e0a0857f85ca1f7f1188155e89522815df2d9253d18e78adef4d5d26e81650cf9e3677e67ae7338044a68ff77a3f273b31e1356e66a9755bf412b492f49d7e2a780c085af294b4e22cd15b894f1a76318d943b77c9156d0ef4656217b2415920affa9cd26784bfe7275b78c1dd6d1bf35a494dea3fced0985011b163a9c000a8704f5a1b12ed1096cc04297d070021810941301ddbad862940466eba15a111704b53182238296aca88086418f7c41b9a02aa220c8548884846290a28c0c21e47a7a8011f990438908221f64d8c8104d29d304d1142e484034a54b1744539a989285680a124453ac104da902030a3ad95286d4c29824aa08832a2141081a85aa4b44822395465d221ebec0b2fd0761f0a7ee0d9ea81bb5bbdda33b3b843c81dcddddb51997567507d1b62331d4655a5d6f69335404323263e483ab42a4d7665a6a532fa8ca4d20ae6e46382f308a13080a94d059965ca894444d01ded0ce4831545bf69a93516d6de63259ed97b136d366da8c0619977d34c8b8cc8f220d32dbc19ec29c62b1d39852c9db707aa09fcbe877723ff299f45c165db6196d46d1a3d176b0db985e75257daa6d4c2f004bfdb6a34dd6aa9d920bfa4d2019a3fcd81581409bd10c286a314e206f919e144bcccccbcccb1ce366f49ae647da439fb96c33da8cbc3581269036816ea886c2919bb63b77e7082417c9db8c7cd58fd383cadddd519de4a49809bd09844306edb88d69553f0e994db619010101e11cd1ef143bc93a2716e664741ad3399f36e3228e344b5bf37293864c362b87387b42e7e6f013bc355b77a0ea4e805af5b339bc67be9a00ac0e5f46fd7a754fc3a2ccccabba4fe623daffccafd3903d9fb54a424167da51e7ec7cc140434ed100d8bbe27f260f602c57fcef0449eb80f85b19365dd2d3c2f4cab558ccf7e4458bb991cb9c8c7bb10a10b30bf06f37325941bfcdc8c88d649ca90afa6d469a0cf62079570f12ead25e7e8c69dd098b4580bfec4e2f5805f8c7ee44c52ec0df4f5e3687ffe6469a4c9bb999ea1f37a3cde16fb2827edae65acc0608eadd5de837b5eede65ad9fc650f73cc2a160b8ebdeb7b3fb3aeeee0e7721162cb8c8b62be8e7339fbdaca031df623640d0cf67b2ba7093ad7c017c41d876c0ff82d16634d705b47e1c7b1f945de414b2471e914fba4ce1821ef9a447f6c827f2883c22b9c8232ea0920bfd6637336f0a422943748b0145afd78b0517d1922ad57f3f7652dd7fc781aa3bb797a582b91041599a80c40a5fe8835e39c3aac356c14f0121114995bed43f4e3e20a0d4573c0479dae511db8c59942cb498619bb78b0a305832012c7cdc47782226030b1b7705d68f58263399c08c8111d8aa26db1cdd7e66a3593e46084f336094c5587608bd9772e1890266285280c2fd0766bf71d60bac6e5f1e2c16120a211cb212638cd17405e5871be37a8c4fb950fe58c423d3e03debce5ef507c1f966102a68bb9bbef8f24c81c6779918db16b252118a1362044c04d58f724a68d7257a9243551d795da227383c5992c4b6db9abf4d4fddd264f7d4dae1171f7ad0bb57689ed87e24083aa32ed10d68aa17052b8b940af7460b54f55617cd20abfed07f2e51fdb9ced9aa3fbd41356941f5c7f928d5dd090caa6fa161081e1ee8f49caaff8f2675870154ff2116e81296a8fe1ae81c0daa13d56045f52f72820ed5df48e720a0fa83a0a8faef740edc4a640397ea5c7ea4545fa0ce5922a034d59fa138d10d5daa3f47e99c9aea52ea32b4f23bcc601e2433783283a22d8c0803c89b788d23990251eda1f88c941830b1040c28a63833834d4f13e8f22dba683b60269b437b4df2f0968d5f9cd47fff3cae1a29e805e9413d07cfe3dac04637e9b4f1fd361c05fb01aadad7459f5fe922239c0ee52bed531bc31ed51c745dd4756c7d055d5478832b745da91fe22bed7f878a900dbec6ef50d9a1228483efd71ee5ed501182fa94b7f3c357daa3be86b74345488d47793b3c6a6ce0ed68d95171e075918a870ba5bd8d31e8ba36f875a1bc14003c135aa5bd4946658a1414f1f37ab94ef095f63656141955ada749fd68b5b243dda0e397afb4ef8e4403fdbaa86a2921fd1b7cff061eff6c0eed6fc050edbb48fbf6a27dc7b48730edd7db4803efeb59d56ebccf5f34bccf6133bccf7f6cbccf81a8f779d0c9fb36a6d5789f5fa99ac9fb7ca86a9cf7b996aa6d9a7b21799f1b550d6af204b92c207cc8ae72ef05e0d3045b07707777e1b6480f7f7a949e48d09b2357c2aecbdfb6737fb891c6196c27f046aebca809631956bee882d684d96ee0b20dd19bba444c864a46505a97884995ca440ad1cf955dc7d1b2a6006b8a280616d636537b06b57fd7668aa0b56010ef879721f3090e5289685f8445224540f33e5699aea874ee353531ea14cd8800000000d314000020140a8844229140241e57b6f10314800b76924676541a4b845110e4388a52c81842082000000300103243334327089d468be4be765352a73dd5ed262642eae596a9725c95dca7054125919e68e3a3cc940bc95f5c8f91f97771b40249f677a9e9704ecf67ed24ff31a3d784e96706897c95934c7360d6b90e99f7f7d9ae0cb02eff6d3be1b40078aa9dbc0ce74ba6effca33574d15c33ab308fb3e186b4120c1287f08388d6d210665b805380457b04bc0b0905a8b4127cabe81854421bcf39245a825a188d4f9e4ec79544fb6a8a239f877bb05dec2c5709a30a92853f79cd9cc30953432b1356a17264ed65cba4015c2f4f8954133b6b96d3072df603e9f2d399495755285072e6e1a409f314c8e2b47a50e56b1397a7203ff554151538c5ab50b29444fd23f53d1e73ee33da0631f7c8164db75aa10e4acb4fd5af6acfdc2a19aa6ee639a6cbf897ac9de862103cf57abb70112e47aeee7cd94fc876f49088b019d71b1a7e4fd1aaa92c88fdf77367de7512329aa8f60d60bc049bf96da3dece087041e8357e2c3e25fe6fbc96378406544fc50a4eeda8d5fe5df1bc815af362af772ec70b1cbf24ee92091edc1641fdb788d99ed7e8d3fd894c2ebae832755322153daff39ffe3de63acab2e4938b146e932cd313151bf4f435d08b0f7a5a1c5a56568cd44b702cc62b5801921c7dec94faa3065019fb4878fff5313e8602e027ca77481fdb354d14409322bcd95c582c87c34a4e6ab8075346a6c56b94c5f1f2a29703ab2a3ac0d397d20328be874ea0fac8c07b0c3b8195fa14c78da6577adb8233ab4a6e4c27dd34bbf63629458b4a5c7c540c44c10511813db558e3e3a156ad12d54cd1e73d552fc0e28c31b6f4e53124ef7e51350682611627ab8ac03e2a88846306e6ef1873bf1956434541a516ecc108f914115adb91abc39f88a8a08f8112c5ceb2fdb483c8c68455a9175d2ad11ab8d7ca5aa0c65d96c8a8342919aaa072d09393a986ba297232e42434329867ef7c962d09cc9f12104343c7a33dab3931dcd8d33e1cd4f5d292635a7a534dcdfd6d6331c01fa821e45f9935f1a428b65a58792614e2fd65add6882ad0bcbb590734e5831c672d8e4960832b438a93b933800e458dd8482cae12ea52f94bb8b8c55f49c010c131d7ae1d09f39d1cffdc45e571976ce4f06f1d67701295f0fa093b047949c7017c7e45a68c2906c6303a65ee58765a658719a529e85d843c735b03c12e310ef3c719390d6e2fd8779f0e5b4a29c0701d1ccad155ed83740b476a8f73c970dea7c3a4f7dab3f76923cab0a34d4afe7ef4bf13f371a44b14d655c117e3877516ad9e1b25c6be3f2e782867974b31b13ee26991353b2f4263f01a9c856ee690f05c0405aea9d7b1b325e5cf875ef49615517dc50e828b0d27b28c68c54a73bee3fb129e022508e0e9ec06f1ecd8981d6607fcccd9e41a98dca96049207b527c467f0c71f42850dec2243511683aaaddc22da60d7d04a54da83e6280e1bcd25ad3fd499c966e0813bd2a0479ece3fb115f503c9900b7a1a329e255471b5ea55c29fed3e880c84a9efeb5c33205131c2d457581d6f9a2b12e523f6552d19b68253833bc4e9dd95240a83ac8c387de693e6bddffe03761595868b4e3b2c3b5b7d62fcc22d69591c8d1a08f9db1e396e61ec8a0b77234ea2aec4a8f43118b18b0ad36f6e68e90731f22e694911fcb9a9f675a36f2dfd9f06e4b629aeba8462f26175f1e252c71714ce67e30cb708d5ee94170ddc782c537d1d8fa01dd5e0495a154e45a8cb2ec513f3312c5932370823c4852220a53e4072bca48bf343be65217b7f6fc15d542f82d52f44ee7e47ad0aed11355bea84c924373565adff25ba0945359bc3fc6082641321dc25c42ded3eafc0ea668828760731d2f32b5e4ea95123752321d39a6972bcfdc92a8eb434e2b23090b90a8afa6953ad4b40ff19c11daa36b77e3667210fbc2be744b64d0e24d926ed184607c9b471e83bd0e45027a9650df2bd452bdc24b1064718257c7fd5ff7e3f0ba56a5bce115f0023c270b98891b72b444e5ba82df42e1820c2c0930392d7ea4a8a84362ce5a39c4896f4dbc30210997fc674fed0c25996c5cdca64683600f4fa9634ebe690709aac3c13a3b3afbd7f50a6e7e06ee61c10710cd0f97de0c55b73aa02b2fcc9bdbfabe47debef3e27a1a584f5b65bfec08814de69633117bc3f11ff4b149b24b3d3082d3c6c5262d2b579d4479209d86c01478b47a8575e99d7c8b2563bec376b729cdb46d164f4abdda37dc6ec1071ec5d523d0cbc68e6246945c46ada35c8a763187c899c189c82fa0f8ad01e203f566c73ed7353051e0df45762ab5c8a188b6f67fdb74e4e6d917e0a44959c804b84e3ec19dba0a6e989193e664735b9d1c061443fef0298dad56a0704d5f54a2aa92ac7ce0b8e9dfab15beef972da607f8f0a600d674f325bbed2a4298c376d075a578ec6d0907e66c0f31074a285caeee7f0986beee279a715290f4963d68b8786691fb216f431d29e950a4161402c15aa902d5bd9f82ca739e5d2d11d8011f8e3460cc1ef0e827b13794f40947af72266211d03e3f8c5c002724600cf0430c4270990b5d2940abec8510abe8eb803d9cf33d21a72c883152b48bdbb6ab6c15251bf22d9b79dd9c40887c38303328eb2491158c2df97d2bed738a37cefc71860f62df3bddfa2b5f154bbe8d5fe506d1075987eef2a520b6cee262c363ef5734515ec61da71af9c043273838c64437aa7a321f9fc516b1a1d23bb0f41ecf07445a153a5c11d612b66351087b9b8969df19ac7fdb18611c6cca5a9bbe5f4db9ec05aeee7add44223e077301f6ce9be123c05060a528f6d7c54a160bd6f4a655deb7d0addd87c436deddeb1f9491d836fa1418e5ca9000456318106ffaba28bcfa945b866d22fdea8b21a2e343a465dac29c3fdfffb2a3657339d2b486cd3c490a29f11e225c8d65e1f9c75fd7c291ba7dc45b911c0cf0b8a4bc0820ea2019d0b40d8d0582038acaae9874085eb80fed52ddd30c5b3fed91a7fa1ed5d54974e691edca8c4e37eedf4c0c0e15c6605dad622fcf712ffcdcc98435e4d6bc0b9cb25be4f0680bfb68fc54cd0e61acd3d497565ae87c8dfd9a4ec204af576c1b9843ea6ce86e607e948d5cf434cd307491117748721811238aaa101666b135fc2ecc5179692eedf5b603be39af3ad305e12b8eb51dec118b3cfa84d1b7f06b4d39d160bb0a960e37031b6246fc0c7b880c45e0a4b9a9311f508008e96176a504328e878fba0d20837c4bf2f1e3156fd8d0680cdab23267ff44e4e4e4f5a472c2e684f4948e6469731d5ef8344feeea350ee42297a492d58eaecfcc8c0b142b885cab8050609133ef99a6e33d09c0a2f988a8181807dda500fd86a0127127b4240e643cc623727c0592608ec9e6341a75b04e6c50da29f92d0da2bf70fb8b157ea924f807f9ffa1c1354769d8680d19366cba8f1d2f8ddd855b1d9a9f039189d086de3cc6cb16669e364434a19cb682c620f3209f610ec31b7fd57a284736806f0809bf1072c3c57285654a793c7300425cd96f960c43dbe4d90e0e335de4e26915d408d1af0df3d9e42b6aa76c8993c59345aa8bfa8b46d875870d20eeb6ed6e30da6c547979a46bc61b7e5136391e38811ec43cb51c715ba512f4f251f145a1dcce0807a1e8ff2c58a7ef9686cad3d52068d6950fe22152c1a1ee86bd682c5f140fcbe1825dd6dfe1b99f90aafcd2cd9c663798806bbd563466ea4fcd466753529d35489d9ada72e593f6750ddb48dfb7a4a61c50fb36afdafb9dfb694252e8834bbc3a10e87d258a6f5ea33344583039078d056dd7f0d8a08cb736a9256678b7d0accae65e4b1357520284a2c9caec892eb9a0d980cc938196fd779a4b034596c566b2b47c62fc383da106ec6a738fd0e7f29fc205a352fce1ebbfe698650f0e4a1558c9237af033d6ac195b45dad555db8f62abeddac6c16ab5adec672833a5cd29e529dc903b6c788cd46edada86c90d0b6ab411492185275b2c2ceb48f6462496d558f02d37a444f7faf4e7de9cef057adedb94a79b44a162c3aa59c9190b6fef4b49ee2e24e78fcabf03b62e5633f955d3a0e1b33b38e84a2294ae844fc0bc1d7ae0f9f083b0c1ee8e1aa606e5640ed2d3824ceb14091e277bb60aaf66bfc8d9be00348715c64aa8eb5776ceb8089ea650d875c5e31e83d4834bcaa8a77016d8ef5e354383c96e464d0209a981933aa2b0cb72679aad1180d493c7c9949f83af251ab334545c3a36825071adeda622ad8b2df044a6d4340c944a0b683a16137b9b3f18ea8be3649c267388b8e831433f095e9da76c0312e9324432b84ac7259b23dd90212caf534a8346810e5eeae484b56d76b508161713dde5f1732bf009e17dde607d6fde1b13eb22fc181dcfe7241150dab927d341c1d694ddbe8ab5d47f83183d2556c659c0df1f635f79581ea9c83263f72cbef8f9ef6e0ee9d36b9c68f8f05b95c071555ca7f8c6f01c14d506ead5c368ebf446216883cc3d42da9d131d10ce2a2d4cb7adbe1e039fd1c3c9034ecef011d695cdb43f4310da96aff8d6843ebe1113e57a6e1274131dc56174263a9579017dcb67b58c0092419ba81b0efef6be03d98da4d2431b5698799246325798b3cdf9e57376b335dc8c3be458c46147f46663800aa4e4a237c5fb322644ffd0cc33d297156a967042550a9bc1ff65c7f6c5c0d7fd81b744be7358c253fc79222ee95d6dc1fa6ed875a4cec9f008945d15e558c1366cdd37f5884e3309f0ff38a0bbc793663edb01f2a47b1c7af644a12c6463344a471eea14fc053bc08e6a10534ef5365a635ea0a04c47a62c37299f2c31bd1865cf5ea07a034bbbb83bd884756e7350af0f5fc87da625c47313149fd942e1d0779246264855554586ff74d2c56d0abcb66efe148bd01c9852997e48a181fd0efccd46802749108710fff4de68e8af2d1fc5722a9b4e23d89dd5570bee57b4778ed5038da229fd839190b9be1ef8bda563a8df516e8de8288f9040587b7b342be5f42f4f8e7643eadb5b080f7565a06abf9551ccb888c19e1b8090a836e178e4ef9662a0630f79b9915793fc66f2fc27ff96f27a955f6a79b5cbcfc1fca2f16b86439664b443a4401e1084f7fff1afaa5ee9da7fe080b66c5f4923de68a7ccde4647bab9691c4dfc7c34a7971531a24f994beeb5a34473a45df9491b74ed750a11866543ae205a039a8f54c4f366cfab291e4252e134969b0ad7c99c678ba23172be2afb7cf4962ee73352b5e1074c193212562befa44f635dcd637063e58651b45b91d13e158cdc54987e4e1717e37aba0ca64f8802d837536d60f87fb12510e8859877c9c53ca04b9e7f1e3152040831fb7a1c4e94881e34499c2cc0b8211d7b8a42f3c894213c1608606f983e7b25a11091bd3b215210ed49923be2e0159deba1806eefd0a8b640d6df80f008a83076fdac8a2feb30eb3e624f04b673de1fb8d500e569423a253be543cd3a3f3fe64934c4dc98f6e43be1f1075ec559e54f97bc0014cdffb2e3e7ee166beef294c7df099b6ff4c8a44c76738535279dbc9ba0e593597cfdb20c8618ceac5d118d4cc1568e9b3760e89c7b3495a1bd1fe1bc5684800f97d9ebc742b2ef6ce320057c4027395fdc1d4356e90ec8f00c998039c19df618a879f377f5175eacda8576f6a299d302ed0b26ab58a89491c0130a945c77e8b70ba28f72775ebf08d5045c99958d2840d1a5152a74943d676e5dfccb54781ba9ab180d84817f6733467aab2e2675d0a5e7d881468f6c3af6a2c963d694d55c5a07ca96fba427686315c0c54d661409ebb5b658a621baaa5c6154d87dc7a3fd17f0a8091f77410dff36ce6872fa830fcff5b506a07eb05c684a739d0a0826089b9a71cbef2c288adc1e231bf8a6452e33b1893d4cfc3ff3cc9bf31ad2deff8c219236fd87ac2c25400e8ceb05c5cf52f30aff99db8e70389dd2dd8ddd2874a0d7adcc779ddf65b06296b6a4dd14ce722e5e7a6c95e0bb6846513232522cf9aa242009ab841ccf203502cc1774ce9d864eedcb689f5fa870081c0f8fb588f5fd0c12d97c7a94dee9cbfcdd0e583e43a5e1a8f53430a6057e6de3c5ae56528428dd1d70399f8c02039a6a52863cdddff01224587e16f37152d9a5204be9c0d8b705f7666d8d96c29fa6340d9d284353ae925b04dd92e455d30a17489c8dfb9d9918ea48a0d26431541277f344d6dcf6abdad4c7faa07acb5d51c329aa412122cad1424cc6a7e558c5f1c423bf06b14cfcb947d5a72e4ec07781d4123c17c002152a98d587db1b68dc3f65bae2094c843470546ec93909cb644875d33fab9c7ce442e2e7a5d630bb41342d470ac3ff76fd561008c6880b2b9d7b2eea6b07fc40cb9995363511d9d4cc557ba1210bef0f820a4d1c60fdaadf7206f7fada7aa8dd0243c853059b859a211d7b056ec68e13167876205dda4c79104423045d39998b639c4dfa167a91111c0a5161fbc1180e57d44eec3444ee6151015ebf8b6bfcaf0f51d05e93901854a49754b512031d008f5f846990d4cee1bfe4d42c47b126c41299e4783c992cbd977b96ce54169af2436ff3dd1b31d44ca9264ca42662b33313e1f34406fa6ca76258d441557268f14f1080fbd1ac2a2cbe31d5d2e83eedd4b08c834fc9a3996fa962117f906a4934f913e71f082583e67ce22b396e3e94d66d5e01ba08768ace1ff428c9912682ae49f3b4aabaad61d16f76dccd8f11bba92684ed34e76406d921766571212de25357189e790754414bbd63cb11bc042600472688a27ac436f68dd5d9235c9c1e8a36d2cd20d05b602d4f6745455eec19cc8e7d04ad88f02583719e17d3e19aaadb5025f4887ce8f2112d2f67fd9950e4932433a0915cc8fbffa87c5f2135230174924b9159ccd3b0e1fe68fe43f8183c4ea1f7c300b2145bdad9db0ee04459ce13ae286d2f0d3c006303854e0a8e2b81d2cd647e1abdc5661fef8f4f09c8db663ad1899585ebaac986e4e8e9b245ee3b30df1fe65c97a8246a01b339953b1754e908b1550105f9c35309525aa81a7c979916dd7e53a1128d44bd0594c827069152d27d3f670abb7c9e1a2c7e3bd2ee25fa82e79022a23fd940e015180d09119ff8d6bc650152b6f8e3633e52ca8c8f714a5906d7db9bffee6f4b6f5d374a8868365bce4ec26e7532c385f5c99b17d113ae12a414178d8e7d2624d67f8cfab050ce8c983cf143b9c9784f414b3b5e3c467587f86db44a5a6227c5d92ec1fe2b1e921c46911dfc8606a5fe0c274963fbe8878aa0cf624e131907fd27ab385944ed75992e1eb0c0266f309f89b1b31f9aef24be994d40ce3d3839b25fe65de12fe5c17b6013c0bf9ba72c8429c90b80cf520af7b67c126cc0d2a163b9e327420a7c3873a1487ec4cec3830988e5306279c06b5a9f79b0b47484bcb3c8a8b81284408b079a1901ef285629b89960aff95ec6c1a8329fa75c7b2369704eebc5affdb0418f7ee3fbe319759cd648437e9f3351a6281d1185df1330ad052492923742a231beaeff8df13cbf08a72a055795fcb09b3950aec024503c258133c05276b620ae1cc1eea1e4c226112238a3c4dc352c9ff5a5586b38bea9c9286ab3f973bccddb4c1a9cda6609b730ba69a3fbddaa1ef086e8260a4133f35d130ed69857cc2a93431e08614659205b41205c2f54359bc0d0b0d1294954890f6ab886d022e0d609089ce27db349be210d453524a56e0a75d296b81c2d25fd544f9264eb82f3207a46e6a426a2c083c0ce8ca50da08e482b7fd84a90a21e9c13d8219f88bcb17a8180fd7fad129601b3cb1be4ec9b77fb7fe2734c7e852ee4892f3b1cb4366faa77ddd59e83d3b309d3a81c3835e4270d5e961c17684a455d19cfead64363a03e50c78f9f252184d9013dfa47c07d1687ab808c2867668e0d882390346dd4e4da19f178744b86a8957ca7ebf60c00b6689ec280146b706c86b60fb991b282c21d2422881c1ae605bfa7f0897b6de9993d860ee009eb06a25f3266b8363a710f4a4b9bc3166482e36b5a54b9efa7c13a7785d3d6d89beee61436bee22c1687b50c2da168b10824f86a9e6e93575b782d9597e9f0624f544779818597dc867422b85d5c7b7bf3a8800b14cff05570cdd1e654339fc404943c16dbe5ee1f1d3f45dfd5c1875a5fa94dd6971c30931c2a77be5ac3591cd6beb8446c7f0a452d4aadac2f486c21e482f356a21ca3f30f1621b41ad34250b21f2cb84febd5840a27d56532bf022fa668d7bfafb08b832a8f3a75dbb543c0458281bc3f197eba1b1f7504ba073ebf6eb34a8f7aeff144bdf595c9642a88b52f492d77e9fe9c3ba54592344813e6c0bd80dec7a1ed7a40090170778d0ab7a73c53f3140eff586914f26bc102a92a2ef495dedf582886103c0846e4516ad0090b307e4d4a84da4a102f137e2f357226ae100249e6b85481c3165ce9c1a0b16d2e39a41fc3aeaaf73f48549c49344103e1e6591fc6382f701d6f95fc01cce112aecdea9a36f191b60a824ebf4c76d2b601836a5a23b9b2361d7d1978138eced9c7d22a85389052296b0b08d8f8bd3ba33c415dda683ce0df805bebc85816c40e785b9384913f32053b4afd8827dd2020a60470a3f7da2f23b056662cb6ca6853fb1f3296525fccf321a2c3412a7114dfc7f3c47927f69314e165968e4dad23c1899a603f3c16faf65b608387aff87a96de8b5461cefb854d57323d85dfa49ea2ed62dbe90bcb2bce6449f890e698ef0e050c011d481d659bb9bb7be54365e47a3163e2abb72bf21e0cca328ccbb68037ffd1f023c072cfcffa68eabd1586814fc0eab93b3ed6e96a5eb3b9aa3f4841724e509002ce09a29c5099ad13eb986c24f334b1fa49dd4c8fa2e17c48025c3e7bc3b4a69ee6ddafb508006733769134d14028cf2fb85bcb384add6cfc707b67620b5d7bc252c2468fecb027c295254d732829a8ea9018aac16303719536a3e0ac95c695b965a7da25d8337d9721d2b3a4ab6aaf9a77475177845e786b789c3afe0c0fa02a994925d345f492ff8056bc4ccb4f588fa16b58f2d497e4c3aa5bc2d2246258bf9f534317f5745b879c85b37aa6cb4d90ff01e7b950e0108163cadebe66011da4e50dfbfe02715103124a067870a5acc8e4c721cb1882d2a00ee81888a93c737670f7c9cbd11ce0dc284dfdf23d8e4fc676398598608507889ee357735770748b1656b65da0bdbd9636570cbf4b639df5f926032fd3f6ac04fe1e46c6153020edf0cc1bd1f5534aa3187e0f33d08c1ea7f01e197c60c781717daddd1fb656f3a5ae291e8aebda3deda97dbaca9a16817e4b0f6329d83b114bfd6b9a59ce364b215bff3a7a3957a6d8348c13396280bd5da7c42a18423b361ef5c0debed5eaaedfbccfcb2ce2912eec9cf115b2dbcca61bffe31e79f402caa492b2f39c2433eadd01cf15a601d634d8a2f3308a6596291a2dd5e428b583677c14c0fa5411c2f6228a34a162e3e525b275a68ccf283d1cfdb1c671dab75dc41afc7967c3da7f6f1357335377c61dcfad4ad56d2ed6479787763a7ef7537165858eb3f8f1e994597d5a0647ac14f24c5f1328974a21a53de7894a15926048d58e2dee9491b6a3c07851c556955537ed5e672043032cfa2456b2acfc5f96925abf273d2ba158d8e0e78fbe8d3cdda6ff3787778e309f98229ac8adb608f244cd8dc721fceaa7f678487b904ad98fc03bae7ed439e439838d4f78361e05f500c7cd189f084a4a4df5349291f4702de37105e4d0f2d03ff091ba8a74da3033dff71478ba6999745a35c13bacfe2c7808089e49b82be24dcc7afb193da0012a3b7a9261f318388296d461164e0b53d2296b6252d18cc4860acf58a8389e9d60e9f5065d0a16d3b04f816a07031b82c39179c8b3740eec5ffc5a103500c14e9367d148e323a619c75c24b7e18e630a8ca09101434b392c04f642f3b4c30f563d1205f184c130afda38e2c0a9a14037a634cf061cc2d164eb62992ce5b40a2ad86b15a142a5ca42fe087a9d5d391646127e432ced972ddd23c16236bc52c7e31862bf10ec710f1945c33cf104ca746a1defe9a44d1dab1c20f0bd27ad86e08867f2d37c51854bf743f85be48337576c5fc0389e05574f89780977e0a02eed4e0f4819abaf43de761efeef438bc038cebfbb9d6b99d63e323c97257b200fc35bb791ad7c035c2386cd3a20360e624e0d8b60a8b5d59d5a6d001397ba48df653ccd072612878993d4fdc72b39649c27d7dd02057145e42c78b137d5f7a932b5e145c7a5304a659d90bed42fbf7173beb6a58324cf4daf9f3e514320e756517d45cca23aff9af3e66e45c35de69b71df5db0f50b85590ec4d81e40ee067e5d75badc30a196c48bb4375c6299347d2f06b7db72300c0c03ef9d93eecef89019cbaf9024110ed22527f77b7bb0ec045e2b61ec435239d3fb77d2023e7f1e3c6d3b1cf679342395047ea2d25e064a75590535eae5ea7b105e55221fa4fe612e0752bbf76b42727429d6b0f5bdad01a4b86259c17c4851a958534228af66092a344fb64ad211e699328de8f65fd2591d19d86b0c88d7c003366100dde18d43cc66ac58ed6e3423c59769a891fd2fc46e806cbe749c3c715a03506336d64450ea32677475a86cafca67efc479d4cef6fe308d9ff80d4d5de4ac0e886abba94da86c074b9723d268434d3bdbe72b8429f65313e66e65470678268a1a5b1fb5a2ea6330fc7fc8aec927bcd2d1b9a1ae814551129dc98f410c7b38009d4fc566135fefbe4ea7cd62eca8363eacdf9e386c9959f0fd49ca0c27492c52f4e05d519841610d780a831efba7966d781931d84be7a47cab132a7d18291399952cf2d45c556004a8d8417d1166803d8e9a240810c42be041101c953de5cc43b406c695729a1210c792620afdb8ec25a526b07efda13f9850bc738f6427ee2fd3bc037d6ec49db799d77229e4b114f2be8bcc325c46fde28df6c6ecc341dcef1ac6279656e45b431162bbb806a88117247bcc78aa9b6d0ff6c6a0d8af3f2b43b61ee62fdd6faea09424fbe9bf0f403d429d94d24fd9ecfaf3cb71cd2ca04544a007519ad06f25c6a5e2fedaf07eaccc92aefebd9c45a69a162aae391893db947a6298ef1488f8eef3087e1e7abcdbcc761ca6a62dabb64504dee2ed57e0c272b9b4c30e7d88f69a5d34eec54dc3ee4e2d1adec1a1c374c441ae6307d3097a740c8d340609726b0d950609b6f762fad9048ae93484a2facbd02168d97914a6aecdf40131d268dc5fd2a5a19dee6ebd5fb76db349316603ea187dc4a2f97f77f1e3318dc8f1b13d09973ebb27833ccac3c134e1931a7a9e86b60c50bd880e9ab9586e56e70f373ef5f762a2e13ab10119086e8fc8d9fb592aff4b8b3e2e9edc575ff9b51f160e13ff207b6d5eff1fb790fb6e0c6255a6c028c51d1564523cca4c76f6e9486d99d7b03e126974f2ddbe8d1591d3e2eda566ca7c1214c8e4dfefd5ec3e15fe4838693db4a19a639a84001f6fa08f702b0d9f2691a8003307885f1e51f70337c23ee440c0d91f0f53e9e6046efe9cf610cea878e05a3ca828e3e17d4d59f7a07bf927f62c40b46cec9defe93c5360ea2e2273d0510d8b79d16a39c9d4c7867172cc3d24c0a2c1a76c3af9093f77dae2533b632d3afc1245044fb7ba6197fe7e205d098b68291f39da6410a7d45c4921d2346af9ed1ea57658f6a4283d245af6b056cd0a6bdc71ac3874d629177dc0e80b6f849dfbf3ce1aec3c798740fa1f6da3cab102aa7d1ab1eb539c2dc0d3691a255548c7ba4b103dd09c199485bfc25a45d903e9a81dee701d9eefb2a5b88a7473c5ae8b6fdd66678a45f42e86dc808ef5e7f300e3be5c0a3ad3e9b071490482481b6ee260da3c1eb0caec37f30a892e2fb95ee7b7c284d2244baa78d9dc1ca58932f416993a2c12a73ed89981754408b3edd21c5736682a45c874ba448334a0e97c0a55ee7bd890d595cae60a13cf36e78c0512598522175d6086d3c98119a19eb96046bebfecbf018fe9c488d90b13d72a8c0b9cef543462fd1f7c45d026174ecb58328d2895c14fa5ce7d3df845d30ae43f608313576857834bbd64a2dc63b6cd2566ff35af0853c50d4f8d9999d0d577b3e25461cf5854a053e6ea518b4ba1666847a649db99c0e277a6eaec35f4c9e0b165757bf487425c0de386987b8ec184adfc1936e561b425e951f30ba98d405cdf1f7a15931a0f483e6eef6739b154b6ff70f73567680c0ca52a5c3105bef34a26f2ea287649b6aaf8f789289344893a071eb1a95b9e2b446d647a9fddb6a948a1aea010aca943f381771f4132b75341426723265bd4c659e71af5f50e47004bbf6b1ac45c5069e75ba9e246d44e138615b33731cc26290bf66e760c8f81b714218b3e2a9bf38798fafe4f731329772b4c1c8d9e03d98968644304bc20ce66fbff20eaaeee63b87615cb0598e6474e3c40d5ebd84443d1f3111d390a1df953c8af788b6591590c908e70dd1df12855cf370b24cf9ff068a89688b0e811611fd5ed25c7eea59771412333368c0c54c31827c2098d71cd5d8ce8c1331fbd62f79ffe3091e8e71cec8f3c2755d093e3e3987b92a33196ad12f686d31ec9f1ccd91b19dfe84d18189171a4d2ce65134d86268f95b2c3f86b10ad9c33e7aebc544bdabd15c3fd8471fdd3a1d05b317c98286e25d5065634f690728b502d9fb460636f226847feba1d4de1b0c516ee0233722aef94332e4c707526e8d5e581b956d957877efccbcdfa90d79ae373ca481bacec873b70776cec22a0c78ab59b4c1b6a91a0a68d6d45d0c1a29d6b61be83cda63289ed933a1caec5fcca387c3167cf56de52375ba0f5686eb0f7a0531c1725b6b1b01d922a041b127a7a47e2e8f59b9751476fa3a2ad7083966dcc42c8e9c97d830b8b94492933519af3e0e24b75695e630f30750235179ecf5ecf215c7e8a9d037a2d03fa7543f556b4855c302e0e16b5c0b6c2f9f0d3d4c145a2e4a40c3454023e2eed7834ac55127d765073105518097e12ae00fba16ee71669c6f1b82b03ad6098be244e9280cf2c9d21eda4dec39bc279b764a07ec6c5f786dc6743feb1396c452f8cfb8aa7caa1630a0f980ac66dba1ced129f0291081e9213ce34c08b187505e85158a20259f38bb05241f9a15f612101fb729f499ea646211357b13d09f7206f8b8ac1bee12a76db95c12e4da6f1af1cc85f4689b93dacb23efbf1d79f9d3594120b5fc2c639706f7b951622d693110080ee39bfcaeeac8d9eedd059bbdc489d923a6b5bf65f5801e392e71ffa5838cf0a14d8b57e7a1a4939c9fdb8f89b9eb3f796eb8464055947162a9bae3ed48f58457b197439aff28523e2fc240a10fea6083da94bdbc7e86786d148763fcf4a84599a38adfc9c2a2dca1ca2304277aefc37baf6577b19f76cb87b2107aca6a947f6fc1b10e1ec02fa4bac77cbf9b83db74a47f7c367de1e6be77b41ce5c78d1ef599ad1119de2e13a1c7575792306aecc1ca7b4cb52eb44137ce1d20f371689aaa2b000687f0be373ebee6586515cd262d1507e7943d7ede3deed0c7c545083c8fbc9963ae07d85b2f40aae9c9e800faba05cb144bfd0209dd01f52f541132ca5e1b3b7d4ee4362c666bad2a0c8dc5a87c6a8b87c71930052ecb0d39dbf8c037211ee5bffd1a3d6d15b6015559b67a4acd1e9ce0fb2741cf0a4627838d752674470fdcf5ffb3e8e966782ebbd259b75df8ca5e46d157e5241a3944ca8d59623935884f445576dbd4f971b740647786727a3a504809b739186eea5ca0c12f6c7dd586f2ef70eda801cee5984bca8e4a399c772252dd9092f6618e8ebf44a132bb2e727e9c07fe56dfd093763d6a0c0218adc54e17795d95abdab986a2bca1d5158ae8ba2b04dabecab4fb68ef017ff321315ec635ab145cd0cd71e5706d78a555c8758c401d6affd30de2ac3b2fd70fdc97f06e83cb4ea7d5e547a0bead0e7f83eebe9620895792c6970fd47d8dc3a4141bebdeefaa3c97c02a4f85a823bd6cb183ba1b9b871cd96681a545c23f44733efd38ab8aacee93e7fcfbf2a5042434134d625caea1a87966937424ffbe3a5fbd25f933c293b5d20d3c0833f737577ac1327f0f776e379c19469c12e8d042e91faba6cf2d67ab89dccf1314706b87e1350d5ba344800b9f8480bbaa34567302a490bafe8cbb6d4855ef312c54ccb92b317a4de15a3c45c9dae8083de461643c8091c3bc9633043cf00bad89e76befaa63d217213b3ee8348dcdb9d16e4f9b953f06fe4f8db292cfd38bb08831194058995cb869a230178b364afcc12c88e0f8cd1be36332a7333ad98f12bbd1bf81a04ee63eadb78eb3707329982f9a4842e102bcfe0f394440487a82d4e57e805642c29ec283dcbe2e7ce7abcf7e44226b1e294af8a4281ec68a1d0608e09827449ccf84f5882a7a0711af2512064fefb5d96c09857cc01253b5eda9065de8afc5f4315d917d2ad0bd3af5d392b425dcf9bef2c7443ee3ded224d7b114634c302f2492fc606cecf97e098b651f7e089c12a487064f183d78f0846bf59f5072286a41b5342c46fff63189730e9a73ee43c282aadaf352563bb127e391b2ba311c836782108dcc3324df0bd60e2a69e0d5aa600bf1e8fefad47664e4bbeab7b955ac495d26653357d795747f9afb50a58850cf87ef7f17d39452a27dcd6fc4a94d497beb9b37d12d3895474400caf9bc66fd4cce470655c645e8bb9b84796ae1bae03e8bdc861dcf4d24ddb6838668f13b8ec3f29b56bb8cb337c6d9dc08dc7a37cd390e234e44ee03d9b31896bc13022b03f10ef0317e81d0dad119693aa16496eed55290b4e7228137389fce33c416aed94ab3cf95908f3a92ee2a07dd321d4a72beb7468ecaf738ea32ef6bf820025d5d79d67bd275d58988c0ccef5a409de74216e99786ff36853f3a4784c173bcf8637ad95720c69e54e7aa58180f88d00cb06dbbc66faf7ad915d22ac4b88347fcf487c7f7663dab296cb56e14bccba4921e32dcb69fc7caeba369bf20c5867389d344ee610176c916ddc865cfa332b28d2cfe911e8c1b16045c40ac2d6edb5d766f3a631cc34e23afe158ca0dadfc548c7bdbbbc224e3d101f29d7382a2a11b1076adfc1a1a6ef6164f5d6ec10068a1ef63c5050fe08f66de31a5d4d980379a7066d3832874de19babfb18b46b8f90d58786a58bdb5ab39a6fd9b82f228a36e7fadb696a4041e97a891a204c3e740f224df35796dc12a997ebe60a14f4017b13bf80f21e1b3b8cbfef513de9dfd18023e749dd9a6254a25516000d42b9634db7d12d37e6d47d89157359f4218431dc574147382401c1af2cd8e1445d65d33a1776e093b613a0c7a3c7249cba9405839e8d018b1ca50b720d13cc6a392865e31635b60de9f4f10ec40eea42a1a0dbcb2abdd70df909d2bfc88eb1c8683c78ee789fa33c74be264c1fc015b0da86122daf394162ed9e6e2e39539e4ba017a631d3709662d95b1a251cd2c333858e735db5158b7f4952ad06459712208c316b91a401637f68b88d1926fe1485588d71fea67bf78194c89e4c9c24a4b798015694fe84dccac33a73a6710cf42517b54d424c8a236f174f9dbec5c7ce9db1bd0166ecce8df03d116ccc6183a8935c646a67a704b98a2f98e67130343168c378c933efd6ee3e9a92ece5e6371ebf9ea5a16fb92e87e32541ae8b8ba31202cbeec7821be798d60f496a1d4307bb3a53c9e14006aff2117c498c341ab5466bfde49c46329089677e9d1b7e8e01da2c4439b66e44a119135d5edced3de7f2f4c231f334b04bc0cf6818683dde76ab6234a30bd20cec33f814ae38fab47a35fcecbf1d0d774497ac089dfdaaece168f2ef98ed4c664a2bd8e410724697a0122f38473b49ed66a6745a1ac654678951827d5203e862a10272188fc4e2308a326ce097c9e6c23db6f8f96bd55bda215f21c9c91472f887db5ec9e0471c60a7c4cf3e3775b760b3cb3a71101b180ea9ab5ce4387e5dff2bc14912fc6ac3b9914469efffd98f69cf1f5a9c4220805673dce33cfeb568ed443c92860e512c2f9ee11c189fb261ae09b07a0f742b571d08b6ede5d9f1b3c43f227df798561aa17db5b2dd0c5f4230e6fb6fb2e0c4015a59cba327dcd7f16523149f0cd6784eba4995ef0d42628d3a60a51a646c4741cae6f2bde451db8a33be0245c1a515eb1959de0d794651ee99580ccccc7fdad0b38de275c447ef509a11ec70b9fb09247b1a1e0f16ab605cfc30bdc95a69aeb0cf9f6c0c692ece0db1b66be74dfd99016b63b82c9d6a2a794a225a666275b0a21d07cd607a6d0c61f2901b83b0e8f74b815605db9b6a0d1b53866854ea78666a85f523bc2e8e061cd9fd632172a3e9524d47191c564ce264b9e1f589f58388430e5af8adcafbe2be09b49ca73275eb9d53ee8c5ea321dad47534f48e3f8279607007a679b9064b3dbeefa5da2fbc3ade63ede1d7c44ee414532a7983711aa43e57ffa855265f88793348ec8d2f515d83a16883695def7a05a2008c20a96028d4ec541b064e5ac430023c8bb49d764475058aaeed07da2f7b42be21b1b9fec700e5b2743caa6f75a45591dd92c858e7520b6d19fdbc09b00125e5715e3e96cf01912b786d0635745f28db22ab5f71bb1e20438497a91a92c158078658f09651e68fdd828be44e6157f579082535d64ba565d3b87514bf54ca10638bd0084b6e918df243ec0e86dcb8ed76894a94ea4edbca73ab8178355f7bec6ad86062a865c488b2d4e347a5665e6f25f1b5d8eb513d436d900a459adbc3fae92fb5aabdfff1f25ba50b0cfa24399a2b8708748428f69b4c02fd84131e7edd8c6f2428c0c1bfb79e9c32942d5a82b692d4928769ad34b802efc78463add301124cfdbb3125eec2c5191bfd8ca9e4f0c8cf2a3a7ed0ccb88b6339a25b48a8ba4b2e93464bcd915a8e1d1c5ced98312476c6d4d9d14f234c3144689b86310f2f52a91a9a180edb4f054f8996c6087eec83943d2991112945ecf31cdc41ada670b6e3a960b60b44105bcc57c11a769ba58515634557248faa9c0f2f91c214c0da67b2ed2ba9db0c9eecaccf145f291550d8fcedfd3b8ce8e5bc2820f913651aff08a243095c132933ec5f9d5cbd41f5141d9b85d8ec01c3899ea8c4b6789984bdbed8d11ed995bcac2cdc2e96278b5ea0bbad0a296a0c0adc84b0daea90e38d90c33d11597ed904e6bcaf35439f82247359d80b8c330a42996c726eaf76955d438f6cab109fab17c3d7b89d8398c174e52fa3f24ca1726778866f8d1ed996dc0654e755b3ff15eb12cb90a9ed26ff0f27fc92e22aef8c9756167c52415d23620d6a5e7da33241e81ce3a4bda7e31f33adb016d4cceee615ca0ffd300e5c82a982a01bb36e022fcba32345acf4eaa76c3168695bd3724a2e6d21fc4a6711a828cbbd9e0264092a64a78c85f8216857f53e8ff5c75c5a389334764627ae9e890793b1ea603c3382ab6e9fed04b5139d6f29285c7a5def72df4aed58591b7b8229b0b58780e5043465b59ef0caed0a814d129eabc66c515d227766ee28bec6dc4bf4be57f5b27021b556d48a5eb95cf29fdde9fdfa64363499908bb6ef07d5f0189a5f2d6bf66f3728a5d88d494fe7988532b82b7014819e2a18dff44d2c89b4d39c2042a8a94dc88ed6ef16737a814854225d216e7d720a211a3bc4cd9cc446b3d2d80a01e24b40e65ba9d31d8cdbd942b31de500b492a65f0856c8448805e47c3556509c3f35c1a8cea1d7afbfe1402ddfee41974b3d6e75a41adb360e67fba9d27bf93928ad88b1848a2b2ea136aace5460b8ea52e49c4acdf2c7591d328bb2a200d67b417114cf980b4453ea57380acfa45c72ea23e1443ee9bbdc418ef9524fa308f1f8222ee5efc0111ca92c8022218647c1505f7c3d6ac6f7dca6575ba498cc0849f59d0a7b5f80863c2ad78bf36d21207e8409f7fc13d06eb93052fc5c1973da5f18faeea53639f572bf2153aa19a49bd856446f6d1c7dbf38e4cb60e09711ab52b6aed8d7bef6764f72a6a7c0ba6437e76eff030d7cc0bc8f7c386d1cc191268527332f85adb36c4ece43183a40933e276ef87ec2e398f59ea3f75a57d1736050822df9e1d9186d4ebc7e9a28ceceb8e4f35c40875d12900e05fbbc10f0b2cc758240b4c160673e4567f04c02c603cce81bf8495b010d0efe11c6d36fda7759dfd981ea02225e96250321b6706d7084aa85e6306f398fa17513b72f48518ec4e1c0110c67040c8970c1974897f27ce53b884196eb79510a18210c29dba34befb05295cfd854a2cb131edf78959a05f25837278f92ee45c515828c3105bd1321a71de532051a42dea44c1f74e27e1753863f27122535947ffe5c99a3a10a2ad2e5b014adcdf768f9882c58de56d459445c27b6bcfaa997a77bae50b00c125ecc2055f38b715732b62ed3f7087f49e118224c676244ea600fda38ba018a1812b066ae40931bad1c2da21695a5b869aa7a3787fa4e6e432dc3b8b3ab04b1116fa7629375bfbfdf241fb087cbc3c8e31826ca3beab1070a8819b60efae6b41a28e6b21b05866664197d41a9c138572dea1ddfeb1932eb9a849511c5dccc2afbefa7b18b2912b50d420c219c91ee472830733ea1aeb6de150479b239f5514e15fc1597b6fdaed06dcf31260a7300bfe8b94e450e76ee7e1a596b7c42bc3919d341f33ddc53a8f6132b9b4369944ed19fb05391d62acdb66954671edc873a33b8aa93ebcc4318615c0659100a51703287fe3993420d8fb165e835898b203e215aa5cb1a0059bf95412c18820f13f33f34b8d443b5d307b0e27c6ac0182e55204021213ff0b3e586b227121ea8346ce3c222d7a4c206c90904d04401c9a7f0a39448209153c960d09f8ea8d5d97dfcc10b021c786faeef6b65f17dfc448de6c410f0fc7c68e1fc8e268e73bdc2456d868a31a91608188e8911e3ab8a1ae75cc2bb2e088259561cd4a35e55c28e40fc236fc44fe6da1da41629e6186ab8c89218f42f5a6d50e301c4349069c53ba9865a599ccf67756059350e759dc6b4b6d7546af168c0dd6f1d50d90bd5d0c81cbab9a065d6fb6443a215f59355a8dca27b65b869ce86bd408635287683d5ac8f83120cf5182a4b12d7c5e06676a19b401f953fda10d1d934985b286acb40dcf45f01cf3843669624e19458006ba54c38a9a7ba479e375c5d1a28f9d865c801203fe5fee8e0ea739e1cbf53bb48018d5fa38af8e04cbc909dcabedc796bc8362e645d7f551c46bbf94c571cd859e2b23d80da3aebc0b02bf5a6826a9d269145f142742e500b808ca8302c156d3324c52357ad4b64779983ec905dda34d8417880f1ce4cc4fd19200371bb856af42cc509df3311627ee9e9cf21a9d49f02c70f0b0b4b62073f4526cc14c33557b95485153d52c902607ec428be07ca7bc7123ecf6b684368c6dcaccb8c4f7e8f13aaf5b7025a73c1b9f7750f2013b61126a0f4d1cce1181c27354da901dbf83ffbaf27fe81d85ec93b97188ed8850a6c8303a14e1bbf1c0ee0d1cb4bf7b6b36bb28e0b5f9289c2c788e3a8bc50d50a6c03d0e4c3b75c8678342cf7b671a09dbf7165f8e1e7b063acbfc5bd35960e30221611d9f80bcf3038c0a787225fd3038f080f48031ce7039b86d31eb7aa4a9b701f9d44a3af9d1cf45c6d71b6d8e42b9633c8d1d546b5a486e7f9ae9e24d46f0ffbc6f6c7083889471c85ddf70a03283760eea35a0307f006720525967a16bd9967a1ef8a1fbcb4593b6c9030116fd583635b44ac308128c22ea6fe0f5acb1465124e001bba8191edd183194289f5c52c33ac4967f92b9967a2d202f76c1f2d5b9f978651b0d8dc755b5302d8670865cf3cb69c9e478b4d5bc670e551e0e4119a3781d5128be2546c9e018f0e6e40d8b7f734c2857d4d2190caabcf10df0164d08e3ec8625f73c69176fed57364bbd0d309251c9ccbe1e766cf30861b19829586ca16f36cdbd78f26aabb837607d1dc621140934713460a162eae3999113ed960096c050c9462bf68ee3da9beed52cabf72408eb85ff08b720281aafe234970a8b76cda24cead1605c8b8c8d3349cb41ec9562b6222d7976452995b9782865b86e96312bc8baf9998842a6d7ae2e6712cd9204e6a0eeed08995992c0f0487b648677e1d53ea3515a8fa90f7fb0216de20e8e6e9f57434bc0c818c92ccc2e13dcdafaf4052d66a5c6e48790e521ffa50b24be82d3685b00bd58231fa50a4984a577349d83ec93079bcc7d32c08bddf0e719fbc79895b22558de3a91a7c59bdfad8c4d24e4a5583d9464b30d388cfab0a3183bdf89985f916535cd151e9bcaac6cf31f27cd51b0132845a316845df20ec1b5df0ca2e1ba53f2c43ac40dd304a568f19953a0c1f867b1448f64838c3511820f5e710aa98a2f69afb504cab7fa786bf0bde2f1af52fcb7743632a23a5b66c4c0ce6f1f3c2ccbd6bf08b11cda48e69c154e9d47c15398d234dff854c87972dfbaf4a97e56a5e490020b81432add31d90e9fde15a359217d8745b133b3bf3e10d07697c4c915114e4709626722535fafd76e6081637cc17525681ef8fe6582d2bad4e2b8052c834c41f8e614219c95a33dd688d4b364aa43bb2a8a0623f777a200d4a98a18429a2a5a356cab4b7c3b2241d8058c830a118d0776d875332e855b8d845c9ca85307b4de1d9402411bf1a0e05aacd8fb9c4a8dead1f30e75d648617424e63c44599763aa7035174605344ef88fb06769f4f485fdf3b8d00e6aebae784d4ac8f72c24a036b3b7104cba00bcad7edfb1e4159cdd3d8b10e1efd23563ca6ef9461196a7d5649959fb545a59e297f60d75d00280364a2408229cf177f93f6b8fbab62a082a0c2cc269a1642f68bf11d02f0b264976bcd5528a1bfa4074265ab68b1c575e96cc3ace7a88797aeaf5261b0ba785f4faf9b2f327aa05afea5e7d576a64c9fabe20a3fce15d8ea80c5a4351d35bd2dd0e2a4a43567f1c097390e075c662d968b87a1c3e29aaa74eb9a6163ec92012d51a96bd008a3e16efeb29dcb11c93217305eb00f6ac59a91960535b822edde1e5e7b12ec164f1a65c6ee87a2593da49c6096ead7b50a4c866a9083904f4e94a0d6886b8a00df3466c7b64eb2902da456241c48a237ddeb9364f35201221ba86ca39c9fe4808f5508f1680040a261d128949eccd6a0380d559a7ae170bdd39025e36873ef5cc9a864aa8334bb50d10803fd7f5c63b3fc31d6317cd4681b61e45c2f89e499d37d424344017d77fd0bc1eac4d394f7ae76cb8be61f72c0c4aa2ddc9605910346c676a440d86b9083434c03768119d5a520b61f8081e5858a526ce37ab7f52c1c59aef26779b36416afb3ac36cd1e1478915a372e034cdba610a1c7610affaf3e300876ddb017c1ec01bb0c049bb0ed432b34f54a8fd523d1fea8848969d5b02e23c4b232a8268c74ebc591db4375f516337d8cba9e526a371f300386467d0a51854f997d66e824d5432263d1fdbd2108a1d6a5658229a86f30afca70d9631b56d5ca1a1b29df8b72601675bd659c07ea1312b6e904942a21d14c8abb96b41317702dbee9692143d762057fc888e9bdbc9cc4b5cb3e79c64ee8a0b810938fef5d0b011cdfbd5fbab1d76cfeae85e04f9b887f5ad46758da810a8c503423feefc651824a2bc1fe3060e8055a6192d1bfc74c6899a5daf93fef91d12f50c5420dfd0d10f568ba816532d33648d1476a6cd2dcfbff53b91e541e4f9bbbc0ef42bc0ae82cc9ebd7dea300ee6de1de7318f2b17fb6fed5055ffc430e4f88b50682080caf3c10007c3559e806bad12d0886b786018195166ce9846884600913b035019e3a29025d27f2f319deefcceac033b3431b8f49fa7ee29b6dfa2eced5100e944e9dd1a3060f2f924e73a6e6f23d4e2861a2955adc07bdd9d9f871502fd4435772f94a970b3066b626f5bda72902ad5f0cc6be7ae0b4b295706392109af0c1fe67fe52e2e053f93b6f53d5e8eeb25fc52e24ff97ba71b3c9fa6ae45baf77ea07acf182c6a46b80a4a0a3e1689773f9121c6f32110f8f1650d28a02860a3b066d5b021bddaedf8a524c7b1a116f7b58717ecd5afbd6eaf1ed960de901fe6bfe7b7802182b4b109e248bc80d09313fd3c43c6404f3cedef94fab99bdfe46ea098e4c4168d009cfb838215951f15c475f5d2e6478157bf4e1510e85c98832feac05a6725e8f7864eb2cdf30e00b318cf45668bee41dc7ab5e214294af11355e729e120de2b4b8ba01afbb2d0684d2b8bda823127c2742f51d3cc998ee55e45b60cebd45dff0e0871b5ad3d6f9f71040376143a35a043621cbedbbe92b04155f20c316f3a4846b069cb90c3a2559eded7dc5f6745a7bb467bcefe5b15dedc58eb7e51294995468babe80068aeca0ff922064dd4e95672afe5978d8c71df85742df558e888e2d744d2ffcd01fcc2a9889d91888e08bb0ded039170c3c3f719930578b4cb0a031e9ef0b5f7b594403467d3f0a8271934964c20f0de67be803c17ecd4ca8e846be89ffbd0481ca27d76b2a4ed1d7af79de0d6fc53ff2b9132e159cd0c8b9145d691ecd6f6c037ab49335260ac1f72b0dc49e543c8baaa4805d7061a3398374e8c7b9a00e191e7b7d2d9d97d6021251f193e2f841b03d5cb8385d06afcd76a8d0df43384c5651c59e640296ddb8ac7bc2a57fbfa028aa0739c13fdae4e07689c35582faab9e3935596f37975ca3febb31e92e14700718c3990c225c4f598e72449c2c37ad5f4116a35f0330960f374b2d85fd6ad045af70bdebed2612f139923bb074aaedeac0f6f95b0416dfb34ecfad729fa15bab08248b030a841a7e59409cd1360791e7a8662800b870566342397e40615c999f390da6b31194a703ec42183a8e4f3717c77de90ebfe85a31bef7bea5ed2fb0ef8019e4b3cc50ae006a9be7d2d95d74e500bfa71ab073aae3e56d77f7cade32c99464b707dc07d107afd2a4d9851010e48a8532225cd36b87fef9c87fb8c85724336797992f717e28af1a0911121f096e306005f2a79d7ca1052b5d80105ecf43d20508a3fb6150bb8c46be43769d9d20f6e7952e3eb0dce9211f78dcd979885dace721eba1d1431eb2b534e79c52ded01fec3fda46d2e0976f80dbf7f4827a674781b8d82e5a318586d111b4421baa718fbd0deeb1e7c7b0d7ba1b3c68bf3d96f91b3cf8e001fbec39ee7380e6ecf4b4566a58a008459ef4f61ab6bd564306bf0d4d06771fc03efb106021d07eeb2848c3f991c1bf7d0e503f25cd8f0cee647c80e4b3b7419275377c706723fbadbbc143e6b9cfecdfe0c1070fdb674f42f239401bbb21d9945c619f5596071f36b8cf3c0fd96fcf03f799eff936b6cfde4646c6ec3eb07df621d8ba10643a393b5c47bf0d8a9668090ad6a3e027d21105e747fb06d14f4a10b6a1a2f9d9be33191eb8e1c306f6dadfd83a393bd786d6ddc83aac939e0516570be9f12da4c8349c08e3d005154e66e86bbd7671b4f6cc589925581437350708385a39b13891216eff8f540baa0827c260cd717549b8f2d17da421fd414797df63688882b4857e74c7e5f79652d66aad46c33d457e14140ee75fa3f191384753bcc13f9c010c2a900f14141f89a34fc8651a0a729bc78dc73c613d4fb9fbc8437e0b05db93039b09d31d9ea2f5d4fcccc9856a8a291dab298ee338562d8acccab5cf5dfbb4921644dba1a289b45003a2811acbe5f7eeeeeebf4a7206b326ced7a1a7383ff3f903196876576976f82b12aca77d97b52f43632ac94fa791a6f80bbf0b7194189322d252ca4986cb9fd937bbd3dd457eacf2244376bbf393c87a1ef2d0fcf8113eaa4c849eb83e0a623d3f8dfcd422498a6d759bd212a5b444456a8406690aa4a9e9364ddda630b7e9e9367db9fd945b32fda6d682427d28bf9ea35a98d947281d1c2567b814e4873e812a394acee8928ba4a5f670b7a915540ab7dfa353dca6abdb74e4c2cad9a94eb0b4761b9220ac474b4fbfda69614b127602b4249920126f8f4af3436bb5d60ac17a34bc7d67474b46686907b73dac47bfdb4f6d40697081909e1c482a84fc98064d611cfa5b0cb7db57455c4749e799e1af26ebd1d295265af2509e38c9c51f34c57bdcfe76213414e4760359dd76256ed3944b4bb4c4366c2b6f6e0bb25b4a29533d7be35daa943ce166feae82f5ae544acef0cb57bafc400852ca6eac2fcf6b8b39e75cf9c85b66cc34324717398b875ce5f24f664e7e76b5ed3dfdec2129ced55c59447023a7a23b152d90c5085b22bab23e6b858e56cae5f7165bba5d9c1f17893b64d745cfef41c80f950245a1449e593ea45584cbd6112e5b515c7eeb06f2e3a72fc80f15511839a33541b03eb07670d99ac1657a864bc570f9bba3a88c184ea8cb6fb5582afda12498feb8383b627b482c96cb6fad583bac141a43c58cc95292383f54a4d1745ea5a4cb1a6b5d2211cca76237edb67e6e58d0ef32fae59d0ed31c8691d11d154ba2607dd5b9d89ccc683d2ad20113ae10d2d303e929427e3c9c1d11d3f0208c8317818a42242e4f39a3af48cee0cb926711d9e1e7a21ea13a2e8bf22413c47ad4452aba4a7336a1911b6416b9fc9e6267cce59f5a5cf620978a547411372ae101774d691fb5b7dc6e96522b912d9737d9b57eb02d35b7ab3c6939c5f7c25c8dcc12ac37479e23fb117e6dca98f33a5d637b52fa53552f2f282686f05f42da23a56062c8e54b5c0d41c7f5ae181291299b378d6577e6a539f216b1fd5a8b56113b45d9dd39a6aa8865c934b096e6c89b415da7f65cdcbd5e2e0b097239c875ba5046b84e9925d8d314278c569281ef3ab5c76346c3ed2e461516c695529088dc0190c15a55982f89740f2f1c0ed8870be3f2a614ae24d1b21b38dc4495d8f72cf800035cf9d26bc0952fbdcd95af611a4cc3eababe19ac4a898387c476927b1dda96bce4d8921e8c2b5f566b3d3024a7dff313393b3136afe47a1a18d22300c9e937919c7e18d7d3f4f5b6929737d3c819f2b634e9d01e9212ee68c8eb15200024575e9e172fdfa33fcc9f2afe29680ff7fd27a0df3f02ebfb3320694889c3f5fd25d8800e72867d4f6a21afb84eb8fd62dbbea493b3c3249bcc4600bd006dc38f558e8779269dcbefcd292ebf8b70f0a56da1eaa83aaa0eeb16b1365cb25e56edd86abce36e8af2a4a76a7642791206cb8f79d5ab252e96057cdf446333fc91a07e0410e0f64ba6313db4bb4180911c79677783b09238c8eb790db6eeec480c067ad1ebadee869d9d860189c716d6e3dcbf3616886e2488bd43c1ec88dc8d009ad3cf59c077fb456082fe3809023f08f50f84b89e14adb45c4f0eb9ddefec40d0a80f1bfed4676732c839084ddee0d90ba469922301f6b5bb913df60c03928dfa5977a33930d8fe666e5992f1647025b6a90fba3612c49be638e06f7528a01d73f1da5535adf655350290f2c4fb8b811b9ea383076c9460012875c69875629d1580bde1dffbd5184c2a2ad0c81c452396961913124b2a2230aab95acd18d36b5e525f867679735535adbe87295f7b6ab8fd3e9a9ffee140fa23bb709597dbefa2a96d326003d188c5e3f9e9f6730f6ebb1431bada57eeca4ae6678f82fada7bb576727ac9fc7e1959f5d02646736464dd0e7db394561541a4082235a040a03f299b0b11a58fe4c26585e56675863ca53dcc83dbef9a6f9313803ce1a79fbdd6f1c0bed69e13eb3ce42157c9defa8d07f65a7d0d6458e7dde9a741388ebaba90018d9910b945ac67229aa49ad32f482f46d6aba16b60afb7deab41a4894e2f7e90b2eb3ab5975159dd0bd215ac679232496554262f48a28caa065146558328a33a852c76bd8cbf97d13180913c7941b2c260bd397e477a417225ac67927a4132314999a436224a72054a6c16666ee76ed9c6f9a9d55acd481a4923c9034eb282ad55249550a3b812c5c6c6e0eece52cad56ad5b29a1f0741bb04286a2a2867b40f213fb487ecf46319154ca5c0a82c18b50546512b4cb1a22e4fd090867609d05732fcd0151ace0f5330a4a53074410633f8ca8725ec753d0741db623d47adc295cf1d1a12494818d64c1236150d290d698a12f9d1b4a587dce67e81f1a2c46a188c17d696683456e3703014e69e355c8f8638343f315e6ab6e4058c189dc3404179c1e194fcdb2eece4eca830d5b5a243bbcac5fec10d5442a01b38e4aa085308817c587f03c746c50e4220ed716c50180204f9a8efd9316cfae3b6a540443960120d7b60a58b1138b81e0d2bbf8339c893dee866d62758cdec70ecec88acc6f477e0e7deb91a4c3f733d6fb227a1dc06c33eeb64f0f365eaa1b7505247c3e6d48e8e3a0a5a1b796d12d6a394d3c06ca9c15940c809c116faf4d20e0228145ca121257561fb7a34d480f461275783051ee610de5173421aae7250390ebeac92268c4a42c21f234b29254b9652327b3747231e0a79881261ad6f1087628c34671c6ba86a21f291fb0835a4e5c4129a5e48406ebf8f46da388ea37134ba8b9aea2fafd1383fb5cba4c18edae3612ab75fce089986bf300e51dc4aa1b8fdd2a3449874892a5c4ca53de3fc788f3d4acd8f1f919dfe5410e368dc01ca93d24ba9f472e9888e2a26d2be0cca7a73d421e7e841ccf1ada9a9cccd19bcdc39ceb9aa9a355a96252d29a5e56f6dacafcdb12c4d0aa98e75c442ec0796828db01006622dd887ed60296518862f1d4e51280a45f47a2ea2948e1c8d8bea913a8a44d8113024dc7ecc0767909f6a9a9d4dcee022f8180541b3037b03133603509e68158673b17555c5e6c460dffc741d41d71184d86204f2ea28dc04e0cfeff25347f3f24d0577708d612c54c7e654538d698f57eb8885da93827d2a4c8385587b651460c0c2f5eaad638f8c4315cd4f75919dfe2942295851aa2679d25fc76aaae36d4dada3c692323d489672cac9cc73f2026ef09fd77aba8279e76f97c3c9dddd30ddcdcda0041dd468acd556dc2b07e747823428281c8e051dd5dde027aa40831408471686201f3c3b2ee4877efe83a5a3e434a2a7d9b1f8a9c73cb81206eb51d1faee4a7ba6383ff5fbe96a7ee87747c5f9a9b493c1dd155d832ddc470e360dac47433983f6d31ef243359a92925082c4011cb9ba1df8ad7701bd9d83205f9982f50ec8d0d08006d73b8f8e2cbf3d1e9591017af9e9e58e43397708d9e93fe2f63be88d726114c14519ae23d68b718d56918b0c171926382778f21716d3caa82424c452580a4b6129cd2e614bae87a5ac9b92339af9454dbd80b05e0d61291bbc0aeb3908824bd817d7c35256c68b410d35c7c3520e56f136966a4e6741acb0d929c352b73f1363bdcc74fb335467a86b79d85a4476fab9b8fd476ebf8e2a56f1f6830e3a98adb01e6a18cdcdca42ca6eae9a236a2acfcec839ce51c60ed79d8f5dee7a73cc6cb8b3d348d407b655a3469a59d8694356bbde1c4180814848be172992ef45aa86118c9c915d5a9f609be004190579f229c88f87ae0afd8a392747e37c7d66a89f586818a42f2be4c0a57b73c8de216ef1864272d8447a1c0a1f72797e5c09b2e356480e09892be172d536377078172513487b1c578a04f2d1afd56ad9553464f5b0977f76036da3db867503484178d9307a3dbf8fda43bf0357c743ebae972067e90ecbb89eefd5f90815a2a16e1a6a0f0f2101e90f8a48a53dd28525c8651fad5ca61f1d4d11cb161c4262c41eafc25c2ef13b4b85694f3f7f370db1eac8e5e71f441aa2a1519d56474644ad14a556eafaae1d16910e592a6bbc542cd13272fb294b2965ec905dbaaa2ba65058b75058a629cde168e84ace68cb922b2b75f9405a67901f2f5957901f4dce983508d687bc8aa0d981bdc135038d182e687dc1ea42b582b5de9960adf7bc246787350b85add7a32bba32b2aa2b0b85a5efd115e831b79fc248f1da60a5accf09eb5925ab346bb5d66282f5ac9497da235da0a0c5edb786584498865396e634a54356a9f9b1a0b56a2323d781f9cd3838a54c3c31b252d44add1da2e6a43427d41c95dbcf56ca4a854499294418cadd9da594222a7a612a9a1f2f79898abc242a75f6d87bd8080bd29ca64032f6eb1b79315af20e3b61be327968e468bc2484b52eaf3c6c74a5c93486db4f4dede13f512194312080e122213d3cb011d370184c09f971945f011ba58830bd546a5fcd0f0d820eb13a62d56345451a96b0392d2179f2390a6665870f3ec250dbcae9d49e4e7911d29d22723ab16c8d3ce9fa045b4373633d6f5cc8c9eafc5412054b3b0f7dd49cccd8df83091bf2d1a97be37eb2629c080d0d518d5445746626919cf432c771b43d52cab9cf51cef8b815768eae43ced082fcb8687652ede1c2234528893b3f623d1791f8c0e72673ab102b418d444a174d30854017f01ed673d165ce7f6eb2d4903f62ff75983a346feac77f74a7bf532ab6a175d1fc3813b2d3ff447599e23a29487fca539eb24dc04220787a6131ad8c4a42c21f20283bbe9a9fab7390e47abe3232e7ca411ae2717b76be92c2f24511e15028c2082424d370218cc31140aa843b95b46706353fce457fff0fb71f058277c75cf53ba9b9b81df435feebba2ecbb2b04ccbacccb2fa7a6cd68d9702b99a62c7cccc3ce7b451d89ed7368560fb22d21effc93f55dc0ab84b8a58ab9ba306e678e97cdecc3979724b645d8821b32887012ddbec12566b294f5809fb62a294d2d108ec1df2e4c5a218a6041636e73125dc0a12d3654913568ac2ed77eeb070f45120787848cff571151d310d8f71151dd151bdace78bd900881c08213f34343b4c83ae70d7a3a14f86ae877d5d528524ef418c4f1aa22b211aa22b25ccc41b164a8c1c70a54b12307703bd7a931812812b5d92601925b1a3bbd2a5c7ea6ee37644ceb0be3f0669e3388edb388ee3389fdbc693b36f767a2b42725af256044cf6cd8f53213bfd5e645281917edcc83cc967a50c48b5fedaf870bd75bf5edacd8d1ca0ebad8d97e35a7f5d9d0fd7f3c63baff210baf37598d75fb5762dd98fdb9f85cd8159a934221bce0a8b01690e368e77a3a9b894c5c4395dcef95c12c02f0910d4aaa5d29cee3c4da8393d95b07fbd2d55c3952e3ee0e07af6a6e6e7fa0d7c0e4a0e5e8ceb69a91e7603b5d4ecf4bf771ecaecbc1c4abaf8a2b875a5b7517366a8607b3c8c745358e7d5d47b1aeebc67e1b4dcfe4d4b5deec7edd7b42758d2fc6c5c4af5b65123619dc7edb8cdad6850b0b40c7605bcad34a72f202567c372a1cbccdd16b3c1c8c26e23006861b5980d1c723770035d422157bab4946e01ae74095b6ef6cdcf16c3a5886e3f0e4e5218f149f183172988285176154ec4d285d772cbc2c02a6c4dd521477c1ce8991fe2543851103f951c88f3e46a493bbd34a7c7f450f548b1c7a5dc7e1edf83aee7a75746a1052cae766db695ee30771bd89ce62e83b27cb9100d9eb81ef7dd760957ee36863b6eff16c37d9c4a3777db116e831105eb655f78c78bdb6008b1de067e2f896ce34a7f248804c6cea7fd95ab31b36f7eb020dde917525fec90b6b2eff6675f7bf8ad0d068403d69708b12657bafc0085cb1890e6f4db5081580f9ba20629171be70763e916717e301153690eb60323cd4f5555d1ae34a4fba9b6f1a6b85ceeb6cdc57adb665a6d1bbbc9c698d41360064fa5be1d4ec4873033b36ce6176666beb82d6b9c9f3aa43b0c43e48652f2c48a94944e92cd043393524e620c89d0e8323733333333f36c905b48325cb59ae77cf3f3a22ba9d55abb6934da7ff699fc335dc182982874f9e90f2129286770c54a2e269a1fbe44971f0b61298d7dbdf18fa4fb329dfb0ff273f66f84f1959b4efcd910736de66889bce21e5dbe350182a71716d3caa82424fc0182231ee09c9a4aa2c37a58c8fa15b80229490889240404455812b61f4896924acacca552a9343f3e1a9546a512e9d61f13b0328a5074e95b234ae9eaed74facccccc17bd38775e9b15b05dc2c2b89e8f463ae4a79e2416fe119a216c10f5f443146aada26641562fdceeb6b8fd3466fec7bf39d76b418ecbc13697d501fa562704cb9e97847432eaa9395dc285c6be3a8ea252ad6cb72634510459a61198b9fa56e6386573775b16a7d828ba042330d26da6ddf2a2c4f20b0062c020c97000e862d40ac35a128d0675053b42f5c85e5e0f46b1d1ecfa226c0706b6673ee360917cbfe84a3adb791a922e7344e5baad7367f60bd436be63e3a2946984b20823798ecc37115b8d63f82325a6bbbb9f626188bd60e1fcf86824676428d4fcd45a2b8642b5f4070b61426e63416e63406e877eec90b2b91d321e5d8f85349ec542b71d0b2f4b7b8c1761adaaaa5be082f442d5a2aa54b58b4bdf473e923398623d3026b0275c382c94275868d171e415a7450deaaa050585c3f9d768acadb5566b359a7f0e0705c54925ba23055e4a612e20ec849140587fcd512f97554cda46868dfada6bdd8df0c667418408ba81830405921d011cb3082650fd1c20fa4d61f29110162ad00d1c191a46201ffd377054c004f2613d8e468338ce18af8295cdf932d0b747b74560d667595f2908dd4155a82804424196cb6fc9a65ff70ba97442c9eee6a4c456b01d2addb14cb07c3d47592d28281c0e4943ca24cb2a20a1851308875b710255fe419e30f65961a53ca1ff5d7efacd5a5dec8df7fd19f63a4c19d6f3b51eab9dd5cd113463baf37df388ece858d110fd60e847bf119d991e76748729223f5ababbfb3d0cfda3d49d524aa97f9e12f2904824121961e75b545409f9d79c6efe986229974a324b29f92b4b13b248817064529c403e98375ec5385aa0260adb89f80f47b5b0b7733b9d9d8b98f6901d7e264a46ec90c913feed0aebcd718ea1aec07c0fc3b0c77ed946966859d9bb08b2b81198eeee7e2b6366abb5382872d75d1c633a14a25996dd9075679c6d366b73939f86901feefbb5f723ee679dd6895ce72192acf348e618ace7a653738a7031e66007d188f59c546a4eb684cdb2ec2dcdb2322d47965d9b5dc2721a6f5e09aea5bd6b9de7a6e6f8497bcf4d41b4ce4fdb660064b0d96bbfbd767135b62d7be634c069b859a93d1a4d6a4eca365eca3eebbce4225fc6ac1216dba4e086eb0e22955ca4a2b88db48e81056e9eec4edcf6509bdf4cd184a1c8091aaa717d7d154d020b5709e9f125a46708e34004f984d054a3b0529e58ef39d5f1832a08d510aa504893a23264644193d76048188a3418151758a448912cb2b87a90c54664923249d9f0d9b0c384880da1db6f32c4446532daa062229a18a119554695516554afd18df5d8c686acd6524ad94d231768af1e58e76a4c3ae96b4cb58c4ace689a510dc074fb5126abdb6f926acfc52629132226a209cced3751ddc6b0f6c1d2d76162d8d38dc990e6042b27b455c4ce5516aca769e135ce0ebf268ea22692a85823e205eab66ba076d25e34965ed1465a4913a285da8fdbef607b1c740dbc50de7956fb1312ac066a20bf40f5e50487ba8c89738a1998b16046388361cebecbd9ca656cbc9ca55c6eee97e983e470888afc6b0ee683f43810241d10b6af958f2e206a91aa05c9e1e7310d974f15c882184610fd1c208d6e648480a66a6976b8a2668759e462fbe79c734e0e73d10585f5b0101602356eadfa5409d6c3444c6c8f740143eaf2672a4c03a63fd9b38719b98cc55c7e2f4b611ce65fe3fc641da64376f86be7613f5cbeb0202c36c4e5c742f2845fbc4cd67311263663224f8bdb820c80ca8636b42922f647db164bb2273bc4966c905aadd568fe399c17bf359c9f3986ff359c63a83ef6589d366c8f75d910b361c52cc986cdb16125b11502d6900856ceceace168c316da30dcb6603d3bbafdf57a5b78fbed88a574db86b6a539f687250db19554c3e690d8c0cad9e11028b2a10d6d68435e0540c59db6d9c4756713d543af5830b6855f54898ab93401735dd0596bf21d01f70006b8ddf58dc75c675e4cbb91cc18579670b409cb3f6b48f6e7af55d46de3a6e0992d2c07e14cd647adcf2a5941ac1d4c62d165067219bc4c65778f66e7a5d60b08abf1a4a3f99955f3cfe1cc150feba29d0c1bd70d186313a38f7e1cad43045d9f03a459dddddda26f234193e3917d06653deb63427ee8c8325d7ec2fa2c1539835eb64874343fd657e9e8a33f803db86c89b2979c075cccf8e926bb17107b45613d2fc2e154690e8bbee65c461059dffc30a83bebb3bef648fad8d7d761caa07f599d0cdad11165b1accf4447d6677dd7b2be5e7126f7121f68f2068f8ec01bec0035841316d4ea392fd29c200f86e841b5d51be60266762d5189b0b9b4d260fdd49ee9298ddbb81958e6ae093b6dd57055689e425206da83c5aec88eb09ee790148bf919e9b11282b8871b984ab2a9d0a3082a50db60940610e481020b14e8c60c296248201c5c0e8e08635c7e49335e8eebf971041148561f16e041c408925f9946bb3471bafc020f06973b17ccebf284df7be8e1921cb1389a67125a3599ae7741bdd87b7d2d4d4ac97540fb6debb4b999779a6a0abb70f0e800ba20af8ead0bc88b95ae37b3b719b67941bdd74fd3fccc54ca3453a62b65df6a52f2e422d569f5c856b3344b72069940a669a626cc3ccd97db2f2f66d6a0501a45524754844038780c4288201ff37380bc56310a4aa7ec73967575da079490f9ee6e142a8fe06accc6b81afeb3fed5611b191a0adf0cca9a7adb1a35274fde6c604fd2dd2079ec35924d875d7fb3d33dba8080a32cf3bcb9196f025cb6b92e6a836b930229de4b0552bc2cdef9940a49dc79758d9a256bbd374bb3344b93fa0b1710ac3b64a4b09e8320088a191486612d6eca90b0af39a4f9e1c00c89cb90b80ce9f667bef9e14ab3d35f355e9252343f6e32611ff635478421224ffa839c6a9b325f0fd6c344d7e3655256dae371a5517bbc6dcca4b42763b2fd1b1aac877d5c89992bddff76930913b1c0af878930956de4400e09d9058e082f704548ce08e9e13f03078e1c388954b19ff341c8585d6e19ea126e9b41a6417a58235fb89ae4490d524f990ffb2a262aa59a3328d728a594d2d7e866aa8a88aca504eb49f17635642d89419f7653d59c6601cb1379d28f0202c954b5e9d6f6b047bafc60fe4d8ee626826be101d60907380f05542f743030705ef4b049a2005010a0d68ddb410d0e04003387c89f3a215757c6d86a15b24d76e5a8e0cc96599164365116b240f0f462b198ac9155b28458a1f58344a2244aa22f94dd8a91a16fe42c6125cd8fd76aad46f3cfe14c14140f641f9a1f064921493dee8fdbbe91973a213fd6c80a9370db22494145f2a49f44a5b0403aa261e8ebba916103fb8a7537b2901024108e4b04f9f0cf3a1f6707740119fd88fc786a764639833541d81f525407d89c5eb146cdf12cd002ad517b249802575898065bf447739a020149e0fc78c9024b6029864a22d7297599a24402491678639a63c4022d90c7d09506a013461328a5b4994eabad49329b7a6885ed4ddf306c161d31e59c3d5b4af98282c2e13cc949a5d2a925c8ba28a575353f56f79fd58a595b351aab7a807eb353e95b4fa728766f5a68a29aaaa96f472512aaaa3a622a55ac46b4203f354c7d8fe9b86daa47c2ca4558e4f612f2533f27444900a588c2ed2f59d94f19725353bc2151534537555315aca99ae22aba8ed8405b79c94ba2110fe240dc9482f1d34bc9457e34cc6cc56593924b3d88212e77a292c84b5eead56505e6ee9e1ba719f8589a23b9ab2a2b8acd74dbd9e90eaad2ddddef52a552a924ea2508f9f123dc35b5dc90c6482d06196c7fcae7b9e9b6a7a58b114126a8dfa33bc0ebc5b81efda653e1a9e670483e8545794427d21c517bb87355f3b0aada55842293f659f3b01ff6243cb0cdc37a3eaa7f49fe022c55df867ed7cadef2b07715b7a9f55d40ddd49eec5bcb324bc3dee34f330ba3f5db6db89eab4435341923a5946f55312cae3677c1865687fee6d876335925845cba7357554b29a564d933f8e589ddeaea4f409e504076fa8544f1f32301d9e977f170b8fd33872b6cf3cc81abc2cecf21075a639abbbbbbbbbb9bbbb9bbbbfba59bfdbf49d2a2408a09647d0ed0ec48dc61b779f6f4d5ec5827d8f6808bb3d35fc204ebef62735630cde99829ac874880b072763a1386d54684266fb0645856cf39e79c73ce39dfea3979cee91da248a8248e5407450bd58800004000002315000028100a874402a168442c4b8afb14800c7788448250a10a644990c2300c52ca10631c3100040060448066340a0280c7932054502e9c53bf2005f3f61a83cf1d9a062621cbc7dbb7ef09e3ec809cc1dec87e692b5094c0481f981b0f1c452ef0380461b1dd1ee04993023067948ee0663181101e7b5d9b09e33b55f7e15be30ddaa81759d2713b1dfdbc0f50dc30932582f06cac59ed6205eafdeb8b31ecb2800a526f42d309cb80d0c90fb3db22242d2df4dba7977c9ffdb1a427554cc580b4ce99f244be8fa45e8ac58e5a91d5a6c0cb5b43d9a4042e9749c8d7bef6a2ba5398044c0a28ea75b154eabb8e528487c3c24491a9d9b754aa1b279125286cbdae3e5ed85fa45ec48d630881d3f9afab62744ea6b7b330557dc53a2a5a520d995a812de4b8ec71f1098b80b110435c9e0e6f64832f0ce81e39b4545dfa2a0f3137e6219741c24933fd8a2e4c997186ca730f9bb5003af5bff8ed23746488156ef214a25c74791750ac3459b5d25a247f412ba46ea244305447ec6ec1fa75ee58915a50bc0208ee884dd709a9db262792cc455aa38e1c382a2bdc4ffbd74667bd07573bb928e2e459bf30d49e0e10464ebc074b1e1aa4bb01fef825884c5a8f171fae7ea9bbf88c26426a0bfaeb832166e18babb2bde5013b0a2782e986b98ce37523e8585f362841dff01085944994b14af8e62a4c5ac13945b63076e32b9f84e43a6a1b5be880c63d889f7f1f2022646a7598ebf08361d1381143a3c5e2319a11335c052798c67fd7e5856e62c9e666ff8714900909df056aa33cabc84a1cd53900eeb50f70e8c93fd0f692acdc7f1d2f4735934e8b027defa87aa68abe9bf59c0e886cdf0fa1552527301ef5102a1ad32813c8d6c3969568a91fb1d5db71d4ce6d6607c86771b13f6bf37f79306013a280dc701d7663971ac81e7306247e3a70a833edae80d5f78e9aefbe29d10b7e982e62b1b4761fe1a7f8e04b897e23e59c1c0ceba41b79d65da923eda41a2ecfb69badbcb5844a88e2b1fac6e372a866b4ba848b59b7bc8f9be1a48608a48c860b75a957a1cb5ec8681742b8d4597a50f869d0d3a3e0465b69689a4086d472b283dad138a63ef7dea04204ddfa1bcc87fc8b3076680a93cc31d10f0410643de8d820d15a2c5a70f9044353d9f9a00583003da8d034e81298922bb267f589279aa3b0d2333cb532ce42710035df28370adeb68e0e04303eaea1951e4825be4fdb3440ca47054dbb578ddfb186c31719459dfc9fda806b0e0e55b5a5774411463c4243f2f1eed73c8a77a9451ed794bdede391ca92552c877994eae22a39c7e36a9923711a259ef7b589f80b77128f6576938bb5897bbe68b62f4c54e3381b6b67ea850a94fdb8396c0473df04d66de2e93a8a4ad9e39202daf69a9afc72f974c484c2c09fc8662888006fe37286c2f541cdf436149b62a0756040db5a3e29c8c67603426c8f19a332b971811102d2bef48575959c3d73613d17535fc79b28f6695a3e31162a9dfc1a98f785c7b8d38edd3ad6b5be44c4184c01e174a183f269872d8d25bb8da0d54cd684668c5e34fcb8ed6226c66d4370e7e7f4da31a996d868470c7b26130b62a2183af2b678b719e9c697f6c8a3526060b52dd59108e976e24a9bd128a0dfd4ca3d7819dffe740abd0533102cc988f139261ad049d790d67f28a34c9cc655bc69bb793ce750c87cbe1685bc3085b0a0f71dbf3aed5e4a333c2c74d8fcb969cb10fe84c2ec3452119c5aa6281443268bb3172086b9b4e4e904985572c7b9bf72fadcedb01982fd682c3c531e97f4e848f8c14c8c7a8341a2b050b895d4ede4ea9d2c0f49a36f4d8c5714b1b08ea6d254ee3fa1630a2464c6ff817c3a2b13aa3615d6055a4633502f2789b063e32d3edb21f1cecee3f9c252873d81c3a44ff606d6c6d405df2ef5a277da2d37ee7f044c6ed967dc58663f64d974aa40d47bfea7cc0d1e6f4d79379a362ec9e868b5bfcb9c02a7ab74256a94ec8548f5a4baea3785f0996ff65b9f99c55077b7d11b7f921a1368cd9d3cc82321f9c2ab721f270d93ef0ca8082f859d9748894f040896295cbc148fade996cb808954eeeaead31677f5d78286bb60d152b1ed6412a0888c7011eceffe55363df5084a5a850126439bda71206ea3a96a355200f9dac53650d1f9a5e3e12e238f3f5470b41d6fa2867b46c9f1b2e362a7b0e0a2ff445e7019dd4a9f9e5d1b18aa33487e987be0302148817c29ac65c47da17d0786dafafff0d0eacbc503880f0d432d02b682c5cdfb1dd5118714108ac92ed49762c3670ae95ea8ae9f3050e28369b97daa2832be28a815a165c36427d3a262167fc7069d3a9189bf5696a64d1f21332f0d9dc8b473ff9a83072937645f47291f8169f23ddf142e73a86982213caca7cfef6ab801f91d90b7515603e691c7a086e805fc0bf4e1eb3b162b7e5bc65a95121ded129a941cced0757611b6058282105a682b11116da504a61fd9fe3394eec22df8172091ff40060c162942fc41790d9bbd8f47879b4e0588e6415ecb02beb0f43f22d449791eb8b1e657cf3573d6566ef50b1a43863b95e3ae2e2dcfc1b278c8f56d29c5764c9d5b9b9f0e0944c990842986259e6b876a9752b60de1c4d13316afeb897c0b74ea048eb942356e0d46ea50f53d8b6d46e2021c122648fa365c50e628f82a2d880a565f4cc63317bc49581a156d250c7a65473aa1c05c433df64be1a604fdb772bccf6d85b477666620c998ace9da13e24aa12aacae234e10d2622573dedff0fd600525c6b295137c52450f6dac5670051bece81dfe0f989240481d86d8bf916ef17b4b23ea2b52401cfc2c78fca489d717d24a1e6c3ea20b16216795c16dddd471dba6f2c1c90503f68fe7deb8ba973ff439f138cb92ad68ce1299a5182b577c57499934de90080a623819861d5c140f6148a5f2e13f546e60f6154cf837bb8aa02616f66f5ce6064f4d4a35a9e854eeadba012405cba2bcca72348e2b8e599a691fc73641f8df29d3f8d3f94de6d213773e335ce46efd1781fc061064bcecf4a435d6045a383ce8b0a01e784c258f483bfbaf506f42906c8630e27ba41c229958b483d50cc531ef0237c87a55a9d769a597418e400fe7c81dfe96748cf90d5cdfefc591b5bed321c82dd8f6c94869442e7260849941b52af5e5ac4666625cc8343c87daa2a732c1b50852b48992bd7283254ef9f7dd5a4f0a18a053cb29b08db9d02e584c2c33b99961a400c65060770c2dfc7bc29c382e0ac90be7239c37c83d8fd1e5daae09b77ac622939c57cadf356a4f45153199415326eb9ee26c6e6f51cdb7c701fc5018c7c45b12e12b6ea5ef5741e2fd10c82e1f2774e5fbfa303db9228fc1d928cea3c8c77801ff24c271e15a762054842cf5dd623d60b12b0ac9fc7874fa5256fba58ca398e991cecbc74ce8dffb123798772bd14ea427f009ec59ac33cef4d999dca50aa4bd54e8750f54ede3998108a782958c53e99a983596c1ba753bf419ef110f23bf79f289ba54747dc86c8e14e9f06d38d1dd72b70810e25ff2ce136b50bf2890d290ac7af7469b088a68e51c513d6462b2590624217886a685f14bd36aa4ba11d4d0e06ea6b678c27f68fc9d2002f4b9dcd7db065586e4530408b31f09d131204891c3fde482221f385aae35e908f9f1ee501ae162c8c8d0dfe358f3a39d3d922ea54782a028522b6821a7dc76df48c009ed8332c3f9bb799e922679129d851070dbed3f654ed4ba2f8b8066343a6cb207767d8e02d4a90afa9735885ff4f6952c49fb3876ae6306ca50b1ded14dd89ef58aac8412441e94beaecad23704aab68103d2c4c8ee296e33374822668b892b976e9ac62c8dcaf51b06c7f4c29279546df784f527c22a3dd461792269d5c8f7a17ed6e4fa9ed2af9ec15c81d7e3025a178874b121f1e97a6432a63b1301c33bdbf5f965c09d0aed4c3d56e19f61cadc9f1ba395a7b9e3fdf4e0e53639064a8cc017943e84e6d0ef19b7d2288d0df6f64fbd048f0ed13e4e1e5a13169c6f34c15c9239ed6527a1ad2f4b0d898bd8e503ecfbe3ae6abd18684b679594b075b1bdc44b9c4d8845489d010cc7ff8d60262dc210be76d5a2ed192e04859e30a41d0acb4dc488d4456b16fd06a7591ee15ee862ed9c577a2d2e9ecad9d5c836b69440a484ea556c644ff5bef8175c4f067d6601ae00dfa7e2d36d22626608e841e2f9731cc7616b6cd143add933d793efa8873766757407ec74714ef507e50e82464d8c3332dd699526ea11283165f35c87828c2a7d7b8d515de78a281231138740c300bb7a289dc8ef1573a66166877efaae5bdd5b4e4bd23adc2d3071ba9a9792db486b15b2a3f29eb3e4284272829d24b742cc448aa6b60109fa087cc470d71a8d1fe760b3d5d0158c1176718f4f35826461b5491c5609521d1a6320f6693a7fa60dc37bd99705f00e16bea46b063d73abae6975de91d3d49f57cd50eb9329779fda176e75ee74bb5f4c8bab2a25a1c630019d453b1a5c556552e34283b98c9ab295356304bbe4cb97c0de7281828944f06653fecdbdabb21d7e82cec5501cc3239c20e31e258846d09286195969a71bfe0605e172de10aa4dac9c27fdaba4b1128b6080b39520d04fc12da43a0c49ba22b2b221cee21f1ba2bb417935b9bf1b9e7cf297d4692a91ed633adc46549d06c93959d621cd2c6f9d17b32d124b16042ad079ce27a10de7fee524bb80bd904ed8d24bc015f952299ae5e61714de645573f20763fe08ecad1ced315300a39a4e0f1efe216964347a20792390a31f0d9029019346b68b40fcaa35bea6a82eaa21f6075bab80890cf8d400e4b7f5042b2526b58083a94131758adde0cc658ac8b091c18378d81a4ffc56ca5a040c2df74763b7f3847b5ee69d89291710fed33a0a28378381691d6e51fe4aed0ec5e293731a15141d8bc8a8bfe069c5e248c849a340a7f348814b3f3d8cef33174c6b89c1d01789b825e672033474ef380b9688172e282f70186c1b704b40efba1a588fa684a812d891e83398690c0aa2a2a533c77db44c4678537d77612a1a56421fb7e69898605c51c1170112e2b541d275db11a1ce3af90775c95f0729ea791e23e3259b4ebb81aa876e90755b956f22a78e2e7fe8e6acc275aac7c9c251c0cd4d8057061c8c88c9a03493f5c28e80e91a57b11b77cffcd2d4b89b145cf8ca15752a5a2648388a92cbe2083823825101220815a6a9ce5cdcf15e9dcfccd18010213b228c46c01a72f2cc62a58447b40a5a65b5465a2bd6af3e2fe5427322296874fd6e7aded1210c28c72a505a23c6b11ca1e63e79910c5a86ec8c4258463d61868e758ece0b8d392903455e52821c2eb33a1b26728c6e1dcc0d0751f3ff1fc1585792b159e4f164c7c3724ffe547f24e920917758ae503a1a2535c3c939df55aa2412435cd56a7993ee0f79b0b85e86e9458f331c5a919c48f5efdb7548e2aea6c09a67334fefebde102bcf2e17ab8b8e063201de840dc91f3bc70c9ad166a29e544499fea3229253f44f09af95771001e68aef4456031c031288b46a6dea0310dea586951af28aece5ba70667070256128b219a4417746d550e52a09d125f1220de0fbf14c6b72c31da6bc48662c2089ca193d50feda734239abfbf028f9541c1e392fb516895ec43701401034184dcadf9c972366cbd9f00298dfcd03255103a96f3d769493551082ce5e4ee190b4f1c4fe0fccda07c54cbf0cf4e2fb57191358ddcf09a39e3599db2401e43074cee9cc312db3060c50b65e12bd1558d2fc0459241139cc951d92b4bcf9119c4dd0676bec2f720ba6c7f4dcc586c425250c2149e82528ab2139a4fcb67f09b7e8406a3dda7bf89e28117f486c9381ba640d133190bef62c236a2b212049dc569ecea9a7c18ff600eee857eb637173984c962678c660028035d119349992bfc2fdcad5e6adff068b85230d87875a69220db701b7c70fc9aee8b0454168747c3aee4722c993f62a44a5f81088262c9d1f5d0b88547a43769a5d92c535743d1f9a893b5e85fa649d23edc7227ffe4cc379615cc57fbc041676f8809fe88fe7a69bd86692da91489e80c866a1cafc99eb6724fac5db86ee9f4a6868b58fa9fb09307c63d6267e4586caeddd6bd9fbea9dbf464c4ca7a50f8c83855fef853430b15af87019510c2925464fabe8cbb823a9e9462e30343c44f02247ed064170b59612ab0f9f5b3401b923158fb79a4e72f4cf0f330187fcdc4f099d5f76ca67aa5748140511f0642c4f0c9a8f3457b65bbc7c7c95758cce948fe25f450c4f7ed8b5ad4b130c44445b805a755951d72ef8987879c33222d033231dbe57b9442a723b055cbe8706eaad13b8ae4ea8f2cac5035d5f8d962e4bee97b6b0d4f1dc704ca6a5429b02f68b889e36e78ad57db0679e17e0f9ecce49d6a75f1eaf3de7fd9e0d9cfe2422d1b54eeedd9a323b02218749df3ef5de03c1620f8ff141540ad18640b7a063e06dea00c4fe7b9677e6b78ee8ac0e39eb4cd04aa4c75b115c1bc899bca4cd76b7d2de5a78492045bd8ae4e7f449c2ef464eef27c5a121c11f216ea539f5ab73b253ea70bd38256c2b285bff62d54b1f22e025242f32422ffb8bac209a6fe2b8de523d6e68db5809168453a88bf5c70a63a52db8f95464a7068ec6919c32a2688f48d9b5b091a9cd41e445905362154f8ac50d9543c906757be7968c973a6da85a184740b0a0d598e5295948d1547c303145aa33cd8e0235083e5165bcccfe4faaf55d2902054fcac2580dc58183d5dc80bbd21f7b1cea5d01cded894c0c35f57539713e221c7d37e34ce468a78f0785c41bbd711cf497824868450e1dfaff98a4af9e70b5ad08e446a58f63e1b4e3f510d0ca5a4c9fcf6b0c1a370e641c2a1c8986ad63ac7cc72c8d8114baeb5f1b94af02ca1b7b2289af8bebfb5756fd48186143f0f3ba73908e38995b26c68255086d3b4cc4ddbeefbc0e51c075ac57fb1a4f2d7bc31580f9e3dccc23b9061871ed07a1f3436b775fc826c291cb6fc22a2cb1be8daa52903dc689183f7a4a4148052970498874bf237449d2260688e2f839a4c2e323077cc75d56c2ac0a340d0f49921acf0ea905695dcb44fbac700badf74529ca295dc0f3f18e7688291b3edbe5645213de3dc17263b542b2e807e0acd6a2dc40b5ee2844304f4e9ac71d814c58481999a58a47575de4976d986eac463e0188901a44d4f1769c5983839084fa53c0651c831e8f2871894536ea45081a459e0d92122522e38bcd70453c48bab79fe7137e95e24b6d0c7ba7edf1e2c80f497ee369839eec850574d0aa87ec1c24088d5f7ee6a939fdd94073e6b4bd6b3292ae3c4580fb47ef433c5c6db538d460515b6de41577f5c0690e2027c1f246ae4357a27b7e3f8f0e7b0db4ea3f7c286e9c14849ff13b9273314f494b71b02f9367ed3d72bbec0cbf6d5ec404a554dd323246272e16426db9ae9095c750f6b7a52faec1bd3230190e13575730919837b62640dc27e520cf31eed00080c8d1f4df44c44a84929f0ff94a28d2ad646c642170e617572c6b638e18e9dea2955861ca29dbdc224b6078f60fb393da320d5af75d3764c667fcf8f23c2cb56ff699e751e532e77c5c9a70ddc9ef49f7de620a9e42476bb1b8b47071a128ca442d2a46c258114305d0dd5c9a05dcdbb025df615613ee130af9f615a7741dc6d48a571f982c35b4b2ff45300c2288c91fee834538fcc6331a7d0d8fe0eb48d1ff8910521f3635ef664e72b00ace4d4ae5e7384eb7b84b6ff2fc5a57a2e3a8d196b28c0236520cc84c621a15f4018c8521c4d56a45b30d0836df17ece905a52143155fd872806328da1944f6440273583c0f43cdb1d83a6666dcc73b4842de0916adae873a76a86e2695d3910ffcb16ab58b2b88a98fc35743e479ffee2275c025888bd05a6ab61defdc2e6f68268417a14a4d885340cd198b0cec13e8e869e53301583b7912f5b5c06fea5f3a4cf9e533140a8485b17140c1174301753133da51a86539fe46a1724edd05ce3948385e9b80ecf6eb8e52245958b069161197d5c2a5c6596e3498e55cecc723a9f306ff1d14bbe0c41e1a399d2545ba01548880bfe18309671502671e66c62f1a33c5ab067f650fc9c405c6346636ed89133e03dad7e96330185557e8bce471a871f5ef088ee84b4786157069e284dcbc7a56f6ed4da959737ca4c6e998f11c1212c8ee8b16f5ddfad1170704994a19e64c73def64ae671d3424956814f0192afb7793bb941d867b4bdf4d3f56291b7c29366dfa72d37cd506b4bfff0a984423860ffc87909591ca7fa710def943d891a824170b9802e1b8b4b20f0e658595f8f5f77880e2000923e9a3813b200e0e0d65f5e02fd3ff56adaa0e6e8ca19c7667f2fa546cc6249da1e44fd8a3eeb00682158135abd98c44427112dffc027c8612800b32d95a2f8fa9fa6f072ac7e23b8d270f6533f5e816c0cf0968e77856c4888af9e09634ca0f64fb1d599b63fc4cd9787c62f6863579d642815094dbf24ad9404cdbc339d7cadf6b36988af343def6e9e4f4a00377bdf8228f44d1f00e573fd7eaefe17c12b051a42826d0f5706283b2a93e087567e44a85937a7950c41b02fdddb9954b5c7dedcc48853183f3c7d6ef8a5586e574e2d6791b0d55f420acd2572e0ea96e7a4f7c17529730458665b793a90f6d3d49d0d5b951813ab9a2c359f3c43d7cc3ec1d3157e15825fc26ad6edac6aa499b881637734eba8ce23dc27eed681da6d0c787f89ddfa72b3220228142388eceeff2b7eac9d586dae3b245518bb4b37a14a9e536942718bf29194900ffb3dce973bbebb018c86429840d84556a73504de138500c18414b9f0b1e90bef422f5d11924f846af1b9e89906b1ec10361d68d8b4d6676bb22558ddebc2c87e453ea08967d0d0b5eab812c0d33376bb28ce6780fd1b55bc437efe9019aa22056cfc6ca70021e7b160c344409b2c990aad06850d839098d9e6c759609d90e051dbd895cb1160ffcdb8261925a45088b7a8d6c22580f974573b0c984ab505c697fd8070fa78b536ea65410b9138db98f701d90f6874458e5f97e476194b0680e49a4724f305f013bc1908ba7d7302ed01c3effe395bcb706d2189dfd6ed00fbd2de0dda679032b63bc786b2bcecf12040cb1027c8ff6311b8c5f33025a80b2d9659e032bf2465546aeac3f2fa93ca38093b1b2113b5e1afbc40f0367311cbaafd93847d24d0a00fb431cb854b0a6a7a66e94a6e25b8bfd9eedbac48e2b2e09ef6a94ca33d42b5392953e5d635e2bd952c3d2bfef7757ba011df15f7380cb31b318223b6449006595e23204cb6dd3b16935d272d564df49b2fc4f8ee54596fd06727565ee1570593aa3f9454329d6962e44627fe549bccd296150131d17b7406bff15480ad41acc0d61e9d27b94844c34567a6841a4c7077b9279cc6547591a9b8a3d39a0d69d5872daf280d59fecf9e940d9c7d12e32ec52051046a66e74436b57726fff955e839850024f77c8d193862ca460b74c7688651b873962d00ad3a50d45ce53cdba5f9cabce181de0bb44f574d4a7a99e6ab0771aea3242981f4368d15c131526c9603969a3bb2a777aebe2b05bcde535860fca20835b30079ead7b09d3bf66674fc730f978a40a5461345af20fdb9efb0439302402f16ff7dff49eb69f18e84ea2061fc6b58877a8165a6922a8f6750eee686c618f41facb9a36ac517c84be2f82b36425f80f1a26ffd77d24c109739b63457cd3de2ce89096e04e7e2304e7a3427c5ec841eabf419fdafd22622ae49c832d83a40f27ae7db0485dd6599f6f5c9fcf934fe0871345926f8b614c0cfc6c5e678a2293fb03cfe7416100c81aa56e3a11c9acd5bee81119a3416736f73210e9498031a8db72405f0026c2a09ba4d9e49c9aa8d973aaacd2f4aa0d0b77088d06090a74cef71634f1554269d3157bfda94ff6cfab437e676a2e17576a04e66bf1590cb02a5f0e7f963d7625df4d2a8a7c5a28f5aac40824764c174c5da3205e68d36be0c0afc2b628184f50ffc142952ee56bed54216b16ade1c69d2664d971dc091b993e5ec56beaf17cf0fdb7efb9eb233f8e1e39f1f2a6798400140296ec3c1b4b53b93fa6848c32e9534b0c2d72f91b900679e969d56f396bbbeb2e11d0e7a7217c9b83a86e26d021930ea49d9df907da84380f51cd61801331a55f94fa725f4f906b033865e63674691dec255f8e6ea42bcdc8332c86ce6d5f4c2c2d96e7f8e8e9d2b2335368eb2905e8d4f023b6811321b45905f2339951ed7c2eecd306822e155bd8db9636a8d90af5d82658b2411dbe762a058a767b9b0d21e3ba62761cdb9847e903c7bfc215129a5acffcd5b190f1bae8c245ffbf7318ed3b32fabee93d84055fd59f5d9b604b04339a5eebbb30f308c3a4f2d6653f60a5479a13b2a2f7484381a7bf2848355714c78a370bcbb4c0fc01b622363a66238227b03d0dc408140bb8b6f44149e7527311ae500207dc7b23097adb6d03cc5ee5c7f708140d504bc51438da64cc673731af23470ae7cfc3dbc41a24ccdfcaa43df668a7a1ed68d82b2c48cf68f354ede69978b15895e42dc68d0270e5c20facde2d3104dacbcc051222ffa6b82ec4f29bc299552f2ce322c99ddc788e081880cf94cdab68f0203a5457d5062b0e9112b0cc25b82549f2ab0ff261678005291ebf608b93e83d251fb9e7631074c97b4557f53ca5b1f8d4298cba41cec8099827a6dd5c8f9f1181d90b8e69bd520b462ae6ebfa73e712d4dac070d8211d0be05d6e84ee3e5ab7ada98537a9afd701151e94153134d5f7e76b45431c63a72bfddc84e0c289c2ad1951c400689195cc3a338a4ce901608c0cd8526a5c2973172d715083e896c52df0f6c7419dd4cfff461d6f2cb8d6df9f7423697377df78f84a1ef35c1a01952bac3c1686b36c6041adb74fef5c9ee474d1748ac4d3821eeb33935e3fe3b98a65b42b96561effe8f6e7a7ed8cdd74bdf02faf30a414ebf3c4501a9bf2e375750735ab797e6ca9ce550fcd53eeec930e7c9ded4620c07aeceefd85fce80881677685bceb688bf49bcc61515e6533c8ac534cc616a8734d3f6b572ac1417c0fa0a62fc311592bb143c41f0673ccc6c64a79cc686974e5102bf425212676e85c35e40bec86802ed186fe77b5eeb37a2ab1b87eff8d0e9d7a9d8195006bac7786ba1ec7773f6a90f456f8108499d1d3c0dcf36946314ddec2efde3c248e484fda99cf4b3fa87e87c4493291da8743df52c924c894523b3475855b8b220ac1d1ff3c27e3cec4226f60aa313ae436527c75fad2a1e7dd6f04a121b7c2c681f7c9f70ed7cf19aa413a4e6f02f1f19d9cf972942db5f9aecd56d13f7a6db6648fb35e4f45c6d3c648dfbda35ad6c09ed4db19db578922cfdd08c4126a2ceaac3898546d8b1871182a657f7a42ee86dfb19957b82893e5d14b0946b9d5692ed314e3d53f53f88aa49c793ecd721f0e364b445b88b63ec69af54388e5e56c39a01790c2b39349e0e2fe95d039429db0b0ef5bbe7b11643b61ef887567f5c9caf6d5a5388470900bfb68495016e0ed65c6a0e98a0968a0d65fb95d9d02494db6858eeb7b531464ee5bb8da05624bdc043d00b0dc9bd95f76a2ee68a58d15958ed8a85df73585d96670afd4b7ee23797887b435c736421ea8d6811bfe78bc64ed032fee46fed7c552fb48639a1e1e8eb5dc32e82530911f33d14fd0994b413423443c2d94d7ff13ea78f6f499c01cd6bdbd860090a2bd11334c5e7ce9f8ab35fa560a81256824ef38766796aae0f95c48df135b6fc3572c11faa029546389d5349752304b0c08790764433c24c4e3823d9008dd6468889fa406f01828e81bb4aa6bceb7fc8505b5f7c7520ffc91b08985618fdd816387c431014c950e4448d0de443cd4831502cf2656173bbbb667bc14a037cfd05a88ebd9f31e678e38dda0cdf3838099cd462a9fd17af6be9277c6872f047d07efef66b2ea879b3c989548e0a63e0f7faf3959a39a8ad910b755d2fabb8627a743310a720bf32e37ea4d1d0c8b8609ea7c0fd8e79ed084de7926ce0de3480374de83686439284fd513b84cec232a81754a8f8ea8c1a2f825147213978e5ff3c5ab9fbb725f499c455240900593634c3e421581d2e386738de9d2fdbee9451400feccea51f04275ec6a59a59d73b9336ce8fc61e1c5465dae2e339637ffb6a91641260427b98cde0792e819de2917d9d158904fb3f1769e1858813b2037f5a0cea192deb455ecad19dd65d3e3e6b4f877f1d91fe807aa07b8cb71662bf9bb24f65c6faadacd802f6464549973983637a14fed8a74715e60d9dc3d4d67c778cabf50f0327a2a4bf9e9ae2e5fec6810fead6e9ef4c967352aaf69c76cfaa182177cb89b42549d4d6400a3ad0a89abc51b43f5165e88ce0a04cc62be224d3a408390f14ee3cd0019969c74f30b298b15e146ee81f08477d67d027d6f92802a564297ae6b6484d5d08797776a0aa816927681b2e392b45780f3a5375dec6c493523199081752a54fc973868b8f953d39c6294ee3791ad1d8508fd8b1e31fbd5c32089b9f9561a5602f51ce108c12e5688b4787ab62f094af760bcff2372ee856011eb0651a89ecda4d45c4be221b9bde38d7b49700027bce48c460cb398101b0f47d7139e868cf4243d377b8b4518e62a04d9b7548f9f0f938ada9793687ad7cb66d896b68c0907e128623525a8bd68e7059a136f8d2ec7122e65de0d1ad11ed93ae8f76fc70a351237ebcd3d4df3e055d4bb4c4b52d3db5c891540bbabf8e695ef4eb0e113f10fe2b276d32a6cddf16c70fbedcc860e66010d10faf5c5309eaa92c1643c9e21cdf8aeb750566c2b106b382535e9b4f7236ca06ca20eb1c0c415da7df7ca7c6e2346308fe0573002cade0e7b49faa157d9c271ac76816434d32ba6686e516d1366d11e88f03fab9a8210fe11275080fadb8f30dd44149b1663af3d2931fed191b00bec84c4e0ed4d2cf082f075bac830115e9e8c17f7f88260766fb37b839729be6a277fc3203ca8672543dea7484dcf06f8287bdaf5d7a1aa87eb8e1ebe140eadd8df2e2911cd10186213d3acc5c1692a352323037d2889c882d814b010162e095cdc069661a20a5a297229f715749c60b82c9ddd94d381a281a2a2a1621cc083e829ff2798d9ebcb23d99fe197e59be675f369582130bd7a878202100ac20e6d0a7076e80102d42cddac635f3924d03da009091f96bb27fd0dd19b675731a690f6b9a275228d145cba9bffc3bac6674635e0d9b016b8b062dec647dbc0a8340785b720ad03a435e6b0e25b8d445ff0c8ff5d815d5c7ff7de261ac8bbda01e0d83a837f02e8bb25bca6b7c6bd061d20c208b448474c4addc1983312fafe5c32d10b6696acf51bad3a0c3acfc78b289f5268e5668f35b8b6fb9459b951d2343b3b67276cfa3e2b1baa5304b51713162044deb617be95bbad2fb54465e1857f227efa74f4bd529635c2f590ebe0deb10528870d1267dfcaca2477adeff0b734fc2a139383cfe3ab7e94ab04e54036d11f1c532e09888d73f29c1c46ab20c319823614024d377544cebc075d737540beecfc30f77ead54a5e7c9c833f651934eb24aa9037661418f9c074e5bb803f105c5577dc5db00b22023a57334bba66535dac6016529018ae030b2bd9a72ab5d37982dc6e79653a4b3b82b20a08155c268f307c4a7b0b9e91cdd26d61d242f0a02ae68a953c71d0ae662f1301eda8b05873782b1b6ba8ede59160d2b38cdc74639187449f4ebfd936ca32b11b693b4cdcb0358f29b891c206a52e94f3f18d749dd7c555f4c084c1bb888aaae6e15d7428395b91bb9825f45310a0408a43807e5a040187f1c92954464c6118aa557148c2086f2c23f822172ec8ab852821ff726cd3316db3bf25326d547666ba151fd09e147b15311bd49111233ecc0966a4165db0c46d841f61f40438af241daa80905f42fa7b044d1188e62bb81250445a41e4d880e1f8b077c3537a054ded8f5b09671c1eb88c9ba61fa6df4fe24e63c80e5cb33cc08e923163f66bc7c45ae200636e19e8aec4e1645bfd5b8a7910f2b5610c35896e65b822f93eb79161868077fc2fd3cafbf1415682243e2f8ea905dec1d53e31a300128a1a467768345049c6b0d474d460a2e1ac1474000a9cb2327b3259266f8bb508d5dfee44feb1b285c0858f8bffb703e35d2d2a75f5ad20cffbc952b93c9e8d77ac4ad742215e5263c83a3df0050cd379743a8db93f1c6335e1dc63241e7e7faf1e3b1f10f3a611d43b9958511e29997265565a2b5ebba6a118e71f059978ab4685fe3ee8bd941e5e2b0f65c6764cc2915eba4fbaefab9bec7172414e29673d7293d41e8f94293a90de0a7bb7f0142c4b34cdf7f69b50ef175f65bb0527b356e46daaf18b4239a70d7bb572b3fe60a815ec888a6593a12550f3a8da6c5a6b9504381b220c40e051bdfda7ccca63fd3dc126141315cbb23e5b3990687812dc76e8a682e4ab8600c453e2b4596f0decd92f97ec24ea0a2473eb2e3d29e6e62c734a278682f54c7188cd4d2a4087ddb8c9f1c88677f0dcf5dfd9f1114ab440dab4dbd02a561f511f94324c64206a55ea83ab6e20b05ce66eaae89aa89c2dba92aa1252b2489f022820a948bca04313cbd3b2066b56e3b74991d02a6667620d04fb0a2e8cc3053fb45278d7b155d6d25272ca1e1c048b896391a556a5beb0872ace2ded7ea110acd2415fb372e58a132149c35b472d1af3585f94db518ee8a4211a3dabc3c9d1ebb628ed89165385414d1592219ee00459c83832439425d5c56c67ef744a9e76b96d02fbca4307ecf6dae1f96324d2ab17f4ad9f72bd4289ec623a70073a612b9f1980aa59508ed08bbef9b07a24a744888e47c2c91b89a35f9bc41515a65869eaa9834e7bd02ae173008586d5cb03a29b8687263810af2da3f22a865b729ce42bd8d4eb4a58c0b0f9a3704cded78010898dc3ebb98ae2e9368a4773449b8c4ecd0683b3eb0c841e695aba70019965b8a46dfeba64f401720c1c28b93d032c882ab46d19536c40719f8c2c9966476a46e7e0e081d4ae8a5fbc0c6b088d35c320a6e2a3d5d0b52aa5935c2e77793b4b4326c73609ffc2de7ac9965efbf7321fcd56cd7da12e3af2a3bfe98d1ce7588caa96cd4265c1c9e5a547f94802a24f6f6277b906a364c529ca11d9b4e2e5916f87e6be721750e638a23bf6b0980528ccfa2cf0b0612a59ec3385f6f464d103d91ac8b516531e8eafb262d8946bd58a79af6f36d7d2c62bea11db905fa2470c5e5b0a30661c73d629761b7d2dabb1515c61d00ede0cdfa1efc3ff0ae1976ee23efdacc0f4bebdfea2e6214840a7d90fbd6fc5eacb474f2eb71180a2b3d9c5c8405c62b57c6778ee7497e74cfc514afe82c6a8037123a6cf9ef885c5f6241aceb646a69f3b8685b418228f2382fb580a67f0685ca1179decb1afdf8839f77b56165b385e40c24033312c914a27b365e8eb5299ee86b29262ba154bb51f61cafb06a77fdf6f67d44b9df3d63ef1c16a90598881ec5780de659768df2575b6cf499394e349a7ab6c89c23f91fca7174042f489969436fc7a6a486dcad7d010b2b6926d66798842dbb12ff74985593d04060f65aaa847b3fde62a893651c52bf532bd42bc4bc8586b1f6f57373db4973ec92ac7593612768784eaede420f1d7a10e038352e950f727fbc34df22b3318b69a36ff77b7dff2bfa4bce0f0f8cb70d9bb226acd103ee1ed40607c5f1c2ac2626736347f3e19f2c6f88dcae325b998189b6a3034fdffdeb92fc94c30a41cfe0913b9b4cd223aed55121661887b6f81f75fa03ef6d662e031e7de5952b9bec1d5b54a612cbcc9d30d9ea01878f1a0a1b88d7bccb3416f400b1e16c4f8dd356813664ae0c14a454c6c41697a4349810ba89e0c4f1c16e20b15b229cc5ffced28256471299d43740471be8007801a518969de0156ef0a4b02349bb5428e4d15c8d75c37fca3b37ec636977a52e1b6a9071c9ec611895b748e203b8d04aee3f02e4c8e25e49af60565968d2fef5206b291b46d096ee8b87a7de26410d6c8ef15ab142712246ed47bd0dd16e88944a23aa480b26b6d84c43b5a58e2628b37a8406c24a4928d2528c843edb7f70f306104f36b512bca1f57d56f7416ffb642f80a7e73db0f19c38a9e52d7c349f5012f024b88dd29e1d739d3fcc5fdb85339dc5bc24cbc9f84646ed6e86b8a2b97e7d84ff085ee6ff60e15b5d85f44930fe43f2f9f3f483089ac7d89f8494072962d5f71851ab019bd678eaa1f3760af050c268e510fd152cf9d8168fb0bf9415f84362932f6aa7066eced27535c6aac149c35f1e6a920c6111e64a3ad854ed9f5401190bd9ef29ab6975139e7aa10cdd9d76c9af9bb5077620ba8d1a1a7470c0996f596ac6164004619445e9869b77b485c32188a918cae47177295a717e80ff0c2229713211352d163c08f23014b2a078b149ec3573c05011745dcbbede69ea7af389ee7c6a44763828ac3fafcc8ee2f3862516c0009d33a093881a2ad4698f4c78d6d2230764161e53091fa57cc78ade606802c2417c4befe9821b03e5ae55da657c13f463f200314346ad8f09b3376a821be1f42d6980f3c77d8127d31580c428257c3692a7a20bf0f7b51efdaf0617bd4e260646f7dcd78e4f3610b4110fb529350ac6b807184414029985a95ffc52a78e6014554da8324d0c9e1bad8678a4473ec734eb0e83cc85ab25470084cb46756b0ec3b20bf0920024f8def5cb81b402c17407678215c8cc65de042599bc4f7a428aba6e848f03f29493a81bd9a0000289418c4f61eed48414f2e590b84e9490e75bb139a3720de104fa50e979b7664be282bf97b98b4b450ae608b9beb1dc4084ccb2a45379fbe2a392bb1b2b8e27d24ad196116006a8990fc261835a96e33b4fc0f568ecf391da586e5843d15de7d2a8c46fa5d775ecd179619e68a119aa8ef899b7d4862a30ecee2833921b47a7dbc4d82ac9f5537ebabe4fd97f827aa4a719b9c1eb081bbda1dd2615670651ddcddf805624e9ad21af152a7fac0cf7ca8770ea9be7edc83b2685581bbf42762b82169dad32c25b22f876ed036461acd23ad19a0e44d604fb3dd4c3f9071a219af9d03e7476ac473f89efbf3c6881ac65bfde430d251dae088ce2794932c7512cdc6072a45c0f88be8d65e4f03fd1068aec290b05effa38e12cc23a56322f55e901192851b1f43dd4b1f25498fa80bc121896908082be096145c495027c8d65ab79b920dfb06a50175a6066c660a25460d18f96b4d4e506ab8f83f5030654c1bc3aabf67f46424923aac1a60d19a86ed4ad432e380d21af2aa120223708910b307e92be48d1d150f15dabe3de78bebbc9c92169ee1f4459e77987e8270e4ad90935650c9e18a01eb5b6dee2416415f26cf5a62c3123c4af2589cc6d9ba23907d0265d771b6408c515452e71894ad906e9fc32f702c437374cba687c0aa4526326226e8b783b4f5fb735880a4802c23bcf0e1bf66f2557f12cf9e6edba500b6cf0833c855e8b669052d382b2ced3ce698b53a6476878d5fb5e868f27cbb6a509464da7023699d72c091f80d32ffa475cc6cc7791293d16f9201c57323ebf671d68ae4943cf79921caea7cade607d1a04cff152df2082de7694fd704e2612544f84a5aae3ba5ea43af36b25b6d60f0c9a671fa6d513e0be1a14b12be0488cd2a57dc2181916286dfe93fd641c752b9c9c4b65d10f39065ec3762af099bf1c5e7a27e05c8215a9c95695a1596636b39321fe68128d1635960d354df1f86bc8749287f0a61ac458af7bbdd3f4d03adeefb226dac4ccb0f400065fd8b74ee88715dd0686b89c686ee10f10a6bcb509e6a0f6c8285c23b6bcb166970cd6e707eb988360dd72607b9d15a45ec2a44dd03e28b0db1f1a207e028aa7fc80376920e3c49ca245a07fb1b33552038ed40090ae622a933c60916dfa51f1c7862630b76a29693944839d324c52ec074506ef8288c11211321a0e4614d39edd5dd7e82a568c5b79d59e85e3ad59832abef4e3e46974636ac7098ec49626041d1ee384f0d29a72a5e96e1b3fd8025a02339669ef0357decedf13400a3cd0af3f937aeab230c73a1f2fa409bc87a8caa6dea20259edea81877c350ef0f20661dff4ffc10c4c1379a6210fecdc7b45f1b456ea63720978a0a6062e44a97e66dd850c5a36815bffb083b8a77cbe572cc466f31ffbe6bbbdde8a6403bbf2d261b7802fc5405fdde21b19a3ea60a4b14383e068169653d2d09aabaacf192f259894cc2a797af6b928d8a3a626edf5578cb7f7cc5f6834816643ede862f2ff296794687768edbbc5870381df081f102e65a37f7480300815f06e8685b6fafc188634a88b0019ef572d351f82a655becfd0100da5c4b49f5df9b7d415c2cafc114255219585c8e462014e18342734396642fb6179ac5b0df4be49f2b5def1b502b354ceadbbc4190416c3161e5092787cc84eed4bd894822e74568d092cc9477d802aa206fdf6775263586ac80d553518100df07b6c57e1b241709da65afdcc7f99e7cc9c5ab4482e0123e2e1088ef9bb3b2973d29a16ba0adb70dc65a7de0dd0d735d3c656efacba83ef3006ed108370c499241ea3cdc00c2b93e63e5000767f7bc803a8c5c68068f02eccf16742e5f56b25025332a639e04d0a2048e18cbe146a7535ce9c9fdb48d8034e857be080737e1014a50309b5b85174736a2750c3ab5fe97e64d8009219c134d587df3d77181d6e0dac4d67c7d70dcb5262f9a0d702c002cdb8e698f91e4638d3424a81c625b6b39a5164d487d9758b2ca5075285942205ddf00b93e250d1cfc951b579eb591b3695c2ad7d74a0e80ece92d3db9e8954a393949b4356fb307d02af0f711622ab37b3a09329ad5fb9111fe84ba7cdae104d401a78134af9d5c0995c8182b0ee6692b1278d398259257eeba0758b487376f56fc3ed3b4b19491ccd45f3ca39e79414a0a69965a38b7e0f98ef5f656c69ce92bc800d7dab7b29971adba085c15f80f4eb801851365d601ab8faf2f2be33a2eb6b02d52a632797eceb01a863f335f217849c80964962e2f12cfd400222287a4ba98eb0e2ec919b19a3f4f668282131cadaa2a82f0bac1751a09fbbfb7e83dd940e932b0368e8421c7e4069a4759df359858d5fd5ce0107d331c06c1c3441cd0264073be21cd1f995dd8cf0c190d69f32746fe1a68398a88541ba1de2bc71ab3a2fad5fd3c28f4b4484068bb45f8c7be2f61d1671b9968b2fe03ef195fd219d891f89e51b1c785c3862d568bf19d5e46df0058326f01fe97fc736b639bb1b6a9053857ddab8d0608e7e20c2064452571846827e4a77d3586de17d89876b1976d5d328242967bd110a0b2342b453d64db85253ccca562a603e2ebab1cb781bbde441e1e3d3b23a19148486f94e9cfa786623d0a30c49baf8932d244287d31e125f69f500ae80439562062081bb16e02cffcc9d3c30f766146c22d9f4f106cf50b1297b3271b2a886b4e31e0da8f76d1baa3ce0bd4f1dcbcdc59a81039885398eb9d76e0e677a0021e7df3cd70adf57ca06cfd78b35fe2ccab1becf37c12b5d44ab2b751cc1d0560e7e0812960406529e340884da26d2f8d84ada410c34281c2186ac8a110b603ac42895edae01c3576910459a95b60d4c7b46113041eb3a3e68849eabf75c72ef384ca766a1610603f773368ad5cb19d2a0080c4297209268a24e77d9ae5022fa178036830b57474305f30a70ad854f7eed013743b2430bad7158640dcf8fe625f976b66bae118242ab70fe56cfdfc0513441a144f5fda125419881955bef5e96bf29e6a8e88883eb7c84bbe9c0d29691514afd93213d14aff18363a05c8e46fce73f47cedf174d276bcdf9e343bac213b4ca3738bc01b36054b1dbeed154c46f8580742e3a463d180fe79ac7c36bfbf9264ea7127bda6b319854c0bc6404decc40d7a8079b2fe4491b69dbe75c7a0048295272f18e8c035cbb5a780539f73f214dc07b8afccbb68e89c9648865aee048420bcd9256700a8c0ffa23afef661281caedf7f4244fad1e60618992801d200b222307c02b17116a41882aabc71959ab4178abb4900443dc0c133dfa43c43cee0664612df23d3a54929a780830e0af2c2efae20a097167ac12561c7a3c7a226bfb7d068bfd88c1109384ef83dbdf9fc4f4824f13a68f101f7fd9102a61702bd4ad99224e0c5c397bb5767e891044d76647769b77512e5e28c6c0770ce3eaef4e6ea9c2916d02caf82ff2a6398c327dbbd519ccc1403f75e721266c4ffa14a93d93b6bb064bf53c1f24bb51328f046f1ca3404229a12fbb0210dcb37b374608ede7ce272aa687e71a47991dce23f60e040e1a8e86bb596d40edebb9e7d3d930dcc37c6f5ecab19d82999a2b580ad072c282ee51e4258ec5aaa8b6911e4d1239bcce4ebdc65e56e70703c85749456ab61b02a276db749d907cb5cbf547b8b9df00d1c2f5fdbbd7d1883c1d79297bec550beffed378729c059d783242b118e1b00dbb2c31ca6d1a4e8286efb59b554829c1772b27b1e6335b42175486af92b97b3322460f8ff75d3979ab8ffdb8829bb5fe4a84c1d9f611c3faf4011ad6ed630750489a3cf17dee3643c422075bd8a304775f4486d88e62883f9f7fc740550a13f6fc4597d6de0d2faf040eade66649acb68bd1c24062a45c78821df8759f924fd428f22db95d0d475b6415953939848191ca3d928855a1d3444d9f0fcd4d3b0fe1265565108b7136c91debbc0b8c34fef8cad3bed899485380fc55991adb31f272be06f4556617a032f3a8eb4828b0e86989012ea3002b36c1562822ded8ced4a91eec6c8d1e80b21241e8f6de141b2c7419987e85d5cdeffe4171462ce827e10c84662283fd5e2872fb33d1d967f169d98ea7eb9a0b63199b692d412471e0f9dc0a30b3305ba6e94c5fc01357250ef2bb9427fcb719f6b4c5ab463996540b596504c8ede3899698b32c06f848ae17c7b82da88ba915527d29594767e08442fc25874f9c21296869498330619ffc1d948fc060513a162c46f4238f60ba343342edc608d92473b52569b6ba75e34038c926a92cc46cdef91db8b8bd9e35aaf9945664a9792dfef9bea69011392ebee119c8dede5f4736b83ddc24e8d0fac291bf9bc57a79812edb44f0ed70775be212de2aa2a966e2163296151a0ab5d2f052661ebe846239b8769cd7ed0727af63efb619debb0c5a86d4010dff2a61b11911768c132f7285686bc8dc961946774fe92c9e082cc04353b961592d891194d32ae29e08e6a1293665e85c0f2f719740f54df025d2ab46c346d5d98db846c9e1f262cecfcea2e5138831c42669d4e77a1eb09547045d2da81d4fe48c73b0a565a03e980c5c3477dd8f9f01120c25b611a5fb47f8e81303fc662d4a18c92c5054f64cade6038f82d5d5b4588428443d1264f3b3a9db1991653c2322e6199f241e5fbf1e9e3290c871d16535be3ad3f32ea5e0e4853a7b8abbb0d7718ebd2947503da0c7f3bb6193886cd4cda0c197070aa10bd2221ac68edbfd843c9182e47cb53a48181a4978037935bb7bd656988012de2f6a447f4f993c1c5dae449983dbb3775aa2eff174b5c3cf64fc4745329ed7a13725223ab85df23b136385b1dfb0c3dfb18a7c3e3c9bc73a2e64dd83c88d388fdbf674cfc315dc4a5517dd42d14230d624c759c20f72614eb403f754831c03bd13462698503de338cafff8fb7a0f6994935ef6f78cb16a3b159798cf6540970c9e14a1c110b5b2c4cd49a8b54a700d73a83f00d56f0a92cdd01ae4e6cacc520286a893c0d98e42c8c094eda002b4d5bae3d71200d4e2c1566857e4b031d52d9ab88a5a1abfc738460ac48b6a84a5ed6b8c6845ac47c04da1c03d7f3297c6603824fcaff6cd38d7ca2260438398800705232f211d0e63fdc8bdc08c04c442d7ca65e93044d7d19c4c495d96730cd263c82ad5810c49f7217cf707021b04450445fac44d73f5dabfa1936eba5963d32444e41b09591718834ea810d40460161939941782a004df83ab58537b8cc30a5d25263c6dd49288489874c3466bd3a63b3dacd8325a8feaf08380ff5b5fb91fc69d4e34c87b873479c32405c9e5add7384020ee33ca5d214db9d5d316b85f7f0de99d6dd59f16a83045c5d31ad7505fbc15784da7a946ec3203a46a90c214754d9478e70294756eb8be9d7f43aadaa00f494a0b7c09853796fbae6980e9904cc6b371ead79e09d22f54585150e2e4de9966ce0402a01869aae90a54f5409bac36b5f04e6aa8962d5680257883a5c3f2cb79d980c4c9f646a09c05f2df8160b2468e2ea2c7b1891c0fa11d612ec339615ddf5b1b0a5ff27f17c98051ee75ab19b5210d1deb02db70573f9c4fb21be813767e1538e22288e21dbe5355b92144b0669c260fca5e867ff31d14aaa2f15d9478068cba8a1fb934e82a0f0392ba702a0494977c681ffe0070ae317f9132f5a4d66818d9a60bbed3209fca10a882dc54a6c623c75e33bb7d2f5994a38e782f612c17482dd669c26cd2f3503a94095407e020e771e125796ec07be4c66927f1d4863d542cc9d7cff5f10c3b0e4e20144611a87e15bcaff67fac69ff6d173bf5a7e3da7fee73a0acc87d90927b61a5066f362ae1bc6f4b8ed1fd56111480d5dbb00a89b57edd6f0bf1f82e7996fa4d037e64494d9a170716fa199110050115d8b8ba4002680f6989aadef9c8e4b908b81f4b8f8d27a4647c208119e42873928e75e0828ef878a63accf42b966871281a4c2eacb01567aa8ba2b39e3130a2925514ee40a6dcf659b4e7dea79d4b3f1c73a3830e690424fcc2cbd1274262b569502a8f1db501361a959b8f687cd2587a3f79c072b7af7d70ff8a33e432143cb48e8b4c8cc4564c1822a4f77750f2cdacb0e16d6e32e4370b1a1638575373db44a98670a885cb9fc2279e40a86d89e505036bc950c8577f26bf831eb0854fab988de76d44c221d49101ed946e412a1ebbb166c0a02288bb9e8233d0b232acbfc3253198ee0a9096c4ddb8ec5217b060c7e4b559762815d4222c435e25e4e0d126080593af1229e3493db5112fb44d0352c4869c2524bfe5d2bb77d82b8c3a31e107027870f428c5ad09f88da16baaa6a46837a80313f9fd334d291710a30f5398340db6cf71b949400089b90ad892fa05dd601e6b6901553d341f37c8232982d3c5f1b0727e8c4a72a6d3b5960bc2e35a7c5576e05eae19345a68df29dcafe0747f36e4d6e7fc7ee73043df21da6bacf908fe72681f86e81b9a0bc7878bfcf3de804aac6b5e8959c87f327a46b513ef633d4a5070ca221151ef118019ce03e10767ee2fc385e75a830153adc0b29f685da8688b5244fd09ed6994ddc64be7cf9b9867b0aaa88b88797b2f064a510fb63e983008ff3913636fdeda18adf9be0c8aeb7182cb749b0ed59ae4bac29779f4350fa7c6065ce35fb950afdf334584c1c409bb8abd708f0ab2ee65e6792f182c43cf22fb0044cbe86dece4cc28348bda35cb96098cd135a9217772c11e04f538fffb253f77520d812e753b4d862f2001679e9bac034215dad532be0dab578ae1c29369fb246705b2765133f7d14d9ae82f5e62e45cbacacc22c00447f98b81a73e0802efb96ec31c10d988290a7651c7a912aaa4464ddf75c7e149622e2f61e11b216ffaeb2534ab674f9685880ea3f0b30acb420f31c9378302fc6e13b0912b5d92d6e1a5d46bf7eba01661c3406ff4fa9d631e73df184453c60a5f5d3f42e7b7bbf05ebdf84bf3fb9bba87d2eca34b0a8ed91524c9a44a7a59fd3da59529c23b405bb6bb91c41354740203c3ae0fbb7091090e913686ecb3e12214d9eaaac0a2e2e2a692dd8d1e9a2890d26534f5bfe4ab190c6a818bd7a514323249657b4a5f675c4bbf29cb437c1f34a4d4d008684bbb9f45830305362d05ecb2b3fa56a6b61a8649ae7df05ffab0ef9908cd53d54f33f8ef141880751af10888bb782550e162f9c892c7826b1709b5c8f82b59cddc6a0df89346345aadba4ebf291f61e20a62d326ff22f76de17b08f3a20c9cbe38f7d0d080efee4fc05074601e278db09c3a42273e44e6c458519f386fca2e24279823a40a183ffc12ab61cc91259f5bd7d9111e69d77282b0293e1aedca9e24f2a9dac227e52c49823f2a6874164ab489ef24b3a762e88f9ccf47a59b09737b71e4031092634b2a083f49feeb85d73f9251b6293988a12bec48cc7b912472f9b00628fd40b2f4e2a35ba4406e3958ec6999dbad17740aa918f03ffc922e2d780e4e22631e656672d8008d0d34d14ab5a7db2ca367844c8035f2b856a07e0ffd67ac0ca32e10afe74c6ee1903f511a581f0f9f94f13eb0a9b778ed47ab97362180bcbdcd882a87d30e164308cae82fcfb953e73e3748d9d4622a229e5d8f627790e021cd9d413760a77bf9372a5190410bfe7aebcf43f2c0aa1583359222e8d470e784290e25b75268deb5ceac9d098d46b399f5cfb1c0fdb421bac2d121ddea38a7988500d3dbdbec6f0805ac85b429f51125664d4333ae1f252cae9164438231016e6128e20beaee1e0b780819da8a410ee456526aa3422a3d8ec3c318adaad50882951ea48c5c9afced15a99a50024b8939a34cbe09a674a159dcc3f00157033e09a0a15f786a32fc63a0d3aed53677c2ed2532251a1778df5717a4b2a4a93e74c27379c798fec7d96e3a0194686def323dcdb695199af71bc8d26dfa00d8e16fd6e35d00fc4dde4f255a09a6f6eebd781756b34982d7a2454b1a81972550ab67a89fb7ba804540da22180ef4c13aa650ddea1ccf979df9277aadbbe8903840401e1bb86815a54837888bb847853450d80efa68373e2eaaccbd206c3c83d18c8489ae0748aa406671f4c8633670cf837332fa0fc7b1cb32bfa0298f2472708c2b1da1c83e419042c694e388435a5b6b4719c38da1d084fb2cf66198668fd28ded77b9162c6cef92788ad13f6e7233ca75b0b4ba41fe32750f7f05cd282b8e65cbbc51d5f196cb98cbe88db2ce75c11fe677e198f2132339ab844d1170634bb8fccc4e832c40e36804a78c4ac58cf05e5fd8fa14c85472e744bdfc6529a6c4c495c1e4762b06e72404ff38d0b960e6e1e211febf24994fca75fd5bd448d6a33fa318f1855345eb90f27f3e605ab166d7befbc63e6ceea157ae2e70afd078b5e903e7dcfb52182631d1b069ea255c8403b05f6ebfc0bd2315b5e2551fcab687e8c2c093214f12ee71e7c21ca040445b5e8e3e9556ba1b5ed5d49fff41aa844ce782cfe3ded80bae4abfc70cf2dcf012e9281d785d81802b7f7ce8a1f4f84e866839e96a1b002384c888029fb79fe463d1a4b3bf414b09f76f3fb4c573cf6d7e97d881bd40d791ce3b653ea807da0cae78947e854b2292db984c42bbd00216ce2270a935a6be8bd63d377e71e3c6eb1bd90f996108606c1bf8e07b5d051e0aecddbcfd2c419a5e6e06c2e8aff994aa8cf35d38f28d309c8ff59c2a375ef43570d10c899024ef55c0094bc4e0e7ecaef2b1f8ddb1d256b59806716ec66e95a5c45e3285a25536a0401f159337e12c75e7e542c90e08f6352b53564537ce80139d8f975dcdb3557acf60304e0978b1c49f61596b23f30609dbafe764928559cf914fe1df68bb1e27789bcbca64f2c19128f0897764929e1824aa5ec1dcd6baaab500f3e61bcc723a20f47b53990e9de7dda2d32654fa10cdee710cfcddb96df08e826cebb4f1b6d210ec05089dbcc033579b819b90e777d6efd57d7789860c459b5a95e7971815852fba5222b19c4dbdb326f17023d076c212b2285b0f6889534776c0c9b22bb01370d9378321c08ac082219b7258b3b59a907bce81d54d8c56c6cf67aa32142a3853ca51f4fb95de59031c5db7998e06e68f4bb08d4603009fa3f67209a80cb8ff17a9109fd1bb3cac7f8a10f5506332af402ccab34deda91d773e8a7c1bc0815eb25ce3a786b611787db51829b5eb8b243b037660cb6267fa72a7e0e2cffcb1ed61e4f37ee3129546651f0da97018322b694ccc7f3c48caac14d608badc58bcd5d50e30537c798d864411c69945770d4ca623a403fc455342ea2fd7913b406ce6151572a442dea91505917b6d8aa1477139ba26836876c189f30e7f7a8542e95f9692b723c8c5008f82fb672840cf6f15660d5eac6b652d511b988b75d22bc072c6b662e4e8def5059241d54f90ef114f63c28a4c34620fe1205ea90aff98921899aba0cfc397aa8ab59903720f33f903082cfde8529d5152428f7b0d158ecb5a88a14fb0f9348dc08fb3d5fb8cb68e77906828f59c114c35f32ea132af602f59b807a98a569b4489648ad9ab8d39432ed2c8dd23d179ed18a4ccd7606dfc49b66815bbb44d004cbb108083e9bfc257fa614b4b9bf174b0d66719e466d7db1fcd518ed24a07817175da13b95d61dba7bfe2ae8bc7eb9c676be04cc4323ee582fbaf959b2d3976d33321a8a0de119942c23f5ca882136564a12004596a453af46ff8db315e10d0c0d31f3c438cd61e792287f9a5d872b8d42c81a74c32512f21458bfb2fcc6431e0ab29ce6b96c8dd03d7a767c70484e063744231642803d0479adccc6cb1a8d247d338db605128a9650c0354f6dbe4294c08d61867d6f6d541b5e93e5cf3440df4232d434c94dfc4924dd05b013b06e932a0a5738e3c81c31835b3c7cefc84574efd7f44ccebbef905e946e69d02319b91f912fada3f46df24cce9eb63bda1761fb2ede049731c0f26f256929e9193dc82f3c409c544c5015374193af523694336c1952383d91416579e143786469aaccd060e0390130f9416d5d5e9fefcf35196936d28f82f189e347de54b596ab05e112000c85c4b28a1f005be0ca21a0fff7fcdb00a5aebf7af9d17fdae0d87dda8fbad2092da619a9fc4c1c13c9d5172e82b86608f8e8c8a0c264bc5b6ebac7372cb2082f7bea2c2d9f577bf96978997c25669ba84e578696c93e2e08ed62d3b14883f4e77dca15680dfa5447577a0aae987e5d95334c37fc432a1c196e0cd3e2ca135966c6cd150e2cbf014f6d5980a36a0163e0dd3d8157b155a5722e61066f211eb66d2b6d8ea3fb82c64f0e164c42ec40d945f517a114a8d8acc75d909154aca6b797ec1f7f9c7e8264a0f2cb194fdad5a1fd84a5bf7901a20b656337899af402d33978706593e09832c987892e09472138d46853c910a4e69f08bf0e11fd81c5a3c3271b099c85160168736e27c2612adaa368f8aff23c4487aa65627733042a7fd1c89afd2fb4967618908d7b3e07419ccacaae1765894917a59830a8b6c21a1a7551e0f2b5e29c0d2698ec3aaf3ceabd069573330e7e35d9992ec5578b2d8d0d7430f88dc25923fb0e4b20dbd0adfac0deb62305850fc32b991d107c4cd132c75459798e7803e0231b35193d3b9435b4307025b800b153473c09ba706b9dbc660f1abc42227b24374cd8ee497bb3cb667e68a35e1e130e636a8bd04f74ffc4899c4019af8738681269a4ef7e70f26b7e6c1c0d1b4a92c5b326575bc30bff580943c5ed8a9b249336344a6075995f8584da2a5e0056110ffa596bf1d48431b510160eef825eece201875b9b3e4bcd0fbd3faeda7fbb19dd06293bc8ead05d432c25a8bc1644beb7e8c1fa185f07f8f172b642bc7f3b35773c6422bc721c406d8aebb30b6cdab86f3fe46994b5b258c09eb2d6f441ad7946ee2fa43b20adce6b807031a97941b1f1b76977ea748dbbc0a6cfca7b3c2cd57a29ee8137a0f797120906d68af395b7dd4df0d6d4689f66ae9296b966d9ea1cee4d62227e600bc73629811619889367da81dddd2118effa81b2061a57b8f1539f3fa5134f9ecaf1653444c67200c332f64a124baa85727094de60831289783d998cb60d8aeeea253d705d1ff7cd7bf9f3d9b37db35887359e4079523eef70ad618220b1fb2be97002600d19a899b5921b488d1720717d9a4c2f1ff5b982296a6bff9cfb1248b846e5a38741afea0d9a1334b94c270b1265e8b3392a7c5cf5387014eb3d9a9439ef818180d3cb5cfa32a063851222879b54dad096144d10976f8f53749704f8fc615ad952049b950be11f06466217a2f3035e612dc4fd0333300bee1db01b2bbfb7fb08de55cc37a3c067413264ed61997784ac3844d67c5daec6d8ccbd98c62e5b29164e4ba751c02d62d2ee2b89095d73293e8843d58d2ff6423c909a00a56b9306ac6c58f5226c0607ecca7e736058f4800fa8fb1bcc58661867ca1ff5d897ff00239525eae547704520f0c112fc1c90deca5fd070d74ec22d6c5ef859082f82581a303cea8d3694486d8322193c3921ec4a57d601f260267fb9067e557adbc77526f4202dc5c2e2aad0f0926ecf7ca47ad36122a3713b3e0cb418a8d7f5c57cd62dc9463537ebf32bf9fb4377078a2c7e9b54f4000f42b67ecabcda6ba1b66579126a8e2387ca3878840edd0260363931ce5bcf63a105e4e7ca98969f4672a76a1cc9325c090142b429f8e9b170a1cf0ac1450c99551ed63b29a48953905a9ded680f8c6265c6034de7049bbdffd26137a50eb4e85fc16c5d1e6e07c0f97be7da6e18d2a6ff5475e66feb53e74dcea1fc575ddb8e49f614212ba425fd73a734fc36a669aa1fad223052f232a9f16e81aeb1d4753b658cd85e2e93cd008870cdee912cab174844a44ab98a9321e767b844ca20a2cfac6662660e267e4b1088262bacce3b37db66aaf7f94a0e12971d8eb3635b9f3c03a89a64ce49c903a03c3a1567dd71cb6be4c9b41c11fd9db93e422e303592027f56f6b2e86cb5b7fdd01d3b33cd36c3fccfc79fce947fb05afd25f867c367a04222b7f708023fcdfa6f01cc9a86c0f04e57ce4e23a7821589ba0fbf9f97ec2384a9e4f7f87a454459d4ad1b29dacff28fd7d29c3ed202fbc6799fb99077943220fee02f65f4ea62fc5612fdf51ffd0af367d6a881b14249f8c52df3a343383ffe74d885a6184e1e9f4d772b53a31d884c7d0e9df2f179ad28f5e766b1f010b201dad16399849db7ee080085a492691f8b34fc314a77aa394046f62aabb26e0dbb1147c641b7ff38f0bff47c47ac5ef2847b314ea1cd28107ab046c14a6a6f8172e1ddd3e4e30dd30506d52a4af0a1cf059eab9606739a17794975a3c97d83cdd77508693c485adb8aef239c1a56b26cb6db8caac6f7f37b2d2e3388c8651f6c6c73e8feb1963ec5f116752c90590276c1d0d4479524075796900fa176a633a2b8dbefa1ce2ddd72f6e78b0183fa0832ef631f48e8b8f5e435900fb7fb8f514739998006429df444ed609c2efc576770217be0c3ee1d5a4ef5fa9260f18b5437a58d772fc1f0e673cc5441c4289f26bd4debee1147b4901946bc9e8717e62f2b2333b3c2a5a7270c3688994ec09579a7013b8b1804a442e9ae7b0ed45516fadee5187f8da19636ea731f9c7478b640df28e5b70ffe1aba3d9da4496671c9a3725a5e4c05cb65f36e0869dcf54186555517ed0b8114d8e7c07d092d0038b0af3a3934b5038a685fb05510402939e955bd76b5ae70b2b3f509f747989f603fd14e0e67174a7eba8f6e36bac9e866e3bff7c7eaa71cad5b061e728b14dbdbfd44e2f60e2e318ae082ce19ba73023d72aa73044432a4d608516b8410b2f79632e20ae30a9a0a4b62a408d1209d628ea385e5532c38c6aa4d272ba6e5b36a33c64242424242eac64ba19026174996a5c45a624d41e3d032281d49d3f0bc7ed7631269a5abfbad989a9309ead8f9ee1f072e0162554af2d5c900c936aa947ac28857a5e45229d12b6420aaeea6c4cc502c9fe2e158187587d7b85c2e97cb1546cd18abc6aa856114ab1646cdd0037b59350f2c85fae118cbe34004c135e425b0aca8cdd80e0e92af4e414f224091105563815195dc76a23752f1c776631229ad4a898564e5bd6621495816263ad3c3245e9717d765b9d14e31c4ab5232e286cd1526b8a28857eca61079091d88cb8788c37268198a5bc0319552d4a15c4cb4fdf51ab866208aa1f4022bed8e6df4a94a6e65ccfb35a18e57f188ed237eb76d18e2cf136abb3b69d94ea5f4c27c373e69bbfdc8e49a6c53a52461ec8589d84818334f3ae5326353b22c266aaa64b7589ab5d21d5139d6d138484e1a22e9aa708cbbec8ab0f2dcc832a8479fda59912f493b122fc8443b4304996e4b31c9e93420ce71c78cf2fc05b23ce7afcfed2c73d0e4d7dcb8046621f37c4ac476d844ecfc5421c92d6d24c98df91888137d2ce57f2d276de176851e5be772bd24d327392e8defab55e8aad93b64a7685bfe7b49185572db1d6cd9fe66c1cb7a87ec1c3241851868c0e18723a42d4b636a6ca0da0b0963d523319fecba05baf25a00922f9f3104b310efbbefa084ad93b98691ddaea42d272db8ea279ebecb70850cd8d55f12f6ad40ff8d57da151d81ee93279888df9e93f6c6d972cad91b8b7b576f06c62122f235c442f379c4fb03bd7a4af506a859d4052d67d42b2412c4de97fd40f07bbd8686ac386652f0892e4137369f9393f7c536d442547538d5ec4f1f6c7bb4f57abd5e9ee50701b2f7653dd0e5fab7253c5537cdb4b8a9574fadb2c820f9ea46026af3e29747bb7fb23deb75e3eadbb8117c200df2aa22f690af97cb054ecb483c58c87b136e74b25a200b3dd55e2f19241f44c67a0a7c35524fc9d718622b6481df8aa562791d8bdb286bb264339116d5b1e6db802886f0b10d35444e63e6c8ceefa04a6e79e011e7132b5881135e8fbec2cb3195c646bbb1097df7cd8dc8d6b39b9b1e29c41e5cd7b5ed7aec9eb088b7a5d43d754f4a3d2cb310bd5777687bbba71c33ca773f2bcfb4c8f69824e908d955911f6f4996cf762c9fbaa14f948986b14293f2e28a9ad29634ee40b919c38424add49172bac28b521b0121470623449ad22b2cdf8b12354a430e54d3982c485375d8382d793992465172ce342565b1a3c3130b415ede642866a16f09104bfb345432026d1bab078b8fa912dd92c61d2837639826d2b45247cae90a2f52491aa52107aa694c6769a4291c988d0a2fa0af9b016de6eeee89ee1d944cab6465657799efff580e5fd86c8f4eda3e71c25cd80e5fe86c8f1703962a99a11295a51b774fd67d62e9e994dc746339e9ac0c39b043245d88a49b33f442256d6792ed4e3acf74d279e61684fd49025a7ab6520948596846b5659a659ee3b61791648303529452ba75146906c53aafa3b419c49d688326c2e14497dce8a494524a299d1c06a43a29fe4629a594cadba07d9f9b9e944e96309e21199339ae0383638eb38145ea9bb3674a0a725ba7f2561fc802bf70ced90a9170a72c0639ee36a8702a109be3388ee34419ce194302ee39e59c66a6f783679fe61cc19427231f28f66c44868642568f0d2ace4967d786cea62914a90deda6ef39e99ce2d1846843e57c5f8b0b830b83bb25ed5e205eea799e07522446810a01e84ec11db1cc6a2527a51ca4839dbdd18dc324a0f5c41450a419e3b25061058e81463348b20a40a319f368a09195520a1854b3f08b11231f28f66c44868642568f0d1ae4f512c549f37a74402810412e0cf1321b76b2d7a3b990a8a048ec44916816a6483ea1682344b2dd0041271b5244cfa3ed20821e920d293e06ba4356b2ddcee38f4ee95009e8b6512a670f94522244ba31d19f7d296976ea36594e96f3b652b5ad040307cdc731e2c2cecf3b4c5888caa53c579046761b9b1027978438df89409cb349bb37b1189f8b2cad346f46cfd51864bd41d8fb845aee3f4b5ac972db1c6f107672dce8a465b7f10b65a336b23368caf9ac197376677d721ba536fc206134090b4fbf5556c541c2b6d3d148d8894345b36d8e3f3078978fc1bb1c8110330f84bc378a9e4a9c45b3f631225f2b900ec91711f9a2f7b18578598a9f6c90b01aa5f44ca89c544e7aafcaaa3242bc2c65c38cc9d31944dffd749d0d3824b51719ab4c3d3c597ac45354d2cd035aec35c152914ecd223a3b321c17664e4eb59281bfd38d0de5efbc422a895e920784ea57e438aee366084315dfc671dc6ac5711c37aec083231020f85300f0e143f04c7fdcaf0996db42249c52c771dd83a636679d773a998684cd918e912f7a0547572042414141c917126592b3e6846a63da98a2ea6c671aaabdb0dd92a93b69c628a5928985da1bc522448f858678555bc648d8a552504cb4bd3df178545b24ecdb104554b942bd402229a97b4a26262ad5df682cd467da681c120b3979e1c5c6b43149a5cf0c2a61f75be228c76daf292b4869be6449f3254b4dc304176ea31e1addb2e91a2bbb9b6a6b3abc22de2d694b9a4a9a76e0b0a2baa56e09ca8b6e4c988ea973eae4744ddd155050505050505050524343af175454b7c4715242cd98e789a2cbf5bfeed09c126ac6c44bcf0c134a332082e83c2e609a89b92d45b0b2f51b64e5d82d55db49a8b9a4c35ed9dd755d87c484b41476d8db4169c6136f3fe630f45ef65d3f56189ef52482dd12cfa452ab5bfa74e8584262eaa492845ae26a12d6b158acb358ac8ef52e44d2b1584bbab3ce12c61ab926f992507cc55218daaf5e1922e9e6b0eb464e42754b50dd52b7c48af2f98007ac2c1dd194c6206de13632eae6c237e2a546974d29fbd4a88d8c7afb82529ae4c54e9ddeb2499692627672720ad3484e9fa474a8945419dc78585cc2a9a5ec846218cf7e1cc731333377283e215eeab4596a027a02ce82a90a9892a12dd8b68d632929f9797143c9ca56cbffb45a524a59474a29e55bdcdd341a8d46a379b4a1a1d70b4a8ed18c716ba446f4b3237e69d068348fe6d13c1a929ef116d91e513c73ebd765c5f1f6b7b35aa7ad564f55bd916cf583922fa94475956afca2e40b8a3869494a9f54eb4cad35d2a68fc6443d975e78e618ebe0f7d50fdb57bda78a9559486b4758c17a45578fbb019484c991b1233193a325cd70db26474754d1260f86d58c1b3d9a944793776e28752d3c524a29b9ddcca98bb4eab01f07c54c12f6b364066d1165e7f8338b2c947c45214d0a45c7801e85a24c509e274e28cab4854aa06e06ac93cef6d8b2c11a3383dddd7d069190be304b1b1586d15a5bc1afbe4a9c502faed3102f558d630b6cff02591006ba2cf8ca300ac5af3e08de9bb179f067a2efe0489daa9c2386bfd4692e8961124a5577907c4520b881971594524af02a9554813f22655589508838e83f0f54854ac2835f5531f25f58291b70a44f3ed050bd0b91a8a47ca24e33e6cd566087f25fa77a6c35d22c14e9055050534af6b7a65634f3ab5b22752c2c0c3e6ddbb66ddbb66ddbc6b227c8ec46aeba70cc3b3fdd8d690363e5bb53a619f3c62da91b936c4db254cbd2972ed4686539645285c8e4711cc771dbb6c99944b7cd7b5a196ddbb6b1e8862ed196684b51d3139758e8486d426d524b53cda98dc8d5bed1f56d6c5de9a634fa3344a4eeb03d6cac6c266c481b4dbe64eb48a45c70903c1d2b6b2e3b431a45ab7d627c5f57258c303a36619ca0abd28adaa4b68ded3458e79b0269e096ef0e7824b963b3b111af2737e68db7d619dbad26f9ea4f6ab69a66ec739235db9fd30c97b968522fd3b9f5721937d4cb786ca8b7a148a0dea612817a1b0b04ea6d2d0fa8b7bb38a0de06d3807a3b8a1aea6d3334d4db6918506f63b1807a5b0b05d4db7112506f7381807a9bce01eaed3266a8b7f1c850af8462807a259502d42bb110a05ea925867a659701d42bc108a05e19050cf54a334cea95695ea85762e142bd528b16ea957158a85772b142bd924e00ea95652ca957e251a1de094549bd934a927a271624f54e2d29d43bbba050ef0433ab774661eb9d668ed43bd3847c02edad1364275cde63a21f2e2f32910f26fc8626fcb67a58664209bf384af8d5b183652510fdfa20fafd51594644c22f10127e3d08621909467e858cfc0a1181654662bf4562bf3112581683fd9e00fb058065194c4d915f5eb3846545da10f9e52c6060199137437e19ce0c2c1b3267845fdea206968df08508bf0cc60d2c13618ca15f26c309cb86cc10f2cb6858806542d408e197f34061590852847e7b0a1596091111e4b7af606159102340f8ed23b4b00c84243ef86d2e5d58f6c11241bffd050ccb82c4bc7e1b8a2858f622e3c16f4f6186651e50d1c16fa349c3b20ed400f9ed3558b00c481ba0dfce420b9601bde1e0b7e1c461190773c6dfde820b968d5fd4df06830ecbea18ff6d32ba0c96dd8c1fbf8d46e361d90f3536f8ed3c5058b681141fbf720a1596f920a2c7afbc8285653d8cf8f995476861d94f123c7e25972e2ce3b1c48e5ff9050ccb768871fd4a28a260998b8c8e5f39851996e9a022c7af4493866539d4e0f8956bb060198e363ebf320b2d58e6f3e6c6af8413876537e6d8f8955b70c1321b5ff4fc4a30e8b0ac670cf1579221cb60996846eb57a221f1b0aca506eb57e681c2329694f0774ea1c2b29008f0775ec1c232d088ef771ea185655f12abdfc9a50bcb564ba87ee717302c5389f17e271451b0cc23d3fdce29ccb0aca382fb9d68d2b08cbb9c6ae61a2c58b6b5a1bf330b2d58462fdfccdf09c7ce382c9b7ff29662bc6205de518cd7d5c39b69bce7e10dc5785f3bbc9f18ef9093b798f11ad1e11d66bc5ca3c0db89f1b2530eef26c6cb4f137883192f43e1f05e1a2f4735797f192f4bdd3713e3e5a91bde4b8c97efd8f0f632de3692c05b89f1362d026f108cb79120f0ee32de4e7ac05b69bcade4803797f1f65203de1f186f33d5f04e62bcdd44c37bcb78bbc6803712e36da705bc3d30de7e52c05bcb781b2a01efa4f1761402de478cb7a50ef0eec0787b6a86b711e3ed3b32bcb38c571a19e05dc47825ad006f0e8c572211e08d65bc32298637d278a5d200de57c62b9704f0dec07825130c6f22c62b9b98bcad8c57d65e785719af7472e13dc478e5530b6f2ae395502cbc69e395512bbca78c574a05e02dc478e5d492b794f1ca3b2abc8fc63b8d94bca38c77d292bc3530de8984e40d65bc332985b7d178a7120a2f1aef5c9a3d88f14e26fb0c8c77361d3910e39d35001c03b25fc00223b3d00f9559c887ca2cf4a4029559a8071e2ab3d00e9559c8890e14c801caf6278043931b6c900092ed4720c9f621f08025db7740039a6cbf869aedd3e064fb0c580094ed2b200152b68f8003f41ddb9fc1c8f665a0d9be01906cbf00048861c9f607208026db87a166fb4c9c6cff05175a88b27d165698b2fd00c83bb6bfc4c8f655a0d9be1224db4f9264fb485258b27d14986c7fd664fbb666fb472ab3100064f5845668820e1c25fcf041e401101284081989158901e004126c1fb6464d1adb2f92451b2c6c9f089c375ad8fe902de6c4b1fd11c0f8820bdb17818c31e8d8fe101a669461fb42380fabc1786c3f84295284ae1041c5f6831c610416db07814b125a6cff832f4b74b1fd2028c480b1fdd71464a2b07d0fd05061c6f63b58a3268ded03c9a20d16b60f04e78d16b6cfc11673e2d8fe08c6175cd87e25630c3ab67f34cc28c3f67f749e56a3f1d8fe0653a440b17d1f5788a062fb3d8e30028bedff7049428bedf3f8b24417dbdf01851830b6ef9a824c14b6af030d15666c3fc71a35696c1f47166db0b07d1f386fb4b0fd1b5bcc8963fb36c0f8820bdbef21630c3ab62fa2614619b6df9279a41a128fedb3a6488162fbe11522a8d83e788411586cffe3928416db5f7d59a28bedaba01003c6f6bd29c84461fb1d1a2accd83eb7464d1adbdfb26843e1bcd1c2f6e71643ee9c53e4ce38b6e70a453f04514251532098f8e43ff964bea5644ec96f4b43be0c956c2d93f0e9c842f2df94538e3f49ec9cb365994f12f13c4b29a594a2b764e72513f529a54be6ec46e32c8a3eae1e5ee7796bd0e819b42986145ddc455589d199d7d6f33cef2d7aa3e779694230c77a9ef5c68b03901802371df86eb035817845d1c7d5c3f3bc8e7a51789e774fc23cb0de453cd653c37ae3edb88dba449f28bcb0577c156e2ca709e36483584e13c592f5e6276b4905b641248cbb096017b1df4306cd4fcfe50346bc2f3b5f4333c6cd6614494c4af615c444f2b6ad0c0fd0464646461b730c9f04a51c83bce46bfe96d75ce9396b92098f773c3a1e1d8f8ec7ef6dc7e3f76599d8afca21fef9f17eea156d6bbc380c0d316939f4ca7129608e712864c21b3787a807ba7a6c36bcf8b61f8c8c8ca058fa02e288f3a0d9820c346aa0c61a7966e0a3f44c4ad18cd6cdc0b1fb28e8495813eeabb7eb2c964bbae48e7f0df278e7ca6377fc538d975ad5b472da4eda4e86a763375e15ab88c97e5d1e1b52f14e3c3a3ed911566621d578e5c5775574e29d8726aabbde4475297aa2f7eea2eaaa8baad109f5fed363031fbfe1a3d5dac047ed512fb3b1adffd4cb6d6ccb75b63acea3ba2e9e43256d649985768cd735ca8b52bc0eb1e88ea8ba28feaa2e5e152e5175e7704967a5ca765edffb38442293f05064e5e99d84bf3f3cd96159bf1cb250244727e16f77f09449f8ee54beb3e0188539e876a313d6f8850a7829cff1f03407b30897db5879107c0e6f066d3d4343dcfeedde8ce500738c545c3329360e8e54bc99141c97227290fc8d4bf1b9949e4b192f0efc64c5fbdce73ddfce1ce4ce7f3f2271f854d70c9abf51a5d818815871e942468b11684ea0340b82a196d490e2c68b376b8899f58ce20c2a62b2df98a4c87a6fd526dcc35b64bfd3ea230d91f5ce636ff8ee1dc33ccf76d849b9b1c670fc02826310fc3413f3d59f25945a5a6fdb2712b8453687cef630ad5422efa4f3e459e25939feacd05dbe1b5b78d27635fee0d0d927d34a2624bb411146dc5ee0b8f1963928f282e0bacda7ced79f35cafc36cf560251748b2afd9c639479ae54ca299b76179e846ddb397ca1c9f67dbd711dd771455bb7755c6d22e5462de5b84dde2ba594f45bf76d3bb735d7719be43aaee36a130ee4ba8d485aca711b156aac3ebdfee657dff7afbdd70e5e0f6dfb9fbc6ab552ad56aa2d88e51e843b1dbdc93acff03c41d5bb1d53a5ea542a4ea51a2fbd5e585df65f7fb55a558e7b87dd65a55bb7f23eeffb5ab6c7a9549e4ae5755e5579aa95ca6ba2eaba52ad54aaafeed5262a956ac5712a95d78ddcd86408091aa45183ee3d65fb2b288cec376e755ed2efc6eefaf5b70377fa597be88fd6798f7aa7d41b0a5fa856fec89c54b65a72bc9e77f63e9b27cbc9b4de832499d61b3d16daeed540ecdef60e71ed7ab689ba6f4f8189e437eff78755a9542ad58724acc7c6b71b91b0ed5f4f05e52bbc8d2aca576863a4f215b2eed5db95ed138f93728a95db61b3ad7a55361cc16fa4f2f5bd3b8847c242ee9dfc42ec73f317e26ad5b28f30d1b42da1705d552c54e45527add0f63b597f56904dbccbb3fd3e0a72d88d5dbb55747a57bdab4d3c097a3d4622dbed294858f7cd93e3a5f649db6efc5932f3e4c93325154529a594524ae9134a2fd7eb89243b1fc4c844c2ce3462d2b0735e9f5a10013448c11370ce30c1a6ccacb758f921cecad339a21802519442bc9b9148b98897be40bc34e96e462d2868189b977e42819da71b6dbb9802bbdd47c26ed86dfb6bbb6b4b43c6d207769ef3de344143249b0d28e29d51e29c42ec5943bc52caf6c52b629845e49a702889961ee8256343f4ae1ef47cc50e49a20a1292a8819df791302076ba2c336c8211b99ac8a1113d15885e0ac4cd880323decd88ce8c66cc0bc188e1921866215e0e43644919d923725b7507715ad0c1a11b08c974a19ab27c7a837aad061faad1f8da32edba9847e3c20be1cdbcdfd606ddaf2a94758f79a685c8ef7d1d4c04da78ebaa1b513acfacbbd7a24d353c240d1791b751e71b1e22dfaa5f8d8582cef43c636537f976601987ed2e90d5c1b1d6f93f9888757e084c049e2f844bf8ceeff9e497f05ffdd27a4f9d7038485eac738d370b3f6bb3ab346fd66a1d45e93c33ef42783315eb127c09dfe5aabb3cb7ea64d5095567ad4ea73ab16021f25d3d12e233e621ab515569e2ac3b871dcd9b75236fb5b96603dbd701a77b166d9c87f431d0ccdb6c77b643db6d429bd02574094dd4444d4293d046da48c73ad6b08675912ed2449a480fe9213d428fd022b4083dd4432da48574081d420bb55007e9200d4283d01ff4071dd441fdea577bd01e7407dd410369200dd440cd4173d0638f5dbbf6fbfda37ff406bd41fb681fdda37bf44fff348fe6d13b7a47bbdad53a5a47e7e81c8da371b44ffbf48dbed136da46f7744f8b2d76ab5bcd6a56871d36d8607ffdf5aa57ad6a557bed75d75d73cdf5d65bd3a63dc7369105dedd77fd7f7de8467ee42a30910e14785f86d3c0441378df86ebf01fde466fda1be99dc4441150622208bc99de4d4cd40026aae1fd767a3fbda1de514ca480f7d4fbcea5d125ed12e932e952e972e992e9b2e9b276e974f9c4442f5c465d4a5d4e5ddef934faa47d227d267d2a7d2e7d3231110aefcf26269abd3f6b4c64df47de00787f423191ecfdeeeeeeee86bd8bbc89bc87bc47788bf01e7a0b7987f0167a077983f0fee01df47ebd3d7877f006f2067a73f01edff5fdf78ff7066f1fef1eef9f378ff78eb7ebade39de38de3edf3bef1b6f1ee798befd69bf50edfe0fb7b77777777997ad4d9de8a58a0b6fde691233f32c32397b0233ff8f0273c3033df4eb2ccccb7a12cdf8eb2ccb7ef5866e62b932c335fc96499af74b2cc574e59bef28e65be9366f94e24cbcc77d62cdfe964f9cea7b0cbfcb64eb83a2cfbb0fcc33210cb1e5816b22cc47211cb31cb27580680e518c798db588671112ec244780bcb43180ccb23f0082c028bc0433cc442580887c021b0100b71100ec2203008fc014361998ce5292c5361f9c56a2c7bc01d70070c848130106f61990306c3f2c82357ae7c3effe01fbc016fc03ed807f7e01efcc33fcc8379f00edec12e76b10ed6c1393807e3601cecc33e7c836fb00db6c13ddcc3228bdce216b398c546580e1964903ffe78c5505856b18a3df6588de58e39cec2f2c69b05ce57b1accb9cdfc3b213cedfc13213ceaf2c2be1fc2096119d2f02cb48389f04961939dfb22c76fe1296c1ce87816545ce9f816544ceaf816543cebf8165239cef8465229c6f01960d9d859c43380b9d839c41387f700e3abfce1e9c3b38bfb560199033d09983f378aee79f7f9c3738fb38f738ff9c799c779c5d671de71c671c679ff38db38d73cf593cb7ceac7378fed4c232f0fc9d5767d5d93b7767eebcbdc77cab479de7d2e85c3d6a35de6bbcab475d83771af7ea51e379d3e0aa7ad468bcef7c558fda8cf719ffea51cfe06de7603dea32de3278588f9a8cf7d459f5a8c778c7e0ad7ad462bceb5cac474de71dc67bea5183f196ba8d7ad45fbc61f01bf5a85ff0f6e23ef5a8b97877711cf5a8b778473d473dea396f175c473dea16bce5dc558f3ace9b05df518f1ace1bea3cea51bf79afe03ff5a855f076f31ef5a8b578a7e03eea5167f17efa06f5a8dbbc51f01ff5a84ff066f3d7a3c6e26d82d77ad46bde4e1feb51ab7997e01cd4a3b6e27dc581ea51a779577120f5a8d1bc6befa01e35156f12dc837ad423789ff9ab1eb599b7081e548f7a8a77d33fa84741ffe020d4230ffe7a907a04e41d5ca81e7170a087508feac70ba9473ffe0fd5231fdfe022d4a39ff7f808f568c7797c483dd271d789d4231ccff122f5e8c67d0eab473db7f1583d6a5dbc917a149e7512ead177f044f548f5d54ba847ddbd9b508f363a6287e01c32f17c20f32752bc0251bc07a6f300c57778e24ec45c8730a78013cfa1894f00cc71587a932fbf4cfc86256e83974b40894700048740973f40e90ee0f2067ce03524711ab69c01487c011eb802b43c014947c0113f40073e83119721cb0d50c40bc0811300cb6340fa00ae5c001b380c449c8995bf50e52e0cf116a89c05da5798f20008f12552aec2d1954479120d1c0994a7d04647a1320b157d56998582c80010974647de798e1c79af61df6a58fb4e63f6aec16cf6a6010a6f3c28a0f0be93c21b8d1452789f81e46d0612246f3b49de334892e42d0325ef329428794fa9f026430515de3158f21e63c992779d00bcc5084000de61acf0a6b3c20a6f2916de60b0c0c21b062dbcbf68a185b7172ebc5fe0820bef2e5e7873f1c20bef2826ef2d983079bb0086f71c186078cb11c0bb050210c09b050378c719c000de5031bce1c410c37b050478bf210001de6e0af05641010af04e8101de5a18c000ef2719de59c820c31b0533bcdbcc30c39bcd01de2738c001de2640c01b0b0420e0ed9480f79a0424e05d0205bcd5284001ef2b16f0b662010b7857c180771a0630e05da3e18d86061ade24a8e14d450d35bccf34e03d820634e02d82ca5cc4016f330e70c0bba9321779c07b8a073ce01f40e0411080c05f11b8071188c03b90c08148400207b2e11cd860c3c71b5e6fb8e1bfff71ef3768721f4d9abc070effc10187f398c0774c600277e5701d39e4f01c14380e0a50e03e3afc860e3adc8693f73871727187b776d8e12c1e1ef2c0c3c11efef5d0c35715b8aa0215b8f7e4dd9327457cf85639eb03b53efc3b52efd4028b2347a1daa7506747525178929ac295542457a126f992aae401a82a7c85bae42cd400bc85bac25da82cfc85dac29954170e437de102a84c3e800ac363a8023801ea005e801ac30d500970196a013e4335c00f50653802ea0ccf40c5c081a8177802ea01ae808a802fa026e00ca80a380d7501afa132e00da834dc01b5863fa036e010a80e7804ea032e810a81db5023f01baa047eab0d6f526f380ef57e02b5c973a8389c027502d7a1e670279502dfa1ea701eaa93f7507778052a0f7f527bb80fb5020fa202f1a29a81b7510de20da516bd3550dbe81da53694f7516d0dbca5d48ef216a2f6d17b4a6d296f5a6d21de546a4f790f519bf6ae529bcadb4aed21de44d4aef2de406d2bef2bb5897823d5dec01b4bed2b6f0ed4467a17511bcb3b4b6d0ebc8da85dc4bb03b5b3bc8fa86dc43ba97607de5a6a1ff1f640eda43712b5b5bcb7d4f6c03b89da48bc3f507bcb9b4bed24de4ab53ff0ee529bcb1b04b595de4ad4eef2f6521b04ef256a2bf166a2b697f797da4bbc976a33f10653fbcbbb89da4b6f276a837987a9ddc45b4c6d27de4fd40ef386a2b6983753ed27de51d486e22d456da63799da51dc02f587da656411f913641132b5437000d429abf384cab31f2a5b0bd4b614ce9b22521691f7a15ed5937a7b7accd87386d82118af672b50ef8e1eeaad3cd41bb443bd22d44b820ef5721a0ad4cb58e4502f6b31817a390e0e35f6baac3ccfcde5cd0ad6ec4c8fcba4948add67cf0629adcd20797a6f498a526eecbaaedb3ee946f976aded1c7b4c5043438ee51a0da6a4b024f0d2d49a07e9b65191167d594009934af2352fbdc8a0297fc0b3fd58ad1f0e48c27eba53db7dd54a3228fc1cc3f1878ed725c508efab6016ab6e0553d048affab089f2468e9141f35c954c634c3aa708613733dc797074a39ee442ec3aa674eb10942b7479f2e459c352d03583e6b72f498996d3cc41b268922ca771419375594e3347c97e1204a9e7f5202db7c922fa4297274f9e3c96ca1afda0f8c033d007d630499cff56bfdef779a01b4b6f240519f3948c8c8ca0cc689a336c2ca54f51f60e6d4a67d498c2c97edceafb2ab310f755bd3f30adbe74e76db50a917ce7daf7de40192ae9efa09c3d19645d0c5866a1ef6c3dafe32af3d336676f7d1922e919aac076ced73cfde5e863b367f33190284a97bc7c31b17cb6419af45ff245b73be1f89ee7799e373ae9ce8d972f0f8b2839a43d6e412e8f4eb8dffec6bdebe5f78f4c9e3d3ae9c62ff3dc38241ab9bfaf8d8920403d7c449708413e4c2ce8646e67ab8a420f44d18c7eab17a04ee6ef6aec84e8d9f78f3e0a1041e499d14b299ad1518af76f54051185f3cc683b66dcbbeae40b3752a1dfe848bfb514ea92b28de20c6ad758d4dddde604f71dac6137dbed8b028294d27b65c4db48361e0b6998e2eaaad65dfdbe6c657d1d38437a1b97adabde23fe6bf560c5eb60c573e802dbd6088415c7218f8c781ac6eba9c62bb6c6ebb2977bb0adb767637ced1945c9c4b6c2b3dd5867d528e081289ab16a94f04014cdc21104c177f5c06d030fd6f9d50ee4c1dc23ca17730f285fed7dd543970c6145c27ebcf73d2e810be4d836f2e89221868858a5d55459b1d1c4e65a0a47e8112dd48ecc22e5919d340d8f899a85e4cc42e575dca6f23a6ee3366e3b521323dea6d59ab24c6d63b630148a9fe8c6adb1fafc3eeb8adbb8cd68dea10121d16a4e43947bba91c6c7407753a9542a9514f1b692912d3a7409d4c87c1a6a0926698b122d4899a6eee9d261aa36caa9c4529930536dd464e7e7b72db2871509e4c566b14d5d421926329a9bd7711bf53a6ea374a31b35236eb449698d7545f471f5a0947a513cd125fa8822162b4e3d96def5571009eb869ef8e26c451350525df27881c414cd82125c7102d55f07fab9296ad4882237e002099e30e3ce9d1a9c2d3a4e098628c36d407f05a9c5b1d495a666a62686bd1fe2c6f8a8881748ca095296454c230f0a51fe05615ed0d4815d3391eadba9f77d2a90c71e32625f4e2421f7237282deb9da6db77faaea4407cb2ce4852dd8102ea1efd1c9e98ced17e86d902fae6377d85600b23dd2d056be4e464937f22563205e3965e5edbeba6cd25d757939c544df89bccb7f5e75d25abdab5f6deb852fa8ee39a971b22acfbbeab6b32429f516f9e2a6dc9ab26e916d24f912af8f9ddceb77b9362903dd81c988462b244e4367caf630f9c7ac4d973883e4dc7aba7355b008830b7b452b3f44640e2da16285e3daca197c0cf435a5cc3368e41f913da5837c4929a59452524a39ca518e8e1b6b4972f5e4eb229501d7adbe6fd5715b70ddeafb561d4746092fc65871d0b67a22b9aee3c0745cc7898053718d245ff20c400175f1cb63bbfa54dca6aa9b9d96ab9283b6772bbb6d392c11adf76f82aa2a2d77014b83c82039be7ab85c736b8134c80da28f1b6f7e612d3aaee3622075a8604804372052a739226b0b9bafcc17a74c1565ca38f1217dab8debbaa61903c7aea90b2ba35a085729bf54973eaaa8de367eb5eafa6069f3aba7b7cd6ef6e7c641754d3368f3d264e55d2b292dedcf8d72e3e6492fea8ba96293c23870ec681dcdc9a339755eb7f16b3b5755b4190b3968bbbcf75d6e38ecf6db217dde8ae3d7eac9fc5a0eb1dcc675ddc6417553e98d1d8d45292bf148b26179ae6833a8a3cd8e36c5710176bee9d82cb4c9e6cae24666a1ed1b1de9ea89a3ab21bed0cc102f065f23e594f21e0bf17f885c9879da59fa985655acd2706006ab27c4d5192b17889f186e4455175f1262f7b45a23f6a079126d287186e821b1720254a24c14b48b2162d308b4cb07542a88aaa65ed44694ead5f916e6c73cb30185d149670e49392a7070557c1ed42a74d32d9618737e5cbe1f57135278d4c86e35db30a8a28509c698f17dc6886d025b3482273450a60a0bd8ac51c1ec6e4a631877a6382171c1040b668d0513519bc3cb3651fdaeceddcfcdab7e64aec66d49be7adc94eae66509f131d967e161d8a665d3c262b1865879169494956729cd580e726a543ad0e58b1d373379d69284b553910792d89440a9060225dacce4596bac3cab36639b07a478c1115348c869c14c9e55022bcf7223612c2bcfd2c2304a87ce162bcf4a62a211ac3ccb8a8c51cacac232b2616dc654f040133058811431599a98c9874e12d66aac7cf8346331bc69c11466d2cc19c365261f4249585f61a54bce0698c2f880185ea898c9875212d65658f9704a3eb42361661846cd983963e5c32626fac0ca8761648cd6c2a419a34a61d48c51248a48a34d1d341c5063260f4a49585761e5c1a9192b12e20e0bbcb0d140131318b334563e349ab1a2326a8e88828402178860aa6b563e44920fb348581c86512c148b1c2b0f423151909507d924b9b1f2600d74b23246c41b33ea8051a74a9e993c4893b04663e541a41913d28239456cd1040dc07862269b04561e549a3186928325cf962a63c01c3193079724aca9601a03365db1f2e0990f0fc3261e3c694cc9987887895e961a7961e53fa5192bb2a2f4654b124bac81e68c99fcb724617d86e7542102323cf0e48406accce4bf2609eb1158f9af3663498cb278c102355858d1c54cfe7392b0168195ff9e68dd4cfed3c2b01927ce16183351b5f2ab3b3336a3a23ea3556dc6363a5b8e58a0e58a193833f9959384b5991288a001ad882eea8400895947cd18c389521bc2898a1564916626bf9292b09ec2caafa6244c7e6547c2cc306ca65985598d593531d1adfc6a8b8c4d2719d42b2f56721a130cd18604429cd1812a3379d51d09eb32567e653463322c45c4b1435303c6163332567e857486955f6591b1d54c5e158761b38b8a8dca8d0a8a897e587955d38ccda525556dc968c6188e16567c61461a12ac19c14cf6182bd988096304493580b26606b30ec18c711d19345144194a6d8cbecc5a0a2baf6212c3c3c3b039a1a451c78e84f11d26dac0ca7b5033366993163583b17559794f69c68a8838e3022b456c91c3549b31cd18d7ba68b3e45403830e9899bcd724615e6dc6f84d15a82ba4aea0428b9599f724619e1b2925e51949d998d7c4443a248ce53b3bf249a963c3b98162a21c569e9392b03b12c648302a9b9ab85a13b7d9b9c34438ac3c673463b6042b1043cd192bc8126626cfd124ac9fb0f21cd28c010983052880228618366c662dc6ca734a3306003370e2905933022a8e66f2dc928475182bcf3149983c3746c2ba19934a4a514565c450a38a295d98a9c11a33d94e5816e30452a4d0b860cc0ba6ccba0913c038538416a53388e862d660acfcf68466d3c230094542f1b19246db8c588d140ea4408a285290e1c44cf69265039441c118a42eb8987367d65fa6c8d891b09595a76618d65ad02626fa6caca1644b29edc8c3654d1934a820a366c6849548f2348b84d98075970935d9c8582f2db9e9a66e9a35f96934634557f07c9962c454139e2a66f2932661bd8495564861c419222883036b2c31939f4912d65eacfc549a3119cd0e9ea9139cc942652695b0f29309092b3fc74818aca934953ad2ce1d269a5636529384b19384f1931ba8103603c7d962e56592b4226334cca07e5416db77fa3012483863e5bb36634fb2e8428d242e508caacc6483004a6a4a4a8791316f26df63ba368fccc03015bffaf2aa3a8b84b5ac7c239dd1c5ca211584200d0aa0349569c14c2a59791d666c88121825bec0019344c54c7261010c2e43c0c00c9d28303329caa82943849167032420a2ca4c7ec0ca1384e00b284d8881a2a993b002089ff0a8a44b17094455889899010100000020000316000028140806c3e170602c8b5451f70114800d888c5e7046170844698cc2300821848801060000004144046068664600361bc90fc54ccc6f73f94ded1658190351bd2d5a70dca9c95f32f0333690455aeb2b00490be5b8980e8da8013d086950b11ec2e471a7f66c39fc3c46dbcca0647e3cbf1b1f34b6f6565bd91b3c7f66ecea2d2c8b2f680b11b2eb4337b4f931e0648a0f49b27d26e41aa33848f698a3cdd8a3f57805d99d11401927edf2c8b1d36e40052338c93c0754aae63196a18730b4acd69f31e8b6c8057186fa41b6fec2bbf854408c3382ac28c0a73a9e806d0093add63d7d4e27b82615c27c5136dbfb6d5d8eb74d21b4ecf7fd2a97c95c6258c528f6981c36d8e2af66f2d0f3d67c735cbd2d7ac11bdcbe67cf8dd61dcc8de4e4dd8947d0070bca6ad858f2af22194f5da6ea15e323b94e3643fb46e867f7c75084c5c3cca17248a923221892c814bc74cd5c0ecede8ba6be981d9354e56968dc9284c882aa93c0645def86e496cb88a1002301f954b71561f5e18ed002df49e27bf41782400b86940ce60b6e32999a4eca91a938f6c187973c86160f77af973e52ab90b7d2738b73d60996f5d852dfe60ea0116c90ef9dd15c5ed42781836203f821f20bcdfae753dda56904dd721ea8dac9d15d985be90ce8c54a2bacc3784364d4e17c16e8fda9ca534163bd870e8669861d9d99a717fa022000d57b4258df0ccd5451977943ca696b19d51fe5653a8fc6be837b0cd09cebd543eafdd1f3e3d6aa18359cc4c5967443fe1913aec4b28b6b81ab6cabdf6e6d36f24b563717ac0647b3f01f3dd7f5080318043f990c643a2ddd4df258ee283ebe378581455e0366b100dfbc05e895ed2cb1212996544e900463e0541281b3d781380a000414267fb388ab5aa9201a6aaddc73e8728ca33ff365f57edbd8e71eaccdd72a26848de3cd0e0591240510088006b37ffb5531119dd15bb68e7b760efb5921a6e8e2b4e78e911c1971136015a13be2e380a4e598ba6f0b49278bb89008ca85b9249e54ea3b568a1ea1023b632a6203b040a94d8216f4339f7664b41ae2587f49b0a0f6b5ab942094a1ec49e05260a56103f474b20323f417ddac61582ee55c5d42df8b373afa591a104ed3730a7d5cb4e6fcf8143f7f5e199755b2c3a3dbf4c60eab2017713416033e3e9fe7eac72edfb6f80182c83b089a261ac3b04cb05d602a29b5cd68997a6ca14afefecefac56b876adb73032f341205eb53f62ccf2ee4d0b411e3df5f31d0d7618ce276b693ba387620992fab45dadf370b9541c642ac6e129c4115b10d40789dc232ef233b732e6b1abea3c8721cd6154fedfd8a04c02388ac3fca5a19e307b70984cf008a9ea221a51bd2d57cf44a8339381dccc1b4c7123a0bdb082497dfd74f75ab1b8ec4005def07ea5caf507c755e35e074c5189c5d1d5db3670be19e3743f2894316cb7acae04c605038f180d11f794f5aa18a27ab8bc3670c9f7b8030340584b952945acc4dd0d01f33b99cdc2a213049a07c5eab21246367b806bff7bc7cd457eef6d3105c148dcbd1252827918d207ec0aff7ec9df93420324cd83fad6c20be12bbf2b01b9bb595788ed6861dcc0c8414f0a4f64c408019cd35009ae0ac913248386603a97e3c570c667e1b347c222be962566d9881fecd576b0006098aad58393a044166e15ce0378712d600ce033228da4ac2661279d67222fa0575d71a247ce21a6361d9a5e3c8f5fefcd332e58aee1571b1a52349d2cd20946bea39ae0ea448aaf6b8a321f60af11e1069dfdd4583a8ca68a9b5f4fb6d3032ddd35b641dc9e3a9a65bc783ee481cc06b030e56cb73c176f0511306e529fed41b913db13e11959f9ba75f54e77a04aec7c63fd91ab67587777d0c6483bdc75dd0fff083bba9f51680dc69c2f87d990f229b62670481558746859b24384a3d9a99d7b7daa59deba0bf6649eb6a8296ce95bfec8d539d3634dbeb0b085552b7ec18d14868d248ca46b8afba2af3812a488c8f142349eccb5305eeffd824231230f202d35fad30d24bc64694494e2026422901f9a718d7ece3c7f6fd08157401ce077b0e2c752cb53d15249cb72e654bb1caf3fe6178c235e4450e68f6b0415b69e03a74af88d253b1dd64023f9a03e6b517ae5e90adf489aa04bb82f571097d1401c7a218f692335860981c135cccec562970358710f268c66fae342cb7baf1e8d1194b27bc7429147a366d3123bb556fc0ebfe0887d384083b000a0e2dfe38759638a8102177109117088a0fbd4c6949c13e83c7dc661bd2275490569695c2ef2179f4b8be02a221b12c69eea14f3989c72a7783a1076de9c383b82db80c565677088adbbae745bbe509e7a45104ec6c987edcb16374f1167c1ae657672c9a90c6f780fa1443b616c1b5e81e8b69ca1cb43178954b55e2176ce541db81c1348b115415d300eb8af82402c65f3ff9485cc81cb723bc4c77f7f8b95fbc51675e0b1ede5ced55ef4f0c01e73134ca230a0fae9a5e324fcff84f6b2df8e07e237ae9a9c87817b2da642a6fb4d321a73439a45342d0897821fcb71526700ada0963f0d2e1694349d70be3fb2493cffab09f14547b13b8a72f30d4972bf422884b2cf921efb9bd8151445a0326e8a6f77549cf8fb67418f83acd65ab9bf4eed3007cd32650bb7bf2430a674a7ee34cd9360d3898ed608ad5ccb55ede1a88849f4f69c55888de418ef52c2ca3a0c2532fd41a494705290368b37a5be52aebedcc312ce5baaca8da39bbb9b3e0118b5d5a8dc90321bfa164c5827497822be7116045014a53d01c03442122a0db8006454d4c730aeab1453e776bde500bcd05855045e9f84701d73c34270934a1b8fe262ba08202e638e3080ecf5f9146b20ee02642bb83176152eec5a203f4dfeccded4fe0c47e893ae811f12980b0c750ab772d3414688d8fe67df95d2591d95446e23e79d3b8a261da3a215dea57d69ca8a7b1b997741d001e97727e8c3f4a74d52501ada13684bd3509adceccda86b21f34144b2a415fd8631ef86a0c4d0d32de425637263c48ec9d06fc3441cf36fa642101777b18199e49fa732bc03996acd81402c86fd5761d5ca01530592e4eac0d5d058840a3ee83d57d3d2c1b5fb2385ee9ce7d3f2ef2fb84b41400059c623f84caa6e43b16f25001cb90534c8275ab1ab9f0fda87db940f4a429ddfe05baa88ca24061f427a2e65f652334f5f27eb9a0c2ab0372ff9764ff787be6706c143ee8e143b7e9a05c89d7abeca4531289bb8fdee99b0f3d0a2fe914e61c353228f48634a6194ee78ac2739da4765353fe4daf891070c048fdf0c989d2eee423fa4716cb1408c0ed23c287f7d79208228ec084210ee3887ea85d6e26f043801c0b4b1c413dfb79936e9f1974a85c417df72904b1cdbc3679f104b6e9917eb672478433f143cbd70f6a9cdac6a63cc7be4c19d4503cade1ded0b25fae22fa422194154fe7db51caa829368f01e51f228568bb692d341aaf0400093fbb46033cdcd5fa64fb01984ef7a0f1196b9f0e9ac356d9e2ecab191a653595625f2a412c717f873c9b7f32f4195b3b9fed5718dad1606f50b53e716df61a16fb8576e4a6b906d828c575b251d88d1110f3961b3fb7e74008556ed50233bcae854f78e96837bb9c2777fbe314718d4759463e0a1d136dccc4e054cbb8c889b1c72846e6abb60b69ab3623c60406258b6469cdde28832b060e3f541dc24171a7c2fb9a4eb2f40ef628b79ad5ca6241f16bac76f4c8c6d752b0a3144fcd1b62a0db0fd4fc99147aa72e81650174f4d2ba19542a2ef2e5713874477722ba0fc5ff81cfccf0885b3a015ec400b12b769e2f469bbf5a78314af64f4c1f0460ab7a30e60f1e82bebefad895ae45a931daeeeaf2d0c519b6816c090d1bf1f373df338fdeca5bc567e5575ac8e1e75273afd52adc609b15b0e552fdf1b01ee6ee32f1996453eda38bb0c0c50300ed6866dba9281815000154fab51f248b10bec2b643dc32fc967c6b48fe21bd11f592b3851de809e10034df75cd0538c0ff178be88fcef82908a3fb83a8ae88e82b9b455e44311d9cfc70d0d9c9da2bc65fe53f054e98b8739860b004dce1ac54a952430d3207bc26c653c055b191a633d4dfba733c4e49418d4a29348acdf4bf79bf84e929bbf03b3812533968a3a96d9aa184172e9f8adac2af0a48a59f6dd7fd00b22e24858f36a0d9ae026d9e40afbc46f701a9aead557924ac6ccb5e1b4f5617d9fc9cdc3113ca6950d9068d6763b8feea4a98d39e009cacb1a129c103f951151d05a96c6267cbd8c1b4040a265f428e070a0e059025fa4ee733436441e4c416071c474cae3a839597ac7601da3512b2693905ef8fbfc49372c10d8935702b0829d46806d75d74dc59ed6ab6118f3b1978e79dbebf3a705e7ebed564f48e77f838379e9bd3c7b6f093b2a91d08e1230c88e10fdcd4bf28284091de464d6c09b5578786c1d07ee3e9104ed48bff99fe9e8f69dacbcfdef5f94c783a748be18620c1bf2c29d1d06909c6701c83f5d0d30a0a560762b83bc3bd362d83580ddc8500a622663d11eff243131ff48545fd73cdfdc100876950259222c9bfce8fc28f70bf04e2ec11964148439a2cd064b53c12bee17dcbccc7445466ba9e7ba2e9106673c9898d2e95dee0d645d73e9418e0d7258edbafa079da67a4ef663fb4d1168a977b01b85d67ffe36e52865d430dc2786c378487ba6e846e9bfc0ac8bb6fae5b25dc8a6e2279a3669b92de64609573118b10c051033eaa187a273c6ccc8488641b3119e9434fe17ef719b6a7c2534ae1847a8ceaaaf0e665e5fb3e1902ef303cc28526ccbb86bbd85ff495d5bc149f956be105457c77c879d66760cdd3140efe14bdb00c429822568c74bee0a5985038da6d2f7462a506a090ce637fcaaa940429ed3a2e7bc67fa04e065893954cf0890eff1b9df22f93dd6d1b389cd9d0bd1c9db58323785a586999e4401de03c53b8f9fbca20381aff7b6d5435575a9d6219a8428623460334fc499fc2db46d0c4897ef9e3fe5d13dd43209e6896752f87e846a3642515818d533b848bece6786a6a342b6074e5c23912f9dd4d38912366bf0baa8b085b1cc8b7100f68550c733d2b9b412c8ff9031f29d884fa33529b18859e36e89709392543fa31e035e4dd98b90d1c128059dfa572cbcf897de0daefc91e3beb0422ea402a8ad8324ad8afd9f96fa023e1091ccf58848c3fa1fd98eb0287d40132ab6af31c444aa56a4dd404154c58045fc3ab2100fe398341ffd4447725a2db79be6b5ae8ba4ba265055aa8582a69abf241c5416faf74f537a16bf1ab45e99ec30d8a8f78a4b4b59e6a4c00ae6dc0a3b2181b3dd707b2262b81230acd56b0a6a3a11f734acc6c044e2ad710b180ca40c493beca3b78ea2b3e88503749fa468d7bb89445baa167178c52f69802bf08ad7c0bbb711cbc67242ca8bc8e5e3b22400097af79d7171446daa115138a8acb9c756c4a4a9a0c4c0afc1ef70e7782326d8ee14c1f873f6d9a0e27ef845660f2354340317999aaba7c72353baccc05821c29829af1cf36e13cab2893e7296413c667b4fdb9e247c2de009762c61ba0727692cb0f76f90cecaea812add80aea8d7506c147798938c657347be5a1c8c40a3c7be480e686bbd35110d4209b07fc40a24f5168fdf85382533f27bda9e0f70363380ad823cec60db5efd9448af601c801f9232434ddf261a3677a73ce61d40c27535aae3e4c14eae0ea93386cd20031e3836bc27bffe9acc556972afdc523afca44562d66c1cccd5fae7a71ed8faa3dd3855c527623a934230bedcd390f5f38f03f15fd18c456e5bc9840c72db92d7c331f830fd180b7d5f22849786b9694c414492a87d27365484acb8a0f511cc54a39292628472dac94ab62b9c28632f16994263129313ee2282f82832b9135deacade795b5cae318751710dea6ea23ee61fc5014bbb384cfcfe531e0e67567b152667c1465218642c9b8f08909e357d029a1d200518d5a430d5baac6a68e796e3dd26037197d57e777e499329170d8e56bb119f3dd7dfeb30e9e22b76fb2bfe30e3a3e01dd8c70b3b90cf29a5ee361ac1d438257ae2b81b2f6638d83502d6e3e49534a80d206284501996253e351257c4a568ec617a74730219a69e2f80980d33b407ddba9be169e9ec67c2ad6a7734dfb7c417cb3fa7f1674c51ae3312352a1f390f1c62199a879c8a7371873d7965360e95b76c53a23520d1aa536aa72c18a0bf85dc414c4d2bfdf44815fed07306a410711cbd735383dcc010dff3a78ebffa88f755a5c82c96aed69efec07ff3702190ef6e619f299908b0e54cf68f02e5719fc3656374427b8413fe3ad39df85f5f75e42bde3385486a60213c025c122dfbe20bc65ea228696919c59f69b6feaa95d58fbd290c8f6398670599f40689a450e157096903413a893d41b7b08594ff67725f55bafa2703c64788a72d827b95339c26cf6ce1bf471be074f013b97b49535a94cee7736317de496e7a2a1c3dbf5b70912fed8fdd14cf412f7e9090d440973c744972a4dd9516bd921a57d3896ccb396762c294e484994bf96309476866244cd15c5ee05c1c53975a556573e2fa236a9e3882b91e75e3e777a26fe1b99ed2125559a14840c61a5bde10807d4daa79adb4ff8d08c8483735e3feed1a9f3946aac120f13d63dac04b0ccabc403c03b70ea1bbb3da0188d9159c2c6a5b78647d5e28f1bd0ec47ebefcee6862ef30537ba7d9b9bfcefcb324829319455a173d6fcefcaa52e619efe379808073e8a822be124c66a946c7a33683c447db4cab8783dd31691656c94d56114601f8b5c4b50ada84971737a0419956b5c251e77e9c5cc414170a00cd2a36e64109baef8aac8d39dc9da209766a40c9f646b661c5d9047788ef7a857b40b4f6437d818b5dd7882707de9bb8ff643bd7dfb3756a998442ba1ab438cac53701903f06b8122e8fed93b5404b70b964085f4bb2a5460108481e82d303ae214ee4d01596caebae0445281d4abeff00a527c275ded3579414503c38f7a82189a0d582b2e9f42afe3b84528c62a25a7e418b63c876ef84f3fdb1186baa986b4ceacc63d8226a68de07daa2e7da59086a021387ff4c0c9bf6a4746caf7a2334490cd475df4aa2324455b698095b270ba1dab491751c29899ea85239296e60e70124e274d5c3f7a1ae4aaa158f3c00bf7f6d13a7ece60316b1fc3ccedd87897f69c71cc3599948b322e653546594a926224114ab72fe51ad827df1d22509112903f25f5aff5d21cd58342f44bd775c006f88df50ffcb90ee5f8952c18db9cd39c168f83f0dbcb5000c08d9e1f60a50cf20d22a153b749e5b174adf9bd17fb8411ce078d8c84c22e2b350bef04872a97b49aac80ab134a809495f4bfccce32ef10a83d9fb74765e41c0d6d4b15fa50f15cd23d9557c2384e0f696ec85fe96faf1cbb58fe9c72ee0219999797b7c2992abd30a793ebb20b49b250e7a54732d72d0cfb411500a35ab32260ca0501ee27a04f8b081b6a04da0d583a0f17c6d4f291658dfba3085e022e519a1b17ee31c997d3874e48cbce1566b32174dc64b587eae45031acbc12f5b5be332ae03c93f987570d10dfb30d08ce1a7f2566aac08fab95d7900ac5cd88d0f703aac7342ac5917243485b2421dcd7538d8150bb0abfbff32dd93166fff91deb4b9fa0d7a8cddfa8e4dc9d82892d4c3db4149d87bb11f48705d0628ba9e409e80a15c991acefc05ed90bd6630cc4bf6358416b9e5a872871c8f8e9a37a9dff043dd0bc055e7033ec715b9ccb16dcd9ec190f4213f58467e50865e85ca358cfbe4bcb2c28cb174b5cff0da6de42a73b6d2353a605444e732f8664a81bd5b3571ca5c891e6be6b743b4f5489675c025aa9785e8da4a2d6ebb495d1562b78d0b802239e683c5188510b3f15e98ae99ab843a7fb8d467c85a036044febeb01a40212e9877e99e56cdbfaa6fee4f5593145cdadc8fd64a17904abf963e5168b3e51999510d4a2ae1652e5ad94989b8f3e1bd31a43376c8c9e4e87462fe35d0b51fcb580d38096b349617eaaf3d2bf3b2a09ab434eafe4f56b46869faf2024a493c5d1e0a34acead44b7142eeb7f924e239cd9adc458c15cdceab6b8e595ec4a418e75ce4a532bf54fff27c42518b2cc55a8f42d262a2cf183951e58d741e79c0853ddc63c39aee43a54151a48d1c1f1c270d8fbc0a288ce01a23f3c1aa84934291dd0c53e1a0e259968bd4c9319c30ee3747dd3653d3d5ad4537c38710f152fac83257ddf5ff51b82c018381d65f7cdd1ee1932fc2280e24f72f784d52ff1e577f69f477d48fc4b17fb6d10184386b616bd4f939c05d572511beba4ff5c7ceeac8a515356d22955564a16c21cf0e2a769d775d07c4250fb883fac6a101a04b6c80799253f598ab55738b51b160a0c4653e503c561d388a9bc0081d8fca412e1d018a6cf1482744b0403749aa93e6d0411a2d971bb870400a5c6490f2615295762689da1c9b25303088e598bc50b000aed5d66e92c00c3b45e8764068986860646bad696644a2160f3b34e0b450090be4b0bc42a518cf45325e2b1314c136904e99e0a068814a77dda49224483e17d0f29084a8d103e4c2a56afc410324793e5b7061010721d8b1f489128d00814f11e4556c7d7b5238df96064220644912d5791486811a35e64e7c648baad74e0bac6d1dfefd14a01a9ee42fa328ab4a68e547126e970f7cc52d9094a9354291922b952ea2f4b3cb925eb7497041540e06662fabb645af966aa4e9abede9ad66e9b2aff4d3f474e2b8f4e856ba7bf8fa795b3a7d2af4f0f21bbedfc40b9845059cd504c88285bae2851d0280e7a94e58d94189e14f758ca6a963025604aaa8ac06db1902d1b97d5900f7bf9699f3f6e31e75defc0153af10a6ce7a104542eb706e18410f40b7832debd9d4e6e9fa7ebe8f079b91cdc5e0f97a3ebf7723a3abd1e4e779381f841f806113bc688408584d729b12f9908be4e381a8a31679bcd446a9a8018a899480797a622324ae15efc3b231f9a0fb1032a10f7fef80dfbf05533f6eda04892199977fbc9d908baaf0ec00addbce3117baf2d621f6186b2654122c199008a48fc2c9b6c8e44a461d34449cadc26c46912e1cd954c50f211471ec994f0bbc1f1cc4a56df4ca065c9f354a214e312a62f31e448741113669518d35626fba65d9e4213010688b9d6e4cd83f43bdcc425339634e2a44adce10aa29359ed4e9cf424e751977d7df2ad259b2e409967502cdd1c14321412cd769f4491a1f300218ce2f628c957393724c52e0e873a550a134cb1c67644379b62417c55b5f314be503197aeed432acc985d3e399585565c9e52151488e9759b56716cb0926b56c84c4bbc205b5922b952c52b7fa55bddf02b2e112c14090baf77ab0f8a653d79ab65c882f6fc78d7ca528a9ae59b3fcb6a6f6a98e5dcca5df0f5500c50be429c9986348e0de17b3b5cb13c3cfe0651d20db1568744853e89cdbc13033a281a59f11161db478ab516491e84a41d49641a589161e847869ed0a8b0614992d18d044b4e828f3c9909186538949415e1a92c04adb23c109649305986a16f590f91cb32a62f8361c04c8516b31e77ccd2786626a29c59089e66186b95346358c20564b9eadf720133ce03a32ffd40eaa4007fa7062b9e32d8f62420e05300d84f19a29a4db504f53a701382ba50148c8652f012858251140932a308908d0280825406245208f24941a052aa8074a901064c15e03585c06eaa05ce53118c4f018043a50029aa0e5ea932584ca5204755003055034cac32f0b4aa03fe2a0928ac2050b36a80a05500db5630d05b69a0e9aac1b2ab04e65e09087d15800bd6044758167c62b500164b00842c0044b27ae09795606556e0a56b4f05b42af3a5bd619cf60497b50b34d71e80b33de32cd60454b71430de2ac1069706345c61d7b33d0ae5aa983ff794715a08a47551b0b02b766ab147e54943185911cd7804234dda87970ee24db202545d444aa944d5049b55f0548b1ee682897b6d85b0a3c898ac54560b3b5325a675a16b01e036fafd0d0620b7bed01d8ceca433bcca514fe9cad738fb85dc01298741984be1e27478764b94fc70b1aafca8708fec1c2803174bd20913e2a6b939725e17a5b97432796a51150eb7c37f37952b6554a1ac08fc13f065bdbb5d9e5e5fa7c3dbe7eb76bc7dfe0eb7b7d7c7e9f6f27ddd2e2f9f8fdbe5e949f82cbfd800b28f2764c9585f4d7a5b85a20dc3e0ba7a0b6c03a690746f18d8e6ff216d6e3cd8ce1c036c962db41d9802a4bd63689b9f0fb4bbf3601b660cb15bb6806de00a91f60683edfe3ed0c6cdc3ed9831806df942b6815140fa3b0cb6f1fb503b370f6c63ce10b66516d80e4e0169de30dcceef03dadc3db48d1906d8975b601bb0a140253190af32949b6f035863429e912cf2f45d6997b785981346b1b0cd7ae02a643ca15edfe7974a4ecfb731a1867af9882d805449fe826839efdf8a1c9cdbc9980ccd723c431a5eb93098d852b718ea104527810797a21072a0d8061fa66c32e309bbfae1bb665acba2ddeac65eac90d275499bc0aeabc87b07b6e4155b1b52164c3ff1b349bc1ddb7fb110e376c8fa202784aa0b418d7c802e3edbda70dedb1bfb66177cfb3563ddb91fef9636dc76f7c5bcbd13cf7e6d9877edc67fb305b77dbdb16eee8ebb4f1bb61defb63f304070ddc7e7d53f87c51d8f4a1c6fe29498c48a1f94d4fd5d1d268009f93121bbc96331df65f5fec4c2e2172719a98c4719f50870d497d2d57bed439dc03bf54759529cf5a652c54ef6a14600b6590089384af8a34ca58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20471d6972295faed45a580f7e88d9ae4f1d5931a55bad98b8ac176e88ff2a471d593e21576da87228176ec9fda28e8f74abd082def439148ebf54e25c668ea454defebec498d24a3e98d8a6438ea4ff9aabbec41f10077ea8b2244f8eb4da58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20438ee4369ebb5f4a58ee2abf44c118628eb43114ff5f6a652c263f4464df2f8ea498d2addec45c5603bf44779d2b8ea49f10a6077157703e8960d09a0d11b4e93c399239a68eee74fd4129cc879b59f790434254ad51a278295d689016b75374f74e97f9d3894e44bc4a7347d4cec4bdd17c4a7443e238e4aedfbc5ae04be222ea5e7436256eabf271e4af21171534adf26f625f705e2292d9f11a352f67df17e25eae1a38e58b13213c8fad98c4f40f3794bd2f062d77c3484f6e15afe7328721032e9cb7df1527a6a7a985ad20de9c3371be0f9387ab05185611dc879da7b2028bd5d9e68e49af4c367556286ee33142e817608988a5a8d10a726295ab31430c7de54f6811a6b22d71d54fee78b4fa5524e0810326d93f5991af62eae8fa9ad05e0d824f15806cb652635da6e60d5174bc6000374f1795f98ea65a912bc77df5e3dea0d1adfffc808ab330d878aea1c1d98a12027d183d84a6f121d849e2432a30b022e82395d38aeb6315bb4258126213af38a855a6e8fa5104c2ab13278422ee8d1a80054f120053846e6fee50da72cbedf3644783a25f4c16ae12059bb83710d8670cf342e4ffd105c3581685852104873a32046c140ca9fb60858720e80a22eea06270805391b0a84741cc618d070ffeb21e0ab66e26051b9a16d0b82f0ce06284efaae5f3d00d0d535498b873d5a10a1d420cd488bf3b10f01a022ea07a7c807b98d0b84f51ec63901a89275758e424153263724b68b4b4d5f92aaf9f2dd0e1471b31744f884fcc6f612aec318e1ddc983b5782ff6a777e8f7e4d613349df7ba758bb013ba27fb2694312fb4c639dcb201564363c86b95bf2417629950bac2ec2f897fae30c745b905268e3ce6f93f449daed8d867f666fbed18d620939acdec110ea645cceab8748d48aa3f5bd1f2fbd4b5524884bd5dc7f19f7c902fbc338042798c1f18b476d04e963502d14392834d48e6bab936a8a21560b9c71951e3b916b7167d5b967a1fb9f815a2cbef95a5edd0f138bc32aa4fd1808cafa0299518f58413d3e2e23f29da2391e0e63021a9c3e088789536fb69b877c30bf2099bf46a5f69f77172477b6eb70bd74da74482fbc91ecc7c254a0ed764c22f8f603c2d9d63ebef619ad59e78ada5d2d14e885c5a38fa0001cc380ef4c863e8cccd490037ef79dae9076aa579bfb3bf566d8b53cbb5e376dd8df4ca920cc8981e02f6b3de07079806a8df9e4a4fe4baa16de681a470bab6fd38c14a8c2e51fd211f0b765e04a1dfdc5d32e4dd6bb768d5382582f75e9238e99082f5a41496e606a20956e3db2a60e8f6f163b592489b1c1a89fe780c669f66556d01ae76960e21358f732be9f42e0c13f54bc93524bf6abd48f5101ae29138a478d84060ab2d6d5bfd2a994688c980ad382faeb983eabaa29e5fb1fac29c6bb941524103ce6d11be19e19a47c43ceafa194a670aab581a4f42ec66e4427742ee48e022055b244c90523ae9e88d82c298b810db5dc93dabad90d7f38c2768c1a2ced262a3869f9c01c6ceb08bcfb908ec7585c218b13ae665d00017c04661be2149eaf78c536c1fb11f0f15163e52b91a84a92c8617dc5f1a51617a67e53fc75b7b1a08c89942acc7a2a4855b64b8315d3438d05f46e2f3286583af2cd46c74e907a6e8bdf19e6b652bbebb25e25b52bbc90d9cc1e5bb51cbac50f51d7d873391d40da8d51ae03ec29c73a5e6ed79453d6902507c70627d9cd21c7257d3774f515af834bc95cb397862f285cd6ae45ca75489e0cd8a9c06d19c806b720a560c9c00fa74e2216cc40fd1233f6c9c525477afb997015b3d3fa20a45efd05e4e1f572470abc87b14ff418f974bd6dfad1491fef1fcf79dd07516850fe893dfa930f89d9c0ba6a61fc88b93417f2a5eb81ab79be5fddef779428f1b80e6f1adba3dfb410137c50d54d23738ac93a760030d7914767c851e7a8197a46062860e56a169ad4bc8d3a7414cbefe653701a15024f7e10153255bb097e84fac1a2291b5c8749ed90497d6f6ba2ef1d5b00809c26626cf37fdde48b6fbd5ddabdc28231fa3aab18546b5bffe5fee68ba0574f9fe703857195ce1365a247049531c01ce88bd8773259f0bf3a8e020a1ae6d7ab995fe632edcb6d87cc3e8054375bfd28a79514bdaf9e77c2c3c65501633b82e60e15c8ca691c676248f31d2e2d0be07960255a45b4800d093b2d23c35050259996252a35ad388c8afd3caea1ef8899c262b3185b9c25d2155797f455156ae70ac3552f8b01f4af3c121a0cc672a41aed59b57d02a1745a24b60316ca9dd6f02e5cc80d98ec45cee12fa86a35cfb9468f9f3bb5c3fa245a9b84f4db6ad84402570ad2c03c31c5bd8aabeca94b200cd7c9ec61f12922e29614045b1954e39001a74b202c2124417f04a04aaed8c7c219458f946890f2214f0e55dd73a30fb26d665cd83b496ab3cab83a9e8b4fcc2488b9ccbb66e070700c377d9668ac44e4df1ed689eabb2211c9c050e139d01d7e5db66e4eeeee01a5769165bf69dce06f31b50ea42658d453f2311e751a769232e7ecd68f90e63d2e60f04d395958287586ee37cd7f7a05b0e9e2d67085064005a2a81fac20a0a92036e95bcc1875f3b00d8e11405d1b921ae804d203118c9df4fe495106981f9e49f437d646a8dda1513ca3ad71b7a727a8869ce0d373e13cafa9b180c0a94df546d14dc8a5e062794b5c8857257f6bc035cce915f45a58c2394951a00a43a397f872f59f10f17ca1eec810d185672e26d6c6f3133f4f5e93f8c7355e53631741fa473b411b1a8c448c4b9b66c8ab95945d34b8a26898dbf6d5ae2be0e09030c27f69e9f97e0425083fed83f3ea34e007232d3799364f214cf30fffc455d02fe86b6ac8c5f437e3290e712cd336d2e2415bc0ae8ff492d1dbe98d043f2af4320b98c4182182805a45a669f370c0183321e8631d2b76a5958f144e379e48a955ff8c0533d4c9d54fb8efc8720d58bcec1a8a57aec326ed03d05b2a5f657735a9dbb1422b0032801b7ca82f649dc2b99bbd809a34b94d801f7b0d6c5eab28ebe5472c3a9ff7ac6ec91b2ee6a8affa968bfd1e9348d6fd319f05264fa848942c7966e45b431d796644e1bd7f1f3b721aede7db50c0fe7897c180e161c567e0d99ce26a171f8772669897c25911cfe0d54405c17a43cec60e8fa5f668149880d2ebbd2825e3a58cc6cdda8c6d10dc84c480971cf7d2415a9a9c3fdcc5ab2455ec50335c4115226aeef01154829f7841076863aaa7345a46ba8f2cfa0bb86cdf8b7fedb5af3141797572b8c74eaba3ff5ba3763ee3ec8f623fe10b172301a77dfab931c3f30d6bf2bfd8dc3cde9acc3b64c3f7df54888e3ceab3976a16d214a716afeaad3798797360e423dadba63bafdd586e5d2fd9d1bb011921935b24a0bf2a1835848995ff527bf8e593e01a3b80b09388bf81509589558ea6cd947c5e91517649f39347db76d47da0eb3da51d56c98fd2fe36be3e97a9fd431258e39023c3443851ddde026cb76caf8a780909cff3c556d7392b04e3f5bbf709a7953406b1658d86c3e759372da61e36af940983583504b7d6c9c5aa91842752aafd8d1a0482b44612c4a94162f5918a959baa92bf015bcd1cd4d66c40da0519cf87985041963a8a56472c6d5d966b8a497934ef279f052d420878c789d5700da812aa779d8406044ff068c8762492111fd62b4bdaa4cce6070c1bf979161cd5854655442111435b9d70565da6bdffbeb4fed996da58a46690f4cb336f49f63009f688a8c2ab318a28fefaedc8ee48ad4ea90ec8a36945e3106f8387941d2a8522b69c783d62964dea30cdd183a2df8d122d1c8caabe834cc4a54ed02c549d51d65806f2b25a57701ffe3af6084b3ff998556476f75ac59103558f2831aa73c6f052cd90ebb31252bcd1b5bac82dd16fb526a315d6cf40ed7d8f5d7dcbf178b764ea8aacd4919df54bab883dad176ded024a8a1dab5a7bd2f217806e80ea412a2bc6e8ddc9cb709786cebfe7133fa7417ff40ac8f57209c8083eee720ad6dadd2fac083eeadbbc0c2dc6ffdbe72748b72fc4294f24e0653bf2432ca020450717ce65f2a5f35d95ade716b2d547daa37a5cc3a7cd96b112e3064922fd043d4886f0ebf7f47eaa9904cbbeff230e2c2049b2123a0ddf57caa3afd31c35dd104cdf78db6454d0d4fef1b3d5fd206cea6215135328ff37740c2141be070fb2c5aba35814970b4839a345cbda187555c76c0753cfbd229f4e0b6e2482e125dad262ac51090202305a562a340dd4e5ab450bd72161fc8d61a899f5758ef50f8b5d9d5666b03b86d0ce8e6a0555ab7c157611085eb44ed23c2fa90df5799b7be69d8ef3d782a37e5c68c1f7fb987fa0d529b3e7afff86f1ea908b9a2b8dcc215bca87f03e06a26b01056ed13d04a2cc31192c65ee0e3054203b7c4be84bf0e88e43d874ff46607023ef425d0c60566dd1bfdb362acc3433aa690b8b08ae092aefc1623794498ca4b9d0cfb71d0080d031760e52d5c1d63ac067eff13224ec391dc16a2aba684da81c5f39a2c8c01fd83631f16106516d62a0cd0c9c2e176dc333ac4a81a293c756db166aa5784ccf42fe8f59d999883572993a07039a5c0282626277179a3a01e01effc84204f2ef5b02b26d2fb1a5a902f9e1cc7402f4cbe758465c2c0666d1ac1f6c1cf53cd47d394656854e59ce25881a90348746a2e5cd5346f35170e6b9adf9a0b714d97af39d89e67d2ca5de1c74ad00558dd5682708181add4dc3e9f4a0c04d156fb50ad69c4e078d3d6752473a9e2723ff30cea21741f58d7d8bce03cda24cf90316254a090f5b5ae71e308c78b063a08c299c2553d548975e100884afa9b8a3c7322b8d1d4ad6ce99a8551fb5e80309542840b4f059eb9d115cb3a9efe03a891260dd5b35edb0f8123336d301010bd362f2a5ccf72fda11d6a53b861c9126b40492573e256899949cc12b1fad906cb73880f6b6a16d6641411a5388d8e84a50bf8540734151fc9f8ac909e87233b6475981489892e32052ec5ca16b4c38668ee9eac990809ba0a252854800422166e03ac324429756cc6d73b1321a5a0e3eef8540d8750b57423e9293954b8daaab775fe71b538d850b9ea6ff426de4d45813a5313c621170a1a662964f2520c764b0531d4ea20ebfdbce53c1c4d1cbb352145d70bd51e95bbd9e93620111d121d6825a43e3174a4f4119af4c2a2819c46906d7486a621fe0946559a9847b65c4e6d0a0fa72ad46dab90172bf00d3c6c440c773e04b1fe97a8856eaa5175e8f488610320fe37b7babae768ad899cb9f3d07112d45e10b48b5e2aa37a74b34ae6fad2f11dfd4bed5fe714485c27c44f3f38a5da983df7f005433d494ba8a8cd095ac796154096dfaf1d9206429e9556b11ce1c66233e1f39d85e2363ff4643b772747bc7e33ce93923f2b075d954e5b8ad0d1cc1bc78884d45e0231dcc4c3011ae2c4a45129cf450940b6cab3f9e250f8a70af0ea69e04e85ff395d8f50cc3a53ec229fd3dd2e0add0caee00aad060a2c81d16266c428068df0bdc0a2f6530a6022fb75e46a676ef435123cb6fa3a4aeff571d8d256df8556a98f935d821a16c880fd34dd620006ad985ee7dd1cf7f547c77729e01a20db8e9643f283a5d00a79542d4c465dbad0b2b266aaacd74fa25d23268da5849436a0aaf6cdf456f3f561a8b2b8edf7e9a1936aa771852d7c47768ae88b0bd1ea96c2f8583bad27ade19a7482d763d371d32d4eb6c1ac951cb324d5e76820472ec26b0b86c2fd558e6eb731a1b199cc4dbdbc8bf4093baa52ffe367988734b306f1e72632354db70ebd7a98c9471507b6344e4cae206e1c68796853e022e6432f6bfb6f916537db46968543d6d0796d9220de2f723e0a7169a7bcccf6c63a96f029ba05f3b67fa567e6a98b9199bb23c80622abd2cc0d9234bc2c49cf67e1f922eabe14a46204dd4e5f378191f6f82e0e86bb51a6b71edfe2c449210031f6e4fbbc9cf99f6a8b0a96bdeab57c65d3365d77179d6f93b9dae1b193338a17e4d0a6f86464499646fcd3035075123f867654e6cfdb43c5db9cf4b640a91c94df7e1d6dc3275eb0125b8753633879f43ff6be28ab445b840b5f647218f7bac84f8d8800a220f045a1b7382f1ce1659d8d26dde52704f10f0f3b4442b74f135e07d025e82a8d0a283dc257d9087adf773567054f932bd1b241f54b22ee3b5220e7a1ff7da833184a5150a8148c4a6578d3db732de024b03e7edf77dd038284073416d201cc58dc9476f7b1ddb771cde246012a252cf909ab331de3ed67a6de273eaf81d6b84209ab0a779b7f4a5047603bd5d4a2da10d971a7cb917ba55f3e2bbf4c65ca4ad5f0efdd724cd4a01d9f5737a512fe155366d42d555e6fe297f61ba981fa6d8799529e7446e30b19ffdfe6a3409e584381b4b4d4042286b001ac114053f307fd03666efed038af32e1697786310c2e0e5cd4136a87423c9cce3056928351636f7aa77b10a3ffce918f4c9292b8ecd68cfb2f215594768e212d4e0f52d50a229ccd01d8fc7728acdbb56a2c27d011188a58a5012d685c064a19f32c2ad762e16a33c0f55c09f2f5ab7d30db742a351c0fbd37723a9a007d1e715420f5b577d45d6e7014bd8bb9b115b14c1659ceb6c29e4419b2b127cd3ba61bf12cda19009841c21db53cfaaac52e4f3e15431c64845b98758341e60cfd80bd8d61a50bb5851639cc86cf505ec63154f42a523f74b568422b11d72fbf14708246a9621aaa5255287e9db6f47c40a710df93459d850948ce90cde2f799f6c4a27df21474cf3111904750daf99dbd320f68b83ad02e8991f46465de9774e6cef2ca557a50eba0a97891da70398e309705a0ac2c31bd53e120e7852481b8c83bd8b61e238f5a4f22ecc14288b165e220e44e0f1c06d3421cb32b6e855eea59908c203ba3063b5332b47c3fdc79575ba122d6834bf3f52f4e131d0a7ae0faa90d5fd251e087f003a503bf47a6cb2306f9ed13abe804f558ecfb5606f44bb9cd81e4ffd0e94a7cca5e82c1dbd94eaaa0997e314ea867570a4416f1ed66888df1cb597612bfd4ad0aa3304bc34cb50fbf419393112803497005224a8d3b5fd07ad515b4d09ff23c384a85a8ec8855d8921ec92282ae263b0b3b12263ad343df9f532e2bd7c1048a7915bd39d9ff88172899fe09a3dc6505645ac482e368c8d781a73c4df29e8e0af6b696e2a918d1ce0a6134043f8f5ef8b151c1d856b68f67fa8733715c6a7b1b44decbc45f5feb0922cf8dda125209faae65f887620c63b7aceda27d1c03f56d8e43cbbe3d0486ec6fde318f8a0ff8a7863a19ffb254190f8cda86724a553ef00990ee2aff00e525346f5a96241ac4c8ca4175b3260f3a01293e207f7d5fcfb76474f0aa8266238fc6f4f88c818357490fba72d20bc9baf003587bef4e97bb470d187127882cfe95005389a6cdd77181649ad869f83256604d2712507c353ed04d3c3130a46c88f00adf21cc5d4c9018d0d9a77d05242c9b9f0b0e67012a3017baa6bdff3691ef4bc367e303d9141169f271fc4098222ecdbe5b231fc60ba4c9c4a5e193c67dd7a87da089f75f121949996fa1f991bed10551706e072abb0bb7d4f02ae70156913924a71b95f6f6a188b6006421ab3781bd001219660ad1576cb6ae70ce5ee5968672bdfb5b04926d125e4655924445837d8d171813894e5bf608543e8f1d3853c40bf4dd3f6dbec614383101fed99f5a01ddfb063586fd7ed0b26f40fe54f8e023ecaab8279ac15ea8ed63046382f279d7dce47dd5b8d8e56d9c99c05f427dc326c0b9e5c14c826489e5b6218af154f833de7bed3758f57dca67d5629b05889899225d2883e4510db2db200d9c4effbdd64b7b2771159e5eb40228bb9e37bd2b6e34ee7610f08c6cead879dd0c61420937b117d3dce2c56159333d595b7c2d78f8c199535c9f2126d402251aa5115cce52b3d30e12610624b6e251e7c0e9cdd02bdf137f96c9e1dde78f94cc4f08e3ad092501006d03aa88c27dbbd235a6ac3e94f730f06f8c9d1ee3bb9e1f37ccef4391b7380ebb379d7033033d35a6661110537a0ffd434bef75f05f80ebf89f5f07515111a667df964cb5cab84a402541d3a36330818b4180831f9ce72cfe19c8ef8dedacfc96cd69344b7d5a8c84aacf9db0f224718b56543b2354b80be9f8d9dff9fcd06af2820923967fa59b4f2d7e2a2381fa80e0f46c63c2f8ed2181f64e9e99fcbd836ccca51afdce3df244da96aff7955b0643d29378982dd8a6b3b4568799f70b790e8b54976cc709fb2d21cbf4562d3723a9879efa245709249129e68a2e9778c0501a47dd10205f2b125dea9e4d54385624b481b25a61675bcb32b7bc9ef3b864ed43fb2e8d77f089de1c1978ce72f2eae37e0e4d49d0ba7790bae58d18680b4028c9d28932f73fc685eac7db735e9ac9238291482b9c089b78bae73cb37a93fb2ddbaa8072c37367259ce6f10b492fa87c6dfad183cac987ad0529df118dbcd8821f0e479612eaba49c8ffdd94666b2eb773e1432d929183667d44ba5f80aaa0dc37e0518db51a80b55ece22af2d77f868fcd0a506c20a67eefbdb36b70974b8548376b8cfa5f3c0f13496c3e7a05dd919b952a8bd3cab308e8f0cb29cc9207c37df990619b167951a62a41926e4057432dbecb766650d5fae9004a9ec88d11544bb0064ff07a5665f3faa59fbefb57e610115618960de323f5d3bbc534ccaa97850881003cdbc3d21bd308cbeb1dd1779a5581f63bbff6cd9b9c6f565027615e285797ee6dbdcaee6e733beeeb59f2c43656e8552a8074303d4165a214fa918fdc16efeeef9d950363db441764122c60343c93a31e11b634dab351e35fad2f2d01930bf1bd037d738022a93fd06f15d81b275f79ccdad1555047bfc6cfcfe862e19d181a95c0279ce83e080defe46ac71a3af4855ea4ddfcfb6344a53f3a2e4bfa29648757a1eb9e5c9c52c1f40c7fb2da5a025cecf2a06c023fccea567fe521d8d9978ffbdce122923d63504442a6535f8c86a4b19f5d8c49c27076a145cd9bb1f2f80958fc005666be5751545624d5398b0fad8d191cc89a05396fe37b142c003dc77a076eb0e9ee2002798720ce66336d138d17ce5d6678177c8ad6f52a357f50bcf22c5c071ebdf0b268c7cedd61bf57a2ec5d607dae30efcc619373909684cee288f236a68b77e23c1680ca5047f47912a4dcdd848886f1dd118ddd2c58295a05c81b2a500ce8dbcfce65a6704bfe6a1f9094ae7c074032017ad306dc550960c924d74cf50887deab5c6ea8eef44d99043b3d53142dc42d8adc722263f1d43d1d0e68a233c25b97f38b61b68b6ee715e4874d03e70226de0b6b49c3ecea5fb6210e64295721453538d187b3bbabf2d974d8f7f38abb129d0703b8ff4ed38fec434f3857ce49db3d359030d633b02f219c0cc751f7499904c74185012006adaac4131de844287bc2e7b46c80a4314c5a9f61b41806a2858ed8e665a50d296358c39f727466a82442f37fdd556ae07b615720c0e9e7f4a55241e4941ca346953fd2853b6e8014c9e9e1b78be4a568be8480118cf1fb559c6f0141a54cef4311b878b7b41733ff64be58fe136ab9821b0953a2abab81e1a51df19773bca4930e2d267b9fc9492d257028fb72536e0d61a9f2dc1f5283c27e668e07da533857c9e2130bcadf6b23dabab588abca7bbb35cfe4ee59b768da6e013a2c11c65d2de29532726082339347db743e70a0d7ab17c28d62715e07bc451106c5d6555aa4e2c359b5e057198712ba0a9ed149321f4bc4debde59414ac18240255641069b6367ab9b15349d4f09bc1f6d0a927c6a4607047d45d454c23a4599424c70d3427dea15b496889dd5599b1085ce83b1e99af2613e38a7bb46e879cd35dbde6643535bf2ea61876fb76d72d6755a82b1615370aed8ee6b99fcd36645a4dda77045556b16683be759685af4be6a62a38d156c296f3b6240ad8e34080b739a5674b6eb3ec97ae127a6dcb41f7392392726126716e9010c2115ee8bbf6d0dda79d7d2d2a4f7fc7f45c6382f476f6a45ccdc04d6a1de030a50c4bbf9b67e43d702c3b5226e421e9f35e374c5d909e158ee34870ae37d87359f4be9ff8895039e8d1a147e233edbe537f1393119584b7c5ea40e03af700df603e8e5f54cc09cbae0d97a150ec56719ea421dd292914b9cefe90fdf331ffa20a9f9a7831d1eb667cd035acd5e360f4c6faffad8da3da9b0554ac0b1a3874a69a6e35135cf284dbe95b03d716a08722a1b2643b2ee895d2e8ddea05b92a7da6020d482064206072d175f9fc2d4098e02baff4f0f29bc99ed2b6615cad1ceb265bf55778d623dcf4078fabd22062da3d1944b81f35f40f7c306264648d1bee689f51e8a4fb8f0ff6ba2d92e5d1d20e0ec91c515a13a1fd591dba6041ef77b07c9c363d4006b01f10b8a025d6bb9c5910e0dc2f111f5298705aff0aca5894310fc5c7b19722b78641a7c16cbf2e2b73e0faad6f6a7b0aac997dda79a008f011dccecdf3dd607bae52aa895c74bce32c98b5b70d0c9b241be7d3cb0a0cdbc88b19001ce5d5e17356781b4f7fa3530184f084f3163a2398ada27bd966b8c6e92e46203a06edc8a8adb28fc3f0d70c54a41e3c14cb53b3df28a4b2556fcdae169b12cdc2609516305d5a6743f19955e29684ed910f600e6562700f5db7b4594390067f075714d94665e9ee0b028152108df0bdccad92cb5b74c1cc77e58a662af6f0e56b673926fdf6defc2cc1b2c8fa0fb8e30c1b167e1cd33a512a70ac1e81334006e6481911341c33a2741e59d7ef69d467b982f3017636ed6973b3e1581218cb9013a447b02f62813496a388ffb5c8d477969c867406c1167df8100c7e393a2799c14194d68d6392673536a4c3bd81a15c757cdbb64a4605a8d8a97cd7cca863f1f508451b1a505464f8afb9b53e793a9977e01b22f5a1ebaf1b4779753e315ee145ffe1382155fe760241a9b57dea5ee50c8832b5a4a91f91624ff23b416e96526aaa5f1ae2134e17f269a8dc9ced28e920c2f0de0e048661a5b1a4606e47344b37450e02d782d4780fd188598f12892f9c166809a75f082a6bbe5dd58aa59198d00d2599d84bfc1bca31186ae50c118569049d278cc6e6369f54bcc7216411a89cc942364097f03264b79a366a5302eac2de0e3fb04bc82123709da482912d8ca3661be1e3b4222270b0c742005504d47a8ef873434e5e484b23e21630ea656aea2960d4dc2ab907cd896a60e698aca24c4fa2b8d48bdde92fd93704b043460046c25debfa12e4a7fb0112f0325799c6b37b86c5febcb72acb71b155aa7c5ab582505c446464e524e2bed3f5b209697a0e2a40a835fa017192127a93bee1a2b367721086c60b0d68a86005e037e6aa0732b204bde4ebc4877c6753f47e4a2fcc1386b1d60e8bb6d2bd29329db813ffddd9a4924d3ece011487747904848470988adde7db9a01f98cc811bd23f4d323e1fd2518020079df253d0dfbf2acf39db5ef08bc32795a80862d7ae0d9b2cc66155c76c492b5abbfbcfc517790d5c2830d88206582a5ff711817d85c7356aada9eca9ebed680afbe535ec50ee0290e7d0b3476bf8e046c187c164f3b2eefb15f38b646f9dd4c1042306a765fd0b1ae307d37d152673a88f042403aa9481d14a8f54576cb769434bb24090c913ffa39e0a6d5e0dda80518c479562ff55c313ce4275835057f05d0d21f9770c3b19c00dac08ef2122531888e9d8438e53e017ace408b070b74baca8869eb4225a97bb3ed958d2a0ae3500fdf4531a23d1997bb0fb7923b7bd139fdb3c5a00509c121e5da12c44d1829c1067a42dc3d7abea09b2142d0936457dc4637f8b5bbe31e27b5a919aebf4cdd77e843cd932e2e4d614268b4a0d37d39955dacfab19c605a2764fc758e08b73078da522578b554e7c17c8c83fc45a415987853ad991e2a139eb789fef1fe61cb7d95a99b72429aad52ba1f3abe267645276009f4b54546f04413d0dfe57c4a544bf18021417a8920c355eab53953eaf7ee65a5db3370f194520abd2fb99584156fdae8055dc892e55fd72adac4be9fd457455b66d8c8f371d9b3a46a86f42c061dc5b0541b858b8e31ecb57e761cd1ba01f9aaef345ba33cece53433bb3c8f835242ba834616d06c3b6d75969756624281eb6059fe3c60683ca211358c8d3c8f6399d720588490fc59e3c9178397c4e2cbb7facdb1666f7c6eae04cbb08edbf8b80b86263dc99fd7e0273269a40bb6c44c8fe59e95024799fba17a3720d378103a7a002d68c99eaabb23330b586f5c2a1331ecd5bf799ed55ef49e770d4070884a2f7f28bb7e4720d4ae2b49f747090d4f04a483b137ffe3b9f8339426f68ea39b03b4f71b27fd0e6184c0ba8a99e2c800cfd6a6ac818922c0f8b65aa175826fc317dad0b1e4f03602e1ea331a52e3d6fa3e69154d223b16ed8e95df075fcb6e7b11dfaa8d261a8b75cac765c81139480087d02c6e66ddf58dbc86d2b6072136d7169804500c0f64cec47e84f315e1ed4e15c44b01a7a97773fd9d916738ed06beb897de8e8658e199bf6c3dc3cd97bf767e79a7291b937f22e97cb95b314791e992c9eb325c32c8ebb0a81f5073cb783548755cadf758773fa6eed12fb869ddb4176dbd74c9a71a46c44a88a11bb7f23f279a6e2919ea6dc03325413ced8fff3aa66ef7ed61f64af0a73e2cc1252a7906a7ec29fc755df1d74e8d1ba63dff436cbf53d0f148683da034d88baf31b682c51b9ad5174c1b9603c7f756942ce763ecf557acae10200ded9059d9f2f337bed276055b28a20ae621797bbd57a992db8961e8ac8df332e434583b3fe3f9848a6093d58279348fbab0d6215485e6755cf11c6cff5fd928f30e67f9b908102f7fcf7cec99bee70233a6b3782d58d3cb4b553e73f62ce14a15c3c1e826ecaa61148d3511ba1084db588c10aa385b7b877ac572e0162226b64b11bc4ed455cb33819dde332ad2ea60d26b349fb964ca38d87ebe7d49ca94f1c1057c85cf35f9c6ef31094534a64e24f561ab9fbf706cc4164960c286bcbcac5d4e98d2d19475bd2c7774ae211a01f93de9fb664b5b301a8ebab9f62158138fdc32f3b2374f14ab136a3ba839f7f095942ff74789b7ae0dfdba0b2db177ed7d651ed3b363bc96108cb108921102e2b31a93b1d6452c253188f923431013a283577fa344dc500b3ff0f1740d1022ad282d5a11e86bed58683807c97486f258cac3f8ba08eda568aa3556335a146499bccf78f34d5721963a08f3d000e380d38247a5171cc67030b73b12fd16642fa01cf1e8097f1821ec9a6e0b88757b1df42808287419b862f25aef848c45daca1d03d0e082bca82a1967176045870f008aa64bd119bef934cc987747f608e2077dbe13b7fd8ad6924fb3a5a22b9f5a770883a4521c7184d2e0e0c25bea6ff8d0f74ffd2d6ce29272ce6339db953b3c96d02a5c1d0de81d881ea3bc703c5f12d0f72606104964397818d50376053d220e1e4009c0d3a996d43a20d85a7002c1ca91915101198bd5735e794221267611d59379d5203ba3da6f9b502deed70cc930669ba33141e8914c000e264696886134b63651c33bc30130f8eb92671229ba7cfca9255faa55164f667a1594999ef477366833429fdbb7f4070b6005ee6fc73f3538c4882694f5bac8e7e3d5a5e74f5711e348479e16fb4c00b4bc9083548fa381d4c220f38bb53d0b540fde9b746a7e5419580757c78e6ed40a83385a442ae3c425205213fcc9b62721b4b2749bec6d56993b23c597dd3db0de52b7a6dfa22a39cdfa8713211ff1b98b6d7cde8aa776ba27348a7dcd6218c28046cace6779f284b5d7f352b83537e484b00bb3bde41af46b105fff152a1400f0ccac7ab5a340428b89d4db15f0790de0a5866933abe5564ec7de4a0244991fdb05a2b8006ac4cea019f36e42e8f160c2c084aa8b71ca41f5de42aacbdf921c5be7be8fc4919c4bb7c56a8f8519e3fb08dda2f123c8b9dcc80949b9c7788b503ffb80ce41df866f8516bf8b2ea2722c1632ce0854c4d7af186e40e8e55962dac76a5977aa920de7327aa8fbdc29b31aa2118622e17d5112f1d0937432a9b9aa639afd5441957f76402df3fd0c47b3dd0163e7021ae659c12ca6b21bc018e7b026d1bb406fa75037741976b19ba2bfdd83262a7083341f1469b5e6390604efd157c9b64006cbee9a9f6d11d8f19e896375a8e75f40d6f3e447806119b95d4886d83228caa97359b04de5ad15793802d29eaf5379ca51aa51f5394f8226a34fcb729a61b7fda493146e6786f916e51e08f503ee0e25f76c0676380f0d3cebf4708fc7644c1928fe1b2aca6bfb0bf405b65de3b28f381e4d81d825dc0c661c01c58ebe274f2b36a3212e2ab4d4f7fb70f5877484fd83a1a563cc749916dcbce5890ef6314aca041c88ba1430d9c79bd7ac4362da9e0baa9499684d6b6f370622bdbb65ce879db96898e56de8afe112c75fda7ce797ef0e83cd113d8b663b00763028ccb2a66995e9e205919e46e9923ef2da929938102dcb538aacc1080ed2eb33e62abf2c4eb5e2a0b1cc67b47458a4ee9d20b5578076af8718f96fbcd42c4453c79a6e6818241fadb1bae032bdb9da1b32bfc3aa856edc5d6e13a8e4dec08d1d98fb03df2f711d269f3286ed394ff8ce902edb91435e0d093f01007e00fcf07bfb1868d5cc41b768f06fca5d56ad3c349d082d34923763de7478401152887482b80662ebfa9f6261d64fb4ee8d46a47cea5e5c5ece50320e8ec97793a53e0419756b500d85958cb9b6c93afbd8813a1eebda4fcbc5121a7e5928d0ddb707b4df22fa98f29ccef861398ab41b8e5082a5fd85f0c634cdc28598f4545df39294b3f3764babc6f0232db5c9f0aaf3646be36da3bc453d71ac40a11b87029b380af08dd38b5e8772d4c8a1611f81f5736a8a68aa9cab234b0f428cd8bdb6a5475582d2be6457dd70769092c3c4d7b1a6faa023ef7f8e4d06b8621c4750656abf5552a87c1bf8a1a4aa501b466254e7326e8c6555aaf39693495ff8f391f63ea14d9bfd36d047d72c027f2c611b10f7e3548ef8cc2603a5f21c5feee0ade5048b17235875bc53a50816754bd0340f0064d7ea128ae197e0ee1f2e826f9ec1109810adfb2cc9b60490b0876a67b4e3815d43fbb9d2dc753df9f228e1a0645e900acb66f45de210172890a936975820d8039f5e93f4bc8c3897b2b66e0e683e49e282f37c0b17b5f406b2a368730e26008f6355e9596c764f64e3596dc9b8a30f135db96e24a8e5919cc85803e380f35951404f987876a309829d00d0a56612e27d908b4a6d233ab7d0e84184ffcc4051a52ce45fe7730e480aa17fdbe146cb7c391b8272f41f7a031f96e6502c1ba42655d08f46d3883c6d2a6768a9927079fb8a2cde2346eae4d257a8a1088fbcf7596c9e4cdbb1ac3266885e0c17d4da268e3b22ea3905888ab84fc1d80b244539f1a8f0d3c68dc5481d611ff4f28cd64b961db2e7688f5b73e17a9ea187d019a9d1cafbc84286f65d0f3ac5c6ced68449e6d4e16fec6451c5e706ed6005ce47eaaf23da6bee3f0e85b9f1feb2c560c9a1cb150df69cb8f3d08c6cfe8d060899f1235b2ee95d31ddf2c1409fa2ec2fa67ee65d2df26580a344c133a2bb111252e825401c86a19722001fc800e41d37780828acc73a1375aac2bfc56d02a1b57c02cc01fef234472f397f81704e3e082abcbfa6c6fb106f9a3ff093dd603f086c2b80e987a6b45ed690e2f8640ac2eed2d0a46106b05c16058999bc0153bd64d84c2592e6ec714895a973f6346029414033a5ec2765c40d855a503f9594dbcb836f0f782ddac1138a3a18c1ec762a9708a0254efe4431b48cdca032c42687673731dd80db7da7b8fb08de5cfd0bedbce85a3e316ac65151741f14ca5d3750b7b3d3b3ec941364424d97bcbbda59432c9246545076d076d07eed4e7ec76da0dbbf1a8bbac3bce786473f49ccdd9ee6963a3208a7eec6677a516e76e77977d5dc6c002430861cced22cf095ff017f193ffcd77779f5f37a54bf78fbabbfbe7d58010e2762f62423084104e3b63467d4a39a54b4f3664b9d309e784744e3827d4c25d3a75af743a719f7376d09db8573a7dbcd2e9844ea7d387ce4aa713af743a711f1f77e25ee9f4f14aa7932c7a832b0869a0d6ddd229c417773790efc72bbdbec71871224e0c41ee586154cd3969751c9a0d14c9001ccaa6676f2f19715eb031e0f0102100fe9b17221ecd0d0d45744ca744707062763b9ac873333bef686e349922ff30d20517a95123f2d88fd25247459c488371b8a3121c196188474017fa69129126ea401afd5107421af26550f512102c4ee53b8a5fea134a7ea90183846c73fc1c32ece8d3fcf8341891e3df5079e0845c97c8f5a926536d027890e484cad3499e109e0e800025ac0442c210678169955160310692040653b022891d04f9011640db155260a1891318d1f30397ec4a2015b900d97b8234911d89a4a1a1a1b9514205d995c8fe36c32513cb6b33b22fd1823c82ec5f23069806e49041872afbefe8136422fbd340810a04657f0cf409cbfe19c8aec411b26bd9957092fd7df46906cd136afa24c3c648f68f4222cf91ec4e24e230f143f68f44f80e1345c8fef1489f2015d93faafa047774b0939d07d93fee4087ec1f95f409ae6ca61005b05304d31113c10bb6ea41043ab0524230000b9c22411820a4a3faa1a504100cb022478a20543b3b47e081015704e51d26371b102f1fe4e9ebba749040a2029c65b88384121b20d113041254602d24b4600112449949aa5f9c60c2091dc46f5142933dc31d2776f2f72fbe046c5c82f2a58635e5902e3920840fd31290300859f6cc4ae594db133866393a13824eb7a6bf9fb9bbbb7be6d7357777f71b0f8766edf96b1977b1cb56df7a7066c30524b613f9d18fbde4b0ee87fcd9129b73ce88531fa6e79c73625b0ff0c72201185353639f3ed474603fb18bdb80add4660e755bcf3a60737c538ed1658c5d8bc43410bfe5bb440bd0e05afca4e4f7f603fc79053cf61ca2ba0fe1e3f8d88a04ea5f3f837dacfbd16fffea7e20d9d16fff87fca22ac678d9ca792cca89aa0802d82613441ffc253bc6bd48177716980cd0205dfc2d97e3be7056baf8cf280305fe609107faf4997c441ad75153737dfd1aeced5f1d97f380dbeab5e731322aaf2c306129c8c1dddd8bb8aeebbaec13bc480e16974cdf1294bf7fb13f5c38e79c2f35e6ece67c88b144f5d349e98c10876e497361cb676346e196f6b08fd87d98a694524a695349ffd2c7e85fb652dbdc1605a52b37f4e953f1c00628c556a2fae9afa8401b6e71da9da07f3da3407b9409b18364da20c8346e1163ec9baf712e6907264aa3ada41de0ebfd8340e567d3690f94f4255703c7445f85297d687b7a249c144e1a7bb04ec7c6c2110a888230d2a845a6d18a18844ce943dfd11eb51cfd4a03dd7c80bf48e9d30f864f9f3ee893e9d33e457ffa1006b4319ffe4513a5e5b9b00523811b5b9100fdfe1964fffd19e467df7fefed951b2b3c3ac3bc121f7b18d3dc4afceb614cc6adc4dcb658953a6cb5b556d833b8d77ef633d0a79f753f90ecb8dd4afcfb6325762b3ab2bf9f753f7c2099e107fdec7f20d9413feb56e2cf0712f3c37ef6f777647f3ffebd3f3b1f188c8131f661cc8d9a4cf7e0e18098fd7bc86caf63255a6e256a72e376b4077f5624903dfd19b2f9f77facc4b74f3ffb19eed7eec7ececd39fa1fefcd7fcde8cab924a18733918036364062ab035815b16484bd7812db245b6c816d9225b648b6c912db245b6c816c5872d97077f5eb63c38727609964f866cab9d254f72e3219fd3f81119e19779b2c52245fe5a240bee4aff4a7d9831acdb767dfdf5304dff93f6d3916bc7a388c308638411422881f4f41ebc61f6ce1173d63972b13bab049652ca187470e3c3dcdd57a7bd588772fc89f507d2e001c7d8c187dd156285f5d825f89345f5672872b27583ebcf1503351cfe4bf027575a784c937680e7d38f346a3aeadf8d8579b42948761064b7feeefe96736769cf9f72d3fd371ffcc1a1fc9fdd409f3e161bfa144f51478d7c6c2d4ec44418ee0c81a6a80918ee0065403af80918ee00d5e4fe4c052b77770e86c01a1d13ce7c209356da7d25aae1c84c32b6c0f4617bd6b637bbac3d20b63d6d663ebda1f3ecffe25722b224a5ab22507b92e5d3de11b80912d4a43e4984489fbec892421a15573d59fe27877c9047b64b93e9dff35e5ebec8e2a173ce3929a6efd4622ba555d92b7e7e32dc21c24ffe4c3f3ad92451912732d9a28585504927083d19ee04611559d147f6b4d792c90a509f3ef983aaa9ad9fa1050449548c41d5d81510689e340a45c5a44f70470835b93fb2e894722581fa14a9c8fd72d52b198984cce953aa4fb2a64f387da272c84d118eab3ef1f409eefc0c2d20c72947b0454a295dca77e9b78656ffe272b81ea3f47a88713e80c45c22904077bde468f7d979cd4ec6559fe44fae79fa34bf27fae4f8d36a4f36517b32fde407fc99be6ec59eb8aa0f8556b266b649067d8a45c83093b8191b9e9e51cf903ec52c32cc989bb11972836f88e85314ca308fb8191b22724839407d8a586498376ec60628082588489fe21519668d9bb12182938293a44fd18a0c73c6cdd824d129e928e9530cca305f6ec646c9cac54aa84fb18a0c33c6cdd8080dbd188234609eb161d2a748840cf3c5cdd8b0320c8d47cc33362c4803e69821133228cadf2c923348ce21e937eeb3ce5a5dd2b4d7fdc4ae74daeb4f02a6dd1775644e0df0d743f2a6077fb148a232a12189ca7e660b35ea4ad22e3f1275c59a2fd6c8d6b401b44a90a0f21a470f17f68936ceb57dc2d6a2dcd66f0959da718840ba65eada3ec5f852e3bd5abb6fbeff857176b3b3300688e3d0dd42dd1d21b616356dfdeeee865842d143c9880b03a4d1859e1d3dba30e505694c1c305b48c37d4eef2774df0db685fdb31c2710ee67e9ee0d616b71d3ca72c02844b853600d0a95265e9670af2dda5dba4b6babbb7497ed03d3bf6081ac954e57c97027892664cd1652ac5aa0ca8114383b4811847429bde7a4b0096dcf8d81f6a494d1bd2d36c1873bdedd33a248414a395dbabfb40767b47c52ba944e6d85912e50ca39a3e5a56bf7abca775a650b8b108e6f290cfee1185d802fa5745a91707777ace4561e1c1fd3efebfe152cb998bf95977ce5cf5ed8a71b66eeb730b6ec763967d4cc7a73f59a19f77573df7440739fcc2d65e7ee43e755e9bca4112655a062747a74f7b087eee3fa347907572d355e7899e18de8acf5c2bc5620d7f7899dc554c2d65daeebaad8e5dd75612423346e420fc3deeb3b867d20d7f70eda3aa90b2d299deed5d238804e298227b4c6455a2d33eb2f2f642c926240e8625d489c478343efbad7ed3e0f4078f96031993ab8c230ce192f2fd478e8e2d190b1cf3407d44cf1d6d9eec2302eda2bdbcc5ef6c22e369a257c1b3ff43cd79bd18bc445e8321a594da6e6ed2fe662be5b06bd656f783402d239e906d9757da4117ad7fc805f344e20ba0bf247679f693253dbe2d792fb61a6c9441bda451b21edc5547628bd35ea910e6dc22f5194e0c67fa9e1b3448b5f0189ca400a92d06471850f8d504c1c821424d87c986418608042d9e79c514021cf2676a218c2b4440e0d144d703b501c21cb67e9d3ff00069049963f8042962c27bc541c2cc1081398700fa4b08326a46864d3430644ce260410d7879406031eb0944da6a3c3f5c3d05dc2fa3084f9c0099b9aeab9a2008207561182e08166c70752f86107d50e3ef4a052810f3fdcc8a007213dac1c603c14b5e98994b52513cb8b1bd36572c410121cd1029d236ad08323928826531234785989a5686a2f9ae28c3109bb24071fae14fe4a570f76c9c5c3c5c375dfe1d6b2b21ddc28dfaa03fe60900ced750fb434f8832c1df273f429feecb21a3bdb9e8c4cda9391157ba280e3b74aa8c2c9c5cc390062713d734d66fb0b3515d8441556d8c4f8c0a10e2949713860d6be6a330a21f2448bf438502a5431483810b3cab7d6d7cc224ee9573604ff1783646b3cb0c701f3b57130df1b3b766e4d4546e53be6db19ed7c888a237bc8f5a1e3401a54601833d424460de561fa5a087158913f62c5d4a118d2fb58911f853842958a8142b0620a3d313820b1bf229f1269c5d02439311fce17cb02e63a8330d5ea39c0dfb449f9faf3a64f285fe7d377f1b3e4822bb968751231393fd23c4aeadb205cbf53b753d8d52929b38fb60afc491a2dcb324de67ea6c9647f214ce318ccadeca08f1fd3ce476472c54e0e7e1cea12866290d807121333b78028c731fd474110a3ce5686f1df24ca75163d01513aa4c8750e21d72c72fd89e4bfc944ae1307b94e1be4fa7307386dfa7473fd2904da6817cc14cc207235d518b5d65a697d98aed3a64a2d20ea25aa749fc94180b7c8f521d45e9890aba4b14fe0d8d3e483ac1de8902ef53bd97d266d06fa920673b011f0d51411f0075bddb16fee4e665128d7c749602c7f9fe1bd1ca77de894cb20d7a79da2e29334ac692369644da3f05b8b65181733fd5490fa5e57906b77d306d2a86f99e0942c6a289fc2f940b223e5694a57739055a8420c92c63ad5a751ae9f4ac763a63b7f1c307bedd5f78fc1cd68affefcc1712806b557fff360744038b02efed4875c11dc434850e0bee9547bae835f7cfd8b5d7f43a3f0d7df409fb2afaf43a25e74d346bad477d14169b18b428ad065fe9522dde43a5bbc19b1e78cb153b97a8e8dc2e180f92a42ea6c3e067717e79af62251d3a69ab0ff6c9e3ac09daadf43fa34fafa4d24c2d05fb5975aa7daab3fe27a487b55eb3e9bb32692eb5b205c7fdac8db7d164359df716afdd6220085b2fd6879642bbfa6cb932b93c0f13f8701fba32e94aca1c6eea3f9ebfbc7bf5ccd50bb2010f3d5458ee6a7587e91d9f665880b5b3ed3c7dc36bac12c2f51f07548d415c30b996a38b05cbb8734e85b26d83b1f4876d8bfde07921dfef67d5c9d8f8a8325184113633b1f56bad0f7b8440e4d0c8c41d281993f165adafbf6e86f51c0fd2c7d6a18247352f609ec3f9fa55d647ca1013b684caca27f9309dfd6419202cb2e4707d3de16050cff83aba6c209218c085b20ac075729b2144659a2e788d50c321d3056a4c80aa6d00321787a90cab907362dde8c276e80b8d7bdfdea68bbdbdb9fcb90060eb95b59eb25b6704bcae8044465a52872472625a0f68ae476f7e720aa71a27ce73eefcbe2d792bd947524aab7fbbe56dbf540d7bc05101589e29322727fb437c05f479ce8b0b7ca0dd9e065f931a8bd51965d048a114ab97d386455142e18b3d1e32771f8af8ffcc1a4bf31289348230eff68347a12f745a23c7a38eae28b92d193b627ed585193498f474fda9ef4b7667595f5e417ffb56059d470cc8f99f497c47d1130e93f5366694ffe0af0e75d425e9a48f2ca24920e7e4f3d00772ea4f31b9526b8861b626e826bc07f43cca4574102fe3cccb512ae75da9348c0dd726edded91bacf86489449ff7d2275df9eca73a80a531d686334e262a647d0d15f6c7447a36dfbd1b65d2ac0a4ff5cc77388720ada8030636f53570ab0e3b427df7594f489f4f27d056d6c2fffee901e937efb7b1f73f4459b21fdd66d2e9ef4518b00e95d5cccbd702fb4275d745e7bf431d7819871b7a33de944da93f123a4e63a9086fc8b08fe5aa51344946126fdc5b218351992cc9c23bdc67d9db57722fddbc3f48b776e7ba8911ea69d880be913cca5ab922ef2efe8e5371018bb0e0b2c984c18a7a08bfceae2257e59eab88bfda3e6a2b3c1cb38df51e67d223d894422919e8328d7812ef2494f8a21fd9531b694731b3de662cee48fb84ed29efc9195d7933c0948facf974879fba4cea6242aa5939d0c01c65d0da4c73f92a4c724eec6087776c4c12cbbcd1c66533d3c57d7e9313b9fb1e36a3590917421d476659f10616c1995706b90409c6574efe4c7517c37411ad663126e86329d634b8b0669e0689b1d47a75d191bca0d768c4410aac2c72f0c05f883ab8769408efbee6fb31af2457ad9fd62dcc6797b539b9172f6669cb767b1eba2dde740727b758576387fa51ce5123778dcb87123422b514876743e907c45fa67884ab0010f68fafb070e1d0e7389218cc4c88ea63b1c64bc809412626b51d4be95d259bc7329256c913ff16fb09a49e9000b2515c3300cc32e2edd8744fda45b2c685969036d408b311c9f6b7dece7df4c9399138031d7df58e4faca15b937cbe2e9c6783527c309866199c52c8661d85f8b59ac5e4ca85dfa47ba5c2cbb1986610fd3d9c55c50a4e6c3b5c3a5835d7209b155ece0c216e0071d629411c935611d2fb91fbee4f89dc527eef51b2d16b831eb19324a01e3d070fcccd81b8e1832bc71218dbddd780143f72dca282e11d825b60abbc42eb1555c422e2157cd25e412c155133b06517385a0b5e8337a6619e30f2a593cc950890c77b2d0c9376a38688edf9c0c2778ae20f798993e8134ba9b3eb123c0df4633379a3ec51b33c78f3fee2fffcb70369a1804d322498b6891cb0e4a26d82ae02fcbfae42581832496dc0bdbc32e8b5db6b978efbdf1c61b6fccb218b3786f37c39322fbce3e07b8fee7c1ee8e306b82e5d7bf90c09ff7f13d89b2d6629be95fdbb623c4482ded5d2fd046f6f46fc623b60c90e9bbf680feecafcff4675dcdeebddcccb5f2881d883976182703675d6509b56ba173090ded41a07cfd25674366cafa61a4e4a08c96e57b88ab04a3f855c8a08626a60019fe17e0e98550c2bcd9e992092c8864ba592c9bd483bf2dc36f850cb717212004b164b803049e3c454d863b44e849c97007082d558e9255fe0c5749d4206baadc4264275dcaebd2a59cfe73d659679da52844c621f3c8cd24929b883c6fdaeb160b2c14adb0428f0c193f2c2caa95151d1595a11831724ca6201830582f5e0459b970a12a957e52525a28283d24d20dc639a351d0b6e1689a4e96adee1d823660c61ee6191b16b401f3f5306f43e0cfeaf8734decca32b12c2a447fda6b0a944ba6773b27a63fee348832c18ab027d810d60423c286b02649e0ef0ec18fb6be1b1424747f80220c58939b036d9874746c4ecb23b9adc5d8f4de4ba44974daeb6f31657f539eb3c392f08898122810b5a0d01a72c29c42d29f643417507705b5e7c43dd77ab1dabb7ceecd6e184d91e5cb01333301cb975f69b2ff6de5a629b24f6e72669309a1df0297430b4f80395b784880169ed2f92db4d0420b2fb9d9827b0b2db86743329bf632211609fcd1564ea6ad3e7d9745d4a78f1ec9fdf2863229fab01e9f211963d2278cd5a7ef0ef9441884f4a907da803f9e5b67c50acaad211974f9604732a6b24fae9e9bef0eedfce4641a19ee4c5194e76cb5f864eebf3bd4f2274abdb7df03f8cf2480ff70005a7f2f9b246097d7d13dddf1d32fc000f86b5bd2e56bb4e7ff5f3519972e068fc3a596440da0fb4c02e85a5d005ab9bf8593e104d3b7dfd29203b66476e586771d03a50b8c0400f7c155c77d574deee7b81e9e9ffb6c13cb240bc96e3313a4499f22518699056e264893d61443f9bb433b5304a1e27d32849bfcd92128695464925b447d8a4ec830afc0cd04212aea229e3ec526649865703341787a648f4f9f221332cc2cdc4c109f1fff39d2a7d8ca30af7033418ea8a62a499fe21232cc2adc4c90243a5447a84f510919e618dc4c10a1a13a44449f621232cc266e260811393607a84fb14986190637130428e80a62d2a788840cf30b6e26081316c60aa2a44ff108196617dc4c1025415637c8ea489fa21619e6123763734495a97cfa148732cc29dc8c8dcf8ff6d3a44fd1081966146ec6a6496b6bf104488a28a288228e1c3972e4c89123478e1c3972a488228a28e2060b9b8cf3cdbabb1e6eaf2218b6a7434aef0efa5cff2b80ec28f786a125bae0ffcd6ed8d227fab33fe6e624f4688b53da929bbb628065ce470ee678448b392fc0d1a62927c3099e4fbf7bf69cb355d3c89d7fa1500d1310f6c161624b98e56bb93a38d265e2d34d4997ce9ec9b4719167f526e993567b6137d3b61126a1acf22db97801c31443658545c60a2c3cd765d97fbe2dd90694e7b7f8b437bfd3645a2da256006e0032cac97c53d6ae6ea502feb2562b236a54fdf9770019e53c93b82f6b65445cd692383795b55aadb8a202feb016d6c2885ad086cc1325aee26adbb62dc66fdbb66ddc6fdbb66d307edbb66d63f96ddbb62dfb6ddbb64de5b76ddbb66ddbb6cdf4dbb66d9bffb66ddbf6e2b76ddbb66ddbb68f495cfcb66ddbb66ddb564af98dfeb66ddbb66d1afe6d236d5fd264b66d658518cf828c182e8c70cfc20a3256626c294660acc480b1a11861598901632319c962c0d8326c4425068c2d1b1981b16577336282b1655733e25b763d33f262cbae5f2331bb1e31232eb2ebf132925d2fa55cd9bd7465873ae5b65ec315a8bd799b34a2d848c3b8a64fda4f9b9c5d94213779aea00d8903a75192c5ca61a95ebc7cf9a451d24ef9b2a84f2bbc7cf9d3287719e472c8a54f9f4a2f5f266994bb54e292c725932c5faafa14e3e5cb54a3dcde609c7c4279f9dd84a8f5a4256b86fa04a3a751339562a57e523c7dba2fbf8968d4b447721225597ee3f4c945a3a6b5c1f2e3933e01356a5aa1dc6ad2224a79f951a751d4ae704fa6964826e24896f425f6261b1c6972a3284bbacc37097d32348ab66ce8530f3cea713dae917a31b1e0d297a16aea5ba44abacc1ed9cb178026235759b6242ac32b9f9228acd54ab552ad549e188ba562a95813c31c73ccbd255198b5de4a49d4d56aa55aa9d675cd6b5e73b224eabae635af395b12755df39ad7b4ad56aa956aa5541265592c154bc552b124caaa542c154bc5cad3a6a4cb7c6b53f36b4aa26a4bbaccb716e3562acf7fc1451e954455968c9fb3aa5855a562f9cf84ed7c395a216bc96059e93e93a9fb30ee02b0955aa617ad52ab458bc132bd60955800c85030d58b12a642c154f3bb0b034bbd286129142c85a5f27c0ebbad124aebb6642bcfffcb05ab84c2ba2c399f051b55a64b65e7af5053ae14cabd52f24acd974169abd59af98b3cac186462759695e7afe460cf9f5c59d5b52a6955d4aaf06885e8499e44eda56e4ada14b5a9cb55e836843bd79644612ddb226d314aedcd0da85de66f4279c274654914d6b2b8b2f206c403079adc1dd69a4158cb84b530d6caf34d5a5cb537ff2a82fd31cca74fd8fcac2521bc1ea6b3ce240e66b9ead3b7b164cfec2c79286762613f7f03ead3fdf96d2e378523e79b4c18e3e469b1e9626ec455e8f56f5c8f986fb0b95db8336585e3733652d90267dff7592a4cc01ff6d75f4fbb1eee4300ba5591e77f2f99ba64fa1c446d2c4a23849700b26b24c0dce86b9c8d903c9f729187a54d37ae567165a170537366ad3ce9160544d99f1b15797ee46994ed6a079b499eacf6e6f7f06c4380e54fac8a61838a524a29a594524a29a536a0f429a594524a29a594524a99e0a6f65c47ee8f52daf092e1c796a13d6b313699decbd146ef0ee506587ecb90d90ff2d488e1e5056fc67f2ca51ceda11881539e04fab789258a4f32ac1192e1a908b6d92b8a62d6df296823663e58130c9169d72366235fcb8c79b5c4c89594eb95ebc76ee5fa16e8c119f0e45fff059eecd7a87d7bb1b5eb997495d8a7daa34f9dda10e0da15917f41148cfde1700cbfa1ff9172e7744ad617da853e8c44754abad03799308c91656ce993fd0a6d263519ebb27b21d5b7fed65311861fa08dfaf41b0878ca9e7e0b0151dad3118caf5315bad8cf38093d6bff72f631ce7eed5c6bb00e497d153aa5e5643891f269ad37feea5cb666b6e4c22b8630ccf6b6b438296bcffe37a04910431b0db35be7b2bb645780cdc7cc68796f17efee9632116ab3237d78be3f76ec514af944500dd10aa0a6699aa6699aa6699ae622e51f638c354dd3344dd3344dd3344dd3344dd3344dd3344dd334adf49af6a55249d3fedeac3519cdb314eeebbcbde310d12cd43e8573d17d316f9f524a29a57cd44a2958d3344dd3344d4b49d1344dd3344dd31e6a9aa6695f35194dd35048afa19034ad6a339af6303d1f73fe236edaf6b41f7150bbe11d6c0f4672306b9ccce436f9020558e8c09714420a299554aa2801f747f9f4bb5bfee4788c24572330dfe77b9e1dc88e8023507b30c2ee39b7165c6849105fc6b7a227b764b863051179488619ea7c963f3599197daa5fbb18f451089e4f236bc66a6d700d37c49c99a876a3338434a64a16f8b3de3c6013cb67d97db86b987f43cc157bfbf2bd17a08dab06ec2b02b21cc54cb508d4a79d515a1fa6aff91d8879f6bc50ce95fece315725388ff5c93106e812219c027f70f53954601ad0279f9a0cb576769c8c8c2db0ff0b95e1c47d46b91afac9f4e5b72af7dfe883d8d334402d5e149d39a8842c99aa82d4291a0106800002d315000030100c064422814096c7a922fa0114800c799a42725c1d49a3590ec528ca1963102186004080000000111a9a51003875e8b5b2974b7b89aad7caa94fe08db58213cb46cfc7ded1e1636de8b9d857f45c6c1d3798da8bd15eae562f8561dc1ac203a5ac6cd52632a0caa91f725cbe89c4ec7744e94b9181b89dcf3121fcacdc56d09830fc4f190fcbaddc8ed2f9e9b4cd009e49ea545ab955ff0fb91889b37c9241d725cac10d0c4be9354438779d041e52002c824a42718eb331150059d20175e5a70f22d18118d36670a4f035ab2056f5b1cf604e6d3aa16875fd2c2840868bf74419770abd730b7e70fcea5f6e217a44a4170d1b751ce76c3006be87d6d47eddf4528c88579a0ed4eed84265b24f89117a0c1a89d3c76360e6678813ae4e7caf3d3916889011f5a60a05df64607d21c83b29c31a5869529c9838e0685b0831df40c630a083d64e788afbde61f0713c18939e07f75c48c661fd3e749700579375511680b3b928c0c0bb7c15935a6b76a603c569739eb8072675ca71037782a6a873808c7a91afd7210ab6f7c25d7557d2d28600fa6fa2007703eee346ec0abffcc68191012032e897ef06898a680c74f545dca4cd1595baddfd2042627f3912e5f5fe4f1067f064b1077acb2da7dd3165e100fb2e3d9ea88faa11a038f4f017dda67eee82f807d3487367a6c00723f8386e2a8bae4544deb21fcce77169068f9771f97712e12d166dc38cc76a97488fa15026d2404f8f620dd2e467ee147c58444e66279648de65e55d2cbec7daf758793feb77b35cefd52cac9598215747a64c58790feb77b2fc3eebde63f51dcec2f4dd6b3856480d4170e1ef39d0c9433c1c0b19ae3122560ce047a19bdf69dcb1f252045c2699f83d8f151a38447173cd2575295b63283a4c63d7ac857a1ca08aae320191584f190f8a962935cadc2ce6638f80c2abf8f9e6d87197b125549d05f288fdb8c285ac325592b3cecf12f81182871ce3d0d0eab2386ae48a5c21b37c2c5ffb1ee6b489802ecd60984d5f4092d91079aa256fccbe57215c43d6f75a142430cf47892036302c84a8b2ec14a48a383b180c62a9986c0b528d1813004e441420f785a7468894991715c7efe9d36b5161dc14821a2164307c882822b5e13c8bc8293ab98c5ba75bb88660f50a8588463e654e9111af822ce1bfd8a28a04709c53a4c092f339a576032462b917b6349668ffb8fdbf872ce18c2ec77db9b9dc6328e17a2be74eb63961507c9933e8d75949ddabf2245c6d98e9bec92168ead225edcd3888f16ab99075f6715fbf937053e492bcb56152fb9653d0a9a34abcaf734ad87ab0d0bfcc3168ebd624e5e141f2abdcd12bbd21a8e554ab788fcc0f05ba6c3df8bcafbee03e893c90db80362520e8310190e0b015de98a2a1f17e6f54becefa4e4ce96e79b24b4bbb4cc4952b773ed36a90a458610d60969752135a86fea6947aff89af25892a273e0def14ee419cb9a9ab236d50d93b42523040b69a41f4460c8e88d80d648207934f9e23e2fe0a7fa6b2f02e42ca19a076adaa0d79261dbc86068bb036797921c58bb89599aa1d4039d930a421f6d9a4bc2021330c61c0fb0c2aed42e4bb680d5dcc0aea3e211d929941b099517f32a07271697d76fb07b72c838acb29810f22cd2ab3045c7d496640d1a3b0586741b75905d5a3b7496f1751ef22404d952e02f72cc14fc1e2d8d16807e78221d56d1f91254820e2a90c1213030529c298b76cace6150820c54081c0d0015a8774374151af1b8446f016627082b249b220dce6319f4c896a93fc0acdea7c438cd1cd47ba4a8486847517948422a8870971f2031402812d2042b019cda08d58f137c44ec21de9d8b48fd6d60409efd82c9a2a043202a369264f567ae2d44d0874798e7ae903408f30c5b3492da78ce00b0eae68b0bcc67da377889dd128c625547f60ecab455a24c30044afbc0ce50094c085038ab63a3d0677b5c52e32e392c635346fa5c712e4afbafb4cc1ade4a0141892d9650bebc2428d2a4773b1d7713797e866ac4a353eaa9c17fd54cf2d7f61d8cc85e3c00116972d7829844138073b7c39873958470be472622a9d9b26427d1ac89ced710ad5a2b495eca08be572b7c7ed2445a6f2fabcde2a92e27fc1f9a6219e8a28537af6ef23407876a5bbb93449e833e8f63e2ca4edb565591c0c1e0a0e8505a4b981648510e8eb9f4e471b58c089a84adf2ebc34108697747de3e696dcf7268d1ef5852164884312193af5fc413ddba42bb7d2a59054ec50122470260e703645a4f366ecef40ab6087ccc12a22863c9310824d715523ae57766572c5f5758475336724b9496127301a4515e01c8390b3c50480a048db635b21d6085dae4baaa93a762a511202681128183fea6b1634e589cf3c32a04f22e6da3d88685422cef206d70cf631df2b1d7a926992eb1d6c0436a38a5eb84f6005733584f9c380bf6476e4dc390ab45275c1847452932742c5ba4a08f58676201f04033ad695737d935a1093b012ab1745f5cba4037def88e52ba82b0ab15901bd9ad40ebd2caf64c09d275e953aaa35164e31cdca18cd29fdac35be5246a843b0b837296a95d2b10e04e51ea4bc6cec1657f05e4064f5d14b014b28a89fa5d478f16aebac00ea736b108d08e6941a5f5d3800dd0ab79e3c3277472170012963ce51115e8c63f4993e6e6dc90c9625735a9b4ff0a5f182a2e36b4c9ca42bbba0b5ea7ae2cf3757f53c8ccdd7b1d473aeed93f73a825c794d3bb1a7848a50ef38e2421bb1e7a9c117580e7ce16b0f1a2c0c680fc088456395faa3acb399f9ac3ac15521602a8373d9d820e903536acf2c31cd1121471d35494fce596cbba005becdace5aeec793f2b0b3c7aac556f89505c2b44986ae78eb41b3b8558c8901a44916fd3a9859d25c67648032abffb15379a3bbc5adab3804e0c90d004c4e54d07b90cdabc8253b95c769254f86054d01160b141316ff0709ece641ff18905c70d7d21640b12bc2032666cc588cab191c8bc37a4df83a2f8d734c2cc2ee51d1df8544a08f72028e1e6f93560c90f69c0a08c7db49266a5f431f6722510da77125141fd9b9a41ff7851173e8c7ec3766d7a8f203fa0bed45ef4e14f39c7c3ad93c71ec5a666376058fafb52a62d3a5738f2b84b0ed525b5137752430f18cd2695299300e1dc90c6cc5b6fb9a556ad6ce1859d1d44bddb6c0b0fbd4b217da8c000db9e6f9b65c7690346f66cc10221e4083758b00cbbcc915710bc0e1a2fe3984717279fd2dbf85900cdc6ac06ac8057fdca00ac44ef86a2bd5bfe2f53a251f7b6ba0bbe27a6c55fabbc306516f595fb754015907f37dbbbd28ade57f71c6be54a26a59b360b66adda8490e3a8af70f06b71a914c1cc6ec43b3d838bb40995f41ec44d42876fc42bed1e13f9df11f786b6f88f7e870b3ae356729ea7aa6c656c9f8e498a82b62d05567db27e5a20b39e740a0e55a019e793cab698be2dcf72e7cc105c0b22d907033df67a46c46981fc0ccba3d6cb7d16ce470b24d96b083c6d12ec72504ea205b22d825fbc082a5e4c14f277501f6ed91467c1b2d4662d91ffdcc82ebb2b994ae061f04c0c5e335381369822ce6070b265cda044ad1aa425a6d8d2559135593cbb2acf1a0d4284688e6293c34135fb0a12539b8d23d111cf0eefc7840eb8f5d47deb8bf7fb00f82958345fd89e203f907420b5924b92a21fd7ea7f4b8971b7bd853bf10e1dda2d06c4ff979617c17431c84a072391221de90b82563ae28557562148a2544370100e0f17635dd980b36f6e7f64c7f9770328488afe0e4f297fd3bd3aaa93a88039913c1e375ed6749d6ef3a5e72f1ebf2f16130e9160ed60265830f2b2cbde5b02b6ce628ca0cb262785205c2f00a242f3b517ef9caba4ac75673d10d6d94baa640c9fc69d6975d4f1c5efdc7b37afbff91bedbe1d6da5c49a1d5713e252a65ff867847b02bf0d80b1b495e783cf7a3ae0e0a1e736e0493602663ae257ed24340f03a5854b1be4a3c2033a9c891a56f1a3e4cf1ad5e3f4e7335f1732cc1ad20307208538bcb8f5e223488f4d20030065ca79bdb2f8db7bd6c0d523c282f34ed61bc14268d3cd74a0487836560a4b70d34f8c03ee9a5d7c656ec76dace14e6bb3a5f10830863cda5cf6bc84df634b0a544a1ab92d86a577ee4f1ee7ac7b2dfe4bcb2f99731e595a420ceeb66e7f1c21709610af928b2c8ed957d9d3e82b8867fb98cd985d5a7c4d0a6b688897c6397aa5f3d2a348836eb12211d77d755f43fb2cca819d5983d03d83fd6d5ad54c3724fc0fb896ad3c48e0d6088457d837a3d10d50b3f243849bc807575da6747e8b8d0e53f7b51904fe79e364efce4336a8e23317bb07d94f4e651419db5e8db2c3e46c6a698cd9af97430756abc43d0d55e734015fd2c8717df232db19821010019cba4a1f2c4d2d7b72c5c05bc5482b0f427cccc902deb475d1605be639ff9c629cae0afdfa8d4cfedbd4d2fd7e076d4549ea2ff67f64d617a8232e36d6a9bfca18ccc8fa0a7b05a0bada8931cebd16361cbcd626131df56c02ff6c23277b2140cc2981da1d7eb87ac0a9693e8de4f414cce08b88d4af5428d649df1ab71543a1cd5c58bc4a0c0e1e15c6ae0eb49676301ca965c872a5f49051e2170a71008aef87a977bce10697e35ba55397b6bedff7c2bbf1756d5e72f82dd79ac96651fc2e20c02ce8bc36fd7da6853141755a88469d9de9f9abc0a66b237722cb1af929d756b1c91d19aa19efd49df1b590415548aaee022257651fbd080c21d59b9943b57979d6c471832da50d708463882495c19ef7160f8272ec8f9f32f9e9a55c08f9ce88d5f00e923b3d945b7d2de91f042620c11a14e16861a50c733111b2be5bd67425a7efe46bdf8751ea16a0bbab0604f73c0206375c00549981c74b46de4d23a87ca16925ae9beccd84c35d60721e5490949d2c1e3c845c8616dbe029290bdabc13be3ec12257f21b7f18ab4d52ed69b402259db5b02bb1ac6fd982c5fc25f7a724a5f16d52f4438d5f004c573a6472146e77ee02ca3b129db922dcd0f458bcb91d9c9d6920ed79bce2dee71ae997381c6d2de70e5c9bf727c402d236c8fa61b4d92350017fb09e11d6e92086ced57cd7aebb6f492845c60b8a32734d65e140643511a754c8c1b15fa1a80f429b5081546cdbed54fdec2c5aafed643b744b0998dd87f8519b2f7b10ae3573100454fbadc8a4fbb7ed95c28340e01e60147a9719a65477878ca1241deee04f77916a83b52370305ce4b3876290268211b57a01a005595deaaeda07e2193c9beda4c280adccd224a407dd0211d253e8001a973fa4f6228d9fc0559d4231dc8af50ef01ed4b273c04b374f0b0fc7923684f740534b9735b06558039db9b83d7b7ce463a2826b3a79c98412fa8e000940f5f95351c01de81ab25a263378ee93271c350b90a0bf5d52db93ba78e0e21c64f5780a052e01485021c115f4abf86702b6cb15a1d0213da3b2bcfb019776ab1b01eb32d3837002c873e28d10e26ccaaac26369899f0a80c21da782fa452c12203c1af3a63d9f3100bad2949fd361c69ea5784c351b63029cd0f5f2369d49710719b9e2ec0206efd580020b63368000c093cd4e1307426d69262d84ca2e5e2a20b4d9009f9a695f3fe76125cda0b2a61d8b7fdd8083a98443f3e63272fa4a4b9a953cfdb7717cdc5713f4f172837b79b8b479087550222a05b255c856c94ef1b1a05ca62578b9cf7f083e8ec8fb9a3696228f2da4f624dbc55449675e7cdb4c43cc6f4ec8515d14a44a58a3ab03b87a04ede05de15abb1cfb9d409a130fb0ca321dd67954a8f89e08eb3efe418552f9bbb50147fdfd76efcff9e10b069298747bc1bfcd74462b69a3007ae92489cb6fc97482e8332a37e0631ea007d2f958b4865a6b66438c834aec9bede07de13cdcb1a14e72f67c6a3e497ff6f08d2b8e493412edd15083e6dbde28cb7bc86acc8ffd6700f948b7cef31bdcab0045bcf6f38d0ab826c0d906ce7acd450a69af131d064afbc6ef56d4e64d99f861ecb946492a57ba93a75688b3c020af5d81a2490976197831221843e416998235e2a723b327db8534bc659ffda1c3c7b786da4e25406891bf905c317f6cb6a47f06564b9beaa1b1b474203f54d7938b96dd67b641484444f13981d1cf003e890e2a4028c2f5b1f34f5307c064de18020baa5fdacc5aac3a4ac36e3d4a468b725c79443d9f94b777574523af3f0f9fc8e3719863cec627044f95a401c858bd9187d4499b79930c0b684e8c8d18a043b43a6be97719de5d4f81f314984e74eb78872d0b4a9cd03de5aa77faadde10111f43873afc026d31ab54aa0e20beb16c28c91bdac953134f94878ed737b00799816da71f05130ce285e9f258cfe58ab05d5c9d91126954244deb3c5d0ae3c8bc61057afd97fca7e4fd08b0c407577215e1d88e3ea5accae7933bf100fd711a9e37879cd8ce180583aab93f26e10af65fcf1d8cdb716682138aca457d78c4be525a891702dfb0113b95476963d9ea1445e859f5e02e0b5b3d3dbba0498176dd401755d40b0156017914239d6af6c7d05e4b2250bfb7fef593b9b8d69179c0ad3f7111ec0dea9bece9f2148862166ce702f9334118f7c4583d34fee60e26c08f1f01aed7dc21d56b74dbe906afcd81bbaf08ee00221a93fe23df212a018d18d78c2582ed376d5099e4b7a80824563ca18b723d520288dd7470c9222a8535530cdc7294e6818344b950086ef8c3a7208ebc53dd88c04d7bd8d9b47c0c6923b95a5775a59f55fcfcd39d9fe3ec2a30a0e3a64e610c935f2aa03a051f6a51b2db6b32cfa74ba2d48c002774ab977c6928fc930388094a96a6b10092149e95b6672ff3d9396331e9d6cf6f91809422f2be931a31eb13172a60dd2409aa4c6cc9786bc8bbf33d38892907ad4d69305b957087629e7e811a589132ed99220a2c912cdab8dc58a61e93e4400bb43e062625734f44007293cefcd87133d2219c944d295b888a646a19d27a1a8fe6b0fe98fa2c28e04060c3c2a460b0d7d0e4cca8b56eefb7841b4dc57c828c52d827c29f710ec0f0b00af78bc5c9db54f0deaf2dafbed2750e5433f36348feb8cadb1730613e1b7c0eca577e39b4869c7fc00e141f3acd97f12ff4e1765ff8966fbc04ac2d33a34d994057b17005ef1d9fc6e51637e623feef253c37a1112bcf105653e766e14660168b70356e2ccca2b10b644ce66771b4ea09eec5f1f96f09a20d08bcb4cd27abd7b442a933a0c2c2177621e6dc1f3c52552d5aa54d8add2b2902618571e023779df1d22ffa81026c9e6c70eb6298ae13703f81339d4e188ae2e71a85e7577aea2ab8be3f8fecbcb74e1425ca8cfce472d9a465bcacbe9ce2604a048a831af1740fa9dc7129cea8704b5a7f10ada12b9d9214ab0459a7e1caad30611644c16ed9a901c81682f1ebb92caa09f56bc75b1233b05cb0628ce97645bbc82587f161724816bb0940c19d83d497a8ff0b77921343e430034f07c2b223b60777a5d86bbe82924d5803afecebdb451e2307499990772f37f099d4e977a2324d0f04eab584c051fd8d07d2f04c9ce55218529a6f6bf04a187c2b8fa984217d6fdb7a56dea41919613ce43d7afd499c78349772fc00174be9ec7bbdcde6dd27d57a218a719dedfc892cc5745742e20de7a8d7397c6cc13c739cd6b11e360956178329527d9c70379b81056eb85180f5e8afc7922c70c929d55b051010732309a808325cf2a3b696ad3eced396cd5dc8a9764be5db58e71c0408c3d492aa31447e0e76eaf1bc2b49b0e1e080a89074d6ab915898c03cd65f6ab2a78c38b30fcae9ad15ed27a070716e5c13404d92a41c6cf956e42c8d20c39e30b221da15259a6081a28b9faa71dbfbf1803bef12c4256fae6a5c3c3f28520b34887da1e1648e8a6fa0cb54273760c09d8a2cc234966f760c1ecf002a95e7f290b5995ed99802f3a6a2a6bf64cf546b876eb191693a0bacea08344435ce13d516b9002386080b239230e385ffe36c7afe470086d92418618205b6681f65e71e61a76c4f83b289ee98656f5fc903d914dd686c16242d49498fd679a803fc88e0cb4ed0a8e54f86a9d9b25c1be26f4d6cf15ea8b253c5d9cf6b0e3b75c437e3943b1cc484ab72d37763cd724aa7ab84a3403d6e80c47d87b9715df80a488b68588c6ae01c0f9ba5578e441c192914eb6c1989a2c14699ce0de770142be3d5b1eb6e9399b1ba35782250162fb7abc3531e850104d9c94fef3253cf35b364813ab248b090b1b62220af5b18e3fc945f89cd482bc1e133b18fc4aed842c0a69489c919320cd70949d2d1b5e1e7f901fe65303e4bc7aa7fce219a8ec318931132a0059b1c6db649a5367bfa3a1a42c21d5064b5e18630de7f56b331783d74fe774252a6ed1daa18339563e114e8235e044b01b778072d3ff1b0773cdf18c122d39ffd515d572e998581935b320a0f059a89c57cac9226311cf949c8daf9825e58b941abdae3e28dfc958ded8d786769e64047971582d73fec64f6d31e294eccddabd3eac505deebac6de650919c67bfeea4f73f4a255722bcb529c795648413ffeac1f676850a70e07b2f4a230f729775ca7b6aeaf7686903f2886ab9f79b21c87d581b2416b1054e43d34c2e46c992a221ac71d3938343f6f65b316bd14bd2258cd14a7abdb01fadb6cf647a1dda352e13274a28f90c9c58c8102514b0bbdf8bd7abe6cd328a1f0f1f4eff2f06d87f79db7e939963e3bad19b6cda314ebb833264f2eed3443429ccd19854ae11849aacd1e94d3f853bea4fdc26a5ce67db4d3a961555071fe67acb462428f2492448d0923b47a6e860b06338cadd10373754e0de18bb016f33dd8bd788b54a1f1b6de8fb82db350680a954234a0d51bb8817ad28ea53d294b444f3e44d6e9d65a1153949225c5918505d3e3c427368631383243ddeb958cd87f679c280ab747c51359951685cc6571dd35dacb09ec46ab5cfd02a0d291df8e92f9d48b8039f769331fb8bab898766374218a458e329ac5181e5aaab9ea478064393e297bc48da25208f1735a4544ad31bb6507f98c7aae00106575be7865747d0f3ce8ed9a95cb27db298f66c7e0721a9566beb48026a90b4a4588e83bb50839c62bf88f5bba0329b7b6fc30b70a0159f4fd585f170e07ba4cbeaee74f2b8bcb531339bed6bcab3e599b955b907fcf2e7e1dabc556e0109f5d34c6fdb39ed956eabe29a1253817764fcbbf33d8324381a33552820a36c4ae909415006978089b999258f6260656db2a468bd631b67a815a457993ce7e158faa018a20d18f42db5512b4304e3c39b7c9dbc3ba816373b459a3062b5d51ae36fb10625041738aed873d4aa6a506162aa0be670e15721552b191f9194c26554316cd9512386addae77899839a1049674605877f38a68d40eec3cb36851aa4e4e6bb8308d316bed512f4d8136f345951e6bb91fbd65f0761b2208b537d01c71c1145773360bd1033a3cd21aa3dad2bec46a4afe9eb15c552bc7f64b0d47fbce7f0f3fa161158b8ba145c9c2737f21eac133ff230c8324da9d3b59ee3ba336b1170fb4e2793aa022484dfa41b75bb4cabd0bb0de6b53ef3f895e9c305df2e64249f7ef04387e34a20c116716ebd3947e029b3bffaae6ce28fbba7f8544284fc7a472508237e8330072c103eb65c0b4ff678eec8b6b849b64ab6c349bf1258057384d25e72fab8111496c46a002bcb06c900ca1db34d8f6cf983f8b20fc0860362c8ee3ab7299ff79b529961a7ecb4c6907dd22b1ecfa4a5f84405c0f1981af07663f7aa8930747b00311c731127bb83a91e00fdf5c96b773df0cbaf1d724b8c7d163e0af701ad35e52a711c718cc318f2ac0c7299a7e98ce368b29306dfc113630de2d0049f0dbeb2c7d98dcc4984150e9f7b67508e868790fcd1416fe634d9f13845d6e0c12be044e8411984e0df836ed6f1ee237882b0fee166ef8c0ca43004011bc455c3b955485019a93904fc77a6ba91e852d079ad28f915758ee6b5b8216603b5fb3945add080041b86cd2848c1ce09131108ab9f7448d21922eff4899cceb00c1b760742a7b2a9f71a41908854908bb05eedf1995735ed7813e4d88929ec6b62e0de29377683a28a72799514c5035418506dafd33d9966515223a8a76aef1bac1128a9934d1949f7f23b57906fb000520539b0b00f1e8588f94f94d4c1f55c9a2d92316731ee2d087c0e833520c7342782b283f0f694f7b6097e75bf8c267600f5cb575ee2c435c007f98256c4f882c4229c2589c686ca58eb0a844c6323758b9fc35479c738d006efae84de0a2345c72ce01092c5268b721d3b1e45299cc41e6887f7374eadb26d610b62eca056f5310a23d7529f6302d1c031bb45830fd2e4a0b1f179d07a67c6a3f38b4281ee089565b4694172bcf9e3611a7b037c00ea4e91e0792b7ab539da0582e8bfe410df66f10f1383d6415a3f71b7fba45363b008529336f01a252777932928d39b60d7d5185c5c190049307fcc81821275865288bde7cd2dfef52dfb4726252d604554fd82a9fc0b4cdf641e8d0001b2164111b4b47ee322f0b51dc68d0aa2f010c5b4452d8bc014bd338e82d8c80ac3cd51d825b7974560786d9ebb2e0c21a74ed498ea64e4d9f8dfda4eefa38510b0d0a8e5355d158cadb292f5ea467fb4192076521645ca24aed9b30a70e7cec7edb954f66ec3de65671712479d398c386ba02b0bfb4e59984e856a6db6a649f62880e8ce3c09252cf8317a39fffd69977d5ed01b526fbfddfa7fc7eb886e35f6252652dab31a909fe8a303585521b1c7cf5ff4ac76597d301131ff67fefe15a63832e513b05010cfa352c734064d9d68b6e0cd26ccdb2e5a0e76143829f1999781bf4a736c3b7466814ae64e00ed7e3b8e121b1da0983ec4893b6fad39a5f0b459cfb379da3f364902969a163f50db1a90dca915020c1904ce9d8f78a34929109fd8cc126fe322bf005c5fe49fdf63dde5bb9378a8906063aeb8f79e9f9aa5d440faf3a63f34339ff4786274b9f5f40d1e223358f5c8531d424447c418020f419e0fffd08e1daf07c66008e6b2c097126ed6510388f43cda197b1192cf60c8873e269f4d0b17fec3ecdb19bd14f322e569341830bdc7d5d311b1741a276b4c6782e96946ac4caf4bc46915c132ed7d4e0b427420519e6b0f6554d9a484ae389465c69592a4b228af2913a594c1a13c876d94aa8690725d6ba75de15d5b052e24a00546afc26ae3872dd9e5ca2c8a412c1deb1ed35ace47559f865dbbe5dd5c0a839d0facdfef56e9aec2a9cefa92d9d52c1ff7ec336337facab46241f6ef8ae1702fb9942ecac0db2c291fe2e5a1eee708bc0821ae408476217841bfa82729adcc3f9a83598c200ec5c4ac9c0206113d3b244796d10a7ca019abed7c02e3a03331e0104d9defd934cb60206738108b642e0dcc8b36cfd656f78d08e25a1968fdf55b5dd6db78e7d345436263e65be2b28223afc79acb0968bab1a85c5ba68ed7a9800fd6bdbb8b3f602f82aa8fd98e6419e4c86290042f7a23c32b2832f0b2dc9f2005f66af0504169d331ec9d195a8206fc7c85e99146d845ec79cb279c5c8c0981e3f8bd76ed6b98ba01c4adce425336a888d4663b6508c09a6861b8012b368123e16b26966b8852a73d6ec26f9964ba10e0795cd50323e0b79ae83ad40958a21f0f552d07791c1157ff315c0c5e04617f3e1d7ed6b0025a1b5ffaa7fb35aa4bcc012179fdb6df006a89142c668e093fc98c95b0021e81fe2075794906769d43fa097e36a484f0c0244569d33dd308732090dd8cae7a158e17829caa29da62f12f1e1126d29720597112fb511e285169beda042542d507e282c46f49889cf89152b0a3c4bfe5147f1b2133c62d6b26c128ec3a5554bd9d0183182a01e715f9374c584e66204e7b965127c03f9ef284b5098b2b2a1ff866d4bf37f260b955cb868dfb653824f72b0a96256c877f50c8c019d37ec7a958443ecd02d239173cb1c9acc45a72f30d628eb5b8202a11776e2d9e8a4e95d6048410e3b8b6287f1e23c131c0229b7871dacb9e982884407e49ad09b1a3c1ef15b7bf2c96c1fe55773a0c2eb54b4e8ffa81cc416bc7fbe6429e329a0a470938e657f7181873397329fe5b4b5d06f0d14c6c3939209b325489c24a37181a53c1109cd1202c449650d2de506f74574a3ba1866628b86a726c12ebf6259d699ec749d0eede4bbf19f67deddd5802dba006aba138ad3c25cca227e871b69dc4eab5483159a32d3fe51485f5e6ff9bb660e62f67528974e01bf3ce3ab9894ad24627848a804c4eb54de8b965509a706394da0c885e188a198028134ef27879a413ceb8dc21591fe3e0664d595ff1bf34a360f407d1c695f44fd74d38799d124835ee8526a0e4765d68d368317efea2ec568b198029ab42a85bbbc5ac2adaa74a0c97d00b4796d534c4227a7cc71924a730a523e981545e401a938da0ffb5232407eddab0bd283caa4ddad0aebf6a917b910473eb9d14d163c69d1bc7c7986c9c945af4eea62a965c640148b4c8d30129c6ab85f39e2a326d84bb295ffb85bba4adf2db17024784cb5e6eb5ef7e3178b1544b2f7fd05bd366705258ab378630f7eda5f0a246c0467d2c4b5d278932fcd824c0703c6ccdd67701ce923217b71ae9bbcfd2447289690fac045a57f4b906a04d279b34783266295e9ecdbc3992dc14e248eb84bc80ba8f6ea19dd0db83188330fe52b1f082ad4e4c001658ae03ee0c09c927da102acb9f5b51230fc48c58f7ab85bb2b170039fc9ba55c3959cdc7af8698c6adad6bfd5d796380200b6cd946c9be325a8d611e2e890c8dd5a2c6f6c6648dbdbe5cd52d62f62bd7aebdbab0ad7ac095993192c5623bc5f751a10138c90dd7b57f0b298e1c70786a390b6c67f210d92c941bef6635acbcfe490287fa717dc259218dfc18856d98a450deb9e63425e8f001875f6c4c47a2c04398e20bbc58da12844e65e9414289cb61c202abe9eded57a89661c69c26b2ecbb5192f3c80849918a71ac9f2fde82c319565d632262f4fabaf88e60dca3bffcad93783bab1b03c84adb814f94c55fb7a4f82d49f2878053c84788465a8c0dd58be9b3fbf6b53f58f695a986eb9e33754adf2bc4920d3bf6fc76527b77e49576a4ae02d186c491f3c1e000e20d257a1c79b255b22e4f9b061e34ad2706d5e3e728161a0b822ae1a2323f30ab6698681f77854a39ebc8797a40b4a4d15e1eba63eb7d49432943b3cf33bd3a9c8f3347b1404ce52480b339ade2270802805f5bca80eb0ab8fc3b1e3bccc3c20038c148c7e0270ae73151d078936ffbf092522f10a98abb89487b79b1291b88722bb10f4bd2cd80d94fe75af0279483fc910e23defb27c636826b9aa191abd14c69e04aae3998b7ff95c728f41e1205212d001ea05611200f030a1de11e60ebefdb83521203f5af31f1418cfe4389d9590522856e52a58099c19fd65360a7a4e01ef631c9ef3b1197d1fd973009f55a41477605bc42f41928a3b8a1e2f885478eba85b6c0b4116a5659d4d47f0a22c0fd21d507ccd76132b1f4e3ec90722876f5edf4050650cf288d31ade7fbef0933e3a530006addc6d82bd76c17763871cb188836e55f90f953ce010e30538f011606f5ab1f0252901eb90d2180d5e7f9553ee551eb4cfe8ef5307071118c87e0aa3894a82d894051e2b5e10dece4a3bb69cceea908cd5b169d35efb67e8fe4d64fc20b216b31da4b8df9df529589868e3dc8d68d698d1a6ff214deb8a9fb35116e34dc1ef249ef47a1ef19475d48a16eff2d73c0966550712a5fbb20b6d23effe869965855d90ffb0bd84f445907377b245b821081491e28a6b9571d407c5f2f45d8583f155d94a6fa6a34342940428a85a739c3e07314fb34c4c660db8028f0c50c3686699adbaa7d251c1a536b44e9f9ae2b9f983ed65cb27cac4757f0095571ddec284e37cfb441d2be2c0f7a489efdeccd271fa10db6b9c1d31adbf65dc2769c3a159950fc67b751fe330877f10b91127bb1755563d352162695d7a1494724fde4e2ba5708f133cdd3b0866986f9e63425cd20048e2a8736a930c6f2ad0de4fd705d7cf97c9a02493a44ced2734b8352ca6846943f6fe5546b7287bcd5a8547916832c228368c476036040279437ac4cef2e56a6e990eb906b25f1ba3898e09644df5bd79363076c571ff98df33240fbc4f5e672511312c14a9d7edb861a5cb2756f235f9075031a6c417b2c092364a49091c331b519252bfbfc0e14cdfa21d7aff5bd69c99182583279f15abffdeb030ffb68ee2553bad4eec1aa6f4eb18e3a978503b438c0bb79d22bbb4101423fb30af8ccb0a14aa1a4c7b33ac3ccba055ec310defb2e20c5280510f66a9caaad541d6da318b477239fd679cbb80ebb4b551f0d02cbb7e414e089779bd47d9887763805105cd3076bd46c4e39a107b075ee98bf8807305510c771f1319bf1c77417c4b430379087fec2f872a21e333fd2278c33798bba846bf1984da88a94bd533f227c4ce1f6b089b51ed370f633240c17818a507b705ed7155badc722c2e35661910cc1bc616ab07e9ff2050ad5ea3b0508537617f83836ac15cba8156de15b0a6b55aa19b964d3be159912263dab3e8f9d4f16473c5c4900f5e8a73a332785a9edef217b3196df8a05b75e6615edfb905d0ce3b7d2c02def5945fb3d0453bad3442d0b0547fd9fada8d7648866124aabbe6e07fe9838d1e97b3b7b268048bc0a3ec24c747ab58dca2c82952aef6d809f512716f2deee46a6cd55d1688b4b5b018c4eb3b63b7fc422deafaaa910a6f405c7a447fc952b3806e7f1d24b4126565660a09be3600d85619b1f61011d1493c06d6d2e012507f62121b2481f4145fe3f88422445a36cbe2e698301508c56e265d0276c4a6a7f7f456bc89b9bd04565a8704e6bbe1069c19c35426c76d505a9bb800a09bbb9491bb255c02e0050ce78f3e855860c1686c1dbe1e66f2de55dcd3c49556c827a245888ac97c531d76c180fb9a6868263e2c013f3e347ad8ff80a8c10b5bf78d01436cb9356a07ad258776de09c67fa57297fcec20d71951e5f331b93d4a56327ac350a80cb599b7fc579eaf17622dbb1589e35e5b2b1851697f59228b256861e9bfb41bb5ad963b0c5e58e150afddc476ec2e81fcef15dc6d47d86f4316a6f1e7123cecf542d3ccd082e4c4e6d2b212450e493975ddb89a29cd96693e5322da19d218c66cd54ba9ab2d28125d21cc644b78c05458231e2354cda7b9b48264a23656725f8cafcb2c3fca34f99d9221d25466fccdab1d14f311d2b4954b9db7fd42f921dd789b44a23b98bc24d950f15fe5105fb2ec2f098e9fb13804047249056cef2776ca7464d94ca4d43f11df3d35164c2282e0d8b2ff1a76cc2bcb5c59f0354ae280c1f7210ad1517efba2ec5719534156c9d0b0224f04833db4710049202bcd2896da80103dc2153c15e719644263e0794d89ff72c2b3b82a4b014fa4026d6e1ba260e37977620c74ffc864c319af1c04682b3d1219e80ae8d6c37b122cc6e6986e2bb75cfa0fd674e97b2dd8ab9600f50eb46e41f131d774b8de03101f7c8ea3ef7e652773df37299701c23804a5419ac188837415c0854ed3f0d5b9f50a710d7f0e55563128dbf9f3291591195a938c77bd0f91c9a311845e3169ea8876936e811b7fa672c510a29a3e04a24be0b09f823513fa48cd091062ee43ba6ab004a3dcc89cdab8fe22efbafc7bbd6b9f929b6992f246bbe9b91970c06495730863ec176a45b0bb0eb3f86fb11cc37b75d109e9f8c9d87be3a156ace227c711961e4d8a9b22bd2894652c6d1d7e4ef53c798b2f062521fcdb1e128f46f5d097ef1037e3890a148fd78de95105b54505729425158e4cc2525ada19f140035abddfb7cfe21731e35b6f8a13ecc215521d33e7b8c08f6c805722c046eee62f4a3f6958ea7c1691185ab6ea1a4600919ac2f08aadbe2796054353124027a8b5d899aa25168c8d7a1a26b3025332f13c04f5a8925b74278b337fdc852b4a8f0c22783d8745c12a3552693098ddaaf20e8b1a18b58159493914a5396828d9b061a59b004c6f01a9c7e5edcf56b7a2be8ce1da1e524a340cf789c2c27c80211b9b446d5c64f6f05054ac8edc0dde5008013bb22500a4258551959a2450442c0a2b71294a02c4d9d44305d566cbe90d34a1cda8ae7475634215d08742927fe7460836c66cba4aba249e581eaaea098dfa6aac0779f9250a27bd2f7270c2e343c7508873259f84c28d046d728286d1c97c25dfe0b9a80f45b69fdc50e4151febe9b459abe536a4198b58a1aad70261af924be7c3895698b4bf86aa1b6c6ad77ac7068c63cfb03736c41330370ede7a1f907ce0f7023ab49ed522cae580309cae92461d6cbd0e415a95009eae266bffb6e09c406e19a21c4e37ed32475245e1df2a9a7e883d5542d6b1271836dcbed50078202618c05f41ac48fc8e3eaf911b9180101d5fcb40a0c8c8b479257ffbff715ad22e68925b41ec301753c87044ed47fca7ffa74bcdbc40bfd989f8d75ed28f7794d0f45db7d34a9ebd54796942433bb40e488b813680f92a5a27136ba0c4c7a6a4821e50593e0e5b6780554ec2a548a0faa6297ca19bd846fbaf63ce9ac576013c22b3493810a7444164c54cbf5cef03d4b1d72f0d9025e8ff4c445bae1531d3efbdf2f3f1065d82d1fc16763c38bab5a8507e5d6007fbaf2fef33aac7fc22744fd012ec318d0adf87379bc74067d07b1e23070d047fdda82d471a26c395b9f63ac1203458377c4d74efc0aa48a158c586411992c67ad81dc7b3b10b0c2390a59ad5f4a45cac782e885049373be84e14c1d4e08ec237ae717793e13304047aec0a1e111e7194ec147edf14c12c12f4b5455696bc44f7122cfac12ac12d77b06ba92b69db9f96930911bd2846b39d427507c789c7692aa38beabfa828b4caa73360a42f6570c813bd609950d8bf73051b451b97eb4f988185adfc28931b3fbc51ed893a4ede7c77f291ac13a22aae28f5cf6050da3bc67a38aac63c3a1e56a933e228fcebcec44ca4ee92c6e777878389d8d42876069244729955dc15741568357f30bc700ac96f76eb4a11d40e5c882e22e6ed157fe5310ebbe53e439c2a4a9283718bb29bcb647e630c54de26358803895c6b1aa89016c14169bc11b2d0315745766ef75709a9fa1196830e445a5023e0652241d409934cf0ce6827639e2359a494cff156d2853817ea1d576bdfaffedac3aed08b5051c9dec746026ddd0b51564c5584fea1e4b820a5721f4ab6eb52119aca67cce3683793a25cbbd30e9670a17071eb81c09e419293dd1ae0581ee1e34b96128f1adac46f391ae35330d3c241f7b5c7374a0da8c85894d144d2767c49f140f04e6cc0fe968b87d28fc49001009b1d157dd41c362c9af2a2dde0d538e3b8089301d0321f87467249e2810b4358cd70681d62e59a47614719754de4eec593f05af4fd83031c5bf5c53b9d293d2bd59503d7b26a0ce4eac2ce2b821f4b022d8b2fdeb9ca361962995f8a6b1bf6993139b41cdfb75a5e38f6a145521feb7849e57dc0b9d3ec5a2310f4e1755540e6d0b1a0202314b6f408cd1ebc9074e0e0c85f978808b1eee0815a9b10f88c8347d070abb6089f7bb1636dfeca6e57acd95b63bd6ebc8f053560250c2a88cc8ae96da1afa9a90f2eccea482cb8c506eae8d92cace4a047f72aeb3c31dbcb0d2b47d454b286c8978305c93f44c968a298a6ff0c61586fe8defa6541eb64739dcb7df5d04769ab86edb4c005cf0eddd5ed6582ad551115b80319c5d41218aa68f57a1dddcaa302919f9ef9336b3873465e25450c1df1e4b91f45ae8b96e6c26028afaeeed0d4a3bb474e53c2b4f02b026bcb48a23ea0591da1dd00f0e0f812d2169be9541b87b6655448c2c0f321e44775d38ab5068b9b51de9f92a91909be8a2622d78f0a28566be2a437b528f253ea61411bfc3b05ce8170f8535ed4e8bfd26d059da2717c30819b9e5374fb630a0143b5850b8904ec6f1275cecd6b1f4fbd89dab8e63515c3fdeb68f494ba8486c9a72d94d07456080a9b6a53acc37bf444dec6afaaf20de0e4a12cb875816c0cb8fa7ea83b4f24d06b5520e8311121cf29cbf9585008a5665deeaa5bdcf5a58eecf7cadaba2a92c62d8fb9757f4221058b41df7c47aae0039e1aec2d7aa54989c250ca62a038e3f5ef60b48806e3a23e7943e92442449137649f87ce99133a809604b8288de67e1bfe7a9d92844318bec8ed31c5b4d999249a2d8db19b414dce408541dbb2a2499e249d2397b97a4e13ccb7e2e02ec66f094f6269ef84a741652c3af0c6baecb94e4cdaa49e510d342ec3436198ea0f7e8c376cf8d3f9cd4ddc498d1e35ae85b8c21db70c5a70f6ba30dd383682fbb4392b4fac7bb8e0c5591356c57648ebc09dfeaa88932f309b199963cfd4bf3944db74048d1819f19ea264c48ab5c4795085f6bf00e019a7bc5daaf61ea6c3a6a00faaa5639173839f4805175f6473a5ba97448bb26c596f5363580d8172d36ac7335a4471d4b0055097aef591f09c48984b81d7fd0fd33279dab6827ddc5d80a7023fab7ad26b8c3dab86f0cc0879b883858f72f664389c7e1b57951bfa63f0d4d1498fdd346530408ad758af8516a8a572e91633a0dcd716b08499b7442e0de97131ac2156a7a3671e185d48ab1f22130e8cb5665bf66655a10b1afd6d5f318394e8d84768bef4f64ffa8932d53486ab571f81868f073b164946267b97d465fd4bc89f10b0914f7191fd057ffb83b2796582c7b2ff4fa883ae1cc13b2d5c6e1c30480a93e6b95cf9574dcc238eba8b65481837cb08bcbcf9a219fbe5b1f65fee63e7a141be0de047d804d4c274882608f421bca37bdea909f1e31892a9deeba4a500f1cc8176d727685898c185c38e13ffb987323d63d47ec9555d873a73b82302e3e12b6b291701e5b4f8ed524da791c9ae9b9a0649a008708d37c4a4e14ac078316c5b357968ffa6cc7657d0ee7bc7bdfc829402013429013ab8495610794c88869d91d35038c1518cd1d50cfe2e5c98e696586920340eb7a9de3b4a12a46e92da5983431584a0ba42e043f70e6cb19586d778b717b432acd1f3f663dd611c1bbcaba199f995b282389cfee63fe80ba276018c4a52b1e88aa9eca544612eda6fb347978d872e420fba1862039b69c3247956cf60b905d259b6b960d07aa96cb9d59ce110ae728da9c1c5b26866e10e22cfe112b4850c1965cc000b42a0b52daa7bc341602d707034c898cddb755f017a994e1a33dc6b4796a8360817c042ea1b0c557d944fecba66a4bd9ca07f682ffc0aca618970399029b65b6324deab1e5bacc90f10ad0bed90514cda481da16ddd95d9f3b982c38c90022fb4b873b13a5956c8768aa56c17afa4bfe91258a0762c21fe6f4c58762496e6aba168c0490a947dee009601b4f627ed48aaee0195fb5f5520d36174c41332d2364bee2c738244b8e5a563c43dfccbd1de620250e9bb8fa1d13da5fd4307a049769a3da8368ebfaf3feef5d94796f288fae9c080f280241cd8932ceb4e6216efa22e896f151bcf0291c8ddde81d0587c959377d54981cd3c8c78d0ee4ba8c4f7a9ebfa98c184829b838e3a3505b1c4dd8238d71a846b225cbea8a2e3e904b251f6d3558ba408b534971e404839597c8d258cf9bcd9e53855a38d18070ec61c3495b3c4c86c4db3eb8c7f46f03b1d0f0d3e05ff24926f4d761390d7919bb799dd8bbf46325ece63e2b0718fdebdb96995294a69e877e777b5e4dc0388f0a806e8f0f4c7e05ec46f4b93d6377f2c2aef7ba517113219099a839e97523f311d0795beb2fd804d6a34747a57367d94dba901e92b96178472503991773735a1dfff33d956e3ab09ef0c66d0fc189d9b2e4db319117f86028bfa2e1c90d789b8d2d72ce16c8f9dad8689ca2fabaaf1a41711e8997fa29cff8984f592066dbd1cc8310164eff1bec7114b3c2f0efc51fd6793627371bb0e7fd282c6ac8bfc18fbdf0f6b42bac8cc4834bc5b1ca47890176ecfe01980d443adc0f57b882701a38ff065ce1b0d7c2151bfd4a9ef0f6a106a049fedf1211f00c0579208fffcd1127dc668fb14880fc02223feec403292676a06e746c9e8ddb53929d77acf585944eac7ab6cd8c7d2a24ce44a7a76d4d99225859e5b9bd3e53542b4f9eb72fb4ab0ac59958f5683b2f930856843cb74f58cbe7abbef32ead78be5d1f004b34a2e227977434c5fb7d48ea7d68818644c644d2454f8e7ca72e394322052c218763a89423c918086e0e1299fda825dc1c0408c65190758e372f8a8e31474157ab438ac6863ba2d17281c007639f39eee998ed49c719be8223ed71f90aa92eb2fc39393c5d1036704053f0978506c08b855880cc862940151f174ab2b60689c7dee7bce5349698026010fbc080b24c34bf3cdd4478c0ac08fac758bc2b106ab9fb26a9c998a69d15af84f61ae87bec1e8b9bb749e788eedc62a15df9e05c32fbf96da6e2fbf6586ca4232b5041445c1e5c4de2d77c6b14a0884e487481247b96bbea488e1805d5554389f8702169f39136020768251b6df481bba944594e6d6ff108764bc6ba2997bce48e301bd20389627309600f55e099395160162cb0b38226215392bc91fd8969350fb2d2c76b1f41821bda2e91d4c33a8c796634a9c96d7857e5f69ab5023db4c15e92979f7ee27a79979beb6299ee6e52eb4c6b8973e2c377c1f6bfe4fcc7de6ee94edd4e1175b691814d1da0d641d97e7560decc04b7f455bbf122b38e698ae0da89cc74d1a278251e57cfff494143b59998152caa795c7f3002879e6b1b4c522b01684a2028cffecc478fb8bf1d4640fa112b50d8729f7749b71fc357c7d85b4266ab51986f394edc65c40bc46b500dc407128d1903f8c5a6005a9321e3dc6f0632d00e435348ddfe1157d2a310e712a1d9fca90623c8e5f6a7a3ac1147c594e418b645ae5d1d3c1e326ce67c5921fabe9b1443faba441302c49bb93389c59b5ce7d328f72a0d8019e95312996ada084caea59347e6e1b625e616c1fcbb5d69125d1e4c679fb87b5bd38ab6b61c76ab89cb243ccc89a2ea8d22effa0e875d74ab2cd79f9b4653f4c58eb7e7854ae5759b8cf47c60e5345a98914cb151c7508e0630662346db2fe8ed083e982dda421e62d5b3d78f1fc718da91ae0bbc60bfaccd92e94ba0fbc9c4d006512add2c14ab4881118d014ddd0ac428d9aa225c5b28b77852f4ef14929102264ad60ff6566641c74390eceab590f993e76ae2fd111ced8be203023e6d4ec6fd7592ba08ee008340405db3a7e159117e28fb7215d2461e0ca47e61ea59ba0e9f54ae5f5d4fb137f8e89eeba8d66d438f27b00321c18f94f932195d2332d2410fce72b4f538c930247d2ce53b0a77db6c7ca284f3cae0f4651e3d6e7670d6c7b2b7c37994a5ec4672e07f1773dd9b49936cc62ed94428b4417319f5ab9407a78188b4720c4357dfd910ff8882175d73cd1d9460236da97b8e2107ce96c28ca6ed250ddee897547096e3c49dad9d84953a40643499af8e99c71ed89604459b5c8ae72dcc6f10899ab486cbc95da258c313b690dea3d3737c48d9548ccccd4a689c56c35a66004c2a6cbe89482a15bd438e351f2ad4ff21f85956f9d89241ebf3f0e06f53a091e9861f17b559d09c610aa0a4e896156f43c60d04ca539b2530c360e47f0392df0ddf971865bd0e1c7bc19316cca9e0e8de14ca239aa1ace175a8778c12595053065aeafbef499e9369bb21f0769986d0eb27bfc9f64023878bb8c33decee8919bc7cbf5a49253c4d9839179a4bb8a2da791c5c37e5979e1261f8ad04f00e4079c2b4ce1f76d2b3a9dafaf613680baa60594eb0c6110c62aa65decde9528c2d6f1e60527cf8cd3cbdc125b8d0f9265d984862b5b2bc565f7326b512828326219a453193fec1bc47500a5e788e4861439bdae1e87cfffeba9684cab09bcfbd921c8851729ce0aa15ce36257f0fa6ee02eec83ee8f3da877019af2198ebf8f085c6b9190f4cd5a076e3841991aa385e3128fb6aa2d6e38001094eee9a87ed1a7169148193ee121fddbb9990c3475ecda5000611061cac99669c8095cace984dd3cd9c7f19cbe913db010354e90ed5620cff1374bd78ce2439a65a77cb60b565ef5d64d87847119c4dd0e0a9a52d90775f48da932e11516306ef866bf1b142200da74d18b2259621e5fcf3acab4603ce61a3bd718816f33b0532270a0e3a0cda258e2764e2501da92e4fbf7cc7f1cc1e3c07319a161e471389c12365a685ba51141191f2b0f07ddda158db3d114b47383b3996eee3c4e246718e9271524038af52ceb05a049d44f4f76ea5a049c45bad1685ee1ba50e17ea566bdb91be0577fde0e9226b008ed099a37b2b4ce0d9ad26a142297f1d582734ffd9e63d96c7460f86a014570be4ba68244a7a92ca0484ee52be550a4f985dc460810d555b5df228ce8b8a8c25321ca9928259ca96dd829f31882f4ac2270a7ae0b7d445bd6e8430200c9ca57d28dfd3087f76c8fff0a5abc399663f7990afa37a5b7295bd4141b4e4bffced78e98751b642c3b7f1b85d1139676039c6c13a4a3795e086bd4b4f3cd79d6384cf421714bd3d97762f9e4a90422f12b4893d45f9f56e2ce78120a3fdd298e76c10ee36c99353a23579044b01f958ffd27e3b640f4289829f7b9680ba3da1aa2be7e156393542a3f3a006cd5cccd49e418f1b25779c1daca3c681910c4bdd55fb696b6980b9f14684ff7b6442ee264a62d5dfab72beda94eb00caff16888141e4c6202de5652c574fabdd698430e1f0a50338d61d341b5b23933c48966e81b7eced292e76c38da7ce4f940bb29190888ef27798c6ffd2e6a51774cc2b429226e0f845c2dba12612bc8140b6226eb8138e136e16b9918f13509bdd7a3c11e96750c391c4d504054552d66dab88581434d92631ea89aa83e7bac07baa6cbe07f9b703c9a91157f40561220903e61357e9a29ce11f7b2f80e270e39216a59cdda6f80a5d3ffa7fe8f191439bb87b4f97784aedc697685f2a41e3a897e47e1587877e25db50e951b7cf700568221227a7d01ff3001312d21b8e80caf70d5e99524c99a3105beac641d95b28c4e47380f2201b06b0c9415258ee94390035e206919600751a999afe1383d5eff9f5630bfe90b09491af8e01a1ac00472165294619a7db903616fc1c0463e21a5409a7edaa15511dc2d0b777fd37a0b40d7505a447c94869d4ba1972950691034aea6c539ed080344abc923a495827570601c44b64dc24e13f934d9838aa30f804435395e4fdb65bc911f4c3a43ca891cd4c33abb0630605866e8313c8ad88129b2ca7ed46ee027edb9508ef084e190466c2de11869cd9701b89a7a47d0a99181b601f8a636bf3bd948c9c24173737e3ddf3e8db25eaf855c93b033026cf8f00817e1439104fd114dae352132d0fba1cc3b9762918e4b42c59c1b615cece5338591450de8b5f77c92e765f1ced225c3205b0bdb9171babe3a606c539034eaa70a9a2221cbb3afa74fd5ba77e798b897d1bc524ecb2b55dca0c94bde51c96d53f630e280adeb7a300ee973c883bc5ddff5e8fc5f0f88aa720a454bb55e5cafaba6285b0a8ae2fb341b8b69906c26f8b1e624a1933d5b901a5365d4fcee7456517932448284bd3506f7ca58e97cda26d97e69d243ae09570f04d34bcea1349cff5ef12da7e728fbe69b3c1a96db2954eef79874893cecca13195af035a091c66efdaa386089983363e748ea6fd3a35b44f41f2eab35b308c87dfb152837f4ec3c0a9bda5134f9cdd6266aa3b3432382d79393efffeec16d96c6d412d40d9ec016a1ee1eb3fdae36c7b2556f4fba2d5fbfbe094db0475eedc4bafb5eed072788ade31689c9819049cfa6ed39edb548e90f183af1c16271aa7b547547578bea11a80149c7c2dd906987aed19fe33ea2d047b9e81c54c6995aac2a5483b46771c9d91505b2089c04b1cd65951b978230cb525ba41e204b267979aaf993754388c429b4278c96330288178531fd78b1b8f75d317e2b812ae4956c877b602344f753e88de0bf19b078b12a2b7d06b4a11d104ffb798b4b5c11263a34aba03e581f650885eec7f24835fac10d3ffdf132b7aade77addaf2228e1a2710bb56778d4f80f1aef1b90ef374553d95eb9d293dc6c021aee319a72bb20ba782819bc43ae1426e5ab79f02bd7a847da10e3656813ea6514cc9b355f25f4858f0e6f1606863761401517b7822a89c747cfebf148c7d9ad6642f2f77db3550bce82f4ede12c3cfea27578bc4bda2e997469a54c4c8bd360fd5f05b135ff286546dfdd977ee8fef6856f439a80190990545e5c72ec6d5456ce7034de229d6c47f682e6a8a50e555f28e8a43c6b6da29ca36aa8651fdbb840c5117f86953b89f9e47551a8d8811d97968ed51cbd9405df88e9049c17607aec5d1476957d23622fb361c4efe3a85f6b053552d6aba5137a65f8bd7fb69e1d3de5f424cf87ec1466dcbd84fb90dfb32e2291fa932f9b7c610005301d34cec92e09e1c0cec95e12cd4ab10da43ff86502f383074e3ef041396be4f77e6aa41ae11ba1f2f99cb7e8ba71ec0f1c0a854fb0c4c24d2a398e5340c399461649423a7ea7d2cb804d86aeb120bc6e2421a669a6dade65cb2c7eff0044999212b64e018c8a2a7f76ebd073428f2b0240425cf363fb7331ef79ce3b98dff307e559388443e252ea4e45b0d3127d04b5f24ec193b3fc181651dae6c693ea9daaa7112d1108fc2ec05fb21345ba9552e56cd0fd186ca96e9a5fc313b494025afef56359405a554d07c8bbbc99b976be40a95760b662685c32a1767ee038b887004852f0556d59798b989dc4fe17c36ec47bfa87aad6711bfdcaafa4b16b6a2df769f94d6f2596b064be974a70df5ef3f1ef55b37bef2df7de52a624657e06fd05f10551878d404d9ad1ca7e68e34f175fbe88df4041b88bea247dd08159c650491e7e8c0e3b1e48a03562925c52105eda9e9baace4297ebb71c70dbee5ab4146ec48db811f872fde65cb4d209dc36b7c80ec2977855ae875876d107be5c2f1ac7785d97ec78f9753d29cb6a1d8d26e94563ed4af8223f5a89a995389bff1dc3699e89102cd4e04c8a134e38a154d9d124f8fe432effa670c40c6510c2c15088d00f2ce136618c106758d881a110a116ee2e42a8e1f8e198c2a27164e1250a5de47bdfd96553549959b47816410891cd2bdd26672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276707424a6750a1102886301402c58ac80a02b984a69f951f7a89006882d98fb4b185e5111c1f5bedc0524c25b02ecc13c61a038e9f1be339519934025faead81250545c5c9906bad8df84a1c2b4f35b0d420c4d293828262234ef11e282d15272736621541273a4dc3f2893e8e40558b15d94ade307c13493339c4091cdfa320554f481f74e0eca1740caff4913f6089c5073e4b1c0f7c963c1db8e1fb650ea0c987213ecb1dc09987252038f0599e36f059d668e0b344d9ef773240930d213efb14b8df5b70e6c2521119f8ec4218f8ec452ef0d98da83ac686284053a409e2b34b2108ceaca46029d658e0b3f754e0b3ff50e0b30f617953c49940d7f0fd6e034b5147029fbd47043efb0f087c761cacf2fdae04344520203e3b0d9c1995e290199fbbf580cfbee387cf7e8a41d10234c5223e7c6e2eb0e04c0a102cc521199f3bc8019f9b488ccf2d448313d0d4343d7cee277ce08cc90d2c750d8ccfadf3e273a778e8ef1f1d73f2a6c669c0e7f6019c51f1fdcd03965a87019f9b6687cf6d8377744c8919a0a98174f81ccf7004ced4152cf590057c8e2c057c8e430978ef4d5dc4c5e74805159cf982c0520f993e479f99cf1108011f53910968729a08e3329f230f9ce160c96b4a9fa38f98cff1268798ee5b7c8e3330390e0e58f2027c86470c7080cf9106b3e8170134395084a929c2069cc1603e4316013ec3d50b10b0e443dcc5577c864e30799108e3eff219fa08e0b38b017c6e81fb5740a7affdf5a4cf01c001f8fca3daf2384093ac89307006963268923611868597b00f78e076e0fa104d189108e33f04101cb839f30ddc5c35706d4413a6120216c15219b839c3c0bd001ca289262c28889bdb3194056ece2a5043811a9c68c2782680a3e3a5ab25019d08e8404007289a301b20802ed58c210f18f2439168ba8cf8708b60bf321937670eb83168a2e90aea81a6c64b170ac6cdd98b1a1e6a70a2e9e269000ef6d96280ce0e3a5807289a2e1b1d80b04f95bb2c6088028624e01689a6e9a28b60ff1ef2d24cb94b344d2f4dc789a669ba333757045c191a5caa89c9a1a6058e6cb90b50344d9b0833c48b4493341261fc0fa063009d02e8b00082b9794480fb7257dcdc9eaa89261994fdb84d34499e08e303b82e80eb72493737002e0eb7e5daac3022d1e443d80a5b612b1fc288dcf0ff36e21bfedfdf87feffffb3834105876fc1a1e562aa51ad59a6b2d75e1bb1b5d65a6badbd2a2d7f43cb0d37fb916b1bbf6dbc61a9a0540a4b05d9b0b2b26223b66165656565656545c5fedbbfd955180ae3c150180a43613c2c35b0d46023666161616161616161b92aff36bc0d373b4f0db6f14a0bb369b55a988dca6834b211ab8c46a3d168345261f91596959bbd466544a5521941494149b111a3a0a0a0a0a0a0a0a05c9595575951b9b98ba4d8c623db78bb5241a9d495ba8268303131b111d360626262626262a282f22394d1cdfd83238a0775f19ca8385161233e3939393939393939b92aa3a76144c3cdfd43856d6cd2ba6c5aadd66553526bc425b5d65a6b5539799313939b7b87ca884aa532e27dde6723f63ccff33ccff3ae8ac997989434de662a28959aa92011c7452ce2388ee3384ec5fbead59b636aa226cf444dd4e4e948ba88bbaeebbaaeebbaab525f54ef8b8e8db956abd59a361b866118866118865d95eeb98ebb190ea98ca8542a2354a394524a29a5f4aa70bf71f74537c65241a9542ae892f292524a29257d8cde178d493fee124dd8cabdfdb76c66d98f97b276c92284c9deb3ef2c832f59673f2e329f9cfd04b9fb8a1ca0095b4518ffec073bd5a9fdd82afb59390cf28c5d017b0b38d309a04e3ce1e6169848d6f9a003cb57c530d48b847620c61a30c1fac1ed9f6d5dc49f22511ddf80e1cd36e2e9468e37aa86b0841086000408102040800001020408901c9c0b97d9c6d4de8867c02588ddc71b51aeb54f93e00b4af4117b74cf10b0f7209064ffe3be91b8cd764f93b0ae7d4a3e7ffd3c127536a2fc26097e33b2a934d979e43e82b196a2fb52bc69172cf718ba318433d9e73642f26eee225f72730b8d2a26c2bca7373750c9639f899e7eae4f3f4bef8eba18f5e688b8e4e67eed450dede9f700b8ed2191235135002eb34eda6eb49176f3c265d6f1cda5b3836f3ae651ba19f2fbc67174469d0c7b936ddd135551d53d70464a16c6be85b4100c978deabfcc567b732d6a5a7f0eb9bd66557433b4ef6e0e4de52a954a2557703c18fb15384dc2220dc620bc34e00bd63e2bb8ce4a6b03b26ac017ec4300613059b3dff8cd0a9621abce798330e962c83b8410ae1355dd63850b9d077b932ec67573444c6f7669671dcf9f9a168968128639cb57ddd3249f6b1d8dde5518c3d9ad803128b24c3f760f24b99af6f19e7431e8cdd4a49b315f8b249608e72c12bf0310f92452f69b2bd47e18fd35e29d5776282da766bfd15472487c230ef9fb8dc41886611886612a954a9559e01ee04c0d4f77b36874ba05ceb4fb07b1dd9bfb876812e6afc2be76312e0ac391bcd43dee823de97f84f55021354794350247c5df7bbfd91bd187e873e401aedd8ced5b24ea646cdfb9e469d45a47a312b743649f8d54802fd87b364e01c2603f2d89ed9eeee99e9e6dde20eae5ba187d73fc96d921ac1014557354d1802fd847159ce91e7bd8d9de81b18f538847bab8c2988cefd158bf62d17017cc6fda05fbcc65267565d4f22b52ac503354ddb84f935eeba13df5fae841c0b6c7fe51503caf219ce9ae4a0e89b7bf21c2db6b9f6def7533e8953922ee6eeecf6274dfb7467687d8ae100d5541083144cfcf10d54a4814405800180a89c207f60e86f654b3d1078e88456d451a0d129bd9cee61c5c68229be1173066a349d867191a2cd85ad981e5fec1d8b74fc77432be46261feb60f4ad416ff4d124ec7144dcddd823050aecb18fa88ed91efbd8a3637c744cbcd9b69b0dc3a1d102f763994f051a05c51b2f71d9ca6805f61b013869bbe739cb03887c247e87a8ea1cb0d72c8e88653c9edfef38ed820d01c2980fc63ec39e2018fb2c83311e8c7dca176af6d7ae11d271308c7631fcf69536629518164f0c832dd8ad21756a0aa28e298960c208491081085310415e1faff8fd91a5c2fe14899a5760f99bcc3a1e369a3dc4fa479322f48a50513423c903cb9691d87217f959d00116a0a97b4418f95956518002a9f9e59f5d0b583ed7fdc0755d8cf8975f1ee36f7fb9bbfb8a2679f41574914fe567cf5bb053588ed41afd8f21ceede3f60decbe991235fb101fd231415de2563837ac226d04ce6cf1bbfbdc52907cd7bd6633c9edae96e33bca87f770ce3a4ebbc847a5260cc79df22cabd547fe4ff2234652db8a7b1dda575ee26e77affc49beaa89d8699ad466c87e5a653fb9100dcb59233ff909d658d94158deddcd6aa10e026a1f1c644bdcdf1da449b28960d929f8221f06b586bf0f91ef371d83d3313c513a13767bedb279bb397a3723fe85ea62f4c7f71eee83a766f98e92abec5a70a10ed2d7c74ec54ec54ee5166ae934dfd2bee2fa473f6d9de6e918196dac8ff5950bc117195b45b07ce9588030f2a5943c6ab0949f5b7e0bcb2cc017f9b975e0859a7b958233d8cbef23d4e89e88f5c718b11c11fb8d36978d3ee4536c84c4f2860a8c23d6e015be922f49ffa39a92fef1a30c0267a047d9283076714793ba0cbe4879b38d1ffafd5e7fd92f0835ab71a3860bec5ef0a7df6bec0ab6130c3b0caf942b600d9ca2e63a7f7a3d82338d2f17d6876d8bd0f6d0a4eb61375f879ef7c57c7f9f0fa5f7d0311005420b5d6026b196ee4e428757454209a1aa6b015fe284f32291af4343082184f22ff872098982e6afefa16372f561e45926b19a42862adfb121178f1fde9dc119f9fe5ee5dce616594608658bc7203f7ecc0cc60e4663ad070c3ffa95d1860ceeb62390c1f0d6884f7f8b36cbe0d837cbc4da24ef21841042cf8a60bcb94f2bb95e1b3238de9f339e7a0067e2cfbf80101d93a30f9e3fb3c49b94579c1368d224fd8f46b7f6a8f183b0f361845bc6219ee01861e20f8499a72ebeccb89b6dc8e0d1142adc525a35c79f4363f8be0ffb1fb0ffb0ef7bd16f9fa8c4c4e4137dff5dd8a4922b7a1d5a45fef5f23dab22dffbefb74dda29330307fc25009668f8f9322ee08cfcd9c2a2e2f389cca4812ff33f3b4f4da2e14e25a0cb7c1527f33494e7a9a505b8e4f3f7f4374f0555e6a046fcbd0e5d628da85ff29b5b93a7b666dae069f2d29adc796a520b2eb1378ac0dfd71e799ef0fc799a349ff797c521717d179ef7592743bee779ffbd0e7d79b606c9e3885845460beebe7bed256bbea3a6644d583f7b1a3a18fe5996d53aafcf01c01bfc5e5aef3f9be5671fbb1752087b37b76029ad8d968aab15e1287bc097ec45b85a921609aeb60bea70b59c0e87abdd9c66c3d56a2c0d574b7d28ae366b1f19ae163b82e16a2fd585ab9d3c13572b638dc4d5ba0df892bd0edd838b6e0b7cc95e462cba2f544622209a3a08d33fe714614c1bcb26f56f2a5c5f574d7512f4600921e8d4744c2c12051168848c34f1d4a448c33397d915e50542e4c1f2b3ab65c7c479b2d12e72a7ce2b89930cb09438d826d2748c0e9a788a34dacb9025af8799376a929c71c6ef9aec081d3a383ec4b7c6f6a44ffb1bd86713cc7cf706ccd17edff77ddf7d585323867083db16b5ed33d5ee0decb7d7727cfa3a78f4d5bcdf65f2f5494c7eabd5e4b337b0cfde7fdf1d0ff2250f40f865813f0a74ecf0e2ea7880f085850c55f426304a5ef49b892dc938e05872ff06f6f9fb1c8e817002ef80f0eb7e8fe85e7eaffd67e97b19079caba8e3ee096507ff4d6bb9915d20f84dc2ff88b77e87709766413cc30e402e1aeed24e24c35512a31d8ea0e125e9fef2083fe288ea2e5e8497e4ad3a18de80a5a075c42962c1124d34b184b851d7b828e5f51cf79da669de57e9514e8bdfc5e7342d7b4dd3342d6e525e4eb5af7a4d504a29a55dc6695fedbc8ceb5ecbb8d7b48e8b9b949753ad2b69826a99573f8d769b4697a05d4729a5947ed5ebb2fa79dc77da679a5bf9979d9146ea24a7ce451aa9ab384efbfe94b8c5e8947b4da34d50aa518e524a29a5dd129da6691ac7957cf5b392ac7e9ec6699ac6d1cf2817b5295ff328a71238aed3344dd3bce4f344748926344dd338ae2bf9bcef4535fbec7df67995d2cf344ea323ca754ffb689a1228a59c4639fa1cd5a8c74de396d08926adebb2ab1d6bbe846794feb5627124dd3b47b9f7eee68898e466936e467cae9fd208315da252eea2d7755dd7755dd7755dd7755d97a6719cd6c1a0b4aed3b44e139188ba9e2c48057a52d791681a1755947baa048ea39a96691cc7699aa66954a39fd18c769c46359a699c0d9d0cedfb674629a594669ca6659ca6699a46356e5a20528b5e0aa20e293970848c59d682a3971a937dc986b2493e553efcf7121011c6a5cc70025eb76963c7ac03cfb9433ee1737ecf0b6a4648c7810da009cef4631f691c85723f39993fa84ff51bc0991cd551d1441f7bec461158bed6cdd8de9f6eef99cd810358ca321f8c86005930867dc7d69119f69687e83e508eba4e92fecc220f9cd1fe4ccaf939e299699aa4f3ca0b7f6cdb748d13f5e6c7a4dd8cf92d7fc89bac9331a7a3dafd1ada6cb061150205552250e649a40e9232bccde4a84ac0d0d42ff10623b510432336a4bcaeae7b5abf44f42dfaaafd25a5fcd6beebf9f4e76bbfbd5f42aea0c2f43728582a275adbb7cf0fb6c1fa4df69b4ce495d41e47d5e4eec9b04786e47317c15813e90ee2fce692dc7b6f0d1d0f7d43bbdf3ef76f37a2b2cbd2c5e8ef7efbbba292327a12cae84445f7c8745fbfe4bd875efa27f1d25fed66920d17b64b564390ca72b7d744d9df10e1ec7be56679923bbca572b30fe1940b516e96c1d96f4697869bab77efc9bd26b7bbdff5ea779f4bbe23a1df5d961c7dac7433ba17ddbc3d7d15c8653662ad7de08b8bec69a0279c80301809fbc748b547f5ef98c2d8efc87ba35a4d1555c74c22ab944e86dcbedf6fb24cd3ecec5a486c8d3c55ec311eae058b0d61ac881069a57ad2c86f7ca43d6ced6a4d60edb32ef98dbb60af691fa1a97b220cf699f6392416fd0d1116414cd2185bb990dce12d1f7228b25be1ebf6bee4e9e7f6f96e4a17a3e4e688d8f371837df7c48a5bbabbbbbbbbbb471d0f2db234743344df77c3c1710010a5f6e12ed35f351a527f3a188d69e85cd5042bc0526c792b3843f2d34796f363cb4bd715fd77453550f4dbcd5d033c5f23113d89c8bb24f73bdacdf0aef4cf647ad5a4d6e3d812b5ba94286af6d56ae5590ac7d9883feb73a393f21c4098f9d5b6d00e7ae0495a795d688173af5c89378314bd821d7f9c484b3c5bb4ea8f8c8c542fe22a1c5722d1ddba19a27755c7c0950cd195a26c9565243a4574786c2c4444ecc15508a0cbfc58238524864415fc90e10b8e4bec4f1cfa812ff33d3a81091006a8898c6688ba17f3bac837918b44ed23bba93aa3d4ebe88874747474b4d7a13faeb60e0f7c893f4cfcfc34918ec213464e2001cf7f51a3594d9a42b7572dd43ade369b27fec41f1d1d1d9d1e327f43e1361b71f5523716a04b579dda854c8ada66c0f3e711783e8d1470af5a08becc1428eafc1c5bb8c6f5f4b75b43f438223e125ba2dbab12ebd608d17bb7165ac8e698c251b1e85ba7079e3f79463878fe8ff9221ce0f91e6d80e74b4744bbcce73223bd3a8267af268d4a7b842a93648826cde71a471f38a3dd17f4e288f3331b312b650f493f003584a7fb753d142cd56f9a3cc2414897a8928711383258b3651273ccdd5dbabb4fd6759a2cd67cd61658d1d43f2f9eec3a5d3424dd8cebe577d74bec7a497f7201966018e61478badf489b796c27f1cf761c69d97242f5ffc9c2ec6c9aabeb93d7386a66b70176ecbbe6dda6938161d864cdbe9efe45b1c6b00cc3b20bcbb06b88440c4c5862094c58428cb11d93355e3548c0087d154651a84f804ec860170980a52c86e39c020c4f92932d62b20e96248b99b16e300c8642b2a0c21be5289d0f5710ca547f7799924158f00b36e649a652344a4c463c227da2469c65648874ffa8a68f2a48c6f538e1ccd3294b2132d5a4994ab1583e75d654cf10d1e71984b32248542781005132e52829aff2d083f094c192c5557a69694ebd68240bbab05a13aa56190b4f2028f353656458c84097f999f4a954ed9280a6c923c2e48983e7d3a8f4f2eca6b20ae1842d4f652aa72d56866522969347344939925284bd94dfd9efdd6699c23278e64a8242a1ee94ac08339fc747378f6abd19aba5badaf53c47495634394f84999fe249354bd5ad542aa552b55a1be57c62e080fbd434f27b1a5e6a958c97bae5a89ab55027479d5037e219b4dfa4f4bc0feb3aeff37e823449665f7f7e117046f4f3a70b9a078e012c45d60be03c4553f38830f37700a1b5033cc4039224119024dfb30d80241a3d4017f971c7a83594ad462a5593b4fbd91648927f91785ade62d1ead1a87a76f1fc705ddee7615df779988a57ad8af7f2bfdfbcfedaeb138ca68133decf6f25604b61ce39e97bf43def3f918501b1e8b7130d1b228834f10868062952dfc322be9fdd0fded3df3e6bc48ce13dbdb4d6dfbe2abadee469d27cfaa29f4f230470a6067def331caa3662ef6678ff79ff7d6f632a0ab93148ca166a8a172ac4f36d744c068778ba9b11bffb41ec4d25a00b8e147e3024073f34e8f9e8df2802d7cfa2ef7eeb44df3c05e1c7700949e0c11bfca650a530c43a300b15c511fc3d3685ea331519df7bdd6f94eb8e074db3df6f1a27fa29faeeb5df362e7630bef73eac93e1b58844572546e3ef7380400786f8bb39624f64bdffba96ee85f7dd3c6dbc3b4fb547f53eab76e338918dd8c32131fda6f15e7a2fffea64782fbd97de4b7b4384650974e098fa1e47cc3125b30e9c6193e48d3ff246f99fcd3c99c872d13c66d008a84656098939371209a110a110128b796a9789a56290a6e1f17e3707e0c526e2e81315c6d49c4880a5085d681a4f222851f09e90a7139367c7fc31a78d37bd875ef634e2842c1b15fb2c7399a2d49250db51cbe96cd46ad4526a336a316a2f6a27a536a8c9eaa7308242650214f25809ca94742fb613eee404f6c907cf27320af239b990c9e664c19407f14fa6be4c6590264d9962a466f7201d935bd52a38537fbea7b269535be611929f6f832b431870b722ccfc4cb998b3fadd5c47a3ff2cfc60128642b2e0036fb0218c9284fad4789a9f912a8b914ccf4f64c29341e69c382b21d24573f13862a4888af4f35086c5361a753170c0dd6f3d324d9aef02be4cf9d0c620cd7d76d234699e7c525e9ab30849e8898c82f07ca01489f43f1ad5536a6ef4a7c6204d9a1f534eccf9f3656abeec9142f0fc4c025892ac1a904634392ac2cc9f33982fa8842c587541f154cd084000002315000038140c0644a3c178288b535dcd0114800c81884672663a92474192a3200e0308110000000400030000080464860c00f15574c39282b5f117c87c884521baef4cd67316a23120203acc43381a1707cd4ebdff2ec356b11f98f8bb54870108f72e45faa5756116341a717da3c9d55f27fc7a2f2aceaf0df9b692974f426938c16ca663cd5f4ca4c56468759f92fb7abb801c47d1e8b4a43e76da9a72cd70ff5a9359fcbf7066ca3d845788994ef45a9b877cc2946109507e67876f59599423f3056b9490243415d456f44296e75faac4c4ba7dffa1816bd722ce29a58ecf9eae4391eb8d9e350d4e45348a915d86e9d1fd7d825f3ea9059a2508fbfb4ec901015443765a1ab8307b276dda42a338db62b9eb72f43c84b216790af1caacad850e8623b7ca5a146553aec69809828cc9e4770b857573223298304f2b1e600d12ab9a367c9254b1be39ced81a0e04225e6e0fdfe826ff4fc1b0efc84deaa3e6d6816b28b8d3880ab41f47d049b5367d03ab74ea5cf767cf05aecbb3f8cdfd0e4c2c85970729d663c06750bd946ea1d114f0e4ecc169a8c3a12bce618de48336a3624b188b9cb35bbb1ded9dcc7c0bfe23061eae79b3f4a3d294004b686243a9def891f9bb771a42c847f4edaf1d12b59675f156b87fc59bc0f575756c6054c8b837b5759da4ec37e7e2de5db361ba3fbf047bec875e96f20b9ad80e8e7f25f4ee6cec6816a1bf835c2ee5457167c0f7b2285b3428885444639aa1f4893c705058339ffefeb7a79b3e56b027b703459203b52683a83a0f75e9eb78e65c5bfd7d763f8f157618075428364bf79b1289a990db9daba20d3f2a0508272f78a5f2913f7784b3da612f4de8d2da67b8bb763738909e44417c523814736483e6c3c0083a3f469a494b57a0e88625844d5b2537ce115c309c7cf88ded6da10b53d0475686f48ac76194320d9adfdcf3f4a960c06f4db75c7fe1d0d17d81a2a168fdc799fb91ed22617d2b6833c947395aac1ddd6718fafc77673e2e5d5ba48cc57223569eadaec40dac37d075047a2abc4fc8c9d74d40c24102c3677dd5335533460c720517ccd61ae6490fb20de8cbe56bc01e4e84af591e3002f50532de8e34a8e4918d74a19e0f21d03352b60d24cd5fa36ef510a4fef2a629fbe4f4b4085466222212b7ce817bdbee963ed7b8fbb35c26f2afaf3aa02c7acba0517f1a811535e843f79a76d7c682e61d44219142c2420047b7885d429cd2fed3bd144f0e63163a33787e2954a373248afc0885e6c86f3ef8a1e16b7cf276119b81aedc842665ee1944418adb295f67b3a157e5542673d6ad0db6416fd0ea450a635798e37670c75e181ca342984a664e0ae883f14cbdb67951e6a473180acb8d2110316b89963683741b4f0cd10d1eae58ee3a34a55afd3eb85ba8625f2939743f496ad8b69fb4c61c12dbed15c13f1ee17bbc2f258ac69a24e77eeeeb7c1a6145729f8a157851a25bdead6186d0d855ac26852756910439de2241d3ff47c6fabffeefdcd59a2ca19a3041f7cfd6a7550077f487979d6c56987804987ac7067bb7965844b57c97d10266e0d6c98c406a98a538dd54c7b4678fe4ca176f939fcf027d38d86a2f99ee458988e23ba27ce11ba9eaaf02ba0dab4f621feb274cd7b61bf60ea510f4567a078dd9c517be2f2aee163f8c5f0fc2a24a0f3ab7f698a407c10895b36b01a5317cd4a1f44440e8844dac8ae1b92d7484dc387aa3ac0c664c9a6713652cbd799ae84b6307fdd33d854c37ece5a621b66901af377c3855c1fd109141a192bef12571297dd11b7393a5b7ca9c895ef746044c379cb468d92cbdbfc2505ca33b9d87111ee51da3b1fc42e857032d939e6073d973209f0163fee8c5e6b52657e4eeea9eea0539a88e6ee612ba73cc6061043cf72e125db9d123833d95686c229a596f2f80c06c71109e28cfb54de7fbe19dd205f697a9c0cf9133619d3313c38cd442051d05730533a16d174e0008563b4b84a9fdc6dd04422f5b0606b05896a142a63506cdb4eefe1bc55a61c087bea2bf01e4ec06f72bec2db940214c19db2fda092c6c8cf88a78837ca71eb483e2b33ffc5ef3ed2ab0bc0251b943a85ec18af93077a65455c4d05a19f1e916d4dc1d67302a8b1b7b7ca322afe4b4ff16edcac5e0aae3bdf3c36fa5dc93a4ee9fb4b9bf842d8cac7967ac702ccc59c9f27cef29ac1fa63a87c220893f90c4c2408425786b6812a21e32571b1f9298a74535a7b18761e054ef524ff2ede3ce4610ef34ee3cf529bfd97ec88d6514e1010861d643a3d937e15de87d6734b79200fe63716b64200de9a30d4e3bbeb9c8f5bb8a33efa876a4b00033824f5bc1f5f4dc8539160c8ed7850633d8ea346e43724675581fc0b9e66df1fa79b5e4d211672664f9c5ed49d383c15c2f30da6995a75d78f196dac1f2067dd73c84510f15b24301071a2ea9da0fd9b0937ab7e864faceb467b9ac13709d5b25086ff70b9886e46546ba96439161ce6b962ea74115960cafa01baf856c7abc03fde711141cb77a464209d8095313b4a1b52d5d06572b1dd95395d2514ba29f2525252f18b6baebb2ae77367ed75055af6c8e1d1422613e80be3bba82ad95fede01bff96ac4363001b980f5dc2fc097a266f64956638a5620cd0ce64f89eb2a5c768d99cc6c033b984540eef0ecf1f166adb0eae6fe094cdd6a56f25a1941ffedbf40c6967f0d56615f4191904974a1fa19a275855fcd2cadc306b50a82566867232444155d64cf1c9811e91f3118bc153fe50f8da3c73866c5cdde285eaeb674c72b588018e42ece0a2589db63862d71aab912e7786e6d46b1b5b18a1ea98ca40937a6812f050e74a81a0ee48a51c8b7cf1c4051f85373616427a307f23b7b892bd14f28c73778dc2801a8c97c2ab851b6f68253dd3c5b54367f21344e528f247b76846161ab81896570a57be2f9c0bbf7c3bddb0ec68701d78b573622d6df09a8e9e6265142994e285a9f94fe54479096ec302a05022903674e00bc557b6d2957f75edd734f82c020fbd7dbb9cacf967996c2f02ff98c8684aa45504fa3fb95589546c3095cb26c9251f11d82897c3c84b09dde6ad1ff43ef65619d9246d1c4e1aa8f58d3f0ef6c2cba0721fb5fa9a0109b179e988b6fedd1366da724f99f0f45df55f5878cfa4e39c52422be250485c636c12b9c6b8b4d140dbbabeae0583ddba0e7fe939a9c6345135f798bfbc675a97cc4fdd490cacadbb790a54a62db0f866c4b58fc2f950e00aa71c62e1a39d6d3b1d3fda1aef7e7dbf841a2a26c72b227e831c6988829b3bfc2df03be788d5183009510a01da47d123dd1e2762de0a22a3f399e400dc39e6da837d0e0afb94172aba35c7a16cdb9327d29d7f00b220fa6aa33eddf9a7bed9ff319fa9518cad20eeffdfedda82ff4f498877f4134ba4dafcf505e90b69c84bb78f7ee22f599e1382556fac8fd9f5f7ecd1e1ed39fc78228d79734f352f303500b3f29d2b028fe43a709ce96332928aa51ff7ba1dcd3ae1bd722f918a49f2965d94a67738a917dfb9db517b00fc4686ba7ac9b34fcb7182835925c26a03b6948d556568cda2d2badf8241b055015b5befa7bec815879a71d3edb348c26ee9ef659c5c65edef46f597f04962f8a74f31a64bec72fbd15f317f56fac8ea6799c72c744a992cf1e71f5855445516942a0417e136c0623b98e93f7a1ccaeec13a98ea3c873240272c97b12d14103437463d731abf0883fe71751f6368a5ab79f1f8011f33a6c9a4f6ea7fe4a65a0b13c7f450012657e75b0c29d23ca6ea182cf4ea94d2c07cb285c6b5eb667ea8e0cfac72077fd5cb351cf6c71f7c5909325c04a6e1f709c5c0c63451f120e0c45671f3e6f2160961e94ace87c18eec93633003ba2befac7a762d8282bdeb93774a49abd4761f28971fb2cab14bba48acd72b26acbcb5a2ec65db7a37507530f9ad5edf7a4516d8b42a832a0a507ad88b44afc08cddafb5fdd40a85e9ede0d9ac84e45fb33299b54c41aa94e9160e34051bdfd9bbd2670f17f622cbee8a6ee5738b5f165498232d2766da020bb07ee90d6fdbd21fd2a97080ad741bbcb80b64f29f418f60c62a6e7559e6448ab4df93a2ca045eb8c6ba75ce4a8e71755a0eecd4731c088d32ef89cc8e842cc8e615ccc04ed8e51310be083a52231d89637a121918503c3e8554bbd590843139c2e521de80d8c3da09b5eda2bf2cd25bb382b7acc3525823df6e971894dd33201b6a1e32a22d7235b2e529d743db841e98e7bf7edf2c4c429b5adf666c986ac2373e4d0b1f22a383c165aedc8b777327ceb26ac91b81728956ea783a538e040738414691550bbc9d5c250fe02d337ec6f32ee9a5c31866016969a6dad665d109be622704a2cfb362f2036feb59f0fb515e3466ce66d67eb6aaf658173e71cbe05a1f4fc73f90b02faeeebea1ced5d284019b2398ca1bcbfc4c067ea1c53f2f8eb34ba05da9f09c65ec139afacfd76d59083916229c84a276eea7e18e74c4a9e8ce43efb60543c4affcbaaa0d681b442bc809526282f79c956e68b5d5a009f557f6db5fc5593cbd124d0fbeec4dd7a530ebeecae98e7d82f7b744963018d394f366e38f3fa2b84457a74c911fce17f31471a9b3784ee91862a41c5cd09a558a1d186258c06bf7938705687a33024d93159c0b6f4555bb69806aed278eab7f6841292712dbe9edefdce870e66200a8c360b69858c7a4bd9896f401fd506ee45b553546ec89ea376992a44d5073af4c261c05a5111f7db4a847b95f77cbc3bcfa6a62a00b42121e6dc959ce32cd6c1e92e403e4dd1d9ab055dfd520c095189be2b2215bfce3cd6e8f0e576ebfec4e0ccb5035970c7988faff832b42b48faf936e3ad39ac12157b6c7adc6fd5e9b61079c9c91f14319c2b88e1aec790edb2cadec2530d16c31a4b6036a0040826bb06bbb0719f1a95152a5101e8312ba6eddb4e6c56403195b5ee817bf9551ef7cc1bb34e2a284b335ab025715b84076eb97c07ed7de576452ac51f06ed23649ae0f82372cd09f3bb056d71519a763be286bda420b43de0a8c51980ca7882388a846742d7e41d28a8fe8e152505fec7a8a723a8c3a8ea0f2eaa173e0100b58e3a147b608f8392713e60ceca22acce80454257295f9910a51618e3ae40f80d43e4b8c32f61bb3f89d7833e1816205a85c2b430dddd4cd38a46cf09a08b12a8864a18cae7cf8ab643bda57c31a71f6f9795a4cc0e8db3f2cdce80ca3b634039099cfe0daaebd5561c33c74698f36b3d8eb65d5317ad4ac958b354f5456c56f37ac3bb5f5457850a5c5668c6253122273c66f9713178683622e2566e185fdd88712a7a8a31d90b19839a8824edb57c90838c93ea930cd6444819ce346a19a3b58b19c42d573396de5c353983dcaa672c3c8ccc355c130d6ba4e17eb54a22151be417c23980882669be2f624609868903ab09011213eb0b3ac807512a0e32005fdb72e829438cb583ccc37b93402ec4fa0c0037bce6c4047644f4f5927f304a9e63145d4358d0a0848d2fcbfa54029355b885f4ff14068fdbb1b50f1311278836e8695b482fa64852d26e6a7116b3256d138ad986d34ba680b67a6b5ea9247c466a563c86f4bb0b535a323fdba89f3820d92fe06bf70c39d20aa079d074022fef1af042381df2936d2f8ceee67c1f36ee5dc7e2e7467044a273717ac78128dc6b0f45ff761620bb045de5ce14c022a75bb11d2db01ef710eeca04e05eba1562a0ac7f54e8c7c25ba27ea00482d4f1c0cefa0a8a930b6fd9886796717feff002e5635dd81602c9899f82b97cb05e87fb0ee8ceb52e75126a07f4fd4625dadb21cbff17f8c9d19702206c7057a82f47c502aefc85db4bfed1738ad0e79a3d145f031c67c0d19137aa52a690d0972e0c81b9aac918f89f84c246128cc0347d0851435312755b954367bedeb2a47c1122f196a55e4598fb628da19c5caac755e3987a1a9fed6672a90ecccfe8f39ee02b76d5c35334f0e2d7db30365a5feea4b85762eaef96672daa6ad137c4b047938b743d5336798984c4eee56e50e4759ba12e5815bb36df1672e083321fa00bf2f02e4cde9385f186abaa1a2724ca607aefc46b6af853c41f5d504c563999f3ed6015f0a260676ec381d999ef01b21c337ad76cd64681c0b36b6ae88830d1587c80441a899bb71aa9d783e66697927ada2950807b2013090340340c2096d309cbb7ed7f34d9f99a742415ca93e7463472f1fc4eac1e701bb5287f758ea6695d25b46fb44d840f2ab8db7accc145da5ff2eee7ee1730779d47b0de739f5270b8db1073b895a236a83c4b857b94ed39d813788fcb82486ed4d163bbd198cf4c3f1172fbfe2bb0c678729aab0994b53ec749d008d77ea1c9153dc71d7b4c61911ddd624b33bcb2f4897a82c7d6fbf76aa4843e25ae9dd239fcad4c451446eadf066504e7ff136fc77fef01bdc259a937637fe53ab632efcd3bd662e5d008da1e2ceb6015ea1606d004ae49089b3585c47f758a4bc6d5ef6240915dbcd6b288c64931cd3c2192e9e69617164fec8c812d4bdf22212867c04aea13e610edad3d316a58f7be73863ac1c9a7bdb545974443c01e67d492cccf66b1d71073aa78d9539d2059d8ea6b6fd8446693978227fa808940cd1e94eb67027444b02ca6f2e071983fa4e6cbb587ae0b8f9c52a49aa22ac4c1696d91e3684cf26fd32c1903d4a9e7439c8868748bb0ea29aa858995f3194698e6dad3e244bf7522ede5f8f69ea0f10984f2d9130bb22ac8f33228b6cb7256466f7b6b7fa6ec9dd74ef841f8582514cdc4ba51c6be2a788ad48fe4b1cbb033cb851f4b83e3d4382be8aa8d0e0e4be0dd5420d86a30d3a5e7575beaf8da06ee1d2465dc4e39e6a1df59ab078c0a9676ac189c589aec6cc7beee4036350a8ba37162adbe8dc431dc033cfa27b9fc5d4332d65cd59d63fe05d0e3c56d4c01f42a4ac586174f4a83402f3710e6807ce9a551873e9d255636318e5de5ef56cfd78e0192ae5f77e50f887333042112e9bd71f738c29c9507f83e25b3604a91fcbe31701c789e4fc544c0878646e16be31c909b316c152cb4fe5a6521493fa79af62d053965c32d464ec590d74532686a29b3687292623a25df38c4c8350c008223c2cf9a8a52a4b6e5baf3b2c56c9d8075fefd2d9da2262d0a629b02cd943d71a6be97e9579325d37b0b27b48413396da17f9e0a73b3149369be21cbc9f68e25b45a95b053b5ec29f9d94c42be943bd973c0a472a27d6725471e720ca8cba4a603accb9d2fa6dc58f8b52473510d99ee2a297e598d7b2751f27c3a1633004c1dda161493a616d224d3c994d136fbada6b4253bac3dd60e6809d149e332819e69526920190ddd801d032882a28e3f28efb9115a94371e0bb454fe4f6ad50671c84610d0069421aa3790689db7bdd3ec4c0cba8b1f3335e4fe285bccbb428d0eb6372bba73f36704dc25342dc6f07bbe7b314fb0bdd5257c9194ff2178a27790ea5a4f1a484902afce31217677b8940fecec37897d5cc32407f35fa3bb4ea148400338aafdbde323ac4c61d5608f8d88b4f108ae6deada15cc1f4791b4f5531a48926cb02bba4daa64281efd0173a0cfbe595a369ff51c2a4fec65ebf7b951d48279162af4d8889d66b81d0f2328e0c94b804e2c7362360ffc1ea4d95c2c7fd526a6697306f412b702df6ba47f5a210e0a9ee73dddbc49fd1446064516defa0e96fac6d2e5bd955d2cec0a7acb532fcc9f4c948be2d245e8a14853e05422437484137b8eef3dac68291ab9eb35e8973f42439f3b0034c9fae498f187a1e1966f34b3724b036c1b59eeb0f6a6bd806e4510186ecfee30d75bdbfb4abe33cfd4fdcfea1ebaf6f0cc8a90f726981d7e5a4b5df386fced8e422fcfd70af7ce11c88063c900f1be3ed01dfe8521a2a7003c10ee2cc5b221ab6a14404cade73e77bbe5cc81aa95778c4125e90eeb84b62c0fb8f7809cddc42a112cf04c955ab2af6a63d569b341fa5e437f61a993bb78c0c904b5ac2233286e2fd5b342567b87d1558195ac9e3e324eb40401a950bae283f3ac7e4699fde24b16ca38be938c731da8e4687b53d0fa318da4ba202bf44f5ec4f14ca96166f4b18e9160c3234a532fa3444558fcf39766ca170360fb1417626b4213762bc15fe53bbb3d464b77367bb79b977db313309e8a7f25083b767a44e7d45ec595e0e9751c460102b1081eebec6adc19ac8a18138eb066a8b1337aae87080defc44628ca70d6753575b96a3e7234999369f82286902a3c0526b3e725f6fab0ee4e147a10139df3f3dd45799b5cef0a187f7eb312ae9164e1d0c08cf37f0840370e334ae1bbf21627359217885b298a04631282e3a60910abfd0409452ca85aba2c835280548b9a3dfff84a1632f399af96cf914e6d5207ba21bf70187c8fd7395dba36c951577eec6559cbc49500042ebaad12a2b8f1d15da14bde7e29573e20a6e22a32dbb7abd084c8cb59f02a912e37c28f3cb46cf48f40d667810c6bae553a963279b9a917d545e28b55d32aa69bb32c7f2142a4bafd58e6a2e338d6b928d01334f78bd2c02959e31feac74b9da5a44f42605abf24ba647c117335bb3452d62b75e52770cb751d1ad2a19fbaf787d94ed3f94db31d693f04555ed3afbf0bcf85594c44df674040781a5865e04e8bbf9f4de16c27c062b299b130b80ea3a89c2e51914441432f76177702f95458f90f74193ce1ca69d5993938d17f39332e0745a1ad6778a081c754071fcdbc7e76dc7cd37489875ccbdb2964734f2c41ff0e6fed4277afe31c927ca140cd41a484a4e1866c7d7ea0ccfc31bd8df3eb64abd9d2575827b2414076c4f497d0a8829a57fae97b806913dd12105a27803a1b0a8b927d840f83994cee873e971ca699a8799a4619327f96c1f362b9b56c3d8547ba92459069390efdfdab9a647953ff04a096858f5ad19ad772fd0caf23ed6f8b683a3b14bd213752daae8c4b81b3adfe8345bf1d67bf3ac50016ae1cadfe9816f77a7da3f578fe0c2415ef6bf019b302cb97686dabfb9554225dab6f6b7bfd74bce05a84dbd49d962afe306505a07b434e999631d8e2ff8c15d8ca2ba86848095ca9a0885e3c7a169f1ddc10b0f4678369817eb0bfe1bf7f297fa0756690e2a1d9713d8d1db0d25212f85638aa742a2c5c2daed48a42d47a36d804207bd38e4259372a0275491c53816a4a70df953e9ae7f09314889290fb40a9e1930e21b00136551499c6aa53a6000535fb6de3138db560b855bfc5854211976db5e9ca1e6c92c1dd564bc4db09cc597037b4a49fafdc7ee6e6afda63b12b18a3bd63a0739947091021d7fa11d9ee0cf9f2ca9c6c3c069b8dde0611d9943572ff37a7daf2d812d59dfadf9cd25e1c5bb61e3268f54214b445693bddcfcad4610b9fabd6f14894c01e1d1da3fee20d36d1471c058b103d51a93538a93f42f9164c2458f1f4d9da519226ac4acc5d3e8e2211a41add6ee86eb33d0eeac80377c203d7ac1bac48ac56272bcec40fdb60218b74a49c799c6752b40af944840ce53b78d89628a92ace322214ab4187fca0745043d45849d73dc81ac9402e0c1c84a91c628a76096d65a82bdcba05b94a2cfab8cb89627ade6a3c3daf5d130bc1284acaec4fafb84345b41089180775ac9f61b909d30a842ef5e6179977bef020785365db17aebc2eb6f942165b3b374d092f552a3e72771a1257ca4d80e2717d2a491be1ec63fd623fd45a8c827027d1d29173e20812c1ef54ed075c2d42160155a26d565539069d4caca77987de3d369488fcf8e61d0c4c306c666754453e3256aa1aaca40930a2b454f5040931405280deaf11475dd14e6c5c6b7f42f9e72250472e52245415ea4ed78be3997555d0138c68d754a8ae9935cc4281d21b44524388d9cc8a654f1e88106f5fb7c3228b5e9f08bdfbe7ff934ca4b57be7b8e50bf3696cd00ff80a7b1390b9f685ed81ae97d7f2c192d49059026c2d31f55a26ec672a005855edea4cfe7728f271f3603a20cf188d64e772a9a60f489ba8b93f4152798289643e6bd41893c9816d5a4abfa4811cdb536a238a2a563f3145a39e328454a3a6caa85d164b7bfe6096d05740367701e2cc0a087799d8298ee97f7534bba15935cf5cf73adfc97a86c780f77736cf89a9a0cc62da5387457cd860bcebe58846af5a724c591583911e8e310298fb90948abed17c6b9101b576896aba07161187194fcdb7658756704429bbcec8724a108cd2124da64ddb392ffc09ea84b698d3bc597ad1d5f3f0e40a1d150339fd5e58e57717deaa7feaa646099e374ac5b8306be4bd2981c63e8e01661833cf7963f9ed18bd65b279965fac8abcbdf59d05330ae0f80e60621c5357292e47625226445d1d1aa31361acf5caa413b0635b675ac60c6fe2caf56f5432b9909e1b1c6ec67508c47621718f186dd42531b317ed27cd1b51298e3ee7cf4ac5008f6f937a8673e35cf3e73b7fce4c85e81a5491d1be85aa863d159147b0c2b0458f3c7d79e44954fc4ee4703e57744ef685b7349e3d654a25f45631de496dbe1d46860cf45220410a15f0b6ee12d4769740c8d8df9c1927414d2da171f84a0d6157b1d1fa59e4b4699f3651ff5645b521066f43010de5c90477e0394328cef650376a3fd99d69592d19ed60ae5e69b0fd2c1057ac1efe9e5ebc8a5f19ed6f31e1dd751f08ec3617a1f8762625fd41c5e33fba4f805c9109a2f8d72513a44667d9c4472343af20f896f223c5bd2989d27880366f5bf565588972f54197d239f546d7a595ab8890cb728c79fa274260d59a6ee7515a5cc8816eacb208401192990f2fd7f8c93fe6a11a89ecd0c5289298231282e610de805483da9a1cf819301e5a6f32c4a0604cb0bca5caf091d1b75537b7425e6b7468059a7ce3628bd0fd97b7fd628743af6ad13a2cbbc3b0679c2c8964696fd7200415eb59f25caaf4dd2e6baaf102a3486a243082f627ce82f083aa9c841324cd5add0c04c25260dea10b33649d77688ca47b795d219bdca171529d82f503262d210e509723f76686c04a965966d92629582829c240aeea0c05f3c124a362cbdaccef1b5351322ec4b92d59647179c790fc236168be90b36afebb3ce0fe65947a2bdcb4d4c0ce89a4408a67120a97218d20c91c8c969785f2c9674d468db8a68e7eaa0faff20559f74faaf7eb4e0950147ead0f407ea9b57edfe5b58ddc721d6df4c15b719efe2ee2bcd10adf0f07a3d911454354621f4132bd14e68d42c7767494a0e7786094e77555932db49ec0b043647e10fc665ee75a6a8b3f10c88335ce30c7224870000306e01dcb03522913273be1d750f56dcc384506c3034c6f9d461b65fff35778f09f3784769848972b952f605c7f4cf8bb317e12997267f190b77801ba54e8d113ac4b79ea8d714f846f6730c8e28924e50a32b9b8123289046204df779453341c9a05e05813c494b23998a228dc9aa498cb098b912449b3234aa307af70d7f9005afba312a4fa0512a69cabf305b554ec6e48fd497fe9edf872037e9a59b4414e1394741f8054bbbd4641f9642dca08049d14e7247e93f24012b9da9148bf3551f6d0200063c63b7d83ae04763085454e8a237431412d3c3929b028e28b668f1bb281d7376b21f6bd4181c7ca674fc4e59ca5ab200d1287300e88d0a816b47fc08f22d2a262215fae07649c92fe1ed383b92b310ffa1ed77c42b2b68e073a88545d7d245787fa55989f54bb416de462455d10f411a98a6a7cf24f96ff49b6d06eee9a7374964852ac1c9cce4d307affcf6252adf069035b6af568cd448f44d8aa7a5954d8807343f412a61f84359b67231de282fd8f2bc738bde6743fc8800741da92961da0104df4cb576723d4ee1a5ef241e27a349739d595188425f480c2ac9573716c606966fda62b81e6c2168655a3cead19675ce6099952facbbd70dc1757b8bfaf3a894a11fce0b9d9899065720f7c4c79223fececb3cd086cd934427564ba8c269f8d3a31eee14629d4bd70471ad80ab18f1421c50324ee97c9cbd8375ab1f1899e74db4fcda824e090ec6489b0a7540131895b3ca11461b2dbdd7bc0d7d8f039326871ae66fe4074bde6bf41a0e06367e25c604bd2603cb6b8234228188f9a71d488a7a50a74d0eae48a90e15f5ad968f517888265f16a450a64ae684b9229efcbfd3bc6b9d68ea91859fcd6e309223f889c71bdea373da2550dcb9a69215ddee73dcb0b38a2ba878959e603211f140d03431e01e4586877c832647260c22f639d34c75b3d7572d472ec7a2846a0a69aaa1437ee76e88502947b71e0b97109a2bd75c4619c7fc2d557a2882b17e9455f80a160bbf32e0acb3c22d6fe9ee88efbf3836d1c246b5c9731d94a196880f4e4c09c916b5a40a3897895b7c7c4830532b035fa5479ca6193c9213fb8f529795f309f4078d476207f33d201fdbd832f2020063bc631ecc00d2051fb1c729debc398c75578576e0934cb63e67f182d43a1cf19520bc4bbcff0f524f25151a39465acbc87d458a8aaff218b463b925c892852fef597866c2086bdf4a36b7a8fa05d23f38f40a5642b96bb97f8c88388a0d638f9c6133979b937955f22dc7582261d92eb1ef40389ed4f2c6bf818ee5c60118d0a179c17e2dad7bba8e685f7d3549df6e729433efa240156624c34f71016f2b7e5479036b3209e4d4e0f03207f35a1fcb16b8a67410855a1579533d6f35575dcb19444fd1e20a2dfa927424641df175c8a29cf695826202685a3c53b8346e3449f894c9fa6252bcdba92285064012652be64e3219ab991db436ef4c8b72a616da81942a5cc4933b1290dbf112383ca5a3666fe0785a2ed96d2318d27981ad2e01d6d9206016315cf08e04a9afcc5a2c9bfb020472e1a98bca5017410c65579da2019aae52f78cdd0cfe5dc3e66458617c46f9767588657e19804506c28d51045efaa90686146e599e02dae1abbfab0e087147244348631e4230cff24753e24828600a3149947111079831d4d78b18edf47bad25bf44d8bae2534c01dbe7d39845435d69cb7acc480ce3ad017a9d36f784ddf898ee3364d1c56c499313cc1b26fde218291c0ab0a0c581024d8483f585af7b8e853aa3dd488cd5db814452faadcaef1c19273887069b7f19aafbdb2446ff15b0872483deef982c0b69085d598a59d574fc7ebad6f7736095f0fe0c4126639259baf8a122d4f0f170025f0796c00c9a4541c48dbba94b6f3b80b2a4160daffd3cea21edf5455c4f098f76c1b90905a1e6f06c0ba36e22f3dfc70a21804027ea825065df2be8fe0f4eefdcc313dbde9ee467344b17dcc04315ed3c50990a9879b440cb8a7bd000d885e5f499da2440c308b5180f1f6a3049c3cf4c63fdcaa0658cae59cfe4c6fd8b5f28a39988517e0a13245f2563aadaedf9bb213ff563c425f5784744054cfd020a38849f261794abc30c5fa0ca84c21541437135506f8071906138d3d2abc2fbb6c7ecde8a26423d5a4250d1afc01ed81b7515c4c75825a84ed1737346360f3f2daa1adae99bc23d3bd38f1a45e346a6a388f9fd25a14a237f14709d79ec8f0c5894cb268bcf90896b8f2dc520cb2e9437bd00fa6f767cc8cceb50275a9eeb399dc35aa1c78c1eb1e4ef5f72a1b56e358b14465bf583a1befd8d37605e29355008118b7f18d4f3954290dc67416f39557580ef42fb9e35f24d1d469cde6b17061e286c5137099a82f3818a544d92619413e8f9cc15cd741199f3633a82d8977a5b52574f65c90acc8d65763505a0b943289958e2a8a708632ac415c2a9d9deaca7f2983ee1ca23ddb79bcfe74b11f8b3bcaf729c0c19f732920e6b864a76d82865ef5d1506796b518f0e2c15ada58eb606e56b5d133e5d5c31447087d01704b32ce0d66da1215a9747df1c4aabb29c2bb50fa2128b004df8b96dc96958ae85d3dd52743d6036b897da4160d67303ebebf58dfdbd32f0155e18a5d490ed81370bfb5dfaf9fc5c45ac40e1dfbfe6ed60acfab164c760e26328c68738ed7c5812ce9498ded59dbdd64f425cdec827e009fc15c77325001035f05c7b8fe0f9c74a62f005e59808cb3cfcfed242e843a4fb5b83153f016d05b7b9363a58505dfbf0e013ea9da9d2e448d8cf4b4e3fa9f6db018f22979a09671c4091690b62ee3e3da0a36a969ea1ad77f3291186b5347a308229c2ebaa609548b071653bb58ea2f5218480d57edada859dc3c3e6f092003610ed1e9ea2ac49537541fac198424c7dfd95b9c153f329045421c7ba24e86d37c19bd4b1589ad778e2e29b46e0615763aba4f81032e29bffa9674a26af8f172130bba438f526b8470b27b0866d1955a561b95b6012188de32aa42cc956c9d5f50a14e6f7613c376827174e9ce7424ff6f80be46dd7fb85723bd66f20b54b1c54044559454b0154f25fef75993264effa23d6ecf65dbd19f23db0f3997974c4298822c241efef7462d393e40d64b83286e44d65e9242cea185ab7ffd17e2361ee08cf09593f875a14f51159246040df2a6567c60d00b02d661c3d928fd859ea59f1b7ce5fd9a587e139aad58ec6ac220d5c9d8ad7b0a97ff8095d98b8328683393f7948a716dcb9090b847239baacf70659d113d4fd6a482dd97b2aef3eea4e31d71c4fde1f1831370b67061ec94ab8c1dd8ec0478ea090a4e4be01309c149012cc521107058e2a594ab4672ca250987402692f05255483b920204f0fa3c4c7e965b01d20c0382286ce3c6a9de21c14e94a484a18ed6091ccc7d43c58602b2a184a3f189f7470a15614528d20276d8202b45122d1404fbdc9a3c80e696abd84702ec54cb7024e5b32d159c98e26ac8f9c46b41588fe5498042a49734a95ed558d121e53400e0662999b0a1c93627f541eb4a81429d40091e24a9db45df10881e3d3c10c1a424296ff0e3c4e246273e0797dd31fb2164082af8ae4f416b13503c912b738747c1e83c40c4a42114dfb55de2e58884e50069e0eb1440d7de7d625d8f974488d34fc16cef8bc9dd01eed01fc447dfa378148cc4e23202c5774872cf67834c0132398f4d54b4c8fb76d17a46e32fc50fe891938afc26406aca3ef41c5060ad8ab9afa817ce9039e81471bf404bd5853302602192782fe27533b1228c94beea393cd10008217ed18fe6420ca0cb38b0f867a80fde3ca08bf018426f57a7a175feea45b4d6cfeca7296195e3017e9751ad6ac53aa0a0785356aa093c81b65a35aa06fb6e09f9725e0ecdffca03bf2088ac5bd952659db96cd577b8a6c52e0e6c8e06cf2bc07f4d0b620b9adffdb411ec2fb527b84677c22c3b1152328ac7ee4ddb51ac4771a39ec1920f71b2ebbc73a69fbea37e208e6507fc656a52f1f8beb0213189dacaec9ab779cbc411fb70d63f7dbcbdc906502a136e8aa0324e4b48abb3627a6a087e118777c822fa562aacdccd9f98349ce713490bb5cfea577cc10e5ae633a010f7d30437a089e486224be9bd3dc8e0b0a0baa60fcb85d81427a55322a996ebfad86bca9d145ca92a749c8abeb5ce75f20472f6e3cfc995e3248b6682a99c1ec95393e7ecae5baa430e9a6c41207932df9e60a9ef964af9590d13f9c9dcb34f40b7956f8f3685069c6c4c22d1a65087fcde6b6cf3b5216f0a5d707cbd8219a2e77b5075f380e50d03a261bf7ba0fa4ef3ce36a23ea2a2e8e2202f401fd0d4d896c2f95f29dd384f11d61c00c23290909d45324a4e92602e50c06b3b253e33c571bb1d6f101b6cee388c991585813d2b50ac5c45d3b11b1529353091ebf27b18f973673a099e25544b878a822ddcdbcd25b6697fbdaa0d4aa88706c23a38b0ce6493c37063d98585b78ab90dcec9db55b4938cb67608b946356e8c8589e4230766c999e2136811b96fed8b46bd8cc367be81fd0918d41549951a0a2a7941685e0e04a3b485218e77009a63d2160dd102c32209163795c27a297b517dcf5295b251164c1838d4b41b827a6ea558abaad1011ddb51d1a06e061dbc42c401b74768a61978db5b7d0a33ec2aa5e178a9dce0a948d1ce0b5670f9adb23afe554c0b0d1102257f30fa149204b449a8ebad40c88cfed556e6316753df439ec24aa14184ada382eed8875625edf034d0dc0dac76a22167b8ff62713250606cc27021a7fb6e7f84483d1ad0a19c8d48d089ebd8feef0a39ba045fb5ff97262068ae27c13131293d68f8d4ae5a9b64d0ea68833681ce0c8ddeb415d4a985a276d1a4d368c9681bcb029b5984d311da69dca15700342d9a0e9926d06402921972637ed5ba21cb4cc50ee25660191247d25574a27f1234818c534ba543a2c559b5e29eea0b399453a5dd17720dad0dfe3af7e10ce839d86b111721dae0b50f22791f965952a49793a71706221fb331a0a55e611df0d796efc5bce2dda8684419bf441a2c23405efe798a02f5d0c3f1672195225f7d8b012356585c6ac0ad69c64eb9712cbdfecf20a7b5c8756f04c2128066218d8a86a96045084566bd278a06bd0085f88d037dd4df371ea79930bc8f5ebbc5c365756a886e562bddbf8e867dff9f7e1725b06de63567ce786a284205d2b2864d1a922c77b2d7694a6e1ffc7279027c3188448b7509754e1a61dcde6263c74aa05c608e0989a4088b9348ec73282705fae615c4a1d8dde603b6996711dbfa6b3af5fe25d29dada993d9cd437a845f4bc00c6c15b7381a624c76f2a67a0b860dc8496a557c5c86b795e1f38f9474e239029269d6e5e2c8c9d143b51cac8df4b8d54e1fbc0d876bcc1b0503eb29b2b5835ee3a0217b8d1617992934a005ecfb4548a50ac02ebad1401b38809fd50b454c713d6864380cf33dc3822300a18711d538041c91a3f244cca3c076b74970088335d5034192e25c76f50ce81f1f8f685f4e5f1746d0e0b9ad7ccd115ccdbf1a98e1f03227a196b3a8ca5fca32171d5f0d4bb73ce9422da35e035401d9eec1b77a73cd6b8b379b87640cbb1ff4b907f2cebff9f19442f33877e858f11b815a602dd1d345f94501f5c8f22ea08963f1cf0fe6901a97a3cb333fd2022915011abd02e00be9423d80681251cfe9ad600d1fed5da7601ad4d7e7c8d9760b028d883f1f88e0a04222083c7d68d63d6727db25ffd2620d7295e0dd51b934d53d9f8010324c3569cec8f06403d06269eb9cf00c67f55b07b12409bda4476e747265a5f669ea7c7c29bcac658a6775cb8f41b6a065a29cb2d7c9729f1333f03c44b5549d269cbf1042519ee8126bae30597160d9cb260fac29f05e85b09a6cf7e771fedaeb1a31aa88e4abc216df535e6686c07a86a2e0bae76d80725a93b02e6931a7a5c34a912268c477da2818f0ff7966b4e6c8a49c229c2cb9907ce2bbb16c630af0677335a7a9c84eeb59a91e89e3cf2b192512f6b9b3f858516d7fc00a06dc239b009fe3e7a5e4ee7ce8912ef29398efba8ac4df4982337ed38c4f69be20a02ff95db2ebf999586e733c9b577c11998481ac64585243556cbc722d8091282efd1caa19e355d2eed1842ac99d8305b4870e781842731b8f688c87e26805680dac6a3504000e025b350d2401cac23c34824906c6c2e1f94523ec7160717240e46825f98e6aaa4c0ee8e229a4f5d0e0be1bc01c2acb387f4d631ff72b90d9c68783f8ec1abd4d769adc1688315572fd12960f31d60561a9dec5299b750bbd45376730b04a1a31b85d1a1eba9993247a243447fa804a125da0704497d024e8241447fa014d127da0714497d048d027348e740145129d4071442fa148d025748ef4015d2aa87d1a1eba9d93247a263447ba804a127da07244975049d02514477a014d12fd4073449f5048d025748ef4014d12bd4073443fa149d025f48d7401dd31fa187a70775166f4b22e1032fb0a8e5c5619ceca74068200460444b3da334382f14692dae483901dccabe3eae0bd31ddaa9af93596f8b5fb7493a0cd99362728251fb46d235d6c6871808b4910b162fb48ed666de3232c24508f918d6f8cd4de2c3179117fc0c958d60743b04e0c8e64f83887884a23404b2dae7f9177f05e322114363a216622c210e488d399d348988691394a2bc737a3db871a564e89865bfd40593a645023e475ff2edcbfc5ebca98b020a54aa958b9e2ba28e9cd01d73430772ce9c529992967820559f592d8b962bb29261c24eaa5628d247d949b24f581da2309df0c6543d443aa5d43ae6b2dd7876a97c9c0e711f18abf4da0bf1022aa4506431e40eb239a593059e6d993c7c06e371b21b17371c6b3e37da0c4895cbad783f19cac014c86f04b78ef075490e73d47633f084d38b4b381e899a8df1ab9d2f0750d50a81819cbc20a6de9c248ee7ea02650e8f2a9d5ccc9b0928db2f51dfe84a6ba19762ca1a2a17eaf014224ca715c40a564423000e5ac80f4b185c0abfcc0c4b771afb717149dd73057a42ecde5a82df8a9622294e3e923cd1fc7e6a6d7575947b8103492ad547d2c7047dec24f142e6365997330b278fc312cd599f1036e826834d075eaf1a052aa45d28ce381b275aed73f5e1168b06b518213858c38754080c3dfbdf34735c746d5ce0969c71624ba694e1db5507991367724a3e5adbfb5d0ff1c5f5802c7602268f7ab0454684b2f9dea80cabd65f758ae3ea27674cdd6874b4a9c241d5a82db6d16756e8ecb5c58950bbc5c8f9503779e414c78b0d81c6f9188ac79d68a05c78c3a496418a21ebda9d00a91da9b3d5b868c15a0c6fea2b303648d8dc2b5e7284ca01695c07d9d7e71c7158ef8755a945732f87558b545685078a3092c4344adfa66d4d035de30a0b8ad15e8ac869bf18fb18ed668bc49654286538c77b3f035909f6b348d75f4082028ef4c233e64d32b2e623d54d3fb17620704d0e316c16798cde9a4a4d8cee6a6e45ae239046a018497cedc6ba931c228b0272498ac7f10f0c85b5e3a335813f951aa48a7970c60eaf820573813a8e671cfb35445063f08c05ce3560f47ea0094d3354d80296bf2059c09e2719a6db3ce316ee0aafcf98c65c0bbbe32d4956ba23f20df2089784c5f9dc7f400c4cbc0d41648ea23768956adac880fd228a8e6379d2278863ea3ad7c008f2f4f6bbb553c8f153805b36b0d9a202071dddd3ad86d89411bdc5b2b1d0f327ed38bcd84d8f16c83a435113a98a9f61ab32de88036c078a53ac959e44d4786afc3eb9d8646cb05c59ae9a15c5ab4a67037a39f2ea484cbce7c000c3b3308ef51ca0fc8aae72904c8ed312344da1a025a61cc6f9fe3ee7df98473389531c0a7ad4c0227416fd30f9ba47a28d1d85e4b10a017e1389b9ef1c0dd66e0ca8f27ce38e0fbdc29b28ebb5d20ae6823be8d908d977f860dd369d1351a59b5e36932acd4cc5c0ab4f2780be91caa94e2301ee68d994e4a8e56332c3a40d9d4965e9e4b2506c7b492fd4c09d5877548692e56a0e6ae2b75c2b7e29bbc753bd3d146c5db5b6f00d45056ed8f823ef4b3335ea09f8543ec244431ac8f6d08e266b69333a269482285221033a8bec1e37feb9a6d1bcc0a74dd0103324462082d5d49e08c57119472df01bd1a394484057a32f95a7b5e0ab2f3faddbc35ecc31df755420c96e4144d9d2a84db012f309676b36562a870417d5b61c777d8180b2b31492367cab3bc8afcb83a3449a31fd587e5496249a3da2ba7cd939f4e169e78cac5f450a6b02022eebe8337afeb4e1831e1329369724a3dccabc0f3dba526156ea270f1c91e8e719d1246c2244e6ac6999a1c1df95861d9329b27861217ae27d3bc5d396ec8c0924ca5a91391695e22f9897c3900948b58510797610e70801cc4f3d35df952025b9ab5b774ec3efc73b6ec44250e290b728305f170e96bdc79bbf0120515bc750f0dfd70b6e4761d2f09ab9f4a9522a4441237ac7ddb8435cea3023904a9294d39554b57be7ec5ea5b544f11169a1ddfd52983182a5c54df5af8f13b6edcb19f1ee6e3e2bc861ac8075e8b5e2a7d016bea1f85697fd7c8500defaedc42a423f3fb93463f1c5a38539da7943c0ee6fa6b3b4b28f1689412018c83040222e3eec3b87375f5ae028cce2102a2bb2cbb8628655f16bf1c529f531d715cf37509ebf817a7cda8b07f5093af9913c5c153583be62d12b49d796dcae1e2c7339a656270e5f32ebc719ce38cf38f2bef028a7725658867502026eb691d165da29fc17002cb454387baae42d0af6d79220ed6c3e019712e5283edc4c1ff610e06aea4b2573e97dd0561cc9be8b019c416a0e5c1ac95cb8e2a11580ce6e3633d9a3d18f4b7415d31f4bbf5b29596c87cf3a9259327e1bd718eb43d34429d965b260c3871623f5f22b7426adb8c88bf803c5428903f7a5d9033795d6466fb89125a59bcdc16817f1687d540049c329e08093f819ef1a732598c490e960529ed3d327c580451e329230e34ca1e03b133bca0345230b41401f61d60912d6ac062ae71926df895a496eb7ee25c5ac8841685b4870992d50309c246284eb4fe681dcafb5f97a1aee85f672bc2f14f94c0463690c9c77749491a814980d6db5a1c6b039466347cdf249eb002578c4cd9ed26a840f59db547a699218fc3028577cc3bc5631bb2695a82612f4acf72c3e6951f040d8d839eba7bdf94936ab1813b149a5cce6022d5b5cbf09bf149558a04487c8f81008f8f1a4a334de9a3e188ff9aa0f3a38ba37d4d47a9d4b16d30e454b5969a74fbe7ae54c3a3137750d45feb377f31ff832a0ffedd36d45a4ab367751c60bf86e6bd9daf72966427b848113b8df0379987b1f78eca3d416ed70f5ce9eb47bed4e523afd4fa90577afdb095323012fccc031a10539656309c11b5c509d9130914c7b78e9b62e31c5596cdb934b3b85d8a94c5d7b95d3a37789af12d83a8e80f031033dd470009c70841d24d340cbf28e0769466a8914ffc568edc4b7dd034eca3511309b5c8761391c8eede01bc09da0880085d18220a90f201bc940743444182173e1fbc4b708895284c39903c1bd219218b9f9c735373ce20a8385ad9916777612301f7d4931a322587710e98438a39e65f9279b3326fa49cf147a4927d41842df306aa44988305b06545063b2ab10273f85037f551cf464f7ca9be903bf145ee4048c5e1f4aabffa24178f45d279a378e9095d041132042787880e4f8fcf8fb401723304278788ce0e129f9f6803e426480f12b8037520911c1904df84825cc868c80acecefb193d842920a31b5f098d9698629e7a474920f866a96649470749179145928e44961d4aa9a5d28d14648b47251d69477a827444dae2e5905e783ec02d1e0b7c232aed483a0f07dc11890e7da1b9933c32a89c704f338e5e268ac23814fa47234944fe50f8060f8ac23814f2c1793e3870483c4561dc3364f60c993d4366cf102a240689a7288c85f008813c4278280ae350e81f8de88a742381c816e9e6e6e6267443511888a40344d20122e9c0a0ce4c6d297792c88ea7b9934178368c50fe4c3c31e24871889c3dd4670a993991522412da48373bd26cc1007758ca9da45355d7d436d2a4f18439e77b46706771f0fcf9f1c1398d53c4fba097f4688708cb87744bd7bc44dd8d7436d49d19b0c5994b364e6489395e4c2216278e2c0e8d22b8a3904c247bf25463c02973c23f2dc6f0623f2dc6d8c1965904b50f9b65e310a4e14404bbca1e72577789314012879f0d354ddc3da6bd811904cb845da9955993c216517f3a22f0c2a62eb3883ab7a7d7c9ca6cad615397797a7dd42455cfba7a601b3ed3dc1df3d311c118fbf1d042fa1012783b6fa7879587a3c707f05a90802af3136577cf2714750745f09eeeacbd52e9a86189ddd93d794868c0a338a2f9f90c111f0e1e707e6e34f880708a28b9d9d3e238f17e6e98983869c0c1ee60147bca881359ba949cc8d28d884496ae075b45647945acd89301bbb346f64c892cf01807ceeb444551d484b1140ad17f8e462149e39725e08ea22c051370e34614648b09fe3255a2b4829c3ab88336ddf3993611fa002f6fc19787472b1535fdf43ac61879aa2f70076fa04d9cb480bbe7c383266e1fe803fc0fa9064aec83fae07bf0c1f7a02449f230f790f1e7d9d8c00b44204e2c1147b40a0c3f9b4051894ea79fd59c3d4e84e2a801510441438e0f91dde103a1d241f5d153fe2a831030d10226625013821b1bbc20470c57d8e0e06546110616610821348327d4208061051880e1058b83ef7e45c020436502a6fb1501430c9f1c93fd8a9841087bee57e40c61084315fb4664818739d8508b3044b1e17b48c08687a18fe2e14d7040cda46cfde61458ee57240c2a7617da46c071bf22614cb1573e23b4b2b2e3a978fc831dcf85644b07747a7eb490061468810811073b8621c58e3fc4996798dce06e148a61e840da905211548905f8fd4d55fbc1338e322560686dc0f0d93d13f65a7bad33515955f5fb775c2d6bfd5e67a25ef7d55e4b7f6f7f5fe70d9000a92255a8fc4b2aa549527a792aa994306aa1be94ee3ee04d165af0f3f2638a81cfcbbcd43e20174ae022e7e50715061b1105e8756af003212f3f261d9e178985289e40f2f2636201901ea2955a4481294fb588029a8a28305dfaa47df898fa07b6f332ff4382c2e7455ed23e7c50fd63ea7999fac503fc90aa8807e8ecfcd43e9ef6f1b28042163ef2352fa1788029a550e1211658fe3d092504824d09e58c17bdbf0d9f6da69e0d79ad8a9622601ed287cb34fab47fb1bedcf18800dc3e36d5433c22e0c3d0a65f89a377896a30d49722658cf70778f9ee03deb671e41263159c40c4eaec7429371e6502e2685e078d379e8df9996829253411714427d4507b4189a7325fc4cd401c4d1f1f48f1c0cb910295088243f8c91b0f87dcf3a31e228ba454ca04009d520e91141b471294a474490a3d23e2487a1c4977891d25c54bf2d26110192bcc68e0e52002fa205d7a061e0eead2b1241dfeecf844f8ac304178897e0a2901f6648b09ea99b0aa25bd526762a2a6e9b53a13544559d4ab3d1395adafac6ac9faea2b457a7a76a5e2e899953acb38e98c324629e35443233502154638811b86e0063758d6ed2d7bab161187c41ebc16fce29018840d0bb0e1bb78c4b21a2e7968a831c663b96629574508425df885ee833c4d440c859ed61d656922e2c83ad5d106fec4d161ae401255de8657f044cb3ef9f36c34813b99c39343af439dd9839363e4e1c86616db35ed37779ba6e7906c0e79d7c4f9be641b9e0d388758dafaa1288c6548fea31f9d5a11013f49439ec9233371e2084a114790da483987c89c21524c1c4a79201d892d92865ec02371042d4bcb9f6703cad8d3c09933adc8e199604c336ced59ee81edec2f775aa6eddd11ad757963ac24e0b6af57fe9e3212105a3a2d89232889c4117cccd28a6f8a44acb20d6e802d93a79b22984db040c6c1664ff3084f053e5a3d7f66ce121c733a89237320754288754bf7907bca892cd62191c862e111b9244e7f4a680617ed3e12e125844b7ee06565891359a014d10b1d259105ca20038e7a87bda5938032514729340ddcf630486481021ac9c9d18a3882531c1271e2a887c9a6b9f476897108140f87dd367c2cc18e9610d66db46c9ce8f52c11ab9f17d3fafcdb32682cc15db5e7e1185bd2883384663dc451f66b0f0f8fc01d982376017d808f38356c9e9ee521e2e8fd6608c4d1e3614f0fed09ef38244af170dcc34f1ed92221056748771436d15dc8e21c26afa4b0eda99b3c286c7b50b6e7b23dcef6988d6d5f6b6c7ba9235beae1a63b0a675aa5e62bbf0667db577a298f60882dfd6dabe64592a448c4b6bafe6d6b04f53e6a5eea69ee6ab27dcd4cd47725a0a5c76c754759b9fb80cdb6ee2225090712744bf68fde485aa9c8603e528f88227c449647df211027e0cde3cec4c66dd8b99b203b1338c3db3913686722d3b2ec9c094067420371d7b673db14f6dcb773d7fe560cb09f7cf2492fc48fc16777295cde322555e0b57ca9026ff3757b982f6bef755d6b0f6fa5b5effe502dfbc3a43bdc85b60c85a4d4d46f9ccea0c5112db438a2c5112db4000214a090050563d3197b7eb050cc172f391f8c5707827d84110a53bcbd7b3c3bef5eef1e110c4bfa2affaa94550970079fcd72c4c97257c9ce39afcbebf2baac56bd844f90197699a51735c350150e85ec1876895d561007062809d49148e04ef60e72b175aebb03fbd4892cd9cec3f182c03e5fabee64ea69e0c69f975d905b78396e279750f8072e893654c4f2c46a8ebbe224a87dfd0a9468454c8d3d7bc8f745185e0e79fafb705c3650077b7d56b39a7f98c72e19189d93461ce905676b864140c2c516458e304346c4c1c1b9aeeceeb82e83b8ae6b06cc1890bb9ed820118c27228fd4912a546eec1f852e91481c7164d4c15a86a223351d88a4833cf08b4d0f2f29df03db52bf5f77070ecf68848138e22c16d99824f2f0749127f2481da923039f6e45f8f7d931ec7a17da1826c23ae66aab3b23f674ec3a8581ba2cd3978e6919d0ed675236f62977999e49d9a0184d3f144d23b7c9437a9e681ab9b9d3cf2b042784c9f4cae5ee47c572866176ba9e1de3a653ecfe503f4d99d51d9d303a4d739aa6c9be5ec9bb57eee0be8e7367c4c6af2fcee042f85ac67670346fd732762eff4ad9f49426c0451e031d8838cab479f95008e3d89265592633d04ccaae7f57cbd4db0ce76e26e5cacf25debbc4ecef66d63ebb745763c44ef9c6bee98c4d8f8f717f9125b4e510b7e941d82905e9ed5cc65363aa9dfab55d2d93dddaec1604ca31dc3bdcdb6fee8cd8f43acdf75bc638c77d73a7699be5ce7e03359bfe629d113bfbcd3197c64e7307e9f15d6496bb99149cbb1f98b67f33299bfe7535f52e32c327ba9a1c235ecacb1420d0925fb93b625fc7b4acded2d6b15b6fbd47b85cb7f2abecefdfb3b4a6b37395c572cdbef269e8a42e0f92cf5eab94b2ea2ef42704e8326e97da4f2e75677221b2eaf7d52f73bdf79b94070581fdbeca568bac8bac5fbf14f5de115b6469acbb238e9036775295d6e5abee7a7c2721636fa0665bcfdd77b5b5beba7cad8ee5ce828076ecf40201b7f64ad31003bf4ef04600eeea95b255c66eeeee314d430c7cb5575a463ba665b6dfcbdc594d43b7a6e71604fc7dbc319ba6911bf4faabbb13a93b930ad2d2da7bad4b37666ef9eaf657ba31d25696eeea69e4ad32cacf2e60f9ead40e6b5bbf993a96bb233666dfa3b610a635cb55e62bcbf538eb11b582bde6b86fc63dbebea7419bd67417baf7ea8e864a6d6919ea550ca5bb1a1789659b65eeabfb776f55fd5addd57447ecaa830e39e44083c68c1922910c192828a1d0c989890908c471dba669598631865dd7bdd6d66a59d5aed596589d76a5b6cc28dd49bb5efb96dfb3a1e94edaf25796d97b362eddcd5d8fe55dff1e0bf62a6beeaed35bccd232f755755fbd7bec367747ecabb16c59dda5a59bbbaadeaaf7661a6dc0f0eaa8b77791140db5b9fbb12b1abaabee7e745dcdae2014e272847c529332c68834dba7b59be6a12dcf38ea1e45edf99a8df1676c8c1125c6508c49e8603745d150140dcd8c9db133162514638c31d298b0dcd02df790499e71445133d6d2ecfbed4a1a6ac6ce581a6ac652d48c9db146648026461ec8bffbc3be4c61b2ed00eb786cee75cea91dd31dd61d8f3d7587fdba8bb4f6da9f39197c38adfd8bf6d665eeb15b989d5c7efbea6ab61225fb25c0c89eaf60a862cf676f80c74ba2d8f8274fecf94c8c25f67cb5ee0f15d5f1d83472cb649f577722ea0a51a7c9657cea0ef4174732f831d6a7c58e75d703ef24441bffe60e77d4be5a04c4db568bb8cb68b7e7b4bd66e7e7ef5d24cef856eeecdf1f6012013a8ff316c4764c8bb8cf631117b588d340bc2dba2e639dfb659dbba5397d7ced36773c3636ed2520e036e9b06f9a861818d33b4c8eb58cc9352d73723c7387699ab94df43d09021e9fde9813fd449a46eefa7bac3b3d419a46eeecf7335e21aaee60861d8337466e8c81aded987b0ad1d977347267ba030165b3fb43f5b943ee794c4fade9ee9e46ee29f79d73ce49c11b6355d772c7636bafd8b153b125740c02d767c69e652e77297bd35dcdde8e758777a432ee19a7b95f7ffdbb31b2a336f7507eb185bb689bdfe6af9e97ee686eb58c75632aed22b5dcd14c4a880a1fde624392aa692c7798470b4a4be8f7dc51f28b2a9ceea88dfdc5630fe51755b00e74e9268f37266eab65f0ad5b7f3706df02e2a4da72c7639b68bfd77ecfddfe24cb687ac611f77bdd2467c7f296e5b8b7dc81f48473677d03355bbbadef46e06d11f7ebdc6dde7e33768dcbd8efb1df6fdafeca3298c63ae4ae686696bb1fdbbac7f7f857cf38c28eb14b773fb6f55bffaaae2e2195bb21f6fb94bb23f6fbecf1928031a00d4172bb011b80ace1670b60bf224ac2d8f11415638cb9fbb1a7ec66ec443bb8239e660b04fa00638c6d02fa204f0f03afdc00ccdb13e66da92728a7986f9a12ce19d1dbd4eee69e3f2b9061041ca4804314fbbd3308d9efeda82f523cd567f5392d94940a159ad1c986e6e0b5c02451253ec61fec481fdc100c890438fe559208e4a142a8109b4af374934d9238c236324a39271b0d79e228eb200f9038bd9b4cb0ab4f9bc8b2446401f270bc202a2a4f9a8a238a2707d51ac1934f3e09678806e8522ac96803e60190bf48388ee2ef0658c40d50ecaaa25edd7a8cd986d586f207f8fa666657561e8eb8a9138181c8224f7d008fa2a89e0e01b848f7b6d8d4a79438a20eb37e1c512bd45724758ab2288bb2e285f9ae5ee1ab2a285515a5659e0f1582942def49dd419b1b0496c4dc53f778f23dbefd06c0454b8b74e9723acd4b00a15e32106a22c18d97394d9388d243ccbf4d047ea11435691ed04767d6ce20a784f20b778929d18a08638442ad94c4f7946078e9105373ce19319f2d1fa6f3f3e35355f3d527b2c4fae3859436d5278ea44f5db2e56914c12b41b6942bd51830c502dc551fb944f54282bf4c01a788ef70a4f086271b52a10d639431db0db50d61164dd18cd9da10e6f9688067433e1fe0d9908ff96ea8835706f06cc816026c31c222e340792b766505aeac502b2b06386226b66c4412b0537d8edcd841928448ad3f4aea12ca623e71d6799302ec225ba87479295357fc0fc7ceafe505aac84b2cdc98c296ef06b0e5df73c296ef549ecbb3211f10e922437124a7684e177907c8f3f0115b3421af881a866c29a3942ff3b29b91227bd832346f661830fb06fc4e51f31d1ecef72015a74cd46f9fe051f9a894543eaa8592b189075160489ec4f9de7b99daefb5502929276d93466515b6b07ad97bed55310b5719a54d9bc451d03491ef9dc4f7a09412e5bd88129271c9786da11f182a155964506418b21fdc15a3228b0c941dda2792c906a9ccbb01eac6505be2f6b66b95ed5aabb53263bb5ed7ae9795f9ee8a556c65aebb6675b353b5eb56392bf3b42bc8ca2ced7a524faccc73d7909559ee8a6267a088645c7b7e60c7c3d1f4b1638435344a2ed4f7f26695f2bd37df9bd204f3cdf96484efcd48e3881ea955ca7864d3c42d4572ca8ec8a6891b3e1b9ad22ad9183f19c1f0f15d4e31d4f9a81d60783a299d53c6285d4658136442c2eb8953ce291fa501140e0e121387239afe424f05fe1d85250f45e79ca45b3a4e800bf928f5a8f7e8ebe113c628d497f2b9236a99296df07c8cfac5d19334cd738a7b3e781a8804bc28c336dc6ce9f83f292bd2674892f42d496fc722f82b9145fa230bdcd253546c3c1cd525eac796ba1b94ee01f785af6bc7ebb02bcce139e4b0e319b06bec5cb6c8fadb325964e92016b0a9235163b32b2d8a59c002767ccd12b64847dcd345937e7b6eb85d229114c0fd9a208632ec501cbd07611745c2a0024218631131928460646cb9136db694e87b3670090b56d410eb3ce2ad436bd344967bcb5ad7b2a2bd4b9cde7bef5959c9cf9687b0aa3e1d52aa7ad411c61861ece6b4a635ad39e39caf7c7680bb077d78289104f6d0602003d1c632428cf0bdf734bcf548c117df8b2fbe0769841042f828b57ea664f9544aa03e2267e0f160208eaa30e0eef1c024903a815ed772376331dd68f64a2f973b586fefed8ad05ef3cb7ecd5fec4fb6745b965dd755b3b5dc71dc86bf280bc213534a08d0a9c69c09a5713dcd17c330cdb2d7dccdecfa6e0cd5a2ebf4dbafe8baf65abb992dbaf486dd7ebaafd4d29c840e7b0335dbd64aa30d98aacf72674d9e9d567d2f5d39bb726692d5aa654c9e6919ee98c52e13eeef32a25c3d4ff02f3ea5186358c570c5300a630a5b0c9b79c8e4f8d564fbcd9ac968dfb8bb103edc214c03694e77185f8d6118762fdeaebb6d17fef44cc3b6cc5ebfd95ecb59c5b02bdf77dcbe10bb95da5737c371201d5010973bb8398aab34d3dc69be9452a8e1c360c7dcd67e43165475f7bed59b1d06d3d9bd87a91794bb9a0d3acd16a4bb90bdae9fd89095113a4131b1d82fee945edaafdfec6637cbb4c3604dd7ec4c8b62b46787d174a66bf675fa7b9dcb5df677edda2ee9f457aeaf15db57f6ab9dbbb88b1361ee30204ed76cac4531dcf161388db54d7f6557d534c4c0d7a565b68b72f73a9111fafd8562626dc8da7a59ecbab4cbd24cbbb22c5bdfb26685a81859b0eb0e6efcdf7b0f39d061b28334b7b9d76c1779f3769ce1c6d7c9c9c9af8b60328d5fb32f2d8ac17e1de6e4fdbad996bb194eabd5b256ad377733fb1e6bf74e8cb54fcde4d3af2dabf627d643a0cc85ac139b63b40b6f1904ea4cf40c57bf819a2dd22ec2e75eb3352d025d59fbcd57360373c55c1a468bd1f47bdb9ae13611a61de6d274cdc634ccc5d775401133744a9010e83d86d5ed945a78755c1abf5e099d4ddfd1f4bc4cbb1aa699a6b926e76a1cbd462d4ab5d310dd7e727a6ba5d929d63becebf1af4cc758fd4a7f7575bbbdf8ba747a9c31acf3216407d5227c7a2bc217611d437f9fdddb5a3f6d186b99ed7686e6ee6e7a6a4ebf90c9899e20ed573ba5af1abd2e4c31adbf8e35fa6b9dd2ab5e8a29b52ca5942a79f6375bcf32b9fd827e3512ee26af5cbeaff5d9a871f93aa6e92eee20dbc4c26d02ba9bd616d6d6ab95e56e46f25cb55ad6aaf517e7eec299861818e3cefaf4ccd65aafeb196671ceee223b4b53b5dedb9bfdcaf6183fcb31f6bac76e7edbaaffb12f6d75f7a39b913cfbc26d592e112aa104111f42a8e4799942fa703f600d94380db26e734eddc9dcebd667b6ba9a7d35f67a8476ecfae3084f8cb74b77355aeef03cd9b2ed84da3eadee649c6428a14d62b5cebba3defab55a74e9986ae9f779eb5aeeeadf1fc0599875ab7dce5bb7c7eab15bb5a56fb538cdb2b40c77ac6297b31996c938b93d8612da6eb7133d5fb779efb42aa6375b5d6d55dd59ccd6eaf7f2a84eded96d6df6ed35e3348b5dcbddb7bdf62f5aee8fa30d74b96d07e51955b6bfc872a2b90dab5aa6ba55593433cb60b72cac629835b906d2ae9b5cd61e64b156b50c6671bf793b9763b6f76bb57a2d5fb7195f59ad37d763b9e31153affd65b1cbba96f55d559f32d668329342d342efb63d9fbd1c0ffa304d3eb94fd0a7454d6de50bcfd768ed9cdbb6d5b9dd1e66b314c3aa4f8cabf5f3301584ed27beae1cb795e1a6b48c06734c6ce6ecf9306f9267287be53228e36763d6f9ea75dee27e72abe27ef213ce823e2f8a017d1e06a4f1fbbc37c3282dcf3cc36ded2e3294bbb8a3465140f3fe30e7047dcef8bb42a044eea24fddc9b8df7e8ffde6895daff8f5efeed87e61b88d6118d63a6a8e699aa669d6abc358afb26cc651566f4d8d9f8d3ae7df8500773c8f9dce09a2f6e6aafa767877542d9aafb78e7dcba279edd2a2a975d458fb9a737ec264530413bac96bf6bbf76ab7d6eff69012bbfedd395f3f7d4c2d8ab19f87b17a6aafd9170858717789db7cddc17d6a19ee58cb9c7c723b7756cf70bb1e3b8939d133348ddc28af9fba7b7aca805708d0e7df1502457770834018db6937ecf816a43b10ecb9e9aeda4a59baa22e51eab3aa71325e6f234be8f5f8e13879053dfbeb6faea08c61331b7b8dd5565ba909877d33b9897e7114b2f6f530f604c3afd8b3d7ecb841196e5086dbc21cb5e6ecf990c9c82f8e6a7694ec35944fb2ad15c3b0cbda7aee56d7834247f9bb18d7fc36e8dee4387494a3dc874e4e5e0f73f27ab5d7c368d724777353d583a8b6f567e55a5f71ad87b92a4c76edd6e2aa453ab6edf530db5571ad16572abf2458dbdccd70bb5e97ad75c3b84fc73909b8b58a7aa5038e61bfcde0dc511b7fcb1db5b7579b453ab2db3f1b1626d32fc63ae8ef5ed7b61de7cb3ae8a0ed96d5221dd7ed4531d7ed612e8d67b8cddac3607a666fba9be1ec6b76cd7dcdf81ab6e5b871ee383dc3edea52cdc6aff5e58ec259a4e33afeb381f5757c984b635db3e5dfb5d7b7dcc12d0a425fd7815f2f8ac1af87c11a3f1bd7abaed95a1483bd1e06bb6e9de16a2afc9c29627218450bf9cd5bee8cd81b07d2f4f54ab30c7ddcb54ec77297b2b1d768fb4bb5ee6a723686e5ed76073e10717465f4baaeeb9aa66bd34193e6b0119bd23f9ab7dca5ecee7d2665c36759a237a1e730ecda746eba09757fa8d344b953149353d043a7ba3be14eaf67bf4eb74ff8d38e7bfb0ba318c52846b1ab9f7e9fae8c7dcbddf5f707806e1f01ecf4d2f42b8377c7a445383fc01309a669f2624f3388c29e24499224c932811ab210c448167040c5a8a212c513555e0fe58391f013555e126ca28a64b9400a5f245183185b8cb1c4132f533cc29eb05042135555555535954092a42bc2b0a5699aa66942810fc610853158a0862a9e98424e16f8ed4495e700387414963ccf72c2081cc060640d4024133749783f2bd0c7c6c64605f0fdec87850c8efcec945f2300031a3a2a060ae042073837325043183b30021435f8e8297f55c30c8a3003249216b219e0116480061c1c0745c842054cc8c1633c01a88a22e010e630a656f0a2862a0871c20ee0d0f38648042e88015f6ea1bae05d410842728ad0040daa708358851324c801a4020ac902054ed838d03651b6502f73ce39a10a6255821eb614021250010b5458158d5fdc4895b729b5aaa989699aa698c489699a9840862eb0a0820abe427f10a7143c306a9086244a78820a2986c42134d1041c5010f3f3042cc030053604b98942b80289a4021d4350029227aef0c5156010042ca008d2840fa80842922445515f4ab7524dd234a53c8e6c0a02508630d83c818a230cc10a384e00810977092eb050640c2a7cf4944f2e3e7aca2f8de02131c2d304164780f0d1538e3f8120052d9e20831b98810652885498218b13a0e1ff0a9cb024612eb6cc17e9972449a2a6c7b5200d516ca1041a6091c58b04842d499244351561a033a51b1b1b9b18bc4ca7b8c8627d9aa669fa0475f663421750ec4967bbc42a73388e68133b40c282306e50248c28c429c8c0041e9ee3380a7981a577589a58aa4c694e4f4cd3b4c49eb09841177bc2020e3a7b92e89cf34f7faee058926fea420b6b0082900925317c72a818c7e0020e950be8c21a7e5ea4f86c508799d23aa6431fd27f4036b420bbc8d7e13d51cf2b171121f978b2e6c5455279c9a6e00eb93b7a9ad9436e4af7783541bad723e5e318638c31f37ae8a56ee6f5dc1fa8b6b7047573980398ca40ad5317547c7a8a9876262a68931636adb1c3a1a63eb2a5867e5165da41478ada0733eda45415dc29f5bde9daa54f3b9392e987fa5014f5a14a66a63e294f39f5a14a262e5ecbbc99b0b0e9e4854da7316cfa97f2144d95c428e6cd1373881353486449f97bad962a8923ea431de7d2631471f4a3840d946ecaebce64b9d0a7b1aaf4bb6ceb7728bb9b76262529efa69f69c9a64296d8d4c8747fd03edd1fa6a7e414fd0af3acb40ef84f178807754a1ce917293ded4c5dd4005bd7d6544464e9a29068c444a4e9b7a91805c614471c1c1c8baa2c3ded88727811304775fa0a58e0b1e81db61a1bb56dd7155563076d551235ed58afa60ea75e6bacc2469c69a767f2997e262fe004c6a464e29992d82186b8346648b18a2ae2441ce97556184ed9210583734e1d262f269ec832934c547fe69987c094bc6696fac4910dae0f1d05006fa971faa8135976220b8a1591e5864ec4080070c48938b18a98436386d6dd8ca5de03db94ceefa61d1d4e51941ee2d51337d5129125e5f41510d9b2c341d444326f2add51738959311a339e0e1de24aa80f8dd3ceb433753121d994c68cea2959ee90e592a8627224eae468248e6814a2a310ea7333bda33ea2e70c441cd13fd3c0ad8386c0b423fab433ed3c1c4a7ea625459c9c9c9c501acf21c72a228d2c9aa1bfeb8e6c2902091224221d7142efa61d94771167c2c2d44564813b91e54e3bf69685331741d3ce344d99c640606a55230a6f58e1c01ca88a082211d8835dc653299d883739d35de20473e2c88a9823cc1145ad237eea629e391a45a12465232903b2c5e4a05f930cca9434bd2974f24c8b37b02756f12e8600b621349d6849ba74e956866552ed0172443c228ea8b5a83ab3a80214e6162e23d7352190c802248ee8e98fa82a49ca7044e168430b0a0ccf5dfa133d63782df0e68928240e914e21fe067b1e0e2d65d308c5a6516caa67ac62534dc4cd1ab6f4a8d8f482374c6ce957dfc081a2b4744c7731041702356f47e99914238cb18838a2938e4906ea23a236e2ba30db0306263d8b4e4416098b5a04a326228ee893f2c47f45de7044e67461052462846620e44464e19080f197eea8d14a11b28522a20242b650fa4515498a44f6dbe1c7acb13f608d9c34c07815b35e6d4a4759cfe5e188db3a0668228bbcf5fd5a30b41e187b3ebcc5b9b01eef12df60c57e60ec57c40d3bbbc6a7044e7082503e295d9625fd15718315bb5bb10c1059acdf70f9ad6a67168a6559704667a34b6499521c1059a2b67ecbfa4bb1b40cb491c4b05ea925ace0a874198583430e617b127838d4d24e54e11ee1ac2419873afbc91d932e0716fd2e4a22d226c283a670789052533834743a8a087c4f12912dd28e2489549208a56aa89dc8226ae1419f075d4dad8f8cb0916d45aeb18b0d0377759758493b5217334b3bd5ab39458779ee485d44967c08ed0ed3060a37595c21fab4912d5348c8daba235b54aec3437fdc55327c2af0a35c5dbf5676da84de611b7c43b6846e3c2eb608bd22a1d973a3278e6e5822e470c59c73f64c30de0b71ba43c0a673d05da8d23a84b47d48bcb8b6a75bb9eeac55cd0267b1c5f4c2c4029e3d130c23189b9367f2c4113ded60b5666559eb2344880fade026b76dcbfa0db80bf984e2e8068490082cfa34048597c5a6576c7a51a62084a2d3cf882cf9740d1bfe065d41c8041b3e135d44a15002753793b24549cc0ddf03db507fee18a0bad649c0adffae0ead5f1c8974b7a2279238a25d60988c2fb045025c330ba768fefe30f53cf26094933ee9cab9833bcfb7fdbdedb3eaf0aef43c1247147339fc15818315f3c8cecf92c8d2cd6e26d93449749139bf9d43e6e268876fd366d3eba03b4adae1f491c8428447b6483b3b3c7a87cbc727331c474a36e5818787878787670708af89634efdae127d3e25b2e4cff7802355e88cc3fb038d87600e7d7a190f073cbde8b1e4536a83f006bd077ad6551e651ef2cc59942d12fc36d452a5e31b5216de1fa628d7989762a7fc71c0d939bc7abd281c690707675eda99b38767be9390cc6f58c90a82e18de01790078e21f54031241e78060909fc4215a92454105e0be4a15eec9e1eea0854116a8b4d5f419eea565ff6600926d19007f2ec9a694284682d446bad355543080e748d1ad73beca0c139e7d44940ca0a2291651aa1b29402278ef2679eb06a5bdea377283ca8a8e8e923557468a47978d04faaec401fde1bd5989e4a8d1aa7355ea3468d77df2952a2c21b4957787307e69076a43300f96253a90b9b4e614e61d3b8447c027ae1b548359ef22e3ab169102463e041c3a6126c43ca6bbc937600709708808da330094cdc5977337643fd7714ce8e1c5ec1ab035ea6d2322f8e74145a0618709524b2ec70faaa47b6f0f093579f36f99a077a00645923cb9c38a24fc9d28a797548970106dc491ed97349cb484ae2887eda48153a370ae7e1989b9eaa821e4639e1a397fe0e590e09bdbbb197c01fa824c324d306663d29f7197f963a641ab873d032898cdcc12de3d2a5704480e167d4790a87ea8242125966782155e8512894099364285d88235b42149e7a063d8563a923e044960baf20aee3505550390fc70be23afcb42e12e5b765e4b75132127077144e677717a23fa8348cb7b5454d15d58c000000b314000028140a07c482e16840ca2259f60d14800f8ba04a6e4c99c8c22487619432c618630001000000080080d0d0300020920a5694c3a3df35811a3266c07df9a64927ad46db93ba48650db7d00b97d9251a065bc4d39f0b9bc78751861155ee7172885b89267b1aed20da221d12422fcbc1f7ebd2dfa891fe21342c1a06150d62fefc68d6442c0d35346cc626ada7c341854b0b4dec8323bc66e620764598da3092af118ac061ac31970929d1bd82dd0f86096064f6d521332b114b69afed33b330d2bacf489e9cfd4289bf2ead9bc58d29230bb9fef87fc094c7eaba5d585e46e97d14bb594f4e55d4821bbc270e0efbbdadeb9848343024aea0bbb051b290ae3a375a71edbe65f481810f5f8ba3ed019760b3635dced0110b439b0466e99f9bd638dae9b61c8cddd5629303feb992f63c32ee93461353b9a1f14f890f35e713bab36088302a27adc00c62169c82519a9fae4e169ef07f4e4c33ca4bc57b05a33092e60b524662783db3cbb12408589af2e8b5befdeae0a827f07f3fb4d351b1399f845b1965e31abc854ee4b6c1f9160d441cdb18e55563b90423d4b0f61e0e3fa0c55ec646340bea621571fb5e7791e17e6d970c2daeaac587b5f2378020e52ac14c26b800f7fc450682aada486d5bbbf30c4d48ab8c5a64bdbc947606a76a69307b8ee283dc81b49c42e2e60bf19b1125dcbc3c8816825452d1acb6705436d4c39361939690ea07e0054c939f9df0de4adbe7d7fbdc7ee05a2a858aa1a0a18a6100d0c8fbfd892c85cdbee36b7ba85455b181f96a2d1ff548040181268462a4fb560aec65e0c490217d1b35f8180dbac248d3f0d76bf403b8493ea5d5b8cb884c708a48d88a66f94eba0c84a989f69c05c175d5cad1afc1161f3ae06b838d4289b0a3dcdaf3c4294102834de374b035c93e324879c43e26e9455283d3f3933e54dcb0ca53abe43c5f19862b18bd0d1905b3ea8732c7afbb46fa5a42fcd1d58d8e672c11c9bbe99e9e57b397cc20a41935d33feb61346f86170513ea996cbbfe3a20ef1176c5a8555d98335c2b55e10cc797cfd5cedf0631be9dbca84c06b6745a3ba75bd0625851e428e3a25f0165ad43b44d50a3f138d9025d3a65de0b26ac10a49321a73da809d7a0cd91efe27468042d74a3561837e68ba878f5a8f5184e056484268d2404eacf80c181304f874c7ad9b84fc078d10cc951bf70abede43d7d94a5b3cb2bb1ca02d56e7a32aa4cb06ab5d50abe77dd890d5fc3b11b97e477a97eab0208c6f9e10d5c2d004d2e253394b83f4c27dc2f974c12929b8952ce3ee6aa95f68f5024666ae53e1f7189a5692945ec0986d04bca0709f0c734d1b2fedcaaa3c4a728abd956fff45d7e6961efddbe42051c0e9718c8fe0ce34fdb4165cae2954ad10276ce7fff9528d78b2a70838544b39e3bb665212ffb10cd222ee5cd81515eb98ab386fce9109fa41e36db731ce8e7ab14f5b045adb3ca673c214ad0990f154a1cc9c14fb69f9613ba828284dc5c070b185c610522c9e18ff67669518fbfdcac1bc789f3da9643707b8766c9786dd6b57fe161e5dea173293280aef45733101a54f79d1aa34aa97fa81aed9eda5cfbabebfd374a652d07a3407069d28ae3f8ffaaace3b3a8c1f88a03ef66dbb63604a56e0825e64b4a53e10340d149b84bfbdd6a63efec352e08d71c54740249e42c6b23c85fd934a18c500a659f3bc121e8e68400857c905dd7ce0eab0461306fa70ccf6085873296371291883ef97eb01a2cd49057720298b19e6a1dc60c6b8baadb108722d9e0582cda27c5b021ebfe8607b7865cc10b1f63a01990235243a55ff87c00968f92130a29caaf260cd6375f83a9e37f62b4a1e55d6aaf9efa0db30a0d1f1b45e3f6063e7a6a2b68b7016086a12d947c04a344a079242068089caf36a4bbe93b1effe9e9da94b5182e5938478c2b31529967e6f615003b9462cf9328edc8c6f472d2620ae52dc4eeae38902a196f2637d0d8cca94e265575bbf7e106dc9e7f4351ac20ba27d55b9afd0f0b37f1e690a1298cbab094793bb8e01a9b637c294fcc264add20f7832dcd518b0ab64a96dab9df31efa5c2f079530bd04667ae3002995c33fc55a5e2c62164367b7756652edf00789885998719ce3f3f9c8443a486a4dd9668531d9ec1e54d35044819cc66f61cf6759e0b23e41f038c115f864ab3142bf7c00c2ccfac8978b38793436908d9ab881415d0fdeef6bc409197dbde424729fda602015c69600a97f73d38e83aaf4a3772dd06513f129e441a515e0160e127bd6e5a42aefc783d2a4e7aa222fd492f93edcfb62d569957352ac25ca0cef54b8423e2393dfc809e0f4e64075bb19c697afbef065c88e7a31e133ffb533510126d18ccb353f98841e16efb25aa87bd74ff7f0280b7f5898336bdced43a3351bd25710310a4291c40972e6d50f445e419f77e687c0e9f10203b259804a77c0c1aa3a018e48de56311dd2c373100adc6516428f55fd012748b605f5c44cef2c0126845ff4163b9839c3a5b3be58a78d47b6c9270fab941cf8050fa99d5d8b23339f6fabdf576202f96b8671f4ca4368f71942d476e98fbfd04068f43d9ad235ebf97fb2120691e15a426875a8cc0af1424e5bd4232115a24c7078e9eac15559e2f35219a714c2ae44d72a4f5d7622ab41e9bd88c1fb1cd1d3f6e99cafe47abbfed2ab917230ec642828f329509b96bdd37a07e240285c35957143e71fc7bd68b5294f346c5f93306f224163c0ed05ab53a55bafcf7fbc700977762b7a3e3310b433c48afdfca237b741beb1f0c2a30b8e556a373c3e63101cbd1601cdeabf3306f341a0f9a162fa7808daf4c435836ddcbd8edf17e2277c167e315e819c11b7f9dff5ff7f625caa1ec3b98a8f55feb9979522b600b67ccbd1c9f3791d9c7eb49b3421c992473f48e01e1c7efdf813c8a96b04f0de2dbc7629cc66c9f5120df7a8bb0534370c173417dec3e02f2abbe3012dbbc6a3ed3aeccf154acef74fdb276f9e890f9ffa5911fa3c310de3c653f87670e90f6d36cb4ed4085e20b6d66819f7569e3eb621cdf0ad170a22ac946db667f2f48fc46727409150fbbc4c39f169bc5f1bf8c353be22c337f254bcaf8a5bfcc58982de5112f665d392edbc63e74839fad6404990053294d1ab1112c820c3d0d574272bf7a70109f13dd0b346ab80f5fc20dce968c31097104e12d37021156627ef862b959ef0c153643bfc2227cce898f970fb86184cf2d3f10ac99f8feb14db3cf7f0169e7ba65bd6f109f5b6908dcbef609ea01785345c912058a436d5afa6d6a6f3524de829b96a7f655b2ea494e3e5ade2dae4da0ec3ddacc2dcefe6b7e78bc2deec026afb4072651e3227b3058537359f93d4abda60f5901c8dc04d0bfdd42a845eb495c0203b8789eb762ad8c8ff30378d99742c6c70efaebcbe30260b73246dc7e0b4dfbba830023020af617a1524177f79109fc9c3fb342230dce8431eb402650ad9593f31d969c6402bf9e2ace952601a75b6e10b7b25f4d5b99ca6f32e42efda58971f793d6d808f291d01e670c458df55b595cd81774a820449d94ef1984ba427385076b6563d491b100604b4a7bd67ef725147e0753646646b58d588b9389ddc0a55f2a131bf3ec82f5201d3d2b016c3d1381765504d9e0000aab408036a3a50a504ba906f07e33da343f0819405f742f111f2b75f7085784e60011aeedad6762f5b6e8364264d7dc485a48332fda5774bac54155fe47f647b40a91a914d2e83b81cdce7aa404cad8c954dd4897424ee9d4953ab01c53086b67d4d1a836033024b062a01b4f451d89bfeee1fd8ab9bc82d2cac6fc93adfb29cc3a812448625707b1c12981ee272c4c598ee611636075b97509178a686e845d39c65a2bec1ea0a2a34aa3d56ae30e19e82613c2f90a20ff6c4d3b24f61bb153f82c97a4eaa94e2d846e0556aafcd7cbb364393bf82067d8a69f9ca20c4e9892f1d744a5cf882a8101ec6aff062c5d688e43dc38a0b67f56342380ff98441c5855a6f547985cf87b0e5519b96ec9ff36df807a222a852f2a8f0771f3cf55d7042862176cf9da2cfb860b3e461784855fb7cba045ecb35af2cbc764e6edb55a31d7fd56bb0c3d8eae05cbb2de18f1d3ff5716491aabb23ae7f6dc87c0491662003c3a60ec22e24902a2bd93c701a70a89595a9baccee05a0c9020a84a1f8b8a45bb9a8cb05a24bfc0f0c948fa9b01aa6e3f2de4fd2cc122ded37b2cc191dfd5fcfd74031451f27a2e03f4769d021e407880426729bfcc66ae39eb22b03d9d7d73590dc6dd508132957db78412c5c6ba0dc259ddc5f6e7b210927fb3e069240c6af3eed610de34944ba0d400af8842dba19414b755c52a7a57aad8b7e05148421b16f80f792f9cc7c8216aee864c1cc43ce5fa1e6acfddb8f418b579d86af4dc06131e90c74874b786d87ea29bb462beecd95dddf61226f8d66752bd7f73bbfb215b494676351afcccfbbda75dbd8262fdb09d16ccb89201cbe0126f0bb44c6e96287b00848cfac648fd5c21a2f2532a2f65373fd1ab44a62db6120f66e87f75e5c2406c364092536b652509a8140434b1d016fca18317ee34dbeb09798b510876e4a5ee8e87777d6e55735c5c1585a064408a71ace37bcdb5d13a03ca5c9a897818825ecec936bf85adca365c6b0c0577f60efb218dfb3b2eca5b6cab639cf815b63534443a31fb0a4cb21379d1a22d66f3876db500dcff96c9011408405fac559e477199e1bba9ed368ee13f4a421912a1025a91a83d78c78e1e01856f54513ee1fe56332b8741b6572929368a1d7631a9cc63357efb70edea66e3b7a8a362b73495e723e4c7196eb2039455c8d4c9a934dd13fd374d00a3ad298b5d9a3a1ebefeb7cf48b43714c8e430419c082ba32fe947cee5a17a86703496aa4cbe2e855bf17e3a652c7a7df7c09997becedc3d8a423c2bb889cd63e2fe0cd031053f673652d7d69c0343685f744bf4d07bd6dacdd11faa2b9196aa4f2fc4d2a1541bdcae5d81564b79fbc499aa2256517bf6b40062479f1647448872e00b4b6ac2e0592190df582baa70930d1bee0d6fc3c1027e6a0e25d8e695f9b4ef57dd3c3272a6b6483212a6d8fad039b6208b8b2e3eb2d7c5cacd54aab74221def02f481c49a03925ef402404317338052b24a032e998cf3771db1484c32b961d04776c8c6a07b9cd5f868fd15f204f64778fd2e7f4f98376cb2c2dad16e9b8b7a95119de18ee3bda617787da3ed27c0bd0d78e3a829c00c39fc4f2797f3fa24541bf659995bd9c39501e51aa9c3058e6dfdc3df33e5ffdda0c752ad09274a9a52f0cd8a9005fffbf4022e8b53d2846851c8712bee422101546c267bd3cc763a8ea66c8c14ef3bb93a8650b640b7220736ae9061f87c907b4c4498107102f68889c3844f55dce74f2b758ea60b0129a696ec522f6b2a079328507d5f7bbed03c9a0a5aa9f6875f5b7caf7fdadb0a1698e3fd866eb506388bae8ea2af4963bfe42aa0c35bcf0d1d5e958f0b9b5d95076ef2f4e730a622c06adb93027ea67a67d68a50f42b71451a5b285acc3a577505e9f2f98c97e44e4d5840574ae0d7069a68d92d4f9b16733995e30a8fd4580871b9af5ae166d3a53962ad5304c288e151194ae352682ee7293ad1a88cbe3ee5799cdb44e571a53a4bf4a47bce41656e15719258797f36d02efa6e3551936158291e625ffa0813f14f06aa11d5636e4ac150d0e92d22ad978aec4aad20185570e6a006faf20da9d807baf2f8a7dbbe465d4f03d6059f115fd0790c756cf04b421a2da7d9bad04a2e07dbed8800fb754a6a18ef38aeec82f4f4b8bfb61a7ce2b78abc8f8194800af27d72ea4012803fc6d9129e3113b8bc19b85dbb26835f34d0ab80702b60dee16df9dc40fce30e65733f417e1154489a7582a6428eb787ec85e81e82d42e970649991e3464750c675c3f09e37abd8cd743c42fdd0720187cc051523ca294bf993dc54a9af491717901607c6be1480ce904123766aa2d865aca3737d2ef23eb7ed81a8cd21e0decd3a4a071274ba84a1c248cdedc74cc909569cbf6df039008320fe907102ea671b889af2c5c85aa0a1010f9d96cf960c132234b7843065a0600a55185ea0b9e6debca01b996a361ec5e907f7fee2e080de0fcf2d8c94611a6434a2533932c6b9135e29b088ae541faeec55a3af0ddb3ebc7f87e77656b7048d11e15bdb97fcee02c1e6289fb8eaef470320ff3cff4c40611114309aa0d3b60dd6124a490765bef5ee8235cabca83fdab3d7b72e76061e6dd6cea0ebe037fe53e6e89d14c803ce4d131ce4356ff5fcd2cecb8d208f4f0e6b3512e09fa016382ca1da9f2221bf8f759d8f88600124c6209f0862eb3cfe93c0a911152c9bf41efa87246ba209c7a2e416ac41ac6edd493155c7f49da7595aeeefde903c63507824ac2c1a47452b70a24cac17d8fef0116c7b95b5470730301417364103327b8234aac8cd1443c71c03a9d16ef50aecee4998db2ae5181c05b11c71e360a1affaa0ed0f6c8b43c192bf047d7aecb81248bf5ff87508a06f8f5c542feda21a672881595860c68664ad24752b680812243f0b3c5130c8e655d294dc8e3ba8dd426fa61d6297fb506f7f17c30e5796d80b3ad2a9d1630b9e8954402abb23f5cd96ab12767f935301f5144c76d0afa90ff879c13347cf2acaba2a058dcb585ec22e0299dcd0184b1a3cf7e4221562a2494921bc726978f60c435d728c5e5371b23b447976f57b3bbc1aee474981fbe712c3917a82b724afd27a13ff47190a23514a9dd48cf86415093ba0f08551ced409505a11a3dc416a12e2232151eb67e5f01a70e94897f483d4a6a098e007c73830850fa428ccd87943134400340c9e480cab0029a0f981b8c86d75a41df4b95c536ed68596830a96ac9aaf85e785169e868bfdc5167155e5bb5a147c8071bfa17dc99b6ab02b0a1e3684d5b8ca11e14b44cb117b1a713ff8cd2373a1e6d53e64870081b612acc03eb32056ab28b5a26da4ed8985cb3af51c0b6f7951d482adff584b6296947c74838a1065c4696bf0efdad4f31b75fa0c51ed73ceefd5391dd9a9bdca06be520f12ae3015f5d427a43e84a8de6303100b381aa7cb72beea74523eef111d3f33c0c1a88b631c995e540f9ba6a1189ed0693b8359e7b65a42bb52c02023c97caf64ee96afb83992064987737aae553544e84376c5130df32a2803b70a92287dba1a5e4bfbdcf59685367c913aabdb7fee148080d83ff5880079d013c8cec2e3f3a831de10883e160b2261627370789dc8b657aa43f1e10dcc4d4374c0081c8a4225e3e849265ab4c824ff8ab41080e2b8bf2e32940aaf411daf4d5b30343dc048e92e93cc48dc123cdb455220be644a1aa6f541d9829aad75a1d6e6cc41171a2fa209a3be2814069d05cbedde23ba19ef669761b6bc061af86d26f75a3b273dddf7365a908cda5b0ba97bdc2c612d47d8631c54875593ae5cca13b08f80619280fd410c818d09bd9b0bb8b24052c65c1f6429073852bde5d4d7cfc971906f2ef03b4160742a9a40ce71a1387812d44ccb4b58121a9d6541400e85c07c02c03742e3c7738572c1abcd5108a3c9dc7382339ef5ea6962941ca1e708cca6bb1a08162639ac5180ca4878fc4c7af7461bb05ea87ca17a36f06927fab9980672f2a73056566040616fa082ebcf8522e76cb9261c4cf5df89a4fa59bbc3b1082347ffd55c80fea1e1223f8d861251cad9450efc63d3254bd8234769cf7aa650a558f2ef8b6ab726aa5a66cb5d33756c1192048f305be0d19789a8806cc7ae39ca4a15a1036ad3a13412a5923cd73df0963cb89e9cedfc849041a838fc1199738db0e9323224a05de1d45fe4c230d30a0a7ec764e99551cffb24c62609ca8e778e926b518e53a78282fc5104bdde88f84ab28705705eb2600c9185a1fc2d8431cab96859e686c62476297c3f8b09ae58a0dcdb5362b018903ad26200ae76a685c49c2e281a7c085c6cedb2fab92f20b36e69388ee3adcffe32258db6bf1155a60024b7d9fb473937100fe3e1cebcb85ce86580e24cc259703fc9bac7b13e471af70344f8c35ccc02f410dfacf8c0c7e05154a35182998f693b48f2302564d67be83e045e0e3575e2970b3b03ab16e5d80c9900e2d18207f4e5a3b0066222e0c18c8c60e6f05d6d089e11cc800d0fbecf378d096267c348f7c4604e877700dd211614a70c351207be7e75e86b8c9e1ca604d7e1388d8190cdcf1f965b0dd9efea6516aa1c91bae347e8861126ece4cc5fbba1ccb3452fea09917ef829b809dc2536e04b05e74c3ba901ca2f83a420fa2e194a62068a008587d182e0d9649ce0462c3509365f4a6e98e32b4caa7dc13bc6836e2b707b4eb869ff698bec12e35211820f971f80bf42b9878384824df4c5b324fbf4edb48f52f26bc04a41b74c0a3d2c716edd08a821d40613560aa5fc2cdce3ccc4fae560c416ea9d95d080e83f326def8c9d5821a729f06c981320dc1dc6fc4c07a0c90572f3ac2c6cc1fbc2a9487eb91b8414b6fc473a816aa3c30c8753c87a23227521e4cdbe9df98e2366d67d72684712bf928cec970e89f99719e66d52426813df655a9625d935ca644abf974e690958ce834b2d0ff9c209d4545c91fcf31496bfb1bb89d0d3ef5ec81e5a148a9d94d92ca2d83eda6532fb33786b6bc838657884ab7a7d3bbc2b7fef6214707392bd5950ea2000d392bad4d170f7fdf12f0e00feb95a854d1e0bd822f1b08c62eaccaf59c785508b75db03858db4c34c2a39e83db654cd478c3e5cabb0e7c73d4a9a8208a04ac0d0d6dc7e6f871810f1a445f16e02e763d22b7a1d7e4142f7c362ee60e183820efe01fd0a6243a7d310ee819dc1d244b3cb79712e866692503466623e0c9820d1ba31d759be0010d4bc8e732b905af195a8706ece40dabfc5e85f2347596a03cc0d1be1a092373a2e5801e90c93371abdec861e3df4f3ae35c5e56ec3b46aa6882c9360076742129155bb19b584711951efda47b0281d58945e7c6b3f74b9b5483b2e0ec339375996190c6cfdb9d56dcaba0f5409649521278fcec896f154d45bebf5df3d8769c79452f200316a5f8c0b0cfc0046eec4c15f5bb90945e6a0e733ea49c6a7d94224e703a1a73e4f68526b158cafdc3ea21457a70b3c449cad3df8a07b2ff998179522ce6a6e0e83c1622a40c541f60f403e88e4d658f40581797a6116999a37d6c57b5783443b7f4c9f1b4ba1c4d85424e30cc7f4d88b6361efbcb9413f83d6ecee174549f0d1ddf95e7e48dcfe8449dcb9f8c3b07d50230355ff9dfe4c5d66e9a03bb669df19c7ce3cf9b3b87cbd33c655ba67b2e2f2929421a8afc8387d8f1bb4da114e4bb21b94699b6363c800e49a3d084608a84a227c21c891fd21c067420ab908605ead1c7e5514111d31c6802b336ff7353dabd52e0de5163ddd60ec0dd511befb7f494d3894456741e43ba55db5eefde71493dc177a00aec08cad8d20385cb3a1d49c19715614bd6ba1f9abb5d880ad04996bf20226d2c25b944f16642ad756a01d54bef4ce8259e532dedd0fab772911bcd0fa6191344beaa8e2c5a811b87025d96a18c9332d32c290c12fb832b6298ffd0b1b8b9968774dc3539ae9ca66cd36396e558d71a86f56e369a65fc6dc624fc6629a56d5dc1f286345b98cd033a7ea5b326c1b5d1a95c69bb51bdd1c7b4efffcca3ec7bc741ac9f91f65d3ec8fe001904ac0060e1158d08495bec70cdb6c11dd126673404ed2e752a4998034100452c4a662a46f5424305c1e7a5069f8d061fe6b962941dc3ee0901c6ae60233dc2b4434236f9426a5b5e21164effc0484379ae9324afa2eeec38f4201a53fbf50922b16c686de1ab2b2e2f25895b5992e605d8a299803b25b7d1555bfe98223fbe47532a212c3d9b7269e98261eec614114472cfdda39bf23eb67200f03572fce11534e2ca68ba9d2e1da1a59470c03daee802d630988d10e36d280031a3cd69f3ae1ff12b9675da2d3d2b1359dad3c9d9f30355aa870d43b2f3ecaf70c32fb1dd480cc7f2c974b3131d9fb71069ec75a47424e90e92c662b5503c8ca4e109ca7afb77115a81ee683c89249122385186e8345f2bb6825c0f515ca77d5c8ff2489294ce1f5bc8091039303a14c5bc4f067203a180464acf2be2919fb4003f36845d2c855ab605843ac77492ed6cd240cca26828f50b8ae7b9e9c2387498bd01499d12172acf5567271dd639937d408ceb3f6e9fd858a519479f73788e71c8001e0482b32afc397691001db4046bbdf7b3241b3dbfb4a9d3dfdb63079f2993caa9e188f593399e76d3f1b382b5a3b9b79265e2b8606725634e7ca18d89c4baead8c7aa769bd76681b06fa5bd823a6bd6843d8dd3af49e3c7ed537141e5b7006d10e066d26e562095b3116e6a0d36f4b147888ce13cfd66f433ed45a1ff83851462795700fd707adbb9b99b802579ec7d55f02279781411ddd188c91d36a81146f4574da6346dca06a15aa4334358c19096a01a8b6a994948b03289a405787c3e79f230e6abe716e79de25f6e834c3bf427e4d8d1763399364fd80092d8c7ff2d1879461c58ae08086795e24030b01c34d4c8ce2f18b4f28b6bdb8e2ebc30018309105bf2160f4e318f9f40928b7f9d4320f4ec471988eb53bf17ef6b254b523d94fcc12124ed3602b7720e99901d5c9941a86b57a8169b017d50c1fc3be03e5748aa32cb1639f35b8ce6e2442885b67973198172bc3aef85d11531a85ae2ca6deb7975e6d8de1fdc2651ac3a45c3d2a2e4246213dd61abd343f015d05fe8fecc4f7a592e69a041abf698bd98462268a79a008ade3918495cc8fd6cbcca49bd7ea10afc81d9b1e016e4321f4601ee422106e2405c3d6ea6dc18eb944df77707c830250d9c0e871630184763070907ebd624ba0518720764f6f999828b5c0c83b513e31d16a4103258a82c74ee0e15e3d8182bd1e2ecb593d3097d9d52d0c5ce2e6bfaaa061c17455784470922fd9c1df3aa8e37e98e671603064dcfb269a164d5e78bf6be97cb73339145ae6fa17892e5aa96b85c8758dd42a23cd199b11975277b5730a5cfa4f7e9b103f3bac22735578207a88024f60910576fed52f5ec394b5919c917fe7fa245538e926d2d6d4342195c0dc867a08ad0497d91fd4a0017fc30e7b992e282e25620fc861730edae9104610df6eeffb3d120895a1f755d0e350b09f74d79e9c8ae2e78b0cfc3961a9ef25c62b214136a656f3c9b058eecefda873b522399d750071514a5c4da1e4933f91b2ee14e473d0886db2e37328d094329dbf8fd606d3d6938a827cff5cd232e1d6d148048267ba7090e49c37832c631067829d10cb9c9e3087a9e281e82c533fb0c39c9f8865eb427b6301054cb511e688450cdf622b6d9a90d9257f8202235f68556f30ca98e5b71fab4870b68b9069ca3c3a446a9e67b240122cacccca92403931952b691c4592ecd23314a404627e424e52cb7ced7eaa636d3fa7f63aafc7bf65bf062d463fa22427a1011389371123e4abdaf4f09d698eb90e6b262ccd75d2f0ec680d502e7099b6a3f12aaa4389cf75aac3c961a1e7432374b4d84a6fc4085048ee2c55023856c3bd3793e9abd812d7e47595d66620aea3dd0c6e2195b0756e411ed1d1e2e8f456b44b7be31b847ea6f24d50d551238ac722ff574cd08019133c8e7c4aab3904e23004fec37bbfaafba289e23ef67663a0d1de1028739138217910c21f99f804f607cf8a4fedf3f09a01866ce7370b9def3d5ea618762f7084a12406429162590c56e7d1aec90484e518c2bbb53c61e64a472ddae02ed622c99468e80f9e666a310cc6cd9b28386537f317f933b8701c2ebdf7601624b4f6df79c4e06b1414615faca754659cf97223e0327d6191d48f486a5ad2cc24f5c6e0f89cdd1fc00b288be987443c932c745e5c245af448d6a36899d0cd60cf03f3107f7bceed4f160e3b8db1d0b4e15c1940f1058146c4611928e56ac3f01eec005feaa953393ae348918ea3cbe46d8c6a24f291d1c7aa90c5df32a3dbe9c4787458eb0620a411fcd9235524ba7d4f6682fad06e48a540c2e7bdff635976cca3cf90de85f6d877d5eabf94a63657b6a615e2f455835eb78b5766b22baa85e305243b50f654b70bae68a068dfbb2421fc96cc306cf72eaa2362122d3e125db542d977089c21c66ea35be3848e875fc36b10e3164f523854f38fe89dbf8232b291712e66fa44d9e27916db1611f822d1b3d5207a4fe2588ac1b2f187ee1da14f8c2f7ee106e40edb62600f70fe90a6083c1450947162e0a44f6296b9e84c0a03238be42b09e33db996cd02d6de896d16c9959c27c71192f748c90a8ff9f08961ee2b119e9e663c54434d0aeb170972e4edfced661fd3a27096b968b246b694c8c4e847df94043010df28037293012a1890dfea734d14179185899697d07c164f3df509827ec6714e4996c25b1da418294704e4b11353b2e2a328a614157c3642b4939b837ee0b6f64a5cfa1498a542222a3c3c9c4a5d9946c114660fe31959d5a21d1f812baeefa9ef20f015817345eac7d9b82077436424d7952d2b90bc031b2f6be67ad26940616ce68ea70b4bcd48aed597420d76514aae96286a2e0ffe9f0bca8bdf2d99f8a431f8706930c219f5b34c1a326be9609a38a4e736ee41923e1f3202eee17fc472e8729e234140f24f7751fa43ccd92ffca960e15024188d0390e34b5522f124586b3e0ed1b6648292d55d3e63be05cc38650a0de6ee462e16e04f499fce04f63439f1d04d48a9f36856d418325a1fa22bd4fd496394677988c675f4154799c9a2850f2e5288995106b24f649b80ae9b10b40c67e4ec2263ad35374c912a154325717c41a7820796b38299c1e43a02121f48acf3326f99031190b65eeb623b8bdfaadcaac8ec0ad974fc7189ae49a07b25831ab2f8bb3cb43145fc72badbf77fac217d4d55cc12e807d8e6d4af0fee45518489d594ec22bb76d7a321b897cd43a65b223c5f9436abeeda099b90d81555a1c42662b7f2b632b9d5587b7947203932caceab8c7a434e7b29276dfe55cfa17fb2e0f744983880454b85ab5c32bd14683f7a496c4c5bfbaa2d803c533d1a6b695fb367955fed964c01c9af8772b1b56444f7ddac201b348e8a30cac8f0cd06c92b258e52b47dd7e5a251f636c21af25f0f0cce80661b32bfcd020b5b3610438ad9b4f457905bfc13a7880832a07130ebb23e6cde5aeec5cd345da94b18be456ea5a128ea9b38609062dda05ebe2df9d25fdca442bb980a2219528ffc7919ec755813927ba61b9816e266ce4a85bb71e6675acd2899a5d2d3153107faa96fd7f760cc7617db80ce6c625e28ec080af0270139c2e0768c99ea484438f3525c8cf9c3911c64bfc235756b989dd1e4db5fdecf2be2c229f94591f0b7c6bc7408cd6c6e8f8117c9a0180e4325c1e0ba08dbb3a9958e628d3078b46da148a857731b2be7b06014007d79b7b702201aa277aa8d37c8f6aec9252f9f6667da52f8d2d813383f13604963a8b13e10f34def24fb2b7dbb612214f6fc96d12ec8c2654c0932277e20e39b7b7d441d2d421f6911c164cb4821c949fdd328cb9968300ac342d9074953fe61f119c4df7db8092247da7e42510fa258b4ad6be26d2f8e3eaea7fe1e6d195b9f16bf6d2429573fb874e85fa242a6bd0e8e064d35c16ad5739a91a4ccdfc3366619a8df80357d36b45cc6fe7251362cab354ab5b9b3278165dd9938f60648114b7ab0ac142bb01a43b2375f25b77f4993e951acdeefe7a2963faa1509534c3e2793d4865821f52314049c23134e554b2ae4589b3f75c075d3259eb9d3ced8baf811766e40fe5984ac1306da55190a99b3a0adaf2c25895ac5f897b4d859211e4693dedb3d9524981cc0cba6e96d8f179ddf1e9f57721a585eb65080a55969d1a22a3c0d61e0e46843ccf8b20249d341c67b8b596bbd0bfce8fd6eb921ae1f46e0128e905eac4beb8fcd675395bdc4d01522af95f075ac7e2b8e85502d1138c766f4fb5008f8db51b4e451520bd0f3f36fba7b0ef43d4a73d98d6d7c30b9819cbcbc9584bb574beea53eb9eb8b9980c65b8629abab9dd373c1b16299df106ff42d681a8534fa04de806d06f6ce694491b98f1e8bbc15c26b6c7022188e058e1897ed659c7e54392f6d5329031ddfabe912954645dc477932714acf8be2ded944bfe7a03f084214e2982460a6c9dd07eb7925a1c5d40e2b4ddc98acca63f8e0ab14cb1823ec56e51b811fafe9beb94eb8a15f75d4caa2080b8263754e21281ba91ee952c6ac7996828a70208d0c742dda9142e9c7120f61d5e2714e4ed5c862787217a571ad8631c24b29a8010405e82d587d3b0bf127065a8c39bbcd068a14f702b5adc7e2a767417a692841400bacc8bf520c95d3bbd44808c634fcced027a06838d7808088a50a9cd68f1a16b1a1a2bcfd6ce3c1dc4d179e4a3e27f6004d0b649a35325d2a5f4e95d7d2f6f67ad4b4606f8940a8b8e41d33789959e53fc3341ad36115a25ab943edda2beffcf4c13f83055069acc8b7afae750f3289b986f8436f3fa61b1cff73731cecdc8465d7f789f7622e10bc99b08f5a990ba8a4b870283db66c357f061a8dc6315c1c9b211739ed482a9fa15e4407938cca5b17a43f439af359aca317af6837f359a64f45637dbcf3bad9c1ca189c650783aa0693e7345368906407fb57bac86496423e64017e777ff301a26d28e4eca5f0e27831a7d0cf7c015f6e5612f87d7b329961c46aa2c70d1a55e46e05163c416e0db3947fccae8052c9a272f8435a10d3433318f34f4c2e3f061a5a858033f36bb60f622f064c2c12e9dabc6e050cbb1444652560ebbc84d32434200ef7ab8a5706ca6d6aa52ef2c462a90ec6336a5477cca9d64a0d6bc3d954cff06a0586a3b09806798085ce567af0351e58974174028b66c73ae727f5148998d014c7879dc806647faf5d159f45ccb88a54d435ae16834cbf5de97cb17fa72d85b0b34f8fd7b2e1c08ecc6c8b7a7cd176de4e76095ea9842b9240c7411811cbe824b0c5d205227fd69acd8834d053315b706b2cb0debc12457481cb75cb25300b0a1a311f50624eddaad7f2b8733160f97385e12bfc9a900e13965c675005c05698fcfcff0d1a97f485e66a3a7d19f810f11576d130f8b6b5a2094a70830e622fbc43b46ae9fdc672b8e95144ebb374c4263cf5251eccfc3a92c1b4bd21db2267bca6efb68dc212386029e7f7cb8ba110f5b385126010a32d0b22a9e15a3d727829cfe04bfdadb6de92209904017d969d4f96c07b900942134093f69a3147102ee824688baf64032d5f45ace92890cb8e7e40a022db35952647ae17ce88b36b71110613ad180951dd3b79c7c9fb84b561c2f22cd03436380897ff15d7e6d9dd4a9ceea60d6ba5e2e09b6e66b3acf93371ca830929240a8f772c9641c85235a377a51b3d6028d077d559a449e403940ed9795a54d8d38e9dd2422b1130c920229c3e731874335ba0b51d152aa6401d7107d81e39c9c88cefa40df024fe30fc2d89595fdce6ea1af1b3126a33c97168fc220497eb479b829dfdd0f2bb6bc9690be1d14683ce95cbc115b3a2a09d49dc4398eadc5f3caec085cd1958814a4bf4e9ace923ee9ceb21bcfbd1428fa33b44bdc5ef225bb909c9b11c0cffd2fcbddcac0c7a5eabfef6386a8a325c5eabdcb6046a25e5784d735148d91a0ffb18e030acab7aaa806d03e9109856647f9540a9af6a878dacc2f68789a347e3da5b892add4b802c2ddc4fc0ebd7a0e22c1a8e7587dcfa35b99f5d8165b44c26ed984f60d014fea2a5d9521ee29c81f699ff66f4c1e2e939e0728b142abd2a82aea114abd43cbcd57346cb458392d8acb208c010a8d31c74fdd1c1fa3ffe153b43d22c43334f2347f7f3e49c34ac3b5566333fd779463b16f7eca5975726895900b194256afc825ad61f9ea69e8387ec666b1ae3a6735069f3a9ccc110742a38c24962be7ac40b4321620d1890b248084ea264ce60882d49924fb2bfb99f4424cdfb2fcc46298985f5c77928983b1f53f74c5e6f70650b41f7928f41854bd5102ba8639a033f7530636862025e9a4147a16502a814078d40830150e9063196160660a41b741c0d66804935d838341a00916270636933011a947c51774560d62d39483d1ea86eabb744c6ab2132c088206af153f2fe3a4130dc71e95354478e745b0b02a8eaae439b11d16b2f146f3aae4316f208f12b61b139baa8972016e5c91604408c82ac7b726bd19e9675398b86d39c20752151c48cf2f7ae61dba23bf1885a5deab8e2cd40c370a473d59c60e39ae6c4f612cb3f9abb082bd91f3d9446fd59cec76e43e5fb30e7806616227838bf33fafd38986314d469184b6ac06bd46ced486f2ee9a82ea3bb1095ae6f9a46030f9986563ce3da45ea533a2b5106cb5090c85e0d6d84252a6eefe0bc1a15b492dc37ad07145a51df64597769806b84e54131fb1d4560791118201072e6dad4db0b0611cdccef7455122d1c899868e8b032278d995c982f0357c12a94c926d030fb82bfb743836011c1b756af696a9b4f6be5310b025140a09946176a18a4f803d6e25c348973e33813924c9881349dcec523094304ad34abd2f7a2d92180b6dc219c59b1232518b4c6626d651272eeec13f4c54a99589fb92826ff438a596d70140d8061f6223b34cdcaf72ed66f65a5b52247801e6817d029ff64aea0361edbd9589e307c59f1b2e541d661b0e0819421a334b30686001fd32b30ec89dd2d9c6c42b3e22d4bbf8cef0f84055e2738b13bdad6d389155bf316b9f80a4eb06a48661b0a469fd6e292661d4516c9ef6cc988700c0f9054f17cd6f1ac39c09a4b82c9106c329c52feaead4d80000a21a303a62602b5097edfb2f24ea2bf4ddb9cad8f48913ee0078d2eb28a13ea7bc7d1cf940c9d8728bf92fd9b6479779abb1f5a89e875fb2c7ed2af699cf265c8d41822b341780c27e83710192ce1a982e1d23ba47fc84bf3509471bb929ccab794ebd530448310f3933c0a77f0188d019baed0638a9876b324978c34d426b0234f3050febe941c163493863c759387221bc76d94a376404ac9240d0a18babbcf072fc10e76a7ad0082237f0abf5284196e7058061aff7c0f7b632c786bdabe68e6652b1017b62465e9c4f4e18870b63275dd902243929c65b7b7c738cd580b872d002cdc486903e2780ad865daedf76ebf621d45c3738fb643b52a2d995d45665568d7b0a21af2a83049613da86a254c44f15abad62ca174e41847d143ee797641a03ec4f85f1ac79d6d9bbd8cc0bed6866ae30279609ef0bbd2216651177fcbffb6f136e6037ac49c402800960a1a46d89c99b349e7a6582ab39003395a5f09d4023a99dc4426d0373ab825a1df78b19be206358a20ec18176c2816416c82865e6e395654ce88f15f3a1d6798d1e299890ca1bb901e0fb1c7f7118d05b1e5ffb55d380ad1fc87edd00eed728b5704ed0ba23aab1b501bab02ec3a71bf92ee50018f2dac78e8ca7fa003526924d175ab947af6ecca4dc5d2fd2af587e2b6f3afcb85543c6d9ebfd2413b043605d4406cef7bb92534bd3e2496394aad1b69356f36e6f6df83c367d1a88b213257ff8b06a70e3c7104a9b911980b0acbdf6c32d10174d663d77a97c70e70bb9a79d99f5be2c59a502b57944a4da8c4b10396aefd3ffa5b9055ecbf1a94f30a3ddb0ec1bfbe0202f1779d1e0213d2c31d727e43343beaaf0981fd5404449f7bb3ac3ced9250910cf0d5418f4f7e83772e4740d4b61a5965c85546571d01bae97201ca1c1e8b244e0936bfe374369f18abccdae0fc25a061789556963b852f5cad31dfc2072a572dcb8100e4bfb0833f73aa8ce9456282110764899be5a6c18302f0e931bbb4ea274f9adcc5637f7fc259e80d63375f5fee307e6705d7e45288c1b1643648391b4862fe03f165afd6489d013521869c797745ad75aea64e1e9859098c8e7fc46bf83453d21e200732004a5d937865bc183f80c3aa6aa061fe7138f66e3794629a0171c765a63ddae13980afb746e5c9d8d2df47f5cd0734fc045aafe1679d53f7a992024127bcafd1ddccd112c0bea3d7e03ef50ea71f6025a0a4b594dd83e405211cdffa97bd134e407253aa66df9490d76b2e844c04c45d7dc4b7c95d70532f50f432c4b7c6ec0047f708c863f4c538c73c47a46716afac09d5814b3c3726dfce788cfcc62ed09b01a29b8a620f2b338db21c01a207d6ebbd10b03472426ccfd9aa3983b1998078cae17bcd38386cd291206a637bfb9ffeacffde949464c91df15b6ea21ecb7d99e7fe47f0274374efe092dda2870727093d3fd6de405ad1c367f555b125a387ab72d7b7c441d54c595c4ab8c0057664713db2fbfaa8bbd18cd3e686bce993a66bb931b89e9e4edeae687d557f265a76964d1a65576508951bfcbc453b43287308f5db17580336d1c2bffb2bea1f8dd930e11c31b2c472fc3afde0e5a691e338be346ace794b344663cfe58b029bf6e5f929fbea221dd50a8362885d120fafaaa0b3a595ef5d9e454509564ef707a899bae4ad63e23d98c7d702c4385afd890193f67386f6a2c16d293ad0d93bfae6eac401afcc2eeea2144fe67a0aee3ca8e4d6c5d99f02e067a60e291bc64059e5f92ade00ebb86d319215400fd6812010684da1607e4562649306953b8036f210a8006e1019bad049d6c8e32cea469b3ba33bd9b39030c8ca9aff1e9b36763eedfdc3029afcbf2a1690c73b7bf492c3143377997165426aa44da207f1f2eb54ac21e8c37c020a1eaf515b9e6fd2fdee74506089366aae7d32335afada6a29c6c259d2bb73aaed2397fc19acfef998f20a5d361052baf363b7a67b466f43982bc134d1d795753fb6244fcfb43991500d84f68104fe77d99ed11bff8f7762674147e7c078b51a81580d5de685133ca4ae90c6a0e2658cadae2d3d4363e5e384696c2f4853fa0bc0786a6d2f62bdf45972a629025d731184ff32014c4e8df21dc5565999c9c472fb26fd637a12b9ddf05c627c8209117bf861b62ed67ae1ddcb29709d1042f529cae024c8ff1dfa56750449f7e173990fe838b3d3defa80c4fba2a85110e0975047efb1be6869eb459e8be8b49d215ff4d88a5b69eaef87f396ea45d7ee44f89a171d4ff8360bfb481d0e77d149cf9d319c1eb65754c78b0eadede220683a6cf8db1c256806ada5bceffe34f446ff0c8a2ad989765d53a83bd2890eaffbe411b49bd602534d363c4b8ea4052ed80ec448ddeef519900018efa043453f0dbacacb6fdff10bd373ffc0f47e16c7dfd61de1769c87736d386671e294db3fb44c51a1b0205285101454a119215a1f7a4267f496086e590fd23f718dc89b25cdd5634d6cea43615e4212de4f02d2fa01ab29b13ea2d54e00e7d9aae1ebb9bd2098062ace70ede86d3176b8ce78464123d2b6b6d233805e5a8bf6a58f8c84d86dabf3c7ecb782eb0e580c0a8187817580e455428b95926d6d250a92b6d5d7c64b5a46da5f892a7d82de41c15399c7a5392e7059214ae9c26fabc2c55ea6b290301b3224b7b6faa5c27b374bb24878eb8755dfe656bdb4fee324e70ca2544f89cd59116f26501cc2b994ca19c9815efb28cc5b8cac36913ffc62d05ede34e44556ec9697367d5a6662ccabd1a8a9c07af1dfaf272cb26a22f4730c8143c7accaf693cbba07e594d2adaf4f0a0f1dd170a21090d0509e601e2c767988fe5102a14a1fcc897f2ff4a8fb63b96cf6e8e6d7a09fa86f044f2820cfeef57876317b0d67da909bff7e80389f3fce385d2e0f2a2a25397465710278685f1d9c438e70940f9430b4e386be4ecd6f06a24cb49b7450d409c2e287a8ca90c9d8ad8aa23d29e0c8642671e2e2340b57df6028d25118863927d08fdcc1cc0ad07afaaf1a9ccac118ea99832ffae9abadd17676a7f2f0ec91d832dfc21caf2f4f94157cf2d07991d9c9766268c96d26fe249c2bb7df044d7443bed73c3f7a1c1766ab562ac921889980106f7e89ff4b55e2bc4937da4f621f2b0ad4e6033d7b47a280e6ecb1b5c46a2c013df9d7aeef11c07efe437cde5310d3a792d467e87b865ed093069b1ab8506d95e7a1fa0d24b74dd1b17ef8d243168857ad5cc6cb559fa44239e6fa097cd4edc3e20e3dbad52957d8faa89165f2b35504cbeb37f73f215d76c274858f234ef4f130bb8aecaa6121ab807ee270df145e5f008646eb8fd605cb399ba8a453d08a0ccbb4bce83f692a769f081c3e48927bcb76cf598ebca80892cc69c9743150b7925877ce1c6c76d8ae28c642d91772c21da09b4ea6f70c85353096f3e4597295158fc2b691d871690552b3a89068e366cde9e089019527710385943b2b9ee01cfe114741f2814dac82c91726e10a262f18ca28407e6009af207b81a53c05e90393710ba2070cc229805e3084154b40bc8a9279f306dcb5c6d4094fd7fc64083b18070656c0af692778125976667548f38c3caabadbdfd077c31eb512e4a67f8ad765744dde1907f185e8b6bfc7058a26509d243c4128726931291ce14355c436e8010b585c683ebb572414d89819247d1b22896e8904960312f1a05f30c1447eef358cc66f78f04657ad1e8250cb866cc14b933a2499b938fcb325a42137c699780e0ddd9afb86b20e82b79f07b823fafeac01674b03001ba30434ed8e7f18555f0835413b6b63c74374e602aaa102de5895ef832936c508aaafa069cdefd819c983e13532f371d6aa145c87e34ab9eb37e90712b931fe268c3cf129a58eade43f3b323e77def45e885314c937b9fef9d6c72ee3156b0ee833d13f52a434d3f8c03f94562dd9cbf59361b4f318cad3a91bd92be336878e55a906202596371b08c17b8462d2c7e553f5c56e6c556531bf079a20001268ab77ea5aae020cbdfdc2100c3f39faae4d6df8cffd18382dfb24caa59a288b370785fb54107e5405b0d5982bab7ad7e0592900835c23b59e960e2f4b54a6db9a01483cff57d0f47b92eeb6458b7100d00196e20021ce7f45a159777d4cf021280562d2b24356d913c7252a165cefd3a81192c5fb3f57e3e72d39cee7309bdf13e64f4e5622eb3859b850b0838e63da483f481a68f3c85ea3205f5c67fc42f0eef0e1933b7810c9f0e20058a566a5afa2dd7356f7b7b0eb9b8f7a17cbe04cd821749c76b0e8647f55aa370cebfcc64d38803c19f9055d36dfdce46e1cb4958bfc2bce9b81ab9ba045776dbc4101385dbdd99eaa6800cf14b021e42e71dc49d20da3a4c5f49c569efd6cf0d5823e236efcbae768fd0129c8b422e72d30cbbd84855eac84280dcfcf90577ebd6100b25600bd0323b113fabdaf382203f561592ad71d01da2bb08c8681085de230b456709a721a0f0189dc004952932fe86e9dbafeeb55f6ed9b1981f1fd63bff16fde0e689dbe24f241f0e1a20839de1d583daa8c56f26299c6cc1f7e981a02a61e89df640c507685acf14a179abc0fbc7df4453f00cfc62d9b684fa0e1338a320af9e305562c112d6a0b3f3e49e0a04294e8ea1fa1b91cb05b9c9cb323c43c380555854ffa7f6e683037aed8968e41a3640494ddff34cc9f38a1511a3d1a6cbae863c3b1f43789dffd6fe45f5480b71bfa25c9f76cfe02932fcdea38a0d167886583d9ba3c87edbea42c2c25e0e0492d8be527e4c475f5ae6445bc66eb7fc42f03d8ff5b468560050bc62da4abe5eda5227686c07d65ce818d756407b72fb898f2f0f90e73f1bcc04ba494b9b085fb4b24f082ea656b545194e4e8c0162a07e2d5f5edd978e84d579c98f038f1f809f148d101fb808beb361318c6fd89b61861afe44354daab991907bf41199799fff9024ef5c053b9b3140641e13d1b94c731e8e5811c792c52adcf0c8e761abb1c2fffd78267c1e31742eb99c644d3d2c514664029834cc8442632939530b2990632c8ccb2b8f8c334106a8d36d8e560237f506481b05e9aa49197fc7681028fb8f813c5368a94de4ea0fef29c68fc1552d360b169a6fe108b0cebb19275648fe2cf398bf7eac10b5035804235e6ef72e3afef9687308c838b89a2c40e099830ded4b968df01b4a7fc72f774323549147861720e9b1ef40b7f4aaa9c939c94fdd96d4d2a208009193f840b953032f5dd46e93b9f10d6bc48c66253a65152d92c93c14338c5787a2c699e5805fe020e0cfb9a3f8800c723492adb9cf455af7461d489d5d4ec57562595ed1066e4ad90db773ff97485c56bb95eae0ebecc831a2cd7e976f189470aa2c821c3e8f4001dda46bd6a47c4689f2220e71e4f230ff0f8e48b86906bcf4e0737a14dbec02b8b0113921cb20fec2203a535ca522e9997ec80fa50ecb53f41c2b4c03941723ef172f3e7793ea3c7ccd9c2a536f6b9d492eb084280e4967b76ef521126f1042f9ff6e8f8e6f1383904cc0b7c8adddb89bddc5de71f7ba006afaf8c2e3e9f1dc7749115a215aa0c79016f47e76387a8c032245f171b2d8274dc699d28ca4cf3a420d689f5e472cbd1a79eb275630e8d414194cc17bd1e73962a5f6996dc32851b4341923bfd7ba2ae8559715aeeecad94e7967b6a25ff6dcbcdb09be4ecd2114c68614bda6ac96fe5a82d644fbe8acbf50cae16744268482d122028503598fd18c6ea7ccf6eff6006485cd816080bf41efcee097a33672e5caffc874496f37436c91f59ddefa1d1d7e4bfe2852069c5d1b8040ee6c6c0c8056eda7162e0c1b77a001e57a54e1533128fa85199cc6ff6a906fc802400d15efcf872df2676e769547f805e50006bdbeb0d98512a2585abc67b56971229bfd3218e4cff9bee3e0df859083b8c5929b695dc4638371855ffe90b3c18685c772335fa062bcf916fdef6541a8d56b90c20184282be13df15a3ecedb1c62560b8945723bb95e7c1c3baa73a51a64b60364778a9cfd72a84dcb45aec05c68806eae7aac47b2e4029492d29e192d62736124ed451b2e80d867af56a9f74cc4da55927dde5fcda818edcf3d350aaaad603a60ba21f2a875a48a717ec88bd77871f7c41503f9471430d9f899f3fa25082fee6879330562372e082723b673f1be3e3a3225f306b1f8f8482a71389c77946489c0ce6330baa080c6bd6dcce48721ac7d06f19e6047fd78143602f7782458bcca449547f14ae01b7bfc393535950f5047dd049c1ddc5c337094d2ab6be6d9fcc381170ba78ccc19847fdc662db8f35d1e8abeef6a64d90d5c333d9431bf8039304d10a329b3268623a720fe8eaa28a2c8f0ba6e95cf9832dfd884e473bacbcef192b37ad012475728d4bdee82c32298e77687829a60a1235785de445fc2819175e2ff0066b7386b18a830d4faa13d203ed023e873b665b8ea1ace3cb90228aa7bf92591158aa974dd2ce83355333fcfe4da09f6df628340b47f0da85c04c70a6c3d6b2b5bc8893417b2e28c9890ec8473405dbe198eae208485d7e78d91ccf56647c30c32f03a6bee7868ffd20fe8e222221688810049a28d3b8d5e43aa45acbd337f66a8fdb41da3e24bb5544087fd4516abc1742c8fb1ab817222db5f808779b78e739c45277e1bbc0a3e5d7dfcc71fc96b294659b994410c03bf1a4e0a981c96182c8c4d80dbe862c8548944c9f6a770524792007d2c6a88463790b0752cf53420a0ca470b61d8bfc00847a21332ca8cf76fa124ada93933c2d54814d348056a9af2cca2754714357c9d195a31feddee3d9abb344ecc4dad2a65d7aa738d3e3acda45cc187f56d21b1e6c57264ac95c6e605277ecdf5e40cdec56a8140af8299e44bca8fde84063b343489935b21d99dd17b78962a9a45ac3e3fd46cffebe2c162bf1aefead779494cfa3b8fc35e414ecd1d1d4f67ee43431ca84545896de472c5b24e8b7c40155dbf7f6921555f454c923fb2fce14e2712acfcccea6cf6891f24bc0eb281bcbe5bae17211e38fa2935a87cd04463aa177d11b270912eb03efa615712b9bda797cbebcc4e1b4d23e0f158e7b94ddc4a3a572acf320f66360cf8614a2385d55117ba538a5e19be307a98e6206cec407404d441fbc0d330c4e8696b842b8653922152f222ac8cbb9f2864be58542daa02874e8db448f9daece7abc674059ae57a4dffeae30094f458d985cff558c5d0dbb45f2cbf986411872c868f1269c19b7d2ffdbdb843f4b06d387737b4ad6c93d184088c9afd16577d80c301bb582d79c140aad9c965ce8b62eef0b8cad900a43b5cb3f843b422a056361a1abd3acd0d64b7df644c6cfef632e9e0b86089f40773b42794b347d27773196d39e83a2a2904669aaa460465db41c354172491048a39caa70d188223dab6bdb2586043511258ff7c04badfe908517f977eaa835238ab3a1e5737100321aa3cb047a28245436e89b032ffdcffd8a75023c425197ee7cdb4763f11b13de513aa2f4b390271097e994b9fa47aadc96bc77200d2bd06799a0a4d2fe30fd66ca0e7ddcb57042480cab26040f6e849217140d9d7d71104495101746c754307016b0c30ea5a4f1a83447a7aeb87dbdc68b98eed9ad4ace74873a53a2f82f8ba3664045bea119ef457d1bdff5b8bf55d00a0b919311374fdca44bf2abca042b6f753530519bca1e83b65e2ca5d8852e0bd6b3ca73737f579d16910b40982d4b061052b8d59de564546728f1cbc77375d3b362adea7c4f1f83c62c5d9c0d4ddd57255638332e98ee8965b47e90f58cdaf03b9438081e62fbb73ca0a6bd164b4ff35e94d061252360a1b63a3f58cd785826b3d4fcc84023ccf57f62b3cf61e485c3b0a2bc741c09e42cddbf0f2bec85b4765ece041f563035b41adbfecca3c888caf6a5108671a26cb320242af1e9ccba8c21a9f4aadc97b0de7e5d0a8c3153a7c0a654c69db04893580dc00bc8dfae4e2761697c5379511e1d13425888270b466b8db0f44d92d4075c505651079f18af5b7573182d7f5642a88a32130e8531a5c1aae12d6c5a3e142d3ec24cbe4cbe44511403a37ddf937d5765daf4a85db34d598ba2dd3520216b0b19499f644fd2eb557a0b9a038fbd032ff121057d76f2ccfdd9e491169faab107f0b2ae5fd5889fd2bbae0cc5fbdfc5f734b3a7d5b5a6c6329d634a9919fde1815c601bcf2ec6590879550d5eec20a41e88bea3ffb7d46f68942231587aacd90f0e2efe9d0a5414144d681b90da30f27e5f3255167d0a09328d66be590a7d1f69c1ab086a7e451ee7ffba814402ad97002d42a87ea3859d1c58f23bfc66c1efc4fdd3dd98fbb074c32205c9a6dbd630bed5e1f3e50660c39d15df1dea191f5409669618ce4d20954ec5bbc2c0d0a81c12bafa71d10ea881118fdebb10949475ca01b5eb14bf67ff47a21170188b82bb90db29f29e8b9e976789d0a07fc6b2674186bedcee515f76828bd8fcca2326d19037afdadef6f2b0ed49d9849f21ac7d2c6e8d1f824bcb81b2e94d06c5f3f6ef5441f245f75326309382ad3c2f9ee655f0aa1081d02a2c0b3858f83083fe06a2fb376b106cb1590087aa1bcada0367f305282baa43acc36fee341b63b522eed1a27e438852b9bd8acba91084b3064a81b5f06e625d964e2f56047dd9874c2d565002c6933573917d0d2bfc0331acd8b8623228f5c10e857ac93fa927dbd3968169d12cce40745eede48d88b7fd5d5be1ec6ace220690f9514c7ac4c610141d790f6635ca61a83b6c6a900f12b604537d5a94620ea52615824799d3da22751baca2bcaa3fa17ec34ae3f89fec0fab5aa2dfa3ed553ea05bc8ae7672b991d4ada6d9b2c1a96ea5aafaeec39fd5b71617f0fa9b9ba435f03648e626b94d2ff7468353a52ef9115cbed71dbc1d0c3eb9f8a0237caa3de0fd18deae24d997b5818b210222230444ff5fe563d5a4f47df62495961a932585a2e1f01a626a536d935d4af49d9b862ec81a0281abc9c3d6b05548d534be8a6a1fcc933c1283c9e9b9a9e11fab7acc0a9c24db1e06dee52e23ef9db947ac7d0c6c915e01f2796324eadc218162ad124308d96fa96f18facfc959ccf34422e0f4c7ba0c0b4f521376f4a8f3fe5915a0263e3d34d733028d831f7eaba9b652d1b20bfd66325015190da2751f31f82938b48d856821c749595cdfcc064643eb90b41b9d6c067dfa47fa6c96a3ba14fa9591ba2a5db2466e328b745c45214807dde0890a8063264158a8aed8e50344afe501f7404e397c3efeffa3c21ba5877a1a0472b39d3d79e54d50921fcee9c87417b961454edabc0e9cc6573399bbfab05b2614036d6a0343693e622bd613f638a03d7a19c69347956378b8513fc1aa2a7285564602a6a4d2af0d70cf530e451855690b1d33fc18794d33231d6328eae3d9c583992594b438ba2147c7689f56009f4133c25cd41603da9a93e9e55cec95eba50b57c35212536c4002754bd9c6b4310adecd0d77252ce130d6a56c299eafe27a49faf0277721d1304823d9ed904d4c697fb86bdc6361cf38b503577fd50426d525c3a5eccd27dcc0987c362c415d9fd3cd6fac5752f28b203ef7e48b467e637a51b6f88ee193e0f770d207727fba5b4f9322a893b6e2e3dd4a21c55cee233ecbe7f60e0829c5669e95f57dd4d80bc49b594891f222a26b772336402171ae90c3574f7f85bac7709e98c60bdb54a81996ae217ce60d3a86da1583c9e0f72d38c0630cbe73223cd000f716cba5555505c846a1c719b8da09aebbd0751e013bccc1ac47b5330dff49aaa985a91ee480d887c88ed2dab7bb29289638c59761603cedbad646f64ef314f1d56d886a095c360089eb6ff81c4220c019902a2f5669bd1377a18254401ce0aa4edc3d4dc93bfeb743ff7595374c9769de505322a80136d3b390067e2033196bb98d77ae8d4c578d9ef8a2e11447977812c21ac339a85b2070909f3fd76b68c7aec54301093569b8d6069e6351a619a8c15afb4fb94d8f13cd294723aa5d4270b6e1f5413f27111d5408aeff05357ad81476029efc44bc0e644731b9a6f56297ea52cee83d76ed2e56d2b639da124269f7a5dd33f808150ce708ff5b08ae51ac0579d91c7d1cd13fc7400a9325d8324e7a4a5c4eceb115b13aa23607f62f743c24d4f349a3e380c7c12e3cf5f14c22173c4cbf987f210d5bf408492ad386b091836106abdc907946373e1c30105bcdf027aa1207ccc24beb1e4d9fb341be01b8d922bd3d03c6c857072674654f268364ec0fd23e3c78035c2715e7baa1096096451e049eeec904fc4970b41ff3899584cd91a82eb1f035e2cfe03c83e7461fa3c059e45a8d810d3c1706df5a2d4e609a800889f30c01b3cf8e3fa3a36b53eb2e4783b33c18c0ef39675e0379c4b2a58e77cec8dd04f5c9e6ed97b67765f6a2060d44fd4a87c82317335ce4ce6b353c2442d1987da5139f550053613331aca8dca6b0e79b93a7638085b55002624bf7f26046593b3d2a43ccf223a5d062de016137cc52e78d030927519b1f2ffc9831dc4b52cdaf1c3be91b95192317198152094c8413a2bd4687654f0548b43ed71d0667995a802db5d5b02f7204864ea2beb71eaa53c4a168e89adf7ed4e286d2fa5a51682f3520d6f3c0eeffdd05777fb3ba717d84442b2ecdefa9a1e97603648d27c236f6684f800b23444c8f6db8f312c7ed6dfb4934329d430eb79690a34f7beb001b1f226463ff98f4bbf221848286cc69f87d2d4f6eb5a54093b6b5b90f94952d1ee8ebc7d1bc3607b05172c6f8d7f18630a7485236d87357dd1f8eacaab692ee03a2a4bb1cfa9141267b0d72ce82f7a4e1eb98c4908fb93697f1c889ded4a7504ca77324176f6daeff72c6afea9e7d4771db053fa01fef9ff5e41d63df31e7e60cb6cff1bfcc66f16762dfac4ce85c1515692915a85c48e84b2a795b14252099de34ce9b978d1e32905de7cd12339185a54b1a74b2429bc9532b8ee4d2446aae10db333163f35b0886652ca52e94613cf1a280e3b908c79885c9f49d9690ea38de3d04733d0243ccd1b998680eb1666761f82036a5659fb3c7366fe281fade80ef78b9ee0c431ec84c5d48cc46f2d98a41c78e816c313ce4953f257b877f5fa2c3f7cfdf1aa6182567d41387ec5ddcbdc1212aac2502278ca6464d3f415706cd565c9e5886521898504178ca5105c80894732ceff3d0bf2cf351e23d902207208aabec434832b56d75dcb864fa8f1c02171d37205d1f7b254565f3c0aab954795ac24742d9f569d4a0df1e2476ff7473819f2271759cd02b8a139c484bb78f02ea8d0f84fd90695aca143431280142155a859267b5c71c6846d57ee83f9d2a051ed15f62ab1027ee1a46965a8141372b1202597114d1b05b64e8fdbc42a4914d6f61bd4634749ef8d72102759840288728e210f1876cf3b1dc8e1bc28f581befb79351a0d94b1bb5080cbedf3eae33750897d15e458cae073e3cbd5b2870f423601e09b955bdd65345c5d4dc1d80dabdccf77ad0cdbd8a3df074a0178d311cb26b6d47fdb9e574e8e51c59603e00e483a15a9290a730798558db5b0444dd0092788ef86617b279042218990ddaba4d87c7ac5d0a7704cb867ddc93c804e530c93b4e68daabd3d0821cf5b4a45578c9767e627647ee8c2d5ba34fa2bd71f0a7db9d78aba5da0dc474f01dd83cb5d48d3d7e2ae104152bd1843575dbbc2d29eb59ddae1153d00a08bbb6da2b896c4a8640064e14900fc3a4c79d59a2fdb86ad18621b03a11311d04587a1c4a92c3a413b4c8b5ac69656a9f4a8d203d5e828874a70b08a99eeee874d0ac03213040c2be180f1ac5b5cd2b847f1900606e41fc16983b6d77ae8ba2be0cfc278d7a886ddb7ce168b3e024e2dcea09a8122d89f5d0e80cc897b49ebcd5ac053edf7cf233582018384b780acefd7e1e03662dc88c7e8143fd74929921eddd3a7655435ba6555bed9ec754aac4e34a06e7a14375cb78ad55cc61ae00bb68c1d458e466c68a10f710f0956b75616b0605ece83da2f2214dfcbe8ae7ad5ec0c517877ced107f39e2e73bef4b2c7e99f95a447edb954e689ecf66f2b4913879c1caab883814222ea744a36afc0648102260e3859fd040ea2764f15f91231f3af9db4fc533d2b30913ffb072e8e318106880378ae6961134548dc28f3d788007f35ec4f36a519f3fac893f87c9cc4b25d4fe21fe7f833041e2966978c34acc4c7561e74f67d02dfa7365f582c2e22d31341784f255917fee069826fb751fa3ee1f8b6354cc2092613eb6b1e1cc42497d39e11a0d9807524f785a9a53222533a2ee302cf54aee11f966bd9118129beed07010bdcdbaa1ab0a15c51ea70c28ac3ebc957959326dd3c29f951bf96cb32d8d912360f0585900ac2580daddd83b737000a96cd9c0e42f18474423dbbdef3fef52fb3e8ac949b80f674fdb1e11216c76830ed706c1b036a9a6d75752fd0cbbbed274ed6829cd4fb4c11d846201162c03438260821501bc064a0f4b3ccbf63a413b1dacab5ffe1127600dc4aa02424b935074b0f399023e37575984019ff95319e1ea11940a6f2b8b7bab0b949c6262407f61949c16a4ea3d71c75aac42ca3e41cd1bbfa192577a5ad29fe7b1635224b98d730df869c849f34d2ccd2275ed69a4aa5c40f363e45eda892df7fb11b0c95f25ff9c46b3faeb29c275876e645ba0a6e65107e4fef97034605fb3d98c9d1d799060c89f37bda31a010642dc22a3cdf6bdada1ce8bbcede7ca85ac58c11c0d92e6544eefbad59c9e42c947138dc864ba873bb13e09e4ec242c8764c83cdc80a31bc76fb361925cbe987db68220383e3bf8cc439be83c84784ef23170be0ce92363562dc4dd240128251f8cd2c5809f7787d2110181f7694fa71aeed7b3e18a0180cb7d1f03026f3766420a46df839ddca64e5129428c6a315076130bb525502c967a5456a18514687c0b037b2a3321ff6d2320c4d876a4c28ccad81de4d6c86428e89f3dba6500eab9745880a3a2f76ca7aa6daa9cdc11abde75ea33b9cbb4583123f65dad98894b1f17097758d9ca13a195af8428c639c2e376b624f538a170709329172515e85973c01a7852a19531291532ddbd7143f85167e722ba9dcd65bd563db281b92f519e5c2a1185b9f4ecbaf3406eb63d4f4c6b180b4263186cc6382672131f0d4ba6177ff71d6f96b191c2007fe4e8feb59f2a3820b97a6d747e9a24e28fc9634af0ab74f583c0d3c09f6a93f81b4a8e46958eb9a7828c120b7b7682b0c56dc62ab0d29c0d1c98c80450999e87eed87e9c4b86fdb270ce5a0060fee3b952c11d8e5f6b40224bc19e3fd973c3664557209e539c84c797003e7c00f0052c89da95ac0250f79967f3ff1766edbe67a3d10a6188aac53a197118daeb9677dd0e974c054f068efc3a38a202a435011ad9cc2e54800e2d75a69300d6c428a4363a71d38041ec339a0c0cadf8943a1340024d0808d2b0a5005cfd4b8445dbbd354cc7309873149b336e97c568361364859baf5f43cd7ccdd0bd322289284849be0ed93b25b9b7dc3be902c802e1023b83fbffff3a2a5887bed4e40d9d9d8dd7985bcee9611d0ae4c809dede7fee29f43cb038b229e311e2b0e126803c80485e005d3d870f5183e7004a06ee7861e81ea5400a648213c0ea54eb4193c0a0a7ae10345f31cbab3543cc790001bc12177dd336add9103486b1a12f11b16488309c44e2eeeebec45475a8bbbb7b0adc1165fc901094431f294ab27e66b00b22924c2b58cfdebaeeee7e345475289b6194bc62b0c40053567ce012247e5ea4f6b76bfe151058501c99203e56702a616a5627ab9db62e3807f42c18a377aa56b9bb679d611dfaf6806dc78a60dbaace73774fb6a8719dc5c366cf9c72ebcb4aeb629d4c80be9d088b9a74a3e905a0e402102542a6931a21ad169a3c34f5e89bb6691d800fcf8850a22f864112693b694454aba020030c02969529473052480c9626b120d6b3bbbbfb86b7ddd06b3700db0dc176833027000a06c99a34b42c991e15923021605c5083bbc5fd0932f6c20f8bcb43b8e148a4932d9ad71089b1731bb7b7c67177777717d6b3bbbbbb6f3039dbd6dddd1dc56ef3fa63cc3fcafcc3dcf869def6ffbbbbbb6ff0aeffffffa05fc1d48093e6fc8e28732c7730d174ab81098608c0ffff4f08f703f02dfd903f667f550c7bdf97652dbae891aaa4e8665e3a1543270631ffccd25cd44a1e2d4df883aa686a6c35bf97d51054ab4409d9534406bdf8682c92599d1e78498f80473a99b408093833b357ac339bd6376dd35ad51baf22009cb80ad7b78e41fa90fda429cfb6d794b572c2be3bb7717b7f071849ae15967e69451a7c447256a2429b5ce9f953fa62f4e803a6efce4da74d672c6993a324948ade7825a9fd8b71cceaff7f074086d8ce6ddcdebcffa9d423efd4a68129ac0ca108c97418d61c8d4e889ca96e01d37cb560741137be28d9b2d4376dd3dae31f02b0644ab2250643ab288d052f888948609ca1f0aafa30f369f21a2ad64a5c70e0091815876508872fa2112522f6ce77f61b6d1ae76a2c3e901157392c63236758c4115292be699bd68e041c5151f4541dca66a809ac9169d357faa66d5a3b929aec69e6bdcb2c4820a694f9b9333d7cb2a2c82a66afe6042b6085876b66577bff36ffffdf30b10e6d668e1be7edc3d0fcbeff29d6a768e2d18438c39d4cc7f55d7bff36ffff2f39b10eed587ab25adfb44deb90ff4fa3dc77eaadc6c07a7677f77625cc75cfc109cc50ba964368214c6cf8134d124953c2cadd5da706eb500e9d1d56bbbbbb6f750d21b950d13c77ccf77d7de9d3458f4fe2ce6ddcde3fffffff424321a25051c828a4f45c6edbb66ddbbdc319995b4947007d43254c81b5501213e3039ad3773db10e0debe83a7b3bbc7aaabb7b075504b3174c19b01666364dfaa66d5aabab8d564fd876beeffb43c35c14f973bafff9ffdf84e9fe1a82b6583691264f7ae3d564b71a09719b256b6b561f2e1ed533f084392f487cdf9706075d34f996045dd42899e13dfc5350228c8c6b85b2175e1bcf44e24362148044d87e0c2b666a988cf07204637624666cb154d54c566115d0d513bcc1bb5588e2d7459337409c5be59b55447832fe953ff7d39214744628f5708a604c318d9c76b5f7ffff7fa451d5a16ced48432b009e060eeeef1dce39eeee4841ac438543e20652d14308081a69b1adbb3b8a2ea2bbbba325b10e455bb2684efa86e63cfbff577a621ddaa114c66aecb1731bb7b74a9241dcdddd31fb71f312b175e7366eef2f669168f82ae2eaa4c147ce9a4c8dcf05fe9a5159c166852d302caa70f3cecdc8d0927073dbb66ddbb66ddb5665a9e2a422a582a5d2a5328675be63dddd3d86eb3759835eb1654f7c222baeddfd667377f71243588726d9a576ba496dac5c17d63d4789310b8c6e06b8a61143cb3a9beeeeeeaa8b012ee2255b29afc9c173b636a4c7d2ce6ddcde2130385013c809f4040afbf4476f958a2b8d49e9d5de5f63188475e870881d26f56de4254adfb44d6bbdf1fa536bc99ddbb8bd7b1d58d130e9e0bc28655e281211b27799b74b71bbb9731bb7778df7a166d3ffa2144f5587b2ee03b6731bb7f7ffac90b1209887000d9209ca96488c4ce91cc99e205e90d87714c1a2c945774f77aa0b4e490c53dcdeb98ddbbb2541857c48af8b55c4cb8bdb1a40380831a5c365f204b3b5f12b5260a762eaea017559395b64ad3dde891325b8963ac7142a965f3e1d52fe570502563582092ba5056be7366e6fde8801269c230994c0e84189b20f4242ae9c2c0c038ac7f62d25d6a15b4c76aba9b79cb73da2e234719c384f9cb026ebd9ddddbded6074dd45925a8c2dc82b9813c4607262ce663e70e1ab9311365ec35c7fac677777676a3b98b4bbbb4fd58e4fa95d4af5b69e7b26a4a950430c4a39d1650574ffcb7d7777f7ffffff9e047088262fda4c89effb92a4685227e8fe375d8d2af7f54ddbb466657c8c6898bb678008621d2adc0031bca9383fb8aff91e45479b8c9c0fbf60aa01485383afb86b10f930024d7e9408d72767ee84effbb6fcffd7982e9a1461baff4c3739b5d50fb13e2900c521051a3a7a541134c404a4414c7cdf37054d832e8a7479d3a087307f6ce02180ac11a6039009b99e3d58f34a6d569e745e462f2e64e6bad4376dd3ba4a8196a8a227d5cbf3c0cfcc7cdf97277dba2812c6cbf36be7366e6fdf8e14ef97d65c7671a0b2c26d4e1ad2a2000a0d4c51cc4c0b67464d78eaa4b9d6dcc9545cf73585e6e30cc41717d20dd0ce6ddcde05ec34703b24f5c86d26221215898c444a2266fb39e7dce6d6ddddfdffff7fefbe8cb99130674c9b6e573c904b8f981f8b2c291a2b9a2dbd5794086492c029549902dff71571776f952e7a6c61cc7577feffffce6ddcde1e5613cd8c3466df072d5c44cd88ad78e049b14cda99d9b3697dd336addddd7b9eaa0e655777e7da4bf29424831e4047271b8e51b82e258151da02104d98852e7a1c3b13ba2d4fca7fcefcafc2fdbdc3eceb6b912529c0d79425200b151b11a66454889ddbb8bd0be0a5648ca4e0e1aa0398d7d61146a9b9845209aa3a94f59f916a08c3a6ec664608e5f1e5317656fb97136356faa66d5aef4b9f250821fdaa8d940d964d571b5596af8457c32be255f1ca68034b871c8e2ecdaebd7f9b73732737839a43faa60ed7a921ab05d40a6a09b5865ac49c734e1a4a4a262d939c92a492b05cbbde2b54eddbcfbef6b00e05068543cfe5b66ddbb6dd3b9cb75288d9e0a55534f195c2859886321d169f14392385cf8cabbbbb94ebffff4ba5aa43d9ffff8f9a61a9f1a8f0bcf0d4a8380ab29e5da74b674c07ad6d55dcdd89caba766b1411b733e8ecdcc6edfdff3ddbdb8c6ff24dbec937f926e7dcffeb9bb669edffff8fd71e20d75e85bdd09aeb8622d68b75680f186c3bb0843995f702e3eb4902433660c154c613238b61a985082305c2d2a01615dafcff4f74c23a548a8388956b2d4f29dd31ee287798b790ffa34cf306ef70ecb09edddd9db7c43ad4496a8387d5eea6c8ca12840298934543bbdafbffff071573903148a98398b76de5eeeefeffffcf02da72f6c333684830204d444d162e6fd26564d7b267dbce39e70f25d6a1cca6f3b9f111f6bb8c11257dd336ad599430f7414e60a820a821a824d412ca094aea77bbddedea2e5ea4514577577bee9e1e812829748f516ae75b3b5b417a0010b212c51f15cb09221e06db1adac242932c869e1a6bb20125a30b1727558b07fe4249a24af6c53a5b7e840131a30ad99ddbb8bdd51d9f3b033b9f7ae236eb823e50ec8583fc8873e58453458f49af93ed016a90509bee9e41fd79481608139062cfe7b54c85c3fdff5f233ab9fffaa66d5a9ba12f88aa0e55dddd05f0154f9eb8bd731bb77786d8faff9fb6d367e6786a9bd6376dd33ad81eb9882488ab98b2f6f2dfa51adbfc33dbb98ddb5be97eaba2495539ab75a8e0e444a5c3d2b2e889cb28009ea1ba74b68abc99d7737d001f934911db3d0994fb3bb7717b6b0089284e9c59ad003e01f196d9f1e5b547a9cffdb6be4f0e8ad4fb553d7618b3691ca41f0b684840421ead3118eaffffffffffff46a5c26cfaff6befffff1f8ebba8542c5faac8041800431a38040d8481284e049761031480091d4c50485e4c0c141a321c044443610000040380603018100000c180701810060693f3311a1b60225d48bb007f460bbc8c335c6466b4154565b464471169eb99a12bbd2cb476ff31f63d89cd9d90c7319c1a91d85a3a11d00273a1ca6ef73834a51f1efa1da1e2a2a0cb5bf19a0c946208c4df0f9221f7e786b92fc0e805b5d35295e8a11a7e55dbcb13aeb361c9f6af8106f7a1144990ffac9357fc5487352972b5d53590fb34b9c9741fa1ad9e83686747cc768ee45e386a7b2617adf0e2cdb27c5e7886a8bc6e75b20d57395644280e120d470460c33594433983f7648b9575cfb147bd3b5a4256bab73dd4ec2378da9d6a73931ab2143124770163b69888c11543795ba2a7fdce8513927fe36ca73beef4d32d4cbf941fcbc10e4b078a29b5deaf1baac2ed5fd83470ae53ebc8ad968968209f29f6410d2548dddf37346964bda5487db96fcf5bad3410210e23fc1aaf541f339463ffc2e785c1a6e8c4989e5afe0abda5c2590e8d40a043be1ae35b44445b9a8410071dbb5cb7adcbeab9e84659a07ebf69c68a9699916f9c0a6a5b2073dfd8c3ccf3821b03ab57a2356a30e84b1d98063b172034662565f6056790c48027fb7c9cb1095efc1322352da156436fc07d571e11197ce3ee2ac2e8fa40c3503957d4b7b4aa691a8f45184b3ece6e0447661b21b05a7b5d55330b9eddf5bbd87684078ec8fe280d72f6306661e77f1bef30a6a7232f704c8ca62569cfedd45c25faf6ed512a8240df29f28c9d581c20dad6fd3e54f1c5cabf1df810e0dc414fb709e3327ce28edcce4b3a97d0a9048c838e15028c67dc4e6f3b44fabf6844895c98c4f19b683a1968d6855b302461c6606a3c57d3105321fe022e643868cdbeac51d001df690e6473839c6d65adba51676bfd08641cac2ea6a02cdaba485ba0136b9c65f8b260f4834e3c2c9e980fc09305f7f950f0782c5206dceff97c61ec4d8db865e7c938d2f4e7d8dcaa3104ef37c9adb341e474c0072c1a780728b1d0a51e3fc1bcac09019b70f35e2b52c408b561a81060a45cac722e4d31448ed64385180702da6e457ebb6d98b00d09c15ba19e4eafcbe1bfb251b8372b4ba8f1b19858d189bc808260495151f86df2bc49b1c69fc5327e528518ae71c1c00ee0a24ac7ec84e2fe1810627091c1848e7e8edd1fbd7c93b76dda3bd54175f2a3ab3f7eda2d58285a3b4e5c4f0d19d4949bd1ec2230f8081c864b251924a820f1a007ad83748fee0b7ec70a5a0fec408083ee0e2f201f99d405ae16cd192273aee038427891b72d34ed28a892029b541ab456f716d8e4d4df95bd39e056e2e172e19c47a83b71ad8d9468ef882e2cc3e784d912e22c123d3404c7d31e8427f16bb6773c09d511544a9e6e90de15395ecafd027a7c12f9324971a5c8f99deb260004942950c8f441292e6d57124fe9d311b00650a816085b5272ce85497889899fe35bd0269a8f81b5f5a58b4638ac0a0bc3c5e987bc0e8be7ee0298a2c1ce0b7a3af960a8f831cf4192fae7470a53517a636787b4c45d81e5c04e29ca9ac031b2f1a63b7c7a3d22feb114679ef441d46bcbf906efb8fc4b33df68958868fef1c828dd64da2bdceabac5e4c0a7fe3c1897d2b72b074dd1ac2e8802a4d321a474276327c4cc02a0a1c709eb1a2d768b15fa3924ec5511b2b2efd06204c7e74b5e335389ef1146028e7d4799b16ef1c7e0cf1acb0519885dc7fc3d2a9c34235a18d5c22e1cd0f5f124810d7b1a5b7968e19bc14c422d6828eb2280a3d20de2cd6b9a5954a98dd268c7f624b20bb4a0f2d7f4378026c4c5f09d8262ecf184282a89836ddaca1605e9c5c7e9b2a2464de2f01ae6467ed088b5a77630a5bc36aa30b9495aa9a45af13e4d70c242278995ba59728a846eb3517cf8709eb0c5f082e007181ce3023290298b8c31dc75760796d3c3c6352e34ad4d0d4a9bd06add15aeb1cc1d050d3c28fced3808f1746a8ddf57ef64bd2a7cf47dc1034c5af05fc8589e3ea3a53064527de354170623cc8a25e50b2875c7ee08ddec50655393d6046ebb2e9cfa5551cc0421fda8fc11e1378ebeae28e39f53b86bf3439c4c69f1bf6b1bd77590f2fe915c900aceafc4e177c2c51d103ece852aa05f8023c211b242f7f575311291384648a79e2ff80bc630c9b3da6cc0b716f04145bea9406422a8b8058f91fed0e680e308250f4c13d79047675f031a530724c999516e6e887904341353af413a4f7aae7f4c6c8ec8c59ac5ef227368f663dfa4f938bf3fa58d3a59dfd626958f160fc6cf098a80712536e3db70254e63cd46f100c1cb44cf64e81f2935913aa87f4340e234535b1d0cda23ec008e68bf1d5981c96133f3885dbef64a69083f6611a686ed20da7ce9f9a100f1ec925021a8ac569876486113ea0064c60443c24a77d08fcd2097425410ac99f0e5881b6da292b8767e5396dcefa2cb1ad6502ea3af407c76d8521618b0039ca842b2836a0b1ad6033a81d3390757a1da34cdea03f9ae71052a4f301db0af967e289d79099b410af4448096b5aad58af48e736b67c321847760669ecaa4839a28217b2e00875ccedec490207f1b63ed8ed99ae0aaad9e4ac727a4f1d7da471cb6a5b194587ca25803b6358fe2d5520ce961aeecb4855f3becebe04ba121047da6d8e728993fa566fb870bcbcf0c149270c1ad6431bf569d31414a45c6d3baaa4f4da248329b4cb53dd885ed51dfe674a8fa316e3073ebbd22a3b8f4b0003cc3e3d2dd9bce1d17df3c17c812452d9ea412149d7f01db8395c5eb952b0624af1cc145f206b761ffcd312adb4dc3f767202fb0edb414b4f2fa04bcb72136ccdfbcbb91ab7ac39442717049309b3d6d6a2c0c1e9842f22892b1af2884c4848cb46111965c61110ae246e0762c06730b0ef04f9edeb30a9f64e082f76a4b14fbe3fbc87327a2eccc49444fd23964659a314e500ee08a23924d53087bd390424230093652251d7702503c1e6cc61554a168c39c3833d5ff7e9527ae6ef73a07108eaef325c35cb680927783e396cbacac6940192b93a0e3ec2fc4d63cf8163f49346a2d092f64ef9ce4a75a2c06f1c0aa933cfb46da64036acd92029d10e05a19a0f406eae8c4d176b613ffff071df56646223357257b90ac16ff051ea700fc66b5ced6619bd73c1b1fca9f4c700fc04788f3f5b805b3bf8ff6e0dad63c61044523374f0b44f247fa411095892dfe8b6d1af6325e7c4173a8e8ac86ed947783f8fb54df503a6bae6d3a5deb74fb408747aaa52e01b07b739f147c264993b97e44f6c59e1dc466c9a7cdd4a9b560dcb84698e19fc1a3420f078c4b1204e3463e7906edc2a41c5aeed839ccafb4fb98434684482f8374e6a76f9e92adb7b65ec52e02b382edf96dc0c46ec97258c5a3417210a37f9c48dabd2dc1b313f00c65f8c8f6bbaa1dc17f79ef28714e726a1a3c855c8c3d2fa87f3b73ce4b39bcc138bcea9177a98a7c8bf9a753fe4d14e52bb7cd872b6aa6f910e91075632e77485249fce0e56393fc19dd2f6a6541953b3e6a34d1e00c413a99a9e224fee0da6c3a014d36722f15f666395b8267f4192eb20e15d6431a2f245438fa5b548718f4a685c90c2b00bd737ad562c7f2559ed27259559a56be59bba61d5a68a00dc57a0fe93b6d26bba24c796b0dd422e8d528f2287065644e7eecbbbeb40b5ae4049a005943121a7124ae37026a08eafc11881417daae480f538d5bce51aef037c361bfac653c62b6274aa78656261880d6d3c6cc76ab5fc2561d268752b1b162500c7fc1b58ecc824c28ea9943a5aa0f3a324752ea9d11ce8b62a8e3e2b46cb6f7153cbe3356fce1a4860317102d315b0ee69f5798c694ff4a3c08266eb44244fe6b9f956b57bb47364eba976415112254b084ad24f7c15709357c35bb052d3d28ff231b79dee77f41c5cd02fdbbe6f5635b2c92497a57483268ab7c6fd9ff9e46da8a3e2f01569d9d6377ce2437b01a0ad61928432245fb5471407fbe9c72b9ba6744b4a2f205278335f39d3b06897d710d5fc5570fde0c50e3d81ba530648492054eaa9106665576469210b956187655546ef9c96088930c074a619f109fbee26663e39916d04a08c44684f68f23e8d2adeeb810a7a4406c668d5cc02207ba6cf853d792132f025e7e0b962c592b90bad91e2c03ec0a703373f534c6060c7702dc569fb5486f8c93d499aeae5d5b139899319b28b689f4e002ad7a197c70552d6162e09829aec9c23d63e54d1c46162ca542d5acd671c6c43a8d36f27ca6625b65d24774bb598722ee9e9730ebbe446ea9419422c4eae17e4412397f184c922fc1591bcaf0731ac29177b44dd1b8d805dd5061363d35a24693c71af798da75887e23dfbd7e5f66116089b92f2c21665eb26c6a072a3c3923c6fd873692cca612013bbdd9f568d168c441d645e21391f765c4145303b14764801b71b56a993183423b4f2c3ad308521fb9a5e510431e8df5e0990bf25171dc95cf08dcc8ece1c5e268aedf92c76562e847bf994ec6e3952d052d82445d5036cdd2a9c9e8a4ef5c55d79ed759a1aa4d5d8fe6297c8d91d6d85d899c0c8cacdaf19f2ae1ad8b2c40d4cb89903f249e792d25ac54126dedc8b08237eaae067f381442eba1af18b27f125dd8b44682ca8f604cda13d830fffbc203dda5dae0158b8afb94e15cefbef32c1db52a4e07657914995491ac3bff1151ebfc81e162f1f6765f047e31ab866bc060882ed7a07f263e6aba08c86ab09036775e5df9882dbe3b771eb93756b6fc8e0c70a85fee556ea63dfcd7df260834780ae3747f6c358ed097ca2b50f320fa686a46419c296a2e0c68d9d800858e2a822c283b7c55ee7d78ace683666ae6651f5269a27b11c494a040e7db027c7e12179c86355dea436e25ae475c4e3f4d5789e7006ce084668511f1fb74af68e1aab6afb6a8f00d70eccad0ac494b53775bdba1cd2e2a323234f37f82278c21b0893c993ce1248b6ec99979431558155986e0ae828f26f4784a6868d4fd32d1a10ca30f779e2c2d73f9a82de54752696f99b3363788f3bbc9d9e679f293cb03a0369011d1ad101a75a9810f76465225b81ce584712873f81a74faa91415919e4b5299fd51a87c9014e5ec7ecea8dc164522bedccb6d5513e1d518f6ec2017183d8834b22e308b10d29d67fe41f4a0619a759c654d4bf23642fb2de11b33e6d782dac356a49b0c6b057eca70a12884fa851913dbc29b5905c5d27e34c41b42014a3fe9c201240e8e249fb56f80cdd23ceb63b5a1aa69cca15b3a44620731b926a717d1355c84724378832b93c687a9614275a2ed0290de6901317a0164f9d60b934c2b80ad871f315cefd954066b73f0fec33b4ded139788f4a3c7f07cde01aa7a44542c7ded8b12d98bb5714719a186d1431ba07a2ed4da1777f784f193c57e087e12c480739f8f4274b5d6c29a6cf9f5063ea69550b741c3bf71082ca7b7b43a77a82e4b552e3808680835ed8c5e909b4abd9a18d9cdb79bc74c566f49ff6f4d206679ee1d43b8547f5cdc3fa266c4c341bca265857b1929a1ad99b75688926cc8658f5ae6bd0d103605244ba67aff3c8189840281ed3622d14c6bcc418d44942f25ba8b2e744779b28625148e1d1e7ee6c3040277f65194ed41b9a5de05bb0de663a3332863ca96ebc2fa6eaeb776114a2eeee86cc50a242fc0840c87564d92b10a96036fd48497ca0ed2b29b0a19eea2bff6c324c03f5f7dd7405f935c654d5d8c094e5ac757ab9ab850ce2e33ab5cb8ba9bfd59427f3a00ce67e7894ccccaa6621480b763ad29cae2a2423026e548e93077d51767ec716a935b580e5dc1485c5567024346c9fe7942a7b9339925b5b6dec6cd784c41a82cf921cb58c7a8cfa1e33108f20fb5eee47db41e90c14cbdbc0f6f9f01617b8b65f31669a92d047d1a68861096c2c3de95cce055971f7f33c4208c953ff9cc56fce5ac32628f8bc06c660ac3bc129e7e138865c0f17a3165697d8cc0594a3606f65022037fbcd3fef494e63dcdfd4049673d5f056ba02a323439efa343103e70ef7a1e1d6d80ea2544e6b06201efeb631cdaf9616b25be1d868d86293725fd29b9cc8cc7fc1a56d29af3b52ee129a7cd2ec3ccab9fa1c2582a3a4f77ad9c47e782729856fda4ea24ecc51440377222218875201c85acfbca75bd259af9ccebacf3ed51014758d29f8a306a098304ac528a43a90544ff396bfc8f4d3c3b8d52487887631900c269dd86496974f33c84d2cbbe23ee358b906232035933108303ed9ee5b8a48a5b76d0450f4631d6fcda3ee994cb5f757cb809381018954ad118b4bd8d44f647c9d29d453981f7bcb6d6d06d08adc163e82ebe9a75c239d5cb29463bbfa3a3b1491049e03bb0f97c6066e025678af232bdd3f46c7814e6b22be1e62380351d63f395f5dac4b789513c075e0bb6bda20a855505c323807e03b849ec5ab48e9690244d3cf7bf79915eb3dfd65c97fb1d623fb9bfc3e59a14d30c435cce00fcdce8517f6896f3fc66d68aedad7b3c0e81173eb8c5f4505d51c6dda72700dd4962e1c71502396f8384159ac4838d857f77ddd5254ae5c40034272bea5c11cf2261b50c99c5467a71f024d86591d47fe08b0a9a2ebdf413c4610b6bb652c8eff5331c004943dd2212656bb2127ef1306f28b1bfd92ca17f69cb1f39b124632d0cc708556674bd2127af2633f8e377c2e9364d4de0a2e9cbbc21d52c2101b22513bbcda5f04c3cdd17497be586c65c27108b0caa7400b370dfa13b87ca9733491967000914c7b21e2767dd2e57691065e4717ad9bcb80e1dc13e78fd03cc2b82e17fa50f9816b32b1c03afa737633d95348a27671de4686369303d12a44998f168986d4a51935c7342e2f06d4741dce067f4a6942fc6511bc4c927453214344beb4f24e4282fb231b40a45600a32f67ec9478c3223d9b45041f998302838d91f87c8463029a140be38ecd024548b41ccc4eef0914a7349a11943518fc71d85ee4293f8497114aaeda982922eca5a4fc904f40c74f5f68951a06537373774cb907e0618f6fa21ad7aca2b7a5b5ca77fc37da56e68a9b9a5e04ea66739c4361031705c9f79f5048c836b803412c50a5cff696ef324b41dcd9cfa1e1079a09edadbe1f2b5fa3b22d6f74943473c250686c1a6f4ca970b9401614494443b4112fa6a88256d42e53ad1addd3bfb70b808fc062eeaaac22fd3f07d68dafd329e6c9ab876226a10ffa78f1e8a89ad546b84162ea172faff5e0607d4addfd943cb38a00b695761a8c9534916f10430d158555eccccc05fcb02289f32f36040e7dd13699d95520bdb9d356661b3db0c363deab0bac017441f3ab010215bda966b3cd0db158b75df585de6fa6b0d1d62953262b60923d66744ab6dda12210434fde85c4a16df99e5d22064d1b16140874e67474cd22256a17ea4743b7007965b86893d2060213f5dd231f77eaf7f97143bd335baa05b14d04a354f17d334411c823a4a461ab9dd979d6630b8ef4ce32eacb88e585c51dbd2d3e623022b0755103c0a27042ce24a18b64c847664bc15fab1467262d7f82da92a63fd60f52e3e978dd58ce4072a5dd2da636edeb67aa6648728e0e40fb6306783cde4377b37d354ed4cd692315ea159ffe7c9d1ebf803c64469e6d2da100463e094571eda2e33813572f7fe8404891e6c0dace225e4d7fce36549a71237fc1b0361a992be2603006eb721c7b2a74fb32c5138ca83c9a29f6005b8477dd3c5e35139a3afd2384d01b1201c2d0cf6bd07ee4849c84c6c4050f947798758f115ea5ccf62b10274cdb5f01e55e2fd004e79f36aac8f102a612c744529b9171b0b4c330c3b1d07c3198112d178086375961be363d82ae3d41ac9c5b6c3574bab1b7154fe18c39cd0d3a4c31c468eae45f24a13652f8bc66192d9cc078dab9e017acd8e6743344c936a2bf172da47ff99c63ec4779455d6a7f551be6d84d4d7287df3f365ce2d7171e354e1f4facce89b272f693951394003be555eb83a8badfdf7684ee0b7f647bba157a89116b42292c391959460d32c858de06a94de3dfe180d6d7716dc7db3456fa889682333c758cb364c4888dca54e4705ad8128c43254bb7457af7c4117a6b69de626a83b0d735435485f018cbf8ec547ca9792aa86e6f6c9261587a419dccf908a1f3de6a664b338308c580cc1cce58a3fcdb068dc4bcd822a8fb294240f30a3e17b176b3aaa5309094545194a30bdbacabcd7f34e1ebb27fd54a58e8c561c9dd0f54d25823c81516321eb4b2c4dc2a3e72fdab4ed49f6d170a7eb805be699fc40f8dd638ee254bfa358ae105ffb0f5a344a67fedcbe4b3d7e8273547c99f4ca255b0f75bbc6749137e97e250e94938fe812d21541d7923bc99e9931111269b43a61b531a0157beeb6b5a610e7427d4d2010e35a0f0886f12d8897042f68bde487d3f82f006086e569b033ce7c7c0869b07f44cf34da36686e393c16f02ca58ebb814dc5369702584af2e47641fcd20ac2cfa81c1da3c44df0e2462f68d9b3d88cfadad330e75dc2a5e67a3b200d4bf9cb6d40b125368106a9b273c12302c9a2eea39abb8da85603eb9614d933b814882341b21263ce2c14712256a9c88a2136d48d42a886c6f95ad4ce2b769e8e296f0ba9a8dc69e5cf9b158bb04eae415ba4379f53d960886eaf4fbca618c327fd740e02d9078c20f1667f88912aecf5dc26718fa4276802f128b8c0a812bb22368be9463d1702b689fe46fa33582104c32ce792a1d7c7027c72e89adc68f6e79613588c5b21de3ec3890652e76bd1195339d17fd2c7f55931ca6d6f4cf36a6da12732766413f343b825b7eaebbe7e944e166752c5642cd731e5c765622954df9086139440efbc14a1c1a4ca5b6a8074949eaeb9921c14d8a3e66a424fbd8ae7d5641567970097e941bc6fb52c854fd3043ab3f137bce27694d34e3725c8f2f3d28656b62e68aae35f838e4262f48bdaccc5602a9f408742722e8962d1a60c432cccbeaaf9b28d422e93f159331ce47b4d3a48ccce3f50e7003ef9404a999e52c0b8837c0246d01744b85b47eb4bacf532a2eb68f6e333d4146d3e2135519c354e44a115b941eaa57322f5495e626b3494e53bd7bca43de753f4959fa7caa20716536c44eb4c1dbdb76517df03d457f347a5bd0b2d3dd1f1338a254da1477dda7dab4a67689ad181e4fdb51d843ca2a42880d4aa3eeaf48f90ce6d8e8182915f035a26908bb561508aece85f182d1abd584bb13c858af8c1c32fa14dd0d4fee7a5a8703ddfd7a672b95651aa70134d623338fccdbd3f51a5eb6f764991128191c90746524f7eeb56f1d695453026e20e2c60b2c8bf7f0b11bd8b42309d131267ecc7a975f55d9ec430dc721510a38cbb2a00b94a3af705c097f26e7c4304c70dbdbb8b9087b6259427ae47b1fb205c4e3e4932e9bdb9a3dbad2617646a82ba8af39a3a184206d1cd88833eb9ef4ee34a68f2edaf6782511e017638c32187faf93492e7b6e01b3063e70c3e1f50de7c8bba0f6a15ce904431b080968f69e10c5e9315738ae030a7e974303b99787d1863fea97c732373ca51b4b1c36fc5503403a5f5e5542a2342e097fe7fd8fced48b2b8402798ee2b48001ccbda8bcebaad5585669aed4b498e6a6490da28bddaaded2b588294c30e5d27874d6959c1f6813f2abbed091ac1812a9c78e40eb5178692155b5c08a149133c4d03ea48fe74592054ba4a070d9fea5354d55a7d86fa9d6e743ec04eecca6b062288e01bdd6810363e1d75ada643f41258c7eb45bfe3cb01c0404c003010683a4a34b68b4bf5d1ee61258feab8b578df351da9497513b17b6fb2e5de52a624536b0716071b0749add3dddd110acfa46e0fe7184e6932f56cead837da4b688c68bb8202c11584134dcb05e5e582e27a7224b53961547a0e67da43bae585601fee0c08a2093c84d06f14bfae2753bea9d4302625c526bc3f06c5b0c0203f41e2392a81b16d8ef48db121e4e0a85a9575a9e1aa480927994828520a6da9d4353869dfe6c067c33a5c2bf5b831320b1ef6effe662f44be83a12ae73d0c4b4adf6521f15b763f7271ec8e6efa42e437281d5c1c3c74b6670251a7bd974975836f300477ec4e3bcd96caf4eddc764776a279b40959cf7c81e8a3a209d13f6d77a2f4dda5339b3ba767eceb65fe9bed66ce9bb1532f4883363822d435b239c71851bf35c71ae5ddc92437b1df320edb28976d1a47fb3714a76d1b87e2b8ad53a17d511acd36e24081bbb34e5b67ae87285f94371de5024acbbc497ba4dcd6d14137333333373703b1ad6743536d6a646c8c7bce293d7f8dc6f88573ce89c9754cdafcb099dc2d846577638c2da758a5c531250d176ce6fcf53c30e9eab0dbece27840c639b1c9c36a972636a5e61a1960b08c0193c4874e050c13e90273e4a5fc40a2d6d1362d5f5e28d717a7a226077fbe34e580365c505e5ebe500c0b15642193831aa8503a9ad23118c0045ab69812250b235e3674cb0693368694524aed88173b78a9491db8ca0d5fe4804d97920c99745111f3f4d745e50b174694846e20a34910cabc645006004a5a4a29a9bc94524a69e5d3240e3d4cf1e249b3416af306894d8d0a10369a5f972b063f7f5d2e25ad0bab088c295e8cd1c310af222440c96a5555ee39a08d9803dad8c088a9a16abfae265e966affba9a68f1a1c750e7afab49175410ae26574c9903da20a189d24bb751491a9ad480f31cd5d1734a3ef415b6c4084f95254934f460c316621081daa870401e569c9452caf052d6b061c50f4c689aa66935316c112386a120235f14b1650745ba68eac264acc061c98a18603307b461238a2c2a1a5168f995e728f124fcbaa230fad0579226a5bcdc5005cc114ab872184201948c39aa81115b8c94896285100650c69532420082176348312508043022a524619d681882a18099a4605b2f4518020c92e081d11141f0e2a9c8c88ad017a22fa880c1cd8e2b4e961842073165e80084295e34b1610865305164a90b4bfe00a7071b18c5e084183192680289c53e78f6aa62e7294c32d87278c2889452da38e1c18992976ec37f5d4d86f0a85f57133278a09152cf8641579827ee4bad62b8a81b0e5c61a8708549728599011357981d362aae30457eb0e150bb2e3620d411ac4025551abfae2d9eb052bb5fd71646bc742501866b8b27dfbfae2d9c7c589d896d73c2ac6aa9fdaba5ceaaa5c6aaa572d5522507eec71cda258d25e2fb53233bfc8c30a8cef30b7dba1e36ba1fd04bf51f7a423bee82c4a6c141edfe429f6730fb328120026f7cc8cd6bf74c47513aa5a3b676944b6fba07846699461980494fc1943cb2d9d90119470f77a763b3654b1878cc8a8cbaae208e3e540551f42155e1809aefa3bc62d41332e2c3d23ee9439485fa683e73cd1bf2615147794246288bfa900f4bf36dc8bb6ca79e0ca2fa19c4900a07b491bd09528f791624fbf9b95079f0fb39b9994e64955829684f8194ae812e53867d7abcd9cf87f4f9616059f2eb06635b1e6e1ed92c7f85c4e71e5ba6cc6f7c666620ee1181df8f088e9a6ff7605e7be6f1c0bcb5cec1ed39d13eb9e190c77c9dba00c48f7d2ff4afd7bce491cd3262182624be740cc3b0e901f13b91fdf94c525f755d4c9edec5e4e8d9f75fbb02b7582e26452e26442ea3a79bccfb26fb5460f537e4c3ab06a5b31afb1d52b1da31efdfa1aa42f6fbbdd09a017e3f272968cfc1b2cb94e1cdc11a8800abbf6d9d65703b8b2b4ae69b966d5176fb349a124c1d0d0518b7ad20b52fee0973051be0becd37b00e0022d420fb447dc57c102b88c5d23f21cdabd0e6db3a28000ca106d9a707eac77c837eaa10b4a124d6f560c063edb38bf202633dbb5b7633f47b81833a93738a9b385d2e31b7c7a5255298b999dbb7ae80d89a48f4028985f9742391158503994fff6e12f0621149c08b456996aa776b1ffee05c4b983cf8eb02828c0b08307e5d5c20d9f975fd8083af8b23fe2aa9880829784862cb1856fb0fee235724755d3f5cf1d297a328d9b67ba260eefb2bc813a45c21b65aad16fde2ea48898267fa1d454e29bd28b39b52ca0d0c4509e2f32e801fc4a29a07896584a81b8912c4e7815a015e18a403634d6f5f7a21c330bb1e353f2dd0df8e75d78e512fca0b9c75379d33d9f702ffc4b04f622d7fd8a86f95a49f4c397313e2174aa6df2ed85980889c3c5830bd99aa1c7d7bd077a723e8dbfb0bf99b66bed18c7a8645efae02f38b3650d99679640cd265c8b43e4897291377674ef656ebb32f2e3857f002f390add6c74f08e640f48500d59f1ed784c91ebfbd5dca17300ecb3cfb82f407619197baa42b495c92b4480a53830fda0e8c6ca81edbb58485942fa80ccbb439bb286a9da54d029151abd5720125fab592840c11c526866118a6b95a4a1ec360b0648474583246107ef032e6b130ec544488c716104674f9f003158a4d8c5e216a9da523f40f0d4fdec41619142d2886a02082a2687a966559e6c36755556d6ac5b0225602927972949c9ee5d10d9670f9d0b30c9bd273401b4252a86855559b5a2546b76aa3fdba948e7c587d32d1aa3ce84147460d6dba57d7eac6e8c690cd5f74b126482675fa9c52dbb32a757ee13649e92c6677a4cbf6a49192ca2eb32cc3329ad18c6659967db2481acd5c514359248bba47b2e40d27e5d14b8c683ed96088b2fe45faa2e2c451c54c5b54887e3ddca5c89dc3addba876b9653f81e5e71756f0b7f2c78a1dbbd90929d81727a0d0ac8b7339d1456c8ebd2f06236fef6eef723bf3e4c99399f9db8edbbbeb13a6ae2351d7afa87c54d7bb1eea0d8d0ea66e4e0c8113ad8f31726143816dd9294cebd9b50328cf1f10ff09540fa4fae842949416474c61a9ebdbeca2464f5da9de6da0bf1b7679b302911bd6fc6ef8f3c10a6205b1b28f2936f1935214d31a22523a424a526252b50e7f345c28b5640f58f7c365ec0e7bd864ac095cc473f7d2a825a6546575d8b9a908cc0766d43afc335e6a288ddc08fc10337237525569443f7ebd3e266a7b8811f19cc14165f6e8430d31277e550619fb22199b81165f31f29ccc2846318ab9f9a35a9dc1a2fa1711e3671775fb38df3c88d579102bfaaa5bed4ef4f88a4fdc8ad1e8082949e9233b7d64311f5ffc34f4b12895a5ce5c5143fa9b97a2a26edf0df71131a18b95166bf32056108b3df6e6754054160aa926ab150a1f35d4a6793ab647f95639c286df4ec7f637d3d997698a57398391e7874393e555c489ef2ffacc0d2af37480f4e992729579b45903893ae75785500f0243eb51ae494f08507dd9fdccd9edc83c1396c11a4b35945f51ccf560db9c1b3e37506072f4b17932cfc993b9e5469b366ddacdcd5e7f91c90785cc9829495390a2d1bcb29286070d5c7e997890f2f30b57ef62a20926a4f4512da3ae6b09321f765112a22e629e752d91e4a3b792d8470d6506358c46dd03763e542140f59b8718ac09d143b009264d289932254ac1d8c3302ccb7444dad15a77c13082dde9e074b4f41c3cdb658d2eb5bfe9399abd7dcc67f743bf9b1ed3d9d9e7c731e8dde998cef3c3e12fa757333ac068780c91e97aa899cf80a972d63067c7d7f3367d8381e8dbd90be3ab8b76277aa7a486d1a8a8a57934ba40b3b46f570cf6f723be4a18e26d343c8e2861d0d5c4ebc368f4b18b22528cae269844291fbd8b28f6eacca9cf30e89ffeb0671ee605f13228fb03c2e086ab8fad84c155f7c41f5627ba104b7c5c4526a336ea19a71a067dec78a8db4836483057220953a2a8462a2941c50c91126350aee2c4cf9ad8dbbb5b81bfd609877cd77c0c22808f2b10f31d0e41fa1f59d326e697b65a343c507bfced7aa8bebf2f768c9bbd88588adb2a94f04102c060c660ce8f8f22a93265ca1481654394d44d1caa33283787411aa2229ca26fd7433e7dba5833ed0ee6ce60671485cc4e0d683e3f164cd7be1c7c036c1de972be740921f4d2e3d06cadeb28cc4b9f709d7ebf0871530e124988264f33cc73304f9803fa609ef0060acc13810f77e9a5d03fe0439c0f7d5e625efbf4d83d07bc8123dda8064bf4ee67e348ab2cf7761329c9cc719275e456a95c655c62b72ccbb2e99d61986318867d2186c5cc0b390c5b220aca5833229e7cb76f29246a749b248a7c1be0db51dd4f53e6498199190521869620a1450ea434c1457806330d4b9e9999190928df2e291257bedd86072d2e295ed4f876dafd34187568015143123dd021072dc39125d911413cbb9623c6f83c3bb6557434e820ca98c508323a443cbbac5cf70c56bea5777777b7cb08a26767d4d014323830b2238e304d31e254e50609e46094650709103db990b840228116bc6c543892064c5413a38db8a8210c09450d4d6c488cc678150d946c5438ae20c478f9eb4a020ca7a6a1295953cea6458dddfb448479427008838b433abbcef6ece0063c7b7966a32a7f7fa46077d877748f0aa20e3be7e0a586e78e32f01852326477587e405a6090999999a5f8528deafcf93173a5621e356fe721e612b2136b3197a616bc2cec8b5f0b3df400db433f46f229f9f610c767ede102bebd1ad57e21f2431efafe6961775a4c0c26d30ea9c4201383d3677373734f2f1229112d2561b0bd88884125a5b8d4c2163b4ac4adb43b2d250989c154911a4622249ec66ca881176098660ba78cd41d2d84477dcce5e723f3b8c4dd4ee3458d4c0cb6cb2f2a31d81ef250546ad7b6272ea5ffe57700b2b71e984708ca39a76ec45951fa4b87f9a4efbce6bcb82644df3c57f52d3a207e2fd0afdc03287ee63f3a4dd3344d437d1a55c50ee2ee1c6c9b6382b9ed4ebbb626344bf909910e445fdb9dfe613781f702bf34417c1eb2d5d2166c6f9f3dfa650cd22f3fba3b7dc363bef4f93fbf190b5711423af6a56f0e33f8c3607bbbb4c1b6399a5cb994524620361ad4c80282b5ecee55eafe646b4ed6267da338d29756a9a1bf6b58d4964d3de594435aa77d2275ad1ac62f4dbb63440d572947d434a21ac6a6a421dd13370e3d1119a20de15239259a6153d20c9b72ca293328358c4d2fc43d7129065d180113850f2d3247599a06d5abd56ad160448c6eae6a38786e6a3d3b3539dd7c53195a54a1e5390bd79627af7ad6b2e4d987468d235962b65268f1edd85661636487387db230f976496f08e207658cc4f8608cab8d2c938f0f668ebfda37b05cf976aeb3ecf0ddbe452a9aa5c148ea091554ba5cd1210057a4d800cb0ddb2bd5d0c8b104adfd5595332d5176d560c9f36b8a17fc17cfee39ccb3cf5314e19977c6a015a50492ac889206450ed811e58264fec4c0947de941166152104106fd33c3d364dac14818362a19907e6448629dfd9056a61e92fc083119f1829f22435e9c6c543834609aa9e1862447434009338413ae21aef8d07f552486dff670b56a5ef1184a9243ed7ab41766ca20f3159cb10f611e21eed92cbeb0af40f4fc92a2685d521409e0c3659191595720ba00665c01c960e661fcec8b99f496b2c3989c988872d0b1c3a44fcf85b91d8fe8f443e1e7e4326cb2185e7289ed62125b892373a48d94986c0ecb322c6e1832d32486a293fac47c17fb309b4afb892dd5458d55c69591e59c2d838d8dcde2e0b7e13caaa2474f79a90b4edfe9b139599b2e387f027d63b18b907229875df2527b7ab7d7d4baa02eb8db1cb5a0bdbb91599873c608343f7adcdde5311bbba02e09a9dd9aaaadd3d505b55d82deac9648e49c3e59a0fe32cbbe70cea640b3bb2511765725bb720c52398bb86ec3d2f9b679646ddd9639d76d996318e5b62c433986722b4f508a4279e8b35a9f2aaf658e510cc3be0582c61912b193ce3f925be89ecdd781740fe7280f7d2adb705f88f35d7316874639c039ea83e146039185f2c8427d431c8bf321c91242b911ca8aab00ea9b1759dcad2059dc67a4488a85726651cc23eadb5500e5aff29a5b79e231aff29917997dbac7c767b502417795aab7cad3202a8fade4b81d67a59c0db11181210abb9434547d644a575d597e41c60d5a2c9641518bd545557da4dfc473290aa21ffae840b1b5a552f0a464e6f639e7ccbc54179a9939f3ad665f08e43117da65e6409e7b4a6f7a0331183f20f9d837040852bde9c1ee57aaf75b4568ccb7db50c30502c43c4388ac28ad2a953b08ae56ab21622aed1ea0d7ab22098178d917cd13e62fac7163e2a6ed18d536c9c9c53cce40a5437612f96e23b6df95524a29a56c669eec5106e59c524a3228215c495b2af6eb721df161e5a6700d31e5ba9e44179118b1a394c2c767716464ec4ef45893626f652f1b1df8e4e81ddbb462f6b54fb115877ca2513c8a483149a9c949aa16a1d2b8cfc7cee3e298711acfc1130a1a9fb129f9ac4f3bdbd0f090fefa0ca7e1d978ebb3ab5f5f9d755943e3eba57c464dcd07843d8d73a783c669bc983d3118535ef6f20c1083ba23049aef64c859ecebd1516008f0ba1b206e06b8598f344dece1b04e9c410d9969780c85f1ecc53cdd27c730189d260772bada31f96d5bcbe9a9e9c52446e94b4b6988a9c849c999767d3c2f744a6bdd2dae8705e9a74104d0a930bf50f3cdb7efc6515e90761d8d01614f3f27fb65af6c0cebc4f8345464af3fb2c4a7fbcd9ae24421c9476f01887b56cb97149044a1f80589c96f4d607c949dbd9827b4c9c6304fcff0f1667d7c80cc0cfd3a4b43e2b09aa2ede50f5555716ca4af16872dfa6fbbdb1b9d73301106dbc7af7e3273d0ef8f1511065bc7b639987dfafc825ef3ad8428342ba1881ac697538faf9e73cbba9f49998b502a3be5ba1f27db763f32eb32b0accd87a8dddcbe183bf6e8c525069b881aee13a651afc72742b19113917c0b7d5715e8abf985a0fc92be9d7d861009a232a97b139dbe0d83219591dbc1b639dbeefad649a9eb5a22b302f3b80fda9479e63e59e6e00acb321b996fbb9b7959c6be3b99774fb2ce5204121be1f889eed43ad3297f4fddddddfd45290caa544f4fdd138d589de973faf41a1045a4dd99461051a7d3117b189fe2537c7a8a43d1697a08fed1d4be2cf384448a7df16977a66b55d41947d490b21185b24d1b0cce39e7d640677526b83bd3a5b3f00304b135c6c70a4d54e560f77ca00b70b2b03bd3e3ffb26943355280f32637e79c4d89a8ddbe69393da7e654db77b80fe6f1b183418c8bda4e0106311fcc83b90f0631e76ed5a0df1ded8379760705ba1fce786c7cc59cc8ed689d88247671f322120631df4131251f9fd52a0441fa85eed917aa5418e639dcb32ccc55388eb94ff72ccbc663a1ca732d91798e796a6cd284b06d0e73390c4e27282f01cbc0b25011f5c59ce9bd4abf01e6992b28fd7420334c8e1418dcd9dbd3e70453bbf8e9d9e76377a63fa9ec2d198653aa42fac1a044428a48dd2382a49731306d33a04491483212750f0bab135d0c7d3d11818079a44b6741aba27ec15cdbe648a9f3ab23b51d7c62cfb2e4929897ee433aed171a7443b8969c5eba7743d430475b9aad91d33d393ad3e12f3fda1da5bcc160af186cffa14adf2f9f02f36c1460a07c3b0bddb3ace5f2ed2558a9eca14b2868ddf2dd735c21beada842a68b152bba40f104fc4ec08bceb0526ad2497bc71d32cfdc4c0244709a5966962c3166995966962c185df29931a3c6866d80e08dd5aaa6c686461c1ac18810b0905824162cdd58241689058b9c554a508212d01063cea6d9d441c042629158b07463915824162c5129525444c2e21131861149caee34143a183644a31fc684c4269629b1c0229689833a513e3366d4d8b00d10bcb15ad5d4d8d088382a159649022c134b1c01896d73426e6751c76db1a8757e9c44a2a3d6895c1546f3884c8d9e8323d23cda388dc89027a1562b22e9e210d77940ddccb62c73cbd2b5b062287dea54a81f91acac0eea05ade3417bf4d32feecee414971634d9b03db368ce17bc36a40d6947f4b538a6b3d4868aa6124a863eadd0542bcd8c59c43c9a43cc8d48514a44a200d28e19dc760f4645eb797474d469515155f8cc985163c33640f0c66a5553634323e2a85439ee364c44a5a144445a1d7624b6873e4df9795459a85cc4be8964c84a0db5a1210d09f74c28f36804f3a8765bd7714d349ed8babb6777cb962d656f9518bd65efea88d213ee5df10e713b1e59486597d270a0bcb954126473727163772867d9a1bcfba2721dcaeb8692d29f5948f7a339ed50de955119cb32546f43ceeabc2609f7749db775eced9930e8b34d725cc665bbbb7277e52ee79917fee0382f3eaaa6552354a3715e4d8b41a21a21d661a29a560d370ae5e940755f541fd46bca8bbfa166bcc63011b56bd570339add663463cc8c578d109fc09ea21fd6b46a5a3544ad67af51c23c9913d524611eced96b8a6ad634e335e3a579f2eb8c373db3e66d5f3d27a9548d66437fa3c1655f3d94173d8975950446692a2e7ef59c6c9eaa297af699ae26099fc0de753ff2ab212253c3cda8868809f3600ea5763a502fbb326ab819a980f3f2db8cc294d177b619a9105f3ac79bc669f1f726dbc5a66c8d6e1c2bce4ce61ef72500e0a9665a5e48e6389f7dbb3bedd1eb293faa65349898d154a6629a369f1aa58452437c42d7aaa9969612c2b0d41083a9d68c31668c81a130f619632c0ea3eec95c1a15b50ecf9b18b26c358dd28cc3bc88426998f4f5288739d9bc3d9a31e1138ef80476b26d5d336190a56c97de8fac293bca8c184cb5362223e6214ac23c982b49b516c74e89d9a8bad9df9e93cda927b332354cb5b8eec7c996d10d531cd7fda076b50e5bcc0f39443b0cb4976ab553c68475f8cb8c1864c751aa1b11a33477c23ceca3978551b1ae5517f5481ff6abbff07c7d7bfb1b51aab565a9d6971926a2fe885a1bd146d47198a7cd7098477f7a290ef3b29f9e879a584635d4363343002ed84af0cdc9e15c73f6341cd77ed850d636e7405f52fda67afb082e696a4c4d39a1720b24aff3ebd2c197df683890eea9b13aebebaa75badba97c34a5998a92a0a224acd7f0548dd5320dc3b039b12cfb280935bc1b2b06a5d3f0c21f287cf42dc16b23eacd322869eb484ff98cd32c49faa93cf3526050aadca609db2ca99541cc298318095e3dfe08de0d093e82d3f06df332d73c1ace79e12ab9c0cedecca2da2c3d331106a503910be4867a83411630df5cfa063ac03c9c97f972d69d6fdd77a3a3db3ce8352f94210b5a0ddf4ec78f0f39e8d9fbf1280f687e8d6f01395ee591e009f9a9de6304a73163e3d578a12a8b495e3aaddea6d8673c05de56ddb302eb4897f206f72c8be68baaa15e50c37d819f4f51c37dc524ae7d7128741d34fd72f9758121f3dbb66dd7835d73ce738181743f9b77ae79dce61df785ec2fc4e77cdd79d3985dd334cd993d2006e510c99cec7e2a0f15257d0811f6d88b490cb26b5e07c93ec33222e60983f8260342bf9fcca503310fe612937304a611c605060ca63a9d37e9ddddddbe5e9095eb3b1aacbd5d60d6581b60ae7d21a5fc852a30663456ea0df529a5d43cc99ced609ed960f7f0581df62a9ec180ddb32cb963771864f2f2f20b7d9e5bdd548b5086b2c1d6017576a70fb0009a2d4d50dcd0758ef36ef3056d70f754665ad2714b688c48d668183a5854ffbef285ab88491ec418b360669ad16c4ac6264b2925c693b9fb6129254bc9bccb2d999953cccbbc748b8dbd1bfbd9ffecb5528dce547a573567942ca594734ed93342d41871a87be577c6914f57831abd2586459459763d90858afc214a6e777168a836a4be9cc58734c2c8c4c4e013d54822416bad5425552a5ff9aca28f8c947b683333ab987906183c33333373f9f6eece810fdf517cbbab6cd0ec0c5c84581c3868f2ed5200b4c6911a02804502b468fa7600302961063016074eeca2051009f8ce828a6fbfe97eba7a42634ab041162d40e10634f8f61a95060d64bcf876a9ea7e9a32df8067985986309e9999892495470009dd4f6344d840079d6766661fa1fbe14e480b0dd0498c6fb7e97e5a55e48a9a053821e100a718be7d46f7d3aa2d90fca0ca1128925899c286eab4a4a68eba14b185a6fb61ec490d2916313c008b27545d7678769cea0898e28a1fb608f13a92a5069aa1279b9ae20a259e7d2648480a27a7262172e892c391118ae0b05ced6c704510339ebddaa8703c07b4b1bac1e5cab3733e1c704268074c18d1011153865243aedd14b0a58c2cacc86205971f10f0bcc5cab3a3ba1f5e059e3ea8c48d36653d0a11d10000008002c314000020100c08842291402c20cd4171fb0114800b779242765a381287d31c876118c518640c2180184000200688313544c441005698e0c6b33aa5cb3dc42b0d2e9319bf9412f582b028ae05add4b65f46f1dcd741ba7500912cfee1b48f2d60f5e83360c5e7cb9e68c169390e586549073e5f21dc83043ad8bd2ee6a5176725a5153c8d378dba9231fe284fe409715195308128a6cf96924b2be48fa9470c7a87915e34ea3ee4753d3eb0aed907bfa131d6537ad18b78d5a02b59e347c9048f105a9438fb9b528a09ef15642e82d1485620027a574a03063aaa87e6688d6a34e5a2602fc4b30c080f1ab0bf205e218a123203942223b1930a3aa1d8c44802264dce1e9e0d8a3d3b5c4297509f2ec43e1e2cb8732d0e324a898a877db6cd819fa4515a22ed37b3dafffc972937452bae41ae0a9d72c62ad0310ade9a29153dbf8a54faca692c2d8f5902b2d70a8de91ad2b29c5b43a977031b71dfd2b522f6a3343c4bc0d5e26b5825df4bbe68515a6715b4d581f307d1982e0af42718e02c5908d58ad6a10664499a293cf3ee3f56b1b2f4cc52381560c5922e9cfe07a60a54287e3deb07829e6d9d714fe723e9a297631cd787892b334e94e40696c1139597406a50b80b9cd47bc83a958480d073c51c862a2c4a45c97cd9e2706f4fc6d380f73a169b362523724eecc48a38a111f8588c4b4abe605cf6c24fd94eb3c130029fc50011b6734bf853935979254c8e4bfbf4fb345287e9b8a0711fcd7e8d7eb1219d81f00b0c1eaad288f409c56731489d680745329ead0553efb7cc72b52eaf06f65d4473b821c5ca9bf4afa23a839fb2320e35a91e2f354273dc833795954476a8cc24e5cc9c3541df169b6c9429cd93d5d6bf85ebe7f07ee4b3f5721d79c2b1b28a614073e5de1fce7316922f36e89b51dfda17880617a953d36351fc4211eef837fe54c560b33d0b78670e57e143bfe8b13dec949b1b53e9311610289059babf6536294d5d0d4c65af6694074561129612575e8fd8356479051859c963e785c1293e020b16c6f0b6a23455c0b9d08f886b123c230803d5cb1d51d7e926c0954dd47b81ad86ef383b5a2a86a0d326f03031870f10778fc20d0d880c9a5fd17ff4b1309388bc8b8c29f164b07865cf847f613b940d4c227752514648c4052bca7af36d5c9a3735d3aa1d8a664aed3f2da4e959c056855f0315fd5eeca1b5693d5bd02ae1d74237a35d5a0497e28f0eaebfca4eeab72d41fd1378fc9a683c0f243be1de9d7fc17f0e9793e64cd86322288149a552b98d34ed2b2441b9af7a9199cd39042e3b98932d37aaf004f7a3b4c7f57421dcb32ae6596ac84a6f83bce91768ac6ff98ed351a0616d9aed2d2027c1b37eeaee1a186a34ed04802b117bc8beeb6cf5d00306b344174299c3bac90cff12e5b7ea80616ac9412d91050e2a1626c8ca50fd254cf6344f03b072750d7350e5cc46a474739263243d17c7e64a556debbc9875ab8e79f265a4109f21711c2c23561175aa5dbe55204b60c22cc722d720308b9ddcf67162b1bbecda5e64ea354176dbd18a25358f76fde2c3af50957b4122014534d1a23a4b4df20b7e36155eaf337df7d99c5dd0900343a9e5631c668f26b2566fe67c4d630e646b3e3389158c768835c08f733d034c9d7c30d4c04a6d088f1820f2f5930f2853e3f8710f7ab23bb7da8713b60a7936454c8985a766dc4b67ac4c064a0c3307bee7528d31c2ad37117ef470b54ac4e4a4a29239d5b47a2e52132ca2d65755d4917700f6d038b6e9cdacc136ed7283bb15762c21944a2d0e6fd8d62582457d152eed950c51e319032fdbfc708a13d54f340ac87a0504e7575864390ea752cf5d9e0eef0cda79473ae70cc9199e9aa0ff1be854003f0efd3aeeab92baddd6d84b4cb7ebfb63e9a5d5a057456d3ea11900b3d6126420bcc1b1b233c49714584d7fc42a6835a3a17872cac20e0966972722d5bb57e0f5b6f7555cf28f5ba79b718819d9e075b3532b23796da420416e6925a49b9eb11868069439afa97fdb679943e071d8e3662a922b4292738181db779aeb4702276ef77f9387a3cf7843ca3595f472cb14703132c904a85d24c83e8daf41438685881f87c60661c54623e69b54c89f336e00205b93431a15337a2110d09e8d25f485d8040139837d1b975a87b76ecb64f291ebec039ba3d01da00cd3b06fd55fcdbaf8def5c41b7a5f31335b682a25cbb647d92022a6973a73d01fc5fe11a1faaaf6dbfc35c390561823225f4a884fd732782732ab29e45afdad647ab3b9479fca70cf21fe326a2e1222c9232558c2f60991f460a04d9906d369b2199698f09fc701c9d4744b379304192faa60d7c52c68b5e131f73a3ffee16ec7d18d1ec94fccd76ebf72abee30a64b5744a0d55b320f0bbfd4f3667f7fd85636e236f5bf9f4d02521399b41b6a2a54b9c670cca72410147e8fe90a8a9d7e89e7b43c4ded644a6e2e03415a54040d8283be5252a45127b0ef4fb7a95a4d2d38d1b03982711e4b510b97e22c238a68bbfd25d0a85153fad251bb7ba76b4b0c7b3377535066d5ebc612853c618367f3b28c1bfe26f334fd30d96feacd75a8266ca9fc1444269ee9565f10696eb9119c1fa4190cd72c3299f052189c9dff2f7735720c48992a173dff4cc3d77fa9fa2f20732f711b31d37108c3c4ce4434a9dac8c95dd4c26aa5ee905457f64882b300846be113412ee46b85205eddc8ba08976caabf703d3ce8290495c7541474772c2da76014756640c45face25631d16f1311334dac102a9c9561a799be91f80e244bec9bada064efa309a2ff208beb956bf2ec423a433acff14aa74efa22293ce3dad979504d031e5fe2a9ea84be1caeba4467cc67ff8641afa963fd097de19cf64d5480fe462ae9443334e42a4d08f73252833bbfb9da8afa2f2a6b86868e6d3c2dc65e0834b0d5b9a0d52450b6bedf28b0329ef9f1c36d085afdb03a33a3fb424a3630bda050fbaa942e7fc8601a3d1f24f85ebc000120db80887aa6cca2a3f5ddbee2aaec431f48ad26afb29351273f068dec1a80e153b8c80301dc2cd9a1f5ab92491ac6aebc7a459e68b8f91250be6e42df3a978830c0ed90871425f79a879ccea0b501634229cb21a985ae00f656db127d41fa291cac9423ef86d1da25004f4d632eb8c688b7398b492dca06cf0e65692c79636bd41b593dcafd80a52f20aad6ae69dae1c32db6f3c6f215d6d418e3d82c10c6f7176a47004078fbf8382d6691c8188eedaf7560eb2a97223477d02afe33e9da6969fce571ecebaf860256684368f4f236759bd91f755cafa1bfce1e633327a8533b624854cd55af1dcbe953ece624fba5de3168e6f0f10e36e13b380d3c77cca6e589c8a2f51ca0e6ea70148984fb637a4b1b7d66f065d7f139b5736ef53eab444f9dd7699b6b90ddc7aef141d7a5ad61c2663e68ba3f21ccf4c6443d59af9cccb2c69b4d0cf595910d9782d1ef2bd144e1f632ef606b4766eda86f768eb6f6b7e857548d6d9c48ec2851cb2cf09ea28e9bed262addf63c170dbbc0ac57241c31b72b36b2121f4ffb5c1a5d7ad6b2026837c731a77d72951bbd8ae0db776fcd5022b2557ed22b8112b4cc5631df0037f5eebd235b1efe56709d8f369eff715560e4b2a1ee7624b64cc1bbb9b487e523ada1ab2e4ef2c92e627631d32aa4af5dc46ea14227ee92902fc61470290f3bac6e0d4c25f74c523e86ef77cbe8fd0c28b1d64cb3fb4103ec1ca02b3e76e87fcdaf228cdead443823d89e6c9405c23fae75c0a3c7ef4ef10544c1cfd64a11a2f8c348b95c95bc49e929825c6979d33f10bfb627d9e6c1d47fd2197aaa53567c2e28efa9970683902b82bb31788ce830cf0ddefb38941edd5a57c1f04313b1e95e6074883c9292df6dd9b846fa962f4060d03095bddbe3fb1c7b18ef29930bedae2f0f956715fde037f0b9e2628dceec73e77569a8a1fbc6f20d75d6506ede4832e86754a95d6721165927901366cf35205b1b407d0a648a2e16a214183ea4ce2f5ad8bb1c33a8066eef3d2fa0e72e019a9e5f282c269cc1c4327a959c48dcb1512e8dc2d73cee99ad81d9cfc28c6884a76fc80458b5a5bfa8a3f50fcea49479baf5b4465ad6b48fa57b9fd3dab8169e28e4c42b24bbc7857096520e69348a6be8e984afd2d6cf7ab439ace9f77a8886262dc6fa5ba3f5532aa230c21e7ed83a3c91c2f7342eeb14c68782b6040fa6128690c005f5290e5aeed1a1427c423bccc2dcb3a8c8091c12babda9404b7c84904c9d15dd86201deb246a0f3abac6421545d839752c294c3f7cf2e7fb1fdb45bf34cee68bb136bc50c94f2e3c8019e8456d05e54b5722b51f52f75ce5e6994dcb98d4e996494ce5fcf3a98b87ccf696dc204ae1fffd5350818f71aacfc8b13792ea9fc568603ba0a6a7573c59a12a35630d8a1ebec439109d02d4b6863225461e53cda6ae8a3cef435b1018da31f4fc593d1bf30cc626d49b4493ac8f4e8049628001f044fe9ce26e3a8ade88bd5283c5357c00324bec0c3984d18f662ca8cf77380b931c55a0cc5cc975ae19e4dc7621c836ba72b3862f7435b46a301cf53dd22fc1204f773df9690b6418c10dfdbc202c4a73da8adadbe9c00b7cffd40bec32b4ad4e70fdcedcf159a9855603176174f9a788754cf7a90a217bb70e90c79407c32f121d3c380c39d34998bc9f75548ca2e23cad8f7fa64273a0d21c83ff4470d20384ab53e1b4e04c6bb596c95e8e3061863268519c952a67c55d0ffd4a776004dafe6d75b48be477eb11984820696655cda5d5b0a35fd4808230da14bfc67666aaf44de97192570004b243ed5c87943ef050711fd3269b7df390758167f90277c4a6925ed95b63d5e894f1042482c615a4b49b68a4779db233c6b5f4a1786b511cc91b21dfc8d506566a3045bedf7de0790ad31ce49ff8850f8fcd7719b04c890e3c832fad91eeaf16b304dc56a35fbb7da24c192aebdbb6854df704442530168dd836cda519556109c3205124e0a2566cbcc356b29b999f58d2f83d689ca80567fd675495e64142bfe500585ccd006f5f0b37a582736d1951f87fc97926c678504a3c120d82963e80956ac685b4ae3b9c16253700844efcf70492964a797905eddbadfed870a39490df2fb41b6c1aae7bc879726f765398f158b7893577efb9640554d35ef5d4d0d2c6697e18656c4f2972766a64ca39d8ea7f873de91a82bfdaad8f99821ab881aab4326c3aef86f948e9cc9f223c0e18d5a108d65cb311a3a261b5ea06a0ff2a2b2b8658b752ac5d96baa8235e1a07a673a79820eb353073624bb7da6a7227c213fb0c3da51f1d2015abf3ca600a367635ddb904ceed4369b87a65412f5f3c9f6cb6595931e01515d01fd749d6d48e03cb02178d30c6656717d86476b3c747b7ccdca7fb1a0f2cdd961653a1f9516fa54f4174429d9fd9b353466ef1413b5d8614618d392da881065cc120d2d6966af6291f6770ef2a243ec97c73694bfac19a014759c5b6dbbf45dc21bb5d1eec5f3b8746f53f9224412997ffbcbe3082e6fd023d8064a88dbb199464ba5eb33b2f60326772cdf104a5188a0b164a036f5f3fc8ab1e8d14019537cfa3fd5d3d420e1fb8aeabe8a123bb092f9bd1ca8462c2cd9b00b11ec1934093a74c094e4f86fa1795125d2ebd9570fb7196030963d1b91787d61084d8e486150ac8c6e724899464b50be22d664f541dfe983149fb450424e62beb2ef138ed5233d8b5987cde37203155482f5bd16c68c29204b3e33cf8748a97054bc0160be961233655b11b49edc3beb86115c81bb2e9802c1032769a76bc2eb9f736efcf8e212a0f2f8954142cf086e716506a5854d0c8627e312490bc27e9100929a47719091e2e0a279b876923e1e339fc2c3c7af0aa864d312431f643b9b5605ebc6344213c3b13d0bd5c336853503d7704356b5a5890f0381e372c180e86a2d5ac814a5ac19a50c9a23029b8fbd34ec80440c6ab4d8258b3c1c739202dddf8d585b29b187f6b4ce8910fafa5a6cd558b84145ec63d2c80eeb68d046442a2d93d35e844c23d5244d99d264ab2c6d80d7f8302ae16905ac5a93260d9c6b5521d130917adbcaa883c068f6e64dc0af7cbd89d2a762309eaa025c94baef6dc5bb5f2a490dc7e4b2919e412c930b08f613289350c4053e4582ea79d5b7d2e34086d670a982b1f0aaf97be0e126de8965c2c70500af628778cd37de65bc125532177c78886a4d3a533a66376380b2f4eed778b65e6bd009c6377f0972d2b86aea947b754c8ab3be5cdda6524d5df71dc28e2ba230c9b0284750e5806450eb782a58e86aba2da446dbb51807d2f4bdb89a41c2077b3349a0a949ae5fd5ed4464aba7ca855bef53f02810b8137ebbedbfd815873a0a75ff811cac5c46fcbc0e3a2bedb65d583eff5657525d0f636db4b435ec0d7906bac067075c3dd55c1de8b351a0a7b42b4ccc9897eeb56ccb724a5320228f0a1f25c7122a5317e85edf05ca6e6423f6a7c8674e4c78609cb35ad41d2957a22328e6af3332c06c935bc06498835d8218768f9414e1a6f743226dbef8e3d78fa58b930990b50dadf9852936c899853f75a52e75ebdb31224b765b986b8801e97607a13bba229086daa1b5fae264a16ac9f2e9f9bc25343b9b35ae3983c97f89a481821a3051a3170b53e8cf9249a9c1a0bbbd101da5cda591c033604204222395b6f294ab90a884aa274b814dd1c1ae48606c74804dc59ce885522295aaff4512d3084cf02c9f12e423656fb81efcdf52c55416797a705d2f1b1e370e142073303e509764e95f35477d499d56b40dc59fba9d2471812a2e2931d3d39255f83d7c27529938b7c35de342006600514af6bda777c1136e261c1b51101055eca559c9e7a65b3bc52820249c721b00ffd5533b9a25adb83f4e23b808aec7cc2fa01a0b07acd0edc93b253e145edc9789c6834f3c2a79803b1ac45645f1d15ceb3539f60e7543999bc6e2e7950e38e04026731e300ef2b6efa91ea67527c4657c7cc299bae972e80931706782aca42267681acca41a5023de17f52963a9ab45b29bb51c9c58b064b8a80e00434e7291d05459bd0af3f5fee0200c17c9798128c9d97ec58ad3f1390ddbc1a4bc318a7c81406103639e31133e33dc8643256ab571dd858452581ad08d25c79ac5f0a6a54a860be0118829d87b14ad838323ad9760e0db91680adf55ef890cf053a2b2993ba4b4dab1223bc808f758183aa8daebc1202b204b55118e5cdb004f6ab3ec8f306527ef59ea0a1477de5e7d91f111e3339ae8abf212eebd3cd56c64538568f6009744fd2fab377ee50854314ec53659f44adb4bdfc8759e9be4e7593d142d1e2e971abb24baa56da1ec09399655f83a3f022a9a5e28927272fc099141921a819bcb70a0164fe8de2a2639ce3b5b1adcde900fc1316367c463034311663920e20ac275eea534d6e7c0cf9b0d225a1a09b6bd4300b502eedf8211506d5b9167a7976f486f374bc698e2b961ba043a62b7f536aec0d080ba67510077ea7b8f6cd585555b063e7a8526e23fbd36c8afe18bea869ea15a597749d50b5223589923ba6be0e6ec086576c34267b44befa27b4733edb37b8b686cad3efaf284df6b6e0016688f9f0cc6e48160d33db2fdc0e1a0d62a19bd681ffd2f53a7e3c36db306a5e04c9a3541b3e46a6021b975b92f5465bc767176be711cd09be540cad36efede24633cdf194369d457991d0daa57ab7b827d37de796d0dc7e7c33640cf5389a6874ea0a0e4024d70148ebded2e00e763a2007f1a8a50b1f32ac30e7f4edd3e00462ad1dd59d4641a160caec19aced3792839720456678d640b586fe0a54e26fd6446a3d98e6c91fc0dd40677bec04ca65f5e1262374d4919cfd5ec49d2125d06c169fa348fb0272645de60267c57e9750660e1fbda2f2508c94aac41879f27d9ec1126f647344a082fb28ff41672b54a9e1711da109322a0a4d40a37f08094fced5b6cf026f524ba8242a2c55e2c4f7224b7f9ab12a845facbe9f3cb5aceec0ad46c1f20c9cc177d9f108f7a1a7497312a2913a4cfdecd7aa90ac63586c217fbe084bf9184909c138e0d34e44bf782b3a1bd4ea75e05945da8404d0dc2a45b3b644341237f4385e5da940662257784f37344faf26027e02e64661efd94a8990e1fe6f93e2333a59cc69f2ee3a7b2fcb846a0cdac1a1b46e65a97e2be0e215f52b9325eccdc3da940280e700d09dd948a5c24731e2a924abbe95d51c9bf227291dea5d3d7b515b5e45605ddb5f2326d3bf35952f47bf5937ecb04c27940cdf01d4a737ed4b2419a323797265b148630a4c03e5145e37a8f17bb7406d8472d1debd5c99a8aa4278d27c46a885591dff8a89baef31319fb1e6e6cd2deb0b9e8659b0fd0e128c7c2e469e874fcbf8034af3f023dd0b8288604834f2b8b4dfb913b827c636a10970339414df97df99539089d16468144effe83c2deada7ed052b3ddf7ebe91c7080ea93eac2c376ba5f85aa3125cc7a9771890fbeb5976999df5f4e3feaed098e501a1ec0f19d4c0af262f77e60793e7d47990900ce5d22c63339e4febdc240c218c887c3c26fd9ff6c4930b967f4e3b488029f16b28280da5fd5bb81c683973f79fb06c8fc3c5e200acce4e2aab81a8e7ba909eb77bc33e9007758acbc2a6dcbb404d1a3ca05cd82bcadad1196377391b4d90664411cad309bc463af7f68745a2c24f683fbfae9e9d145b2ff1ea7322d84b55955f558ba19c56e3285f94dd81a0eb433f4aa877cfe8da4e6eb4f6e9e77ee45c318100affc37b4c4fb8bd54ca90c7acaa618a756151e22360e54fbef451f38132f22541fe0116f0a7f791e3c41d70a41240ca6ea7f1bd9ff0ebfeb3b976311744b12d1fbca5fbc252922761f48a6bbfbbeb7d8782eeb8fdf71272273e912a5ac098d07dc0f0b3d23eb289771f47adbcabfb9108039324f90b64a0553ed8079168482bfe99f3545e4d05e1dc5f1c22a52253023324b59deac3ff058a3e31115278e00b3b2bfffb0d53ebdf3c4a28870b9fd63b442c8031cd89d90a0d2cf76cb037a1deac99d75efc2f96bc332451256df30be07f4c5cac10b790e250472b4ade3823a4ee0c63034efa5b10ee0508284b7cfc2d2d7fbb1df10d93941552ec7e3429b79bf9aa941293262a11275eb22a95f472124237e266bd3ee11c81c646aa956fa704bfb3385a921706fcb6b139bcf312e0f465020c1d735a7cd6833e661ee83752ca6c81aa10e0e1f8ee842b916db99a7a1eee1b9a2ff53430ffdcfb097df25bf46e792884752ae8f8fbf887b6427ba117173ff62e10c4b4b8c85b8f1f173abc9acb89f22ae1e558d326925e92ff818f3f13cf7d70bfb8701bb3ea05dc63e7d44c1e75a854adbda6e836dde30d8aad80d078757762f55b22914907fde37c02d93f6c85614a5c6ba13608f46c08f0daa5d5db5c9b6562ed88da4377f8e918b12522a8752921bbbce06d974614aa837b603717450f19b1ce72449809f0d8925d14aedddcf3ec6bbe9abc2464f5b63b1b064ca660c984271600de0f499dd449955c087a8fd5fdea13ffeb8c1799fef56d426d17bed8bcdd8734c70a68ec616a4701164d959983f49141cec7a41d6968a6f9cd26f9bfe1875d38347a3c4cc0cd4efb8e119d63c0b1438d38de57b896680df65feb0094068fce554f741e449a871a4f86eed838ca486c32c36761e0b0005149aa8d4383ed8e8b8635a47b2ce4d0604bde3ca29e3e23aac4c4c7757924723c23429aec53d5238f607516ed62d3086a527889c56ea6aecb138fa0b9fa64a5f83825b8eca4a379acb1ade2386194803dc05681ff6aa397fdf9c0c646a666f252cd0bda0b8093c3dbb0d3e1cc8487ebf6ce10faad1c345abf88715437e50ac6e59ae3569ec6e9ad9d6f257cbcb02da5404e751be6e2b1f13ca2ca5c88c888f45d32fcf2522d0f607284151ae745540df86c081adce6305107893d96ae6e85af9c85674857794b47e4bc689358d7ff11590d178175a3b866bbece98649e865a735c191e3fa52b83ebb62a275b9902a093943da53f33bb0a6c39ed7e46d8f2a4abd66b676491119ee676456bd635f76ab184209adb6dc268c1b6708ceb4c8d79bf9574e56720da20da5d43e7238925b10bdd2ff0c2edadf0733355f139a94452f9aa789b3df7d454cfa5d31aa3288fcea1e8dfce527f81182fc77e3f52cb09332303a56ff89f5e832c9db9ab03fe8dda02dbecd5f723069e8aa07627afafe0bfa4e6a1909af3d1621f2193ea213dd88dd66a4b3cf459d12072836ba7fc8d704522ee7ed3cb1601ed54173c6e00e25eca7581b7c7cd7e17afd1b4ad36014cf4c3711fb349ee933e80ca75614201c1b890525ca2fa78e5d493a41a94ebd04a0dcd21318044ce650dbc7568914fa45e840c8cf8c801860f32f7e3430521533a07bf609eabeab99b01a4cb61cfd7b18db09e6c7bf9bb97b1d19686e253144a07de514b45af695cf0f4488f09ac138ce202bf0c1f0a5f5d57db717872992052216f98fd61c5910869ed36127d312e0d89b29772356074e450531440d415dd33dae8b1308ef1a73fe675e2bc1722c4409786f3c72ba63968c2da5b4bc868d0c3b7876ddc9c2b9542670706643125d6c560f7322ca1607b40e22840593bf02ab250f4cac7f769be025314b326b8992fa8550faa9cbc5035062c386f08ee4bab82b7eb13f9f3d9e4b31fa655b51f1d07444a820321f6b290e4cdf06f1728e206782af0c93de51c96198ea75244a77d828f3c0025b2c9f0fcc700c1e704193d8a9002c8567edebdb828780586bd4c29d142348bc33aedc3218bebfbc0524f2a566e87ada9872f0dea7060e0e404d9ccb32c29f4ce50ba44cbe70d1cb0cb763f65679c93b7a9b2292e17542fc028734eea7defd438a41101e413c5cfd7b1bb5b22f27813783976d3e507575b1c77499e0dc5a86e3a158f813f990b58adfa3d497b3de41dd13a1245be8e2952db660f511e513e10e7a62044d109e9fb5cc81a12e24f062c169a41face3110639c955c9374a130b1017c5542d5ebe9ef58a6964bc2c6958fb121fd534df230288ac1cfbf436f0694185475c4724ac04009588360f258e0b6ab67dd4950d15983919d7e33c1bc53dbfa7e59e1de258a5766f930c56f27dfb8bcd325807fc491205e5032de576593f9014c3dbf27d35912a63b27dc3b5fa3a78204df24194f0db9c84ba3fe5c62d9b4e35826a1898de814d5e8342658d8e1c889860f54c7fbb3470e720bbfda7a30f902cda0b52489d4e3f33a0bc7533fccb6e0cdaaffc0d6754858eea665233fea1ef3652c2d4e8d6560b516be7352e311f80803edb22e636f40382281334b90cd90af1da07e2cd4509bf0ac981d917b0373d393de87db9614eb786d00c71c52c8c53d77c3bc1ef8a9bde6fed6bb8a327c21623900c25e08760b05727cb03bcc6f0370e1701c27b5e8e6c96c46252057883605c58e473c1ab366cac6b8641d1949301033a36345c0ccbd29fba6e751c1b40d1819c282f9cabd3d25c9c95a662dd3ad4c73bab19eca7f1553642010f44227c23dc9600e62e76509b0564d9a2f851ac3e18c846986c7f1053089c4c5a2a2bcc29fc22cdda20ea47ecf3ad9d04d4815af97a96124a07ac128e0b25fdb6b6026f2d64321a7a8ce0c42be7c92c8c113a847b7d87b6b590bb9047252c400637d12ad8dfb5b8896acf86bed06957ae9aa53dc8d97a946769cc59f84e33fd417580ee9c4e8f55a8d3af754a985cfd4497af501a3b2874fe6af37a2d9cc880f1f94a80315c6cca3d16d7ef7781c5d8491946761f94c64e2ca4cb8a2fbdbb8880d238c97561348b7adaf839268fb9ebe1a635137ce08767d20e43e63ef63910c20a14bd5198070690f5d9f92ab6d9fc6583f04b313a370e98e7d6dd6d1a6712fff4f175085af614f5ced42e0457d4edc295c279b971d8522a50bf246f45102f0c6f171966bb31ab8503c6c181d6243f47e7f637d79ddb87f15fc9305d1d2b029aa66c58f0ad298b3b9d51382c1e45e3c42b821a92366cf4a46920726d30e035b998364f441ab0f404174f2afb845c8631cc99c32fe470cb260de33464c7293f60d86999de5bb6f4fa6760f14853d25f798759f88e4d0a9c3709565c54b87f05c38e0539fe399a62807d48cb73f7898bf56f21e120e9d2194a955e3b13f281bb1e1c6e5f15e4a8f87232271ae95725d181e078012660061a93394b40d24411e2b8c64c13bdce0e7a8d60487d7ff786bf19ab287da4887fe0426fffb37d3a5c0f29f589e8d25a691c4209597316c3f8e01a4383c6d6f1a196cd457157fece3a81acea6bb98e263c02293dfbaef49a9a5caea0bcafe146a08d7d5463e6d5940bbe20986b2cd83d9df32d9e2837ef2e0aa729f2001249daf924f8784a74dc2db955c81305a80f03506ec2dfea9fe8b928dbbc851980406c7c57482708d757551aa5279ad527f68231757688371af5482f90af33dae7f8a22048eed5dea5013cf3196a4a0a7bf9aeb103b1ac09c0df5f9879c81e8ce0a1c786a12840249864b1bb07e98bf3275a3a5471f708c461cce6e8299f4196f18e81e4bc4c81a9c140e8ff623031deecf037795cc5d86f719020c562875f6b3e53be2b1efc96574230c7ff0632e71b808897b9e4a4452fc4d739f65da69a233f08773483f82cdfd58d4e983d8efc57770eab510848b99fd3375115c8377e6fcf665353ffb0fae2ee1739a65c20a4438608d7a8a8691032daeaef82f628f68b3236f9d4036b61cedd569816b2311ef022683e2f0452393722bf43f026f592523a0cd056bda47dd70f0deb2511ad6e628ac666049ac384e6f7bd832e29a406cd56a67a3d407cf39231a8c45d39f8c56debae37446b720649c696612bc4522f446be4d4f9ed9f74aed7d882c29327ba70ef5e86e82acea22a0f7c3f3dc8c8891ad53be3d4e539316dfb9791d074604cac094c26103968eccb67d1e06ed947299bf55be1195a6cf5952843ea525d3fec49cb8b0fd44dba07ee0af7a8547067a39cd8cfa8c5b5dd11e5c2baa16989d22692f5fe728bf864e49a294b0d1a85eefc3661677d5b225f9eb1b94eb48d9de05198f1adc06e71b113860c30020d662c53b7697b39b15ca25545d4a60e5a9d87378c6f015e3d70a1ffa4e643c8e852dca007dc2c060250a0890cb0aa291f49e97bb74e59a0a3c42e4ce8884495cd6cf7a379012668db531155d3a84e706dbf33e5ed5221cdd1ec12be8c9a51e48451b3690a625eca7c55b77750d331df13ff7074542134bfc581d47a68d58d156e425edeaef011c65908aeb9af58d4fee7f717e29091376fe1a8fd3638cff02a8600d0feec95dc16a6f758df6ebf2454d3c72985a17174b868a218b168b52c36fe7f1f0a992483d886b4c9304de0231df356c6c9fa9a353acb455443b26833ca4f978428b6db0c0790f61abc5941c8dbe2a6394d3774dc6fe1d07388ef4b67fceefce2832cb5975305af0ea0e8dd3ad3836cd2385260d4aeb8211f349b52589bcc108656a6d3e337314c6f1e204ebf12e0adacce0d707387d6beeb4e3855810567a395d30c1791af92b49322f9c1c9d3ce1365b689b3e250f2fa6667d11600847515333abfa1238e956af046a9b85d11f575614451d055ce012714c7ca7a1e575d23d30cdfb4e7d67a60fc8c85552c7d64325dd048e0180fbdf50661e43f0eddc124db337f13b252e49545f1bac18480209614d3b10839766e0df6b60f15831e0049bfc3b1e6a4f87a36c0c224a95e1599c9c1b2ed91ccba5e0505e953c867eb098c57f2613d1fb594a85e08ad41fbdcc9fd39bb7fdbac31336680e914aaad7c79fff90b573c648ef282539fcd275d1d0f1927089062fd11e122da96f6bf6458ccf2f5424af20ee6164cf960a03e775313a29b02277a94571aab5bc01ca1cc62c88394e6c032ae8cf5e8cbe856a3d92088d50f45ce4e1f0c02305f14d2b59ce3387271ac28a03a49da1af1fbb4ce90c30b45ed85da61db1679c83a26df00c9491b683e184411b0d8b1a7ce1d859f1bf4673cd61575d4a75957e873d3a057561b3212a51bbc30aefa5933b9b36572e2ff66e30e007b92e9bb1ae93f4cd7f53c9035d454262a42051e8c031fed6c6a64ab599b5b233a29573efdf44eda844906c97b3e42a1c4dadf669c95b3be739ec938813ed183e902143eb66d39d3eb470acc4bfb12a607b626ce65356cc2a8f5fcaa382bbe1501fecb084bf3411a0b5e5b1768e47352155746bc21c360b356164b29e5e8ab61894fb39d02a63d53edfa05952c110ce3b18a6ba1d21efb41e62ccab407df86919fbddb939ebcacdc9e1ccb6dd520256f8f9075661e3b086c55550a168618c7527524e9375eb90283e40dd33b41512a6a49f4f8128286a558025eafaabb817f8361f73c3cab45d99cec08cbfd4384f08a7a9ed8356fb9a539b4081789935cf1cfe5eb2a84de36a0158c1333ba465fd4e0ec2dd0afe1b9d20c329d4188f072b58c546598730d2fc734003dac1d1426be39dc1b98fa113b87fde7ed24037166a116de0fb050b71b42d764e66ca6b85f94ac8b3e866f1c0a82e5292793d8ad4f5495997f5a12cb3d25ec6fb4e264f6629156117ad6fd81023c175a40c12e22927ef303d9dcb94d9dbeba388b3fa84e7d7a04ccad28b6a250f656cf4484967271544b2bf0c80a0a244c75b216224306f06a7a121ab2436d472483be67b460e466eb680aba05aada28099d431d776bac0ee22ba6f66ca14627ee6ecd22c6f3fc2d227f0374b59617d01d5ee7a72ba0cfa82190b03896319fba673822286145dae33bf6c82820b557ba0ca348362c28670ec28dbad559bee89013a9797816646618c72c142433f992e1ea091474fb34613d09e0bcf55566861f17ba4d16f020c1739b393afe71887c8b728e71124e88c1694cfbb046f339ee0b349327dae9cb8f694144fc0986bde1aadd92679c967f51b0a0403eca694f8c414ffc0afa88a3aab1b2a32a132297f427d3a8411fd0614c1d3a4781b2b583f4beec088205a1a6c8374fb4f637bc8702dbbe4d6a065aa9dcd5bb1b3fbe500519be8dd1fa9876d72ab0ca5f287a8cee695e89364b9a24ea883081ccd0709ff4646e61102b07412a241824fdc681c9998fe74085db512e1d4084a5d029fe025bf994c1d5873e1ebfd3677367c801b6761bc8161e3d3becafe0f435367da1483333bb803f67485b3496e0ac71c44455a51d85f54601715bacf95c9ed71aaf36b5ddd45c95e86dacddb9f41597d3d36f3cf6dc42a2c1001e33d06e9b8e3ac623dfe2ade676cccdc68f0928a36519716f2b694d26c7f14d149cb7453db35480439a2a53bea4a21318532edab20f52b9e13edca8398a620470fb8e3c9c5bd737bc5098926738c3250d89f984f0088ac6c4ce61c657c94594efdae3b6a3c8ac02b60eff847ed8c4ec99fe2a927e65605f05b5496237952a1d81960690789ec7de7ccc07d19f136a34a055245df5ddee97650d898f2ab3c2e9ce8bd38355c9439ecaa66e7ba35d0ce846b171081b74f78c73f3f0dc6f13063a3aca4581189601a127c733865d7089905a183210f771c1aa8fe804038057598e448da810400576dc75c140f40fcc7075442b511e78fc4b6afcf297d7b08e0f9d3f1a3faf3931315817a3742af5a8abf78218a4617ba9f8ad7303ba82051c055e9ea77aede02703c94f8d8fe8bb67586126f0795364ce4b77ad6decf390329c712d2f3117f5f59eda354dfacdaafd7369ca9a5ef054614e7f19589d4dc8a77f153f1d521f77e6cb251eacb7830ec7f374e9bd2736f8568be36591417d82b6ed1de3b6bd3ed8f8e247e191a3b9dd6dd32e30335e908dcc33ea34f193947a4b0da279e6dfcc0b74a1462783e4e602aba55da0f3c1ced86c8f20b1fd952647f12acf0b72806e32d40f8746c9cf9cc582c5ddf48955a803887328708e6096a43f55e44b0081b54dd9ceff58fbb74b334eee9ec601e0dd5871363e9554edcf73f5ea05f03dac65c8c051d2d65a28ba9e3b39453910682f0796fee3c691f63b6ba3587696c8c4936ed7583d9ba878b5fab4806027373e69d35dd1c3d6d986d54968ba10d2f2af6208c8279b9b0b0df1d9868ea9869f327fb598066d9d3da49a9933e45c2354466373f03ca77343ae403bb68676968f9f223ae5d93731b6d0d05441ddb6342facb349d2d077b1c362d45d66354b1c3a6b8fb02a8642a591d7719842e5659960a9e2c24ad468f627cee9054402e537ec49830bed83868e09593ea34160d285a275cbb9dd80e7b56fc936f517dc8f19274767314b390bec440c925fa0ddbe2ea143871a8c8b7b2c971d2e438ece11cd3c9515b23e2a7a8b7f24a42d7d875ae8c7a3ed17047c702284e45436ef181890e440e6b46a952f400715c5699915f5994a37f15e65abc20ad2a0ff46cefc06aa95e2154d8a322cf4f156ab47b6b9e850f7c3a16b38095d705fdb2056bf8e49e0d1dc2f5c7df9b1616120fed21d032c5a945449e9af294ff1426db42d2e7939545cdd1dec56d86129a82f0cd7e08c97e76b87b044abb3e8e9933e69fc39e603de0d1a0f135a693d6df900aa188fc1648823b5efe00c41241a26204c9be3639d2830eac732445043f533887c7971798b9acdfffd5a77cd8994d6efbeb0d31698df85d1226076e1b115839cbc927b2d77d4ff6cf9f5bcc37427dbaf5adba3d89a516ebd0afe09384187171672c2886b571caf8fae8cf18000d75a984835c037cbec110d00ca5f0587394bb24d3780f1a618052ac29ae132e6367031bfa7facf22e1019f78a8d4a80ca043f0ed2a0a62e5444dd6f184ca4adc81d8f5f369bf2c2785465149f0b8614c9099de1d879ae487c677c775546e5b337d5eff3cd8caba598c3a2be9be8e8b7d479f6138de94d5394473038601b601be8dcdeba3f6419dc2ea19fb522319b519404761a12ea8b447ec83e6fce0a17b5d1213314ede26217c59db0650fdb1593ea61cd6c39da15ad9275d977a7e8a26566b08f47255d24a59cd3dd0fec2857cf5d6e510660033177dd40e5f124ef849c137467191ea0e8bc60b308087f634eff261d9c0c198be68f26c5c1073e05bfb926d91e8c54b2b2f88587ff85debbfeb66955e115c9b1972bab2e0c27eebba0de07fcc31c565542274602051b7a63270a3a95579a3e3fcc0e9b3fdc7742ec3ffd6e903b0ae269565e465decf7cc509e862382cd224b596d4fd99138f9d542e41940a9f77a83192b5ae9a98fd8b1ecbf97872a4feac4167fcc2fddb85b835e2de05255d1d4333ccad2802214bf66544847e5e511f8a5c336458656aabee41c555d78b5559076311a16ab4d9408950bc106964909e485b5f56313c55a036f1294d6163fc7a113df7aef7fd5335bc058901c63995844ff3eb1d19173861aff782edb57f710960dfdea85e36739e3ed577340f57ae22f63cfc52e765455eee96bed8db70b5f0086d1f4e98aefe6a34b39c914eedb597ff65244ed01bc5ce137330655262452a9bec8fd7cb2482069e950e0c1d977c23c4ff52bb6edc593399333f47774e3129281829878991ab8d273e3bf74e63d64d18b1e8572975b29e08f30d3aa39ef8b457c10e277110894895934f5210856312f65e0d2b524365934d1f8c93d64ef16f260cc1d6bb9588fb38fe8222db84b12e167bb39d3b8f0680e74bfd64d87afa5136857b19a3db7889445ebd9107b81b1118016f3f6ce905c2646bdd9c2cd656f95c92d5119d0c04e09b4baf568257726e07536363ae198a6d85af0475adeb20190512321cf9a2194754784334ae420ece1ce21b42240f5945dd8311d3d0b15c6ca06e0064eb5d6b9ceecb1ab2d93a8e367b733362e31f7a51eb99ba024d00dd63385038499a5691653e2f3b7e61ced6c8356b3511617cb6a34686051140d139c98dff7aa8ed4b3fc8e5e194d300bb0a0195b7ab61e154b742af6e2f31eff3e383e104e2ecc6f54278bc8b37c1218c65b56c07c620f3ff6c352b52de3c396e4acbdb814f663ccf11417fd94ab7b9b6e8153039dceb56ad850caaf99efcaa1936234a2654f37de936a8ba62df22f10a8ecdb54db27536c4a3f55cbdd35ff282b1d7c385b4db36349fe66bca7cb9108ec7e602260a9c63c87f42213cde4f532466cae048fb6c06d5a8e3d6fc6585d47970a5b937549bbbffee5a77498c029a36e37de83a6c2189a0bc2c23f43187a71da475a854c9461a2beac4f228148b9220209d9b4e4f556d69ece8e69f1d331531414fba3c5bd11a4cc5eef7669a4ff8b5bebd545c55b44f5e1ffc5de951cc5d3cc14ea1acb355f538561dde127a5188c12fa7c65ad109a1130d8925d09f0f81e33ce0e83d184b51fec7dcbefd7767a500fb47c3d0023ebf3b1e36a2b96000446ad4ae48eb33e7bbb9c49886d0739587853d0a91548220ee032eb6185c325a215ab2b84edcffe46f280e199417d9baee47b55d49752f0b4574f4f53a5332b27d9198211fef8b1967901d65de7e468f98d7fc6580fb82024e189b220af85d2066fcba3513fef00b8b067c690147dae67b786f58fc25c400c5d1c0c2520ddda91185d7c33a39febbb984169c5e8c1b836a9846f991e42172614e832532087a8493970261602b19ca521c145933413c0dbc99b6e74b5dca38e46ded63226814ec815c795056ae2572c2d06cc143aafaecc6dea3dac84ba1c793101744b0e5ad59bec14c7f58dc44ad8bc197cb477f2a682e311d9c355b2eea3bcfb0f33ac5b87767908f31d208aa96f76e28ac7bf7576306560fbe1508b5d62eaa2b99dd97145aed65b0b6b8cfa37fbc9dc34a4d020243628f7747ea5b0fa85c936b44918aeac077a8f6b392a88eef88f0fb960ee0a4e0ff9a68182c67f5f2fcc7c45cf054735f1691380fb3f8ff6ce65db1313781a20cc5ca475eaad2401ef343c90888ff0297641dd82dd35aa1b25475d4c48e4263a34ffb9c2595555f4e795e9c2e8c74660af84e6e8f669256b40f9f8721f50875ad014880f325a03964cfd99b6225982bf96eb51160470d04ae65f51c9c036333f1440b06e7d3da0a96a65472e68fae3c94d411d2df3d047accadb6a2b237b15a6f6da859fb8083f32ea2283c95541fb82e139ce43c07febdba8637411969c264b124a67cecc0474f927fe8224c2d5bcc1b28a93ac0d6c251341a3d53572a1dfeeccc4a69c483bac847f27a0d67ebaaeaad3db0a3fa1ce6374713c80120a645ac77d157e7f9dfd16a1c27870094a4574e81c6aaadc196e31c5ec494eb452d45ecc9d34e6f7bfda3414acea42c04026266b269a6f17ae0926f8af06910edf73162d99e9502fd81064d5bd318a5567a2b10389d3eb69ed907eb6edbc71d8106b3ddeb9eb67c147bc0b77d3b24bed39f9f384b7a9b2ca607f23e0fd49a791b11f3c83c7da97c9092704b3255a5f73420e461446dd44917a95d45b54702b1547791f2834eaab4902ed2cca159b78c391c141c657e1ad70a84bca15a31eb4c052d9eab2f5ff0f336d1fd58ba903b0a5eba9ff03e90845319258830f6362ca0e0d68eb2118c9ac8dabd3f8666bea29d8d501a58758406c727189db3cb418f343532ce1604e486d5593e91e7b6b7cecdfea00514a72f3bf23e1578c73c405471735e9da9c697b56a8eea6f239586a19c7090939e4abf0ac9d52126241cf6ab2a3c230886cfac5f0479893a2201c2e427b2290fc11a08190f057078d4bbbde9e246f20148c753facf197250a51cc3b133d369f2587fba9fac4c84b0cc802bbb95e62ddc0554f22ea4e12527a97820d2fced949cf6f7d051004456c562f18cb7e41b550648fc8715fc212c1f51b2764c4b285a12f8a6091c85353bb6ea1422b1c3b307c9a5fbec6c749c07413b37ff96d7a28aa67622f51b0dcd730ed68738b3810d6fb4c157762b1a6d403ba5d7095ef8086d0043920b4b68b836aa8582809d1767e2d6ac6e92db5aae7c32dde51ec476170c424ceacffce30570034dc10185af1d6ed7446bab546ce4be2cc0ca6a570df373383fbf843847403ba9e87c29a0667e74296be61a12802eb12ea5a4f502bf5b3310415a93ec7efc0a277b061454626d6d4174cd5273cdbbc67eb74f53a601f535370f605d601bb8e106813b65a7a2cb3a058e261e485c3fb47c217c7c50f7fd94039cdabd943bb10a08286a2182fb3a08168c694b461b1c58b2537acbc2643d6f4e8026cc5fb073361e3d8062abb9eb9c22541336df217122a5254375742e30230d60892a05130c0c789875b3ea182e054fe415e9769f45a55a06b807fdaa382c73eea2aac55e9e128ea7282a5b06ea867c3d446313910182baa8671d89c9f6364e93f64427f88e6e297ef25ca15306040974086cca602a7942f6105493afe943b32c72ad2a87899e10e23a3f7d60f41f7588f38ab6122ac5dcb154bca32add1e340129fe0fca8a022676b6fbdffc6a20ebb43c7b1938215b14af31c1e5c671754bd2f0700588837d87a1404aa53400f5745f0bf15d03cbc46bd56e20bdd3d16f78252ce53e5e2ba339155ce81170842585665747f587abe8d0a97c72041bc4d93b4ed7304e5f64dcdcd960be4311b95f6c1a44378548f156a6d4770ce2d04f7d56b6edf8b007adae472212e9d2029d88cb617683b953164c1ae31126bcd3d9dd7668579824a30b8a431510f035d4d65151224c83ef63c5b9bf494fd762e401c95c490f4ac3687bd09f6b2b50bdc7938238edaafa729610f46c12c2d0020090780e3a955c00a74f76e9e991e5d5ae4828af7b124ea4c4817639e77251fe5765ae584e674b1ae12f7e83147a69c61c659ac6abe1a520d3bc6509674e147cd7b965bd7eba2a11366c1531301dd019ad87bc51d39ce7154c3f94629c9abc174fbbb6aba6b0098fa1ac8d1139044a87da492cc7f7e381fb0369824568bf3af57f89ae743c4c91abd5916bd25863c47b7f21d0617117cfc115c00eca01ec8b6f6028cabb5f715adfbab26e89042a500b24358c603f1e4a1c4e4e20598c8c3eeffea8bd0f8d62c891ba7740b8bf7e4476764ab973ce66b0c32be241f48f27a95bca3d1527ce142d8878c0bcd6442119f1cc7b3b6057cc9c125defb2b747a39f0c7194ddc5f03890adc82c6e913333a0adf1a9d0d283aec91c746b2af76137bb740661b22e159ec59ffe7b667ae719be7062de8a06223060dd3b554500835a07a16ce4a478e5380c88e28cc0ad2774a085d6c884a6433322004663a221d1d861e4d1c84e546feb62342d660dd0d4c4597b08aa9140850dedd9461e8e49f6c5d6072ed137e26a88de4ceb5e35e034c8c3e30b91b578c4d47e87c690452385a7c1453c21f2d011680d6ef5f37ca91b1791f2e9cd0563a4a6c8531ac784268cd741c326e47b71e47f30b0c0412209442c6fd84dc7165428ee30d5246c17c8ffaf2efe1f9a0df552bb3ae95abcce6cecb784c4e81cac7715c9d4ec3b2e8565b9b20899440f42bb95798d4a70408c8c5bedb918317eb03402b5ba35e5163a28e9985feb71115a1003ef1069394228d14d70618a649ed120b08fdb4fa9649de556c2c2c4941e232806fef7ad0151d0c9fa0c6074927550a21ea10cdb44401ac400211d98ddebe7ff5617c334227183a9c2a5dda03fb4c4fc4b21a05aeb038ffa028cd11d380681968063c223f82fac6399199a7fb072fa41d0db12ee99dc9f1723eb4b61a0867eecb1d4bc3d589536ea2aeb548a242fca8d912e2a8443f06279a806df39f4755109e3513a72e8b0d1c22d8b76d426bec434d0bdc284958f9eeff0c45d1b9136eb28a1b789dbb3aab5550fad0a68c27b98845709283673f1462dbbbae324830b6e4db38d8f916c50b1d697630dc6af4298e26b025ef88c56b2caa806c5c8256609f8ace0e07f18e35a36dabc53a006033628d278deb58946b28a54c1b90e61e12781169c27fc6348ca74b074c814e868e73218b702d6784776ad663c3dbb777ceebff3724f6e95077703e30ffc479c22cf0f297fe3c5bbfe285a99741dceb72f62ed926c541edbf1dcf674ceebb011d6357fe29a034d6e456f92e99c5de59d66aa319234ab2023c404c7f3c5b82617866fd2be8da834051404b9feb5bf95b81c8caaf552673f41c6206170b61eb69cfc8453d6cb7360734486c2621f17257ea4cb72b0552d8067eaa35ace7cf0160d8874191b8c5deae470e5f33fded98e5c017ec817ed36aa7545ef1e5739517303fb9628b87136b9e602df81860716582e1421d27a3fea94285a4bcec9e841a8d9513cf7d181b8fa71c032aebc82e58be3b24da3df573ab31024d4e0cddf8c870514844615218af1a4dab2873189b77c6eefefb4faf83821b2e19763b51ceb03709a4b94c1a715ba7c0655fb8b5f0eeffbc0edf59a39290c64cdb4339add5d0dfee39441acab5d82162cd8c2b44aa2f7f1d61cd056ea1dd12e2a14edceb1cc2cb0a01ba49304abdf02a3f0ef091a2d55119a12c46c30b9940efe6565a360746216793668c042e961d8d18e211ef190a766b6fbbd3e34f28bf5ac457b427d82e2e06a2ca7ef202877b032c528c0b072fccf9d47814003c17f11a6fb605dee1223bb9326a424b46c20e2941ee3e5fb0229f0d2adb1d7cd5fed0d1ef517f13f14aa8fc0a5eada639b41ed11ece506ec7f2cdc1f01bb5043b6d848e1c6d4ab90263666e115017eef34dd2e9a5f2220e6eeaf6e0e036c85fabbfa1cd7f2b0dfd20e2ffad06ff38f5e18905e9a540cf95316aa69e4ead59ce9268f19647b053ea9d8c70d184aff7a2991af53d80f6bd9c7d9ee5a808a2ff07eb06d4a387cd4f376b08c24fb0b78c2e2494e3d095ced0ed552a423eed35e66c10f74cf2659d132cbfe09538b4c4b6085bc56c1318a5500a9efbe89defe6b4618700cbbba96f5884adf51323f104b44adbe39ba9974028d472aa8962a9a47fa410cd7157537c11676105838f61347d1ae518ac7a431f110bd28860026de997fd5c626b56169df06396ea86958ed4fa30c56ee7656c88d98ad541355e1c485aca0334ac833f0f37784ea596aeefa58568518423fc3de9fd6fad2b7e8e1efd1bc89278ab3ccb122013653467dca6dc9ef4a5e43b3e0f4618b5f745aa18e9f162e4e4ef62d14c27fc7f443725f9ae00d15f91c11a3860f7219471fda33c12adc0447ded50662ee53c57a631c2312f9095de63692cae441024a4cef2414376b623e783cd30b5a63308f6dce5c6991303099a52ca5a4d2e0f2c46cea1063b9466d80b408bb873685e0e77961788952492473c227fbcf777fe9173a4e9366c272d256848588ff12aad3fff64ca50e45d5053d4c60227cc5f4d672792d6e8d7379da051484b83937b820f44e704fa4efaf2a023d4e1d679b82633203e1c9679cae0ffaf3509203b6b4e248937c0868caee391828de0b7f7091781eee4785310df7ebe6c2507b3a3731768cdb147a91dcdfeb0d77ed77f349e99a0c619513f2cc13315052d2b90abd9c8127910a0676f6dc736ca437c3b5af3142d8ce3f7f121ba186fbc56c62129ea81992b23f20dee7cf3e60e9630b9f2eb24abe2a6323262a7186528a288e241034121479328e684fa4176a27e7d873676f66ce466938e0737e166a776f230527ecbcbb825dc69f29d124e39b3b1f14b587b4dcb20c6d354f2c60b06901a5daac173192c0ba1cfa3dda8d5480688dd16e1355eb059287628aa8dcfd8fd0ec831905a91eda0643ba535c519e83a1471643c422ac1088f79b40d653c5d4aa22e0c447eeaa104021abe62ecea694560dae4e4d2027ccdd510a79e375a0c444bfcf05ae68c3efd6452921190a7fb9c695b60c6104bc61bdfb08fe9af0039c5af9265695f1697cf5028b3d12f23a65dcebd13dfb3a9b81744490ba163b139ff8794f83decdb357decf40130c8050edf5750c8a4100f3630e9b3a88138c41352ee4cb4d1a15525354fb4ce377443beacc7b0a1d510af29a6a856f30a5253356cccc0e2ee9fd685e37acf04d003f572082ad8e53329caa832bc047c02f8c2cf841b6ae3b95034a41ee468c6b1fea845b25079ea0b72581e70d7b2ca25d8b4e2783696e7faae82428e2b531cf69457f189b390df400cd1dffb7fad403854a1235198c26f2e9673b2c6b9906fbe38642b7d21b6ed8d48c38dfd9df5a6630b5c83e6485691783363bda965d9eed71707407079d34cf4466e6520911d91a0af3f99ce1e9568052985cf16733976662539c65eb4671a2f9850bb9cd6bb81c19542c60c60a38f929dce2e48a364283b876201d91106305502e9e02cc73d2114f7c4ae475f793887a01c3f54f27baf09e5353128b11c4681da57a4c09071104446ce84bbbe4298dea19a8fcb28a17e1ab3954498c80b4959aeb2e9c2e442e4636e4eb141cd50f95dee9a020845d3856a028efd1034f2b8c06e8ebdae92c62abbecba908d1ed0cd0d4b5de5993563e28a77859e8a2e5f99dfd4bc64f7a4c9dd5fab8dbd865bc549ea04a21807b19af9cff45ef11599b5be4fc99ab4a5458bdf62babe710dfa7f8d07acf3b54508b8278cec39fc7d3500bca0f5357a51881014d5dc9ce1d55e2fd2625ef195c9d10c0997a5a9e5003fbd6cc681577c55333b91de98f761bcc4f5fef12a2548008c4d956344b1f59b15e02aa8d6ea55772e916d47a016b804be5c3fa8e9bd37d75cd80316db53468cd1b02c613bd4c85289357667bfb2a77060bddc0087192afc13cbadf4a76e725392b3c809bd9a4922cbfbcd5b494945a2ee68b31659a62a3d48a195111ac4868e7039f075cbe77275a566aee028e73fa007a4f56cccf5dfac577c4a84076e884a56ec18155c3dc8e57395504160e2cbd86d27763709d7084d181bfbe2765c9451d64bc7c10fabb8a1e326c542bcbb1903ccedb39c63d0355fd10ea173e939d2989c2d0c45c23562d6e59ace68a70132ae1d9ae499c328a964c28837565c4551e1480942ee989dc1c11ea57c2cbb528309d74b93e689cf42e3b1ed40cc14f3f38b1cad0972105b32bc0ffff0cd52e3b5bee5c24a0cdd852f81eebf22f0de6d9b80fea8bf9d19528a7d6f9719810cc5bd1d5765aa9e57e87c34621ec33d42976310943ec4b2c4a666233e12d8836373431c8eafbe91a365c4420cfd822e45fcc39ce0b11484807d58780c5822c307c0302a2540daed86602d82f0938d45a6bc4f019aba492861cefa1c247b412d49c9048190309673d1036719ba1211d9ab2aa11c72d9525f9046cae48804c5ee7b8d6a2ed82bb77c657a1af2476b08fd67c9b66c28eb6fafa076a5b29299559d2ba8716b19f661367af23556a11788e90bd448456c84be1f8990f5d1a3ae9615e7c632bfb78342a06f59ebaf622e38f393e6d24429e18dabc156dea0c86ad716cd58cd0d22f2517917b5c419344ed24855668b9fea9e23ae89dc2aa2e6d2d09167b3caf989098bd1fa49b057700ccae3d783f9619eea3534d23cdaef486d14017017d3dda2794af736d869c2f34b9a1e6833209ed0b28ea4aaa802fc3c6d26f6a082b1604abe694b151474cbb15fb5a7a2074e3fad35bdcc8e3d9f0521596d4309f3082a8ce82c858fb6f9c11526a369ccfa266165ce1d026a1d8be0aab1bd452530b9de3fa7ca8e22e58b672c4bca72b04a1c75ce317cadb7b29a083002a73570828c84aefd424b8160bfa5a564de306547a21454d1ff46869208335d1f499aaa400d926b98628e134d6f97c6fee5246a5c3f261f613d33c4d4f05df4aed6275c9cf2bffccb8689d49c173d145ab3274dba315cd0c98a5e36d09afb29fafc54b07fa9a61f2f010d77fcf945da7e737895c15f595b848177316c13ff6ae1c3980b929ada4eb81a6f54808b0a691f4c239d5b510e27245c56470ad39e7596ee402d0d1d8265ddf894c9052521cc17920e6d858836a27fbd3d8a55725a4075b5fa8e64e5f5a1621ecb0b6da8feacbe0125df55d8e3547c366a83c0bf681d8d0f3284d834cc09fedcb2b3231cb644b037fb018c11c2a6558bf67e99b6f74763fe070981c88eb7eb096e7e834a81cfb90570c478482b4e9770d14891a30d494ef260c3f51707c7ed300d7212b78da16ab956fb9e1357fe8bb89435db63f42957ff05e40dcb691cc2e6a079cf50bbcfb89c812b5dd172bd8ae02dbc2bd108da4a1c62681b17a0780b33543b1a013b0e3f2626b08c6035bd5ab442284111a8899fd4f8c58bfb629cdc7d3862a681658703e5f43baeab754416123e79fe5065e0b592c44cefbbbf94c742ad13482e95e594268cc3726b00874f1b0f1a7eb63182c77b5d9658b36b14eae2827c7ed2de5ec21b42dfd9885bc08cd98a667ef6fd5f16a59ec829a23973c8dcca04cad40bdbff90e1a5d3ff2b9d8302b2adf318cefb1e9d5d947a04ff321ac835848a3bc299f042e82515698356e1fd57aa9a51f0caf04d01fe1bee01c61dd369ff3c482233648224bff9524d6d33df8157a0ef9a7bc39cb55b538d6b4120965d209d3eb542a0f6a7d4b4f347735d74c471eb99ae2ebfc347d595ddfba0b98df35ce39f8215e0f3eb0ca3601f929808a90a43c9c255bc0d5fe3c3269cb8cee7ea7c675a697869bc4d4ac048753f7c3eeaed6085c82715905115224678baee9c39de99a0fa62f5ab3adec262ed32bef06b26c30190bd8ac68bab2619e976f4402db2888b63178608d438fcf51e4c9f3f7d2bf211b7c53499fe22e9567b81646c984a682d24a565cfa882071bf4c19e9d907c77db57e5b3f351ba6e602a87d03c8578e75d022243b14d50b3765cf920da0326c542b082c03ada40b172237ac14ea05fcf91e9abdf3bc7a9158234b41d839653ba8d2048cc457f822cebbda45124c7cf9c00e162d117f4d8d6e9190e89fe4f2b9750243bba4af66c24ac6c72f02f12c07348fc99f88e4e409ec94ad42db8112f84a241e77c3f4ba655712fd8c5f7b0cd1d5b7a45b5a2e5a490d1088202298163b4e6963cc2a3ce420c5a2c2dd6329c24ad7074fe2c176aafc1e3ddd48146c3d432d40de45c1c8e9a3ab376f42fbf2e7bc516b7c9a55e54f5f75be5677508bdc3402db1ae00f235227c17ab536cd239c8ed354d0a2dcba4f8f4f9fd7010493a6db5534f5441ec3a9a49cad89e682553ec00be925236d81db80ab060da24aa6d0cb7a22b9c50d3802ed15be8d3f2b6542b87dc752e4964d4998de3dcdc95c00479f03542d3e15b276fa36101282d85fef76096aa9d662de5b1edb568861daf33ff41ada7ae7761b37bd4089140f1acb13b71a1523df4acc2050dc379317d2b96c20ee2e4bd005b6bd615d079d19de0053eeeaac643baccc0accc147f85368c3f45bb8a7023517571c9f666c7c8f7066d63426ee5408b80a95a169505d49d93013220dd18eb56f25ed121f59a50329c64043bf2085759cba1fb65722163468cd90c648cd695e6207915730b5499e4ebb1b37fd779d90fc0ffa05bb0044763199a06601e25dd9b3e9084b733ff78e2910b788fe56d7e4be1c73a859ad0411938f1143e6857f1e249a37061d68cbea2f323af6bcd4b774aad346715aad414376dd22b68227f4b9f25da29038a5ab4b35007f37bd81c15118e3d082b50d53119786afa15a3153255bacd6af860bbf940906e1140ca8234001645c034a50267359309c55a5038d3c5fa222d40987dbf50913abed0841f29446750a566eeaadbfa7ea238f5d3831089170b6418d701004910d868d701b7f4f58c3d425bdb7fef4d347cdbc5b06e4d25b908d408d104224d97b6fb2a59452a69464bc06e106420724894d38992117f921b79603763396d7470cc6947689ff22840edd6a0f210d7cfaf3bb0c52ed55ed9259fa9166b6e369a9d31f494d46eedc2bca0b21fc3ba1635eb790c5ac08a4ef498f550ef5e8570ed53a99633d1a8d6c9aa3d12229c68edf4d22bd0fae81fdec6c48b6ebab4d0deb38314bd3afbdfc0e93764ac99fc998f5dcceb1ef71e5cba27d5dc6733b1bef6cfe6dba01f1b18fe9965c97ed5c97d26236d3e5b434f1b197dfd56418bb0ef131395d4ed8f215d8006dd664f04eabd29edf5bc75f204f66752e94f165a6c33564b623e5ce4e863d299e3e7e57f31d8c59fceea153fec9421f18e5679abc1af76ec72bb97865d4302b9d8b7109e48149b44bf41ec8e32fd0272b712a4b2ab7ee9cf427cfe93fa9d53219adcdbc5afc66cdd2c49f9a6466d6b9dc1c65f7f8f80b85f033f9f3f27736f36abf699f516d56ee419bc93af34732a318638c31f3c136480a4b8ca2849f9bddd3cbd7b905b8ef481641f74816432ec6449a1cd5eb25db5e7257c6452efe88e3df4adaf618e6a3d1c8a69da3a1f24d2fe7bb7c9fa393e9a76cd49f2c6ab6c9f44ee34fbf6dd776e2dcf4905bc7e3f6b3fd1897ddf6364d63fa1eb7b9ceefe831ac93cf45b7b3694da6e33beafa9a9e37cca6ad4d5fd95dd36e69e49bbe6d67e3b6db74906f327d73fe94ed66bb1c246b3cc8f9dcb73b9bee98a86a364edf96a6dff4a453eddf4cbe83973b1bdf341bf269a6ed5893739ad80edeedb17ed476ba3f2ee6dc6bbfcd45f94c9b0edb30fffa8d931fe353ca9fff206f14eb6ab2c953beffb4ddf4c1353af97734b29db4dde8d9b28ddfcdd2581e75cfb6f12b5ffee4ac8afee8dbdf5f209cdf35355907ef68dbb1c14fb3d98e351eb2cbcfb23ddcacb6e2777eb3ed328073e7639647ffa02633bae2a5f2d24e0357fe06ae7c29ffd21cb03bfbeac13812b5842c7c8a96dc2417c67d47b4883e3009efe91f9675b8c6bbf16374bc83bd3fc36bd3ddb4367de773d4e2e70ae0be235af45c4c66acd960089fbf6cfeb27d6fdceb15dad564d9a576646bb20bbfabc9a06b3668e463b6e3182a4b6a4de6836b5c96663e7cf7cb43bc32eeb00fb6813f6be80419e974861eef7c520e4927c61184a387238841e897c34c2ba294b9371a5d1763178d5042d873f93b87b9fee959462f1963942d8830ca8f178d50621af52b492d528b94d32fd3b2679a26b3c4f5f49a17d534190c8e4654464aa3bb53888db4a22a5d687425b7c4f5d329fd4b93a17123e29ad7c5dc75a98cccd14b999b97729323b1989357724bf8478aa4be25fe822df1d6edaf3caf069e337c2147e0a3440742081fdba1cb44a624f51dc122e8a61a04d893d112bdb0e9558c9fe14073e2099ec1fb62a4e38e381befa27eab18ebf449f70c9ecbe8e39f6845c0e9637ac5e4e33f93ef7a858b7c6af794f4103719c7d15e618f01eca30d1b0cf42adef42a6e231d7f7927d68e84e013031182399b08d32b13c7d2d2abf818186287773328aa535aabb34e85dddd3a153ef6de0d2e98e6e229dac3b44b248d4630fe1d4b8b85e95551acdbc8f20fc74560f7df2ef29528d35ce42f71b35866b1778b3ddb8e455b0036ca8868322817b31ca457f19f9603ca75cb8cf1f38d81f42a7e092a74aded255451ee3b8205910b71b8b005cab83005c63fc07d05b8af06ad53b9ef01003290cd0229ca2c177d110b8c9b9aa8ddfbb9b143bf23582871e3eb88ef875911d52f08888f6220fe422b9da96a8b807092a8f58038ec275ec09e8c8e427805e12fd7c36725ef067ef8ac85f7d23dfc850b9b880b3b041736111ba383437a3c15bbc844af1c0e893dbee23cfc8dd0a7933e439c352512b5833ed2a721f4814a00e18153e014a924a8feef1941c1c714952ffda2314629b3f854be94111a8135057c341ad9eefad7fd75c137a5f5c8d9c4fbde6b2d30a614c21863b4d0a9cf688132deca7bfadebb9ebe17f9d13e5f81d51d1261517e37e79cb2abc9a0f580bbc7f7de83f0bd07df839c09de7b0fbef7de7bf0bdf7de7bef3df81e8431079b01c3485a4b6b692dada56da161416b655f684a6c8185d7ab27e1bf7b83c3c220e42294e9215a165a4b53426b694a645f645f6845d9175a165a11db1338c1094ec8ae10238cf1bd54139ad0842d60cc1c238430527ed90f4e428d1913baf7de93344229af18e57cefbdf84388be36cd26e01a42f0b589d8755d578c16c2499de5d684072184451fb7ac0ee1bd1763ac813a32c608a1bfd2bf4a218430c6d8a54ab54d25c64e995b51f9a14993791f21845a768ad155ba78427c42c4a8c4b226c15a6b94252f9512c00d3f4a6b8aff4877cbeecdb29396c5cd1fc6e8ee5dc55030144de6c5f85e15a5ecc4543aa1321413d4094a96d26452190a06237b314608638c30b40c86bf5b3725b901efc8164b5cefde0206b7bb572b3a25a7fa05b71f15b9149b4412b1077f7178192d7d75dbff11852c4e80840a44c861350b6e7fb51db5352c77d52bb642c66a46fbd8e28816c11648a06a95d147b628c1650984fd6b17c7febbebe96393d29fd4d2eb3bffd1e8aff7318e4de73aecdfe8ba14fb1127319bf56ac63bffe28af88b8e454a5ff7758dae6b74494ae5a4f4a76b32944a3929a553363fdf3a5e38e2a944119f5f54fe15f6e47bf21ad9ee1a8db0f7eee8d91df33eec7afa9099601be0536efea4d7755186ceed23864444315d0411918f1a940fa21f47802c2104b8b9e07bd5cda5527af51a658b4145b9fdef3a0a8459af1a087b32beb97e7ebdd9b7f86f45655a8ca8f051f735e73f9ebff8f0aeba14972686445023a3691411c5900d307ec8c96fc9bd20b05b72af05dac4396daf4c50fd9959f13108656cf85da368faae8c5ef5ffa6939ac1d2f26e4a5c5d4ba7a8abd50d6ab21fb8742ba05be342d77f6549119b6b46ab5771075dcd23024291e844923804843be69ddf6347b6e46172eb8086160d2d1a5a2b63a0a1756918b2e2c5ca92953154e112ba84ae2a2ea13bd2b9947055c13b3b3b3e762e17d1f1d1dddd3cb7bb8bc0828970134ce4721133c14d683c1a8fc6a315a1f15ced47dbd18ac022dbc97676b26ce76645329d97f9c06286ce0c9d193a333ec03644f9908b3374ee0c22337266b4667ca00afec37fd0f01fd78db0d0b80263bee0ec71258c7e052bee00ee3b5205255a0ede9caa9f896effb831edf0658cfb601b283716d37dfad3b7019f5a9ceb8e232d0d9cc81cc59b939952fa36dea5967770eee4baf98f732367e3175af6e14018f6b2d309aa9c4ef4742a3d0bd730f9d29b7c7c1a5cc38462258e7e89a3a512a5a5a7316ec2a9a89c4a4f836bbc5b7ad6644aa7120ba5414bf474a2416987c3a5ae0365aa4f839ee8a39ca45c46205009f7e924f8c69e2b59a2f51f2394e78f271fbf1b7d94291f553160d8aef4a7ef6a8ad5a1b2312c0cfb52d7eb48d9ef67311ca809d7997cfcf737d1373dca7629fa27ce26de93c95eafd9f43d7d8742ad76b234257bba5aae3cb136dd8d68d0e01a271d4e6c626dfa62d99768649106db10e324cdbfef1a4ded33ed5f74a0ec8fc996ec50ea66cfdc7c1d7ec9b8f2754829252f407b99fd831ce5b2ca92babea271e2a724625c02b9e04a3ac98df14a2ba56522269a2fa9b4d134fa877d499a4c26abbd69c524ad9b6c973dfc371a914a9c4a1715b3367e47a487b6441fde91a521d9d1fbd2b54373fd6834db763897a5a1d49aa4644ec61823954f29757901d48d9686fee86f887ce0fc9c724ed33391c9fa60661f44edc2d30733d1641d1f443ca70f78a58ff9a3bfaef7c76c87bab4fa8a937ca8bfd9ead7d315965c975d4a69579ffe131111f920f2116b105c7a16a780406ea4255f5ae4caa7d8531bb505f08dccb6ab6feade8fbe6aef1b655a7a7afde9f4f4df753dbf8953e9a2565b935d13b41dcbc87699651b34fcf09a2c4db526feadfe663b16ccdaf4adf2b989fa261d4cf3646dfa966c87532d0d7fbc7ed198a6111bc9c99199d9426ec7fb22a39945448a4a524a66826b989e76367d3a9978908f514e522a257d19e326ae546a8252229009d944d1a5dc8331c2d8726913314a8b4d6ef417f76e6d1759df5f48ef1ce925b73da671a4afdc5535fa92a3924a29997eadff6aa5cfdc8ef7c51231cd9a0dfa1b2471f32b773dc69974ed5993e9aa67931bfdfc2a537bc5931b71d7d3a73672449a903272a3688a02db385031148c31c60919c2676e87cf0b6437daec8fa88ec5ec065e31b2434d866164f115d77818d9f8d8e4628c5326c6b8e43a9c391febc0e71dc8dcb3109b198c96c55fa87d9681d1be1f51bddb6f6e7cc859c93ed806f830c623ce1df5b01bf11f17aaba1418717465df8e79c6fd4bce1403464a3f868de69c7394c5388a3f9ae1794e151a5c237b9e32a8c860bbbe934a4c4a1d99ca4f154b335f85716e9cc5dde776fd364da33259b2700def58e5fd69700dfea6df5d56fbf7a44b972ffd25b536adf2f2bbcbfeb8ed503a948ec395b66b159577cdda74cb658a7da5c136f00c56c5aab447fdf31316f61fdec9f0edacf2244631393d0dae21bf3beeed0cce32e8801463f99ced5a9e7bbd9a81860c9a8c6373cea96269b00dcdd29cc2759d7aa88a517a18b64ba56c8cafc02fa1d82e9532b128fb7ce5644dbe914a3abc6d2571cf57304abd69b4b4c4683b9b18af166d628f5eb6e7302d0db6c13b9b761deedac7581ab1e57636b1e58ea0a643d3346d2eb1691a34a0ffa0114733750489995f4abbb49452be941c3b8b367dd9d2f0670f69c38a4a5d8f3de6ae7f23089fc2a71472cfcdbec7850fa39467c73c4d314b333fab0d61d75dd3f9d97735990e19db0e721dbcf2470de01cf821eb5809a3d4341ba48796067ef6194956d8411ba41ff5c8c20fa6a7ff43357de93721b09ff4f54d9ce94bff43b5aa7ed43f16e94b6fb2aa36fd0ff54fff83e951f6e606063f92b458a63f591e424c5fed8d101cf34df626fefc1bd9ab2ed9e72b95dba29c1487207a7c747894e888811982f9e11e5492807ea2505f07ea2c2215b9fca422ede242bd622ba250bbd47d56f5e0140c821ddc9e41eda25a80dfcb3f85862e1371ae6405da9667519d4b2ecf22d28f0bc94967f8ef6a4a86ef49e19ef7f35cfc1938f9327027afc2913e853bbd8a3341fd738f85ddf0e79ed210eae8b1df822acfe0bda4b8a75d5cf05eb2772770709d8138c807665d8fdd9869cb3d303ea619c02fd27212ed04979355c03ddc93d2fecab05724276c94cf00a76090be9ff624d1b3495139c53d56ca5f585410fe4481f06f4e2c24d91cbee22fed0d132e085ff1477143f88affe9a259c5806058369619923f3d42edf83beed9d9fe0736e33772f8cb7c7fff21fc057b579231eb86bf3c5690d050919216c93e16dcc12748887f18e8fa1026c23d33377a75f585d3d41484417803c23ff90ee6fda870f453b8eb555cfd189ce96170d8a7b8d1a370da9f70d93f0d7502218410b265f941f543faf37fb85e5a1ef2af9ff6ba28fdc782cc3d0a21c3d6664e2eca975540afc087d6b245d1e010c2ada6562c30ef0765f219e01b4f6c4e4e7dfa39a6bfa2899596d2faf432fd85e2dec52e4ed59453b53d3d0e0b33519998a03e46014317be9c0c4152849015774238c4082bdc2c08090f076ef7b870a109aa53edf290182174e1c9de947e7e5b1cf22f7b437ac983f4f42bc743080e527dfa3c4a2452b5cf579ec43d16c6d96361dc636d8f359393a37d0e16e18d4cc3380a872084dd63c369b8c9a0f97d806eccf84b0af7b068cf3a2a5cfc146ebe8adb3e0647fa140c0d05857b2c8da7e786af385b18965203cdf972cee72181261010d00cca9c7607201a3c875783f769ca9476a8de877742b13939dbc7cf216d5254fe13f75852568b23be9c2f5fda1b92891302597ad5d2a3cb521ff38c856bb44ed45433f27d782c6955fd835b7105137c81c90c52f9f471c8a7dbcb6f8bc374437ad3e3b0a2e92b176f6b3b74e05b7a1f1e2b7e6b3331857f7ccaa4f6a0f6ed52dd83fcf83f987e3e2bc1a9dace3c56498bca40d8e7e43bf699c979be5252cda03e7edb696faaafa09e3e0eab72f0527f898f42fd0967c265bdea61cefa37a7477db53862b4b087f8f27f882fe7f338d9e72bd1fe30df6479d06763daaf666774942c192a12ba0134c47b344ef7c0705ad6211a45f5dfe1065480db182328b9fd949f60221cc56d46c2ed26c06d8a0adf816817fa8d53733d26e9b72623c47cfa98742961075a4a98903032112fd2cf45fc011f36c285db2d749bb768e2070b4d345016825ce88cc9dee4c7b86cf740f4aa26a54585b62a913e97fd9b1f8820fc855945e08ef785cb4cc4650ec1e5572423447cf840a9223154bca80fe8ba7dd4a7a5f0dd9cb3a3b4dde468abfe7df7e9e8a87cfed7edaa5755541605b48b3f118bf373243e46d01fc41f6bd9a6a89d44cc0d7f91c157ba9af25d4ae5bb8ff1dd4af51d4b07f3dd4f7c1938f92adcc9a770a88fc1a9a08a53b1529c0ac2e054aca7691fd333708f2503f7582adc63a5708fa5e21e2b06f75830b8c74a718f85a59ce7afb785616161ed9feafd107f52cb83befc495f5ad59b8f557a427d1d315cb803246ef77e6652905fe4bfef3296d13e7681f6d1604ad1597a37662382b603bea6a9faff69289c101f1e2b657372e29f7c8e7cd4639ca1708f856d52544dd576665a55ff7c1cd6bb38a855b555f5107f3e8ef8d3de0831f99b136b6271c81b94c561993821f11fab722a48e25470e372b2cf197d0e7df939d8e75c9f339fa571efc2941bbee25c8b0e05c57ceafda446381c71b807c5699a0d79af993529c8560a887882044fa0207aa0025cf820073a28c1149c80c2054f80e0899d931f4c1081144ea4200a413e50e01770122609600ba86002841042cc8b2b9899afbf2e1d2eaee0819f287e8c20a3c91650c42088b0051e58d193c516a6e02dd86208d97d47b668e262f71dd9a2063eba4cb763dc6e5ee97faf86c7eff5eb870369e6b03bf63fd8b2b9bdbdbddb8790f0fadf6b8e8ba0a85dea3227b9dcd1b0526150221beceeeece291f72251cc054fc323a968cdf7b0f8893fb4cf235c947d90ddb0584dbd9cbdf5927ea15cb707d50b9db0160453579c356bfff75b067b88d52faaed6279148241289f44fe357033f89f321edbafc590946df9129c6e567a91c8b7a07be67379640e3f9717f3f9a87484abb340a2e211c70cb619320db19f2026911444c14a4b3b92ecf8cd60c9d0e40589399203a13813508e26e55baa8424f83806ee42d05b583b7cba8fcc8915f8bbeb2a457ed435c8f34b47a15774c1ce8d007b13513a4c34410e5d6413bec6666d8318b1981c3957b10b79f631ad6a46ef734024624a29c0922523bd609520297c829bf10433120d06b262806b5631dec5d5b87135b2a55604f468411c612aa5f54bb38aa5dbad76edb0a57b40fb0289c18c1c006981352e8415683273020b40fb221a03841834ec929e94b18e3d54da8f006f0be2018485989acd042176c104208b72c84dcee57d11411463806122290b8fd19929691db0f4393e9540a09263a4ae014155f68e1f6a3d4e08b242e7cf82729f6e99acac1065578210b3e8e104317acee7d89dbad30d8ddddddcd25a8ef42134dc6b5b8308a30e800006110baf0533ec88548f0420c06b8f0595a60c4d0c4858f434c08a87847c660c585bf43bb68327004821d9c08008622b7df14a476758911ab0b9f664b7870e1854bc670e1a7b44bcb85fff065acbe90830b7f06fc82186e022efc922603619e167460fc80c21852df85b70b2a70b8fd5548173c48494128a1078ca0c938145ee8c2edd77ee53a80187b4106a914349971c54411ace006bb5ff6c68aa9ed689596056fc4c8442fb46e07e0f64f4da62b075210d48521b73fca256a576314d08522ae852610c2874a11800ba9545751eed08f16471811c4470d5e20830991f818c113ba82a563d9d161e9586e4baff861f876cce2303154bc602ec8e08654bdd85691aa35455b3b9175842173c708e8233b2e903081b38a002472618315741091a09f20a05e7917a6b820c211f04712f50817581851d42bcf084a7ae5dd8ed625a8540a920f083926f4c415bcf8c1086650b3fb8e24e9b9dd6341922871832437c8742abdef48122446ea76df912446187d51e57d479258f1823abaef48922b16f08120d47d47b0f002241fe88015b02703875e5149e90e41fc078912daa54b3111b76f38a5b57a4baf7a09689dad10e4c0b5022d1ab2407e2b7ff694afbc2a1972f43dc81d89b6a0e43e243b4566dc77640b462e4662953fbcfe2aef686a553f75c1d097fa5ed887e5bd786be6bdf0cf8db7fce53db743f48a67b8dcb2e2766f49bb8eb77a6581165cf83998aeb8b0ffdd1c3980c008126affeb098df40a7ffc429dd45bde7a37f013af06ee874a1806437c440b565cfe16d06556f7ab96cb82dede32a203c433450f127c9200848a214a20c2c5e3c265eeb8e316b4e0ddd0cf0e839deb3f526ee72d258278ab889129627095b89d5bd1add5edbcd5798b7d18880f90219c8222f9917d0891d60fb786682d192203ef064fa2aa667e567e5433f1e7d5d0721de7e9f156ebc781822e336ce95c6620975ffef80abfed9ce7328e1cfc3f58f00fd601075454f5a17f5aadab82ff62402e95d2ab540fef0647a2aa5ec6efd02eaad50c6e154b8b02da45058343dbae7aeb3afc711978b0f79c5222ba70dd629a0de6276c55bca220da85ad8aee782f3bbc95fed4900aa4bbbb9fc0c37b49c1acee7b265c87e9afe9f9018f8d15b7ff75c793c4ed7f53c6ee4df1887680c1ed17dc4ec67df639e03de1f6f56e1062017caf5783ab7ef0c73e65803deeeeae9101dfabc121a352290e3519523f46225151fb796cf1c748b285a5571dcbfb793fb51eae6edba5dcb74151bbcafcddfccd1b141b145714341dbcc7457404b93c240ec5cb0f044fbff08f9f1a252effb8fcbcb8fcb11fe4de0d62e4be7e43ed2e85a79a9132b4a445ed7f5647af80e815f7f773eb75da055a869052cb3adc62eee7d6fb08d906d12bd6d12b6e6ee574f3c48e3c95e945e28303fc727c70f93d9eeaf761ee9a4cd42a4fd5747840525cfabc3d7ced33bead71292337026ddda2764f284704a015193b15efa5ae663c29ffcd39bba7b69313f294990d57305d0b7f2311c10a6e97722bd46c3b40a16474c7afa3a52840757df641083726d487cfbeba5551df3d82a0776016202c3e294230846208a108a584de4f0a275fc5c58fc1d187c1cdcb84c39ec507080c0b4c8e991b4240da4d09274a160a43faf893f4716ba1d4a784522d2464d2342270430bf90372089d4c5192b64a7af81aea336032b13939f465b7c0db6de21e8b512429e9cb78e284c0d7b8d347cef4a509f8e7785fd082e6f24f8f43fec9646f48af9ad92ce9b5e8e0e969e9e48061e9150b0ff790922405f408f48a4936a4e79c768121942328f52c52e7e44d9cc9d32aa7aa63dac43d56cd112434946348670892c5808e9298a3a4e3b797dbf3306d5eb91bbef2862aca1621c02f9be59d2b9e161c021d7f9e82f97942a03ef5aced207dca3e6d07caaa5ac8c9eef0e1b172724e3e7e8ec9979e64b71702bfbea358491f477cfa28a577fb60ea16549904af53334039ca2f897530cf6a0faa5f2109bc170ec15bf1f78fc0bba1dfdddf17d759e7d5e04f91d4f8a57faf86d39bbe3eca35d5ccf63e3cd6666f84e030f9ed6fe49ffc666fb63779d50cb53742502c8ed2cfbf39b12af8f4da1b135bfa98469dea6fcfc3447ab97dc9f220d96753787e808610f101d2a3f3d3239ca6252afc700ae32f0c43a79532f96ef596c487c1d14f71f35138f926272813eeb150dc6369eece3c30546e13068583431837000c0c899a3613cae6e4c854ca7bdb4cdbe388bfcded377b234b42269722e3fabf544ad543fced7fa06ffa611ada608a7a785eaf60af5a9bc939bde95b53f5b06da5bf39fdf6258b83f4d2de989e44a29c4952cbc314a364a82848080806e682da901f14294ad3a99670f873917661a9bcbf219837340463e80d696fe8fdc8c0c93f811123b53d9606036488ebc831836dd474aa946230303191c77c2cee57ff86521fd351dec02fd10221a190c227a0e3d5e028529414e6fd00056d2824f9279f13df848442a53c313d8d4f7a92bd31b13c4c382c1ea6277d89e3210487c9aa9ef43c4e369fcfa8146ef66439eb100d0000000000e314000028100c078442d17030cb533d133f14000c88943e785a9a08b328486114838c418420620c21c0004360680a46ab200058a94c6615efff580384dabe2369e1b2f1f9793833fc1ce482b9fd9fbf693cae090b8e2bdcca7b8da570da1cc8910c942d6b96a3c8ebf3f12e1b9756310770a95f49881fbd48f4de0fbea466f076015ff961e44a74f62a3b6ff82abf5d6316edec222f6921385655e72653e354d987a4e85127e7c064a2519e33eaf90a97d795e6099861ac23dc964b4b6e63bb269c1d104f9aed8bc7b104bfe4d92c82638cdfa9515285cb9a266c27e170af4fd73f6e765e10334c2eddf90b2b0c9758f992b80c0f40d5fef28acd44531b79e52cff7ebf3805600c2b307405b21afb09657e31f157b5683589bc2f285ad043192a7c3f6154f2120aa240945cd06c14831a153b5594b56bf01c79a3fad2610a45621f78f3d8c5d71d6312eaae31a9e3c09901011a88b3f0dbef8cc0491d546a95cddeca5b2a42192c49fabcc42c65788a205785411ea7b4a8e6c02556bbc850e093980dc7a4a38515eaed460588be19a819aa3d108f4bc7456cbcb5551a6569505d3979d4849a0dd048fb193f37a33f9d549f8841ac4439f2123ea2a704a642b2ce180b8ace6874db99981e220691210145fc53efa76ea1dbc5ab0b4577bd1686d147ec4f70bd8c11e5223dde268d7e0fb2b77f44fa064794b75347b423ff3c431cb4cd058d3101d4d21cae95f562d8a8cfc4634266a70b91c240b9b838f2f9c8fbc839b2518da640e7ba2d28533685f2d072380b8be37b26e54a6957234d40aa1d156519e798d050b6d883f8c745ba3e8e94e51ef6c42ec1d952900cf2dfd53c684c399231fa60269bc86cd3581da3d568ceccaef62ad608530f98829d35bd7593699ee7cd9639ae74e9619536f2e16dcea9a86e791bb06be03032e82a28e07ead6b58190fc6f3efbc1b5cae9d654bf8c6c3900ca60c32d8df4c2ca889676abe67f81222b3765d42c7aa686f93a80130f2f34eba06fcc850a876cda36322386bc7a4e6d6e22c1f65cdee4addad071a6f9c7a4c7f7c07c37caf795693a53841a842a1be57dc8b82a7f3c45f3ad95e3e02b77cd4f842e87bb0abf1c44b61b240cd563942868183dc3b84983d2f69e6dc5a5602b9ba6ac245efce4c722717f64c6e96de12fa4897258dbd6c14bc1a1f3b52446d0f374b2d7ce79d5bb66f97ce1b1087847a1f1bd01598de42fc3dfd9b0dff75ac7552a252c2865cbe59d443625ffc0de7c0c515c980293cc93c3bdc3d9c11bf3caf71ba131665eb72a40a18bfa9fe1cddb56306843a493fd6d7a86f202b58dc0b31dca21e4f6561e06b3f5152d364ca4ad80248af4336af98594cdf8b026082e888f2574755f922a767926f86271011d129ad52d84833aa453752e8edcbc25a2b4924c75524bec891ffb18a2ff7c0da88e2c60c8bf7415f96d4bb8f73ba09f6b0c7405fc7d5de49223bad30c8739cd8cb4438ac7aba1f421cf6db29edc8c211cb88e33741af8ed9941652637b59414439907dadb17b5e7621c7ab276738f7e4e00d5912e9397056adcbe7f3bfc905ef365a0c5fbd4deb640c25a8875babfc266867c9dc776a3ecb540ee0b3027250ccfc59af037f7a86534c0e1339ebf0d2a3e2466f599397ac30488d1f49b17b3018ba7c1f5dce32222f21997e6703d56a80bce48ca3970c97f15ae3f337dabe0ce630804dfbb6234a1d900725ae99c77349c7cc8a0295c142dbbbfc6877d3ec0a1eba25831fa03a202ab3cfbbd4c13dcbec270d0410b02601b80d9130084ed5c5ebc8882ea0e211e760f05d3a2496e8ad7ccb2f6315280efb00b2d3113288ab5f8b5f3deb7205434fd05d834bcfea3062f41baed06acbbb747aced3fc8aaae3116e75699800a0a4080cf3bb642045d4c48a6ad77eb50c09f93e19249c086a187c4b059d0734f92f13a3bd65f8965cdc902e34ca716e7ed19352b2ad0cd1ff23756ea52be58cf51734aa1d7c005575f0be275497bd04163032244fc2e6697c3f438551455067d01843e1ba5d3cd6aaa5e002aa3ebf57ec65334c89c34cfc2f9e86b96dc0d3c0e0c41f365fce4962e28f436f1b7dd1d70ec1b8e157c79198594631807fc5b142d983d7ea8bda2e927c7e8d74bd402052d7eed0b1fd7824e026c30e49506f5dc217e5ce4a424326cfa7af2694e20c0e694e04102e8b49de14f947e7823a5de895084e589fcf50ba02a7786a69b843104a1a10ec4a2724d2fae2a41042ff493f539b2c0743889d4b5ddf8823ece20379c7c31ccd3a5e4683091c03889560195d9d92c68c704a426675ad9fdbdcc583fdab534c3455c5ada471d3ca8f465315d1b39e653679d6e3089bd62355348161d1a2387485a511d7588db67b7952edcca1e5782be21fbd1d13f5311a5e50de59d1f8e7a430dd2664e87ebafe228b4fc50dc27ea21d7b7b90de3e1c3151794d5dcd2f17ac97bbd03eb2bb4d6d2ea72860cf66875ac9b004d7752fbceb6efd7f3b926cf50024dc9003e971bf9749813fa23fc9261e8c34ce9e79bf8a7162c8fc1a52bb008cfc8bbba8728430bb6db3d43ee9492e5c69ee24c513f90cfb387153830f99127679ea76898f635487c82a84008c4ddcc7001372a5201108d6e36c4491151b133329c28083926930ee9a4b994d44a3529bd99b93bc098a48749b8bf805ebca66b83566b2436e553452b43e14198a609f30e47b0e5b901f25d447b3f7e069878485b385ec8e55f0b523cb3c76f28b36ebde6bcf7ef8c57cf35fe421dab6307aea233e9c020b22a02a5e90176e6e725a78b0d85b72348b6419161684e035068c2bb0c09b2f5d9461ce1ea33dcfc897de3e57b2846b66a7eb6d87dbdaf77090c81b38849d2bea403de2a8e0786d83f791bb01391ee310b7c68ee220f054342b15d92c2e374a0a7184c1f9299763e906c326afe2fa405f27d47be3e2aa813cd69fc0c1bcc641140872a5d4196db40609313ecc1c8085c4b0df65a4a12d64f36f270e96137b1d2bd17562a9ed4ee4f125a444fa38b15976d11668a3f2d0fb6d94b67b3d15009bb5018ee3d3df03dbae7db052f3458dacfaba2e213e5129109709137e042b90913cbd30e6a70bb753c118e00266458efe8e0c10d365cec09e83e7f675756b3b3215a77a4d25d748aed06fc32f8906b35c6da6114e794d0990a50540d7a53521349dd7b3359279c13dae4aa4c75308f451606cbf53c21be7dc6eddcf665bfb2837c5642dff9d7d91268613e30b32a3dbc5e2e6b47ed45eb9c7a0045a93a32a6a4553211493f6085dcf8f9ca702368d32bbda871f8a4b29c52301db0e6d494d1848f27531afc5b5b7843b57f351caa7a6482acfa3b50aa8c72a4106d0f916acfcf4990e93e6782b5469073d4b00a9adfaf1a765760202f2f7a47f060ee63b208a8b67ccf35cb302b344e14e545218cc42fdb89a0814e76f9de20650f13ee67fe3bd7be0a967b808ce0f8b3d962a0ec91ae79b1f887c4e676f3c00a221ce749f9514fe21c5f708f16fd0b0dbcced8214097657862be86678be569ac13e3cc4379fd1194394ac0234c15dd415b5727a5b4c17451f739a6b3c04f95aa324ba33bd0177a3bc6b11a258c59e7024bbc3dc5b28028722676861671e85381154a6885371ebd84ed0c35b62159e86bd89440d64eac39e83282694155c87c4012e0ea89e66e7972272740de11a0811bc8a1a83de7ab4bc6a533d9d833ff1faa6cd55df89141992e480be7dda1ce658f966eaffcf8bbaeb253d2462c13ad0944bd353a61afcca21155eacb85053da036a75d59181a05f21027e228a166f3034a8334f1d35cdaca74fa83d16c40c44b528adfd0ae1ae63f31446ad6e0a832f3aacc2e04250c672dd951131637423b0b2fe645e9d1ad704bb3c31704fe2cce19465e78d294f4ef23caa4c635710342c757273da01b7d3ae92447d7ebc0ea56ec381f71af563cf034e6bc1269ea53769e0a0764f7915ac6c08907c419edce569c5f0e5fcb40757f9d22f4a8aae23317dcd6414b21ff7c29a268c1d76c56b59b8ab7ea50f03ee1009f3eba53d3e11a255ca26c11e06caff4b3188d25e33eb21ab38ddfc11c8ca85fe5791148a483daf0b6b9508265a39e8e179b2084c4de499d7c0732df7646b534361bb9f4746c502335c268ad1c981ea4951bc8f244855fd92625834a9bafc0673d2637eb82e761661bfd83679b0478f115ec8e6d7cd4ba7de483be3e53ed11fc54409a3553dcd4b08cf8193882d51dee7528273a3243ee6d4b1bc3cadccac9284126f811d2f033c8bdcbd3d6b137f2bf4f0e29be28a971ed268f03d35e62a0773de442c3696b1e09e5e3394d87108e8625fba125ee2e51a7a85f25c4820d33769b4dad948c0bfbcb359ee34a6dcaea99c5a6b407c74db29e2fdee281866f8ffd12e725f73df4f61ded2849d15e3a9c05ac435730e83faa7141c75232e8a909042f9bd101a55c613ded7da971826d0ffd41a24e5469cf04e0714e3b998adee3bdd4102d15e4c3eeeb4284d6b4ebc8958b81ee9af9af3da8925d632f772da5f8c7253b5c7bdc692f1d7a9c9e4f67b888421a4712d49e843b3e42ee8082592f8f032e73822c06689d6fff4a843cef62585a1741621d0487d23fd90b144521908f3c0270a7cdeec4024f989dd150d6f3438e88b3f7a5c819af40a2be098999253862023151ebdc872e419f98dace0e76ae4493192f3b4e087202b5d3266f073b4f8bbf41b7d535d5e6020705ddd30f915ce78c8050a64c184226bf93c3ec8d8b0ae026734b2a802d413b53006d24d80ba4e7829f8998417cf606fa161e066008a6862e72cfa74efe55be8674a99409029b8fdced6c8f8aea84c7fd07655e86b3f566bcf771aed5fa18162f098e101ed8d0640d7b72a4b7c6a0de4d7fc7edddf78f62010ab1a19f0890c9c10a94fc11983bc44c143a2dee7e51de43d609383799b8395e22878b1605e9b9dc3f0d5279b9463e9fd6f5f2b73c2bb62c61033c8203436b07266e5b52f61c63529a80be87b9bd151918319a63c38089af684331ceacc08aad79586861a3dd39c894bf499c75300e71f37b8aa3ebd575b398d1d13dfd6e634e9c7eda8aa0c4fba4f21dc201710d61aba387a719a39e63f770ad90d1fcce0018a0d96a5a3177a84a08339e7115d4b1185d1bfcb1eacd82bee100c51c63734fc05ffb9699e073b3dac35f885f93a72d14baab08ea700bc025c5a1cf72ab8f99b99f5fb47103d6b1a82d86ecf89e64ef0044c033261e15b86bbf090ffa0a253df6cca0fe4075dcab6334ce586133af109978a27606c37c5074c44e6f3bec842183b6fdeeb4af970b9db335f631443926b61031be2559a09952552047a12ca8a4d5d48a1f65765677a93261f346921c935cc0542b31faca90e113bf2fb3e3bcb2fce30cb97f553cbd1c9237a4d6480eae8f132de54f8c33b85f456f8e0facf57493b712fdcaef292c8eb5567f0d383ca1a2abeaf56fafd0d088090edd4fb26e7fa0207fb03c05c3fb00ae2df58c54b638647cf21b6ef02217cb83bbbc82362d2e4542500bc1588700563a61f226135232a39844e7b0104739a2535a5a3b783e70b3006acf3bf1a9686ac75f6e2af6de374b2a399adba4cf0ad25e633784634ebea22ad3ccd0ed2b7319a0d44494498f789dc13b0ee07e95d15e91f71308a02b6c947491c9fd2ff1973622bffdcb1ec246fc2c701e9108b2259e359b9c9b1f7bc4954a340cb27c3b9ee079603feca15013b2008809bc96ed71f9243d5c10637b0729320dba6f09c505f6553244b39cceea296481a155567390d8448e8fb398d808b36ac0bc3d78b396724299abb27e92fb153889ef2e0f6db4cd9d672b87af9ae5d7bc7414f493737f1a699c588d6fc2908d8b18604e9a37d15e8bfef3050df21ccfa4a70b6f2656d62f717a391ae3de27c07120a3712ef01026d5612666fb15de203e90c192dfab65c77ce65201f1cc3625de490c7d2253d9ab7a7b5a13cd81f4c013058e1d2ff85d41b08671a81aa59292a66df5cc4f70b78363c656fa1ba8808f4be9570da94992677103c0390568813acfc70c4bb6eb58d3a7c8e46d45cf8d10481bca766aeb60ad3715351b42b566492f77f7ef491225b0f3dc220c56ce341cd82be4e786aec65d4cab81abfa6fd2b4239f115986473dddd14b7a1e6c052a0bf76dc79fb4c92496bbc476244ac91d7e91460c796ea8241f06c762e726fa072fdb07179832d39e37b14aee3d51de1cd0ff99603ff3b1a9a16a516fca19b7de8a883f73b3b91314d9fc4b84de45e0a894c9a382a79b65c9effbe3151870cb5c65dc0d038fd6127f643fd43ec533d8361ae3e0ca0b5f9d1b5149297447b6a812db9de51b94d95c924b46d29c93d5a20127d6e1d2534d899bd19e5816835e01c5cd7f01e0278554535f7215fc54a3fb6c15757b3f178d1fa50b0f08531c65fea8195bf8d0552034cac996ff8ad59c31f6a8873a0fd1f92c166a0550ddc376283fbb78cf01822c9a304d8b519a9730fdf058e3670bcb1a25cdc43513e41826cdb431b084a94713a19e65a3f5c7054192b47a430cca16edaceb5ca3ff69b7e8a0de27bd9802767bef135c6276ab35039136325cc9f601c4cb9d2ffc3618974b863f9dd40fa168597519aee1f8d6f427f03d0e2ec25bfffea39d09252f5751b5f5a0f0e160a4e67767a8ce1495028ef0b755ec914c8b7ab00d904d4d28a81ee1326d7b3cb52d16273e77bb3c1afc28b4248835f81f8be241bb5b3e2c5105f284c0da0b7ac24d2b6fb5963193cf99b8af601d04626d989fe0f3b1887fdb8383114e8e7cda770e16b20c62b33fd626a51fb74d233b17ec21d08a2f010f5bd41f18bce88b754125e6ff139abad2c08c059f2e79406326d62700a9da8d2d7673e42f07880e43bf84319e6ac74cf39f7e48b8593826780cc2a4ed20e389e3df4b0c0d6fd3c9b18ad2b271b4f9e620fcca152cb9bd2137255376cd3efab07b1159aae35ae066e1df466b01cb29dc4824ba865cc9fe0d268c5a7e52d97b65693215b244f3ce6f9ab2b33872f8162afac74ec3acb9fae550de179c7ce3e1e005b1444954262b012ee85981f44f4b26f7f6a74e5d884791c77e4af1894009da4bd7ee15ae13870c465a953b6ad2c4acf144bc9ca9028a5e78a085d4566454a06740a653010b6408fba1b24bec52ea1bfc0976faa2ec3481806d026ee0ee5137a6c624b6cf64fb7345ab90f5c466dcd5c4e630aeaa8e59efcb33d9c8b369cf08983d94799e8dcd44ccb4cab7877157cb0dfd9455cd4d707321efb4d0fcb376c229f6e5994aabae7e4b1a80c3c29a305e62affd4a14c1f109a862953f924b413d9e1256c5f3e8704c483cb92b92a832f33d2949ac9a69067b38fed433cd33345172f708484f2a106fdc22e7971026a59bddf900f33aeed3e0f21ba7d61c4b1412c78c911982264123c1410a51c34401be71ae56141b5fe3053f63cba098743c9f99947df70ed6f597beb54e9929321a93dedb3aa32691ac132bc49cba816c4662a87a56447d552c831faf3b29386078537ad17850d1f78defc6c21cb241cb01baa284a75b40ef7b8de061c72999a3cd3d49a8c6c79a29bf29445d3f196f831df2d844f7b40e0b1f05c0865c2b3dded0fd5010839b4cf99068eda27e16cf2501d1e1080dc106af4404f19164979fd575f9c48893fc01c1b12cc9b176e6ec03680e58ff8a7777cd558544905e17ef57297ef2c9bbe3a634a06ac14483b17530b4c0486fd0151e4985feeff420982fd29957037cc9920081ec1265c0b50dd53b76082cd679a5d2610908d963130ba3a02c26a68035aeafef27a88d072e268618049fd90c45c9cdf111954689b433967d85094a4be261143ae9a44bfa16ba3ce6255f470c5f819b102cc1ae1a4d810652279bbdae97dccb6e6b81a969205940c06eb451d28bb12c0a165f12512af9d7ba211fdfa4e7e806f1b079097fc20792f63eb6f34c9b30979687d2b1a227d46de925fa229c0689f111ebb108302f38e8ec5ee012b33ed7d32feceffc722abb9a0a9ec22a485c1a205e38806c6017d77b926eb7f2971ab9f44b079b676edcc6ce252fcfa51b236cd790baa405413e66e5c72741705bc2674206b9aa004357ce71874ead70d9512bb3072545a138a79430914355da8ec7636119654f9de0e905c0c5e5d67d22c1c8421cf9d695e619f44277a46ba3f2b54d5c53993355fa559c122068eccfdc2f610aef7c800851b7ee9c51eacf7f943131b6a4b974f6a9fbc21a85f386cfdd627badc57881e278813ab100d276312ae24b7d48fb61717339d42fd6bbf87d2580ddc77334b53d8cf65b4c5060e1262e846b46432fdbdc5dc449a4070bd5cf8c4ac1d1b4218f47964df4465230f25c8cf54c80297228d6b0eda2a9a36fb4b1391cb72d3356f4823f22343491ebc35570d0fd4f3830b4d441adb886db418768aff443d185c80d3d9fbadb5cdd03fe1447c3a867de6b341bd6c7c120d0166b1a6f7347f795f52aaf5273e6cd0616007159bc0935a2bbc0c6b6e8be400c581f31436d0c0ac803de55b7a0a1b3f2c68f8950271ebaee887e758fabdebb0d78384dad2c4937440fa810103e331c72c9bbbb42f2cc519b3b83e8ee83812039e340ccf23a53ad06942e30107fdb3f7cfb71da168cdf9484898e005aa92fe8bfe0df243ec92d792151d52ead5fc10c9daa3c6c4c0834b095a2458b3f1635c80fa55cc0c5b532cc0e00db4565ed330b7ef89aba3e634705b62da68252020241e769e99be36391f82466e92673552cf2412749e290904ab9851efa6f814b0bcc39c62535f4a72ce9f993dc882ab51516a44e405bff2ef65636ed8bd5091080a596ee205399e83e637cbc56af07d0ecbed4c0c8a0f2cfae91c90d6a12ab117584fbc4f44e4751d510c0aa0df09da42b0b957cd1a0830f3469c2d8d3c1dd2b5870b3f051d63b33f707359b9f6f0b2c56a4955872f651d4038c7b495189cdfd38221f0b528a39ab2b8c1c2e0a28fc9b46089822a0552bcced5d3e2c343d7c7f1ac8eb9540565144e4f891649144183e8b86a282e318129a0a28652ead76c6ac6344828805648ff5cf4367118f1eccd5d81d2ada8c2e011d02177b5d975a34e3b2a1705e4c9e060076b350c9e9ba7401bad57aeed391fbe9437fa74ff946440918a49866cbb4bd9d8fe148c9c3716a937bf1b446c1a7326491c9deb8f9d4b6dbb61eb5d056e6abf76eda2178cc5bfd85c72e4fe71233e63b62ef5a3e9299a46cb8c0981cd82c8b2f4dfd65e59ccce54b8ccd43457007c601f20d64dccd28b46572495d7a8026d0100794400940e202085d639cec0d61e6f98a1f078dcd5ad77bdbb98b46aef7de92a6c84fca34889d50bedf1ea751db9803252e0c57c097bc4dd6617f4ce7311e5b7ce01033499f25eaf8bc85f1694766db53b4ec9886157634df4806b53afd40dedee22f4ae4bd3a44115c156e79e743cf08c12d12428cf37fba37facc673305beb4322bc0370e740c7a02436246fc9076a4a76f8f4dfb08c0f69077aba97d8a549c0721472ec2f5665ae4e83c88cfcd19789490c8af21ddb5722eb2ce21d957612857cadb6b2dee878da19a371e84440e8d4c5cc36f0c0a33d5c719a205bac5d8defdd693d62c9bc4e8160ca40b95e206408b1f918cc900cbffb8198cacb92e568747890c017206ca4370ada2b197ddf4e843c1438f5f7d4996b4bf4f4df24f3dc2849a0c021719fdd9996ae87fc9560a817d0adae360fdeba1d81231fd4047c907982a30383b30ebcb3bf37f12096fcbf114a616faf4f83435040c1d017af3e8f5e5d8e11ff8787d5365e8f62bfd8301da3491964ebdf4e2badcb466bbf751e7204c60ba918ba533387ad5526e86738c941c427ef4fb5e7cfb401cc90107987cd1dcff077903cea60d642bdcbc0b268263ab58f386dbf5ad1abff328ba5996cac8bd38b6aa81387e3b285031f5826fb2b6b2a98e86fbd581040548af97425eb45fedacb3c08216994044a33c9ecea129838ae57a025ef2049748f284ba9fb039c9a9382735c213915b6edc3c96364cabe5b0fbecc5710dae181f357157fce3e2dbc10a0359bd7e04d0983416c3aa01e85b88b887d8687eb7d4d198ba711896017c0799ee2c83486b32458cf33dc9828351c5264975e9978f12cbb0999c3118da6bf590dc27aabb6ab1ed721948f653204b5b05713095fbd531d241ac7df16a358d1bcab85519e6035d1f846cc005f224d53aa4107a087d596bf291df8753143944737eb8ca258ba4d20910ef20d6bd2197e8bd1d164e1de2d7c50b0b0ce108c9ca64ac98c59d1943685e766923946943397a3ca4314ef70531fdacdb8afe89930e8be54d2481f924ae2709131026143b2143b1c1bee00a2deca44ff42b1db5030ccc4742ca6519cc881e21f699379a0d5f14aa480003dc3c0923da3556036e53a3e93b1664e4cc906cf0c4c43a45adf2cb717a94ed4337df6aed8e270c689cc32cc65aba6c2f228280918fa2f108f6b36af0c986fce05fd3075657fbbd174c9b0ce58bc75224e26990561d44ffabd839e594c9bc8c5a340d0ed96d0ecc61781cc164e3891e6cc2cea1b191b387c6600e7129a2a16e0c3636076ae8179fef1b1c7e46912f66126ed8bea43980f53dd24b98caccb3ea4d79e63e40c57b4b0dbdb20a30394a53fba358e212dc39ccfd2dd96653026e4b99c05c99a7278562746c3e5c90c104673a1778df455a66ed6a9b6da230b98509f901933916055b4b09612e6e01c58e5e5d25fa4ffc8ffd23f7bb54af56d688d2fd07f48551959c11ca7e64fa0cd2231af9a1610660e5a8af0bb68699c01aa534626841a7ffe462ced74cbd5f77fa2786665459c4be725045fb2479440685031d7f45011c5148bed003bc37e891eb1bab3c4d6a980e4324bed881d73c35e2462117bdbcdd0620878a164c5bab0bdb779bfe2e818f3d540d229f70990867da3792cb12940b1062841ad1d0b0bf5958d66a51fa645f54aa0fbe57e1480b9214aa4924724318665d0b379537c5768b2eb076ebc89610b2a8a37609e9fd5933b0076f38a8f602d536e94a96f1f87c09fb2053f989b1dcbe706a920301cab438b7c72907a9a0082d36bcf80d85f68314f54f91331e51d89cfdf5b1aff4edd1019f7164f2460c3ec16f5bfe6487752a613857f53a2aae4b28f89bfd16b568066d5242005c5df99f39b9a0c7effd2e6ac27eec6849cb69ae726402a882e6379cfa761fcb2e12437aa281c6f50ef326919db05cee753479f6e7561366c542262b185b6a0d5b149a751f85aa321a14fea16776321d598df5b40c471def14468c4532542152f0d37ea6c9fda0c4d399697ea740dd94fbad975675fa44403853865df013fd26452699b8fca2174c5d089ebac8281754eaaba475f3d8f3f42ef9789f076e3d29eca7ef30385ec617bbff7d8f4d6ddf05845829986bafb72bef278be1c644cfd0db6fd9b9f3d18ed16aef3855c3bc35c8362e4529d625cab141b7402f0ac141a4d4a81605930b813807183aa51c0981bf92662bd83fd6fb99911f1acdb9485160b00735f8ee7769557b668ea3b53fdb260d6ea68195fcfa2a6b5b7996d5fe856335bf8d8455e6cc00cfa929f445d59b449b5a38d27a5f389133163ff7fcfc70771b79dcc07c002666c63173a2fd1fe233f7b71d1ac80f47896017f1c777f341d9908b8aca2bf61ebd56f4f19688e246c93148c5dd00e20be2530713d3ef74cb34c63ad4bf8ba5824d7602edbb227bf59c73cb36fee3114d736f7410fe39a5cf3e02261178152f12219e4e05705ed14c4a57f5f5010e2501640a0f959c8e1a1a47b857ee91ef7a6bf1f9ec63011ba1882b464c89861aef7925b5fad7dcfce7d20498deadfe2591d4a8f24438bf495720d1973f321d144a3313e1f22ce484188292d4c58200674ab0bfa549003d2834efd22b8cb6a4233846505dfbff877d7df63bc5593119d99371bd8d8a094c5879a93f64acd2c28596e7c9e6cc161e9c9d978afacc5cba940f78eb095d38dddc5498a0a869b9726e08820c2d1c629651ddc9b80e0654d992c4bfc420367eb79b7770bb0157e2d41c76885a85170d6f487069038488b51665de1fcc463663340c6722a55e96e3d5c1b0dc1cb1a993caa1b42df3719c53b828ee54a96766f5c53063864765143577bb428bc1e2e8d44f0ba466e87c2842ced83fbfc5e80c6b052c7e0479f92aa501bb3601b427471d449595f1a073c3a5bac877be313785d2bb787744248fb4427bf07a061583126eb4cb25a15630ad7d00240436339e2f8e6b499ac837b23772dd766724e0dcf9eb46632ef3d681c578a403babebba450cbb2c60c8a4db191dbebb2261ad346dd7b8b331d101f9dd048dd14a30228ec4987d70f68dba8e6b1135179f9369beecea0f47c64fdf09c19409f7131cbdd455d0e3b5503c3fb18f48087a5a3601ef9ea0810fb90e14cae0b50a927fc6b4f20cb47136b063fc1e6e479877a60aece116e4553d19f7c6ddb19c4541aaf7553e52412e8854c295a11da78666f545619d1d77d751fd798d7c97d71fdb940ca8378c8912e7c9a57f0bbab79d8db63cbdfd1a04c26e3fcdc17429cbdaf4d099ec19c871cf1e4b07f46b9fb13a961e391c02e51d62c8b7cb6d7f5f3d0c961cb8968fb2784b719beb8da01ac590c7d5588d62619da50d8bebef22cb23a3ae0f65312abe9c8f5778570d0bbd2318a7e8100654f8686b5e1bcddb005e33637669c330b513fbd834d286393129e49295a8c11210a2c7accd1b8f25f583c38e54ea128542e5a65b00b48295d7a28a55b2016d6273b41cad2592a77801b86d6a85de5b8eb515eccab64444714e71289386999a943b1eda6805b530da328b9893b6ae0ef7a8a71d6828990e86cc59c01081ace9bee530e7d4e8cdd42acfe5aa456f1e1517f7965c1c4c68ef20d724b81e6ead753318b9e922908a11e44ba97fb7aa1ea722d0d28d5e7bf431df3bdf38ca22cf5f6db46f757cad655ea0d39a1bf2a8c4214135a666df1e6d869c298349c8ab1b40eeeb8f7dc2b1b9500fe28992af92e7fd2e4b6a9991072789f1ba75450b1c24be3563a1b7d3fff935cd12a29f7e9f0d05092824d657689b09229a6cb7622812cdd8d6a2ebf8f2eb5734d7e1c80e4a3c0146db36eb87b916e3aa9c7b9e680d4bd048e01fcf366e02b94a600f1318faa267e878ada0d724be87e92bd0035042f656638fe45ecca489cdf32ea6a64d2ff397d39f1c7829b6f20690d8c35c7a6b2b24d0687af63081454f082471ef55f480047a95be36ad8656b0f70a7a94ec5542af470f65d758bf8cbd58e613e9b1cfd6010e7e562732b94f092025aa6702b3b1c0bce806ceb55bc6d155f32946e1ecd9f66dd59414eb420ff066e2f63935ca7c8459e76175065dbe18b07d2eb0afe11169f39cf28adde70c656c2f1c772c094583d464af9983ccfd4168dd67d11d0914ed3e62f541efe90627b5a71a51583baab6ea6cf3d59511e07dda7325641b12bcddacd95347f8eb993e5dfc6e33f5d46cacea898b7e2f3e17e48fcb7ab50c99c9fb893edb00b42ed7b53fac5d719cac4fb1f05b6df67e90614f9801a45ddaf8e6ed6e21d40c7baeda87fbba0c56e7340c5c8774e5cbb027f5937671151d954b0b0fd88c57e40098e27a4a3a71989c903e0867d87344bcc0a4d81870f42762c211889eb1c81021e24d8f83d6b28f726adc694c0691d4508a9f176962293f33cbaa6a06d1f749badc63771223d41580b7d8c1b20cbc05cb97e9e397466ef0977af0d523a7129e4afb2039904f2b1ab50765bad2dc24869c315db3594a8abb041ff341d8ee2671b4e1931fa0d78cfdf01718aaf0c780b98df91b8ded5ba73a13fb23d91b501dc13eabab800883d4b08ac83a4b6b1d1356c450c3274597780aa7395c56797e434c5c9b49c10a15460e7a291c138004b39bf659ab9266fdd910a345fd7f19412292dc3ed3099458f093c857f2297a22878a2a9cc36686a6649cad48ed77c97cf600a947a7980691e284488b3b632ad625ef547e2c3ca0b7cc37352ad24f78efd83dab4deb6bd4836db5e44f545ff77f5dc16591964358f7204896895395c36f349e245a8fbf485b003bcc8d47730924fb4966e726617b867fabc304797518bcd8a7182d2754252b255982e287e60f4c757ba99d020a743fcaace752c9409ced5266bb89c6b60cfaacc9fa75361f677a232bec74a28a3e0aba25b6b8a8edcb8e7e290f94d834cd4e5a9991aad3ffc741b80c23b58d65d7a39012631f692cba3c9675eeaa49e7a0add0c5c08a9b9c37fecf5e95783dd8cfd576abcf586856ac053dd717c514b959bc748421d8d407a46b030eeacbe4dce12d0f49dde04faf2caa7eef6c58c7dc62a7186a60c59ada310bcc09068c5075354f88e9e2141ce74de466201663c43ebcd7bfaed2a22cec67e7eb8be55fcde240896c58c1da614faf3cbca328243cfb1565af9c20c60f766f91e98439c1b5bdccbc40f16b0b2864dd2d6c4a6d121329d7cad65919a12c75a39d7b3417b9dba360fa3e94a3420c3899387bcd5a8bd958b4e6a2012c3f793a07d72b22610fb7b931bb017cc5a3a3a11ba952e29ff0e58afc19853ed15b1ca3e8f07f5cfd43a51ca7a9d2865a8a4a5b732b3f6f9131151892a3a56c7064b23c09f0f0c3131f45958e39a29aa2cb2dd1f5a5764d80e8d28fe76f2800eef5f43b9ad87d29423cc6fce3b4d80040253bffdd87ffe55a0217312147965d1e9982b465c31be81c32796f04ab9857e06140470d8f669f312a0b9fdf71251abdb6c51aa4def3e402ebfb809f1bf246651b3e3bfa555f3318589e6d5e9921fa8c967a1e0f2f662d4f121cd2deee62f511dbfc41049bbfe1cf75950fed989dac5e2d926fcf507da855bbbf38435697f6c167d3446bccbcd663ec18e355e018a9444d4a22f670a15fd7aa08954a146825b0fc9448e803b65475f06081d3e0d5ee35c29b95c3055dcdc5ece25acaca2a59ee52dc9ddfd22aa00dc81d45b92e9cb816a5bba4cb41d13508e9e2c220f2a170a9b8b46d953f48a0071a1f1af06ca991d7a4e656340566d7da1123bd0181ee643485e56356102f7558d81705082276205e2ef102559474acba29c35b4c8f4d55f16305015c3a8a59bdef11c0a9168a659fae6b42794a96701a2b6a845dca0aa142659ca2ce1e86c36b3bf29da6b9bccdd3c3feebed10a01a8b4eef5c0db07720c5d944b3f3f195a98e7a2ea91265e825400b2aca234956c08eb1913d7af2f264f08380cb61c952c62bbc0edefe697b987f1fd57b43996ae83901458bfbbf470155fae318ebf23962b015d6775819d3b519a8328b525e83a9f2c0425794b5040904ae7265323e3c6696ee5a1dbf7a5dcbccad40ec6f9d1fc254eccf0968b4b0a3018a52853a38e3d42308206abbf4111f0c421586e1290e94403c4b5bb2b9b45585a45c2b75c471842f4bd6afa73c0f79dd5811a971444c88f0fd24e5434a1d779e0f3a3b6cb6ff742d53dfd9636d37828ebb5d875944a0d16b31a2f7832a14466bf307f4bd3366073330d7916fc4a103ca9d5ce606a3a2505789cc78e63a7dc10895aa53f47bd0e8263ffaa39a1052945eefe81ef474cb4ffd214d64a4160da5c43b09e6b4cf54d9d89929e9da76dcc35b6bfa00b61b4c815255806e0f0a50365ac91fbe77ca986abd12d2d0f85b4b33eb41110a5d9dd840e0cfda20cab6ee62a82641a5d47795c9f4833e9488b74eaed9f8eaa101bbed67a8672701d0a2e4dbbe67f6410dcaf8a1253ce7d9dcb0a6470318487b4aa7669f1dec280b5f090e13b911ccfd08cb57ea802215b87f7c605a16feae3cd507d95197afd4966088105c44d25553dd5dea00cf4930c3c85e20577b270b717f77f0f06a12b3ea22997d28f3505ed77c03e7eb2945ca77c07ae53fbc73885711bcf5ef92bf26db071ce34917bba36e491d357307d3c5324d7568c734b852af42fd569b763a13e00146a4c3d13920ba981d104a0ee74575eae16f57b6b60e28b2c9079e1b3f4c1b2c2a4c75740e6ae47b11282746d4781508985683054b139ad1ae5c05730cccb40d163b2a593e2b561f1234ac45896c12ff3fb3595847d60da4025fd1ef680882f7514d08627296b4ef943f433ae67d188706a8b71e501650e358f2fb4f975b8b106ba5de4fe1e049d545ed8941910101d07b3e886af0f493d91ca2022818bb6c0baf4c6d7513dee7e66c33a13bd66973aa69e846ac3fe72e3d8df12faf19a804d05b41774d6b4f52cf6866087f81c603507aad24dc147342dcdd818610d410de9351f5f1a8b38b7da63a530286ada80795bdf00e49184363d617679c37668d1c8a12f0e00ba7466e3cfb326907ebedd767459589ab7ddd7f9c8a59796437b8329e40225f70b6df13a3261f768a39f6f9571dd8b4b6df4bb5039b903ac214d20a1abfe69c324f67eed39c3753bc948475e04d7a27a15cf2a48f59bbd521b0d058afda5102914a63c55a8b44e329dda3227da0ffe252640d327e30d25b62773b8616062363d59a26cb3193494858ddbc89471e21eef9caeb5c9ab844223e5a89703165350f3b21505ad79ad09a304afc1fb5329de49c13e865727be49c3de54ccdc905c0a9b1ec19abe634cf4d21590bca40a01751b4c5e508589a0c4290e58d371fd32239a4ac41b1f1dc1b14241a21ca26e13bd1f89a193e2e2b06565ee75f7209d3bda5d26c1df98f81acf849954bc6f55cdae38a30c3283c6583acd24397636b460b0847e7bce99943177788fc3fe1bf53c163194c92716c3bf9f17036183d01208fd106d361ac08d10391f34114fc2b8d80058748496b58c2a6d497354864dcb81ca4631aa65729cf8f6db5043f225c98c5eea672d4ad51cf632d84127ec9bead032a774c2865b9fb3385cc03f113f0dc457050cb02493c1fbea785c8c8f16d418ed75e088be8f7313e68bc1b88c4a35fc39e503797d14803a01ac9d37870e952a90dc4522f63576a015844a99cf74741704e8749d945229cb357dd4e3ef3878a68f46a6bf51ca529d77c19971ea94d7e9d1fab14c031402cabf07aca65ea57b9d59b91acf91d7f18b7685781fc6238a626b731d13237d63666773955a1dd41571f4276ced6142beb74bcc15c57a0615c0b3b3e7ef3b3edc511d9da98836dc086b8e3077e2306ce37c8d3f8b8ce369a4f4505d2500557a1013ff431282ea858725fe1fa6f3eed49d52db8e72bd58bb16221c24957ce2c1b550d52647ed0f758d69dbcfd02c64b559924ef31bb34459dab6a42bebdaad3d1cea54d94725478f955493f53a9709e2a411c4ad2498c073cb14a426d76c3aad6f08459e22a856df1b6205ed613739d44059f9218c36b765c5991819811bea11aaef1ba95d879432f929d7b03762d106f5bbf9c4abab2c18d73ce8ac87fd40d7121b844a4d72ed2bcb2230013bdff42aa1fbba7c887407d2fd44244c178b01cb4c262313e86ff6ff27c53dc071d51ef96ee50360eef0631e31da2e024ad96c80337fd1b2f27ab847942befa32b191491a51d8144c4b86b324ac121275796827685d954382f662f95b39c0da7643b31396a6b9cb7181f232ad9e7283f7b24ca139cd3e35c4da865ba8a74c39a66668f6a56e4c0a4b75fd688e246fba48d9bda0ce41ad79d5d03cc2491b6015628445b6b9b2cd0acdc96bb0bd9de7d72d2e4273089c6029134b6f77fa5213749105456ed713218c144743b1aabc43950e4e03c087dadafd67fcacc0cf6022f639bf0eef14988bccbd125fed4bcea1a62a096a69e462a4a940f5e993e0ff7c82cad95c020aa67ac5dabf5d2761cdd313d2e6f4847ad6edbd383850cb853ecae5db125600c7313726a34fb7fe4fe2d9aa3be282729847a4bfc79dcf1cde6f23c323a64d134c5ad92c252a2f552baf014cca39a8ff6faac19c9b48b798f1c9c73650a3647bbfd596537a1bd9ae8163e10d83ffaa127df605e00e3fdc62b79863fa8e393d4f4b4ac281facb1fa587dd55c54466880cd459801b8addf0f205300ff31a8d9c3df5ca4d55040153dd1a25d1e734b51d9f446731e5bb541825e3a19af5a23a87d6a8c0c3ae55bb411ee5a5ce96b47a6c7eb7197dc184468035a9fbab1d6283012e6255594b45e56bb6227462bb5c7c4090a37702027267200d81ecad1c8ea5f3c47d9982851f86096070398ef503a69070654dbb82693b46372924730d74900f2c7fcf3763e13fcf645055fae30ba3e815bbd5e4897ad6e45c309576a6faacddd2163e9d10d0df06d21606c2df12f61a2e2b3f7bd29018e395d0a692c3b8540d3b142b847a30f96d0f319e820dd1acc98580abe8509a7ed409e467e753bdb69dcbc9e684a09ee2732f10a541212d1efa1d4208c17a42ad623f4eaf6abfe45c901015f97332d2a878a68c60095a6481d6ba3c7123bab0b1822be7ba1685d0c2bc1fdc1cb2be451c5a99d7476c67b6b129a600933e6e8851388fc5b06027b80a9d8949d4855cc5d250f832c9e01f66592a91af40403e79a326eba3c3810799e438a1b66c1fed61248a2444155b69996134059f4deacd0dbac108de722c1d6e1a50d741584077a12834c0eb76f4111f8d3ae85540539485271157d410245e6bda8cf483809106603ecbc633b4ac827b5588932fef68a4270c285e4d9b1c19e73455e5edb3895c2e090db2b1699e79d0320b1eee0be02bce4983a72a593ec7fba45bf1e74138b4ee4e3dbce35d5c131267b14d4ca490e2ff92dcb3f50c0190b18e0d96616ae710d31a073970231913c546c04047b38d08b0d0b393aeffc750b8970582106c749d7c021a7fe096585d2eb4e0ca28f77b12910fdb030963f7b18405ff20be2ec76e75269fcce4e458c93dbec1500e22a8361e9cf10f22f91171f0c7ba7e215b139ae4640cb405e8bcb2cc4fd9f65d80f3b7004b4e1a52490389c5f19681eab8012b81dba2ade793a8904af18d5f9ba6163550ab0d80cb3751dface1561faf717a8c113cc14f465b3c6f08075fe6eb4b41b6c8911a3c93d93dbf8d5df54dcfe6a9cd17550461f3d0a49923390dec98db6381bb31f5bb58607db3c404b809dd7cc349a2efdb0fbb752853a98741a4f33f92f30f20386547c841b9b9381e06eb002a4e5194cb92934d6349c15385adb5549ea298b564828bdc708a9fb0c263927dedc4de47dd0ef8d6752d1e53b2971fd3623afeb66fee73a0d1a666238701d1e746e1f9bd95ca5c7520c8694370073dc483d12955f767d5bc58c23f1151611528eea82c3d50277b205835016e2229c8616ac8d37feee01e4aacce959a21998141429b9027b088545473e1be1a0fe004815882a1a929857eb63937c839166e9a444919242aa1ff9487882c58a4a1c6058c92745d9bf4ddecf8ea1b40897afaa492c2ae7b72d618fa083017ed2523a07cb2a89a229f458a57586a4c0d9ef04cbb16f0a12a93dec5d525a5d52375f683e9305fc04b6e1e384d9c9e48363ba8dcab8ace1a89c69264b8a4905c786498d1f69f12c21c3b73a93b86a9c9f1d21a5d8ab420f7b42788978dddbb6e8407de23172d0b23ca99f2ef25755f82bb70f3501aaf6cf775bb6c34eeec5b88a20d3a28e613aec85f4ab6313d5f2238087f1f1c93d49c4e59bdc82b50262c05a75210c4fa88fa28599baefa3e1f14dfb05f4479c0b0870f5ab9b8a988c0c88f230855f822fd6a3a70a65c225269b37f185517fcd9da1a6993ab9810ab2f4e70ed3f0fa63232102a5e7a36906332715a729c5a9c18788a9c8a3b32e5322ba792ad05d2322b5efbc3e3f96bdcb14d61fadd32f74dbd4812bf5783ce0cd8b0f85e771c0914ef60da064c66122910f435d5ccdabd24a8f74085a3a90e950ef68ef8624ad063fbdaed262c029615a386e0f85554186ed149a13dc90bae864006ddb845f234f082fb36edc80db1d91b665936fc066a375990b0ae338cd9109f7c255decefdc6eb43b34de4149a23574d678fac01c0d57a673148c84403aede4e6d36643100ab90edd499b7eda42cfb8c16703c89d55a6d3a74992cb307a50b941ec9dcfe46d5ac96e8962911173c7e35e0bdd7e20d70d9254386741c246e31959e4917177e0fe26e0ec3a358e4f4fdaeb7a5d80498b7aa52aa16025ea553cc0470e759fd98cb3b439a9d33dd009d0949e88f6d38f80305b7a2a125145bf07fd43233312018aeabc9afe923713c985deb577c8e8201a128b2ceaebaa86497de491d8f9216fa957faa946741226e34062a0e809ba2206077dddb422acb36aa7597f05072cee1d54abaf7bba47a123c6c261a3d4fadab4c51143329c565d4871dc4d1c97c436b2ee80405f434cc1044a377e06e9272f7f3b84c7494b984b1ef3d0dcc38b1e1ea43e1a699e89a88d66be2223b80fb2d9df2e757bd2f329c719aaa4ab0fad47e1cabb8b030928bda52ad56dc478b1c4e281ad1ed306ec1a1537d68de8c720e5793392521cc28a009ba2a1a1294794fa213ffeea27118ba1ce92cea9d382354d89446f168b88948685b58e90902b736795eb9eea5b8b25d12db3604dd1fa69be195cda27b84ed51f0b49e7171885346ae2e184aa195d97130e71c9dfee70ffd6af293a9ad378b2e8ac6d44f38ff886d8dbceb83884e4ac4f4e6414286f90d24c75f810c97a778bcaba8887336370d030debfb443b12eea31ef3e796229c26514044c9efc8ba215f8eaa150bb83561087e0cdec5721b339942ab971d5a6b9538186c4f042b10ddd6e0233d63b4841cae560ec74c0a0dca4de251c567412ae3453d166d2f637cdff9ec2701d9d0f48baa0a6081c61ac0ed60c16cc8261f03ca11b7424eccad0f36d3662ca6e64970c2d63935b1aac8bdafe4743932b45a4aa7428f277335cb4d043475364c6642f091add0716ed37c4addff9644cfe1d919794eeda1acff0c4d0f42af5fe923404dba1f46b5e0dbd1f660ed0f1ba294c5ce4634c2486915efc4c13c3a458a221a38f915550974609418ac9a1f11e0b7a8f607462528a890cf9df3c978f3d95037742976c97bab2a1a6588c8d45c43fc538441248c7dc11e9ba0738427f962048be456c594c112079772d6dec4057cf3f18ac90bd5d2b8f260c3e2080f095d2e2fb01618192ecf86537ecc58e0cee204cf6167a33de1e0f9b220e5022fc618ae4ef57f0ee72a85e031cb67b7d31edf2e26a1ef57f93074e6c09e69673ee13680ef9896dbe496878796357789b6601d030de44dc6b95cd70bcca1962f6f5caf7a871624795d3945ebf7243a7f961936d3636186e265ebc8635279979f28c4a56b2f0707aae1ee7469417557740f55590bd49100e4f87bdadf54d8bb51512f05db42e8dad3e8e5a9ad4e1805b997b65df625a29b77719a06fbb05de559e2c7e8cd4be8dda79b491088eb7f56d6d845dc9f6a90d5c036c5ba2e46d00c1bbba98e57a9d3d45c7534cd3b9e18a00d8201003b66daa1f454d77b062f68da5448c0489cca7465469370a891681d3bbd3ad259c4a8f62a78fd7f00dc9cd4c04c4273997ca352cea3ec7827491c1886111642a94568d1a7f4cbae9be3531ab83e137dce3787967cec7fd6f2980da7adbdb888b1dba7f85fc440b1f4529b497188701887e7d07b6ff641602fdcbb50c9c916cc41c980ff5ab23a5b7214f4d7a1bf82580ad0f9db7adf19823f702143da8e9cada1290ac467d72d4dc86eb860747039c2dca0a6ca2b5b5f32dd43eb9e04e6c59c1b03958690f1773036a9f5728de58e515ca786bc1aa76343ad8cb0ccdeb9aae9f7694779f7051d4e015bee13107e36fc7eec298573402e223220536e3a9929ce584211e1a967d8c6d84b8b72f5d86ff8506b79c4c44cc64378e04718b2b532e8f3a00bacc8ee4e25963dd914fea107f57720c7ca89c90c9f141e3fe9b7554a72f545a892bce72a50c4f3522cd0749e25428003420c6c1db6bd162dea40ad516a7a883a14bd1e4a1c63df147058e1105f902f557807f57d15302c4c681c9ad9c646173324c7ce25caf50a1c1e9e1bac27e5c39198602029a45b3ae0368b6514169789b92fea2e08111256f96b26996aa95b62709df74fdef130441ce0c9fa86d1e683daac925ad62ff126129c4053353173581fd5d87e62769652d689b7478502b080b0e06401cf5c43f588627d1fff42789c3a33235187cd4d743b69551e7591038c17dfc8eb22243dd3a1818c82c1228a548e0b075d3614c41f56c453c5a706068adc44063342c8ac7d167785a24ceeb68621a4f68c1a290ba1a0ded9055e08bcb822aab7e1a6e52a8eb57cb2b698e2f44bd9f1f819c7aa1fa9f7e436231b69c8d0fb9c972482f475a569c08d210d339fc8ab4fe80f265b9dc5932f6ecb40649884f8ac8c50cc0599470a883f30edfdfba9f11cbd98daa113a603fb7d70357b1390e055a9236f907eb026bdc6f4631dfe129aec14c9d69488ac03513c5112ca5d42acfa210dd2c0e5e83b52f09e4efddc01f53695599f7bad5b9a8fb2d193526322ffffe2c70e0fc5c5c3c6d32d9cf40f01d00d30264d5168125ada8efdc0107b6259a65447c1ae53838c04ac5bc0c1bb3b02ef0964460b470de4230da456c81c4731908762b42f50c3693c3e6d65e79566576a48cfa381eec267781052d65c2fd5863cf18fc6d9038691fbe2e721c06543cf4555b00df5dfdc7d790145c1c344a565207bb0d4f57cb0a7ba2681f235b412b595e6328ec29e03bb55055ce753876b94c03a9b706ccf4f6c9a57b4d402b97d1fa606f3b0636007bec6f06f967bdcbf8bb92db69f73129f0c5ce19bc350851f4d62a87f4982d77285f86cd134e0047b05ac6ad9ece32b5aaca6a687cbd9bedba659199c12ceaab28b37f5f3b0b353e2b816e2d6ad0ef0a0832ca5c10871128ede41e486fa168e84797c5040ce9aa0698a9e5c12b35b76c27d722ac20895b3654ba039f91411f9337552bffbe3ee1f2df241c49bf481a3c5c7010862af380342d6bc8d65dfdec77bd90d01ef8067144b21caa7b0bd2ff931a10657a79235136a2a8cffa60b1de1d21efa19ea20ac7e30be43fd1243cc5b156252564179245711a9fb34478368a031396d2850d8868ee483ffc945799b686d51574fcb32c9782d3c15d585623383bdfea9549c958cdca53698f6410677291d525cb6480141ff1de03cad8c502c05db84ccfff1327527f7f77687bb1a503657877e37e5e1ad4f492813c760584bc88ab8e35b83216bdda280b4f3ffd5b416afcaae531ecbf68d54a2f78b0829a87114a54a69129cfab053653c1d42c9f4a23e8f869f6040fd4987ad00037d756de340d73e9fee30a8113953d515120875c6e3444372d0885be939454cf9aa93c49e93f227d74e1b124b6aca84a2e84140ffaacc833616930a4c1593d98d41c5ff3ae8817c9cb442cac52245bc4f021deaa8b5d1077b94baa0edd7baaaae6d15df935c8ca4f9d779fa3506abea693be21ba1422d309ad08a5e2ed4db2d67065bea67ae907240eae4eb9f40c19383b6d6c0c93ada661eb5c34910a50fa273179032fe9f035a4d328a05edfe515e4b730577a4f30bee8578a6d050e3d346add7901f7eeb345a55fd035c785026cd8786799f82a0892e0aa3f6e3a432347998c1e3ae791e5e8a0e5bfd048f5a43f57f81ad31485fd06fc19ed73bac8d9b8847b5969e1bb4c6ad0ace222aa03b5b963361bef3ed2ac4d714665597e6aff8d87573b73407b8908998a410700cdcd594a367cc51d1f449ae9d8bb2d7c39a007d3fcac4f5cd0aac262e17316016c7ad334e4bc17bf9bf540e8ff1364060c8145f88259d9134a8f98113a0d1860bce19d92113a52526c714de46ac09682e8d7766cee86c7162c7cb2bc42e58f3cb484c159f84a721866c9a14807ae69332026b5e0d620072b9ced2e1fde8d74d5bc8625e17b58a8227f3109d632ba07375e0606a08665e770a0dc8cb29cf17b938d71d205d8f17546208e4f65ef771dcc2483df9b46dae4f81295d97181427e3fe83fe0f7c27662776514379b23bd99e949ec0f8b142fd913bfe77cbc2efa9ea5c6be1953fd39d0f54a8bef8920befef2df5f50f2bf2039566e2e35323ecc8ad068e50021210774c1e318937b527b147d9b97e755bda925000753f6ce6e93b28f9fac963cc9e06d602ebe9641ba01336aa80c71f8ace4b0bd40ab6bef7a9f0a9496d0933fb186e9e6fc30401992873c5828cb687d10585ddd06b47551968daadeb55af2746ccd3281410adb0664b4bc4330f3b3609f725b6cdabd610509907c5c9ecae789d322c9e3e29e0d43008642ad2325823ca198ae0e5de17458aa258893e898756dce7dbba463270cc3bbc4bac557cc32e32bb760655e297f716862250855a91cda9194d08a864b4632286b450ea107f3916532986e3c80bc6b23390846884880c03e644f1959d3a21a9c9dc48d4bc8dba4f2ed35f14db3258496870c5cdb198e20ce440c7a7dce589a945601aa2885a513dc8c1e535f795fb55fbc21ee18332989013a30f686c8693e41a97c1640a1b0990caa0050868610094e6d11a86617f63b3674eebabac1301a6e5abc2f972a86f91a9bac1da9774055ed3b81d86b98c51a7a3e4395648b6bfe09e57038cc8057c6ddde8b94aef282bfc4e28f8d306162123d266a00de11e43fa9cc6b830ff592a71520c4b522c517e380bb7ddefa6bbce4028b63ab0f687f2f9be0a9895950932a7dd29032a2ca5932c08a76ef5412173bbc30d1a9298d5700288cbf87cba32c6c682eb7e72c592e3b05063c98c36f00e55b989eb2f68c99de50b869a7700d459ec2c201ee5c4c2b4abc8d3894f9979585d5786cb2491d508d54dd89d8a9263d2075368dc22752266d9883397963f82f35ad74ed316d8dabc19e52a4fe3c2cfec96edc0200ac9977c3f2d2740d9bdd9f26c22bc2ce6f12955e295d9db57e698bbf2c7117b2a5a1f513b5ab0f21cd4dc05e3b7b8233a16d336b2898df1002ec4a660544bf356236781052df20350194c2c36d534b66f9d03792098c030c97e4c341437c26a79fc4ab8101cd2612b8baa5b9200bc571afd60d414628b48fd48b5d6a6106855f4832762df3c390465feaab675891becea58952aa44573a1dfe522362e4da160d6ed8680a226ff443bd57a49c5885813d91463e8f6bda4da1d2444c444c9fa34e6ac9a3067e2023841bee124b9c50a9a44ba96fbbd7d3a817510b96d1dbe75d30dc7b887f43704377cbbc1e37d2a0ec7c988ad222a2ef6f5ea672c354b8c9be09c40c264a218a3633b2e17b809aee1fd158a2671b56b51e0cb4ca0a7684fa8b521850777b1a03087ef332bb9fcf9b7f33957ce24c25dd22b939c34db9519a098fe09e051c39269ba4ba2991b3d6666f4fb2073244b98599a51efe25b8ad896f6807d592b6a9d9b2c7c3b29198e01062a72dd821f24cea2abc039a347ccc0176f7678bd0cb1959e4b8c631a0abadb2a2a4b74290f7918bc50a57e4f65fc9ea3dc0360c256dd77fc96b2105dc20c811c2db941b8ba4843765509eab35b783060604b50a3b9d44193296ab7dec2c3443d0ce68c7dec6a21c768a472766b1c68251bcf058c4bbd1a42da5c9a0615f3a8f1e37eedbde08513f6971bbfc644237ea6bbc1f4f99209fa73f573c53b6d060c8423383ab088a06d1c8826361fdb16ece5cee32351f56ca1335c7e1404d7ddb54309ce291fc7671a90c65ee5bee939c11db1a846f0907547089d7a62b8b636b800f5e1bbc063d02724a8cef5db3ddd3eb10134edc649def795114a78f46944b25625a12048ed57d64f03305d157218fc556f2b844cc5ace5165efcc33ce5e592503d47d69ce6bd749791a7384f9d080155a8191cde34b1d297628373ef93f4de3a1a06c5554babc8a1c32e7f587749c11544099034abfcca898270e8536aaca94610460b28d52cf01272f7ca12201f844a7091ad2b1285acf009cc3930a76c8b82e2e43176bfa394f13a82d70707cd51638b2bf960b01ca598f6d4d012b217ec9247621fa9d75894aa8e856f6ce9c30c9e1f8cc85dd383178853d84678ef5563a5d12d547213507a2c3bea3dccc5d377f5b630834abf1306c380445107f1af497c04fce0bff060f4049f7c585543dff5677c4099c7e71ae715b17828649d13686bc47614aaa1109cd9835f2c8a2c1cf2722e0718b54a427ecf15f07d65640f7c96ec3e43181e484b206212530c3ae1c62f37b36d25461f6d57a19662da52a25d41b31e2248c347eeb98e4cf3168b2bb52cecd132aa7c21e9e454ab12f920c1dd3a2e746ebcb08b5f881afc97b32664a3ca969e02e78aaedaab92c5308331e03bf7822a29db0f4be66b75da2ce863f9c48956818a9a316dea1736994a0a101383d8bfa21f6163150919dcbe41dc30dadd2f9b0ee4c0a32c6c2e53c7d4e0cddc11ed7f365a60a223113330303b44b4bcf9024e2f91949ac4dea18727b1ebe4ce3de1f67d263c5b292b1b8dac8494ec5aac36f0d0681a1b9ae59c7fabcb498b0aa76a082f072fcf12811dc01b8af83676a00df07a1407891b37ad365b3d171d0bbc8dab7a42aad54dedc173d5731a784143ff6ee6cfa449c65e14ac2081e2f0406ac43ee40dec8a596b27bd4de1dcf542f21f4c7de9f7a0874b792c253494f0e0a00e1efb8918a17d4b1e8d8f9af826fbb656a71ec637541cfdd779d9385758922366692355f5d1a7f8979d6eb2a75c0bf00481d7478852f35dc3740190511e76ae7ca208f6a15f5328276eab0aa57d0b4e7f1c4c2cf7a82286e36695797f300dd687fd4e782bce2070bd73fbf9ce9093351f4002ea07b0547a835a55ff11164701d66f349169eba69b0e09f1a7c76af54d591037d83f68e1d893d8e139be80423711fc59a2b1f6b746fff4518ffb5c0c359343c37998215d8f08a334869c25d4d8a15ece72699321071c46e807bf0b944140d509b7ea76a265e5c33d88126a5991a7d78e002876093963ee76faa6616a2273fcf77391364eca86fb586f020d0f3d917b27643ac42bfc5d8e5a0076c6e357f9e0dba994b3fb0cd3c59592c1f17065c32917a67dfd942022554a5756874e811761d77043c0909a204e775563f89efddfabba8a1403aee9f67244053d98f91898b7833746d99a572423d6cb1b1129b4ff87dab854f0628f5d9ef43c269359cf2a18b6ddaf91dd7aa940f9d9b154dec92921b3c6ceb6d09746fb4e8a13bcd1d929af3f892a38993ecae71778d01e49f0b5ed1f9ac3cef7324f88a384b0f2a578585f321b9e5d2eeb84b5d7995b0fbb513ea377334e3155901d209181b41942ed8df7d3fcb144adb5ac8d64f8c824da1e27076d1a2c908620726c77475243d50b6c1ab26d785df9f2677e649e1ecc1ce7a96954ddbd3b8e6c24a8db15bee7f788d31197ea3587daf3906d38e7deb16ebdff4574af0bc36efbcaa270d3b57bb0a424df436c4101846f342b4abe1ad8de337199f20c31d98e79bcb6e2534b7ac8c1759586b31008dabacb7a7fd56ca8b11431c836415ec9d4fe49593e34cd6e06d565d0be96736398728f77051e936839e335208b9c6d7434859e9f8cdda145ac08ede05b5a922ae182a78a47a282247d1dd24a894fc90023a9b9bc5e94d21c7df0d633915f73b14f36815acd92557902b81f90afa98af661fdd085c5372a41907d4cda9e150aa5262ab03cbc195ae64305909dc70865b7a842943cb7468c365d11ba97b10289d207c8815e6d929436449a99853327391aead437905588811d3b7d75fb4c74e4eb0ffce43f96155041e1bc204e899050ad03613a5bffc678a6dbad5139ef51448c7c648bd748aee17a4d7131557b0632f5f8292b471c69e139f5788f8785a2b12836d0d6076d068725557bc5bd174e153437603c96baa4f912a8b904879cfbc87d829cc759711d02fb3ce7d7b09a4a734ceba2cd85da9dc275665a7dd19b4aa94a5c03e38d3afa803ced96bdfa34eeaf691c236f80d16ea409b30d4550d36bd56daaeb28163be792e77dc5e53b151464c8f0d88e85e593c4b4637231b921043f01784dfbc3a0d394d0041582108ec8da12b683690591d368fa976aace2dd36196e24c29d0d0d0538cf5c77ed6ec1ec6e28c5009a73145e6193431f060515615b61429bbead88e009926abb5ce0dc1cb948d61ab06444904338e218b36999c3411d726ac556e65a8254a5d13b7bd11221844be4fc9e7dbb1ad137f9aaabad6d8c622d1b03fd2ce64445633752a2a8c30c23d7c56b7d1d9b1f94f53707d23074ba887f093ca9da867ba9486b6cb9c8eed2b5e69f7d670c006c53dc487b27d152b3aec4b5d1aeb8d1316d388db5c568ac4dbff707ef0521a14b8d55c09ca3189debb1d2b1f8fd7fb2577e2c4d65badef7a65441eeff65c9015eccc3265455728a7cf5ccfc89e9fc75fd5c4de38474551947f19af4e04ee2c2b6c48796983273a1b7994fd68d90e8c32b4296d477399c8fac724f24198d2fee581e7e36032a4859bfa6fb88bbcaa78526ef937460aac5e03fa71ba7e5c301616a9037a5025507ef2ea23665adbfe6908923c526b7e0e6535da22ed7718f614db3eeabfce623b152a8f6f51a79b0af0f81ae6ec38c6d27c3da1a139ebb12f89228c88856b17a9bd04015a5843f94d08d9bbc9967b4b99929401a607d907c4076088086b9b4c2bdc566baddbea0e82d4bf0ffcbabb6d6db7ee21d847708f2528128d461f88473bc02548514a7ca31f30fdaaeac72edeee207cdf488bf932f201d3b723c0a5df3c4a8f72c093d672ac05943ef5a7eeee943aa594babbbfc0bbf3b8c0f47d94a1554dad0c569ca1556ddbced02e3bde8b7f2c397106195a5593a10233d8fe19dc855a05da45a717f485788e6d8b44088e6c914b6cabab7e0d15309fdc116cd236e02ac0dddf52965b07abd3afe1e62e85e4fa958e73f678e7ea3acafdd218a05f2259a995ed8358a5c40a72a9c3e4f506120d483608f92489dd6b395b695a56f83817517289493dc06560fa05b05dd7756fefbd5cf7f7bfeedafadcb5b7b39cadaa92c6c9fdfe4e0bffa28aa9fa6fdda80f24022842e06244442e716dfdcbbd5305c5dd69e1606fe8a0a19476dfa150d7f47e214a2fbd1ffa20de7f546cfa7d437f437fdf47e86f2814facffb2f44bf344dd847434f81c0337428e4ddaee36c15b1e5018d149a8640ab5c033d41203f2c305934ed6aef41af431ee007f1c0af2215638040930e7a1f04f4bcf7017a1e08820bf81e656895ff0fd83ef7fd27ea68d2ff8686e6090d1936c6b59da27bf906e9082e80640620b3a65216d0216e984f9863f878fe2ffd027fe547faa10fb2f2dfdb770f9cd346e7cb02b3675809f2fdcadb0fbd8f95ff3ef433d3b1c7ca88ea8185e83c0c1c71c09fb0ef6dba14fd0672f28cf701779eaff254fcd133def218fde84ba816484f1f7500d2d3e7417a5aa294e2d28cb16cfa9e8a28fa163d49cc009d221adfa60dd026274daed872d2f46ec28f7b84784e576f113c9f7e024260888a48c1ee744649fe74f6b3f66af2698b780b6a4fa3e39b2108babe2f140a7d5fd27cafe38340bbbc226fba77ce2f3f7f2357ea66f66efedf9fbee7af82b4f484c66928ed502804e6649bf69edeefc423ee971a5f510736d1dc4953ab1d94eec8ed8ab4cac9c0f7bba7e188193cfe9ac1638ae189f99a73081fcc9afa0ece1ad7410ee814d995c88e64ce785f017f74c6973e88caaf7c90195f7afb313860be68109e0d5b08055979950f52fa196f1fd5df63e555be47e9673c0c2baff23e56461c243d54481fa5d18511a76b02073488c1544613bd81123d3d7affa0ff7d87441a27609abfef75b4ca0f40ff13fb47e20ffafdd4661ab640f3e83f1ab6909379803ffad1381a512d887ef4281ea21f8d2f73451a8d9ec7cca3f1cb9a7bf4a1cfc958fc9e7e2f1243a73cfea2c149ff7b31a6a15de0386bd899359512f1dcf3ffbe102d4279280fe5a9f90b91aec0776ca9a27056355777d4a10dbaaee338b7550a8d2cdfb889a15d1aa0b4092626cb5fd48926fde94fcfa0186aa0410ae67e6678c44783bfbe918686864728c7e003a631b8e0f4c70a1c04498fd07b1fe4d69d4c803c81749a641a76ffdd1ce02048827c7fbfbfefc3fb100a86fbdffbb8ff8d38487a7cefbd8f50134e282206fb469726e009f3121c61069b30245d48b45102642ac9f46d6878e86895d3a7d1d1af1a5a5a4a359fbac2fc6dda35d2f00473634b252203d3af34db1d16dfc7852a154363f939f46e32cd39c9d0f7d80afdcc27d6605b3ada45c723dc7168e8de346b42d9bd1fcb23badb420c70cdf443ef893f3ce441a7e40cd029dff398f91bdb1b4bfa1ca0d97b2e24dea7ddd8d2a46b81ed88af480998da276aaa1bf567ad94ab1dd785375d73ad56a95aa5e3851e31d07722a5a4a30d8d8d116ead88afa3652a12754b4451606ab34dbac2a44d5d93aa6afea45dfd940655a1221a129fc584af373ea1289c326d02f797150499d61b746a0e99be7fd14518b3c6366b46ef4fc8f47d8c4c7d4aa6ce844c7d0999521723d3dbcca3b7699148246a95e8673845a2d7e637579e783bae432af9d4d1ba147cb55f1376a9756b6bad96eb1cbc5fbd5a02696e863cdf5226a6f9d3da5aad73b7db759ad3dad92a5badad0e1ee1fbe60c65c955afb5863cdfa758968098f27ceecbdafd5c9bb25b6b476ae39d58860700c5b27ed9dffd57bbee6b37de12c40098ed0804ccf3c59203bbecaa5b0ebce14d67ceaf577ab9c5727a9e9d5b2c2f0dda63e215d75ac7daaab68b00bea152598e9b007ef9e73acbe456265ea825c084d2914e55b5dfe9e06b4f07cdf4ee9fe9b0556d5703bea1b21cd701fcf2cf75b6c5d4dd5ac2def5c0b5b9b199d9c73955b4e2d4ebcdb9aa4fbb31ff72806f9e40398811c2010ef304cae1c937060ee50994c31640395cb1c3a89a85aec0a33c81729805619c27500e3e59958311275f5437fe2587582ebf657130e7a7307dfaf4c962f2aead2c26effaf5f69eb3a67d4ef790404b1312309d7e8ba86e9d21dbad9f46e9ef1813727f0f699d767ddfdf44fa7ba75db59f06f9eb27a7091f173c6189308c3cf101d6fe8212e4ee723f35d2230619fa6768d74aeea72188dcfd1ec0b92c1d96d82181143818b20258bb0b723fede9c27573bfa8ca10430b31be18c10b6244602dc8fd364ce47e039832f002db11536460451753606dc40630f79020729d4043a460d283154037f8a025cfb9c2ccdfdff0e6a3b79b183914fa2ebc09f51491690fc9ad13a3b723b8a4b7d38dbe0d4764ef3d1aa55d657d2f0abd512851ca4aa7927ce774a9d472575b21e021dbe04a60e0f26ff4a68ac5622198c56230fa559cfefabf22dbafed9ab9898680cbcff46f47a338495f5547d5979f6f4ed2131d4dd194ce59c779c7952aa6b70a68a53cfee8be9f1b5108680ef4e8fe33b471b1945d9c403bcc728b3494f27c2134a7773efbf5736039b0926c364322491151cb0de80723d8ee1334d0e78925b3d91345f099d12008081bde9a40020a26ae48c2c3fda2882783e28b1d24a0f86249121d2f566357f8849124766bcf0d9c0645134320c3f280ade83b188b28f60684c5ed4682da039405122eba271d0da807273e403d34e1eb012ac108785057b329580006adf37c6430b00149b6439acd6444642e00633399144a84cae049215686acf6947145282b438cf945685034b1d337289c88d5a05862c909f27c7056b3a26fb320d86ab320dc389f991070c8f3473116d03c66c4909b0a7450e2062f1c824d797e0b913c5fa6d9145f0c99c934a60af2fcd2bcdc146fe04dadadb37a0f152328307deb95ae9d9ddd82bb5f3ab5eeb6549a61ab9b46eadd71959bd5ad7badfe396dffcab9dbea2d15757f6955fdea5e3d95128c80307ddade95f30a4eced6aed60af6c096ea4b7593833ba8d5625bbf7b7e59bbcce5cfb35f77f7ba312a7530080cba6010a6f3d6f75abb7b345bf585d76aed8de2de7b6f28079f10e0eddc72dd15e27a4dbcd00c85beae3a570252fa3e0b5e1a08da0fbbea1cc7518eda2b44d874d62a0a45ee391085c224dd3636527c5f2772397ffd39d8899e3f0b7662e77abb5027f25973bb02cc970c55c810f2429cf74eeae06f4d5f2f544d2dff122a012995461ab8f1bfd539376127b1705f7253c1a622edfe0b81dcfd7e865842e21c2bfd4876b40902d39fb58ae85cd9cf9409180a85ba06cb60c2840913264c2865e26f278db6d73ad36ae9e89086a65ace5ffe6fa8545cd752dbe561d5410d47adcfe9a0cfe9d5a7bbbbadd3badb5a337d4e6fd508a800434abb26156028e9176dd7a4e20b2bb2dbd9aca920982b7f777beb77efe3396eecd1ef8d38383934cc5e90e146b3a9d526adc77deffbfba43184e2dee37cf47b6310effb47141704c585df02c31107ff1cdffb0ef793bcf771df1b8384cad603c2079f84228d9e88225d118fa8cf8c5869c4a1b21e1f596c468f9d599ae8c54ada33a2b8cf81adc8ee88e2c61786d078d3e7c06afc84e12fa98fcad39b93fe8f43ffbeca884343a11187d2c61b0e0e9d39edf328bd599ad8224af416251a5130f4d7ef416b5c1c8142464f2c061bbdca23e981bffbaefbd1f7e87e14cb4e1abb1bbb47d6b1aec763b55bac763389766669882be27492bbb5be793f63a5efc7dff9eb1000a6f2a31107498fd197469cd28ff08f469cd2d8b81b71da07070a53e9d957b6cf37a2489f03ebd04f58684491c617864c27457666694dcb8ef24161dd535887a4c7e843281842ff7d8f90e871fc433e3d428f471c97b9fb8cc69e99d76aa5cbee1804490faff49e26c08278234af4e0877f479468f431e22041bd709f011376471f5c14132061882196c462309f39e98fa3d3b0ef85841e1c513e3ad40bde5ff7c9fe2e64e00923dd891d9460c2e4492c069bb06f0c222434c6c21b921dd0a00959f7a5d3b2ff8a12f08e21b33cabc8a5d76aacea38e96e67b944bd101be519d6989dd558f6b733bbc4d2fcb928fed3ad2dbb73b1ec9c4e764e96ddceb27346b2733ed9b99fecdc6c4950e69c5c8182272c04a3b9f45b8ee5090021ddad1154c324c512401039010f38d0927447945827497431250820f0c0032328c1ed6044f757ce91b46a403902143a2c11842b909044b8832c9cc2faa046173d70420721ccca10e23603bbc30e4c5031e4e3de6d0410bc1d42d03742348aab7246cc1bacd005e3075caa54a616ac6ad788934d61018913cc8e48c20f4020051254d619c132f103ca12426881830c7820850cae0e40589942092540a243061547b0c1c76ed13c981a891a0baac1141cec000832f8028b18f8f073854bf7678d773f2109b38a1a5a5f45a23470d5d90c42c187224c21031290412b0306a1eb33d332995a70cbce76a8b13222a28b984ac89125c10230c0c0a107260c41628bbccc7ef79a0828068204b12060f013021ed8915c9a5e757be7360b68a99a99b72a014fd8c5a6b781560374a53a0089004a7f09ce7eaa059dd5e79cd3a953a77449a6ddac083c9fb6d3e944a67fe7f8a3c3d3fb814cc55bbf1aba304b4b2746e2a6b1e4c69ba9297b1eb57b8ea5fd43bbec585e7b6ba6de97f443e3a49452dad9daa2acfa34bcb196526b29b53473dc674aa79db6565b3fcad99cb05f494f6899a179b92b56b1fcb8f73cb14559b6b3ef2de05aeb71dc5bcb79997274baa8abd77441ec2fd91251e7fb8fc952045cd63c7f8b911005985354066d17be22d305da03154bad128fe01efb8b1bdfc96efba26a171d9f76f7a52bbb37e1ee47f75f7aa3eae9abbaf9b3edfcf9d56bcf8d56cd1fa3847ff4f8fb5fea83ee71c0e61f21076cfef06778130affc51ff8492a6ffa9268fa9cc2bb7c795f28903e051105714e92c6bb88739235e6a39e45fc311ff5df6c6141892d2c2c2c335ac672b2fc0925b2fc6419af492c3f976a8ce5bd78652c4db9344922fe92887f8658cec7b8069bf1f8ad6ad34bfdfa2f690bcc8df89a4ca63a8642684e68af0af03b0f7852a05604db340b807630a26798a6351202cfbeb767940b9218b89fd2bfd786d2ea73ce49a977d581534aa93b7577a794fa53a74ee90bb8ee47cff3ba11974c5d770b1078761794de3a0ac225c889a2c0a32bae37da62d4035c964641a2282c773ba765e006622d17de74a696735cd775375a2a105f10dfefbb91e77fb3bbf77a5e28f48537fff2228c7b04c39b6adbbbdbbbadbfedecb5ee95ab2d5cfa40300c455654e6e4502a2e67804ec9a4cf5ca59a8430348c34e2a4ffe866bab5cbb3bfe9461ae9ec52132d814bd36df5e3afeebf99a098a2b4abc6dad543dac57a7f161d1659bb5aefcfb2d32e199e22ed2aa25d3246da15f3fe2c4758926817aac7d4939c8a1153b55450abfc5b62ca49abfc5962aa498ae6f203dc4f533401fc5804ea4ba9fce0f224abc94e3b7e7b8c65fff246ee87f95ebd445b93feb46ce3ffe7770f23928c38b9126b39650f46ff1b4dc1f4734181822459bbb8d5b3b0bce9e6afd548d69af417850cf06030630a084cdfc69727198988b9f25f892423b7c68aa9c43243e54442b5b8a09082ad236f4a63b688483d73e54fbbf1de6cd6543132b571e30d5103540062796d882526450d549558de0088a5d75410cb159eec9f124bd24ff67f11cb959eec0f00b14c6991fd47512c5976b2ff8b650aa2ad4c39c9fe2e628b587a0d25965ecb25592b2f0b4956924464ff1a62e9371aa22dfbafb8d4b27f89ac9145647f95934c0395ac69a0e6d2742b7198a2954e2bbbdbdd29af4ed753763f993e6957d9414eda65dfd6ae59bf24f564b74fea6997cdfea42266d99f442339e9570dd291764da0217ab27b33520fc9c82cfb09a2c8256949f61330c925a9497692adde121a2d28a85d6557cb334f49bb1c08cca537f39a649f5a78b3ecab9b4848e7d8a874c78a6fbe7c1d386b66a61fce1a064c98f5012e6fb6dfb5fd20c635256e95fddb2a9bed7553cbbfa8fcd599fcd58d2d32824d2a9adc7223db1618023b7320f784b3200882604eee7e2ef4365d83678fe3de34c90e193061fe330c6d1d43082541516cd497b9aa7594cd7931aeb5d61e6774bccc52f54612848c0a2354cc269d2c14a901174230e207082aa6f8747aa82fb3659e11a480f822f75393028cfc2c81032448e8e20757f20dd101228bdcb966618258ce9127900964f508ee438004083cc9d9b6448540619c0c30007b680b01f6b4734df09a836ab1b09c165caddbe92e0870497dae678417a285be243dfef3813e788884cf6bb6e571db9343ef76deed44b52568115b44bb8a5cb7a2910ea6d1cc0d1556bd40356bb4273bed9935f6fd65a86190de784eac4093fe54948104ca30575b609e769557555fe56fc56953f8f966bb38c0e51f134f007c3d5f5fcb8f6628f2d774967fb4edb694ce48554c2b07cd8c00b5566f9faf561e337bf4d6eadece556be79cd3154ed5ac3e57eeddf59c7d29cd7789fbe52de5d24443d0f2958b7f4588eec7254a99b04b1081942638dc0a032078235aabb3dc4bd7755dd73d7d3a84e3387b39ae765dd7d9207e3c28ea0a5010537c4732982750103d950302e8072279023921ab224fa01f8a64d25c810337cf1a0e98722d996679020141c9b5f4402c16cb35986a52c825187635775fbbff3ab1ac23f7271729d8c71ffe9d67eebe3e37fef0af7ec7f2be11ddb71746537069ea4fa508f69f43e052f572c39db3e30dce0041f3058686b9cdc9aa936f5d147fdd5719a2ff76230a705973ad95b3b5becd5f0de386f8aa0d8a53971812c6129890d00d33e8c1a1439810050f4cc8d442466b2d7268d2036b1b644c88c1be0ab6d84fcc800735d867c1163bd683430fece3c016e7942c663218bde5a0841becbb3ec4c007f679608b738a2634198cc688111d188e10308b1f62302414a7633b42d0603842ba16cc601e111d536e1187862146184b6042463411d822ad82074a7a60df086c7186f1441536d8874798d4448ed468b01c2aa4db4dd0fdfd1eab55486713d21a62c80f0c09ea0034273b136ab62a8455860f4660b37194e09d619040093db0ea220e92eeb9c711e23121fe41848c31fb762c09a19ff6d3feeeeeeeeeeeee6e1cf4bf3973cc0a223b4a5c266013b0e0c6c4d3324be446cc49ee1a973da806af653774b2e8ae4d99abb5044a88c0dfe275efdc20c04ec01c57c71ec82836c0e505e241f902612346ab11d6d63999989a62aab24ee9280126b5457bce169369daa6258c5d7e3fbcd5bb97f6f1c3d9b37acf39a927f21a86eda775bdf18aa41a0af148e5a78a2844402877dd83ffcd2ebca1ffa2fabe8dc055c812afac658b3ad1fa4972c12492fc805f60faf32529c1dcddeb3d4d4257c8746c23702bb772d724497eb818f090e0a7bc798ec692e6127cd257efc3bf57349634444028df90c70d6f385c6a95bf29f4e10d47b92c0ac59212c916142ba5f4ade805a6449cea70bdefec87e1023e310c6f3c17aec8e5ce8e28d7034c05a64bf2fcd9edddfdc4d5d55adb4d96a6dd5ec7ee2faad7cad95a395b6bf531878fb3f6b9aed556f746f2957372d6ba6ff1dd4984afa35d296d253e0f0aa695560ac637db45bbbb85744e6dfa840e7ca803d83c9fcb73a473552715b9fc8db8fc4d6af39c739c5ccea914e79bb366d61c4ba90b3e1e33cf39e79c13680456985af544707fb24e70d70b7e5796727322edfe8a654ebe2038a27884ff037c7ff0fdc3b79f93a9588235e4d07f6248bf9c1c128180d91ba90ef4d6596fe7c009efb9ef4bcfe33c8fbba1e7aabbbbcf27d37598f3dde7fc2b76f33bfac4ddddbd4eb74c8c9a8cb2681b44518cb4f8685a453fbc99e30f94c82dc2e88726598cb018fd204514457884ef1bfd30d262a4c58836d2e2f230c262449b5448b18218ccd61e513dfaef1348f003ebff969d618e5404fcb9c4f9099c04af00cf6f317402d34a97409282270eb6dcf6e98f6618e5ef24a54da7982d99cd327d03f48bd226fd4d3f6c62d6aa0d9ffd46f5b07f41d2f44183c0a603eda024cf9087ffe046d401722320380a8e02a3627961eeb3f6d08bf952ae6ed9df3ec1250dcafea455cefd87654efa9f3249c6834b52cf9c1e66e07be23625d7d04f73870830e51e493d73d52ee33af1c8c8e0b031c02c012e2c89a9332d96141997cce3a0a11173b45aaf57cdfb7f35e2ccbfc499636a4c8d38f38b469c5945e5593c84819e644bc0a54b2da6c6d499168bd562b172b4ea4c4c4a462419211d79f9d2a546836266646aeb63aa8c58b6c69866b5582d1c2e19968b25c362c9e0687dff420f1a04826266aa0539d1e6af93cca5e6a28991f9ca7ad789e72493f92e5932ef4af180ce578a36499f00f8390190a291ac6f962d0525152525c535a3828e0a4454d811a388524428e24df442b4a164a8408a960a2279c85a090839c3b4cdc4e480d22e1cadd7fbf330e008b85f6439c94e474eb2d3cec9e7f4739a9d949cace81749762ae224fb9f7a4c3793946a0baa273a2a03b717e2ad5d5162de5f9432c6469d76a1627ee61cef3f126957cb76da55a4a75d38de7f2c623cd22e54eb35e2089a11a9cd4523a3c2734e52b5d1142cfa8f5e3a5dd48537a9a054939493148dacb9b4ac288ce9e634d3cda595b02a2b0aaa6d0c69978c0e111b3bed92b1c163a34811ed42d5f1d4733a1539f19c764e2e647992a1a80e254292ab15287487ca604493cdc900d8b0640fe953a326dab2e9e77489b6a9f237919fa2a582fc356143607e557fc71bf117aa8e281858f81def8385df310641d263f53b3e08ccb330fad8f12c3c0b6390d5ef183b23301a8485dff13ce274d2fb0197291a0b23cac78e877998df31763d4ec2882e35279b559bc5ea8fa2c0075056e4c87823428755dba5468570a9f90b660533ae6618c36aec8266ed3a65fa5fb792494642dc174a35a932c0291aa5618a667ff0ea61fe043132acff5a64bd0b172d1df332a2cb93b2b66246971a586b95cb935639abd6ca1a5d6a2eb656b9ed018b38739974016da110cf4e11db6c34faf9a9f96bf5f43d8fc895a568fe226b385dcd49fa302b91fa38590b6fc8da48b2c09c1a719224c9efb1bc55277f23d0658b1dbffaf2ee1861305e8db3bf49b2eff17f86379d13fcf7cb14cd5f2c3ccc97379f4ecf82986ad2a4cf2651789811852fafca8c9c3c5d50601acf12d4ae6eb175f2081495dc884b46e2287c417479e26253fd0c5d6a270a5bf171d205f0a54bad24495f9224591e4d59324f1965830054402cc4c80718557ab2a6123e160297c21646f9246b5514291d0de503e677fc8e31088aa5f62c303f61abb1a3754e6096209b8fd5c38ca6db938cc2e3ef1768b8dfa58e544e2c52f6276b79e545ab2ae9711d5982589cf48bc656b6769da2acbc68172ad62acf55d6ae51f6afe249d62a16607ec7d3a834768c2e35afa24fe15d6aa43a7ea5d797c29b155eaf1ca2ad569aaf6fd3a39e1a299a2c9335951f7f996e4ebae924136d346fd3b6099eb955c63c8be64b201ded6389a666028ef9cea5e9c6123bb7c4b23ecdc7d4114847cb35ef3f67cd74bd5c2b7c3f385d39be43b956d40e98f5df7591b5ab66ff0f05024c236b386056f8295af8e549b61a5334940eb8146dafaf2290aa9373bc4dbb78d12e54eb499e71a9b98b4d34d26a92453a9ee6a6009734333333332927a9a0144db4a5682f1c3968441d22298956f9d788a49f56b9fc6b851c2b2be10d4d8e1747dac89b9334723c8df08626c7b3c4b2e673fc0c6f5e6fd3a3293870fc688ceed6d79a61cdd46e36623322796b95abcebc3f09858cd2ae19f2898c487a31339236991609858c42d66cb84cd16c3c46ccf138c49a9ad7db740e9a170d1a34421e3493624452123f4eac9cec0d78f5304f3f4573b7f136dec697a64c73b24678e39a79168eb7e98fc6cccff0c6d55debf8a35fe63fea3232dfa3e916c3fa94173131a21a14276258d5742300eb6dba8aa61bab767777d7feebc2f25f0567be431c2f239633acb1fc4014d311b068aba4fa658ad68af99417ed2ac95a6d8d2d746ea568a9262bd93f754b45f15721a6c2107f1588f40b4c39a965ff54ad15534999ad5da568cb4fda4580ec4f7ad1ae0985d87f9289362930fd9ec1f1363de3c26162d55a59312ca01d0246b15ca4b4cb5528d6d84267964bcde54911d9dfc586420c051d7f0db13e35c8fe28c8dab5d3af21a32553bac8fe2814e95795b978d1aeb964ca4ef677b9b1aaab5cd9b2bf2fc9ee54645fd9da55a66807d06127a85d1447cb4c8b4c4b4b8b098cf919deb4a8073919f3a22d26e671c4fc4ccccbc4c4c4bcc7bc490a9098f78f69c5d4004fa71d56ad56a7b2582c11035527f7f8a33eeb3f96782a820a6f5a1fc3faeeee66354e0f6b2c717862c41248b543f0572a88c4e3af54edc433c39999af228e77e1028fc6e8fe6244d7b70c4b86f5acb7e9d10da76aa99b8c98aab5ca534d82524f52b676c97c931b993115d41267ae9d63c49959a24b4cd952b428987e49ae7e5a5fbe29b37eba6873d21ff541646d358a367fd56f8de547c9f563c6d274cbf559e3ac38c6539176b1c67266045275aaabf5fe279e76d527154132d2aa23adc23cb8f4b0bf503d560ff330230eccaf46dc63f53023ceeabf95e82d71d25722cc5bf101ab875975340ff81c41978481abb71227ac7b0339b947cf8a56cd49ebafc409bbc10d46f2bc810db73c803c6f3044083994b1b0fc67ba91467af496b07aff1696a096c912d4f2d35f2c414efab7bc684bd1da3580f7ff5cc0d194d11858646981010d83f99548612b25ab2573359babd50ff984b49d7e8664edc7c90188fd302285b104cde8193da367f40c295232e94b975a8f2226b00823368c65a755ce12e4f7626c32a158829a64fc0310c95aab7c35ae7e9c74d2c75fe28f9346fc3561e2ec273b9944abc89f0e9ef0a804ee75453d0a15d108040000003315002020100a86c562916828cd34598b3d14000d7090447658381408b328c7711c848c3186004200200610440819a29a6d10004073909c42480e7050358d50263a604c452821075c940437322dd99952a46a7484522e6e3200d29b0df7a963090655e0e05740e366b5289af79631aaf07468595ac7927e4b575a12971cde8a969a13f1d21a0a153f9e6f7cf10d6ed03662e64c26c2412e4bde605ae0ea2e2cad416fdba6b2ca8ad934a71c7754ca6505392dc5a8830aed8bee6440e08364dcdbb69903b22a042fa578e4521a25465894c88b1e98c5840b85f713f3b9a2f42d2efeb5f9a956b46934f10ec496c742584c8682b408e455de00a20edbde87ca3d622ed839f1b550f250b06a30fc805d5e2e55c3c6619425a9a0bfa3e0cb0464add7110763111e76e6f3a0a7f2b7ef4dfbc959a6d061ea396fda68c4041eaf06bd9912627441458a157fdccd57ec44cc83f3d925bd57df69f2535c3f349240947e5ea4338fbb9f2fa832b9277bdacb5e1e412a4fe9f54370ac8e6a794a8b12fd002dc5782f04b1c82895e57d18b8b9f92853f44fa33e137edfc685ac1dae082e9e9dfa1c84897d9f9614e645742e0f5285acc4323248baab2a2c3c5958f555f0d6835ccaa8f90aa42633d000a7c1fbf0b09a31418a82e37fb6ee8d6428acee2e4b9ed5046288514858cf3b2c26b07a8d06d197ca44c917609d4d5fd6d1f771708bcfceb3747395965a6078290fd94871133cfdb062b512ab28470bec4868610a839cc3b02ea15ed6079b4b8b61bb50ead3d666f765bdac3dc849c2b3fa9537d6b4400fabd86a568d1929a365b9c442fce702ff629d1015e782f6a559658dbd968f054c71fc31e9c46fd8933dc0a298fa1079181b466b3e47c6bbea82ec288fe1b5c076d586fdeac96be81e31e6377410118c3190c20b56835b1ccfc42e6d2183b3087494c1068610883142fab6352a8bb0fa48c9c92e2696e93dcfa8000f837418589994793f0a52cdd9570a3343f9c82a19b110b653e0d0359e00056483f341c98319d6daaeb6612c6326968b9b1407aff42c47f5f000bddbf13a8193cd5b1984a4950eecac403f6658c730639145b1272283b8ca1023c82e5622c34f2782160d8cbc30e96daf07dc79c10bd44681308b2a0b0007356d58ea1d47eeda68d1015b1986348a481a59d0a9dc18c1a1cbc9de4ee6624b32be0495519a15a471c3a42f045deca40ac0a53b629611b0e1f4437e058bca247fb32cc817fcc9a0b1dc6d7af41b22952f04c40bf9e84e476ddf7e9974957e64b0c3d32722a2f6b1f77e0c9b07c61664ccfbe1e7542515179e133cf954dee11c75ce261a3045f3a56736400e8a1cbcd7e64c1375298eab8f5459e85d4145550d97ec5b16c697eb103f44dc35f361003f665d62daef24f93929bbd99d7f9ee682b894effe52f7f1ab90c5e630c2e6fe00c3c7a8b4cc41e3ce49c0db3bbd9b1c59c62c48346ac07bbe9e0f2d228978d4754b5ee11d2218877ebbba08ed3c4719f78769a4b3039b0fcda94fd3678ee544060df31de564d82ffc53180915c0a1632c8230067ba70f874d897bc249749614effabeae8ed9d459af309617e31d49ba26639cc14468cc00c9e0da437b85a9c4d7709fc9a72084697c8fd411a9ffae66d9f5c192f906e329f46cb88d7482526b704185f22b5208771f86b6069129548dda23eab522fbca092d0a6bcac4908656449685f105b0e302e859000624e45b865eaf22cb744216b86b34778b8323a042933dea804b969c4b0aec4ab28235d083236f647b394960bb92698ec8ad05eb079eb29d2064eca3b54ed825af95a8fc55c1cb31324c72794880ea7fef1e64160d9c89b577e19254720655a0df6502896edb0f94eeb1c085bedb45664b438ae86a2aa89123219d8cdc28e1174aba6a16cb513936f73a014b8f2eb534ee3a0b2a2ae825b6a22a1bba40cac6beb5a0678bae520fa37331632957f9378082f19edbb35ac2e9f2adceb54b0a1e6040134c5f4819d4d0d708250b7d460a623492782ee6dc5d60e1be6561075ee963217badaaaec0f6b429de902347e94ffe035cd36b293402dc115d011c444a4bc83dbf129a6aecde7d89acfb6f72e7f8bf5d7a6be461bce49120ccafc7856a470e823b581f805ba8a515bb309892dce55197bfa4a99e44adb4528d98fce830ea4ade08bbe0f4dc295b2f9db8a9d9850a084d4d548cb9c35ae2e7143fac1de9f1cda5b7f561a78ba86f9357d43552d685a119defe8f4a5c8a99749b85a0a7029411e8cad61f117c2f7aca5676c8c64be5eba3c5225f9510b8522476d720eaa48175f05f175137cf327d890c9a33435c97e9f108a9a3e003001f9d4fd19c89a1df2479d2abd1253c18e529f4e0d011758d0ed125ff1b3006201f61f01fd64db4511b50be6674d45270e1987e703926333a83bb7f510ca2f485176b2d1ae4602c3c0ddfcd6d7607af623ed96c2bbe2e4f90dddb8b092114e874194bd919b2fa5e40f9ec9644770b0e000e2bbf5c2d12edb288c8022f56ce168a650e4f4ff9bdf1e32c292186771f8c0d5dad02dd9eb3895ae7075558760e9a9bbd8b4dade4f9ad8a693edb3a19061812ecc4d0355d6686d2c7e0f6610dd3399f13c8395fbe229d0d7246981319c478563cc79d6751e9926ffeea3dc40e4ba88bb9c0cc84d7e2873fe014db2576fa0fe9b2cec44e5da2a31b2d0c7f620f6b0f60840a0b4b20c03f28a767d04b918ccc8fc42370c2532bf20576d09d772fd02670e454934174d1a8bd2052b0edbfdeed38a8499498a41c65a6b5e1fd1ed11eebb1e8b676e10de1afa77428ecaf5bae40bf783f0e4b40cb53ca0a61de0540e68b98298a51319c7f12df8a54665ff6b5e98ec99d4466450c00df699fd340d7440bcb21827a042f488208b7bb2ac0829aac46fc9ca7daf93d21420a20b7884b83dc4222a25cd1db4c0df2c81df681febd2dfccb278331deffa0eb34f61abb1cc50af3e9a98cc76ded2d7190f0cd9606a266b6d72b39875f0f0c90b64d9123f68f7c1761dc3531a7bd1c4242d34bb296d4d72067abdfa6bf55eb48a92643561ac15ec9d9635b3000e2fea34744c1be592044ecabe84776f87fc69ac80317205419a6572618e20f47d9d243009572083e374368c0a8aabc6b356d24476dfe9a72446f4b22d08bd1e3c8415d600dc3f5ce32a0330e75c712d165524725f7df22c7c5ae1939b8fe565966e28e26ec3208f041ca06e7d193cb4fc93806e8830ad3b124b6d43b1e2316e994da3c116fac25aaf3d213dd5156e46cd5d0482d8f9b6fe0b0cd9f733a0614ae3b211a704151bec7b4adadf2b28e353096ec68b810f5ff77f4869e707e44149fba50c44fd14022370a35b7bcff292abfc596d4c0c4d1b0c9995b715b541eec2ae87a2f0208b7b6dcd15cb3df0c2a1d3dc123fd8fa8511cd915310da6467317a98d366ac30c7802c9f9ca4802fa1ff73302d60435211f5ddf2f9b2c4f1f858e95a02a722cdb6060bac65084e13a24846d5d52cda797b8228b4983934e64c4a618fb27d8f765104ec78652936ca9b65a9cd490af37483006907d92c2bebb3746615ad654a47b8361426f9cfb66de600a94f04953cb3f880edfaddc123d97128760170e4430a8bf84a58ff67058263755a44ba97f985446cccf18c644c04e41079672f00333cd4d5b9e99b4e9452d708c9a7f8849bb289129e916d4d784e42b3bb96f632476b96088ba7f78b61e0b9d81dbb7c5a23ba54e14ccfcbf2ca49cd20787b2fd7f43a7e6cc16e37e60eb740b88c4a8a8714979272bb9529b85342132d971a34a50f44c3a081cbce304adef5439d6845bceb99e7a250356cc24850b8ca91195213fd651d94342e24d67466c1533000e160719c43133c9816533a416aca3cc0af53559077beff520b32742e7eb8c2c71311e9fb0d02236dc03c13ea11591282c8fc04654fb6799395ee70bcb7d0292a1a8fb58a7f529cc8bb29e4133169e8fd8562ea622fa94d5bd3e1bfd045a819a010b331c2ad4e80f399fb8c328c988058db70d4e0bb62ea60ce8251fcad69c6acf3fa31a78f052638a66c90a3c09d568306a6b74f1db6861be2dca50b1421e1b79a0f3f118604fdd3b695441c344065bfb1d83352c0e1812f1abf18544bbd829119cda894ada195c12708de21ff26ab61b91895217ae1fd6d03d45acfcb8e26d8e4580921153c15a3d9c1664d59142706941e1a654fed72f7c0e8c7c82109852feb68e291ba19b3a6224ed77cc41e1cac0e011124857ab6e0b8c1703c588d898573d064c93a859ea2cc492a86f227274452031b066be11a58b2c6e9fd2ff7d5563eeee6f9d120b2624824ec3e269d5e7875ddf53244222f7ad07cded2535789b54db7842030d19436df1a141947db93aa6df76e0a19f3248aec946e3fd6fa217d6dce50564c35a1a4cb70c1c94c31a1898009a0a7698f5d099e20b37e957ff578a316d9fe798b20200132725b5eb72cc1678670c5408e5a73069fdfe0ebe72136736cc35ed2b72639780ff5e606789f622fa821390144584627cae9e5881e6fe059ae176785847215f1a8660c68a1058daacfd1c10c8429595039f13284ab64adb27796259fccca76d246ecfccd6ed3d7e91623e0d3941fb5ad34182ce9d415ddea6513fe5ba09fb75419f005e0ede853e360b9c0a1c7ce01aa8d13d633a955ce63386043ad73f11c170c2b188cbb722cbddf75b2031817a73087245441a4e784492d6c3cc70438e66ca38167ce29563796a7313e48fa3ff87168d8eef320a226af199b47c61839f94aa6c610694b33fe165831721cb65c900f342c7b383fd4a34565ee617037ae4483547279642a9177985695b7c992cb1b45e3781ddbb8703055879e5784b6c249e6255a0362b727b51b6cd1ee446c2032bffd70e73c913cd87fc572e7c087440470292f404643d0ef225de91d892dde0a53c3b872f57144835b5d6d26916c142024784afd64d3856d6136f30923eaeccd00b457e999cb2d960e516b51b16d3806eb0cc5842bc591db8fff717414bd64e83e8250bea75c4967b36c2fd92bfb1026b18fea7ae6aae5a9f899953968d682eb5f49618116aff151232e55a3664f61d95a4b7aa1e9eefe754568fba65b785fa9f7a47a28c44b85fa7b54f52b387fffff1a379b2fbdca6f80cb62157fe9eff175fda5d99bf6997d9598b97bb13754b486e8a4f8d498fb6ef571e5d104cdc7965cef444eed8b4ad316a79c17196b3c9fa7271d90a671dd661085994737d1385550b4360b211a30478a77b68897e083a3b139f2504d25ff1f655510614c4e6d465a695de5ece8c4330d77ec89d71d6349a8c2ddd74d00d8ebb4092d79c38cc5f2c0704c51423f608650dbc7c115af9b7ace8e718f81f9283d9e1c00dc13b9452de8fe290e153bd4900c5819d752c7f8da1efa27d7983f95bcdfbf433ccf55d3719df6875e47cb7d90c6d6d9a2490f0c5747818c8c5a62b9cf70543e824b52378f444066712daf8e1278ab272c6efb08fb7d7ff4d8589d7ea52fb2523092afea96d24fb642f234bcdb22bf5a728987b02ad58e781b5c8bb6b560df8dc71caf792bc08ea6ed186a876aeb2fdda5d200f75caebbc2b40133119959fd20fac1555dccbacfdc05ad69b2865916de46e7018cb7e633bb2a032a8a06d1166872d77c86b73954d1f79ad939e29dfa6cfbf8199fecb263b056301fccf7801f75be6e7ec44b001f370a073a46c3b1a579185e068b2a097def1866324f48ada1a415392a3dba08f7b965b52e87a51b00e5515c1ff50c466d3ff5406c937fa6f33d268e7e6c751219ded92485ace895d61d3d0c186ebdf7e1e926a068d8ec70903bd8fc25016db6e67a9d63754a9e797c187c761d0248626da4f946b3076a50d4672bd69f8c582873165dfbafc1eee9b3d508c0a52cfc9eb30634db788785020b80e7ed580c75064f9cedd6010e39e02105fef8531050bc4763a15e75c32c030ada15b8a14b4b9b374a922b2a79b66f7163d5447e6acffa37999df8115a083e54a4b0af09d06181b3c9b02266fd17427a96c724599caff13d4ea34b4e344b0576b23422a1f35bf081b378c0b1a38d20c1a00b5bac1790f4d6f5e4d5417aead3594dc3224dac1610c0ab0f691353bd733a215c685ddaa6a41a686a3210e8a48ab38c2671a7e47d2e1bf2a961426c7921c7a89755755f6aa671ccc9bb38ad2f2544fbd2ef5040443eb40c8bdf4ca371a649205ec8d44970562b2dc34bec1597adf268da01329c7515a5a9bd2d9a5281c52e461c51dd2a0f11bb8c6c974fe843e57f954a90fa10d13cf129002cfeface06c99a04b99144ebdd4bf73b96e5cf8945e5faea2860875185f7e3a824ee6a4bbdfd938d3b8a392fa5bced4c12d1e5a9249df1dcd710fcfcec34c168feba3764b76ef2113f151bd2f313458335c2e09a10b37a952c30319ca50ca2d7ca8002df4e632be9fb2460ff3472993d2da63d0f3ecf36ea92f3b6e834bab4ee1d10af9ddd1e40b90958219054e681470fbb690dde969399472e97b464c226687b58a6ff942f2fa1563ec63b4994e031ab822b6c81bb279be1c064b29d0e3769c957583ce8ba301a839cb1ade68d0723b5d436fde6e2e27a41f62a3612ed0293e99fbc32ca746a4f46e453cf9099b840f4b3dcfb608551f78b5552dc8c7a2fdf9304033eb4cc012cbd53b11e5c1fdc63ca86b3608c80b4990e2379d7ed5df36e3379c2c6815ae91e7a483044183e9b5eff18e4445b46a300238838d0aabef355ec183ff76c7fedb742226f0c0bf4b345f22a417c112e268e1d6fb19b9cbb75a6d13ef580108afe137d674f76b0752fca7bf9efc2031a297b1f788c9b521fc2896733c01d05659a9f34ef4c638c79ee545ce76b24ea03ad644ca1ab9259b38112578029057d3b966f03e5c5fb432795c6025f254de749ce5503e41b03330597423d8fb79fee7d672f6b7556c119cddf6aadf3a736ac60d6edaaa8d6a828d978a3d27630fd9513b34fd697d8d561c1ee39a7046e353ba2b14654c7dc0b942217345344d5487ebf8ef141e2adaea080bcc58868baab41c966e77ad4ca0623ea22e00c119687932dc471dde84af7e43b06400c091d905ac1af8db92f92e44101f028edb0684dc5263ff3d53884b8e92bd235d051e880a7e8fc97412b18341320bdffb759d124b02191b8df0bdc84e932a699164495f8a4d3fb5ced905ad1ca08b5cea9df995d775730c59dc44a92a4704ed1a37524a071c5d139c7f34fe0e9eb84a8b31452ea145ac6ab82c5e40e20dcbbc0749bddd1bebd44972afc434a3b01945ab4aad4f6a6b3df616559eaa5d124cd4ff1b1a8aafeceab7d9f6bcda397ccca7416267fe56220dae93e11561426846069887624ebb201623bf10dc1466f909ef8d13519f2b45d985375a4c096ad1c8a2a705915e00e62561c8707aded80fd94378d7a40e8803cc0d719805a8dff68da3bd4d07aa0a5e23ebd393c36fcc9446fa5d30e1d9ef4f12ba423042a6a9f41135300b2654cc50427556e9d65ddf8b3d65db2e6c8114be263274c3aac7f43b7e8c03bbe47421995be5200fa031f22ae414cf2b4e99d6d7cb08368a030d70a42c16ec37b1c5ddc150c138523cc224fa08ed9c5cd2221d64b2a2c7a68dc836ab2a1cb6f241e70f64a28f23471d5e4addc6e95be603355957c55203c031af0d7d6488d62116986237874813ad1401c52322cb7e46623f8cfda906253e526b1c0b16077bdac8229cd4cae958aed40e9b7beb03810476186d27fbbbacb8e9f73be0c29242f9a73d941528bff127a839e1ed30e48640cc063e924cd7e80457faa7319f8f3a2710d339d5a3df04fe04ad25d9c112b6f2244dd2626fc8c3783712a43d5b44a60af1b273251c8b27113dd85b713c5df0eaafd4cc84dbebea96e4f2308e147173c4a08fbdf5ba51b447d68f7d6d41476a841b22c71ebd61275a3964ad75c4150868b365a08bae31fa48acaf59044649af449f115400df1414947aaf0552e6896f1b673f0e5db2dcfde7a860aa57922296ccfdd0640eabb1c1d146c35e1ef4e21193257376c2e21d2ee5f27614abcfa6fea5671705d26ef224203f78da8a1edac6297e6b3f51231068660c3ab51e16198e02a38cb90529867e9af334a1f59649fbfbe348bb0611c0826df3a197df280742d8f0ee2c38e359c02da806011d61e4a1a508246df9a079d7b7db0dd4c74a3786145763d48368df5e4323d6894ca5fe1e06910c1171eef5ca954fcb4e9bc2fed495029185d1cfda86ec6794633d41df568c7dfc90e1d87c439368d850a7b74d3bb26042bff3909f0198b460df50ea8b96a14ea2ad8bfbc242c0b205e3ba68b0b35b62b4f44c13290e78850f32a17c60949a61566810b5cb322c192352d94d9eb7fcf395b8d9484c7d6e2e2020d11e14b1ff7b54ec559192975a5691fef489adfae4bff62e619b0b55b6fe635cbf5d82131e98f1e052fb14dfabc4a12625728e9443e6a6887ab3b5c06b7ae4e9183271b2e7bac3c68f4f1cb933e99543f4ad74ef85437a5b661a2b7d5c82183393031c1661b63a718d1ef3b216f461ce408f02603ccc77e590492564f138640a133584942f7d2d20a3b7e7f2f94bee67173dd5e3f9b5978d5a4a6c742bcd9dd2a56d57d26af630ba37128d73d7fba39decbffe94a9d998a988a81cbad609595215f6d5fb23b2cab43e6ae3e438633bbb8b39e09e0a05f071c7d579eff5db2a5ec1b7972893d0c87a35c482da94924f201c401131ee6be54b4c693ad835c3e414b563f3fa16080d71f2cb0a56a533be67bce6c81dd56c55e0b628e7f0e1a02c26c4fd293eea94760d041b0fb162c1c0d5befb878ee43dc7a583729c265b0eeec2467ed0f5122093e44e721aba0b4b2b79c3fe8ed2ad0da8f890b85b76b03fd7b5938c568230735b9a80ec06334af580e0221f09d74775ff335fbf881db434bd0ba5a53ab55dcd9d0a6e6f8f0b538e00fedcd3398fcaf05229e67e2d75de8da03fe15a1b08c55ec32fccfb1e05259e96852280eebbd2e74d2d997103a7a104808de6306879321d3c7cea5a5cab82b5a8ea53da65c769b6acbeb9c60aa290aab6481751d14e56e47e5814c0cd4c2dd78b9667090669595eb298b421154b25325a8a4495b9538538fc4c0d0032208f1e08c19c8a0902630ee14cab9c43012f0cc7ee453f69954cc6a3c56250b31756654d7765eca21cca66ce6f17380d2821fcd4f0e15fded2148da36011394d81fd4896f8d9e923a8e4df2bbbda253e0c59d70ea389ed5a8b7909a5e144baef00699daa1b5958f4f8362b11bcf21e8baf4390dd1d3529f86baa030a8a7d7bac3d44d919c4ddda6b89604eeca56018f003c1435e0b24df985e693d78e19c2977df667cc6b1aecf234bdc142c9f9e35306e603b3de2ce2ecb4334901aa6801bcfc1c5591eb107507533ecc51431d65fecd8c218f0b59bbbd9e44ac3506a7fdd1ce7203e6d956189283cb4a4f73f80c7572f148e6c5376b0202b70229e25d988cfa6a681b6c255273efcb33597f842bca0eb5404a7b66a091cce2592d068614627a2f2b521737a7a8c3b8008ceae9b494f9efa17d957fc3297ffcaf42b7e53620969aa6ea02d631cd3c2c423439ad7194bb3a86b604c69e58ed55da8a4e39434fc404fefa2641dd86965128b5e7b29ef383c2012e3c820268e2c4a7ffbdbc03d734039ef18534bbfdba8d80c4f11683cdf2e69f6469f3321c607c2954e44c6779072caaee60a9364535ae40637bc4136b92d2179ddb1c95fbe84c2d1fedd8e201cd51c07574d0ed042219299326f913f34645159488d45a04b36b04682f55d04a386745edcd15213d7f35be7c26ca6fc447ac3aeaa37b8564267208251c00af5f77d7f91a2a72a51bee3e23497efc387fd6298857178026962cc1c0411eba11d8cf692ac789e6d9a62906afad386cb79ed679e5df52f00f9d7530c051510fee5b8030ad871936c64cde71d41586ba9fc3a4bb6ac8692065e0e4944b89f9d540ff311600a536f53e45e08c87815cbd7b876e0cb4da4a183643dc9e492d1212c0a899debd028c783ac5bd4d110f618788e4d423d4955e5240b5d6547143a675fc1f4132445e0aaf0b07fce3e9324199b645abec9945c310c270ad72d5dbafd63eda583155e0f3d445bd56ba2efbd5112fee19d160f2655ba070c5847d3a191d121d0772df27f37c175a1977dacdd85ed9909779748ec33e1450658633c50ed265cf342f93b7d95dafe95a28452b3bb9a1535869e49e4a6280115288caa8b04d4670675f7fe1f92bd94403c08fbd5d7d2ada20c8398813b3223828b15235638abc28bc992e5094580de36786463b02fb7753580bcc9e62360621c384c93704d70c0622426660002e318d8c9c7be4d772b62d4a10f46504f345d1b189e46c9368d715f31cfb8de231c6a1907f6488dd6e75764d761f51409d2872e875e3539f22b1959a7c37d2a81f42702daf0ea9d4cbb19f50421c3f3c1b526d8eec89ce52d3e645f966ee06e8b986522f0531d6dd5b844ae45e3118d9df0ea1f214d4ce3c554fb7308ff72e33866035ec9a8217ee7c7343be5b25c694f3e9ddce704cd811139fbbe370dee8f32bcf6ac04f4ff37b22ab5b0e35b5aea9e6162214b3b619834f208693dfa0d8cd6dd630a3cb35ba4c0b50d551ac332929448665d04827f732830ea1023852901f2774383c3630c40a1c17690b748c0cf4a5cfb7693a20036c8a47826a9edf3744b107e07d420cc56447198d191072acca2405e5fbca7ff2a7454cc8506596da322a8489b4572f5563822c331880e5db4dfdf17eef23b767cebde091b480567ecaa69d09e6ee0c3c73ee706c97578cb6da3f88724e87767eb52f8d0f13cc526ab7a515d8261a724cf621ab7b4ea0dcd90121861c7c4d22c6563b8961ac724c5c7f7a40ff09e62c0697dc5ba805a6f85706a752896645d3bb8c0457cf160a773505743eceffbbcc4c1701bff752fbe933ea82dfbf498184b38f1456cd91e3f42e6116a18d00b414a7b4742b6e33edf48c6398c626202d4594fb2fbeedb0be113a22c128570e1dc732f4131b7e99887be2068559c8efb4a9af38da85a8db1540881a21d0fdd2bea0e26226f8a94defeb92ea61b2289503fd38715a3354be288e2103efd0658681a2bd6f1abcb8c0156c39d25a1ba96ae86944474418d8bffe9b33c1a89adb32ea009ab2e5af3f848680a87bc5fe38195bff8ecab903347505773964651de7d9a51d0035d270c50a8810695fc1a5379d0165bd68dbe0ce579aad864585774b0675172e805ee4535d2071205d609573df91558f6b2e7d07c0a60a2911a43efae6e4bfb5000c3e1316f09b7e300c3089668f0f2f8abd7533cee57ec64eddd807972f87604f3c205a0e031db9de6a124be1bcd3461259b6b8da41247c87ab73a70a7f6927ef2cd738647d3a9f81c983caa4a4fb376234f60a8d098bd25e843141adaadf7450b2a346a60da445b8ea8b782c0de0ec7ee0e774854dba29330d9181a0809b765f946dafd344f0c7f591bd37ffd1d636858821092841f8a57c21a0316b2e0062f30868670f25362686767fcf3985868bc7ed0e5e24a89488c2a495de7b190849cd832fc9241c4222a398e7d00e496f41cfc83893be7ba276eef46ec2fbb86fb7174f0e62909e2f6c48fde9a521f47190be2ec1c91bc09eff088955f4d7ea05e5439932bfa8fb85c46ca9f861ef420717f07a7038c0bd26df691f5ac564471556af3b3912b05487484f086592893358998e0cba259db0a7de0bd048ac1d09b25a88dd6f216e5e7fa5504ede726911a0a8a6def3c4e8b31b3e0666ea5636b8b6c9200e974aaf36610942241f635277b8a50a2ec854cb285d98652971b1439f8fd7ff6c9f1d5ff6ffe17f500c1d44fe5e13c62a45013c7330de333559985baac0525cb96f7e93a464243b42274f4d92298a5b08357def17e445c89cb1802031fa4b8aa66117ed6f505d5498c1fc8b20577c96768ca732b3a976fb86bd7075de85444d8c72d0ced2a04fa2580f8c0290418ff3090c26cf1130b53f083956d12213b472e892aca5ce29617861637c74e192f8c05983729c61f5bf115eb990475fe89c629fb59953d836a1cba2f086489d619a2b67945bd5466bf26ac87cf50d71361633efb2c7eaf2c9070544d7ad64c1d376423f45f5d3eab0df48b0c14d09bb9589ba29a2ca00069bb91fcb93f8d389755cf8d69313e583eb3891eb3fe5df45b60e84876fc86bd6ba62ef03a8e83b0a7a116f4689ad217edb901247d68141d1d6784a92cc76482b43b94b4a06736f5b404d864c0b18cc610b343ddee0733b4c08aec432c947150157155697206e90044de9a024910fb2005753cea7d096c69e41a5ae9e1f608715e263a52fafe8b148018e0708763e7319d86150f326a7dcfdcb94374b180a337864e2eebb400c0daa07f9547b2fd729abb465f9b01f655bb96535041ba142852fa78e5b8d3f95242aadc3f047c02a8f139ae1488bb9267a5cd01c03547309628e6f43650af34138ccf3a79b937618ca71a365bdaff4801148bd1f3a226e76915d0fc55d28abbdbed32bacb3c846a85e0aff43be98b4d77b33d6bd9613616d53ed45cb8b0a095b613c30434fab03ee6356f1a22081c9d7ba00ffe79e4d06d4b12470514d0c086d3bf0344f1a36bb72a4c4f7ce3d567ab6f2801406caa2dfb7f90e04100552d91bb1efcadc7038cfa750aaa4df2af972845ae750472c01eb71a32c82f5308f6cc7a1ab41523a3f50133579f941b761620c14afbf0163df16ef7a0a733660027d66d2c2fa3b079c0d610621f99ddae9d1fe1c91169faf9cd511d42b88e1732627066128e84187845656d5011e4a358f06d48be741016e0facde6f2e80e95d24564b716588f21e58a340c934b27be442479d70d7ad1d082a2f4d00724561028b634dcdfc5f195e2c190aacb61a3900d1bfb53fefbd8b2a11530bd28ae838a42cca09d645e941fdfd64cc9e2c170ed3e12308855bee598ebdc411233363201fde284631c221984572d3bc689894eae4024ac19da97c303e744114ab66e46b8b6766d8d3e22a46d5b12b9a79bb1ad1e144b1d9bf71fed9b448ecbcab7a5722e08032f550eacba884af3339121ff0dfec0f08e74eeff251ba2accff1e2397f09065c9d52cada3a4ffe9a75a6985115a304d47b21307795428cb8bac3cea5e8d45bcb98cbdda4818d17f6d8c90dae554e6ed38f5464287965aaff2b309611ae39b5867d53edcd30d39a762bcffa59e6909e3f42e78f5a1cae3ad010c2af504d2bc59c90ed8cf7b30a6395aeac92572ffd279ae1d92ec8e55dd4a68c461f1d926b20d354369283c8e170d09898286d464fc76191570a0f85ba43a9db64072a9e085691acf8fee165889d33154fed87fc9fb1ec3e5bf37c4714804c704b3264003b865ad1bf58a0656048d7e679b33e7cb4c57704e2f87d96f9526f0418bb24a9519dc522c1af940daeeb9f9575985849077f33556730f18e601b66414ea6c6985179423198f4ed01b5be4a50195f09e20e329b1ab817540a019b371b5f7fb060d17dc0055e687714593825425650c041dc351511e37b0c3a377243a8d121d09db5491c0fa0f1ceacee61e4451bba722396252ff310c66bd54f1a4326e316799b9b8a5bb9d76137096bc10b36bbee8a62144531bd769b7f3b81ad67de498f1e31a7e9a7a2c1d37e948b5572e8c109b1e2f6143482d07bb60cdda2aea3500dbd3aa40d2640bb0f97e094e1c164653b02760b0c6485a56c845c98a81a73d7efba5b5d2c6498ea97b3693527f8a3e33ecdb55324a9034f95e4917e8b4d2bba5c85494edb0bc6fdf34382ecc86a4c5d4aee8d1d390418f0a84a7203b2b018f10cbaf1ab47bed374184819b880f16a84689ee08fee0e081efc8dd44a1b7f7245c2d25bfe9639f91475b5421b39517f72a41557e7914b661692a3304afff1161ca735164eca72c22748eadd2023bda93685e4dd954fe96c968d1a3e48e019e44c8aedbea7133be7b184081dd3299af35f472ecebf4154116ac2d3a241bbbebb04ab4d71d1e0c96bbd4a06817392deb76a2e702cca2f3f222b8015388964b988e63dec3879ad67b01b4cc7b7e7e430c9ac8628eb0d1d609a93be69b967035161068e33723c55df6d974631ddaffb806f374de9d18dfba03ad9a7e479d194f679fa12d5e327e22ca71f02e9e18e382cd5557f9ff363dae8ffde1c09a834803d655234a225e16ebb5b46a3ea5c650c78c2f8bff30e6210c1ce91b6a9a6bf1d779b1d5aa95e709c2bc0c84a783571136b7b465fc9e0bf1ffc88a27e40f35cdeb0bd3320e13c58814174d913763d3f1fc0c9539821e130e8e3190fd614499eab795e03af46aa969bc8c9327049f0f14814c7435c0332421447e8d9126fa63ebbb4636d20423a8c5c2b8c94c2b1ff3f202c8ae68dd18c3e7f58aa42f1dcb2854157bcc4d2b639a950550fecfd75195a343d6aa3351c695df3753628225da46074e5c581239c230d09c1665015cac65c63aec61c86070add6622e82e0fa9c41b74c4824a75608e0b5fd3bd1898763899e8878224800a97c0151a1459a9d11ad8d8405542f4baa151d1d5670aacb20634bdd27a2db4ac96520667e356180a8d138d6826b7145063f45ecc741d828e8c5247e88c588b0df1b24a51ba2f0da5aa2b7d14c6e7cdf6e171fb5c53d82c9564eb135d278976c8d9afad5d92fe01e493f5833cd4b7f85d57cac16ebb31e23988a4ad358a7959ddd5f7a6d84a41ded0a247a0a4360effd77a1e3714bc4c64c94daa6bc4db6f88d608f59bc2d312580e6b390b2b78c71f1c5c7f529afb999b60741091a1282af4b091dc2a2759d6689b8c9263ea5e29bb986bf430bf720c00e4285cfbc57a2695bec4b675c86f7b22a0b87ce9bec3100b907758f44ba0c1162926d19782f393aa95518ae781f17f06617aa4fbaad710124d1f50ee847e978362def2ac339505fd0034a484062899a499d726fe38aeab0f4f98fc10049aaf299ef8aa88d0294ec4fc27df94d43f2aebefed2a20b9b2f246cb57409e97c1828139de4c3c90f92bcff8f6f2d16aa454102b311f889682547b55863c75b12277ae5cbf232c085b5b3543272dd3ae2a9e590256cf92ad4a14253842a265328a9e943804ea3a9851e00b94023d8086956f07b1db35efd187a5359acd940e2a34d2530e4dd39c6b73029c22def05b38508173b7bb3748542e91dc083c87825378e594325142942875091774ece691608c70dd89be55c4b69509e310334d38a8043ae26942b017b5a258c17be01763e90a848ac47c0a9abad890978c7f2a441fa30d51f795c370eb23a6f2be9499c38480eb1fbbc19e4ff59402354e2b77a552ba21dbef0fe56cf486a59cf351d2b47cf1c8717b439861eec22af05aba902df4996400852904c15549bb3d0c8366be6a3cd524d9981e132a9a42278656c3daff375a2ee045af3477af5521315b688611044a1c703bd0871af8c3cc10885e851a046f0151a50c415f553e0288d4121cfb840e4d2de6a1f849352010fdef91eb364e74be78cd8998322f07b54e9c8a0d4ae78304b7f83738dae4a6beb8ff134016bb5f85d802b45122e4cb3b4e657a0b944d16dd908a9af7f76d7894b861e91a25940901d809397b431c26cdaea90f625253f4a13f730e3a2f35c2749474181e66a56fd6227b1ae931bc8d9a4147f9004de831f6e2c75d88b731dc5050c50461b33276ae56ca202e41c00bd29f913b0770a5be90dea1116b0d3e3f7d01f4593d66f114ec51998f3b84892c2655915b5e87b60e61fe1dfc33592fbcfb0f4402ba36be5a32a21eb34c97c53574e9e1a6588d4c28f5f507d574dbddb05be9318b7eb8e8a590646addc2802bb6b91e6df4648f15169cbf98ee57e3a17245c407cf2ffa33c14cf006dc5ec9afe343dea7bbf50c3db047056a9b37eec6cd1b02364707b679591033010b006a547b64750cbd529f63dbdc1288e6869dcc26da66e1c8ce49930f9e9e165095c0d1a088fbe59b74516611c5ba66381de2eb9ae29632c9ff81d5c41ab19838bce6b1da513d6bbeb0f0350cafc154ab86e785ea1f07b22f842fda91379eeb4f5e90763e0c1a0e4be23081256965f2d7d745fe66198db4536bcb2ba8019454453e409a1c40e70174e053d36a3510ce479760fbd4dd046498ae998d6e6587af26535d420bd96882e270d3acfaeff8b9d2f1d430918dcdeb252985bc3f314c554c64463ad992f68de20ab0b48b67770484039a87110fb4b9c6d1926a88212caf281d00edf6c16239e55e675ffaf0db4e536012224387a675195eb1291919f06dd7f620b8b6f3b52881d1375f2df1538c4a7d32d4759895a2f4754c6d10e4c581bfdbd5b7148e34da03f0c1fdc32c379fd1a361314e37925249210a5b27af8940bf1ed39ae84b380d39e432359487a9e43edc9d566e3cf8896f51b037badab19a1ebcd4d29440ac64378601fe7c6879d23436c0dfdf5fc07ba0ebc2a2e237da33dd33217750a2827a25d59ba95e6f558b2455ccfbbfea1671b1db145c9eeffca3c9bf1158deb9f9d8e91bb8cc0cef6ebecbfdf958128250f3d13b7dc4e50cd330b1c95499c6a6b71a6ba716e45c032589ed61ae099c8464a2a50ca695fe984cb0eaf294c8e2b96691e1b0d96d595387d7be1547a0c571da7b1172cf3a75839856b262640ec73974a5d99a5488ede4f1880d641a07acbc5613cb5d783aaffe86716a4cf0fb632e432416f7896470e4f6f87f3633e3b4bbf6bfaa8f44054d966fae13ada011d710912a2224561d7ee4d336ba082bf0e69bea0d305fa15912fd2a4ed7cf27292f17423149af4d000b43bfead2246e4246493c85d6b0032112ac16a652de04dbae02c1a54e3ab58a4b9428e5caf742ef770123f1476ac0e785c345eba3f8d17eacef4c54dd17767be09d34d37898f6ee9809ddc07c4ba24fe51a86b9a7690723403fcb00ac7979a72e1c48112dca911dbe6cdd3e73b640481169d1077557e8d79033af1dc2f70b791f9a115f15a49102bc95ae01048b3be07c189e038d57274f05f44dd79aebeaf1d2324c54dbddb75c7f0f8190d9b6ed5ac56d1dbd38bc38118f9ec4e77d4615d58c12acbcaf50f19e4df0f904669b2df509b4fe2a31a6135dee7909708b9f3aa2d49ef0f61873be29c0f2122ee1476f32ac3ab6e19c4b6976ef3e1fac3d7df84f9c6d3720d0364338c1a778d9c2d2c879a515a5cfaa91470805148a28680d912facd7facf193a704d6cd8e89644f68f121021da47a73e20df14dbbc07059a43cca642338051b429e8b59d23eeb59a22ae346e7306beaac18aa97c8e0ec2933450fc9fd82345b91368a5a75fff06ce5c6cf269402c53c99dcd9bf60dfa57c14435d719c7fd3ab721c80697225e22c47d5ecdf0f6c2bb13d2b03856484a876f240d0ff01ad984670e54b4555b43491894336f4d53615912bfc0559935f5385781b47395a31cf05f36b3e89b615f7b8096acb415ecba89bf3cda2f2f16e66bd53f7b3af73cf435872cb166b4373a6cf0f08cfe31995d5ca5fe5e367905df533834a36191676516e8b5fb43330c1cf0a08ea9006e67d17a6391ab6c084756cc04a9acaa5cbdad9188e68da673279569208394669159cb76b1f34d435dfbab3f18f901cb3806e7cc645005207915f4bdab12189943a6332f26374f8525aaba4b64aef2f3e4cf0d77608c129aa8209ff34a1e2fb68415be3c2b82dfb774134932d796e9093698fe6374fe567e2302f29629598a0897e955726427f52c8605ec80f8a63493792b5ce65814904395ae63d04a8901c5197be45de6158622338b419561ce8f4a135d6ee296198315517de0649ebc3d4044d9f88c9d34fc509a8e15ace0f6ca2089f746f942c89e9624c77f42152e8523db8b482d6fc8d9929ce7f5e4e68ab6ad1ec6d3c4722b9bd296d43baa8fd91691d1c0803e3ebb18e3e4af0c7aab568a652b21b8fd5309a59036140436d5a4c73269d374aed2c2352fb2120fd3413354c706f49e23aa47c755ff36b8974af6aadad20f229c889d2e55b367f1951511aaedd76c585ac7b660bc6f113528078b057fb0723c0328534388c98c70f3676126573f386a19afdc35deb21910c567cd182d4beacf0c8503371a74ba9b4ab33c21b0c6132eea1c4c505312661555e97f630ac1b6103b857d9de70ba38185af39e76c73baffb22018790ce0a440c599bf8b982cd165800a7182d6b27f2e91de7a02b24d2fcb63c43b273ff41a8abb55c67d6816b230f2635e14d952ea84568fc9d5bb47f4951416db3d02b57344fdf1753ee629c413c34a66ffbb2e1bdc7cab0bff167eadd912c4c133f0db9410c4254fc422818a2f828b4d9884f654bf0b241bb4dd439b110e4e8c0e2a075152ec887a3a472a5d4b87797f3ee666b4d77d31ff6bd2aeec7a6e81df581952a56365085fce0288c9b9852bf167f7f668e60fe36d6e0f53a44824b304331d9380958da38f1c25161f0136faa9fe09561443001f6c76be6de9e28504926958cba2418b063457506b516c910794a1530674b718007a9219043cb9d8cd222804cf9ebefe1d0070ff7a05acd435d6078ca510b1b09941dfd1de267b8bfc7d8bab2ccb528eb6d864d3570b3804d2c6501290776512dff1ac5e78f843d6deb472e845b98458caf43a58e4a01bebc8a31822a519f24d5bf48acbc559e041198f1985082205a9ba23b46a3d833a1b82cb26c9c3e0e6ed35dd9daef704f9e21e00b5d5fa9822bd0252c636ce30bd368ada58d33facf8521e2c41c3b621864f55837e037856d9d0553db643863a180a710bb27095f82e92f464d351598948d76e2af268ace5ec194a7f5dda82479dd5cf39a764e372536aac96cd24997b526fe62c26887f456e9ef3672f8060ad4fefa69a250c5ab452520492169001c9b10a4082ff6deb9a8b60a965111e913b4371bac49daec591446b9af1023e0c299d96ee84d8f7c7e865f2e5ed0d7169f2fa49e15f158d13af616214c527e55c6c8b15c3a7a7692ad2fe5f6fe3f546b29389de3da31b5db06a8ac868389aae1d20c63dcd564cf33bb0fb9b9d8e700ea9a94b59e7c0897f3451b14e3c7f870102110fd02acb07947c2ed38109848128acf085b0f98331160f974896113310d4f02503615592f15528f165dff16a8f4b705e6664abc6b9cf6618d0e3ab7d5f00745b717ebe30085c2eeea6f5ee1500e8b3b8bec03cebc5815a1ec3701bae34f805395dd60ffeda0d22c433117b64ffe24d97688f188eeecabdc2ba10fafdc3fca56d69d0e16d95371bdba22a208906b361bdeb333813d6ecbcbc107744cece1cb29ca8fb51ca38bbb267e247b40fbc387d2e64a1ac6b37a0965dc441f26a6415581541e97867a38a581fe7c58bb02b32063dfcac5922439220f95937b60edd46d9dc393faeccaf0ba9cd4a2994a1e41b7e0894bbe0fe657c88916e60e87664a7dea4276302e448b8381bd09a9cc7f8294d8c872e9a7c43c32a438d311c9b8df729db41b6cab1a5b76aa3c6d5bab384df71ee0ce7d38db19496896e50c8b33d288c67125cab9284d11683d5cec0d2297bd2a1bc92d2ec3541093003004daa0f72f38b1a8c47276d2b88e0fda5f5706b1af0c6f93ed8c92b5c8d69979613a6cbba17ef335e0db6e4053e8932d3538a1d245c1af2264672f4c2a5441851ecf4cea07bbbe2d6d955f40aa0e1d164d88562b146eb09a3f3ebebd53718b2d030ae8a07acff115b21b68fce8308ad0c155a8c701951020975a38e8deda630ce13e231982b2aebbf62b8108bf7823f36119fb36757ba358e13302152e3a5360451da0155c9fff84c0345fe004284df2b669001856eac0865c82ce6d27c067808ade1e2606542ccb15f0a17c4faca777f45b3ed4718176f7e1786ec4d3d74629bdfdc3e12b390416ee9b85c24c80ed84b09ec3bcfe15e1b62e735a4c622fd0914919cefd22aa53f404b88b655735cbcbe6444717d43c2199b14222e1736169a227906c19b7e382dfb11d2eaec292b3360c098c63bda8436368f79598c1da17b8cb5a4b8cd9a91d22d8b4cfc87d69f76b33d10532395bb280a352e07381230378565d7161b23870853537a1158dc3e85d6da56dadb0b52d3199e59ab8089bed941b2cd06174406649a6a607b477855b22f70832205f3074b0e7eb70e61ac1e9ee4c6eca2fc3a020dc0ad215ed1eb7ebafaaba61df20e3cc10df39d8edf4f03814af84b07f2102ea0cfd54d8f2d618d5529ebd05ee7f3ecadc47f015feb0d44765af2a8848568e74060f9d51bbc663e4efb089f2d743a773d1e6df84af24534fcba89ae8f10750ea710f43bff882cf11520350438b8f030ec0246951d4c6b7206df5d5203c8506f0919246c92a92b7aee0bdde4c859840f54ae530cf73f7abf042c99b913fd8b084e0d02f34507fe327ef9d124b338259ab3a09429c8b97179656c927d972940be11c2160883905b4127978be1679b8b6eb4ac07168b5f3da129d077c6f930883ca7b9b6e8d7c80113644008691b458c884625d20663e8665a31de85369adb2ebdcd1556cb1e963c8e767445dedad4a5d78d9ecd7430735a6a6495489421a11ed94f713644ee6d4f4ee76585c906932600c28de680521eff20713cdc703a5b28d40d876b8053b8b92cba96fe8371133cca03af66f9e5618d9ea6ec5cd08c5518eeabb12aec65fd40fbb3b1a7b87270db43fe4ff8309a492408cbbbf6923a597d92739b51292feed5cd66fab2a6c44da38e8c707b972ae6b6744faff3e3e976f54d35c3a31f9d7d2cf045844355132711af4b0da892416c82b8314d3b57871413470e8efb6da99094c65e59b20849b253ec845c92110619f9a6cfa1ccd510a3a750fbed6a2c64f3d7ff63d99496b4e0d3105d84d3cfa9464c66d5d045c8b46bc8eb2b816d459d97a18564124f8aabfe5567d83f919a17971fb7c296d0edcd0618822b1902fbcb628bae0e3d5ef6c912c47ad1de134c88b894413f239a09b7b60d46cfe220c45b158d55ae66628d3a28df4c11c006c9898d405fb4bea36b3d0c2c0a3d9b5a2d40a721fcef176b29dc5ac869843959f168ba7d4709f97e3442e85485736368002cb6c7ad18f297e61bd3a492cc22adc59016bdfef687eb39120dd511db1a1cb8ff66df52f71c695b08a8c7f69d2b95d582937d1869aed7fda4bd33249206dafe150e00f594232e7d44f125500efad69a7892f6cf6ff00e6c400353630fb5b04531b92ade1f15f019efdae71f850a92a96becb142458b005d8d18af359bfd35f4524f2c336e28015df4e8cb78b28b5a1080c3d1b629635bc4dd0c7d446d6a551a50ab58ee647e59a8658f9b9bc222dd2707b394b1b69ab7cb586d54c92253a3d73c7551d88441d8e359975c31378418fef7d31ecf4200584944ff2324e7fc68ed800606bfd6778c043125d2e3af6011092da4c91948ee0267807bd9c619111d23f8b5a7b3e67b355b759783ecc29f5536cd0d747b91087763de961a9a151582f7a83dad5de5f244b0f5fd0f5a062efd70b6c22efeac744fd3a90ba15c856cf03c8dcc17007ba15ad4fba7a43651041f141d58e4fa1ed3b84aadfbf18d8f080161f15c9efcdc35b03222a5ae26bc23a889254b209e9752e47cb9a0479bb694e4f1a9214dac04e80ac112d12bbd10d9bc3bab61a5e88775342153e9273b84462b1849a2246adcf231b927a3450d6a3dad8aff40ef59ea467a716e26f3ff80fc53731237666d3439105d37c4a53c57cd84aadc90c3dc5504b683f6fbe8cc3906571b4c2b952a455d564c19af8d265d42bf906b9d46fc1729613160234bbc50465681c92793266b57ea3d131b0d05bd130bb1781782add9990e08f758c19939f4b3cf250e1736e59b2b07dd2af953dbcf2aff26db22313439b8a11653e235e06eb1becf72d3d16a328620d8a339aefb929f2fb4c93bd7d077f6a23daaf8e2f621a42fab2a29073ce05df22e29f5c84afd0c025d3020d27a198a112884071cebdcfc2d8318fadbdad4983745873a557b0321bcb7383901ef6e078d71efad65a1231d1c08129079f2d97029f8050dda7ceb689c663ed2201cafe0b46a9010d630996fcd2ae6b56b407a1c615b2fd2529a40609bc0aa048df2320b44e13f552aa64991c3090d8f8d2b71b5df7c8a8925598903d5af72283cfaa2d3efad6a3e2c5dd1ea289293189a509e3940a60ee8de0e0f43400eef90037539e0ce65cd7e50e386b053fa8db9db67c79939de77f6ce40202c56444ca16f0f4f97dc22403fa7e51c4d76a06735a4da167084125e3aa585451b2b2e20590001606352f8d10be680998f51f28299078473ef399233e5f3bea9f32502891f892977eaab311b3edb016200f774a39246bb45e8e9623678024e7c0e2a569ef1b65ed66f3fb685c33e1d781b5adf60690c890b3f8e48f470e063238cfe4e3ca932b7a83f906ea1ef1cb94ecc75e96d3f906e5adf65e92f0a9110855a0ea8e8c76f6d8082b73b89fc841ff4fb84c4ffdba3033d84a841fb80892ad661ff1c0f2d1fe9ef6043dc9c16a4721128c01fe78c26ab0d672641eaaacb24379ca94cfa0a02b72a2b407b4068822942e7b3c34f3a55b033b1bd118c9f98a39c11516a455f7487466b8663b5f37e3814c3934297f00ff43f620b837b4a98d03dd9e90cf0b35d944ae887d259c81af86fd0313186daa59859d4afe9a8d0ac7b57e3a49325ec7f6d9fad7ca555066b8e41579ac0baeb139255aec8c3b9c79e933dca824729bb83210eaab9420843cee1650320c7542290c2f0931098ae86ca864c002f8cb2bfc60c721fc6356455b6aa9f0b038519088ed4cc158f61133c0e3c9a31636c188806807098e21b4526e68e7e6f7570b9731eac1386829332b2e598e58b2d2445460702d7f21463ac026c3ddef92e0d7c236322eda9ea015a2fb06e16f4d1baa828a68bc9c7e6e873638ffc442084036320cd1c42a4806f94b024ff4eb67dff0acfed085cbdbe3f748b43eae9c4a1d8bc4d9ba7bf85b71c8bd169ed002a3466cff33f430792fc05d84702bf26df77c6a26bc9cb6e58b4de1c1c071c4850d837c173dbda0e2c62682d5062406cbe18ac397243c76da40dce2e036ffbfb83b30302b68b11209872dc75eac7c7d950cc3421bd7abb9e8b19032f0979aa889a703f52cd1c7908171ec50cb51b81dff3a4e8546daadc1c2229e823172de89d80f119f211d33e6499d1319d4207fd164e9abb4da04adb0160848d223a93359722d1f4acd8664965386c3e0a8e1349ebdfd5959ae25164d3bf15caf50bd11a93e090f80b54adfafc2036dd056c883160bff0b8023aca6e8e165c49b0aefd36086e97ef469c286ee45b11b104af5d1db4190392e557b7575073c672b97fc7400881d0940431a10e164e00a8a1d5fe1b41e0e278e9d436e7f5146a047871c0d34c6c3078a6c8f2a69f36857e1873095a4fac6aadb12685fb9fc0ef79cd819722f19895465434f3b401163467db1e0b6dddf4d06cd5e79cf4ca4d9409967b8e64ab12212d29fa5a1f88d623928cc98d28e6062856f643e732a94c1afd9289cd5f6ec5953e9230882f06488412e40479125f396826a13fdb01c38acc580e5e929328414d13222f3af2e3e34c4c51265411573849a865e88eb1af386a343b3fa8d5384ee38b4013beb462822108d87008bbd5d75384456411db3fe410ea92162d3cc11f46d5381c56b788352af83a5160c27b7b106542246e11a26432602714d1fe01f191bb2f54ae1309582f2481791077a246e94165cc733eea24b4e1de4ed412b6a3a625bdaf0fc49daf90b5ca18b90c405da020868e99b64cffd983ee11c0a7cac4853778b69e21a73341e32610b5b56221a0e12c3be4b0c7926aada337321980e86d13fb33a992a1c4bc89e38b24892b3f1b019b358cafca4d2374ff8130cc6cc6a68aac7b3e1b06266e80265c4513cad126564f4c782e3af7d44064d6d75035bd5e361480fcf7a63d0203e9197736fc431c27cc61ebfacc20a251f4f95f33dfe64e889b6bb789bee8e5f30909de52aa2e88bd6028e5b84add62b7e0f82627e556c6a6f8e2b8408d5430e4681d9cfdf79402a0feaaf720c074268b7c384a03b4fabbdb1afd3a1390aae3f37e88214c25a5bbede631581365f6c6b5802591e84449f05cb5b5ab7f0df4494ee4e7fc6b70ce5ae59d09b38c30d07159683515f5817e7fc12d68a4c8186b7e3fb5a6e61d6b2183523d7a1d08f9105d6fbac34dd403f50a5845ed0c3b343469c0ab23c00f80a0f458d51b67333afca2b0efada0eadcf77d3f26889b61d0fe514626a507e741643198854fd6560054082238dd1d17b029cc0b55d50a50cd585b7dac431785503207873db0ba66cdc01dc4ea3dab5acaaf0625ca8d41417e5470eceb397fa3d17a506db22700ec07eb0da3157e01f092c38127cead19a2bf0937f6a6df241c74e01e64e21f360550403a5da87515d46b9e4bec51a0ac8b7335fc9b45c6dbcf90eea6970ccf5f8054a10ab76f9b88f54087e7967cdfd29e0c85f30068549d00b8175c8acd6145731ab7808b571fa80e40eff0ca1d20772289ae4804764b2ed04159a6e46fd34edf28cbb60af8a346a0b3bcc826a2621fc5a60e5e8eb57615b1b204178dfc60197685d997da6a1e80d3fd6d768934bcd7f464669e585938ca68d64dea0e2b6be8ff2699738631aaa802c272e5f652321cd9e287cbd86a96179526876659a1a3ec714692c7d553969d8585cc2671fc5c6a1233f142f50c5bbda6704b51b53bb9c91c61aec6bc6f2609803ea48a169c4d7b711e89b415f3c2cffaed0c55e660732567c238c677406263bacd47722f7792544cdb95b1b977b34f9715e60162d0d87fc3bcf67df51a7c1264d593bc7cd62eff9b4a1856a5a7976b1571397574185f33abefca9ed6ac03537fadb5f2d74d7414e29a0e01ec52058bd7964ebd642ece8e38d71a539097c020ccea2b4464341a12fb250143e0a638028651e0af30f43b4d56668184cae3bcb2fe7c7f4f8b262c067b98418ffbee00ec3a8fb0f58a3a8955e29656c7ef720998db9d2fa09b3de71e944a6f32b3330f83259bc1f3d746147a5bfa19a638e95e81844fb09bcca391fe385936c360b8030a807a1e9697f9245a3ad76dad85c10ff091fd1a950d5f705f9b708f6b7c4086c8ca096c832ec94c03616d6e5f2a029103165f37333507fa9b5ff829efd2b9e62fb826fae7d5d71e967659fca3e7f691d570a2a0052243452fdd0ce097ed2dc83fd553eef79b67aa19b8bccd908787a0ad69f4049028cd208329b169d4b48f4b098879265b3a672297a5b13e6e7cac89b1e5986f1f831b693b7aa033fcc1ce59066890059d2af5ecd11b4317c895c6d9ce752176cf6413a4e2903912ae044418a309971e809e6c09439354da8a29121769f64f9c7384b55ca4c6bc691c3e7093e1cc1623a43e2a46dd172f95fee511db2d2fc84f7e3572826d5187cb7121a42df2f142e8f07d76f7b7a17f2297990f7701542374e00ef67aeea3294d0293adb1ad83a898de1ddc86d2c163c02f571b6d580d052161070764609bca58a65ba76386a9c769a18e4dd0092bfd375149f785b4f196a4b36161eeb85d5aec93a204479b072c93e436e4bba3195f694d4141fd10a2ded3f0b5dc1127e4738b193161da1f02bc4db056cc0268c420d67289a62f68e882c1478706b748e130465247aa0b359fd055e61e5ab5fe8b24d5fc1b457ae803c890e778cc0e8e2eddd2954298480cda781e82d1e54fcb15cf5b6887f36ec4bb39773258c75b0b4da199c2f0dbea3ca99a39458e80f832a8d74b886e4ad25fa5f61f8ada19df7786677593b7ddd6b19c40e44063c19030253abe9ca6535407f569c08557abd1350c5137db3f1c7c38394f49065f317c12a073b6e9bcc5b484d8856bec08a4ddc7b005ce3ae1c4f78b000c68aeeb1d18af7cdefa031bf7faf5050d4691350e8430c9003195b165713fcc8fda707d696eab22cb044036ff0004f9fe18bd2ba0f2a1679d60a49ca5a1b01e37e248654dc4df0b2286e0c424b90457dd256205c296b5243c10686b506c6c456c5df704844ed1bfdbfa45e6da646a04c0624a41180c25d8b5309ebd39b03e48d1af3a7d19318e30a1486f2663ec0af6ce7280c3b26685188285bb52dd243e3a57249d849010e1aa109a1e0f401a03cf679f52d5051e908ac08ff48c6927180ba09d47bb8df74271e1a6c5c4476006afb0b0da1838adf203f696f4e47ceea324e5bcaa35fb4eaad8bf03135064ca38f7debf6ead8768dc442e7d188040fa316b380d4ac204f15bb8217e2b1cb73e9bff5958aed53b3cb7eeec0287a708c08028070c1c87ef6ad544d66fed881da23d04103e35bb21c6f12922b0a0ccf680408e9458681ac2fdf7b8ba7e7c8868236bd6558e01786a46fc153133af0c34b548e25032a8e3a62d34b3777879002b1d0ae05a3e41b24444e788ab82b3700be9c542da8cb31091f75b389025903807b435958ebc102a48bcc741ae972098044b4bb8e24cc889cf9b1e760a2337bbd59181431bd1727f9259cf86b39ec5ea062177211b7bc94ed3a67e53653272525aa8fae66d1c2dd39c4c9ffd2d5e4345d00378276e80c3a5daa4d538467a9df95324a669b9a09899f55ad30cfdf1106c2ed4f1d02c9253c290f2461ecc9e87682b4951529172317313a4784151200ba4626a8d43ea3e3c8f08422b88d0707e70e146ebada575ea958edeb5728786d62a4e6032196910c869be28327654230bb71efe0af79709e50b1d2067d8cad42de94d108da355e2534a63461c8a9c61604421574f35d1ca314c86064ecf46515c8d6865370cd566117abdbc915a527ffc0491c2f6c176a231873a80cac9100fee0180b06030a960535810545f4685c15f0f4bcb3800d55500e490e608fd517e54f1a41f893048460f7d548f483f0427b6fffcb871bd58f083b602b7a7494226cea5a1ab354368c4897bcac7b88f58be38497c82db9b1d93713841e7aa8e73dde1fee7f9c26a7c933ce7a2eb27b28cc8545904029796c87174abbfb141ad6a3bdcace19a1c9deb3d99152bbf40cc7870a19cb9d6bfb46189cdf6bfe3d2e1a58c1f52a81e5e9c81f63f0dd02b935a77640e9df09088db85d54d10780d89a60e2339d44a5bbb09f28bb60225b517462c7a311c9d031ec28b0158ecb7ef26f900b47e2dc6a231845be00af0e6924211a9bb59cb52ba23a8e287de1dbda08b0512cb426c49d2a7d841f47c83df20f24516672cfdd6b92c1d52a5f138850378b354dc0609fed98f2e0457d8619006cef528952431dce4fd5be8a0b7db27c12a3aa302382cc390ab9665a898b9398acff823e09fb4f0eba4d0fae1af51018b15ae90e9e6295a52eedac22b6d9ce0ada48d3ca159f10ab590e2a3f442cbfe54dc3950788d3d0902e230a52611bb2cdbc70d927ebfabad9fc348e8afc3c84384b24404bc042f74690b16b992e71d667153cac471c72ceb1a76be90de09934e083639b584065cfc024af1ad615c40d619a7032ee93f588bc2b951c6019761daa4c6e0369ba7ad6100fde2a2001070906be43076a3b6bee9e30d1ab047d7e6959f273ad2d0bdfafa4534e64ba91bc3b29933d00b1d665bd877dc80dee28bffd2dade7b6f29a59429c9143806f705fe0591e40348882837becf1037c86e5419818120840d4c77b4844d25b9dd1fb79ba641fba474f0dadd1dc38322288106545442c06926bd759f000ab7bbbb8b60b1c2fd2a01ee67a38f275c638502b8fd35882b6ebf66493e4588dc862288276ef715d5d6fa3d13536bfd010a0e309660c1fce084167049582f400041a5d0040a061044707881e4870302891b5c9ae84901082784909c68bd00628a15b42441b90021041d5868d02201d1041d569058794b25f2c33eb16221821a3242925a21828447b46259224e72d894001a1129420eda133a22225aa0322774b615f080ad863419e070c5aac48c801216890e7589210c0738502484ae2a56306990aa506e904be45025a02036013465f08414f8133f53065d04a9b5564e052e80b7d65a2b1343fed55a8390c1ad2db0a94f2ad12454962b225a92fcb99f7d02acec8cacb16f9474523ab51c2c8ccb3e2cc02205f6058e1636dbc1b3ef830d9be52c892be2a30890e934ffb6c8a5da9b4c42a084e0c986b09a133be89083fbfd434a7d74a8e2d22036f3b21cc9e3525343816d21c2155a643fb65ef6d1a10b8c0896da80c46a41b426ac6c410f3d0cb1f1b28f901f341e4b2ffb0809828896cbf0954c840f1f227eec604104cef5f383939e1ca41040c3ffa58c96ee5eff9c0fe3fd0d8dc8606c781f8c7c86f1672645ce92aac6d96ae11159ffecba6f3bc9663f77cdcdccb5b9bb1d3ec3ede7eed3e4fb77b4d3a1ddeac5a64af85b24feec68f0cb77f6faa5cbe87d6c222b423e84b08b37cba447bb7a33dc7926c1fa920b9fd4f057b06ddd3a17993f97be991d34f8fad3e0db0f6bdfef39fad65c4c106b7a1c321af1fda78c9ed1ebf79c87890f6f7c124c746844c6a520d65fb60f710eff22f46707338bc4f7ae08ed607ac2fb597e861ca9b09c67454eb02c7bc5fe71085bdb042f8410da20ac3fdc5ce82b3dcb311cbb222e2cdc02073e495450fa627aaeac355766b54f302e474ce544f2a4b807282a52b8990fab49638e8947b5622a525424d194b449925857be922557be8c26adda24935cd28ad473e51320a4b423218170724a3a2377aaaeece15a7dca48296ea5e44a8e45e269932472e5cfae2fec7ac61895cf10251e67d0900b8e1497c9fd48545c7cb8470aea534b90ffcb6d11bab2eb640f4e25e145af2b83d1d17969bfe8509f3e8b23d427d8824ba21279ae0c48aefcd4950f434d62e373aa6e75e5cf1c6be33ee2bbca69fce5732ba7891e90b7a80004fb71249e2b3fc6047c2205714c8ed3b08d555df9a4568ad4e2b99284041f3706e7ca2f46e7ca18d4952421559f78e5fd5b5a4e5382d18b5e4e683f3e0cf6a35782232558f1d86d0bd0950f4374afb2f7b5fc5cc9a93895d38c3c1818441f3fbec86b69b94cec481cc72191cf0149e1922cb9925bb5ae7cfeb89f2b9f3f0eca84a4966c394d7cf9a49ce8c1c0105ff422af044ecaf148382e23bff2dc2fea64aed53e7197e326f40311396356a894ca75c0d30327481cc6e86540d990d3b08d779990cb64da9039e77cd869288d47fb6c68761a9194913ef135d226b9693c7d620da50dd17858afa95c463ea79a1dc76a138c0568e07abc0cc865e4f3b0919caa4d726ad96b4bfaf49184a6a6adfaf4d2fa813212f261e8cad77ab46c9284faf4712a52167df21c5cb9f371aa2b5f53554df5654b8688b486729a6a233f03f24ce5346c6344e309ca5a9eadbec883f5a173a5b6d595fd666030b98cfc1ca7a99e14b2fd5453f5495ee9f382d495af0169529ae6c2d192f4897d78845c293f6d75a5d6ba52fbb9528372a5d673e5d379fa6a52514844399191c89551e74a8fe9292589c10f74ef20d39c3edfe767b3fbdcfbdacbd133ba0b902174e71e3d04b1502c232f60ffbdea8a85c1353343e13e4e39a7ecc186b6dcf4e9018727953be794d17296e4038322c0e0c9fdecc71b64dc27a9c1cf606ec877fad5b5b9d5cfa41699051b03a00fb71ba519f2bdbb186f946477b767a3679779175f76d12bdd2c6a33e358afa7b2e38fa5cb9b0b03b8d373ec61273ffb20ec3e18b719cdddd42ed3e971e92b9c113d0b039b037ebb13768a9d62a7d829768a9d62a7d829768a9d62a7d82993893d823dc2a88a1d42bdac148b04fb91ec116c9451151bc546b1519cd828360a0c0e10c6ae59b4db98f705cddaca32c8a1c819698531ff1c47b230e2944ca6ff18ced942efd34655ac0baa8caab4b4b4b4c000c20e7dce52ba941e5972dcddd99da5a4ee524ae9d5dd99ddd9dd3577cfa4f0677fd2b57649d9adabdd1633c7c487d78d9663b8bb4b0959524063c4202d020f7ef4e087949107b28994b1073236f9914d66f99169b289b6450d34711b348f99d00f1d020acab9fd798b06b966a7b09431caaaa9899456a6f7056f590568b4e3a6b51658c164ba308a65f372e409a2413428d364ab564ddbe2cf0b2f6c2eb29a96a97090c2a40708d2408809caa587079dcb3fb8dcb34312b76b0093237afe5ad80078f9610f963fc2c4e8cc8491cb8cb598092297817a94b81f073161c5fd388be890adcbecc03dd8af421da1956a09eb090096a0e2e30325977d7cd0c49dd1f45eb7a301ef0e588527e34881f68ac8df72b0f10447e0cb18d9bb49a589956a15e2c0326b3527bbb0fa55ee1982aaa0e6f9719d49eb45ebc73d435005839aa77f26adb30e41150c6a1e39a9a4b3fbb86708aa82e6c7af0e4155942e87fc5950cddd1c7b5850ddddcddd5c45976a099614434b7812a0c48f14523c21f574104bf1518158215c875cdae2548d899fe32a136ccee73b7ab9692d85fd3ac7db5db469cf3bb05fe74020a894d5bc9721363ecc6c1643197c20cd8dcd6ef4d2838dded7421a48e7b449bea86b9d36b18e3072bf0eea13b38e20d2437d625611496e53b9d26b210c5bee2da569d8a6b3b8f2abfc9eca921067c69a462fe2362d9b1db15ef17038f7789c8b161358513a88fbff4c1d74e52711741b70d92789212efd8a83bd3a95e3341068e6a773feb23a47f33edb3d99f7cdc8ff4c6de44a08e4fdd5391d0e8e7143df9d5a283ae7a6dc7f66fe39ce6f4ad77b600b928c4b5feb5cc951200e6601babfd6f5d0febab68e061e369aa669da43da7d25c0b954fb7eadb1ccfb3679292788c746c8f509d287a192ca8bc28743f23ba7befc2089957432207c1df9e31d6bd3c7216977587758774bda545215b6b0ee53645c7a29a2e3534a6b866159c5bc1e9847af8b561a3d5523e491c59723b1848359902f6bd7a35e577dbeb3d65abbcbfbea9cb5ce6f856f93bc997074a3c762028acb9b8dd18df1868c4bb606f6b3d76d5f209b9f75edeeda1ffd58a594f12b918b80cb5138218bda7d3a90f030cb15967d90e85c1f243917be021a6e37b1934cb0f06514ecf5bc61e07a3964371bb555f6b35dbd0b6ef539ea20410863f47ee6e31e0803fbd52be32422631b8e4840694991237344163ad0d1810a9b693a299d198e5db9ec73448f2a6c0a52aab02e3ef0c16a526048ecf64410ac0a3e3461c48e0a8cc88962592efba8b4d842450416d8ebb28fca0a2558ecb28faa6552b1be54c4cffd7e466e91c518678dd1b386588cf2090b4b377a8cee750854cee81ee710dcdddda7cf4be36d4e9692e7cb8f33c638658cd13d466f0cc6e859f4185d13f58b1c32b619904f94ee9ca316f936a7d4643684c56b4e592fba9285853fe59cb2d37e64b669bcb9738c7506f9a59829e59c730679e7943fa79c536e1e277655ecaa34ba8b341a9d46ef39a594524e59e78457a551c239e58552b329008199994b52426f9fdef1bcd2a7e672def851c3649cd97623218dac6da2915d19d9159616927db1c2c2cc2d24ef7a74af85f4e2bab4b05c49d25cb61bf94e7a713d05935685bb7bee234e83e12577f717cd9d2ab1f0e58d0d63575a7e24099a90a009845a40a805845a504ab9a094724129e5a2499338251667cf9cb14762b3024d68133ac50ccb45eb552994d05f3699ef229b10b1f0659315ee898c4b1f9c742503315c58541b02fbc2858d449b569150e537d08383827542cde04adb4234b2975da92b2c9ae93b1840178e0e300d5cb94c3f0ab82add9e0efce118433676129031811a76bba92b2ef17a8c8ba9198e1a0005ddb887a38536f58f9890620cc7b27d9b3a966d6686c5855fb87cf1752bb0b31418b6c849db0d74c1e11cc7fc385c361b9f820bac7f578d59b61bbbb202e43cdcb926d868a1d0cd46fc5c6d149704bb68c101df037d6221f4642ee4627b20ab4f2e171e61c285a30b1ffec027303bf2e3664b6e76648a9bbdd6a7b79714351ae05223395cfa73bba1f32bd3b04decd300ae9cc10fa457b92d7433389560dff2d0e10951aeb0a2c8931358e14d72a20cc10401375f3feb4a4eb37926affe57ef8684fd6aeefb774d9f4a26d204faf47d0d53e9495ccc4b1036b6a9be7f5fff4284bd3cc6300ccbba529bb0dfba1edb8f44a28c061e36db6bdd7775a2df36afc7f65727daba2cdbb6abd33cec65f4b7092bb509f36aabc085f57e6e492232f61e6c6c130c95b1fb74cd1ae05cf67102c82dc0659f2440b7f6a908f6fe5ad4e8261f6ab3ab0f6bbd2952036773440777e35f7773615e39ebedf89dfcab93b77fd239e7c729a5bcb4a30d4e76266bf93c6af0dcdeddbde38bfe9f8c2b9f07c7901e8c8d075c7707c00300001068914814809b653cbfab5cd9c9ed463ec31cfcfd371e70dbab72b3d8dccc7d353169bd24e6360a5fcda2286e0e83005ceaed0840b6cdb07707149af1770704c2a08cb44d40a7a6519a65d0bba001abd46d86df6bbb219ff246019a790f3ff3c79e7a1f8f76e2625d8efa7caf2e87ec0b814bbd1d10b814c6f6280a415f11cc1bf25a42364f6029c03426ae61834fd200573e64d52800d3d424e0cadfa0b035a03771ecc75df9f283782e6b770cc35c83879c2b7f04d047d3c4ec3074e5262554f1b073a95cf9709a6ae4afe01b0566109edb37905e4572fed966859691dff3e195bf62042b93f0c16d1fcb3e4f38b9f3bf19e6ed8773358a317bd8c595df3caef655d68fdb8df9b00b9cfbd560822b9fbf1aaee67db07ef0aff7edc6fcac4a952bc33bc8c56a97837a3037e0e581c1c621631d108e7c60f96538ec20902ce3748c78084ab9dc4f80829cbca0845b2dd4ac305373b94b709b41d2eaa783bbf065c481e54222c169dcfb4050dfa3ac9e83e07e1eb30c7f23b81f7fdbdb1fe50ffff93fe2435e007fa48113c01fbb2f7acc07e0871b0d786de20d789b86f8feb2ba0c3ce232d2085a651ca44879f264c99224498c186181e2e3c4902b9fbf7657f9818c4b0f33d127fa391a59db7d3c7638b79783bf191bb2fff2597e71be3c1d1a3f7bf7d18757c43e5edd77c5177539e4777f5d1e86c58b7e845786d72ec70e1a6e7c1ddacdd1cfa28ec2d8a8da14fdd6b197833f7ebbc0d775d1af6e1ebc74b3d194fef65dddd77fb9c07fc9cfa2f7f5431deee5e067a9b197e38b0f67b8adc36df433cc8de718f34c876cf4ecee33620dcea31b42e1bed1f0867176cefd1bb041168b51153b8575810d1a55c182db42b12eb053d8292c11ec14168a25c2ea9d0197bf035c96b9b0ecbf4be4b1bb4c562b66ad7bef32cc02fc9ed238bdcb3db63d193e72707abcbda18eec782463be2e266aadb57e35d51905e418a00130870dd0ffc55001c8e5faebfbb2f7e9a831d51f587e1a2f439606e401733aba317b3378068f186ab5d699b14e852decf5145e32c85a63b3fa31d4effaf5eb021cc0513093ee2744410671cfe2d618bc7ed7faf5237cf6bea8c421cb9653f4dd4b12ec176f658f39467d39822d92536d5c462ba04f2bb4893f0613ff54feb93ec47ef4e1c7900166818b50ea719b8af8c72ee76dbc7940d75ee0f384108c262a14f11285aeaf0956ae902763e1c142161e602c626767676767676767676767676767676767676767676767676767676767676767676767c787f8f991710942202ab7df873a7ae7b48f180481dc95dc7ed9d373093472c5ebf2865715c1d49c35e79aa11fcb66d0a2a67943ad8a4080615aabb716188806bc34e06da14d5d33d2b61b19e20ad72c2d25d24603dee8125d5cbca14b15710d0ba5209015f66b179f15d34401f8fad3401d2434e438dccf38ca793ce52a5ff1d329a3d7d4d4d4d4d4d430c3c83416124c81c0d6d4d4d45420db415c0bfd900967ca542a954aa5baa6a6a66685a4bde0a6d050e3748e909050a75ad5abee6956b7f8654ca552a9540a042cc4422f52d060c048555dd91e8ef52dd34f0b020d551c9bc3e93c8a6726050453a9144c090d354ee7e8cca062abd56ab55adedd40a9542a954aa55e6054d0a28de3c01c863c178542a15028aed55a8e7b20b8823d90055bf00702c146a15028140a42a0570100da8c89b39555ab7d136aa606b65aad56eb51d7434d94444594a302a0592bec6bdd32dd19e71f06ea56e5388f7a9ef45a9e535feb34d7b196e3fe4da6999919d7f51c8eb183e7d40b14e1907555d8c2565b85b76e905974778fdea2c2c29f974be9312b42ac08319f4b73658819b18f1df61c7327e9cef9991096db24f21982916b1bb68b440f451e738cf995dbbc8fb39ae759378136f99b38ae46fd61e37fcceafa729f34981bf6d2b797de2814877acee81db3f83ab89b18a3f434b8456c1a1ff46d781bea1d91ef9d3ff46a9ba27c1ddc9d2fa79411bbc1ea90654341babba11051f65982e40c0d0d3573b70e6f9618502a82750642104249d2af69c1df03ee84c8f56777772992cef4c91f9aa0a6e6460376ce7e137c97734e034439df67bb9c73b6f4da2b12dfbd18af461cc9f20e720cb657d8affab8f8db6f91cb83610f86becd111960d3e7ae7a5fe97166b867afbf7f0d3877868ae37aa9fb080df7dd7d50a8f3e9f12efbf80cb932ea0b7e4d423ed3ecaccb7855ab61e5352081dca28fc7ad41f5d5a07363ba041b006fcb8134fc22ec325458f8e4c687397d8250e8ba57b3b07cd9728c1e16d6232ce1238921444164f5847a1fdc584a64719985e4e7d65c662961e4b252ab5b80cbac22436e144256d69bd95e88581f767ee571fdb4a9eea0f7aa372f32b07ceb853dc4300f0e69533fcf0b11cb32c49eb88592213cbd82cb3e370012858f164771d9474992abc4081cbd24613bc6f85da94dd775714b8bf3e53c922d5d8f9627b1b0b43c935ade5a966f69f17ab4bc772c5e4bc7dc22bfc5b32b8673fffa5ccaaeebbaaeecb7ebb3cd03be3d773ab81f89362048458985377a6dda5e90b0ad62e92c888631c60845f682048410d239e9f47a4cafdb3b42870d636c27d90b9297232c63ee43b6471d5c9b7cb489ff6565fb3f48e5e248c82463ffc17db031cbb8f435907d96e29a8ca422faadeb24dda3a44d70f58daa161bd244db4d7cd17623a2d77643afad06c31b6327a9df28972b52ae3cf57ac531e47f6f52524a690dbe9b0753bffe25ca44bf19b176b4aaacab6a90d5a8ebbd4675f0422316eb48a3ff2ce416d597d159ede0854152245fc8174ab7692fc3471d4bb7d2c900af49e260af57a311e98e7456149ad824819520ecd72809b449dacebe0d6f63ff45fa4ddc6e6aad32da3e0d34d86bd3be5e6a3b1fb517402b1793b5767926ef4b375828010b57b4fb4cab3e5d2faa2fc39d5932449304fac4ec411da7e94e22a5903e0d8110c28717ec607061b117fde821aa42213ada853a45f48a33390dcc01937fc9af50671bc27603b58b92ec4509cbf2244695f58fd15f0525cd62cf25aad1a71ba514fb09d0af4129a54f3f66ebba1795edc76aad15ebaeaec45b26dab6abcbb06ec3bacdd3baebd234ecca2a56af4a5997f665af6dcfbf75a5365daf75dfa6ebabd3883c93cb5c3ff290b0713481ebbaaeeb495ccca8eb5e8cb0f1356d7b51d743341a899e6f26faadd3bad18b4422d16bdd487b912612699b56babc1cdc5a12059218634cc246588a26809f753db2d7bacfb2ac83de573be30eca8d1f57504a5983efcb11db7c2f140a859228160ad52cc85a25596533ccc2065728d47cd8737d9497077b56ab4a39f873bb81b06705678cb00e594bfaf4d327faf161507c0214b34d835eab4f166539c2b220cb4296758b8a3ab6a2ae8e8140a02b3d272dc86a537c185c58f928d68d90ddb1c11229238c52ca28a594524a295f4a29a594f237958d2f656441c61e83249265c4ea32956be4d2aeed26fb6bbb710ca39c6570bba9b5668f751ce83c30da701461e15fbd69da76d3dd35f8560fa63f078c2103dbcde55980b7ed067a37d8f8429ff88536c50e7b199e75d7d7380dc61d6b568ab4d0343eaad8686fc3db681fbfa64fd856832f06b5ff3c703fec75705886410cf3664c264d0135c32a7683fd2c8e8c031cbbb05fcd8db76fac0f3b1999d7428d5f849d9ef470b023cc171dec679db7c8c4c63611c1f5697efcebad5f735e33e288717651ced95d75d63a699c317a560c71f8107a1cc7f0df8cd0e07e88824cc6b4ec8611421e64dc34d1da0048675acb6c1b1136bec7e89a111bfb47846d2b9d9eec68a188df922753eef85198c00584cd31a243b7a287ca659f24aa99cb3e3580121fba7b1fc7299b399301deaf063a0d0358267e8c31be6f46ac7fafd0a61958d30ab2fa9aed9328e37b89ba4ff417079d37a8146ed705b1746a06000820007315002020100c0804227140208b535d157e14000d78923c74549cca8349920439885188188308010010030c10304363322500f82043d765e8920cba2c639764d855197421f3ae64d6b52cc3d3a58cba90597740fff714deb8ab2a2e935dc8a82b997749665dc9b86b9975a18c5d91a9cb32ea9a0c5d7e32bd2ec87c17024b07f48f85033adc28146b1d6de489383c88c993bb80b27c4d2ce70504171a77cee98380b0e67af1c9f5325e3f1ae49c52d542725fe0eff8ab5ab60e8166cf5c3a40b119a552ded9f65ea2d0f6628325ce62f6405307451ff7c447d5de0caccd649849f1a41c557bd23ed14670cae9064af6e8cec6250fa488e7195144186b6e29dba106a1cd4a5d44e48d68668affb2dd1fb036643e12f430d9ae4544d9189993de02ee82227b9c1b18ce1cea5a6625da8f95d6fcd7a0c13c15b5addb89481bb429ced2cc4d848b0677a7d0fc1235c070415c58d00860baf7db2614e597bf15f1de5958b142c15d8adc8e4aa3146a0956f2c4e9cffdcd8d4ef693e3a4b1d8072337681d1997569404c94574ad9c7e48110463a34e9ac4e590fdf17e85d2304b5586720f3c62257c6f07afc8cc995ec592d052929d6d7b28941a6a7f613fbfbc5f7c57631f9de13c8a23ede9bf13ff578742fa4a1ebe5ebb18531b0e6791e04c4f7d3cdc18e565498e2e06adc75bb372b1d72c7be1564fb4c3fb27e72523fa7f39aa78cac8caecfa5f6db863eadcd68215b22fa7122663fa637b4442c4bceeff10f82375d0ac8d2eb18ec7d127d1a55a523eb5a3c9b3e6d1d1f4166f508953c09298cd65825c56e7e9e6cc3de5ad2de2effd1db9ed7c18ce099826117aa2f39ac7c33ee20c876689c1304e17ea169ea650b9b9fc45d35fae3d82407a7ff03414819c117db6f23febbd7041135761bb74c3d41841a0650aba9a7d226007468876388ae8bee26c55e0683df9025706c4ac0481c747992adab0a5c6cac5cce733d9e82616f3cc7c3d8fabec8ee3e6355b95686de5b369ad759a6e2aeb3dd5c54217e6ff8f8ecc44cc1ae82f1728469bb26365225eb556f4b6d60150e12378856a6895936ca9f88e8360ca442c43c1cb065b569b49b8f9a948e2a0816de22d79811b156d2f7bfa6b5f61a838e331a9c0924c6e50aab6390704d1cdca06b6857a2def07b08d51f4793322c60f2b000165d195655c6504eba71b6e10d6ba01b2e37178a44478b4a448dc8eb5c1e758f87c8b0ef750c8b06e3b9f20fe0bd73b16405a6da4916343d3c729aac7822929cb0cc459eb6923be3f45664f456e19824bbe4bb5d18305b4f7ace884f8660b37d53eb577be91e8d304ae91ba4f906834bf4f4a536a5b780d0657daec3704a692c7fb6f9afa927ec05af25346e5bf450377cb37a391e5c02d4c0ce251b2c87a76e484188b1697e017ec9bb97f6e57d56f157eebef3056512d455687d484391902f1b929234cb453617ca2dfe24a5760a51a01b4e204885cfebace24f7d99a008816f12c05e8631f700c359b2a1e1a087a652ba6378d9fc0866e732d67408c80837dae638214de6c8ec5ff914be5e400d693b84391ad59c8d2ec3283ad0df0009d8d8a2ee51fd79589081a7ef782aa012785e96f2b5a0881aa77b68505774046c92ae5bedd43b1d204949ef21199b6234b16c359546bf72b6d18a40f28ef90878ea449f2bd1d87ba40c3630edad4ae36b1ac69792cba883b513bec4b6bdb9c708061fd1a1c5fec699bc193b62cfb99eeca7d96399a046fc0b9b2064452d59c50898564a7ab03ecc0da9c1f21dd4c6debf604990d51ca90f5f460ced2d98338f3390a777c441187b98f84b10f80b4be5c10c92439d22222b49a03b8e60ba10e0c13fa95b9223180c63e2aa122de0cf82c46b7dfecae4890eabe21fb624083dc5a68430b1facc00eea2eacb0c26fe76a32835791f4cb37cc0a9c9ac332c105766abbed9aaecbffde61d3435081f478f8ac56493eecc460c803a0061f52109730e6ea589c731d27589763be69afa2e384cf4554f8ed9b1dab874006a9d8b48be8091ce6c3ca001ef9bb431d59c4b4b4befaebf8d2c0c6a63126fc02a6f9436f0cc4b1f02c7fa292f1e69f2abe6917fa9565885fc1506e6a9038aeb4d9021136894a9be15a3b0f088a4c6d4a559cbc3de8199894ce4d5d14922751623f5224a58b27712a94c2b8c9a44a748c28198e2e1e6fcbdc649368f48ed6360628e86170583c0ef6d4803492f5de2481095e586c2f23a56660dd911ca0a39ebd461d012ac2c9a4a26516de176da08db514d7c5d1f15101cbe2b5319a8997114547fe72ebad0eee21460d86df5065cb6ad84f4af4cf648ef0d5aaa08dda5a8c6236c598cc26a4f1ef38bb53df685a14d04ffe081f940c03b550784dcf9de5bd2628d9df99832e455a57095d341061f52080a0366d3f40ffdd8114ffeee785c6007f03c162c873c9787da07713851dd1871d326cf7611432a54004e74903b3a6bc73e5574ce4f40942b4e876a5325582eca8cb08540a1429d7ab0947447af4aafb1f4176a4ec1724a4897738d4bd612f2de49abf6eea630b05243e7a4ad355709e20e31a8a77214afa2d4d85f911043e97372d68473ace0a011d7d9ce0f749cf3d2be510033f3b4b34914d26a2fc3f1f17cfaa35a1b854aa659e83dedc6280345a973ff511635b795164f21401edd2db3ad90efb81d91278043d16bad540f759a8b19ac8df0754cecdf0385a33f46ffb250afc7e5cd559ff23a004046218933fd885c8c0fc1bc35a1f934c14379b923475cf22e6755a5ec1031dc0fe286c88f749357d888bc7eff6d10e84f0f35d87ea5830c7db4955e45ac27048689a3d1cfc27cf56055b00e34bf4b39158684c0fc52f7bf27accedb84f24e174c56e052fe5c54c973b1c7435e6f96d4e320b5c02e7d81b30baa77884933476abaf0cfe63edd3d64e49f41a7a86cf803f2e1d0d0c1712c58832aaa176afeecce2d2343494cde36ae52ef9a1e1542b25c55c08732f446a0be9b634af695e2f39567aa558f69ac1466789327c67f4dfabd00a90ba5b81d1fb99ae809d9d93590cba0056c8325d11476af0b596509dace02bbabd50682ee6d15a3ef34f1d9f8ab4a0fb7d25a93a504b3fdb040eac786f7d30cfeb67d44515522f8f6b74ba5e40425a97ac28536677cba367694840a2a44f672b68e2221ae672d59d36338f2aa32a72fd73680bc5d6c50ef9e1a326efbfb8220d525fc76f10646a56314feca396054419bc493d6bc507aac03b8b791720a2b37c1ac48844d244182f85433fcb2ad118c938fd22f0d1f28de221d5768383abc41ca98890b814de6b13a7da84e064d8bff4296e86ceb2f9aa1821f286fd6c4d3f9308c79d5ba6c29ff889412fba53f1decb0bc7049579b813d077da2402e1c5af4f53c39d27a664212c3ef6d2c027929ca1cf6f695d3dbc6edfdbfc071be665852661ad506d135826ba12f20659b30cb4a6c43eb52f404f93d1c32d8265ab1b728c27d8028cc05740997237b254160a6ce4054bae2fad5b4c588de51ab20b358c650efa41a96a3d54ca16a120f6798dc5f8a462830d67c4ca53c9525caa08a2d8a01506a2e2a66a1bdcb0118115bdafa30b6d949957105f5bb2fa05cf06310dd92525e506f8d3b168ad4cd43558c290cb02a50f27dc6e572bb60d7e72a4605bc788f3aa640d76dcd215ddd6c5b002630aab7b219f33e222faaaca6db338424b426a2706cebef345c3c78d36b43c78637d588b7775d54b0414e4a86bcbe2aab0c0d34ea3c6fe821a79c0860c5d3eac3c41c8c5043224486cf7f0d614623a7cfe46c40558a31e90e068e8491cca8032a3511fb0647c7106d5d70f61d23d3a99b6446246ffd4fbfa0c6dd36e0ce56738ec7d100ec856eaf454614429a2e862811d59dcd889cd29be398078e3b37f9e9e82cf1ae39fa9267f28d3cbb809d974215a2fe490282e6ae23910d50ed96d861f49d619a8662950db973a651e1d0f7301bf3869ed4a6748905aade15e87696f8db03517a032fd8dc596f4bbed334b2643297a845b48d0313797a1c91cdea51b6626c5a4f2f1ff4c93bfabf05233b7c0a5f82c29fc26414c87eba695468275b954945c3ee22f3bcaa055bff237e3f47768d6c54bbd8927781811cc8c14ff162229057b239e38cf70443b4a277907601cb840f0e2c4ac97e4028a32003560d9aeccb38b51e951c39c986e34d476d15b2e02471bbf31a425aabf8b73ba823e2ff03fecd23419bdde5721015c0cf3af5eb7e78b5e7939a830789e06bb3ca8f024c43a42c34ac12432830f691891ef728744ba766a2b937b2721a723b4aeae7ec45ba8d367bdb2a347bef5ef60c26cd8712b5d6c1dc9fc486f2e90d6e78ea602aaf67ad45eeb7c539bd2b16e50304ab52eb4851f401eed4c9db52aaa0a4e9a5a9d92155ff0ba47f9cb1c42fb2b531834e1910d473ad8324ab892b4fde66900479e035fbe019ce0f9170e119757cbcf469872d4ce21910ff78dcdc298d0a78489a4653eca822cd2d57560c12f68b17463125fd095bccf511754cad37371a586c2904ea9266f610a747dec6b47fef184cafc63ef5cb252f642facf34fcb739791b84da688f2e3d6dd9d20bb364d923821e18f52aad7f9b01fee798da74333fde46fdbe7eb71380197614b6db0201212280956de32907858c27b4961b2ddd5c74be0dabb5f3b49c94637ad89f65b4f3d32a3a9bdce5583abed2441b478fe0bca1ef19954b79e33282503ea8c6f69f926d1564ec241ec40a8ff93a8e59fac56855dd9c6b65596bd72d6a580228e2400640b026d1d19c41e8c425f61402e4dbe8f87e2064b89f2e9308f6a85da24287ae30a83ffe5e3c4d9238d13259967d45b30ae756e25ac24bec55e12bea306ea21f84852f5cfa1b4a2477d4d2af65c57a665ca01fc283486ad40c1c096b92ce7ebf00da4053313cb8b261c5df8512fd0647b3a09906210e94b62d233b04507c20bd98cf812e162c233da8476a137545d1706d5c73be4f8aa328d16d87678495296eae3343e8ca9c70e43386a5708b8e40c2ccfe45e444c587f6eea4ff9c963216a73a714273a919f839fb3ffad546acdf181eb27cc35ce7267bd0030a8d994e28900262794815c09736277a2ca28e41c18a44fc90d9cf0f0eac84280ce01235ba5ffe269995fad8612c1cc034016df7abc4c3e7566264d259141200782ad4f8e055cfaef1adccabe283ec0267ed02c6e070ab8fc547a6e5f1381c012e4f62a28ed33e248412c231287540739891ef79a65c5b842246efa89d5592e158bd54a2304be2645bd413eefeb3f22b1a6074402ad057983185a328679b8beab3210377c3b64fccc1dba40dbb36648e256b14f64c6d82b63d168d1109ab1c0bf307ddf8ae135e4fbb17a56041794d37fee36c238d9e7b5e534198677828381923cc49089164e74a29495b2c6d73bb9b7f3655d198dcbcb40e810022cfcd889e89c11c9b69f707ab97f5a5ba115dd2e759ea27881118e475b544a1a1b5b32f6d0e4f9327fa699ce631554d2b097e4f0d6bdd472f9bc075ddd7bdef1f4e94adb113b5948cabf53e039310a5ead42aa3e42083c79aa0540fc2acf7812404b1882a8eb4d9fef6276a80e8f67cafa36dec28086d15b7476e439c1d41724d13f48cb9de9e5fb33ac3e87135e7b794ced663c3adee6c9a39e0d3d4f77d6881a6e3ed5ef2062cfa3b60989fdb38b1a627ed7a4785b8c1be90f0cd4ac259f9183a2a90b8c93c459378db286b3d606d76606bec2a40871a26b00190463a4b9d716bccb6b72c727abcedecbba31275f00aee4e09066a148cc3337e562fc8c37bff4da1ed322f9cb72fd63a5c816046fbd3a31f01b8679149070b8a80081d7db37b75e5296c3adbd8f478a4dfd92cfdf476e149dde86d1b41b0c0863b6fa5ad5aaaa8ccd8dc09d983cd2b955ea3107bfe36637f107e78d835784ad42aa92ea8117351754a5d6ee4a010097aa0704723286bf95c0a4a1e64e1978370fb22ef483255b9fba42f5ad3f3b2d70508f862ca5fd7937e0ce55c3b8214e0990dc553f104ffe7af45e53fd5451ab40eb50dc1e2062d38d4ee02c9a6f065edc82c46ac008bca8ad38b0b4a05c7291617eb9c8c0fae9c6cbdb4db186304c6dda541858768bc170bcb62ddbc4debbbdd2e84f1d4b2c09fcb623646d11d4e5ba47b17baafc4ee9bb5cd6916cc994f0961a16cc9feec02f3f21557dde11f1017f969645d941faa17cf22d29018a0cba3993dc83cac81281fe50d930b34c5782057edf2dc793fe0a0f0568f4b65849da4636c5bfe900b39651bd835218b5134e1cd537b928e2063b235cc99a27818c0843af181edd8e0da5a07c969f680ed0156c8063ee7f2788e013181daf43945f045e34cc06e604ce36c7c6bf523a509f564863d01f3ea5c6bea576f0da9012ebf065fe4d098979f84f9036c3fd3f55eb7f9530904b963d5ae07f87de8d81b7ab77b56021597b390994c9523e0b0f48167284184aa154ab47b239f1b7226a778b83d541e71c38babd50f8d1ac48807ebdd15de3d5ed2c6001f73392449909aaffe6aef3eabdc29a3173a8a4d95fb036503dd23bd0ff4fc824596eda9be12849d40864f00f73843514d984ca2fbae00d4d28673a304507c31730ab91f0426e4d2618a1190a8ef6c6657579d9457bca8fabaccaaaf137bc8054b48d1c79756a54b3a45cc66eb4a8b8284ba12413150d0425c6009e513fcb9dc63526781ee479ba96c17fa0902d990446b5a3742c4775f213f00f72089976da2e06a96840da61fab624ede72c67dff8c859869c32956a46c293ac69a9955257ad9775f2f2ac72c721ae80fd2347e7fc413d42afb03599a9bdb05ba35b5b3d52e4892487b1b97fd33cb613a84d8372e2bf63d112af7532be8c46f189ed4495aba8d44032398b31ebba236611f2f7e84df7f1e12df87c24a59a5bac9776ce0c3b38cdf86ab6acccfb0c90585cafaae2697493313f191c00891d16d13a689902e7db52f96dd9ff40f1f266435caac5059671821af96597fc2675061587ef559c6083348575f6eac6fd3c75636f3b2dcdc7593973f20012a66cf01c8f26ff95cecb3549f8956f6fffae1f96fb865bb1584eddade0704dc9afdb34441cee887f88340013b9b8008f6d5013d78e0123bb83b0815e2335bad96129f3f68edbd1c86a1dd932ddecd688c59f16d0ed638008439eb1adef9dae087428090a05715d700e651b8e18368dfcd0cc4ebc37e0e33a48710dd97d0976e8da4573d8c8a061148a267eb3f6134436a851c2a873a32d44c21c33b8be14b26263e53157a4fb420b1d86c16fd1015b704383c41d6643ed09748b7be8baf573fa5d54ee679b7f9f6c3bc3d3ec37b868f3988d683b4132c5ec7cd7de8d8a4a2e25dffc69f02f96cd5d03223ca6c6941138932533960148a7c2270ea313dfdb87251bf9980dc582143219410d7bb4674691ff41f9463d3aabb8ef4a868968d1e95687009609822de09e603aa9d92aebb52aa3e863c23b5e5e4becc4146026ba84e93991316558e5ccc26378f262b64939e2279f8e27f2e3b271b7c542aac5bc0a7da6c7ff230738bfd877b92b547b2c24ac612f15c61e3294406b468e610e3f15ee1e475871ff87619037caf8a00015cf93ab1b7ca0f1ed6a2659a488942516c4c54ed823ccb2cde2332882e14be95d271b389c49abde45b03986704b642a0c0ff562b01bd40aff44bd4f0f31a56588eec765460dad4c9084c86a461eb04b6981571296359160cd6ed507256ea430cd97e74c2e67c67301a7d0b4191c7c4196d2de63ef9e39cdb2625d361781e0813fe9c2df6a3eb5b66bcc6a9fc807e562b3e94c281510afa29b18e7328f1385021d274977567522425a790ea80dcecc8bdddb88e8ea448b7ee22fb2b0a3a698ce017daa99dccd0fe123c96083ca83863cb8cb77628ab2fdeccc75f1a8ea1a650c90dc24ebad70dcea84c3924cc0d2e52017b4bf33ef0fa807c3a970b1830cbb96f74bbe5ad8c3782a8453bd5d8eb19d24e2dbf13e1e9b86f63cfd7d45ec834395734ec44bff8084bab5f622730d5f380daeabdd879876abecd74f9041b2ff19b681aba9c8b08275ad665560011de534f8a811905949e5fb0192f6532a4dcd17b1f1a942d39b5eabf2b126595f72b30b39e79d247e423c7aab9f391e28f4bbd33a5ec8ecb890a049fa9997cd2c4741e61bbefcc6c9809eaec12dedd12b26ac06370f87be0d945314d19c5fae8a0a591aaa73507d6ec44d22ae89b51fc5442dcadd891d1b2538ababe6a82625781688470338ac7cd363bbb45c3db1b0e4cd333317808f51199a88d430e0c93ea162af453c33eddfac419207e8dacd621b623a8d08f850f2a16abe7863cff28d70849cb147d7e374701dfbf945cdfc17e0fddc7bbad49c038caafe496dc0397f387b830a28bdcfedcdc4f831d2a6cd5f77e442f71937fe0baeaa343ccb57cdd131b3662f1f50866f9140543a153afcdfc3a2bc69052db2cc6f8a4b41601bc04e061b721188d1fa3f1d99754c479b0c5d99965d77d4a3411badeeaadb34c8ec2ecb7043b2e429c03e7fcfca58aeb5479c6eb619bc92c6a77e5847eb2966f379d96a8735aed61bac8a5a39ad554e570b91a394c109d403f152484cc32ad0e88c3255fc706a5cf12626b0f29e75b8425fbbdbe42e8bdbab3ce585532eb58026b692c4873526821642d606d2243da95888a08cca434c08e3f67430998600901f606056ea8627d082b40e0a6480a5d983d82aa4e5dc44708491363bd3fb9d60fab54353c9a80f4b8e74a736f8b76d97e9ad58f773f24f78919bda0a023431c351d091770554f6dac3429c578be6187c00d7d515f253dc394d45e48a41a14e6324e856b80a7682d15e13739fc26e57e18e4541d00ac3d0e0bb9ab3f7a3ffccda0d606f90a864f4f214e8ec2bc654785c158b43d43ce4afeeb79b13ebf2c2453b00749809e72fa2787367759dadbdbbdcc7d7cddc86ca87de27692aef5230b726c557fa20534029fb759e8361186cc6ca2c78902f0978af65b08a5ea87b39936ab36db72377ce67f427953ac4c5a8ad4566bda105f1be1774ead0a9e3382ae2279edb4208e20e3dc9be4426cc88a29340e37108f1998c30ccca36310df42b6a9a3fe205e2249c56d3f2b83ca40778239195e19bb60a9faa4ecc52358ddcbdede8878872dd60843b4501bbaf64fc6a1b0c478e505dd8eae7debdf1805caaa3cce117645ed9ef6ecd9900b11fbff6028835be25a39b53c4acc5d035c0b6a30306cdfa07a9efcadcb9600eae138e367bd51661382aa6bdc26ea4c2265530e93ab8697201d545e9d2e7eca7e008875431cab97492918929166e6a5c81692959afa220a6088c4bafc629681f4b95cb952fbbf4436cc7531cbc9bb22e1308132d3d62e65f005314324012e8b0b9d3248420e09d7f44e82a27672f20aa8e5034e2d2fdded1dedb77d7ebdebcc1cf980ceef509882f0783fd8403bb5c849b4b1db788cd93d79c4fbbdc3820699972349f85dd1649869117a6967cb320b4ba334e6c0ecb2f4b81eefd81ed12cbb893f3e575ced747aea999a5a9e70382aebdc4b285127d21842cf83867908fe737277d91968bd3c755176224f38173381cc54e5dea180d1e26432d8c1d704662a4398dc72e6214727bea01540231f4f785534871d2da971fad875aa88210b22c4df42446c0dc992c40f0367c251da215500479f7996318f8ed5464ad5b631bbdc566425ba70f71f7aa72b7a89e62d68d9fa0a2632b107ab8e7202e96a1e417d5ed60eee7b80f1c51baf5b4ba450942232c7fe18beaf5adf1f3661d2eae6c5bbe63df3c37a9a40ea57e7e2cd36d03ac6c97e710a8ec9552dad596d779ed49b4fb4852ae0bee82a354497d26a094364b2515624e483007069010429c20ce32748ef23404f7b2f92a139b8cb20c9503214694cf88239acf1352b98ec52a111e87b5e0cdad105afdcac0195f21aba59c900789086f95383b0ec85aa382bf023bd476f24e573c8d8c82055856d72d0a42129b3c799d3052b03a4bad98b56c1dfc2d872d11f3659799c8da6ac156bc3fd3e0e804f206e9cdc03d4810b97feed2e9070e2d4f038112abc0dcabe0ea0d9d9e89085138791afe44068782cbcf2282d0a33a2ebce6682aed85959626236fd72e310592b2230bbe1a5897b11b21c08eb85833ed598aed9e04dccc5ba8f7a891a8eaf565ae4d07fe503f7c813b4e27b0e9e5bdfc235dd81d80d72628ef50c0446513016835029b1dcf78f98bfbf23f50e438d40eb90161944cef1b3a2f8369329f95047850987a9c245cc3d38b4f4d4481b60902c56afc9770ff580c0783d972d346e59c7f95b9ea3bbf7ade64850b98ae572fce41222999f9430dcfdf4f4f2bc36046ee8bc0ab4fbec288fcaa5018d54d586df759e18e2ecdab9ce6782e33d395f2238872d0efe87216a76400ef59cf20aedb2d690655fbcd94f66dcef75099f0a7e9d330e3d41ebdf9f0d538b1fb50fb736ee35ca261c0d89f430b3f7548a42980c4231bd7bc2ff517f189ab3d07408e0afe1edcce90a74a79a019bbf7d0d99659731bb8a70878ffc55d86d90bb3436aad93b13c17850a42e8da99bbd33928997067bfae214673d54d98ca17ee03b652f37b00ccdef7c706c111f6ca0b5b4ab311b058335f2d90dde68c2e23d24f2036f4aaf54794a267e2c5ae4498ed33a9590f427eb299a48ea2155f2d7c69b91ceacf4a924a911cd29e0007d0c3e0eccfd7c439b1ed909b234817ec34f7d561ae375951b59581a611ff0cf68ec91a604a3ac1325858d9bde4504307214dd3e787ef5b2bc44244c733ca4bf547062de09f1dec868bfad9939f086a9ce405861cc6ef1508d3513a86d9882dab997883543ac7dabd215c20f8668c8b444c1cdde856d1e3795b11603be7196adddeea388b2d5c1e462424eb4697ff3141787c49faa797223f6c143d63dd7a1620b0b6b908966a55e4f06a82e37cd4d78c5d1ef29b43c42f4902c040749b95d602647397db1098b6c8514d3f30e7c45eddd4c99f0f0537629cb4e4b121204c5190d6124ed347ac0e3703d64be57578009607e26eb6a8680685f90acd6dd5806399da46e69dd2273be3e39be21119bac329ed22fc9b34e58ebc95ec9672933ab39beb80df85740f8ae712c81183a318463e5c4eead8ad1db87f10863e98a211843377640cca0d8a19ed72886504c9d58c2b1c5b171583ec198ba31046213c536e2fc4631846208c56e7d0f223d5df46de91ad3a3a087c6dfddb70d23d0ffbeda5dee1d5643263eb517f4e06f9b5e0cfc050cc49a4266e9bc509be2c46674d96578b7965700bdb482c723cf3d286f7e91a065dec6d1cb5285618ba55f07ec201ade32da6aee99e47c734bd5dabba7b354c4e8a2ed1495837bb9046f4c146208a397f67d93438cdeda4859a2b2b968a19a05a922c5fd5a540a2b66bd696f1c29ac2a1028681ff3951fdd4ba1acec145c55bd5f98265cf0c8ff1f8c309999d6f8e916df1213f653b1da8d3a9665b5f1a2219305e500c58c9e1621aef4722fe190d66c43dfb9cf405a67a9f046880c0ab45620249faaa61a3896d262a5285304c812e62ce7cd9357742dd96ca0514c62516012f7f9c592e58c28c4f62b6ce56f3688b8e4ca273cec2a330416f0efd8432d3eb5325abd3cc297ba29e14ba411385a92450b07af86fc88db655fa4e8595611b94fd4e070e79a9046e910d2e9a64710f436fe47ff6b7000a3808031950060a20036bd80343996298846be4eff84dd15c5e25eb200803803acb8dbe9aba603d1be54fd2d17f7d6bd8110383c0121692aac5059ff1fed51393cd3418ac28ae6bb7600ab71ad53a0be8c6e84243af4165a3afcf12d5131e1b2990a098ea0754320b0232104989239abd601a6ffc3bac6dd4824c5cca229e631d1ae6761dd25de5717a4e8ea9444b7ba21505607a25b754e469a10921a091212d9ff6210e9c7d7a7deb231e057bd66d91214f5dda97ad74dc01e9bd47b48d5459277f2026defe05c2d3da15daf1a74f76e25bd1be0f1c0a35be67763ed9282cb5771d1a6193b851478559346487f8362a180688b5d17b24ec3d7b856aecd6a430f7786305169f130d4af04569b3ebbce4938b67488f6e4d24a639129b43c321d05bf1d9c8a98276045f138079709dcc23614171ee03203b746ca73454ae88a545deb6a1457ba1c6d2561d2b8abb72b35e46f5bc5bc6b4d224bcc4480d8c1bcc3d3cdaf65ac7ae7c552719098a697bba3e9bd2668990b754c4f0e6ea3c00752de768a6b8db8e31b72b2acd3c84dc0c9559d99457b885e251c071d27b4e9d00a9d3567878e34041a9b59127789282207e655650123d58e4d899580b029ed6886da5a1d86ae76a3b5bd951e482a34ed043e3259e9ca34572a105da1d49a54d6374076d4cede9b7dcdfdca1090af706453596112be98e73489045689a74b4e5d3822fa34eb9c845f409f7a4c816dc6909d04bc3b0c95258523e1053c15777530a48abf1edc68f157c94290d8c19fa8ba0818fddd917f0045ea94063ddac47302250ccbc4164caf623b760833d7c1f65d45141fd50320542119c4cb0f47c8f3f75092f48adc3d4eacd6f8f5ae794db810b11c060b717c4c2bc485a2aa3ee659912412a48bcf5a55aceaa1d7177ac3d8e4dce2ce418e17c964e72025c42026e48be10e47b8c2c970b92c8b1a89c22634d2504c6c19066f2e7adff0f258d809600c86fe7b66650fc086bf91f9299edf432e8e9651bc4bd57ee7c1d8ed65e5941e3d3a4c56661e0112411963dae7cfcba28a6cbdb4dad488db4d566f62e82a0992293794d954104a821e9b98befca0e420083e9943aae07794e6444f040d8df6146e42f5877408e01bd2c06c44528d29f7803b76f33d5e143826224810c3a59019619d8e4a987f106af99dbe6314c61dd2c62877e3d1e9de4adeaaa4b7f921ef18711789138484e47b2d830290eb02362d78643663028e42fdcf544ef266c9ea645e7c6a39407f4c9b1215d9a30c188fbabfb2b6046b6a13f26861f1b69f221cb8a790a7ee2be6cbdba84cf73d08d1c8b58be39d7957f145ad87db8b20a5100bbe938239366bd3c333baabf55153fe1b26e30e2bd17b0544d65e266c7454b2c2a719656f9f0302af152210692f676343e71fc9695e2b1e9b6ca0bc00abf970c2dffd2923c005a30fbf1339b27383d8080b3942b8ecf4bb57fcaa468306e1ccf28d3442033b7682bd7a3cdc7a9845b27b18b458ea47e86ba5bf1786395dee18b75c832836349815ff249fc956e94766de967ed477046de403d91b92f8912337c98cbe41012deba5fd2c67630dfc8423268a4adc860d5c273d9d2f3ce6ae78080dc4394faa3a3fd49b1b574fcf95dc589063cd460a7e57b8945faf83871d6575c017fc5c876f42b75e85568ae271ff4a1d6ef2ba43fab018c4156b75d50c5351d9bf3897dca7329b84f7aa53d1f2134ddfd70c0694f9a6674ea5279d06e15522ef12b5fa6e48b526097f10c7444c10f054bbe17c6a110a1b466ce49415b6957b34e6c705cedccc4ec5e0904fc46062f67be88d979b6dda08615d16395879f6190436248dbfc5fed736a628fcfdc5b2f166b3638bafdf5019e64051b423da48c0a113717692fb3857950976cc86502d287f650f8bb0fba60df83a5d65130753a7f8e4004ac5afdef2a98136afdbeac96916faec8aa3b0769111f6c83a4ce9e831d821caf1e5980b3f1e34e46015f70012201cc42cd6ce89e8374cd74283ef07adc6ebcdcb458757a838a0a7ac43288e0a6dd23cdc145a3caf7ba4cd3ae833fe6461a2a465efa66d7c081b70f6f48fd1565e1bb7903d07409f7c78dbab59f96a09bbdc53cd6f6df4437c3954219f0dbd409d5e64ff3b128c03c3b68a4b8fa9452d544435bac231b6f51978c161e66c6b4cd9ec901cd4f31c95fd686466babb304f694551dc58d3a17f0e9908ab65deb507d9501d127d9c43e81a1b9cbed079bcd06575e3f720d0eb7d32a1b41591e3673e19e395e29f7de1a2e871d1108a797d2428cb40f137e2622ea16cdd5e283e48cb2e52d174d32f65fbea5fabc1b52f43945dee29310789e59d36ba4194caca65977a72e7d8517e4e2aa71d5119c78d38cce6efe11bd29399aad4bf912c5b0a6ba09fb4d4557e44c029be002898c5ca5255694b5af9f96598e5120a0b73797454bf3134c6da5fbce1506945bb435de8bec0a93db53020e0dc6a057f949e1668e02520289d4b3ed5262e6f25bd2ccc6c3d3355e08f96267ff22d11fb492626831b0dc805571cf826c778297693640ab5530cb1f06788af4e8bf95be705b98ab8fc43ff151549f8dba075fd808ca2c9105afce4e08dca11086451af22134bd748284357f184de2c58e70d50ffaa230d075531c254c76587f59cfd35f780c81452de6dde4954e3879a854b6cfcca296aad712654a61270e3b588d54c4e224c02036570c942e5c083d9cbda0d8326f67d3567259bfa1b3c71440dbe05625bd49bbb036b2d5414937b445f7c29e3a3b6b1f8141b015d6a736428b77ad898ae2cdc873113861b518057cd40560f7022fd76d24f3e610d881ab3be4b160f75fd8326dfedea11702a0cc9677dda844c9b63f5f67bf7814166da1c9db9bd4288bc65e2fe18ab3e8421d82118f0ccf9a3cc82690290c8a3179a94c84d18952a5697270440646d31fbe216c5308037b59b8148a9915bf965684973170429b0310f2f011ece2772a6ea7f98022d52323e59ad1f72e28453fc04521ebd13bd52a50e083ff39d685e59535126d375ef089f436de3619f3c4f7800da49f9588655ac47a4da87058745f4fe80ab14567cda1c22b3996f67980956a0ddb27e155ebc941ea0ac98d822c5e7662677d301d3978ce2b40855728ab23cde8fc5d59fc79aa3911dfd455db236748c1d16b1243a14bf162b303ac619f27819215843ccd8647976c12ff57dfee922c28e828e9975db833ac9084255510cc45c088503222e4df55878923323a5014a1c10ca6bc14a73b4b56137536aebac35ac75aa19ba2e5e37ab1f1fc3b06e0f0de988a3cbd0117e78557e83660aec544bff5201c505061225d8caa459d1b8d6a4b5a4dc9a7c0d23ea669ba5656f1cea31919ae8139fb0e584d296db804b030791813125712e94a17358810164e0d96a4cca6d369db8a5e553c3eeb1087b0c51c22050448ed208e67b591a14456e51c6507636d89a2560eafc5cf138cab807c93c0f3132fb0a12d25c1acd42027c2c3875344a3c0ce38a6d02ab1caeba29118916924b988eaecef87eb210a61ed3f3123622244b00359ae60c6f521a91ea1dfd03708e16b39e555a09cbb471e4651deff60f37e9e96dd2a0ab67df36541d82ae1ab39c8b30c6e9bfa5e89f8596a1c227215fc642c89f409a0acec05e7988361c170e89b1e70529e42470a13d8d78b42a8cb32db83e07ba8439e9062319bb13b6a78ddd427a485c5b3196062104f563f3ca818828fb1499165e1383bbf7c3b367319ee4befc90853f7e806433a3516e3adabe48bc5a6999a41dc1869a3c480d7b4d845a8cd3a9374e2200631b73231f10a3e65a15d5aa33c6d42fbaa2ecafc1c700a32567a8523feb2f4ee02f23620a0969b1e2331e62b43e59e401a91affc199150cc3470c75eec565ae0800f72a3baee4c3f692b14c5796f0422c3522d2c517bf92fc4c0484e4ad22dabf6b946d450210fd3d2c145174fd087e577ed435ce7382c5fbabcdf2eab8e29ac7ac2b435d347f41fb518ecce82ed109cb7ec6453c1fb90fcfe00e541a19dd3d36b1612e5161c4db01157407422a6f03756082bc8c38d87c1c1864076a42d6ef028515ac4212cadc484e14d9abe753e945f18ae9db64b4ebc5950fbf00b6ffe63b3efbf854ed8567be0c00b6c2483c60df8ac138ea9cc98b04c4ccdab66b50a6821227f4410677e58c0fa960cc7fe88c2c8d3ad72396902736504226cc0714ee54621eab632b6bf5716306b3cef924038c9e55f9bde12be63bb37fc0c67d9d884e34638f900199d80263fb8a044620df55f0c83ee7c0b5989900ce45b7931ecfbb8b0b78209120a1aff4c6ae8af0a8a1e5437c955da78e74a97053b4a2b309d8ab9eb367fb03e63250d6b5f5ec3c40f5658803ca0d0dc2392dec1c660941824c8a9b4d869d3891499560a2d6243080fd0190a41535199d0139cd1e5c196a709e4c5d794d45127699ac2dc5951c3af313654152b5edc798d415ac885918a66ef69799e2abfc86c6c446e64685ec8114d1aca5b0d99631fcd78d55977560ca480cfd0076a4ebc20228a1829e292aadb2b010c7a810dcb331fd0424547a9734396a7abf34c9b740f04b44a35f1d65235b3a6cdcb801376bcae724b306dd2ed47b6cc3eced671c5f40a11bb8d19c24e4ad592ab33740713ab69ce3da4938995b81443940db43104f109717aa7c816a93b24146232a512008c2238781587d2480e96f840f5df8d24d2e8e2aba2b34674c932566764a8ef69132d93e0f0e1c9328a984503380cf385e3f9b1d52f0afe8ef4b7acd50a54be9cbec95dca352ba01d072409a5322e1e121f703732e250ec1c928cd2aee94e0fc3d435b6780431e287e18010c9ae463ff2527da24384f8b0cd50a1ef91f5c507f15a3255cd739078067e56425fce6b3bf03ebc15467aefbd52e71e09ff90fe6785cc5d59f240e85a044ab408d1e818f3518ba6e2e0ff2c84a0e16731459eb7d155e7be02590efba8bc2644012a4088fcd03966b57fe57eb968f8e7a208a788d33e776de9b5226f3e2a1a3ce5d0dbc7f324b63209a3fdf7a9cb70c33ecacd1bf036d4b42dc71e84b39ec4bdb7c526e3fecd4e42148bfee8947328d181bb213f4bbae1495d3e465ba4eead97c114ad6b5648baad9cf8be9213bb701045db4b24548e9a27418cddf34cd5711ff873218bd2c1074a04c2b0a4b2fd03a17d0ebdbbf73901fc035d86507b78ece9b72346351b27427d3df29531292627d724cfdbb3208521f35725b07319633f6973f09645bbae8b68e4a6a1e0b4fbe271e75bde76ad058d27d488e4e19936c18e7f8e506246426cf6ef08213736ccb1d201dfa5b2f4bceda7b7e1508a8f90052ebff399ad9b923dee12306da6aca77945e372713470e8c40c4cf873020a54e6f39fa7a9000e0737b4c2a8a873c0423c37b890d2fb5cd8914115f0d703016e409e6f5f544cd6bd0e8c6ff9bcae1fa3fb5ea98e26512547bf574e1e6eb469afb6e791a1ff44e5754df31da557c180363796b6f81f33acb2363c770fa33a35519406b57e2c33024b98947d046b6030f3be12e72c4232078c5c55effea0df508a5a6a04fe58e0093dfff46ca1bfb1cfa8cd8e3ccee3b226c42d5b0e3e27c7fc4a465b354c061854f31e3defad7eee894426ec927b3ce565fa15d90240b937c461c6b8895ca648c493f6d8ed55b7c777fc120981647a2177bcd04dd0ff1ce427e545f497bf20006c08145fc6c96ef5ab6b6bc56d9d11c10cb9aa313212af82d79edc2792c2755461987a2e69c6fd3c1d433162d3adaeee6f3d12e374667505a55780370e558cd625d3405e0beecf100c8a9f57d2941338058f2fcf755d2efe41eeec68b1b3b624ebd9b3cd5fa523857ee46fa5373df87cc6d9d292ae8b295a9d8fe9242ef831b0d022fc350cf05b46ab8dde7d3d8aca5803839f22da26bee0d0925c14f83c44743933aca6d2a73b852ed672bca1e5a894154f8de42ccf771645f545360a5781ff4c7c7288a6ea4b13799639af8afdda0d768eeaa3183bc18bc3041900faa097376ef4205d20c71c4747d40ed3793fc29d290eb06d73dd8683fe21dfb1d902f7a89724649d23b78861bb8bdc427730e2542991cf813078b051a185768b8c879a95090584fad1c9101479618b2e8da024fc36401704b4a1870dc2c323018d225b216b80bfdec73b66c981d8bbe9b7ac77c8440104274a0428decd2a206a71e19efb96854d2688d3de6bd36a3fca41ee4cf69468fe4c6a544361ae0f63e449fec8e0fd567b919daebe85430e9be2dae4be787eda986417ef60f1d66243302df2c6dc0c118d3cf7667abee61852843ab2b85a5bd9007433226f4b856c63764a854882ca74e740ab8ffa364d62be831845bf194c61e149ec203b9ca1e0f796956206a92349fcba2a948246f80142e1dcf32c9913da750e6e3754fa0d54d2b1f9510154ef363276fa050725101f9490b1d6834aa316d165e818bc0a3e35afc807ab53784c59ed61508390a3c2146494c2ba4f981533011fe70d7e39965e141e1a1e994733f199ff5561aa004764e6691d94468fc6596d2da1a15f197e4398a881efe6ea9fa23764abaca0bd008429f2522e530f1a31f625d35a4def44e62bae569235ae9807dd0efced66d2ce72ce0c0e292cee6d7e4941a3aac6d64a59a57ff8f0d9775a93d68eb759341927201053dd445229016c0f1c5449879079b31598b73045f82428a14707aa4c4181b584b07df5e758f06852f9079b056cf5698b40305b90401e2fd658fffd3ce898bce35ea4bd4b9e0673fd7b914d1c76a4058c4a14132631249824f1c0bbb98db257a535e4c831a9ce5915e376b5135cb19f5f141114337223f955572fafed871ca4ebb0cc2430cb7dc0f735b516221fd307d16738637cac806a2c5c30c60932bb63db54b3fdc7a37edb9abf0d9d892c0d36f16e485e12567c83aa0725b8d272098935bf6dff3bbd8eecf6130713ac4300cf351fe2ff0d27c61c6b17ae362b6cc83d509b356b764ceba10049947aa05ccee8a6730b69dbb968e91af44350ead56b63f3d60daaa92c1772212f0adbf7d456a9759ea90af49e313e572ba34f9d24403f801a469510d9f7770bfefc75c100e4cec77c957ee23194bb8c1fb63253dcec90f89b1f01dfcb04bb050ed1bd79391aa02de8dbf5a9e82fefde4fcf827a9648f89cc3eaae7a02c9720d45a6a4144ca0e122adcc4a411e8c213f05b4e614e56cf8b10f0e79cfce4e00df884abf3851842fc62235a45a6388561405900bd91ce523dc244c49298886c1a7d34ba5060080f3b725c344ceb5fc0a4bdf61c5c03b4e4f309fbd6d8a6962b24e8174640c8e288e5d85294bd743c6175e6b966aa7162da743c5c19a0369d0dcbb4d44f9d610fa789d3a0cc80d785d1ac98c5c4d244b78ef04313a3015d8c4f9ac7843951d63fae39cf89801142e7fac128a43ab0500aab071cdc47adc253e92073d3f11112d4a11efd5289d6be8ed487c9dfb859242d7ff4d08555ef817d2f21fd667058eb2574510f794a3f753ce581f420d6e36306f2692148a48d1facf5b320fcac8aa00a42faa8eb3c3fa657faf9a83b0e94be7294c815a3fcad9aa5af33e16ec43cae6f7556aaba5d4776b13217d7eb24aba6d4d7a5816cd594f6ba6dd57891488642dd727f05b21be458436c1b62095f84fa1e7637e189c86bb83a444c521cbc4d91142ffb9d2f2384aa93a051d434ae36fe2a469e670cee8cad1420fac438ce542a3a9e31fb88e8ae2ff497660f205221408068dcf33df52d103160fe9e7093fede8eb686f7ab4f649543a85d43e681de453316deef984047df352b08ab3e5221f2c591c022874883e518f67b39018ee0f4ffe0e308b3eb7c6c85e55a2f6676c43ec995057b8e4feabf3e5c75cf10199394b9c671c1a474a70c63105b501fd0a31b12223e332d7984cd82588039176380bef583abcb5a3c3cb3ff43fc50adabbc552892b44c6226ec3784583cc6a6b2e3e151c8f382cfebfbb81cdfac6d2dada15c4bad4bac3069cc336ddfa51be2436d7935c2eb05526fda8759303aecbeeef0ccbab79f47a20b9fa7d04350855be72e46482f2dd98bda1077dc32464cc58bc7c45e4c1b38d67dfa40d46aa8f8d1de046e16f0016d2e244c23295965572ff88139f660d1b56ef640d47445441991dfbcf79262291e7a42f79b08a2f05461fd03ec048963667a0ff598435330c9e22151e5734413a26e8076c3b124f633fc74b6db0df9f0293a688e32fb2ecd23b09897b0336ee5f9c349a81154d11ce57e3c1fe4f6e2e47559e967a9b36a843af9b3aef54d6a56c0503500f8fabfd6481a874e19ce9ddb6f4bf193b04ba059af210ad023e2f882a4772bbbc740f8135d75664f899f04f17dbe7e1b53300aa1ba2bdcb68dd3957a9c562288c0ed8426c9ee557ea15d2f9224ffdb6acd44ad25b3a269fc528fd0476ba5730d07bf002268b5aa1c8de6cc4de1b1c379274860a9966ea11e6fba105adc31f01eb2d101db0af66bcac1c3e7960bdcfa32905e40a2444caf44d8f0067d861afe5b107dccc54a486c771e45de74804e18857ac47edcad8b0466fadb2344a38d5e709d4a5cc8397da8ddefcb9c364f3a8cdc160067a5381217bb3bc4dc293cd534c3f92dbbf83fc2794363a86692cc133eba6d8d8d27c4199bde4915c743df102cdd7164808e06c723b038b5e59b8c34284cccdb47c52c64d0d0d003cfa71991d09d8c70d75cedaa664bb2ac994d665a948da465e819d9213cfd322fc464e418ff7bd10f3daf072855e79437e11a165cc60937c56b012f9ef6e384d3a50625873d36bdda5fef0905309e07205d281aa6f487dc2529a93f12648ea0997d9d781ab7e18c76b331f3a8d2891627f39383869049c94f62bea207912c4af53575683e6fc363312725b766565f8ef0780d378768364226e1428c7f4d1694e0e89617bd455161fc871669391f792e22e40c369b098087e83d75da2e8d2b3ea43bd18b70b56101d58c31de84bb644d6874e0e6049cd0cd476566c6799fc2d5e7bff4f426945b4df284ecdaa0cc52d4213b0879adc1c9c209871b5ef604bd8c080cf557b210bab92df0fbad40b9a2e233f106e4037a7c72e737b8c2e14a30d87d835a38e56e186ec490066cb1b916d66180eae0398ed4be7a69aa0f518daf36df8ebe01f382f453456c3eba6d3907009a3b07e77dcf149fe71c806a1e646908ff14caffa9010508313444c027c2c507f57ad2ca4e45149e7433960e70957f7a64f72aac39a4cc483740b5ccf911fa5384ca4f6176a90354f9ce46e257311a6faa194505d4c90761f8ed1bd06acb7f497a0219ab6bb86c806bb99347bc4951c53969765504a2739c8df09fc2355e72b3690fb09a796684f61516b78419e93e40f974567e881194a85a7d979014f64cc459ed8126bbf39357786c136505e38b92f167fb4aaa34d0b615e2bfe83cf89a7d66f4a297adb70a39fa57b4f1269b597480f58c7323b4bcd37976df2846918b9df6592554b2e6b814de41d1374e26a40f80665534f2819cc506940ca9a310e43ab97f1f1db0426c58717235cf9238b1118d8213fc2e6a5f2671ee4bc98e76949e191676240bc5b2b63d2d300eb0a92073b9a2d97ac65b6819f17c09fb6b737c30eb0e6e3a469498fddddc1b6588caceed1d3994b9c3786b48bb91dd75c23ba7b59a5919b48599acc9818a980acf2fc1cd55990d6c7d801f1c13e36cf15359a12e92b3377052b1049cbbd8f18cfce5c94c56800ab806033fe769cac9942c20b22d08a93ab69e1345d92a2c80b2b8e111c5fb30e1feec6e70698a1d8ba6ab732d88b93198925d7af63bbc2999899a863a3938d8516817b37232df30dde743d60a45be8a6a12a060f7463ad30f3578d517e5271673fa7816350389fd439693b787ba0688486f127af540f2cec7564ce5aea7bb8ce8aff1df44c85d9a995485f81a04b9ef9980488e20e871312e034aa6d51de3620b1f31bd3c171c8304d06a67531e88a587aa8dfe8181035f6553f82e5189390955e5f63b99276abf69eaf2f29d5cd25465adf748dd573c65dc9fccbe215e3245bc7d987e5149fdb2296f271984f12491f48d7eb9611360afd73ccdf5df8a9e11a4387d99583d1ea2c610cc880ab6970d395467544cdd64fc6c85fd0f7b6ab28b65aa9412c01a7f23a4194ef8cea2952bc2235ad68f43b2fbaeaf31638e8b774da42ba16fe02d4a3337c9c4fdf4e98676cffcc963d092ebe8792469040f1df5904ea51e76e5d1a12dd0dbe0616414aa7c16d1e35e390c4c28100d1f24fb927cc6a627c157f2d1ac2a257afaea7fb8c3c55527348850ca631ad47d3a3fcf70a1412902add107e57b5f961cf871ed89206ec6843b3eedafbf1e50226077c8fe468f991ed6f23a03311cb52b54cd03888289f48746375671d5a649e12940bbced132ae744f858e1527b7b6356a4714f3a298e642891c2cdbee87ad13c2d46d1df5ff4943fce65fe08cc8a75bbbe5df2fd2970cdf80309a97024d04581f2622dd60310966ee31ccf59f37c8cc31ae40ce0e19869c77a3b58226c876332c0fe2109d4ee47308eeb6e36bc37493a4bf5e46144d6457b1285037c3bd1c02f944820bffa364fc6c1a03e86002a7c1ea7abcc7dc0de9003927fa629984705d609079150aefc7e5fd6ed3699f387f75a80411825a6a89c449d73292eb5de215bc21e3178d624db699c9223bb085831ccaac639401c19dfbe114d720fe2126eec7c990a113ade4c5523eb7f21e55cc8943a7716447e39449e395bb101effe5a2db3e47797f59f943d91a0634d20b4b6f1148a5a2409252113113c51021007c8e2c1bae3a8623681a6f964a5e6b8ee5d875dcbf6f5444ed0cc635eacd2a04aebcd369aa06a8fca37e1ca3ac36c220964139002c952d3e53130510d07bbdcaa5287d630340f5086d5c3c6dd876a5013a6b65f2583a076937514067004c055dcc86e2b98021d79efeb0ddcf2a0d1c6c28469c3d5fdb12a86ce5de09c8d6b279c8478c1612762258cac15eb7b13530d83f8cb21f09fd461335cead4eb477ccdd3162389b1181c91cf343df8f1f6c6274c1004ef8317407bfe56fd2958e62b332b1402391a6656cf35b8a62238e864c065f25a8ba55a985ad300def54c6a7205ac627aba697d1ba059048aef38865a6de006aee759aee1ee97afd3ad3fe855a8da4a2341339920e8cdc3568b3d07d88124fced21881b98deeeb0503f38fb87c7dc7613614b60a14641571c798d4b2cee3eac260d0e8848c7999b56679e53a1f32df7fcc814448979ca4da5235f65ab4387cbeeac0ff6e42d2621fe1a3618b418d54da9ee4470bdcbc7f50cf63aaf431430c125d1da0eec25c4a1b341a10054c09f6b4414984b499a5a3032818eddc83a4938e245a86b9f6319c9dccdad22f55a047fb066cdf9d330b71e88995cd94970705208ebf7f02584c818a9e3ab66e5fa61ea07a087b0561a40511598273f8db6a9ea3249ff26972b8c339d511b239ddda549f69ffe6b6405d737ba7e49f95f7c817c235ff1ebcd871b5ef84d602eac2ad652d9053c8bcae4efe046c52d1c9e13de1c68454d8d4f7d2b6bfe5972f56fe4d6cb65eae2212c6d99886071091e42944bff35c10b291ed47bf3799edca33a2ab90268550d078836364f8b80c003e177479644aed61e5d674355f40faa8fea05dd8185a67523676e53eeb9eee27b7f4c32df466db25bea3ef051b7de22215cce1d50bfec28a97c8b8a96dc44f8ebf1f3e01ae09a9f084ad489f9ad8c0d8d3ca364a08ff38141f444f65b6f42890086a49e154381895dc38a2f19ccae944e47dd85dc1cf3befd10eb86569c3e189c88af4935052323dc36b3f1c7f08edcc6e723adbf5bc74d33c612ab747fff81456498d4e817c17b384bbb811326c4d615bfac949f693e341afd87c95db6d4dc65081b35930ae1d7e88060233e547a99735a639b4d13ddd50d3a42b1cb3e723e3c0ca2caec8eeeceecf648b008e721cc72011dd6e312a708efd891e87dec71e4540db24ce5cc8d7815a749d3b15e37f7b43fa7968544b4202c81044009b13213452165f2cd83104d5bffab11a3d58ef1b7853c142a0b793ee7cb788c5a1458256e20372ea497488f56d68391bbb6ac70cb42ce2517b3f32d52027d49a28f09056fec6fa6659d342f1181b3bd94c036ad8af9c046b0fec41511dcd5f4287fc7b863688272596cd47d3524e1ce49353296ce6b4544ddc5b25391d28aca6f1d3f566f71fd226acfbe3990544df1be6ab500028f301843899dfef38d658746eb8006d895a487e4b65f969fcaf4987b3b747740b3487692d53243ecc401b94ef8b060e707cc9b15da17b3a42c2e471f4585a6e605c913e2abedffa1cc3639de0137284e6ebabc9764a1a7bbd8c2e48e9abb71877f195584fbc04d00c3d6de691e5e02262de61290eaee5a290a8ea3c00cd9ebeab478e5da5d82c4861ce1e144e069c055f961088c9a10a31ad775de30f6ef57ff8db6fb011d97faf16593ac42bfec6d67ef03b32c69a2156266a1e20da19fc9d1418797db7b39a509cf04e7d8c56686713aa5057343cb4dfeb32acd688a768433dfe00a8b9e3897cd686ba49dfddb862ca84b73fd6c26eee23e430c73694dda8308912594809560af3a082ffcbaf6b52824f4c595a95cf87d12b3d9a3614fb6071c884e196262cba657bad9eaec0962126cdb43bf277a590d2e2489900b63cf3974edfdbdc1cdb9635897b36228dabd495d27b93e2f9dac3d34d3e10b3ef0f80d305010402da2ceca8ecfd8117f6cd94dcc4756d5246895822c12c4b04e51b3c6762751288d663ccf31e842955e1e05f0da7213d6f308ae029e286412143d309100a5e06a2ea083b0384cc835ac509b04be5b1aa8f7836df236a7814b3944763d27c6a251049c82e5ffd5c93d30576fa9003e141187fb8a352ac8fb69d000f66762faad0bc2dc6db16805b9d359166b40a4a4f4baa4593165806edfe96f3aba7e0e20043e000349d6961f01499dfe6e39d0c06857d82e2e9609c6ed9a407a82a1d1c27c63edb32f78ddf9c4d4cf2c6e809afee12ca30bc3745876220077e4269e59f34a9cca72a13384ad5d08ff90a04743ead75e1d061d16ef1dd824d3f8f7edebeae3c251b2ca39ca03573ca710b2a63528ed40415dda98f5cdfb0af292e177c3ef99534958f0f777f6da2173a8572cdefd6e03340c5c8e4900f64d401ecbd0c01d010753b6c6dd02184a235bb0ba21fffc63537912ceaae5f3c047474132f20bcc8fc3d9c2f19e232ae54bc5f21928408272671b624395fc57456b2b93e47b724f2af24797819272c984e0274d06596221d6acd53d5e9bfd5c4a05b40dda2a5de6fe33b018dcc9e0aad7881aae5c494f524cdaa6d68e4512d628d4960222c0fdd487837a15936266fd679650358330dffe9b7b55cd0c5465a3f13983909d4a578ced5f34f8b90fd6703665c29b7517ee590c2c24f5a05b9447ec6f836100b3f67ea78bcf07336f35430042dbb6c7223997ab9860389e040700c35687af662b0f09373ede7537c26e89a072c967914ed859f7021993987c7aaa52de792a18e2812d75c40943b7a7a6ccad5f8948b465350020c3fec9ce5049fd560200aa500580f0c0e0c2f84d95ad3239a745009751fc7ec9c0cc8f0026c438d058e40ee2c933849289e1f3663d4ea930fb17d7e056ae02315f729bf4de855eb63dc79c84e37c6dd94764456141149c44cb3547c51c960487746a6f30c41b5b31200ef631915bbb68e8b0648dfb9eb0336db419e038fdc6bc25b805dee26f30bff1fa21f726950995742ab50e478a0aaa1ef7e76da3d1cff5be8c8038437221a32d4b587a858d48833a9b40a366083ea43370916f8cffa6247c1cd4115a952942487a2245b7e4c45a05f2cd07f3e9a027c5b00a6b1baf2dc223d139b877f997c016ccf014a21b5385a4018daa40375a44dd18862cada6c5d8d12c5adde8e64ae353f3184da8fdee79455b008ebbf8951aa046cff2efbc4f5669d2873405d83aafa3f432d90f1a76759dadb03775d8116f671351ecc945842e4de644bb2a59429a52465610374036c03586a94708e0738f519515d8e153c754e593d50c5cc1757d765f57bef59d18a6f4610b3207961aa2b94df6565592f5706c4c3821056cc7c71755d9feafa51b7203195dfe2cf6aff79cee42fb899be71c1bdd4e89ccd0dcf7893ae6c2351ef1b494956b67d9f3e39567b25cbf292e52577c3ea13cfac8da6fd934894fab55919e7709030978c82e6c4b65ad8f67c58b5afdad6dbba71606b8d1e5cb71feaa8be3ab957638c2bc4aa2cd6e8c1959f2b67db0fd5faf96c3d4ffa96186254eb2f9d16d4f91c46f556956afd14c3fa29a54aa5f5fa19aa2caceb0a5d807e7f8fb86af593826ab09ead677eebe7ccdec22c10a8c76cb14055f5a2ad662309745b9b6d12fa05723d7d110eebf7a78509b9ac0ffd856daf5a2fa26fd1b77e6e65594f5fc78aaeefe1d52bfbed0272bdf512e4a37aeb23a8c79591b220aafc8db44d2c6ca924e8ab9b97aeb77e93381cf35d090dfcf3e7e82d8c7a520ffe99b9acd6fc9585915c567b4de57802f4fb8db33240e65bbfdf372b13413edee98b5abdf50f4443f5568ff9d6759a2fa3ce9fcfc2e9d495bb31bf0b7a7dbf0c5bf92dac2b837c5cf5fa49b1ca8a29d579515d8e942fea9c51adf005dd5e25552b7841fb374ae45520bd825ba3e5b5360ed41146d5b9303a5bdb0f75b4cfadd01608ab303a1d00eab63632a4956d6db6769b8f81921bac8b1054a67f0b52b96c0f4159876eff3b823943595ab604ad91a7ef7aef32a3086018d9699d66f939bdb02f6ccf8953b7a8449cdd8f01f3f38e4118a3fb3c82cd24fbc2fe94f2cd59720fd235ec6abcdd27f3d449513ba78378f43bcb098ad92c852c506ca95a403cf843a027837aee09a326d6ac26e2a246c405a420170e878b35b186611c7361826e16cf2c59582c62614259e874ee8162166b569398dbf130581b7beec6fb0fa642255a01ed7fcd338561f63f18634ee45f201e91a7fa11ea9057b7592255a225b4be6c96422fd82c9e2a9fccd22cb93021ba71389cd50fa348d5c3648d34aa87c51a3d4608a9267d2c22dac49ad5f6146b9c4fa792e50ef2d7a1101d8d5a66cc2331c624abed2cad166bdc8d7d1727d0cde229d57dab6765b6585397e70b0b8be58495a979b1a76807f63fd191220823d35da12c6b85ad7cf17a6557fc5cfe4923d2487625bbf4a269eff22e2fa45016ea5cf5a873bbbb6e9d732e94856ea49615cc79cd1013cf091d010e218c112e6cb2557a7cf7a4d2b0a424e59474f9f948ca69f01863c718b321314629e376bcf276df7bf145814659e5bf9763615807ac877df0b537e441e80f427fefed2f840cdd4127af766cac3ee85eb10b2050b9918359976f07b31a91fafca1d0d16394517a8e85e177fedcb520fd77883f1159dddd801aa8ef3973a7ed530caaa1abf7b0d51d7bd6eec67accb47edd7e6562ceb5f02ed68811bef7de7befbdf7203fcf5eb84712295ef2119004747f1e79bf5f3de7dcabee76381295cebd75a2de0137231d4ccfca5044d0115477aea4bae3dc549f1f8cfae99e736c39798d83b91d336ae3ace62feb1b86a14850b7e3fdd63c7d6a9ed34e4f8f18aec4137ee4a6c76bb034f1599241ede11b9c272bb3f5ce133df02ed170eff0cce9f9eb01e56c48d74deba1f19775a3e1ae6e786514a67f0e163ba89f7f3f173443ff8ec915c718419f18c3924803fafd1cfbf049508c918a9410f7fc10a30cb3528b5fe3061779cc8c48d71af1bbc6186ac427d004e8904fbc86ceaa084150f277fb3b249432ca08dd31e76064dd57f1123656eb8f1e238cd0dd8e1d9267a49022f5bd101f5eb69893fea7f45d64c5379837ce39aa85a23a24d27c59e71ca45e4aa88366b57521a0af94150901e5a7d917ea1d4639e71cf5123a6ca355c26ce3a15212888c3fe58bb01913d32d44ba8e9efa39c262306df49b5667183910d53ebc1da1506f101e501e3210d0d0fbf04a27bab91e19bf2afc7e915722919cb3aeb75e5b19d20c8dc68f9ec2462312455134b08d48571a3ffae94675f434fe57c084381a3123124565201a44ff791d4bc2bacec06af8f83cf5b901f42a38e683bf0e86c9a1a3e7df9791c978191b4d5d6dc402bab99e222bd3f2fbcec11f25414719bbd54814ad14c5b657c490beb08daac1cf82cd0b744a32c487fff9fd5d6d65dcafb63d74a5322032abba3a16325186317253b79784677450d2f6c89b0582970a6569f9621cccfe6e31fcde7b06e4fd5797d5e8f1957f5f34194804255734a1f2ff4b075a5abe8508222425d111a51aa95b70e291e828c7ca14566eea46df89705c6c1066d4fd5f2eeaae115b448144931985912af281208713135270454e890b19ec602dea468bc4d030b608c20554d484cf1468cb8e0eaa545137fa39556c306a62225141cf082a27558ee4505942dde80f818a954a1b7abf683672a62c9143658bcad5e550d1024a81c07c3b335a987d2a23e0490256b2f0000a9e580245158a26298242a1aeb15002ad9b89923084128851e3c5079c500131b3919bd11574abb0a852574ad340497777c78005168afa7477ffa83f36949445cf88e4e2c4cba2e44180c2031d19a6f4e45c6145ce94253428a8441b16eabed4f981a9ee8f807044dd20d405c218350733f1cc61bdeca2306207b500d5e5a0c0c6c3a0ef9fb5cd684c256de826eb7bc18443d04dd601c4f774ac8381b09f83810e62a0f6bf08fd04ef70f8777fa8a8a385a164ec7ee89937dc9dc1837c30c807915749ab6dcf20ab733776b11a1ea02f0b651dd6f981fbb7fb1c40a594324a29a38c92a2627bcf7c10420879a18c104287d06770f5dd8d35022451ba1a7fbf7b0833e95ce688a0a47f61d8d1c5bd8ee5215d21bbd8a80cb1de205575f7c23cbdccd17d70f5773266cd33f237dbe037bd6218665feaaeac266c8e9b3b3f10ef7e66eee72548b8d9cec82825f77b7763e98211792610bbea8a81c0e80ebd63101428c928a54b8f2ebc189f9d1633509fe4da831b6aa0dbd9dd5877f77537f69903f53dfb5acfddd8ead3f739d856377cc2443a1d2913a0001b68ac9c78b088213d077cd54a826e3475c642826e4ee707cf2860c6e170fb9824714c798b79ee765039edbddf341d0ee6b5db78a8ebeeafea266cd5a4f4f292999999999999a5a49444fad7b4181a1aae017d921b67fdc5dd07c46bc7965bd8b56a864b6c76188293d4b9ad480f59f11536304ce261527ec484bc1542dfc7dde585d11d7ac72168980bd8798043e8c2a323e734af9c745a105ad59709f161bd620288582346876ddddddddddddd08e2d1efdcaef57a39a3eb5c1e0692728a8214f48aaa8848ead383a440179094a46c60a03e1b9a746802e835284a32333333335332b67330b462201ef314327a8c3042a7a1d1018a824a1ee3bd689a0d1c7470e15111a373aaa2c93cdf1e9377d934e320c20eb80ddac65fc64819e3420e4172740dcd698a9598ea621c09ba359366c255db34e7e0407a71d46544f331201e4e9cf433a8065a33ad025f0469c0fa7bfbd885e0524affe1fde046ee10e4d5bc2644de112c2fc963f28a80bee5a89b0bd586454724979db99eaf189eb1b21d18869f6370f087c1690740c0670d50f761702de4886119061c9b0c1f774903c30cf53defc009a8ef4924f736ece0192d6243d7fd9171932a594503a043f7e811ba07f2715548c357f886a0f0bddd7d0e775fa2266ead98e2caa95ed39d7ab0507fd42d883bc18771b66da054d77db7df4f7165a70aa0ba29b6c0a9cfbd6d82be8c3a51f71c83392fd112d112d112271203487f37a9afbe1c233c51e17b676b0413ccb76e2d977d5278cc3c78df63ee292559265b63c3a33d894a49a24fd23e46a369826b767667955825b060c1c179a557723aa226e846e3654476a9a77a7ff8f98d79aa33c0fc8d85501d11aa7b9111741ff4c12400b250f9fe55853df7aa0a65026ccc03b9ca9dfa43a90a958db3780a13f243a9cacc49cc76a2e5dfee39d82a9c6832b33b5c488eb7a8fbce0293bba090a0e305142a0956a7f305924a729ca48a1e1ce176dd8e1d6ce6f66ed7ede4eb6e1e85e8a885db753b275d39a0ef9db999fbc551476877ced1d83e627e6176ce5176ed64841445511425638c31c628a3845142caa9a65846296594d4524f822ce62896138aa264570129a79aa298a296a21e45554f4a45514ae8a28b2e409510dd2daf5cb932850fa45cba6e574de976dd0e56eedabddbbbdddfb5bbbbbb7f77bb77741516eeedde3c655c4abafba73ff250ee036ff7fe34533026fb8c47102999953f3bf7ccbe0f64c9484177772573865cc82b2050506555227a8544554b8b68e4dcf3e1101226a51f12c021871891a8655ffe6d685a4bcbe891a49046ee8edb7d8082082e7ac30d3788c670ccb362ee930cb3762671dc8d7d51084442ccaa79682a0a15056445b1fa87047098a24305ca61e79a144a1d8923a378337d3a499cae02fd43817c70edeca2a29676c611c2b94f51422166513b0be11c45d44283534c4bcb686d68da6824e34591e1ccccac423b67208a73671207491415b6858ae6b7dc5535e79cfd404f8659399338a22188b8eb39522acd203bf0d8f0e324011ca6e890c3ce943812e74351d64b32af199a229c3ed5a04fed83ee9302280db5c4f9c4a0e3093b2916664a9c18501a86592731312251cbbefcdbd0b49696d11bb990fad9b9c491124708da4e8ad5e4902945c6b4113d618059a3477ddd97cea57341b9a05c502e2817940bca05e5826232994c2693c96432994c2693c96432994c2693c96432994c2693c96432994c5040ea8848596f87a2282583b29c0809dd6844482811928f08c94784e42342f21121f988907c2e2a44483e17159f8b0a4c52371f2974aa256620032a4eb0a0b4ba1c2a2830019520aa1468d1a305162d4a4dd0ee6e6f8e81ad3d83f10178dd59ef5cc27432cad7dccdbb458ca4c11426950614f4fdbf8c511988266c029268a814ee598412b2190100002316000018100886c30171402c0a1461973e14800e65863872523695c8237114865118844108c2000cc3308831c6188090428a30ce06000b1e6ad3c152c456cbfb06f53a0f340760027c6795e9f1b79008d4d2a33f86830072a59292ddfb176bb028874a7c0fbf78a44d2a882f1488f356fdd68b06c38ad8dc336aa30b8939218825b27bc4176d91e7e3723826574741b76bed27485dd349cff550fba504b8cd6daa27600bdf6663e892c0cc5dfc5262ca5674d88371bd2ab9d017f2bd28de5bf73f3ac5bd58eee2d0f5c4db718a2b7c06a3d673e64b7d738fa3b1601e85760918cf6815709d1f508b8dec2947ee5b8d3a6897b2d91ebec6d1f0802a093059011b35814aba52465a090c72dc6bb122c544353f5ac056e7115ca2ba142bf727deb807d89202b4d232c75241f32173f52a3710a6782f656661a79458164600a6bd11d4f71910a3ef950956b6f904d888c3480adcc9a6d2b79d368b7c75c5a7614747f08a06dc1fc01276c5235f60ea44d0cae1bb41351839ce5b82d854ea8047f1c4260275e6e61df1653c4dfc4cbd9bed34b47c1612b6a5a7526547ec25531522a4de00cc4fcde5de2132b926e9b41fc7659cc9042e689418ae32ac8323625846a4170e63b18d5baf1845d967c78eb84ddffb993f3e610dd1916c82e35abdf781815efcfe0cf5391fa21d5defa0bd97e09c461d7fd78ca3c748e0df267966486ffa22056d9d135cdc21fdc3e4837e06fce52f8bf2b5d80e168b91a989002838306b58f8c3e156fa10e0784eed31a348dd1d11b251646412805e6a81a52770edd78e20f76ebc7372f0c2ac69c5c39d6053cdb1531ff70481312bc8e68b863c492cc7b7a2c03b26c43a07c9197f63b48db33937335d6c93df8d7d3e4ed5d8ddb486bb5aa34563c2f6205d4398771a79f6a997abca081844b4a307e43c62e8579d0d69e3518a8560e79aba6d83e787690ef012275cfb49ba5e38ec833d91be282d177cbaf872467f643ef223bca4a54f6723a31b2125d4809c79377e4483c7803a77e597b487146bd4b952ba81d92699dad499bade164151ff9a934d9d2d6bff819122233ce6be135679972c843bf8bb5b2acc938b958dc217a30b1449f6f9faa7c870fcc00431eaf301197d74d24dcac8347cbcee24e8d907a85b255a07d5d181779cfed6db59959653005b0beae5edd5aed9d92762865a5cdc992182ab020e5c05048030b1ed2dd4f8a02ad0714506cdbdca8a690fdbe60c851e2b3f8714c9238645cf92317506dabe543cb799edba22795c8fc10202d5a66aab097582ad01e9a3b4c07eaa997d8d2b0672a9f07d7c1ea1af93fc11845354ffa7a031af121407d281745065b9a634729b3d02134b95cf21c1ce91d0e0409d26a273e27e9fd88794fb39adda4c0885c68118c7f6149ab2e577465f93e9b2e23f362ee626d4c581803c53dce55365bbb6a815f9721d4d025282b279793d44f708de9624c4d22000260e54266130f4aac81755e9491ca8dd9ae185b32f256eaaba91a860172b26b579ca8553e6385724640dd057314c6b83e5855a6b32a8a9d983a0079558a26c9c438fc7a4ed26e733533e0c875de9f1505a5600da7d0e76607b50dfc9b7ff42c5251d1d22f78cc40e5a36484ce52bbf41561b85c168cfe85542f8a02d3983587b96602aa69a78285616ae2424639974c1ecab661ed44e9a960717765211fd05491f5cf141258af0af8f8930c050fbf309a8e991e0a34507d611df6ec857f477a20fa228662d19113b72986aa34335baf2b3d53050ee5d6f721926e9d31f44ca480e077b18798fb3dcc5b717d099b2cf5784072684bcc352609da3063f70d96f3dbd01b56767ff05c94ef3fa7c6246b03864d310273b8471e619ad04b4880f8d192cc7dfa21cd9eeb217297207350965bf1cf2408d04f3f7e4635d2fce580356d7dcb00cb8f50f8754ee9fa03b1259af567d84d4e6e2a9617d5181de2d11419412383d692d51636a514fcbddbea4d4e9e9b93012300e1e340d7e7bce0f24777d3c6614c4b62c64c6484bea7093441f955ed171292b37274479757b7b9437ef2467bbc68c8d6151c6af3fc09e8764248ca434a7409e956d76e443a33c57a94c4383dade8e4d33235363a01cc44283275d49bcdd07966b57f8f3f5c6ca6110e73cc3abec14d4332a52a2ec709a29e32ae64173960eb5e31027646eb2f3f082ebc13e79deb222adfae116cf364bf34a57e2ab384d53c3470876b633023c578290d9673b91755e8bb872a4b9cba210d784d218f616c2697b31e7fc5f0783724dcc1f51342e0629f3050a6c1d7d64da4eb5cfb60dc053060e0c3b0a4774018b30e807e95b66bb6d0f1666308fd325eac5cbb4189373fde4a8651a3af1a058897d31da930456d593fc88b5b30e4aa3126de2aefb27d727f6cd22a38cba469c617267cec363319a808d8a7da58abde289e89d6b797b4b89d9b0d88b2e5aed849b00ec5b6470552352f43f781c24bd901d0498223b0bc237e4c8ee589f9d055ea6217776601ec2a6b6d8a93fa762a2e2ab8a9c9d98d64f650e17fb2adb592de646b35668fe6ab09e11a4d9cfd6bd930b753a8aafa562c6ba9c6de9d425a806a578c8f03dc57ec9219d10a045ce2d776efbaf312f73ea18b6a5942daa3e3a49fa3fef7c72ee487e4d1e3ac557b8f2af7811256f9210329772fef1992b6884e916610d5c19ce515d5dd913125fbfcbfbfc0a7971e69b1c9db137dc4cb8e2bf6e00b5ebc2d4366fd0536d24b6903209068b7766ce43f90cc89d1648b0e13a73b58add9f011f95789903866930794d8066ffe9826f334411f9e2b46e90e7b2754c24d4e0375101fd4c2a71c1a1b5cc023b289faa458f8c42e19713fdc5444cf9de4ce1b6ecf821d1219742fb26c9d0f022be16844428460edf9db2d6f818715f3a3e6530dcaba848f909614af1a7a62a4c4cbd255c815414389370cc1fedb077a3f55722bbb2a0b1d287155090ce6facc981d0c155a04d2b3a569dc4ef2a2008a76e060a640741029e7651790b1e116fa5952daa3f38491540df4581a4fd9229707f35eb27725a016df4eed95fff89b963f49dca840297c5d5f6bd51a058fad606990528d015010956259b487684af5597c0304f3ee2ec3f91addb7e70c8ab53a7974b2ae25b350f0c0863756e92a5879e608e8e2425eb413934b049a2f6895badcc12bac39547424dcbacee13121d0794bdcf7f05f912ae90295cd128af0d211e6b14751b726ff62d524f82cff72fb6ba76338b3972ea395becff6bd2aac5e7078e9ebfe90187d29425c81e4b7d0e1db575cc3a5d9dcf5f9011ce725caae7b5fd96d9e2554e07459b0fad7a939608e1868eceef256ac825a7082d382a5125f9ca00b321612698fb088d1485b37a2ac00e2540b5cc9789286948c86f1820e021fc99cb11090e39c7f7e693161cfb6e8622e5c398087ae43c494fae76e296937c5a1a64575a784c45826a6326968c04eb106580a21fe6fca54a985f20dd6c8e719831e59c4dcdcdd40e0b210409ce1aa88bb24190dd75761790b3a288f6cfac3db21cdd48c92e572fc6ae17bf74518984cfbc6dafe8bd4152fe6ea6bf709abf28cc572d62fc02402ee51b5319fad635b5ef7d750f2118ebaa5c36c38498d232827c4041be2b563e42019d22edc7c0da849b88985a5e408934f727c408e13f5c0ac05747bbe0e120c9faec524c38e5cfc1ea6858c18718922c2b1327964227e898231f017bfb9047d87b9c958b1beb1f89e9ffc192100f6222e3bd929484def8b476779955c876bc2b0d2f81613e496bea2ae7c26caa9720387e8a112e09c989b8e96b755cd91da41f2c2f2790c41df12955a1660df8d62088dc1edb08523f3e88e629cbe87372a64b3dfb098d2d458caba31b5319693a1307ef649e5429e82d429e518b90a04b4478e636e8f931a5fab047c0a64b1014e99c069b6013a1d2353e0934ba5382d0222b0e778414740ec296c80423ea8c1e040de109eb5c044e57accd69dca0dc84ba184305de6f31d8fcc31e31fb3cfe8ac0626cf66021fea515e277ac3601bb9207011259c79b2b781094961bf100e20ec29eca451ac6f665736949ec202829e5364fee441d849d60324e8ed8b1ebce54b9b25a418a6045947db36e875b8b908ce383572ffc5bcc663c009e70e11f6146e2501f2798b78075c04b166583bb5fd4cff81eec78e1f9e244c6b760e785e7142730de38d0554d650d570f767fb3ec9bef1dae2c7267bc1e8cbe706ed12a63cf3b71d8fadcd58a3046bda75fbc992b3f287abde5c26d7efdf244b1957542a8f56705a3dfe4de7d7501d7fdb551f231f90869223fde7b97264b6f35d22bd5da977ef05320ca3bee59b31a430721267d595c8c19f9f4f2a4eb718fab9e50ae4f93704a3df9271558b572ff0b885c7f4896f508c8b8096af6f3f3463374d52fe857be6ba09ae32b33db6fd30c03368f2cdf05320d96c00b397c3c9676e98a0afbf40c6ba00a9b60aa2012b1ba5d9b8707322812c32b7879d740cbdba583078d25658e3fb72136649111bf9a8068dc8cc0bafddd6540d58897e1bb904d586de17e32b567411faf050fd201c7fc52462081e0ff8883f8bdcd0d1c7441d230a9bd8f892bccf3e873de10e4d300d456ee9a67878e80d55cc0013b09dc27f0986ca5fe81b4ce323681bb86ac06981431bd4b5138226e90be4e720716bd9cf0bc07c72d12020d7642b4571fedd7cb8d13de65744dcb31291c92e0b53c9a4e31eb7aa70afa61d3770645050fe45f074205346a95c416954753e7781ebd063feffbdbe8d813cfeb13c097763850c6abe634d6e71e6a342cb50e77dc54613c376402608cf036d26bc4e8dea2b0aeca06ede17fe8ac02611af3a09b694d58803228b83ea15b3e328aa5f9e779408555a4f890f0ea17487e069a26f31b55051e3750d869dfd70691005663d189c8053ef63a9e6a2d3d5e88873ab1c18bdb45afa142a9ee2e961752207dba9ab591024c36191f446ae3e61dc31a0e3274a76c71354b9c107a55a7e4836b5ca767d3a87ce69c3e33406f5c0d01cf239621dd668a359957c2636bb9b1238405699b3e759d2cf558e083eb7b1ec3d221f9ab7deee958c66f2693f211e2d58eb3d2c7ea5d5c93cc0fe2d5e3a4038c8507aa5c2a402e4cd6d2640ee200c1f58f1439e88784fd1b54120c974e3f250fe3d90996373afdbce406d79040afa82caf936d8bdecb44ff44bead8e5402c2013675bf2c412284ad2e79d7ee26d268a1727039aca16916a18a1d15a9593009e9aed14141b648a596286c46b7d71eb3979d2b00c99c2ddd0efeb434296b1d13c2bfb33c2763a5e0f266e73a61c2da4139cc2683534c1021642b45e448f1c7ca0d9c1f475102a640d7d447d0145e174c2928d678e9a1d9c0fb7d136b018ed12c4229c2176e3abd795b37c735fcd52324e80249da0c0cf04e21803babdc0aa7856c35c07b477f63de7376a004eac7bd7e6de4897bbcd0af46c7a031dffe3e1ad02b3a13b174bd600b576f91f3b7433dd865f6914364858e8f64a60fe45c81ca5720a4d6da5f5f866be280b17ced5fb2a08805785668b33beffafa3a4db2d0940f4ec69c44707e8bf76648e88857fcdd0893682b311ef0a36fa329138dff017a8cb4c5503eb835088aa653f030f51f9deb5388f0c1ddb3f46ade36c80afaa25dc301282ee37ea2f2633be0dcd38a53828570366ea37a17a3ad93e16e6fc9407f07a40cce7438bb1247fcab158b2347e291070d6f497f0b6dc6fcc4558165a7d01774a6f04e8badaf8397da5a8ec4bcd2ad3edb02d0dda08c4bf2608c5a92383afc58515b69503ba0f8d2e7e8f04cfdf2ea6eccced1855bda71b51117c711e7565dc4bfc024043e21fe9381c26513a66f12b51de281767941b856a4a59eb1c23a01a5b2da21180aee64615ed8562a9190b8e96d4cc2745284c4f446eafbe40e401cda55fb26997bb912ff528c4ff3c363e62c35bcb3a5f718ae6e27f211dd9c7188422470097073294b4c918f8fda5330ff8c5b132576dc11480c5cf818fa06a326a539ea632baa03ffe7f7cd88c8b165bd9e15830785fffbd349fc4eeeaf906ea4c7d8397e577d8c96f5d67524101fe724b419ece99b742ed4e7b07eb777dc55e4472101881f636d67c266229fddabd50c5e60da04eddd7446a7580fe411cb1979e2165efd0ab144c276b2e7492e8c12e9b75e5d2a1d0c6eb015146534a54af00e47eabb56a97e41555b65ba987bb812838bcef2a8e52d9facb5eeaeaf48e05ad333f80f19ed15392e2e03962281bf20f20d00d144873a663d4d14a6b675fa6ec7c3ed16a26d8664111f44c4477db245197748182f6c7b340399eb27f34034e67fff6db5aa1c7d1e2f3895d32d2fdcec58e9d02faa787f4a377ded1c893747478a7fa44425e59102b8cfaeb2eac306edb2d67409f35f07a3ff620e1192d66fabd80a688ea72d4ad8f5f4558667f28cb0551a66203d0ce731991b07466e0e06e346c15c10ca6336cf88ca2c36d27ac24abb7e7f84cde80728f0f3e645619cff635ea3ded2e1466a3a69e809748db27deb87fb180a5c51d4577e61b21715603d6f7fa85f8d73bbd58dafe7b27395c5ab26a8d700ccb707249664fee7d084612262b9d4e29f301096585247539d8d7860eb59fe9df2197d294c8501ad5419b6433610100a891511e73578b7252097998fe08c14f010c34f68c01115a0fd6bc7826fb9ae33b3f440bc09c43dca12f7f7c91c0b5850bba11b78c8408f2b92b928c7bea86171c56e5a6d2b4ef2bb30a07c94da98892a3ca5c86547d973236039711bc279d4a604ef41fec19c3e83ab905e27958e1445ded925b519b96ec42974bcda62414a9db9922b08114ed11039ce370269e6c75b6923a087e9fd8f37e51cc249dbbeb88c49b88541e739dc1b8ee93446a51a51e890f179eef3c06169e6452733e28f4b2724f4dc133f86d498fb3891be566e0016abe8e2530d2bf5e6a7d318ef5277a687895c6ce6890027cc9679ed7830cf02b4699d36cac1ff1f61dfe5b2a4f2618f36424d51d6956cfd350c89800bd2476cb16c4062ecc66c007882c90e90040ba201e99782c78438bae24813bd72b3e4e0440e49c29ba4ad01cd0112507236ab926a48102d05b4d1a4cead505dc84d7c4b01047b7c2dc305ec9db54fbce96da3c3820ec168d9cf65771460ccbf79943640e0bd9133dffedf575bda81a827b0ff3bc0bd4b28534b1e59762952537bedb891ebc7d85c5432ed385b3e6da970e71488d83cd899037c7209efd13da0bcc26d7a5718bbca341cb46628bc71d5e978667687c0fa59fa86d9040810ac7eb8755547dada3399aecce9462b1d73886f19cfb0cc0d23295ad22aba5a89f5d7f362051efc8e3f2b69eb3a595ac765c378e636ef0e8f4a004da1341400fbfc63b893c5d541e35fb287280d8722f46edb0a2912545709713f5b4ac270058ccac71232e127bc76595b09dbeee3bf764602034a8d3cebbf1dd3500116186417cbf2298b1b87b876712d782a076770fc2e7fd936360ef2830ccc25e385d36843349cff0cd73f97871486d8d72cba082d4c77890bb9535e9c60f9e5574f524336bfa51bf1ebd59321914d9750ac33949c4bf44eceb48ea52d215c4c69023ad090e29d532859afb176efbe8d8924d51be65fb9395e0dfe89ac8de5a8d31125906e3312e6ae3ac60feb58bd4e32dbb617c7398d47fceeaa7355b1ce87235597e49bcdce6daf906d777c3648ae357030da96f43fae3eeaa3004633115bb14d61754e213c78f200763c5129563731905be9dd2473df5be1f4907d5b50f3022e938b118f2e734b108f5310b2c8f253216ba9515eb47f5cf7dcc0eddd513897435429c013b9f01f996176b6368022db0e4de38548e77b89ff4bc5ad162cd2cac16c8cf42aa147b91b258d2a5d77e564bf4c95abd0b3f26409b1818974c87b86c444b68e49f1c0aed97cfbbcdd16903d38608072008c5e55f65066bfd6168b37802c086a711a62c4a1c3153b689bbcdaf07e5ba5bceabe41188333d7353fcba4132221eb8fff7ce41aa4b88056bb7dde5db10d26b222b06ba64c2ee1097373af5de8c7720f1af1418c6ca82fb8621beeb8f6f4e2251810850431670d12f62cf1a7dffbefd82db908d9e4d5c0bf59b1f429ad79811d20857b90a1047ad14d979c0407fe94ecfc469b14585b607b4dc1b469ac82ded0af100bb5670da6816f65d0f9f084ab8d717ea678b6e96ddaca608b9b44644e66eb771e0fb0268b31dc23ce9f146a605fc637f94befec9a14e0dfcd153db84d60e75c268b47017a9ecef45a16ccccd0b7c2381db27d08926f11cbf9c4140494c262db3a3627c17800537a21550136214af7ae987a3b9248dc8d45ac161a1bc109b73dcbb662a4333972159b549bbdcd54273e6f7e2717740be78d7cbb91c9487fcf8d654194c4b1358ed57a7373cccb1beaa035169f64a09ce6371c94f2be79ecd8ae1d07f9e6cd8d4ff81c3e3cc3872d06b532b3d648bb1970ec95c18f9236c5fffcfd85106f856d56d4e9d3906ce5d341cfbfcdcb2dd2cd8ee2c51d0af69a68c1058e3b03b2c35499a941994bbebb1110cfb07a4ad499b1f2ba63ff8b9173dbc71373b886430f1ac8a4f330726dc8defbc53c6c5e00d011ee1d8c763debf6e3b8a6b46f994cea1e03686543e4a61665dc17b2a3815cf993041bdd7e83d84502c7981998ee157ae3fe20bf344ae65821382ac1641b3b9004434874817b11f9057b327bad99a04bbaabd3b650b13fbdce48489e9bd9a98cf3ff9bfd32891200037a52ace7e8fcf22dd38a5a2f9557b928958cf04db50e03c0d6d440885235c7452946c6977f40d951501a6a32113521ec3114bcd462f787f082df05eb43ca812db34b76fb83989f164fa3212364b23e7a62ef36356df682d40a11ec2b22e75d1e3d0b4499d0d8c890142ebafc0005459d5940ff4290de4e126a873941d24544c849f47b98bfbde1719b6461bef4126f76d225d6f54fd8d26dd0e84c8fbf58a540d33b7cf5c912d74a7a711f6466b7fd17623b59bd0025ccf927cd48ec263ffe092ea5f0090429d98e3b07f4a9a003dd31180cf38429e268eb26e72808c73ec8883b07dc198738efff35e22083cf47d78be4a8a02c4083d89f1f670682c78ba4cbb87cca8fb05c6f17e1d4287c5817ad1ab21951e2404c67feb88b610335c38bcb3cc628bacbed9e02cc03d813b714278830886727cf6b4124d05e5fa5699931ef90b7662b5e61916db258153e8bfabb3a1a6ea16bc00ce4cdde2f6d21d08215d4817c00d2f90a76b40e3fa5d5b6985ce33bef84f7c1d8868d697bd8693da6988c45e2caeda3908123ee2e32422922dcca87b8807df20c403d7580c88992a595c6b1b6a6cbcda7794fd7e0607b57c007452b2111bcd02de65ace8a66f42a2200aa9ab1cfa80649aec647746d7fc30e41d715f692d4a92e73cc589e7330cec21293fe554f7a23ac1f4333e1936543a29452852f8e94db93131ba6eed8a048615de319a891a69b7730e804195264b6e9960829ca62bf4fa4f70fb989e29aac1d7523c6db2867cda869bd738f19b6289a754fb104008d9130cbc4b5c0cee599e2c3d737ec3433e700a17c60a590e90bf1e1fbf0335818567b985f32a32b2247799464aa2843ecca2898797730287119e45ebf88bbdecfbe444b9f985a62176481b6965be42423272f9b8a810d51c11ea9069f0c49dd67f0d3754586f309cf06cd0473c62106252c3a80a5dbb0ec641a3416dc0a7e1613930f82968fb06ccaa06cb246c4b4d8fbaba278291711423d59a49aacb310163e37467cd88de9ea4f77ccc41d329c31569f0100eeb0bf4b24a269ece6c1e6360d545d9dd968e8dd8fbaeec1b07cf22031e026c07c3fde4637ae79b2f84904e503f1a37b715f2ee72a75262aea108a207cd8fbb245b5af107236e3f349fa6388728cf79a5c2bac1db7ed0e007b1af9ecc3712a9d09f8de2c47352655169ca81c644b531d74a1b10e644d056eb939fc6bf8fef015ce3bbdb9c3dadb493734e7228579e99071d52c08a66778570eb8dfd127879332aca0f13f60e8d9b1cfdbd3446bcf138911bc2c8c9b2d99b046e19173009b15b9789011a581cd40d97e6bad18de104b079424005521c8e7720ab3770cd6ba0782162b9e138160086697653d5ea8e07c9268427a5f64274e8fb7d41b290947d523c741c540303ca625601303235491a06ddbf62dc3036d6bbda64e7400ed0348f5124f28a4044afb8c93e3736cdfa4240611a5c0e8857072ddfed0de95dc98b636df7e4817e8eda72a35e00c7b7f76ac8f13a3db79f4156bbd8eceae50150fb1b97a1bda54f9320590ca29968e83a609c9767c40961f2d46c5ce5fe53b4d27f55f544a7ebff37ab51a457aacbb258c26a70d71d19345d398112ca0a6e74259c0f0120de47538d7f11da0aa77c8c4b80cdb958541198c93cdb6ce37a0e94d912704e0dddc55c086e6c4ecbb625277f6adf9e884322899be688c3d20a257c3d9c6d803a33a99c09c3dcb667275c07adb34b0d2e4228e2fbaba6499acb4b13b1666f124003c20e1c11fd308d475405d068cba213000eb64b58ec89131788ea5e23cb6e4e8fa552f66ad549feb08ba07c03471231a482d751cb758b8052f8d1f27e6231ed0622a01ae0a5f2c86739490210c4141020c746b53abd37d99d22f0410240b8eb50b4635db152000e218b01e5b0e3f33da0c6fa80c2ae02ee20c7a8ad1ba4796f531e0872c761cec756cc098405f27b47810980a86bcaa2d48907ce6ae2dabddc65d1b8a95b55120b5e3eef73026c1f749497317ed55df61b9f1390959681b52817e4837e002d490436bbe59c3e2314390950104005593155d96d390fdba5f79c6cc91297e3d2889a026c961a3340208c691ce76b79170be9467ab0d3e1efa588499c1d767c300ba22a8f769c0f8a7b35ced877558bfeec86e61ea1ad42fe9b2e984fb3662de03747ed83c70c4baa1a01a07950f852699255dc16441098e5554db6f77d8a531304a40a3d56513cf0c7b8ceb96c7187f80e536c6f8e438963b39bfe4c43ba1dfd0d0aff795088d0bc37b62c5c9a205373ab1a16fae31dd1d864eb1a2a079acab1caf32ea240fe0326d279057aabb2a4412b37d86c7ea322eda1cf98563bc8f2859389f774590fd9c6357a9d89203f9810cc117551a942897eb9f516f30bcbc47206c00770e4de999e589b3a3f5985816f5067a6d9834c94a25db5c8e42ab6ebfd2cedc1d993cd1cc8479c8e46c94340ba54095f0823eea4d48c08a29b511117314fbaf5fd603180ed6e17e7ce4c5feeca6b13086202f47dc96be0dcf798e4adc925a856bd726ba130c2abb3e019dad99a60f4c196df8479d200fd694c5590c3efbf3ca330a6127e5aa80d819d412cb79208ece2c62fa11d8ade40b9ae83b8e35a8884e885d5298168dc1cd65b4476c12c2ac7b9f8e92c845c47511a2ca2b3baa9ac2f894bbc777790f8a320c8b697d1f63a8250d30ab600ef319aa710d221b70b57e50047a1da992e94fcace6037fa9c0692fdd45c58bfa4e67e6600ab12813c3e02cb355a64815edf82af84568854470868598b23061230555238e5231385b0dcb4c237445658ed82169ccd96592e42b2317e02cb40a5cf7c6887a3e72fa109aa57e64cebf27fc30f135383103ed05a87745fed569b3938a336b79ded521cce3348fcc3c03ff53b25dd8b4feae4c6f99b1dfbecb9241cda63d2816adc18f4ac691330ddc0e29eb08ccc5c3cdf68b1ff86932596d8d9fa10f083ad9bb4f513993653ea0a77aa831003f88355dd854fbbd2e5091cb04e3a8312f6194286e592e11b87c7202bc8743de03489232cb1e537a70a3e409199035a7a9adf39d45cf79de001d095b624f2b3c384edd495705b043f889b7cb664cf798c1728211110b5883ad56c4b9ffa2dcb3c11fea628b299c7f9362a93f0653fb060354db6b20f37ed068d0eeb1d019c811ceec8488af0e0ec738355e96b6939aea5601d76175e4eeab2574a5975b1a83bcbeadf0ca5ac5c3df406cdc66f059c76aceb2c77b081aea0c2c69e69c612a5f181184c8189a64c9056d4130665a27ff1712f7133c9b096e6e4b6dd70c156c531388f471e357e6adb7fde65b152747857a9689f14ad65dd9fd25dba9a27c821c0a1bd3bdfc30d1ee6e74f5468170ffbfc7c55cec2df822c196f4fecf00225effe6d4af35e887ac72237524a37f7ef163a3e0aca7b3216a77e7df5e6798c38f456debc08c1f00cdd242539ff4441f95aa714f4d68b083c8470a546362cac7611f240a391ddc6305f75e87335033024ea8daa200e031b42d438559622a3b70b73cb1dcec66735170883a567fe413c430ddaca988c05d3cd56661f5b19d057954a0f49eb6cb4b74634869a74d47c22fc0768729df23d80e7e4a801c762e3c41488a6bc10c028bfce5a992c6f4a7eaed6b2695653048b0c8a2e8deee9ebb8c7f1c5e764c500eaa9a9781eb0a64c7b620c91a937468a2f35618df8df6b23af4589e5822f9446372a0f2a944db1babca9fa938eca9848b85f1695ff925af04ff1ea5405af2cc7ec2f06fe821028dc393a0ac5c6dff562c11beec9d603614d0d91dd74766d383ad38cb9799dc173783da5c2439bbec895c328baffcc3d4315c83bb5451aa15f3c04e3d5988f74fbe158f17b8a16ab19d4af490571a74abdd6b94f2f6b124d05e25c52a862c3c545341726d4dfe7d1129f8d3e7026558d1efe688635ffa37b4403da3f073dc29f47212e630134ea38e8bd313e12306c6b957e261ca4d64d897405924ac08e74d11615f840d7fcf817c8f8bd5d5569197e876ce13c7c5ed725211261bea0158cffd7a06023745b0ede10b32e74ef393823b23142ea2a29f690bc03b05f3322f717e9b90fa1b590fb38376e0fddd7f97d1c3ae4b85e8ecfb4b09988fddc7f26d4feaab48de6073e9f4c5769a75a9a08666ee2712f6eb5c7ea8cc2035f55a9941c998046f3f8a270f48b6c3aa06358112eeab6630023577274ec021d35f2fbe0f68d42b723804d573d096ceb49bd03cc694da8d7179420f3405095f2a0c211836f0a849ea1d24bd84ed56a50c2c92e674c3d4352c31966f54601dd931974a59767748706c64e101ec9774a98b97096cb03c25502c2c817e3b0f309decef3215b3abaf44eba89907094cbf6a98498cb62c9ecbce9cf7f64abe07510eafd103020c6af7d6eb716dc7dcf2be5c476783d868c3fe7258e0f26c60fb419dc15adf3783adaa2b33052eb0665327a5736e1434c9ed62cbb9a50afc051f811131a6b272538533c17d14d30698a09a3e4165840a81c9b44d2af62077f5a71885c4f3f9e313255dcf387bd16a34d1a100f1b98b03680d82198d0e967cbf90cffe006a66344219d408eba31f59da1f32a4743070ccc865ec988c76101127bc06210f02c8eeae415f23db25dd1aadf81eb2f684a79adf84d1f10b4d71617fbce58af49533b16e14e890157fa26c9f28c76eb8e30632e7d355dbe81fc6b592f1b7c251a246b4b4fcc3dfc907620e2e8f77d895b06ddf6faf408d09cc509c015ee0865ad8f06cfab24c0fcf28a4eb2688148d01abc84ac1d1142283e25d331659d06731702c9a4fe4b3f57b4be48bb657a9a55d625ac9a21ae5a16b3b233a925c3f31cdac7c3a1f906038c7eee2ed427f200ebffd3658cfb5db042ecf0de4aed58f28de97d76c1d87b2b9530da56742026659c500c094cc2100071596534636b02bfa8814159fb5ef6e480cfaf089a229715142745740755b688edf122542ec6ffa9dce1725e87aaaf6f8b72a1d19c15323bb688c669d0328d67a33b00881d455a182122e167cff1364767efb5d66162d9a3d6f98b8ec0a145ab80e341dcc4cf5af2e89ee78a9d30d08f661f4d40693471e45918e6d18afc8052d03137040253be1fa6657e2c8c20b84ef178e325a2fd619071882e8af4f99f22543c8e3e136f4b4090c179574c25aad7843e698ff6505dc27bfa9856e427acd080becfd2b738003ac4068e32436948ab3104aad6ba6ed4112a1f17685c5e1617dce630cc8bfba4bb021960dd2f3c6c2369bea077a57f056458c07651145437f7cbd7bb5b835ce99dc8a0efc197d38fc797245b4416392b2fb71bc540b380f488814fa1d4012a534089cbe69cb6b77e9e98f6be3584570a620fc6c278c15e5e7ce51768360881530d35af4139641adce6cfa6b16a0c313ec601613fa4dd51d63b2aa63a29d79efeabd0bd8999e40497f823abe006652f79dd69337ef0c11f2e080518f5b8301044e8e4118e88f9506004ea50a4230bca65ce47812e98498d6ebc55ba8e43efec17a30f7515ba62df222710f72c84f3d6010bf1bb7fd5f58e713d86b35e8e68f83686550b75ece386cc47d7bf566bba532c3bf6751530580b7f662f6cc57756dece9be0cdef4d3a8568c2dcea52985e737bbde7e5e4cacbe157459d10bd9ab9d672e5d96072ff544e7cca2fc1aee0efb5ef53fa49d063f3af9784e965f3bf5b9b31709c8140a63990c4df6622b4ca64a79457507969561cd644bfc894ad0bcecaf2cbdf2f6e31d98345a28b6e134e881111c0ae465a92c02e2f75008ef22df4b774f23b0c7e17e86228f405c0b76ed656fd649324667f5e25b383e8535e5ff0574fc192cd267e9fe125a73859de9fb94fb706bacbad2f29dc9fa96b962efbc07b6a43b35a7fd8b0e59f244eec60953c44257d4d1397f947776e40e9f8e9b6cb835859c6d103db080c77c9c430bfc244b29dc033e1e2a6a09d050e09fd7dc0bbd0a467bf273e216d1b04b04e41a4c274f6d76fd1d6e960cd0380131f8c637761943bab896db2bbcac37a1d1e575b7eacc15bc14d8e7b5fa157e587460f4e20c95fd63c3be0bb4ec6d7838e6476b802c58ecabb0cc4f1d1789ac49f3de649c610b0f432efdabacc4ed2aba93a4da3623aaf28c99e2d103f83f2d5c65d1babe5503e9a28380229271626ef9b295c0c868b580451565ff51ba75c9b2939643d22333519a077f4255083c5174d7f1c3f82efb202e09f4b122bbcf71e35d4f170d375cde629d6e72480aac67527b5a8d87b3f1ce5736c00d7e1350813fc8412bad0b2a9a96a9e39282a25abfcc4c76983207f6e88b2184b8cd4683e97bf23fae5237bc384a5e62d1e8dcc7c2cdda42dd72dba44179429f408289de04f67cf566c922e54ffaf2bbb3782c9b40a2bb48483466b0afb97411e0e5ed22079454a86f056d7a009941a95c9d43785981bac1de86c9643a28a71260ab8553498bedb611d22c6f7d5a9c3b2b1af1811c3a83a14e99b616e05002dd748b4b3ab3f43ae90cea2c5b16cd8037d8e7efd19460f40758c6dfde88a756d63bc9017a68da9c0d2ed326bf75b298d76549b159a135e6227f39cb08e9a2ccd705f811a8525fd316f8a147152fe2772a3f3899ed642646c7abfba0f01f993fef6ac3e4020dfbe81a0be7d7be40b12c0c45e5ff3ed3bee4291bb66f8fdfc0548f0d8d1fa8e7fcfc293a86984ff98492c0a392dada056e88880a586bb5b8fa10d259ab4fa8e2127a6e96ed4a69c362544c15212f03cdc6db86187e4ec242f4ebfe95bf88cd0012d0a3f42fdab1de69432c40a529a5272905af3c96afc5914bb9a01490035620218e77a68bac0ee08d94b006d29837396872a0f4f5023eeba8a660df13e8a5d97f04bdb30fb16d9e4e7d1a6e6117819095b9b141b593bd8983d31c78e8d8146083f8337c7330bb481f86e511605090a048cadb7b4a0e90c4119253e640f36598322b606aa06145e034a7bee7e5b3052ba4a075a6849a309ef8d37911ada8af6325948295d4a6a0c6dd9cc242340648bab09552b3a58400fe7dfbd5b4a64d175b863106390ab5cb0f6d801ea4337a8c48d02e9f5f09fbd90fb068d180922237fefbdb794524a99640a7607b307c307d3e5925d0f5709622f2ed70bcd3c751944687bbac277902012be5927ba50c5e99d19845da8fe5c004710091f5927f6c79c23f64413889a9035ba0ce5100948e08275a13f273281a88967ce71bf10c87ea174ea9c0ff9d9fc8424f8f6d8d2b5c895c0e3997384eded3c5afe446f5fddf40e175a9e7a1c7d7292971b9e7af4bbde6137e38c33e218cec14e1b40d4c4b78b7370bb9e391f7da79727349e79c974a1d2058918247d61e5c31b3fe90b2537cf334f74592ac31863c601f9634927d9d4c09c4cd3b40ce3ee2cf6d269e9b7e26f3658afbdf7da4a7b8aa6dbe41d160b35df34c77cd3b66dd3325b691cc3c2019d39be22fb58528776cc7df8d999995d35257f7c3dfb32cc3b8b8f7df79b64201dbdf4cce58c51b5b2f1719879733e9aeba16961864d2a9d7126188d71428de925ed9dfa592c9db3592519a50bef92f42ea7e9a3c8e8669ec839f384d22a9fc40596ef4f88857ead06ac333344174aa62c328bd462cf96914bda12eb48e7a2e8426d49b3c255896ecaa5f959f974079db5a2597929955847bac65479606d5b8c3182dc3ce8a20fa53f1e084bce399b67641d1675e2d2b6e7d523493006d299e6689ecdb556611e7295f6d6927cfbcc9a7c7bed9cb09f7cbb6d24be8d7cb75257e9feae8bc9367da2b553d9dbb3023aebd2db1a6cedc3dc7ad7a717b27802617d873f7ef36683b1e98d3eed2c10bdb593d6cf28f3ca6a45e9f9cc35137dcb8f0522a208e40d4af939d6d37e7f0ac56fea3352689c6e8f34c609adeba76bad44859a71ceab4d58a7ba36ad75ce3a676302686ce1d4423a8d4198974e33a7d42d75bbf24d0b245efab65ab98dcceff5242d45cf543c276911c56b02f0b89ecd8542d818ccd922ef1040a409000e4eca6d709c5b26ede37ea2b51ee783730bd2d0d0d458afaed9388d57e3c5c761ad6b3ab5d61ac781e3c6cd0d4d8dd358eb98ddacb5d6db579bdbe07a363fb93680ad95c8d5aaeb6aadbee2e65183b556a6afbef2701ef9807704452fef5e7aa7230ad2a9970aa677c2f08e1fe9d4535f183fb4e129af5a7a27b4754bef00d95a5d53713f313b21739ae27c7035bef290a4cac3eb4892875bb7ab639eab5e83ebe9afd99ec643d6531aaf711baf3547bc8386579f49f08ecdab6b9b17747a1bafa1e1c5477128ac7c5bf9b6f9ca79340d8f9f3f9ba0f8d685ccdf3ce8f41b8d6f9eb79f3e2105885e74a7c7e6518d962e9c4540585aacd1828b76441f7b7296e1268d67bd391fd6575ee3f14b2e287e8d5b4f48fc9aed0b6df8e695c629e70354e3366af559d43b365f68e349efac3e201bbef2ea134aefd47cdcca37ce878d156b8bbca30768f31a2d6e0d0fbab08dcca31a5e81e29cd23bee1bf793f9758df311bf5583d469e48ccadcae411a1a4e7d0b407823d278ba857bba3da594fa507bf93747794231ac3e7c7519cff2e89a5a8df491de915e2b92cca95eeb173615ae36f9e91549f2541f3867ba0ac25594ae0ef1d36d45faa97d4754a4cc2321ba385bc90cef5fa6df952368371f3becc75ba7b752ba7db4abe88da131ce0fa2a37c0b2d8ff2936bbdb19432d487917efb4e1ecab3251d13e72177df4ff4c139eaf3e9d34fb31e3ab90596ef1e35e4bb2a1f9d3a8fdee9de42ca67ae6d0106db7830a077362b16b56d5eb91e1bea0bef95f372b9f33af5de4ace27e37cbaedf342ea9c967128748f3a7d21903fa97c82e298476928749ff3901bd0f60151713ddc4f74da930151dd6ee520eba70ea0f6ceb61a29bae940de396af30f373e7d9ce78ff2e26fdbb64d6ebb9b6f5ecdabdb5ccefbd3aed99c5c73edd47d9c17c6e722d703f5f530eb6cceacc3f909f3ce93f193c7bfd9fc709e79e6dcb67d34bb407c6a356831460ee32c67adc5ac732a7c3f1a8c2928d13df6951029fd84e20a422d6f852ce639bb428398b31ad48179c8f211e1d30182de60d0e9ad83946ed1512a6462200539aab9b576851fbd63a5ccb77da12afb7444a1e63c1d1e4b07dd6cb144d0d152a89f06f9704a23f609c51f0dde06a9cc922efba142057a07dbb80fc382ec7b21510a0d4615ea0af43ae659cfbc20f3b97f60a077ec2714bf7e3d660a325fbab07b99c8350102882ab014155db1020820aac0d2489fad644ee699671e9bd23aa39606330dfb7a4883998ecf62d34ee25abc72e79d77de46d260e698151de635469f3de433975e28d4034b5603fde2528399c72f2a3598795f894ad4336927364517eaf8cc1b49ef64e1aa9388f9ccbb49ef6416c967be9a7e6fd76559c638d907d448f64851d1152bae6bcc3632f9d91f7433deb879c452b71920baf0fed5a29638e3ec291314c7f4cefca216d762155dacb53a5383d7312c9df5e9e1653a8a58fe7a7c92d520bf08a5c1ebd9178b1abcde55c4a22b3179b129ae96dee1242624feb65f8f5c2218fa85dd6d2495ca8d3b3a4a0ea790fce839d098a7cb81981c4cf1da69f64ed8421d0ab1cf1efcb590fc803e1f27ccef631fa1f8debca213eaef911e245da85fba507f4ff985ed5bec1848292dd37b595ac93c27cff61cb0cffed843573b554b29a9ed06992ff5ee6eeaa4934ee903cd27e6ed01494d66ce9ecf67a33910f5761b1fd4dba9b5be7d3785eb9b43e0bad69f4dcff4761b1fd3db7da6f7e7aca365edb13d288e79671d79654e0b66864091310336d6a3ac51560cab326c46501cc332da29c39ead335774fdc2b3d3af6b3004b9257adf53e77676da9c09444dc8f662d6ae79e6f1620eb479a879731ce79c8d8fecb32fe88472c6e259286f392d6519e9d4b4b959cf9c76ce9f7941581f145f88507fe7329e4df78397f1fab5ce3c6e7a19196fbe6639b69cb6ca9cdc8c97917f92716d729c73ca9cb27c7bf14f5efba0aea639733e3c7a7225f0c8689665aeb9166eac23fd468e1da74c5fd14dd70bcfb9740df3247772291f73eee43232980bd597712d3ee69c1744c685ea9f9cb99f0b7c07e1c082e298680286b973bc28fb750dd6ef7bda591f68f2e4a37abd2ead5f6729f95a21f1ebf5fbf9d313ae94d24a29a5944143de77668cae9d9e6ca4f7b5b65d7a2cef5d01030d20ca719d475f0792577a10a1ed834810aa2f5daed08f81bff763ce213bbaadf123aad132a1b1446dabe9da742d727c51ddf4aaa4a0c521d97c873ec6f64834ad0d87e690b54136b607c98f41f30b85fa33ae077521dd0399ae173e6c0fb2625e18f3422e90d76d61bb10fb4177080c2f7c1021f5a30bb1cf02d173f50ed9ab508bf9e99f8d8f88f4d22352e809e99f9ca3bd56e71c0de0383465b7330b41b206c9972efd0b1aba4268e007dacc96ae6592b844f1e1fc8e317a0666b674d1c3e7bcbc9099ef477a2195dbe47342eac6f4423619de1124ba3e88848f284c1783d1a64b0f89bc2773a94566c9eeace3e37aecd757370db247ae07f3d8832faa6b3024f2306f7a42e2875148cca6943241f26d7ae4638e7dce3aecf1af17744fb88e7dbce266a276875e9bb2c306c8a0a1764cbe7c39334627bda55b4fe76b18a9c72f287e25c013d968af68ed335e3a20eb217c68bf78a4b738b201de1184f546ec44cc854767fee837a4884e8bba91542bfa54fdf49a1b62ba10c8b3b6f83184ce74e9a60fb1773287a8c54d4d58f0030b8e985cae1675cd234a20040c4130d11a5244a715dd48aa35a448b7aa1b59402b3af58c2ca035f443e6c81cea4351787c435152a01ebf219739d3e9c7320789c7904106465fd8c0081d5cb95146c72d221da260c2891327965220468b5bec212b0577b95af148ef8480640aa131ef085932f33aa787b26af1f30b9263c684179b20602de17520444978f9fa5d0fe5170efd94de9ce286bf9f11ad1ebaf061f4b03a10a2267f41a080214820e029907cf570043fef0702d6f2f5fb01e50505c00206930b95bf794ee2e2c31b0db1bb40d4a4658d5c34384822061eb85c2d3672ddb061882445418456602d6fe42a001630700951c010a4165c3c0592167b3882af9ce485152f14df0806d6d2b29f8bb5b4f81b627701044e80a8c10b625c435cae167fa1f4e62450002c9c182301940e7040c419318c19d3e212542f3f5a913439a717eda5d4a55fafa3b4ced8dcd40b15fcaa415a29523369ec523ae6b2faadd5a594b206efa09dc4a41eddc6662a61ebbcac23db8bc63e29ef88223448bd307a960cefcc962e73cda9dff40e751dbcc359e7769d7373569d739dfaaac6532f8c7c0d0d934f2ecaa53f27f100ccdf3478e3751b6b93e4c511cf495e14f1ab06afd7495987751869051acf4cd151e79605d078260a6f678f5c8f479f335e74ecd5bd76aed5bb7a94dc09957af4f6fa85318c99e601596776ebcc27602d0c81e105d707c99c05a20f0a45f00333c63c0bac0425090daf390b44af7d8c7d3ed9d75a29a5734e29657747d6b994eb896f29d7c3665f183feb09b3cce6c7da16de025d0f1afa50fe751eed61e5d1ed2789da9e93bc28fac94e7b302f6589407d1586a75b7484a7d4b7de892f68cc91396e40e3abf2a3c864bab55d3dd471758c605d051e6079eb15689ed9b2bcc455de82d171d33becd92d118cb7ab2facba8c6365121acfe8c0a5ec22cb4bc9f303b2cb16a66f1f1ad7f0a1db8ebebd53ad78477c125a72ec6409282de5eaa2c7e73e003bcb308d163bd4a44b4fc9b7e7681ed9ea10fc2d76627010209a82c50d53c2d0a10b2d35b498bbd275d216a5efeeae776418f1db9e93b6207d3ca2f1cc0ebabe9b00349eb141d71e3d287e87b1e4b339f5f65888d847592788c7f46c9e65af7d2158bdd08abadcbcb03a75ccdb37c75cd328e651274aec673ae69be6d1d324f7733dc6fe304cc8158a44357617479e3ef1f28c26ef4fcd10f31e149f3ab34ec84963aa7cfbf46c7ee81340d1432134a44f277a2134ace0f8a64f7cff3450fb8cd225a59f90f6675479a17e295dfa4bcf5f487b2f1a374f0a4fa0f8d0e70c211f3e14727180e9432124aea00f8576a0f4d1c31098e0250513d3472f4e3e88c78c39e375c400c6c71e334b5da3e039a969e9bbe839498c290f3e2785b1e5b999a54eaee039a90c261f919e93c2dce007f09c144686bf2ed710568ac2827d21fd1c08123f62d1c910daf5fd7de47a044d97abcb7318cf605ea35be57a38cb67798d69adb5ceae55c65aeb0565a2bff458ef4224ea9651c830d19e93ba4002c60b64f8610b2b46a0404a8b398deb21247fb68fd9e0e58b9a0d0ac9d7ac6631cc76aaedcbcfcd33b742f231d762739432b6f32e778e74f0e6f90bab4b26819b2f8a6389dae4fcc2f84171f50ef20ef9383c48a762e64a175e9ad485916fa6939ba1a28b8ed342349e91415237b946e3992a3330e82fc27cb165061a6f44b2861b9cf1427e91d20597f7a2f443052f5364972e927e79723715303064b66697308a4af8a1020656267c09f3d345681edaf2f2216301e3adcc2e93b27eba8fd1f5234bcf2d218bc53c4448badc708222aa28d1458b567b34c23cdb172e20038c1e7cf0440ce621f261075e3871c4888933a4609e0d3811c28a179223a868221635921a363f447aa51c226a596b3febedc9af6d74fb51dec13b2479de12534cba7de84266923cdcd4a54563a3ca5add3a87ba54d2cdd5948e2e806ed76337161ae384bc319539d486c524468373a68b8043e727b8518d521c218ea720751054029ffea03cbf90860fff10e867cbf4a7629de8ddc660f41b41554ff7dd3f690a3f1aa4eca51ed1b8b5283828f1c261895f35e801160f2cd66a87d58a06896e1a79e6c2054530e172658c2996b4d899c6f4e2de6ce288512acca904f3b494cea1545c702b8ee6399d3c174eaea596e8c23e9a51ba8f1aeb6eacfb0804afde478da597e6d13c9a52e61111e6d19b47534a12ccd3f512ed44cb00fba6942eea269589058ce2a9df2a4f7d7ed8d1f5a106a9b7a082e499453227f611e6dad19604efe83eea234a1df3b0979e660101eb9ed2474f7459f5a24f128f8000c22c6a81c370180ec361384c9c31c6183d471fc5e8de3cd5c0a9716b44afe19f27f97a38d14fd1678cd1371c3abe77d290b21d1d016089ca0daebbbb070429d811081784d39c20d0584da42af1624f1aa4452ee834bfe10070e94701e0c171eab37700e0d4e79c373c9c730660ce3955a939e754a5e6bdf1b08f68f89c930693728be43939751bd3e30d008e2a358b6866d12ceaa33e6a293d459502e1646f9cdf5784038757ae8f523d74d1ddc33eb2f1b08ffaa8b1f452efb853ef2c353335a89a1a9f1ea786681f7df4c8bf166e78d84700f090c3f41253faa8a5f494c7e1f103c0eb6e3ca393db78dc601f59cf86176e1ff6d15110fb212f09c5a7f199d02075956793faf8b5195477faa617950b9128a3200daf1baca49c4821bd8e84995c5e47b6bc6a10f3aa614b6a895709965e25509a30bc68008382c6adc52d328b94e262520ac924952493bc9209934c9e1223cb96540f5ddc22e78dd14b7be412b7c42d914bf4325dd58a967ac16495f1aa61e931f753631836b1c6fc48435ac5d884c66d834e355d7a0a8b2e3cfdf4d07fb6c78ebc8365a9b59dcad285fed67639c0b794525a5966441dd0a0a937f9065da75a492965cc62e2a00bbb9f9d6a524a61106b8fd415ab9bd0c1afd5b7dee9ac8dd1c67ac5adb50259b79f8d0feb4d5975efbd7eefbdf7621876bb8949a9a7aae842771cffd8b5f28086293f80e7170d47b610f3399e5f33283dfbd2950ec7e41a48c00a0b50ee9862eac2ee29a51b09b4aed3a20b4fdfddc72c40d07cf83995832e3a1b60bb0d4a2d13d01887b914966e426006a4c7797e19597aed54edb4f1413d3af5f8b5cb9ada810c6480d2c523524ee6a7c47427eb73d2f8c9fd8c4fa7ac4af9fc72e4007b07483a582368d6d03c8c5e8d1a343e3fc74999d13dca83e27f3154f97d41d3c31afee30b9a2ebdde1a5fe347e7abaffb1adffdccd63b33422d3820be1c5ae1e31752a71f10d603054d0fa30b916fb48d800b9a1ed2f8c23b31c7388e732299639fd71a5f10cd67b4f9fc6878fc2acf88f314e7d20b7f7cfd70b4cf888dd6f6cdb039110cc38810d91873229b6b4e24fb3a99c3ce3911edcb7c05c9c37d2c19675c47836ce9164f1eb2bea37b377cd0596735c84eadebb8414667fd14016eddfb09754e3bcaebbc20f44fdf0a355374e19d3daf7c1951922f2356364fcbbc49e9acd64eaf934ea75a7e3a4f4a27bb6089aa4c55994d78474f23349bf6fee136fb8a3eeae82fc5c429929a990d8922c3f9766ad7091e5fc6db6e6456bcb97456d2329e51e75c87f4d2d3fc657c4eee04996fbbd46594a452962d128ceb8892274754ac6061e2d22f7b4814ee723fdf6f3e9b5f46a63ce7db8facd2a0ea3b752ce84289d48ff9e47a04f161eb3eb15f66fb69e79cb91f1258e91dae7fe827ab34185f46a07c7be6dadca2cf965638ed0b8ad20ae5c89152994b82bf5f5094581af4a1a91fba502221f54e95deb1d23b4c91707d6130533a74d4a564b0d6d9e08eadf613eaaf42fa67af00098b8564b5ea8e148b115a518cacf7b09536451263dc0095ce1c731c01ab5bb9e38039b010fb1ca7c1ee066c49075f1ec3300c73c66e0ddc1b04efcdb01a300cc3bcabf298afa678ec0b81b01c741ceef92543101f3a4b0ca78e4c3a679122224aa46cb8f7da5be4defbe4af77477f5f455ef0f70b6d6a86d4912bbd4ef5928186cf9e5f32b83eecdc08160d2c165796d181acdefaada1efb3e4b95648fcf87d20587dfd80e63665903265e47ea59fcdcffccfe6a7975e44a0f8f0c713a08075fa4544097d7e1131410f3a4e3a03899fcf2f22367cfbc693f20e7e1191e1570d8a5971c1e5db6fba0363347db8f5a0cd50d16df439e90c2a32674e0fe143a24a3d9c5fe8c26bf1f53372b64643ec2e1025e1a5453f174f812484d722731408e1db0a2a7268dc3c321e5e2e63ae93e8338ff3eb11bda6699acdf553b8bd0c6b56d7eaf4aa694471c3304cd3e46bfe329a5f209b9f694ff6c79eec750dc3b2afe73ae698162c3f1da38e6d7ebdf858967d40d8c6a1307dfb306cfbc2a1dfbc7ae1945d84d900b13544c68b301ba07a6cf1909b1734f453ba8cc72ded7a3fd807c479a8b99cf50b39d73e1bcdad5377eeb3d1be9febd5af572f730b74affdb9f6fa988e7d6175cd351bccd906fb7aa83f1855b4de8032d7aa6fbe79f5f8b7e67a34d73ccd79c8c8a331b91501c61129050d64083fadac5156761e5dd99bba741bebfc525abfd50b360973ae34a0e8aa4b8fb68677d62a420ed75446dcf0e6d9466be3cab7eac3af837562ad4a7095af000ef3cde76810e7994550c58f7a0e967711c808cf3e5792abc81268a1ab56f45e672fbaa65a55e7fa711009daec0944c78d140b5b6b259dec92554e7446a89ce8a2472e342dbc1c399cf44645e9a4743aeba8a2d05a69ad5475441727956e29a56429a5e4962e4fa0dd59a382d285ac766128b6a80f45991e9d1915fd3e8fc6b90165e4e156c4811155de9f5f451891f23222865714d7eb08307ce3b7e1187520523bc89779bacee1197f4ee96d599abc8ed0f23a02899711625e4660791d71c4bbdb27addd7d738830024e5fbe5fcf7bef8d7c335d30c3bdf7429142e7aa534121a3c91226a922401c9068ea420547f8c03483300a03a5862428265372707224060a6070e2c904c2280aa32c92a07490468c88306241927be2611619b98c6e48b2e405e50a14268a9833aa9ccc39a7e482c5ea5625583204181b8e9e48e2031430349ab2f81acfaf27494ea60f54523f60e202197ce9820552e60f7cdd71c01c20e6e13898a3c4510d465cc03446d1fcaab0184378a1a28a2523a61ba60f31e0a6f2b112913774f9f2848821b43c19e3af6a09add43a55319973de996436b9c20696882a2f22a05025512da1f17aa23d89e167be7cd8f913960e2cd60e93c98fa0090c5f927eb0010c0b54bfe4196906527a0073c58b932a5aec4c2307550eb3e6098cc609b8c3300c0b424910506e1784917baf4c0c6590818a810b20c838c5000b23cba2c510b398a2061f3704a30208268098c1bdf75e1b6c70d9228b286890a4071b7a00e20803c288060577062a1b8a907ea84275a4338267d084e4c40d5e70a484134a8abe283203c3300ca3474ea002c51048621c3143063c146529d2412d821529155da19281c6f34b88256384b0c1bb4eb5bab9f6de21d1de7b5f42c0f0f75e55914e6583cac6f32b081efcf6fc0a228b0f3b6fb2521959ad58aa1958ac1d1e051ad000059227a0808196163bab706019428327905051658c0e2c161122447866eb56ff8ad42a850a8620562b29552e1c9c186bb052c5b05ab122a61ad275cfaf1f9878c7bed70f53884cd50b734ccdf3eb07275f9f5f3f28b12ec42babfe84d888db988fdddd3fbe732d723d30acbbdbbd970f605e3e209982c5911793a5d79229a92f2dc42348346e8dfd5afb854058777a767a964aa7b355b00496d4184d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4da931524daf265a5261bc9640498191222305460a4c2a0c97a452f44dee52bc5d7c8e8dd65d626e459ff706cc333ba7bd372d6e96067b498c2e8c4c4bdf41e6b773aa874ec615c5ab07a497121568a7d412a925524ba4bca4bc748acb93170f499e5f3b4079eda043aa4a8a4baa072f265b669720b524b5842887266ec0050a5e567c21c4bca185baaeb3b606897f9dcb8779e67a0455cc63a4214ccf9c35a1b33ea79c73decc7bbb6ed632a4941868d087ff5e5ae566b55a3186e2219dfabdb4a9ad3de96ca50ef503c3e2cf19b4d2aa4395d64ad408dd5dad68a573529e2c5740bbbb99b15bb1696bb593ca6fd2d9524ed952baaeb34e512aac6a6aedac656614c6485aa99c93ceba444a796fbdaa132a85063becf6cecc386cbb71521a3ba5225a69cf3c6231ccf6c0543228131aece6bc97bb5c6d3da3844631a0c12e9c7f6fb575525ae984c16446add01d979873ce792f4a030dfa703ba5d5da7ae3663dfa9c35ced9f40b2786d16aeba4b4cea4465520c3b42ccbb0ad41332616294575a041cddbdbe7adb5c6f73ae954723eaa67dfbc5da582b69414a5c2a4d3b5cbf598b5b677d6da681dc3acb591cae8734e9e74f67063b17e91527a86021bec1a9c7332563d9e714e1aa5bc9366c90109cea1c98a09e93463440169b06b90483af550a8b919b7f95d798f9e5f49c2fcf32bc92b49d1f34b0723bf7a7e25617aadb79694ce3985e49413c592fb9b52b49ef5669b4cc71c917841a2458cb1250d923927ad3588b0d65e8c86892ccb326dcbaae0384ee654b3e8baae43cdcc68914aa5522a1a2f1334d1d0d0d0d458cd186a361b366cd8a8b141c97063bbe17adcdcdc703ef1061714c77cf4d899e397095c1f1f7b7ee1a004c716bd170e40d000226987213a28799d9410816118d6052113a58b112b66e8f2820d6800a364c8bdd7060d4444dc108549982e6614399a33f040050f5ee4b09920070f527840ca21093cc0f30bc9099ee6f9854409142da41f6d7afa9f7a3dfd92461b1fcfa5d07de4e8779144e0a1230a114410a177248fb4020a2caa7045d1428a56fb8a79889228e1c00a0e2b50a205575aedce3c444c9cf8e00c2c456028c249ab1d649e08d04003248ee0e0062d28a3a565f28efaecd45e0c673a83d235ef8641e999b76215830c4ac9dcefe337ab57f5d27757caa0310e0f06a0ba549c892d29879bd6cdf5e0b27f017b00ebf4365fab1b23c0008cf3dc391c004e00e6ec21f08e8bea542a2fa1049b99148f6d2b810125a46cac8d4d1b913b33dfe6a184fa4f3c5cc2c965be70e8675c47efe8a8e1218bc643d06b3c9cbce3864ba7bce3c6a5d798001b975f08648497cef234e9e948d2491f11740c619df61b2f12619d761b2f16890568aff16cfc587d2158e3a3f9c255d33a039516d5962512581084120aca48c28915b4dae316e651804b8c2a9088b2640a16ad761e0ce89d948c534fa87f4b99a0e36f54e745979292d20f15bce8a4a7c43aed29283a576c2496528c91ca0c5c48b1620bd7122f584c1254aeb88e2881d214feb203122bb8018a962e3eb01524a8708939820692db9c7a6d846a1e338334c8e63ee66f2e157e44252c514b548a51461ebd438b8441460f5e988871a28928071ca078a10b9752d1510a3734717112440e8428630137602106941e6e208613ada206a3d31a9d8c332ab9240fb78c7c885561fb52caccc3bceb49d6913a92728ef41b1e68bc94aefa710a0d462b1189c6972e9deba8b42d1685350b152a120000001000d314000020140a8744029150281826daaefb14000d9094406a4e974743490cc3300a62083286114000310a1040081933345403445a04f33c0c1ee287358498db2ef5793266d3f48fa5cee9e013a9bac27d0d0b27c3107243f447589745d5020edbcb65b57673fa4323511c0c1e8bbd32ebfa2a2936a9f5f23998f9be5dc9ca9df374cf84d1b15702c5aa42b39955f83fe5fc443eac36533b3937676d52dd1f234118c032182a387c96eb0427ada3f169671f24cf85f3718d7f2f84da7740f5c3f9b196202a8fa47178a41308468360cbf00a613fd89c6e14de10d6959b8a80af0680116b508f00f96047b184f075540a9cf9dc7fe6210577ae874d160a75b7275b01ba365568cbcca1876eacfe7cd1ec4ddd422351521f4af412254d1678a12432448b45d9eed4dcca491932e9979906ca3c3c8b3118e60e0d70fccffa8355f61b13b09f9d12d1d424f4d15ffb0cf6add121df60f23719cafea3e22765f623c9f627f7540179cef6022e913b9cca2280110342cb48ae7728abb97b5d9291c8a7139eac6174570a6e5577151e83f7259d9c74acd3f2662d0b9572b4754906dd0ecf87c22e50708d0de20f932fe63b2bfb84eb8c3aee4390ec9e40696aaee828b075250341bd65f47dee5d51967f4f6b48584a362bcc47ea6b5c9657523f5012984bccf0ad608c910f70cdb7722ec7bae0e10b20a3a609c9a3a1458c37c6941656b383496567517927a35a5c8f02291523fc28f87889c40ff67ce7f7e2a557d5b59877ed608781e761ade641da164b39fb8944874d7b90b911625367504a860e4fa21d526ec88dd745b815644852e620bc50aa94e0532e3f1f2cf9657e1f1807271f96ae701c84d8360e277e489edaedfe1197572f6fd1ca3023b89e953b5ee7de79590d56eebb0e9acae82df5e1a47acdbd0095d49d2be1900266280eb50b81f3071ee4819303fa67557dfbeb2b07d83c296e5c519b54bbb6f0b6bde88998ac284f68f5511fdd0f9dc01eca71844958741f72948967a42f0ed97e2d905dbe4596311427dca822744f6f67ee4430175330d6851c8d3a772c297a0507ee58c6963bb5a4d31b745b032a603253a2d7f6a8943326ed47eb78b7badca915109f8c96612ee8f9ccbfdc364a6e7cc4317dcbeff9f9607e427ab067250d391689fcde257094ed789a0848212113b8134811e242ad4d591eaec96d3371f909cad517d568e2425f0ad1a00794697fa0fb9adcab668feaedc2014406f0f9ea9aff94e750268792ca1ac5ea3332f2e5e7d4b32f48b4a16aa2844359f41b31b788eac63ef8c99e3700cd91215251f415d058f319f1b0e362499f7c9666b584cc1972a61ddc070f2c3bbfc7f56f27bf80b9c2bb8b3ae17a229097f9d2f3b42677415913967eaabf941e6e1e69146ef3f8e6b48d42e1db60c56ce98a8e51738b6aa0214dcda2852b1e1aaf84e6e7fd695df16e1b67f63df89367d6971dcd36e6075eb0f0401a3a267a6da4c24dfe06f99ffe84ef0dba5323b9e64e128e4f64b7953f82c3d40f0e7f09ce32f9e345299ee45920a4b81c396321830bba951d9cef80e6c1dcdac2c47697151827de0a8227608b4141fed5f1c230a165fc2c7663fe0c872e02b1829dbb19fec7018be77a1271abc058b2fb89296da1dca0601fbf63a80c0bf3b6ba526dd72a3134e0d9a7197ea83163275e75ae4bc6ac5f4bedb8671fe15268d6a1df12fb1786246c3fec86ae32e1f9ec46606379872de85fc60f1ffe22b9978b084df804626994d97af79d594184b52ede078b61f77fa81f122e797f8d750721b9915f064955eecc6d588a7abd7442df869281d4581dc1013c2f07f0fdb375001903b99e9fa66cb152f952f17a2f0f4c6758ffb3436610749e17c131a0084a73d9904ceb157a975951c49adaa4c322426d2fdc7d8bf043766b4f21a30a68d8a82181eca87f97bd0c8429e7eae0e8c496388c85ab67ac72a825533f4f38319ad2eec8c7754d1338a209a3d2e0606120068da55e635b96004dd889536ba296ed19ccf73474f7cf8313b6a5dbf8313805fd95ff82d830abede56ea079b44ab7bce7ca5458d8077a65102a999712924de101a41668c95809c1c8c63421d8aed98533e305619f413fdafd71abafcfa840b19c417a67d61db44944c266e220e8e0c8c4301d8349ae0175b6eeca9961e74882bf060f55d79a7a55e904a3381bc4906d1a232315f5e27e1825b77d596f039d8430c21a9713cb0f7c2256f612304182b1e45796580a40feb9a00317f69924dd79ffe852a06bfd77d3ff3368c5a012645c1db990ba0ffb222950e506d50f6c9539116ee5a379cd1420a42ed0fd34886dafcbf0dec0750bb003ef4b568fe4b57a1c40316a8e1366ac36af990f8c55f38555ac741b5c5664f594ca22c2519b7afaf6f21e2eaf28f8e513e656618e8ba4fbc3508ceaa84348e5b993f1b10fc2fa65d53f255cc999b5228c682cc25fa243023d8cdeeaf5d068512f9a9b61882245fd45a42fd7f001dc188c880fbfe40b7417001ef12d9f78f2e7824aee5940f199bbfc5cd6f3d4e6017954ae5f4e1d7b40e71ed484c4652b0d3f289b504879d46ca3808b7fe02998e0b50cc2fd06c33f86261ea440b809ce81012d49e2d0d6ecd86cb142d0c4d49659847d8e0db7c2238f949031bb78a316880471c94679dfb260b3a36400ce0d36dec029be9855118bd1de8c2f221ebf979b201242e20b7ff38f4a5af132849863008bbb78473c367b8608eaa0adb0c96d750331219faacb228b69f46dbe17b410c481fe17622dce82761acd2ef213af428036dce4db4411da64b416002695527107760708918df6e0443b543ed05470f8a97dd5d2c79abf5cb9a41458ae386359f210185e4d1af50b10bf286910b554665d2a66783abd025ce6dd0afeb3f74110416685f5f55b5779434d12e89154d17562b7588f8d42745430b0cb62b0cb3c47428f43e52342bb81aa49de95f49fe495e19093954238233d265d66d126107ecdbe47e00621e4ed42ffd7f783fa411b228aa1ac177d1ecc046f4a73275fc5d76240e8c0f608bcd113ed39afd204ddd72b23790c0caec9417a4907d3b1c141bf0e5ef5a87182115408910324bbac99eae7ea4f974c3d553acd43b4f8188c24d75a1af1546fd6a9b2fccaa39171046ee309a2e2aa8c0125328af4ce47afa4c9271dc0912b30b36c8542464e54b691b3cfdac81b40c6d3f4512223d38d00ce50a11d53718c44463c3252e7fdfc58289151e72f9d1b75feecc751195dc1d7f70c293242f39f283d22dc6ec459d939f76d328b3f689fe10e00278b8cb48ec9d79091be9fc1d48945a669e8c2659acb0a276503402f11cb6eb4b1992b32c2fd0538e68539fcac308cdbabc1a4bfd862158dde0518dbf2e32881d163795ef18b9eeef32aea3f07deded25a707913af8a19d1b7183d9672d8c02aab4b9962a7c34cc1f4af3445ab8a541a1942a0bdd36f8e8cb4ed6a26585085457a373b9c0e0858a48d9d93c324ce7d85ce87caf295bb6de3b47b14534f4e133a99ea3b69449a73d4e1622edccb24bc4c10aed4bca2bcc5e76275456a6f51f7d31b3a705b29595ec027fe0e57d935fec3af748deff1283d0deef895b9467bb0e1fe95ffc63bba4aa7e1399cf2dff80eaf926bfc475ed91ad68361930efa0dbd57b9fc8468efdcddef5ee9d16959b12158b959482fcddeb6c62533c96a776ba527f8901c07b76fd7a076f3c5e9622f1d4773926f5a0655665c9c4b28a5316ad78813af5b6f653341bad923d799d97aafe1cac180e132d9983fdb507191b0be66e6c72ad9e5d038d0278f8336ea1aa2deebea1affe067e235fccc999f1d3ad38e755e641d710a234d5c9c9dd477cb774e2f12b5b046ab78dc6f4bdd3686c39e4ca54f00bb2c133471d349ef7f65a3a7d084eef38fa79b57826803545b577ab1d5cd4313876e859b300deec7a48968c638da5494631c6f3edab80e9811657c874c8c32b6c366d1ac318fc366a3e440bbcb0c329406e9ebdc85f8611f66cca339862366511ecf41b3a8c7edc06414e371643eba311d01266ff4b11df83a3d44180877d9a0296c11f13869f13b07033f18fc647ed4e31c35138d318e9b8be23887cd4719a70326a28cdfb136fba28de110d3e9234e40784b263ed0c3b774b8a50be1484ce503537adfdbd64c705789447d5f3690158475a4f7ee87e2d802750ab8283581551b00ab86cc90abc20d1da340ca9957de6922fd9424efc9c6d5111b05ed59b69d678687b5e4de6d2d05dcd80bbfc1d5c48daa4affab797e5ab40df4804b1ca463ae9dfc63313c241c7dbc8d854a4eca23e01f47d127e7f7b65296a5416fda9885ce48d114f27ad026efb91f2c966c01f28737386b2f46b6cd9b5aea7454df5e5667119751ddea298583388f0dacad8b5acb5617864767bd9a7b2839dabdedf1fcbf571c5d93cca58823df18503499f90abea8a41d1be00cdd5060aaec07e5aff3b29b8753a1d5161b363b0878fb23a96b1f5ab3e12200cd09258de88faafefa07a1dc8da5274bd7de4110f7c30a51d2fb2c3809d791f9e2102ed408fb15689fb4997ff7088ae7ebc84215447c809b06f4ffb6c2f2cfc8c2f5552233e41bff26961d79b5c198b8fcd8497df459caaba1718ba04d8ff91aafa0d2aa989250b5e06946f6a31d7928241e5ecc089371372bdf7b02e7f32a58fa5486f0200000ad839c6ff834e5142b18cc22838d314c43b87b6de9a1e5e40ba1095793251e511e481905420ceae168631e63ec373bcdb77eb32101c0b00a83bafe57b28847ae0fb0db1ecd66b697b00d1ca9352d40dce5be33679f86ba977219b2eda62119463e564acd16cf14624fe3f2bd26974d84a5187d1d4fc8d06f08f8e27f48beae5388b2a7020e7b6556fef95e051b5933b149a0d546b3201c7681323be81316578f740261bd117978f35945f2e6f25aa8281531027ec8055b08f228dc6c5b38011393f3985e8cf0bd07ed155f22861301e8a7cd67e92cced9a8b08027b5edb3a63b456b1ccf116bbb2ab9206a96f62715c99ef28c867972f0e2cd1a01ea87dac4f69b95a4e6a2b57c027b0c9416fc6d7e2a4e584688aacee56781572438cbb441345628dc6e99b860fcb559f76409ca6bbc82968e67684db412b4341950b2a8e6f6b59501be182e72508635d73b2e28272e5a1f152b798383e11e4934de179933304c2f2d3b2659d001db58795039545785560496bbd01935842435ae57d9b971699d765a0484aec18a05c0f27ba9893a0c14c1d7f310cee030a118d0419d6ba9635739532d071febe662c2b50acb63b832c73a6e1506f12175fdbda28a96bd24e048732a9425b2123213382dfb501a9467e90689b6a2f70c82a9b85af1665df16e093c42ff51780c7ff757b017e7be0cf9973a806058bd09906a7ffba130816755a42f0fdd48150de93b36ca4041c04e54d65894183b52a9534aa4848e5e0614632f713c5f883a7ccb79657fd999297b1d42a38d179c123274dfcc9d13bbcc26db9831ededeaeb0c97c1bc09547945cb4146e5f9d60d6b983dfc8a7a9ad9c6debcdaead240f212f1984b53aaba6a7c6c1624b0d61f416ee44c0bc1e5db488ef60b4f53b900bcda9c82ce66d14891b676e43539f3a95ad70442fb1cff014d3c053c1667bb4008893c1043ffea4b03c3a4ebdcb1ae7f75b397b8bf867aac36c7cae813290a1e173f8a3bf7ffe3fc69f32bd1f1e0efc25a7bad9601a2c5ce53a457c2f79d3534c04d46cf4cd16bbc2b95d7368f5a7c11b6fbcf597a7f6e95055fd015d2a2a1c68e25e4a060795d9d2b3b993b28ee56b8be2188d78a2ac9dd8d54f4dc247a206fcddc6910bedbbd8665ea8d069516b0dfaa32e7ccaa0a0c17add8fedb38c31e5574715a2f3e5cd2832d355f7dae50d0a6fe9814f78248880b009502a99616a1c8c475a65d2b0f6ad1a0d3684fe5e0c5fb6441a5dda5c9b6346b44ed25b03de58c507f3956fb02ac241155413b78d0d3c0f54137643909510739be38a962f926084b0b01522aa35781a83e84f70f89677f2a26653a05c00575b437a875cf311d5514b00831e52ca8b7a7e598505f631f34c333338edecfebe6f041b98f69675900d45619e0269b59af076d2a3485ba4d461817d6f5c716868e49cc51e661222913bbcd2713f7763b5bcb35d7713bdc2646db90ab285cb49d58e5aeed345a6d8d59740439f44e12000be562fb0c51ea16103864b0a179417b7f7949ec7463f5640d5f4d5a46f81ae314a49b6bca2c31a354c42a3e1ec1eb8f1cc149064196c97426826f3047122386c8ebaaf8b2abbb9b236778e818dcb6d79cf5b3bd158e1e80ac7369c2acde02121e66d889bb7be48cd678ae8a74ecb95dcde35c1d79b8e9ccb35432b2ad91f07045573467ad7f6bd0936b64fca298f3e91b703e5074a8a992de7836cc6c9235a40107482430ad9c30719c7183867657827090ef041e2290862dabdd63d44248c50906dd67e1bd2bb2d5e25002ba742e268f4a900e0314357c40cb8913b571381fc5b3df696328c142a131ab8fa45a94a2e06a93bfb62a1c31714dee7f2c30031f1c889ad167f9aa77eacfb7303b641c1e57a1b65c02082c4a41ebbb02fb1b240d33cf4ecf9330ccb8609023314d789ac024100b06a85f524e074c7af2f84c1f6644a613ac59192b111fdd3ab27e6d468222ebb88ead33754e9dd5e975acebc83501d4790510c5ef5ecbc5c01dd8b081f87cd3730146bf76f8f94e478e2adc22ef43e823213a6cd307b97ca8f27336ec688c09898f59855d9d53167d7118ea7c356d6029f395455f767ed343c61f94a6751815244a56e945ca08a5d606478d8a00b81aa6d8c01226057b19ecd7e0381b2bb80b57855f16fe79bb445f0a5ec050662b53e1522b30cc8a75253683a8b40251212240641f46b50d8d2a2e7000be64e3df4a5cece9df2c6f5ed1b40f9741e9bf0763af845c6ea142b26f64d8ea85e596c55eab7d66cab97be7dc3cbb9044ecef97191a11df0f2ca08995148745ca9c4385b8e2dbca9bde60119695daccdc1246f7ffd5aaf27a24c2be76b791b52584e1934470149f30010f09fe0e00f453d288ef327b26c0a7e5f1c857efb4d94d776ebad3987702f822e07398285ffb5b781eef65b84f86675a0e42849e41dc86999d9925d2c5cda8d1eda336981159b1b8b8a179da2ece6a9f1290f50b49cb1173c955f33d11e91d0e3e28943b1f0f42cbd0a592abe87773e72133df574f8619a1c89cb34c779061c2b6d396951063a58faeaf4a0ddd84a8ef1e978953dddae162470416cd81456431b6131d1f41d866438bb57143570ce9d9d83f1a1d729fb8e56549f97a99eadfce35ee8c17d2d3419383a9119c8326a8e204dc65d642db2842ffd02244b8b651cf1ef7c042fe1416213ede84a7d3fd58a34257993e65fb05058238c16edd69530a56721f77f3385c749645f91037c1d51ea4cbd0c27da745e815f760621c79649dcdc05437ab246bc12ff154389144bd8707ade87311ed09bbbc98955fcfad7cd0c43e20062024b9416e6f0acb64c7f670616056da7181d022198e4841bd8a07c8f1b13fe5e9b3089902f3873d5e10b410d4efe537cc701fbca11cf5a42d552862bbb01d4cb4ff8a473efc4f37f20348616f062f427ea5e44ca8f813652e178efe9c73014bdebb7a8b22c2a1af23cf21a252d170673f7cb2a2037c509eae537495cec997b8c7edd2d16956a2210fa6c7e9eacfd3ac9f70ffc8c282c0d2c645705bcea406be3072d4e8a7752f1d74e141ee3ab1d41333ef42d2f7c1625d1dd6041dee00d1b7aea1224820e3b32325f33028ccac4b2ee4e91a8dcd78c8763ef2de4d7731917c87272cd6e2868e0bc4c90d8fc3dd01d8143f2caa5438fa8242eff2054a7cb51648065ead0bb497add9b95885c15c4d1ecdd954957c85e861cba57e7dfdd914f1f03c507c39344f0215618a639dc9b663e7e638c5366fceef2bddf74278eeb92ba3c30eecc8afa3d8ee09cb4bc4c4968fafb5654e342be5b0e62f69bab429513efe5413fe7681cb32827767490d6e1bb4946aca02eda3b0efbbc2aa62020b877e322065295ee049574d59b71f01b0e4d8e4ff1c58b8ef4ecaf3a137d5c2aeaac69079bff7181be9d4a3b10aa9e9e5c245092e995296b0770f08b8f08a52f949ed155e8f3b876f5e8457e1de9614c2a066df1fa1ef96f2dd49730394081a97d128ab493469c6c6cd68f95df87944341cd1e17046509f2eb90d3761085314a873d64498b8dc3c3eba1fa51b6ad62b1c6315ce93f0d2f9c1d8f6160bbc6801066ed765a7045f4a33ae9a04ae223c9778396d85d39aa8fc8f3b6c51a84a1173a8c5abeb7a376862b07b54083d38c12097276a0ba738ab799b4076e553b0490cf160b291abe0af05ce83150c00a49c66662956110b6a575e14e51ee5952ecacbca28ef5acf2445e1ae49191e99b17c9639b26abeb59be0b9cc1d79fe50bd657dfa19807bd6ffa6e98e199ff7a6e23feda38ba925388da01aedd6000de4b65ea5db78ad7e3b27fa438baedbd98c7ccc1863aa30369a4c9f14b736d474e9f80a6c45d3e88b85abb0eaa0bceb94760f6fa04a6b064644cf855e6577862529673829b93032b55c5c65e25977f71f11d3f87655398266a44134e89f486061d4e6b408e15a97bab1c77209d0323f04d9c9d711ba1d28008d7804f88ef081cc5c5841292bc88ddf8a6d897de82a55f938b898e4a515b42f7970f13ff260b8e539a54ecfa624ea4a8c2ec1534ec00cfbd09c723c60ab8de78e3f2d0e39317957190f8de478e0b6d2a739bee858f6f55d65300ce598db0f2b541114ff57c6bb4a61d4007d7bac70f678900b2ef119535c1592b810df74551fe4aa2e22b302ca22d3b5c7c64d17fb97a317faa0ab0e3587582cc04aa945e7a3a906a9243ab844fe42ffb889d037c34e5f497a385d6e4461b9afaae8bf03625d946b4e8aa4f1c1736b5cd6de193aa37a06ae7e4f5c934186d6bcd21895c6bd114294a04c6bf2d0b64b52f237c668171c86b859cdc1207f557231b2e8f24c3710b2e2ca28253c1e8643532fe22b5a64ac7671d4384b199835371df124603c321bb9a00ad91e2655a627c5ba5fd48a7f87b7b1eee12865829ee8d0cfcb94932cb5cbc4d820242f05034aa281295ae89aa6174c96c4869bc8391001f4e9028a212ca2fd440d2574283f81a06cda854a3fd6a45863fabb0e70a4e8f63828c38ad9b8391e11c1ad01ea23819041664b882e1f51e8dcf8a4afeaf531dae637ab75356e4ceaa6c705292331f106ebd5b853c966640283025b39ce808ae5734d9d29b03e95195b82d591f7d515650ebb0e1f82b9a37bd681f5caf8bc50627ae17858bea5673caea7b7ff0213cb2203bef568916c4145fca543c8bbb4bff756573a99c92e6eed047862fcca742863e201aefd0b71e9d5ebdd50e590cacc536246d78c0dd10aa343682cd0bf630f3a1f52b861fe5243fde480513a625ff32478c1f34864c019f44134aec444af7aa6dabcf0a3a41b008f34c2ca79c383309258b8603892617381581a39dc012f028f83b0fd003bdec556b302924ee6ce0e0c4912a56da6d3151d270331e81a19de5fd1fd241383afa15c8b6ccfd3a979bc21021ad84d44aaa5e43d345e8bd8c51fd861a8b8cfb955cd8019eff9ecd5cbde8d28f2432054903e8a2dc7d3a20062e60bd31c6ce93da7dac27c1d4e8235d6dd2a650937b43d312b0a064b87d4e5809f4a6a235575890e0b8530908a0fbd9616a3ce558a20c3fa9bdc3ac38784b95a8377b7fcc0b1501d5715f08834af2f4177aef75a8a7a6e9d4e999475f9ed3e18fc345f4b43d0d923da3359dee309687d59eab6faafa54ccf82dc6e575789cd6e035baadb1b42f55fdf60ec426d574a6b9691310f096ce92c87d966323807033c1ccbd677a9d491009243c988281a73ba548c9609d22c65424c45435bff0d989f540841916cda246460d202380a1919436e0da079604bf3a67c82e982ae8668387d94ade5d82c440f864644ee3f06b6946999f1f830a85f4b0d8d456e8e8519483dca40d458daf467afa592b9854ecaa52c0db85ceb342894d29827665033a127c96e1070b6d56b69a6e222f2fcc36bdcfe5f7a2d0d026e21fca342efa2596b412a4818ee16bd0a67c250bbcdc485a9d7d249352b2fdb8c4307c090bda4a12bfd58d10793ae9089907a2db5bafe542c5a238b5e4b8b57284b557d3b46e61e6122c3d8f9d72ce56a50522cfb72eb31298e8be94cdd9f1c6811b102582438f2fda8adc7627a887a2d95b63046462401a9b3472b0b33839eda0a8e20596741a71ebe0e1ac1fac2d5ad60cc709d39ae031341043210860932362768b05bb263280cc7b5b4bc350f5d690f8ac2b2bad43431c9f4985f83ebaf95aea38e042628a9e23bc56b69919b90b36a192dcc5cc4b72cf26f44591a734507afb999696c1611801988be336e15ca8c277bc89ced923ef844e874c34491e1156c62774bcab6c6cf1be9e2098cfe13381776fa438647c44aa70452d48b8289d7d2d29f0c210834eb5ab92fadd2decb575ab9416e6cc825a58b326a24d987d1336e7a63ab561f7d391af95b458348f078d23c6f75994f02afa592bcc21639bbd6d7502caabb62e81181df05e8c76b8c406ea9e56aed7758428b9071d52499569c702970c4b6bfdc1ade2d2d351848f93a06b0171ef263f844249f26df0129d24623589473ec006bfb02122e1d20b7d848d31cfb89bf8d4d7f507fb7b4990f90847d65e9146fc273e0b6cd9781d02d358aa9c0a1a81dce9216f25a7ba582b390079332d1a619c510734b998d3b915fe6625e83b5b6e35ba61d07ad6d496de92b75ffb8d96f10ab7766e596cefd76fbe0b7a52f785dfc39ae097c2cdc36863752e596facc62c38c3b7652bbd9109afbec6294cd17bad27e30df7dd9087d08bd2809766a9781c985431144c3beaae0ecfd899558d04964284eebed33696705aa8713545453ca70875937f29c986dfa2be368165060ddfc17f6462ddda3bcf877f1b72f5a899642f7fbe1cf5ebb61be39852e2d5b0763e68193ee211db7b0923c695736c1bd76c765062d5b7471dfe1cfba40a3244a223a98e721812c5d63c6c4f0b51b3dec2ce286f972517267338c1f008916936fb9a114beafc4a764ce4187f19b741573feabab72defcf8bd89e0546fe8f244be76b9f14bd67ab6e80277edae8e471d49f2b51b5a91703efca7f59c4d1ad71661a98e0f68e9e91640f5b5eb0d4f70fc2763e9c14ff13bed361059f9f0b9555d859066488a53a6bedaf832abbd80844ec85ac546dcab7edb7c56ad7cccba354f43c581be29edab0d5985a1bc578bc0237d821845945c63d39ce3dc69a52e280b13b213bc5651607a7cb12f7a32b53c56a5bd8eb00729893b2355982193e611345e6c8fc79dd804e4501fd62629099ed8416b5d4145aea1a6cae02c4c7bf10dbb1a26c7fe3535b94dd3eaef880e85710d0ad18977298844710ad23a1349dc3a2d3dc8713bc065f2a7e6e8652e8e172d7bc05342f6ec5e7cd90e459325f38878db787b5b60097be028983bae5b668db448b5071198cb42617b1e2118160eaeedea2378bbe6c1664a672b4ffdfedfd992a5bdc39be69242157af1598fbe35ebc74bdef2cf3d749c636240cb641500480af28496052ff4b1172f86897ef25f580c86a3fa9a581fb5219ae640464c30e7e32a65eb0b266c723c2289c3afddca4630119761b941e5f4a7ab28e26b21a95843e010c251556bb7fff0f0258de703b56d12d3356b1ef4993fa709ab86edec48b9bcc5d4d057054c2327e6bc03514929e582116002356069ac3ec2baa620b38d60ab49f6dccfb04a94e8174d481cdaff0d5b900c199462d9dba5468567f23907f7b7d90980e659616c3e7110aa2e13ccb9224080bac0cda9ec6dd1a630cff397451e5cf17748f2ea16d8e93e4cf839bf015b5d504f3b57e3785e0fb1bbf026951511a0c6d373d14dc022c36f3fdb96c8bce069210b12ef3572392e6f305872830f4fce3c06f1d8e2de288f12ac85477616158c4e7d8cc875f7d99674de1ae1c6883e28207431b9577824cad219d27866e8ee06aada1114bd4ad599ec811730a494370c2f18187e4a1fb0a684a59aa2ae7e871333a6ff64f5db8142116dad6e9d7b0be7e761b6054d6938424bd110befee6743909b9d301a14e4982b2d299ac459679a77569f5c64c0f5f23e935398907b966c34589248cc1c4b68db744ca0c683da1b585fc8648507abc7e07e790a70f0f54d986f0c89dbdbd74d4dbeb9260ef7b9e649f26d51fa8343f0af2c2d79a57e2f18327a7ea02438ec04ddf3de23ec7b76393097aeeded9bde3c468cb1a74ba848e97514248481eb2d3a89136847abdb47246787202ce89bb36360167353b42bda449debd3e2a02d10d61a7f55f56898e2641567cf5581efe94fee0bbaff7332ea39a81cdcd4210159fc55d57f8daaae082bb3ca6a7c2bb7c2fc561a0bc08905371c10fc0a430ad3f3f2497a29ef9f4d7f1e835ad9ff31650019241f29b9cb7fe905654833828a12863554c6c2cefe931dd02ab84984572a08e010af963f6c2dd5c4d49603cda4036b3fb1d40d6291183a5991e61285b93ffc18c5cc18e83abeb7c3d12cb103ee50c4b22b23ae0c833ffb2a3d3ce0764163db187164575d4c90a675ad1d31b2e6e2643e87179bedd927a74171c32be03fb437338bd801048e9da72f5af318b52279e94928413f97ddaced1089825cc552de32e34409ae5fba6020d1e88769596febdb1aec2a686e7553ac1aa42d22e6f3c6c7e7618424fd0f4353ab9191d878a274c2763d6d121870ca81bb64cd877ce656fa778b6a0044dce5c9a507a19d217ed706d99e25f51ca25260c659942f01c0d2866adfa9e99b275a70229204292c62dd532b483b644d0dd8c5f1804246cdcbe99980870f97afaa32815b7b0a4fbb0948a048d59f35fdf2a3db0e97cf1ba3c5ad23ea4c8418521bb9da5c3a612c4544e6cd2c47373df9e5b10dcc44987fdc8709c25e789132af86f8ff93935569088e364e582c7e175f18091591c2ef1557984358e9ed6560523b3c424c42c313b2968116bdc9f82c181dd0eeaa4c0199bc74b4bbabfa9dcdf01b8340b9d023926e64dd68569611732a5155561cd73223debbbae11855846c48855fde0d0863224c71c9f4e18694371d485523233a717b3957ac2d52bd11b2823f026b023c7893628cb716b0fc4f20d11adf14c8c1aab80c9c066731ffb8e22a61da26d105e4bc1a73add08d7233e7812d94632946939a321510b1cd19ba45b570df10f41dfc0f0904211fed88f1bb08514a2c4a1b57821f78307e08262753c74bccf67e934c076e593fd001600931aef5127cb60beb42bcbef9e36035ac2553691e54e44c7668427c996a4d68a2296440825dd052ae9214579c6906c774b86bad5d3eda908ac4443080f013ed0efebe7d0f20f54681b6e52153cc7692b28db82fb38d4e8b168b90aa10274668274a3e4c9cf59a91f20f891111ada7c318bbfa86feeb7ffaa5db2b0dbfd328c3d453f92a63715ce6a03dc0a2c6e4fa366e1428298a75b0046b35117d6a73d59b95b1e9a6463eabe9150388ad4f16511ee80846461ae56d58a1dd9ba333cd7e5204c7637bc02eb81d86e5292af50472b13cd10e0bcc3b87ee3cf9f8f2884d9ca98603dde60c278573507462a23a862aa26ac798f6d9e27d84026ad1ac73196fdbe0a66a3a48ea2c23b40b306053da06b438a795b2e22b13d111ea2b0a75e17f9d8994e62d3358f1adf9317da0a9a2830d85aaa52fa737b771b77c95efe3cc827d0c9711e3f3bff9bc584fcffcc5e5a14fe58a8b6a27fbe07911bfe23d8875fceacd768ae3ae8cfcef0c9a6427dc0c1bacc2810dfe2d954b45f4cf070cb38d301e0cfa917edcf96c33e8af1aa9e60261a5f5513fcb51cd73a7290557daeacb93129a83ea1c1c176b49c2dcce70dc28bd6eab1b06ef86b5cdd7d21a9105dbe59aefcbd505fbfb9a64c38ad75cbee79fb302ef4af528168d8a056d1c8e55294bf376af7781f1111f7db507ac3a284e0aaa2639e54e3e2bd9a28f4b680ef4ce101a7bf4d876fd6a3b4ff5f047ce7f2c40b7d7714d75c62de0ecc84f21b1deaf8795cb6963b34738c8007887a4ce1828e920bb6b28b885083261f6cf38901fa3514d4294a8de561fb88b21605a1ae047f046504fa5c9f4956a98e9e4179399dea9170b3b7a6c9ae6faa0eb4f998a7dc4c4386a06213141f5b6252be7f0e401b0563039a79c3d6d42bf6cbd334366771665bcf28e6abc051c873243d283d900eb3da8d243d0d285cc220af3eabc465e415b295542745fdcd42b7113cb4c936e2359061ca2e813815d33a04502792ab953e0962daeb32cc3ee6814498aff7b5af7686ff4f3b1a3bc1386daa1b05408597f22a2c0a59c0da0b20cf1456ba32eb7fd850bb64429b8671c19dfdce0b159b0950474e02685eac871d52d60e33d25a7d2cb369587c1b8d147bec2c2b7d6d0e71b45037be9d392df196ccf839e021b3abcdba538efac37574ac56376da4629b5196d44b840e7557bf764b94546cd523fbc0544af4759a7561d8fa651db72c3bd16c59028ca0a5b51b213c696c97eb692e977438259f5cef678e104a09d48cb0a9512e8fe70d26130aa278ffff1906f240b241d6703ad69506441c964d3d63e490fae1aaf418246b5d6764b17e262c563be67588fa57d9f22903056cc6a865af857d228781238b5732647af0635ed133121f710d8b1e1616f1fea05b5ff0112844c18472c262381e6d3661396797ea3f225451fb43f73f76755044bd0180ec40424795c22551bb25b4728b4fc5b176cc20cf341579e4f3153f4cffee1ea18875d76234fa77ee231b20ca8eb8c36bcca8993c5384c72c9ae54f3f83e9d30e3059d8d0f2da08f454217337caec8fa1c0af17b1b3c47e47bd2986b4880332fd4fae05918cca01e12020cac814a069f98fe2e14da14ddfea6be27a282d2bc60671439a12306fd9945fc5a1c31ae4c66049c883bec70a059a42442349cdb4bb406a32d5ec0fe7cbd1d82d8652a85017cee5b0c844dd572bff36eb9b07b04210660524e1ecd90f3d082c8eed4eea446a43ece7e9d024b602f02b689f5a72874ea86f08be1e4a1c85bd662e606559fd059a67942757672b019e518a9157a564b2e9022c68f165229778159249888aa85492e0c651613ca1f4fd4d4e2ec6f48e61e49d8699a21e3aff671e09259785f1689638abe20360f73eb44b4d18831c3298081dee1fcfd80d7309257125dc9c9871bff5c7959ce2d6375346f772429e61f7a7dd7ed8f6f9bf322a9f5e7ab3f67320fcf775429a75af88eb6fdefc3a0e086964d250f770c6505361cc145828dc8e0fc5fec74b8f0859c4b239aafb87e0cef567b8600d7ae36d3ae2f74821f53dfbae5b077120a0af8f74231ef7ef79818a4264297fe8aa8e4fa1822189f2654cd5909041120c3f0b515f6c59cfb856acbdca8e6421c1446c682258d7dd6c70569d82012d604149ca163afbd0582544f3368f25ce6717d3e98a22ef6a52911b64e4c4e65191393914a2bc77c6c2e88e880cf1cd1ceecf5df5d12cfe872aa65fcd8b45d67f33bcf53aea9ff11ed70a6c47fc892bd1fdf370a25ab1666cad6a18d694cc60dd823cb9b37fcc3aaa01301e8f40617e7ab5905b6d0b346442701d64dc254036a1d675768915d0bdbf9a316e89bc063124ba500148623c7f1dc1e7fa31a024444518f2453ec60d3e3718697336de7eef26bdbcd3d18b1dc0d92bd5c72e5e26a790f2641756b7f3ef7c43c3d3eb50475e436ae586e0f0c17e01c349d2e84bbfbcce17fa253f7a3d9f13f87231e3377760473f72ad62a109a4c05a6965950b1857fc1f1c83ab5682ca5d166baf8cf817fcee050ef138974d803462b2f21406df191d06ef7bc3749947f9d3a01bead17444ec79db2951132f0c5cae574d1bf7562fc0ff91fc9f46552714fa8b8530f9d51d03025e9a9112819c65a12992cbf74f5a116684011bd57ce249e6250f13399fcd415d054f65d2346431a0ae7eaf29f91f70ad98e174f77c370d082635ead62ab7188257e43100a73f3761e3fd42a6db23dde509ea58c1cc45014da470da2d0cfd42642ac4cea32e09582e7476589d3c9b1f05ae45b34226b20247ca36c1b3684e1f960d5598fef29cd1e446bbd29e8693313be27f27c7dc851e607ccfe2a83523e2640fc462e8718c46be61a3a0f8eac4d1cf3cac9f1b7d42b20b9dcd69114c16ea75c59e849afdb5f8ac1454e8984b352077f834538ebdd607bad33243dc43627fd56e4b95fef9b0db5012507c70d4cd05c4b0644a4a2989f36c2786bf2e7138ef1d9f4acfd8cd64a5f7c07e0bbba1e3cd2d432db1a7919948e58ac4d02d7f973cb3a1da68bdf339c2822baa3b5542f29b281ef37297f4db23b96bd7f6ca253a28f15af26e302384bfca4039fa89ca0362ea5ab4ed1a082d239a53bca1aa00f8bbc846e07ad0b2223ea04bd492606daa0e0240ac4a45d694f4cff2b98c29b6d5777d49b35f7d8b4248d7533573d2f856077ed7e2af460d0d3f46655d94a4bc8c6e102ff253909429e607c4946d46bf7b2eb1ef718a245b32941e8e94ebaf2d86412c561549ced05ad1a67b47f8799f211515805580d41a384494165e480f052d128f186b930d5c0697d7ac9be852df6098e1fe40d54a8e06b71681d5dd886ed7821f873e609aa2c8d6dc5fee11deac1da18ddefce5d5984d1860fa799985e07a01b7d5d3632c24009863d405ef8b19de4e9214126714f04073f0dab82a5e32d9c084187d16e93db35a6c577e6f1ca96199fa4f209b2dd548e1e7412d2146920937f044ec4e07567aa7f170d3d22382ff2cb0c841bebdf565491e5c3e4421ab5ffd9640d927d10bb14b2a31f8a827f5e29a6a8dbc11381fe26e2651974cd0df383d80b19cb1e922e75cf65dd973476902e6843d9a6766f74ea1f4d0ff67a0a2348c8e10c9f6037d12a087eece0583e9ba7d97d7ec421c97211133364fad0348a38e85054c3ac017f01f4bc7093db2a8828605096473f38d6736e1cf69f781022950f103021495c8e950a97ca7da8bcc93194914006145135a7fbbe28cb2b1c6a0fd5da15899d43113c7d6c641caac053627418fba7954222cfa59f6e87d5edc9b4919c4136c99b8b2c432ccba2a3bf5d626bbbed4d532921763e69659a7171cf8fae2cb30a86458c3eb4fe7651695404e1044dcd55413712cfe80b9d97ab622d5965abee04fa85f99e1ae92af0746ff7b86e2167fafbf18deaadfbc82c41a4211d36c6d079c998b754858cd0d94cdbae933fcae35b5532c2766a5fc14123c0e23cd344c5a28c5f74d683e429cbfe146fca72473a4388da00f95a8a98f74eb5c090f0b6f3b1a4ba2df4f8b8c2c17539957a12bb6be19f80813814b6508515a10a6a00ba0f23644520630541ceeec537f0c2bb2669c598a0f8008cc6aecbcba4d89306cb2a6885e62c75c4d7361f1957ab56c9e8eb042b608b15de00b86a0bfd73050acf7d2e8d23a3be037aee778f5e2ae2a892df36fcd5a41251ef71667ecd336424b48d06fb8f00fa88966c72610813fd84b9c03fff437893241295f87cda2e2803cbd215b29fd23bcd54e3ff86b6a012a5998524bcf9673fabd7a5aae3df6ed660978fca7543b86e35570a1211b938722d17f31f161e344f7be2b522f6c6620ff61e111323fe61d13dee240329e9f7b7576ed01a560086d416ec6f5cc404ce3768d021a1458370405d6d7ff70c13c3d60ba41f21a17de241905acd18b5d28e63fadd37509c18b8361e0fc971be6ed51ee4de2a6adb2a2afacaa43e32933443c6928a24f76eac7fa547232c6828ad01ca8e80e4dfc675085d223c48a0ba7199ff69bdec89f5ad0e734fa032d2b8a4dc63ae16a07add9acf81beda718f5de5487aa84ccde4e300809a0d1f502179566e114c13fdec26cd4eed858387b87b4ad1901382d15db4d30314effa6c63459c8d016314ba4c9ffcdd26cb806415e5efefd32463e7c4d56d0acbe6170f72789e5acbedb8f6d4561fde20f7bb5120225eb4b2ac98d1ba22e7a90dad3d3d012b4daa3699a55bda8db8fddf45e7d4a584bbc111713090f8e830636c6e6007df4c9828cadd93ca2848c9240ae6709518c48bd65148e0e21c654bf6d6751cf23241306ba2283aae3099e9415991affdabf67b1e4bd88495dec3cbc3eb13fd6f2e242ecc56f4e62048bec880174b23040e8e7b52141424f8cb88d5d1f91890c61dbfc4f8d69d9208fbe662b36b0db2dda30a232f2e805c2fd1feba65183998d5b69910e7db7885b7c9de13b9f91f4e3a33b8be723a2d58e18cdc11a54ee506fd83a6c76e1f497e743972d0d78c466c909ee15decb55e24dd4f9d6ca77830885ef1535f79e58d1cfc4e5440338e1fb18c03cdbc24718aee180b2290b545a5b7cedd025f79b955738833f12a7a4a9b7dbbf0996fcb51a0072002eab143f4ba79d44c797c4284ad984e5da2828c9747a94b8d9fc8ee3e5f07f4fc5293bd3d97d39bdc4d71f1708897a389887d5f4f8cc966c60110f3be08b06774fc82b8369bfc9ed7d9a4c20fa5a76290480608137554c86f431f5d4c710df1ee11786d1548451a1d97af93370f81c654be5a84b7c1e085404c91069f03068cd4df29920becf0654c8be5f06ce91337a2b03bf730032d78d6d11c00f93824d5f44de8e2eac15a5ebe40dce76903bb7913071d7ee514f80787e23aa4813d738a1b724079502a8f57339b86febc1ebb29565783951a3f898268e0e1fc098338b924b1ae91dd58cdb9dd24140a0494132a3e0518037ad2631542809e9141cc151dc7e9989c8320d0bccaa07c71990eee5294a0a58d2deef7fc68b66f3876c969c80c55cc86675f96576ad7377abb704a786dc3cfb409db9198001e8b2dc1395a7188d39ab6e5693af8f656f77ef9334ecee14bbf98be763007444de1aa26218b5af1350f23c70f5ab44bfabeef23518cff471684800eef57b22209a094032a073f8a7892275ff77ee27416b325b34dec52a61df73b8b954eda104e4a09d85b08adbde6a01e51375f952c66edc13cffce7991a35469eb33e15edbb5e273d9fca93e3c7d859f7b5c58c18339e14b66d949d257a98f44b6e97b124f5b035864232c8a5c48731f9d73fc45de54e6be314ce1f0d98212816d7bcfa81a6838960f0e3de3fcf7563149dee9a0f335f005e2cd9fd7a6368b80820ce0c09bfa28d25173fbfd8de8224902001022b1c096c67f1e2d807a5a59ed21918470514436ceea27d25bb17f600122e8d7a8628881becc21a9e341db577886a71d17e25727141d4caf76f7d65726d131b2b70d5a765a2a407da2ffb1224b80209d7be72ea4e86636996e712dcd912251710a08cb2a54acdcbe5c45c3146c89eae0462464bc683bb77bb339d89af791ec91680700248df16ffc054722649abff22667f510b3498b73517a251e358bec101146dbe419891f6aea7c261e17d4830d4056b8f7fc4bcd9e2d1cc91d3f1e664ed4ffd613409bf85f39b2e483755f0b0cc922a8656bdc82e374ba54717479f3be3e88f79419d05332ed69910ee2d94daa2dffd3648bbf5793992884db861b7d9835508bd53018957d72c30666e817276315f45c354a8741f6206020cf723f374e9d4ef430ade860f7a5f5ad8f0fb9ce1f0b37253fa6bbb1ca80429346624c6181e14ef307457c6ee03982aaf180b6fb02628c2a70f0e7f124093b346cf84afd7b7d15ad44754493c7ee1fd60f5968051bbb89225b7b6a173955dc1d15f601ccdc87e55bff853a9961cacf9d9889842000aec8ce84b89e901912b38e217b56064341c0d375e49d00495049389581dfbda17020f4403abec0cceb74f960faa1030bcb86653dbd154838384120e4cb211a315ca1da642678a328c351fe0cc6a3b8df7b70871ae2c090f72da838fc4e29daa5e2adad4eee1fafd3eed26782dec9fbc1c01360ca751f7da202e41204858f4f928c55e34bca9a9ff1b408063fbd7044e34ef1491dc0fad3442c7799f0441951bb9d1e79eedcdfe65c1d93829979fb00a2cbc2b9f227f601764a231b8497b79e62285203a2f06b03cfb113ae089ee2eecc2dca0749f705f259e3c9801c03ad5255ab772994a34db5b464b7feb53540abb52ae2abc7fabfa90af04e924b1eac17a6c6e996d6315ec8ebba72a96abaeffc0bf5f1c892f058e1b412e2ecc20c9dfb7cc439099f98f6514e4f4a0d4f4d3720e8e5c7583af8b92da7d4c28800415297d73a5baae81cef339297c4c482b0471e8a7ee74cc10efec988b1b7783b7cb7167eca1dc6f27173e516cbcfc1d4433e7471f00d2bf236e497d28ecfe87ddee8129ebebff21e94d20d9fc29607f1de89f9df991de8aac71b7c872a45fda9c9407117ee36fe119687d862ba9b1d5cd552073247e367b21658ef3ead6dd60b3de67334edbec630815ed6ced8ff2ad3afd2f646a235e470b828ce7276c7f044f6bc9a6b84582232c701907f9cfc2ad37066c5e3ea64ca61671e20fab290a930c08aa0c5acb4061acdb2944d379b1ff41235185708001a4d050ea34d711362548e0881b2e50c7a423e71c09267cbbfde84c5b38319e17b6237ac14f175557bd5c7ffa71e5a7aceaed77700cce76242bab5c676a6bb759ed6c2c217fccdf01168e92b448aa265d09e82ee39589f93e00388ad65712d1d8fda697429a753b99e244e0e64d97ebc010b0d65dfb9b85d5c0bad261d761143fb6633a66edd4bd4e72e16512dbf4195af84eadb689714ea480baae261218ac8f4791479be0f7bacd9aca58f654af31bda89d5e79a4645638deef0d46eb8d0f0d21445eb45b3d815beaef8be9a1b0f5114a6c7ceab2a735a7eed1f62a02456b5aaebfced217d515a55f980c218ecadf0771890e24618b627a91d9d75eae61f5bf3f487bd9a68d0119864d6fe7eefe449fd07394187340433baf4e262ce571ba5d1852e0491b330f8a907648192e31c09fda2dae4d1b24d63cf666c0774698a4b9aafd84fff2670f83dd1992669d6cc5443f993745981992e837d2c59fe661ef77b94f2025f8c2f449957123c343a567e8275304ebe58d36a0c69e7c9070d14c0edb5db66c2e8a549ff8db1a64d67d32d18c82b8ccbd3b7597deb4ea29589208ecaaad40c30f167aace242bc8356704d0d3b775a66ecd640ff0f94fd772fb7fd0beb742561a158e79f6586b329da65b2e6f8e2102e6b64f2d4d5a6605184b6be2b857ea6e45515d17344780f2ea291b471d4b8c05ae21533cf0699b1b030e3892e7596b370127ed65d1ebf80fe47fc3baaef240a61af0bd5131836d4de92007311dd6b0cb10d92e2b05c6c943fcae9792a3e70d58eab19a89e206086f13f808a963fd3f4ada42b0cc3d50066e66b9a1393f89741df8e30251811d7215044dc45c23f780aa6d0c4271463108150c3c69aad4a97618cbe9917e2e82e29d2f57703b902888240ea38a2ab6abcfceb1984c2c3625d1ea8283a7c194a17a71319a5cd7efb313665cac0baa5fc91aac3dd8906db85b5084c9bba32f91ae8921a929ed9eb0a5f3470e0242f70a5abdd26017ede3c92ce3870252a361206324aeb1603daf016464270e5a0c8b9f63b46725cbd9ce8b20bcf317924ecf098a7fbb47c765ac9d745c64ac719691f13b32c1e50b8493f0b24ea616017063289b4344001c61573ead0ba550a9f3310d8c5a2ab64a7fc41ef9f1d2f269c1ceb2f47302cad0d9939db26a11db7cd4ca17bea6c28ee1bfa0a2cd88e1ed868013268fcd697f818a5f5b361957df573f7a935fa82023ac9e30c2c5d218edc72b9863e89fa0a083c30e2846fce84d59ca5aeed217e7ae524b29c0eb6af3b07a81366c090f614e197e19f5f47237f056f84a596ac13d9e6e307c9b1954be0bfcc1a78c5a78de4da327023463d71707929592a3d35143dc849972fc9dd6017533939a40d740270a5321566e666cc20f3532a86a8200e8cbc4babbeceb300d2434f3c525cc41fa8d49d5064c0815a94e247a2b4cc28dbded8ea078e2ea85a44507228d2fe1a7fd862c173662ae4a3b5b1f9d05276d2abd118c9f3848b9193bf9cbbbc1997eed5ba98bd924990a4a56048246e057505cf84a3684f9bd661338ea81fec30d50be4ccf1b36f4ba3841d3285d691a8178652020dc3006a87a16c1088617c3d62f86a96920e045a78883c16538e7448b35abbdc17d147551c2bd4022f84e92149234976e610d5ae032ef3148384ff9196dd9ec7457b3b5cda904206ac3bc376842a52764c156d850405557d43ea0b1b5b3a1940610b82a9c05e2ee4daab7884d18b60617ed010742fc479c49ac338c729c19c86f0517e1e3c68d4faf08cbec1eec372b136de459b61a525901833899c14ccf27b5705303f6f49e79e94f740dde241973179f479cd351bb701a8cf044bc2f9bf57f468806555b38c9e55eefd437acc8b1cd9b2ecfd9ba2f46f77fa7378e218256ad2e9ad40f509430220ecc6ab6f675cd1c28fef0e8c99d5f63dfc291527724786d1cac26b68ba629e917a7cdb7398a754632fe540b07d1d490c233f4a20896faedcd07d0e69565cc281962f3e6b05486000cec5d4132e809b3e759b547e0a005557aeb09d5e87727d812a797aac86953d71ecacf29730dc3cb24f408c9bb6970f168cdd9e63c0969c80babcb1e808da469069c6a5e1ee015987f04abd7417df1633afc9d0df47f9e563783d0d4e69ff43f36613fee40eaa1f8b5649b756673c59707e316f51fd378694391a746a22c72c401ba6b2445bab824f00f69dc9de8e7b8ba115d80e8f4029d8d8c6a7ecc94daf5924761f0fc00921fd6dd492ec52d21e85205c2dfda72ed09acab46db2422a94711989b394dae81c2e604633e1028de65e01a12fdd6b5e2e4f2c1e58e22c0304c45b9a9490e12b43381a32a25b4f34cc87ceed2621fb45923420193481fbd050ac93eda9982fd0fcce1b332c88041fd41e88859f04520e6bc78b63120629a0e3a5f9ed1702587b00071480242e44a007e911d3056e271bcafd03cb94146bba9c5ded8b29711af054d402e023feff6bb498ca1324c01bc223e859a988b3e21f1d9ad1bd8a7b8b82593240f0464641a6a586b9d2d4c93a2f47752ace9e2ad5b0298e33c4bf96f208045c00e3e8b63b6ea41efe851070f99b65e375e9d0f4975f3bd4d22baf4f2e1f8bda2371964bf0cdb724cd7a8c4a1a5157c2e8254d72d92c7b6adb48d5ce64a6f21b335541930abb681f9529118196047276f3a876e1b9c2a50912d2f3ab3471ccc30762bf0c3f0c9cfb52a57878ddcf2494813ccbfb0fcfc1fef336feced1abf5a1acf791fd69948d8f9c2dfaa41e621726306ce04a8e5b16e43cfd1aace7fd45730f14d324417c7c40fcee22240308ecd8c065f5dab86ab83b645a56f5666d209469086fa570ca3eb2e3ab4c947d69dd44ed13fa55aecd71a692c978642628c3b5424bba500ffcf28cb721fcff08fe8c573dd97164dfcc3048207f66e872e0d6b2fc8e013d789631e3505a5ba684311c1439bdbc2c4ad852b4cc0ce91fe6302d9329321aaebd480e4faf2539b7f11a569396f56aee7c6a8825501af023694dede57f995809fcfac82c9ca21edffe009a8ea344574f778000fa28f429778e8ced69fc830e0b0c73b760dd1909ec36ce2e9856ab43eb38f6d954f15d567fa7b62bf8622c57871d73f23d0a647420e548eed81849c1b1815b40fbdecaf095d57d5956ed28a159c5497790de88b69f78b51bc63034b15515f94128bc9133b3c687123cfad3f80103710d22be745193d1e32acfe6803fbf7d014219cfea985683d69d57b2b90abc55eb7ef64214f3155b37f253138535a6e2a7c2e8a22f6e22f4fa1659e4be99dbf4e97225acc60944b48b37ea7e55953eea273ca895f7b1b6fe2176ea71d73fd8529e6799e0e9b1937d4654e77bf1dd2e18d7f2b3ef644b23517bb34cad048aa2ba3d27faa725d5ba1fa008fdb272f77913b6f43a789210ca5c7980969eeebc18de0cb23369fe57f1ef99ede6ccbd342022652a159e1211bd0fbf10c931997fe18decac6bde0979fbf17a6c94675e586483a0fcdd535dde3bca7a19a0c9dddffb0617927b7ff28a6f619c4388ad19549063376292146df6f4203f8031c9897794b1381e44a822f180722c2781f40aeb4e61759582f42636667af96682ee9ad994f73475cd5a95230fe502488d9ecf5853416b1eb223e5b5d959778c7e3e7c049787f32f3d2955269cc210dc5a7b5ce683118566106985882e5bd62a6efca0e2f27b229e0b0e75508d46c6293ba9b2d79b6894ecc5a7b1954650a5cf53c4c309a3cee3c3df3099ebd80441bf4bcb69a824e0bc60c9bdfff28e6173ab5da911e7c4d15eac1effe81c0e1b570a50b5f7f432f48124a1a6016044ce33d511c292452f9d508c8f72ed044b46c4dde9dc52f4549d944d620c03a3887596c6b4f5fc261082498f595e0de231bc61cd9e989a1948721da1e589345a5698981ed959d0ef7cf811dbb740b07475bc5d1d2beb3bd20c6928e68772dce4ea5dc38f2048f8c149c3195a83020a1570317978afd6c8f3b65d432448b23b0e67c3642f29ed9acb145108eec8f87e831d324cd8e07bb790540c5f3b3001b8b60d38cdfb8da403b1de387584e1d537c8d03c2eda837b0eee7086aad26097f0964ee4f7ed84c48acb6f6b5a1a17f2a4e65a93bc42d4f210843166644366baed011bc4ebce8f39c23e026fe141d792ae41b7e087492883983a4ce6fa9592a92b01c7589e8d5c0d26e8e017f983dabfa9aa54b033f986cb2561b7a9f1bbd28ce7030fe21670335dbb18538fc569a6d8c26612953001d9ff1d7f2796777203f1a701eaea00b3171697a13768a44dc14c0a339df20c124717343169742eb56f25489515f0729c4c99cee8f64f9f48eb95af8e9d1aade340dfa47489958400e2830b0951d5c6d4cda29da882841c04437ad833d97d82f146a9f365a44df1f0a5cff66cf72f3482f76691676a3542be3b0dc791ca4a39df39e96e29e872689bde07f2d001c5bef8247927d9d487ace8156a43054a74abe1e4ee8d19c46e918ab6119ee5bb1727a8cb47ca37dc5d36050f999040a95bc1702594d554fa684c28d6677f366d4e777e3751fbb9662fef840a7eac45bee1962fe085b6cd5705bd7c6f003494950a32a183a8d9ee4bc4a4702a0d5648fc6e9bff9d2ca30301349497d0c2461721db9542a5bfe825015d8e5ba259cb06266581f94896e532ff3fb8e87c76c81b42bbf3d94af92b36b460cd92c0e791c95d996ebeb32a9672f283099484623afac60f73a0ede4e256a1dc6df6e5a8e741a1876324a2e22254a2d6f2b724b86929335c7089f3ca9d17037a6d836d69c9b5a8a4aca0b4edfda9892b962d807cea1c439324c1bb8959fec5732666fd7a5f7b69eb19443d7ba11ab62ede751ee155a2a218f30cf13718faa0eef3f538e2f33f4890616225652b305bf4430eb3b31efb0794c7c0090653df6c3ec8f22e1bcfa128d927277c35f5b330e229826f766ef93a14ce2b3c306a6239339c2151384444d19437067c47ab0b8f09e2dffcc31daed5e0247cede14db87a48f9b82ff8acb14307554e67c3bc0cb0d7c9d1d97b4e657a6d11ab00f3d3867f93daddc659048f90b8bb9365a79ee05001ec5369fb6d00dbfec7db0d0ae1e559e2bf4a29f4f19eea507ce1110948c1e9bbc396c30055a3673899593bf27a69e9b8bd12e4148989af1add1ef9972dbaf3c19b3dc9f616f36dfcd34d0dca143ecc923cc16ee05f5c5861d8ffe89892f450d2927fa62b416273b7987a361ba3739bb1477d528d21abf98cb0a8467476d0756fce2b3e40c8d2ccc285f67b299d7d46f228040c32f304c688d01c67e0cae4b5786f0ca5aa52e6f312d0ee9a15feea3d290dc2ad59c97f3db39220dd1b58291bb99610f2fc34f4ff44f56ac3e3a65184572d1d4cf206e8e9ab6726231b6330328a6883c9618645ca3bf06cd2cebff10391117178203e6b3d6a03ed93cf26e0c8c700e0327eded34f473bfde7d97c31e04c4d5ce3d307f6aaf2acfd7d19c5d34c24c5dc9fe1512bfaa67b326527f7b37dd3bde6d7d58248a1ad6ea465468be95072ee3855f92e40bab3cab122a0c4ea34140c066bfb6cc70ab091061423712789593db376786af79c4481f4b34932a77c1181745c81461e44b57778c887ce28809e1b42147ac1383a48896ab5b6acc16d38c67abbdefd74ce70b18aaa60ff07a78020864d7b56224cf8600f92ccf39220dd1b582916342a61b4eea9c5f7ef593c2e5a9dce490066baef8bd6b0cd2f6237deb94e4e428f2726c67e841cf617a33fb79cdf0e6b140bfe350072b73d727065ebae7011a8da948bac7c73223042d2adf210945fccfb03b2e8acf8555ddd9f9efa174a04afd96a703c9e31deed1920877323ecf36f2a6a835fca033c970dfeaf3b35768394827c5e25801ec37f76f24ebd1f5ae54469279a2896ffb618fc28d10069413e1a9190ae42fd74528ee75d8b7711abd25a305dd1b0260406d07fd8240ecaad612e521f479f55a20f951c9471940c7e61825c99f758ce95ce6457d1455e90c17531baacce11796f23fc405a0733b39953ceec7f0baf088005ce2e6a1a3653cb2468ce033a4a4c31b8771d1925f786ecd3bc98afea23a1fc9b51da33e1de92139375ff8211a6fd12bbcc94203034c555c5508ea728b67413f04fe523574604d28a68a5ad48c514d6ff310553f1db5e7db154da6c6570afe112db4b84868cf4ccbf0860f75ca9ca25f00fd77118ec89e1f9c2a6490242e310e69eb865bf6750c62c77e8ec96bbb15770c8236d84a302feb52beca12be7388a72427d5ee86d6fb16adaa98c3359d707126925a8469dff1805d29c8c1cfc65e27fc7afccea150165c3f3684ff3abe93040e479a4945f8845b015a150b00bdb8caa8bb0693e34a438954ec8e0945252c687d475ffb1f80a6ed94f502854dea6a37db9d65b9be428ded687a6e0cc4f84b669a5e7b4416170dc4e9e686f1b9799e0d8a0325b9f8ce39b4e898e86926c1b4ccb51c23607dd83b7a3e18adfd0e68697202aa1d51721d4e4777dcf13f1d3c971e40026938c2707084db095187810123b669f383bb6032510dcabd49cc0a7e04f5aac7c026bef1c1f9222a6665630212810f49da702c322696a17dde5abde9301396625ea1e44707851e8d8b9d9607d39c87f914ca5f9bd00d0dc419ee0ba46b7c5abb1d83077a445e383b13d625a092e8aa3955d393e030ff45913be6887eb8c4fd0ed815da6a2159e77b7550f9a2b17d52169242b9797f2ae69a986d59323cee2228095ee378c54822e104fad7717cd43883a8d3e9f134b7edc26a27528d8ede873246439c2a93575280457fa453b164717d4c7239d18804768f566917eb14c0154ed020af5e5655d300ed24a07d28e18257f64caf7b0dac85b482be946e3c72341cc14fd5dc6dc63d736870d9fa1902d41a303621bc2afbd08956128846b74ceef88bc84ca45876021bc5464c10130175172b92f1b76231c7e9384ecbdf796524a99a4940178067706ef052f84734a930a02a54aac8a97346b523bc6ac88e00b3da1832753a8286285128e5a7812a507fcaf77fdd72a2b4883af094f428a3021e4c8891529280f5594546192668def18b3b2829522255861058512acb83bc6ac0459a314c687342b20f68810179008a11243971c70a02ca822a44a0a693255baa24a0969d6548162673bc6aa8081c90006fbd47c9f0f5310712b7c285364850f618658e1c312265841bd35311f8af0018b3d4283060d9aeac3931dbdec18eb010a7b53fee0afdf0206e6095dbb7ef3357b66cf7c0cdac824cbec48b738bd27625488d832a96801428a9831307440494d0e6960986249540aa63099c2c3cd5ff672e6b216b28c264d61614a0c4f984ad20ef353232ebe179f6085fcdd4b8504fbde7befbd374c4eed18a342444c6c8a9a5d778c4d39d3c3162aa11a080948f1918278f0883f3507b6fc191b9e3ef383a4d458124d2985c8b62cde98cc355f5913d9bfbc77fd6f643c1b82284f9b466162d30ce36b6b0b241baa94995282982a8068932955c829503bef189bc2d405e60218ec53e2fb923c1d794904894d29e26534344111030f452041840a3a486142ca982ccbb22c3b42068dcb9318285e808cc1b12ceb0163dcad10d3746982099a294680f09283941aa4243da5a4b02045862731af7701910394233151b44059628cbb90811d6e58220463b4a449a23844391325cd939818941df6b6630c8a92a83ddf5b2287531271b0f581fda15b1ff85b9bc3293ad3e73ffe53025130fb0ffbbe492e0212e88748b0ef5fa926c1ea381510ca295bbebf954edfea56042450eb03fb0e731667b29c5172d298dcf1c996f5e77fe0f347fd49e7dfaba7aedfcaa144615567ef896842f0f101fdfa1ff8d7cf513f761fb43ea83fecd7568efbd8470eac8d80ae8ede23bf95237acf1011100940b1d3d1b23a87fcb863886af7ef43020673b966f5907072ff4d15a5016402bac42f44c490d44cd99c4e22311e80c478388ab1200496d21bf6fc2895d43a9d06159071c2b48b622a28b2a7d725cf77d9cf58b2f6716b2fff6a3788caad7632329ad9b8f76547e3a5ae0606040cf6c5be6ffac4e933df6a8c2db6d8628b2db68faf0eb238f419f623c5d32768fec5f75a5b2ba5ee73d2d0bf3ec6189c3f3f7641f3dd9f26b1c548a5044a428248d2972200ec184b7292a4e463cedec7e37d3cde7cd52a46377fd9cb39a359966519959de92bb8e9cb5ed2d1a5d40b2c662fb8884887234e78c195353b3ce9b0a4490a9a40c9b22ccbaa0a2688819035406a302a13842a6932439324576c93169ac070a5e9f5aea42245b1a42027ccdb044d0a4b530c69e284d7a3264094b0d4044b90a5a658132e9bee186b9265c6909e90c844b1c5d9c4040d93225e30c617e32018e326449a185d6902778c2145417272c39473cbcff45b37b694d47bb0620506b3e25971b9aac400dd617126468f31c8165d95fb0b723a7ced9b776431c9da67cfe197f7cc2bef6f3cbb7b8ed3dc9e52b61c3009f2806dc901d86f60e8dadbf621cfdebee973f35bfe2df5db8df72b30fcbdfa18be026f3c1c9cf7e11b477b600346255c98f774cd17c6da4b2d63d4f763f896d9a83995c1165ddbbdf75e7c6374da5107ddc7dbbd110c3dd833ce38e38c334e8f05597b5a238740b7be3152a743b6e8f2a044fbf2f35690a1605ec54a553ab14939a73ba5b5cad82c27ff7632bc26396a8f498e96871cbfa6bac9f946b59ae1e9137aad3a628fe108db5d8b01ec75a595ee3ad145a5434e9f3acf7c3975a7765e4f070bc2235d2f07c7a92fba88df63d32842b4628cb10db1906f51dc123ac1a11e42af3d9be4d2d46174dad303ea9247848a50d29d34c04bcaf263b4b65a5bf1520b1564f9f3f5eea5204beaae3d2959be87030f1878698bae942a620ca305e813b4a1d4e66717124ddf9d6c80d2eb07c6ecd140b9552990c52473efdd077620076ee07687e5703909b2ba93bfd83122073ba20bf9fb05a3c5f4e15e7bef79793ee4306f0ecbb089350f57535665ef915dc6817277208b494ea538fff13caf878d83317db2c79fbd7f039cfc6b6cdf384ef3f0802ec1ec9257daf5c3d7377f6a784f658d20df67b5905937e4398f28f197457a58ad6a90c524d7d81139d8bebea794c30805c205a60ff7b5e61e42218fd7960f983e97d3616cea645c2d44a593e882c52487f2e8084b7944a57e0fa16af5f449327d421e47d3e7c8f4b15f5f22f100468c8a358fb884e9f6264facf5a3d235da28e7e1e0524e2929952da86e6da4d7d20be280936c3168a5b5520f76d494564a2b8c0a783bd4fa723dc9f2eb4b199366d693ec94d2fa6195533c25edf0c9f6f7624828b9b6bfd53a8840b43db0c19e40f62df8dee3453d22c89fcf7a92a3f77898b78b403fa4da031b6cf9f25da9464dd3344dd3341b58cbb0165f04a28d27e8f9acf3a9bbfff49f58bbd7da5a29759f130cebdfcfb2d7344a3f86f54520daf46b266f095ab00489223b8c4a4a39b0ecd9b49a825ee0e75fc9e90a4cb64fe4f07ffafbea893c3f7c49a7c09c80c19ab8f8de1b3bc2867d2f13348aef8816bc04382b9265d9921392d30a32cda986cca904d90985d41735dc97289c1d634700d9e1c3322856517841e30585a8cf29cbb22c6ba5f065872f5bf4172317991c2f2b25160ef8f1cd5167440a4610592d118513d3d6d931e60483ce0802ec70044892154071668a28464c15196a78e107234878d9a20bb667485d73c25e4a2e2c2e17e7c59ff883992247543186e98b1440f379e2cf43a5b042112d2aa0b0022029a5119bfb36411cfe6d0e06d19f5ce73f411d34bfe5da06d126da4e9f9b60cbc67ce9208ef95287410e06d19f74be5fb1ada4c8e17ff8c977c15e3e9eaf4c399ab3e3ace4054e5a9cb030b18ac229e654858925a0603028a8ef83828a1ea3cb21df8bdc227469d5629715d8f75f99122a37d898eeecfeb595f6149139bc4ac281749181095dc070e9a2e568c5a58b148cb10973c7581728be436c6df9ab2f4d514d25188131be26e01f36f6026435c4170d768c7589a14b0b3bccaf82fa62be5c7e8475c9b1857318df0f298db6be5c2991a38ceec447c4f7c19860b0e84d1a2fae2ea0b24a292b15a3fa210169be9c14a493c6a32d30d89659575ba6cf07dd10a246410498bab9f5b7f689f6563b08c8355b6aae5b2de5b9b7cb61f00336564b99c698bb460ef0fff51b20d836e80eb25f27579dd618d3fe7b9e4faa8eee4363f4193b9831fafc187dc613d4a744346dfabe554a3f8073f5a77abace3ace9734407c229713862d99a07698b7071e54415365872ff68cd13eb53671beb8a79ff7542a829ae1377210b53acfd72ae64f564f563cac7458e5b082b282b2c261b5e487f9e4878d02ab64b2602d0b638e1809f1039216274056695b2e4ef64a490ddbacf6e20cc759edc5378699489c66b5d7c6596d8d686452984ae38e5109cd8cab2a92cea774c627c232231363f45a6badb6d6ea313a95814a9f2bbcf2e81e698cee91f2b05959278dd1a37b5ce1e0eed5dd7d8554bd56a71edd635512a34b77269224897131b281d5142e2c7049e15a25f9d1295c5088712982c97fd7ab05be18df1e32de3136841a2a4358f179f9f5ae21a8d8e1c3e6144794c0575286b8b28760f2c2102fbcb042015d2979b121846c89ba012aae6ec8f23dc4f2099625a7b4566b2fa618fb941867d5da7b31ce2ec659a66d38d3b46de3b82e954a651bc7755d2aa5ea5229952a671b7a73e353dedc646ad03861590a0306cb524a95b38d0d963dff66e9c697ecf9389ec4a39ee7537a8e248acc0c23e774a7b466cee6e60607c7f36e381ccf5bad58ac9c8f7e9f4ff979dc8ac5cac9f93e9d9cefd3d1d9d969f1501e1e9f92c77576765a2d9e261e161a500d34f02935884c3b5c8bc7795838a88117d180737003324fff7dcac7e2d4f4643a9949468e641e9940d4a0710a0306cb929244e2541ac9229288f49f617408cd5774d221e774a7b462ccf3a0d6000080cb150001500108c0a71400b6b9c1c1f1bcd58a954373727cca1c0c009cf297d39dd25a2dadd6de8b71a6514df32935ede22cd3b48deb68d7f9945da76d1cd775a9549752a972b6b1b9c1a138383e250e4eb6b9b9c1c1f1bc158bb2583e258bb562e5e47c9f8ece4e8bb65a3e65abb5ad380759b09ccf419d8e86dc3c3b7467c7a7dcd9c9525f74313f9cf25f45c971be5c6677a8092c896d51024366e524c7d816a8d816262d59c0ac5490636c4b524c0b546ccb123236d860c36a8658961c5634c4b2dc90454996255968d8f5c8cdd404595c58c9902585adaf50c1b124794ffccf2f389aff7ad70bca7bfeb34c08a79d655996bd2fb6648524e71d6342601142e9d610449520a6ecf061f8668940d000e2de5b83ac9c92a848a894209604c1e4098780c6100410efa956050b0414104e94000918dc2b0c94042438ba9244092f5c693ae10517ae44b9b2835c89206b3bc6ae2ca17105c95d8de0f5aea5132cc9b0c387113152c5d50a6668fca0a62b52b42482bd62613ef17d93aaf07dee2b14be5591efb362081543f0187c31b6122688153045415629ac4eb0524496ec7d3c2b2094523c24caa65409cda63ac469aeaddec7e35909c28a103466e5062b33ec3007419ac6db73253e22187f9f8b7502a52e9775efe677ad2930c4a9d46b291dd29d7a9c5781e16f1c2ec5b22187af17f55f2d60f5a5fd0d48e74b7b1bd09b2fed33f8d185f62ab00335199ab62f73e5e64bc9ad64a9c34ce767f3b116b3ac026563736deebdf76d3430fcad69391f7e5be3d99af61eebb5f7a6cfeab5d5cedbd87c0cb701573b3a3a3a3a1ff8009005c6f9b2f915c862d2005049ea61fe937fe24feaf0b78f3a7c6557e94d6b9628f32a450ce9e63a90e2346c8554a052406e367b2ba15e4ecff461a15487de9e990ea5751a378d513e738be822c79aac018c730e13a15e4ecf04833a9891400165c4055fa08a9428628771028325db6887cd76d0df6194bdbc675217d5de8b870524cb8f30fc44bf023b1cf494a8919c52ce59ed04adc62e1793f7b96a583f564db3fce9da5107fd44a5f813c444554e2e3b58254869c482180c88c49c9001ab496605a151af18b1a6416cf29d78ba3bc69cf0b2e7734e2c394166cf5964db549352ccd5f9b2421e058c991d634d346d04ec186be2051b840bb81ccb60ed90e37c6d19fae3a74332fdaa310b879c43c7f4911dc83d778c350166d34f9a1ccb84ac7dc8ed1d1609323717307fdba4512aa55b1fccef5e02f3bb27da1ca881e1081b673f3a5d4ffa1097dca21641caf021c16deb7edb01e9eb80f43dd04196917dbf75c3ff3ecf5f192d0743ff1cfa31bac0efaee50ffd3327fb3e6d22c9e6de7fbb9ced64b4dec16fc3913df7ae43a28ec67dd66720eb6fc020ee6f3e839ef72bb0d5fab8756c1e83add6ef7cdcb1a3c13dcf73cfa35b2d3d8368afbe7563e76d7e27763982482022311e00e7b32cfb9dd57f600e1874f33163e990fb6c057ada0562efa97f0306656f9335104650aad335d3f8673743db4490e0f62e14b5b510b417b27b83daae377fcd3ffb58134bfb3efeeb17cfc0fafeec52d1457d0ace17bbd6bfb922e5778939edbbbbcbea306058779fb3fef40f6f217729bfb084b84b272fa644d1a8285a8646ed8a849289b48c3432326222890b7430da5269c775bf8e75cb067efa34282d2304557a8af1b3f771e07c0dcc14c4db67a07cbbbd06e6e7c0f99beabbedb78dea905a7087bfef70b7bfc3ddfe0ef72319187435f7fa99fd8cdab876b5ee6b462fd5eeab2868a3bb90ba535a6ba532fc116e2f3483ba27615730f4bdeda0a13462bb97db4bfff07ead1a6bae85e6764dbfdbea7ff79283c0b5adfbf2b7faf5774c1fab65adaa0fa591aaa361bfeaa0fadda73a1cdca66feb6f54a54349f3ec3a1aa1e43a1c1cd5a14aca904a7b73bb2fa595de6e7b22d200f56b47c33efecdc61ddbcb94ecacb49d0ea2bfbdbd5af512055d43a1fa9b0ea29994990ee5b4b1c9a76fbbaf5fbf769ac5992ce45b6e5f3f7be2c0e83df58336ad3ded70705bdaec774c1fa38dadb5ba6624c86c6edbf78a640927506a369416a824504f7bdb5cd474450ef247a51a9e0b05508e7e074e07b3d7c01a35780dac2f77de82f341f80d588438ccaec16f1b77efbd60906ae3389e9757c5d132b283ce55be71aadf42588fb5d65a9d54a7fa3ee4f122e4f1e2d341f7556f3fa22112fc2999aafda99a9c49cdeca0693f2767ee9ca83d250b9bf6ecfa5127fe8c503f1c70569d13f27811f27891f3f543a159674493e323f80f7ee1bc715927f55196719eeffbfa1304caf3bf010bddd23950ee6fdfbe25233ba05176871bfcfc9046edaa83e4e778e5d13a3aa55b2acde43c55ebbc06e0175dd84f7534fc8354a9efdc5a6c7fb32cb495cfa35b5ac7e5a73ebb3f6ba57d89a3e64c4ac663bcfc4732711fe6e01a38bf4d0cff9149de435fa5439c94b399fc4786f11efa4caee9cd8738ccde87dfcfeac3677df882b90eabe6f16283acd7eabd0f4df41e7c7508db12fb8736202d8371cedf575d873c5e481527bfbe5f390295f7fbfe5faf11704eced5da69191e2f36f7218f175bf59ad0dcdc87748736835f7421b90f52713f82ffe848167a32c8e3c5be2f5a4676c0d13251b48c3480d57402a94429d73f7c69becf8a504a19ce7cdf1918ccfdccc72b5c6024892533208281704192159a2b9e9a36dd31964412f95287922651b45bd02b7bfe7b479f969e947684514a3fc60ae40e081f5fb0d6b0d66cf1468d136d29a5acaa6cbb1b730604ba1b16d0e00ea23febc4e193049b7c273bc6ce1ced173bc66260b47de41c636caa9899a82d34b78fbb4568516badb6d65a6badf5a66cad4db62e1721d1fa5a8973d925d086ff82dc7ce1cf39ca5bbe5f8454ed87588baeeaca39410e3f9e77bd2cf52c9fb0cd901bb7eebd17b39ec8b017303ca037efb055f5b7b95d84e43407869cbda834a16c3617214dff22a4f843fedb6e90a839521a63d49e8b90aa1ef240df54009843439656bc83280d10fef62accec183b43a4003bc6aa589a2de6cb9f35831cbe5e2d601fdf4aad84c6ce2cd9158cb1334ee6d4619b21b7ccf16e33e48ed9bf0849fe9007425ae5ee86cf5a6b9010f1bdd7cc399243bc7110ab8979647ff325a59cae654ad4669898d162e6893ad9e274313cd06b2bf539cd149911e7ec7d3c2d885171851921741e31c5e0c4ce62200391212aa8204505a61b7808c31443d6f294b56c0b8409270471d2449813c6a0e0062e45a8a0324411154ca8a8e1fbf27d302718ac09066bfa3e56d30cf2d46790164c61668a2147102142418a2a94666892822e2ad02d54b460440b62524421c50c64c822c55394145aa4208325cb8d129b22710426040cf605f17db1588c75250a48142eb096581881a989a72a98a89451d21265c4aac2ba32801d63514ea2987c56be0ff6030ca60483297d9f126c0a0c46250a2b4a1156024919a8288a5c9afd8fed07928e4dc73b84a423dbb6f9dbe3681da9773d243ff5d977cf224db6397bcf7dfa58fb6f93f52bd6733f84a4c3fbf94348ad08484a5f3e8ed691f3ae87fc73748ed54b3d045b3d4baff4500cad87a61e7aefb9efe9fb38f51db86d7a08090747ebd03e755fdbf4500fefb93f3fcbf4d4431288369a2ff5d010920ef9530f011942d291bdd44320643fd4bd0a963f02dd7c04ba361f81640402d2c00874030e21e9d8de460f49a0edb9cfe08fecf1abc01f483a322d9178cf7dfc3f2250c7220da7372d9390ecfb2caec8fac71092042210d63fea47a05026edfb19188162501c6d9d1d635024cdd47f20812a905422612392f4e2c0ea818cd198242c1fc824614961f530a6688c0c31e00c110366873bc6c43ce11d63629a6262ccd013b63837fa3ee2cb2a750836b41c9b7e08ef4392507dd8098966d8f4a5129bea185db80cafac224f346df9f1a9035ad07710876ef9d3185fd15b98726ed95e9ba57edddd350e2be599af39e9a44edf411f0c883c3edd65ac26a0fe298cb9fb99cdb2ec661acf177e7b310679b8f06f9b04af94944a1f0cb8af5d189c06992ea8a56ad9eeb05ec835fc07e39cbfefb11c1d914ba68fdc1ec0542304f768fa4c22ac1c72fc501e4d9ce7744d9f0ce47e8b1d966098b7fcf6ed9e5e99b7cf787cfbcacb738bc0a1ec7db782313c03abb5b682747e943678be24b7428e2e554a5d675dfb0707df2de78cfa9e4fe59a6c6ad87cbdaeb49b460eeaa696523c9f87f3e60f8f377d78e6cbad4441e4206ecab3fd43a0fe39ecb1b399b93de79641b96d5460ca661b0786dcb674dbde47dcb4375f5986f1b46004a38ba6e65d618bfe03042884451caa48dfff93564616921cc2b00b69a129f102ec8734c4d66e5672c0b583e44f1732cb088b868c67a5b4fab36ce0a1f9ed0c98a27a084dbc244fda23852cf70d89e876105bd09b3d84e64f9e727eac2539fc670a33637435a49452c2d8f463a0907bd03fa24f8d44171cc5a90ff10e954ac78ef9ca315f527e1fd3c7346b609cefebf0f582ddf9d3feec600021b90d0963631a581ad9f35948aca21c02dde1e7d269d47c39cf95d153df7c4d18dff765423cb1b4ebab3cc87d3e88fe7d1bd7856cc07cc9387d62e4407291832a5949b20bc67cbdf0a082fe5ce44004ff8b31e843aec1a0a67d96dd17b23b0b41c39fdd8f9d03ae0e6b572386ec6644e7a28b17d14598da52868de8427e2542d57159b66defe1485d0bd53ddf070326514ace2b5415df9c7959e420b3cf812cce64ee33954a0b398dd4fb487d74219f033d2559a3bbba9d1df51f0ab4a1c09a216329ebae0f5e30831c80edaa8360b26953d94881d9f3586ffa6023dbbf75237bfffc18ffe67d8c2e7070c030fbec6fc2ecf1134eb6bff744925d39dcc9b09f81dd7bdce397a1f7f3e97b87c3dfd3990e53dcec64bcc4f918336bd94f656ff3f96fc010ff7c1bb075a37efefa59b7ecb76ea45efbd46baf653f5ff5415c9bc0a8742d3845a974886800000000008315000020100a8703e270482898c6ca683e14000c788a3c82549809439120c7501404310cc420080311400c20c618c39c72c878009e3a49d06b239f4e6fc96794c4007ede770ffc09b1fcaadb95003a04b996ae8d0baf0977c373246d66ac1161ec605bc92043f7d8a4035843593d1aa5860ca9588e6beaefda424f6f9b554961eac8568a0b46adc95e8999120512214d29c8b1aac2f8309859aa3a49863cf3b1ce3f6358dbb7d4f40fc95c9cab2779e30eafaaa72c6c4782e48b9be2f833e3ac433339182465060eb76accf559521ed0d0b0226c46eb9bca082550985091107008fad6f59b027e52c1646786578beb5a2e97eb0e08fee0c24640195be0a26b2b898d4a396952d72571825e2d818bba389ec1bc3dfb6a1b0bc7d7c6019cf4486af3a10bfae6537c0f0853db4955f7b8efb6d80bbc79c5052f98a2969faf74c9a8b7a0ab83b773d8388c8014a87effc74a6c4ebda745dd59e635f045ce9a89f4c8a79a2cb43e0b3c74957bf9d39581b1ee12a15d81113e299ab0e905b5a0f994e82b359fedee9680b7f2d9426b7b78852656dcf74c9666b539e3742e564db2433602bb7ea33c60f036a8e23c442665922247eaa738711599a85a2839de3f42dce24b12b8c8c233a7cdf23b273a7227f664ac0d5ade691b789dc989212728d3ad1ea250e450b90f20086aad042cb3599e90e24d95a465ade152b632247139de59ccb8511a875b27b4bb66a314bb4ffbe7b21e4a3947b5a358b7abd78338bfadadf890366abd1b36b2abc7384b0b4bf606195eb949645c9c937fedf650ce1c7ea4eb6dcb3636001c0aca08c1200812cb2f3efaa2282b436e48c30af1b1df1b1d86a59cb18454e29dc0a4602b9b20f6508dca4f02a077f6f7eac732d06a4fac8d97654f2e0bd63eb7bd96d68f30c6142f093c54fec4305ae8470593bf4812142cfeda5ed362c53ab9cbffd0a1fe46fa6039dd805c96233a012b3a606fb9498384b10ccb4d46ccedc28e70f33c185aa7295905047328d50f08965be34b4e911c99f2fea067817ac89352ad1ec55a4a56a90fec443ad19215bc8c83810931b8d82c64dc599bb68e8e952a0ad4631b4e554bded344e9ac82ce677a9945ae28e09a30fe9a7178404112632e6a05ed5f7ff96c25ca8a373745a5b41bd402138d2288e108c014df897c325b664c9d37ac67d6590865f431774242bf91bdfe89afda21a9c2e0b5b1ca27601e0eecc5e594e6a6b236cec0c61a4c1b196f7c2f2f2ab3b948a87382dd6b2f45a10236777cd4ed93d572b1b85fe9a11db6a7d3850c5983065a6a6691cbeb3c76ec37ca9614101026ebfe7434b4ac730264ebb0665191a7b003cc0717fd9a0edf607ffb75a4e81c4be5065dbfdd18475b4fb407508d4bfded94cd11bee42e86d6cbcfd9d4438acea487213526c877d6650ee0525060523cca66236bae5cb3cb618e585ce7985e6cee6ef4381088c90d1be4e8302ec90a688a3bd417f9f26b0e1f74a94752d8e2eb1c5d744186d65007081b2239c4e1244b21d013c35072969058735232b442184bb8b1d0d1117b5976c29b5b5da8d7b35574fc181d6522762c40e2cf14807dad980e5e2419845fbc22b0be2bb5e59b45742f9f1dc36dab6bfd3096a04be62ca14b7619cab65e2dbb1efa6935d333099de01f1164654cbfac39aa1c80cbcc54831df49d3e3f3360f5615c829ec4514297ec6e886dc58d762274f3a63a11c78d34c0e8593f894f509a4c86af02ed161083c4655ef64eb31ae50325d6f4d3b03ea529f4666480d97c3c588b29053184fa9da9c779892f3720971415307b9e1cfbe4f39e5695c4f0a020d4791e1fd30c3cd2ae075151c5a561649fa2d8143315fee20d256be9908c280feb60b764a1c32a7dcc6dab9c129bd1d98fade83a5c363fcd413be3a605082fac8d618afa0dd3619c983cb57d8f4c48882f12ac4c900aaae11ec72afcf48922ac759983881f176ee38f5363b560cbcedec7a38d4646d4087b215f3e85d988dc7fb859187d19c6bc501b0a887c153da50a89dd6ce0f61804a1a5e35cd2cc845ed68b8f238b198610954c60f618edac8587e57e3dc4108c8f92b1bca59a6884d21e5a658ea887e94f576100da9d70121fa5ce7d5236d590d42be5bdf7121b423d5ddfa63f3b42610fdd15bc77ee53b78fc8ecdf7f34dd45d907e210f439162543b19cec88d00562290174558d166d1ab5240d229e0226e38770e68b38742579947e7542b64e1cc836fecabf2b943f584b4e61d6c4213aa40ad5679b54ebf406a921aab35db28b332d9f2a23d4bfcec65e3dbbbb76a506d3a9996e86674cff1a13beff720f054260f34dc476d93ee8319f69c863c24431ac8b6852b7d806574a6992fcb8280df933bb14ca9b0a8e883b124391ed3444d3a9b548f274c807d141503a907340a43d1ce0c0510341e1188879d4f2f224ec3b22a49a893e5e4b59853baa85e361cfd4545a53b3b5c4445aabdc31a7837580298e98e6e434b811f33fa68aaa76c2523d42374af45dcafbcaa65c9608c744206fa8c6d46c025d0013e5232db209b3e00a0ec0ef7ca71380673010ef2fd8877a4f0bf4cce566338b107f45218a74ff281b14a135351697a08d1a72ce98a49db45f5820f4905f2b4755f916a03e446ce6094d4ab029bc03e39965f5ed3ae24164a252609f56c820971ca464928e297d1fcf1b7e11336657d652693b2844930277a759cf54bce1dd17ba2c0f181463294f8c86ee3d79a25569e736d6c57db1cb58ff2a3f060a56252de31f5e188f0a1caf05d9945d085d9151a730e745a2c7b6ca7af4e9310091c49e062b999cc9b01e41a8eb4a90ef324a8aba37a90993a4b8cae5d4b4d832a17e7ed540bddd6f91d9878fbdb169a48b29b55769bf45d4263e72bcdf88dae08069d478eaa2b1fe0906b42385d81d84e983bd28681532645639acd4a046408dc77701b4621f313bd0b47c52217155fa3893b0109a96cd2c5c26e58ced380ebdd98284d1edc6ec49a397b66616a142913440c7f1ec38d1384128e3776b317692386f5b60be00caa95f14356c383f51d207f19856288e8c1e93cd727cd5e8b3d6f000231723107257168fd15a7fe591706d728049b1d18b8f90969a6a51cb6230c15501a822f0e02f5e2ea481cbb96af30a8ef34905cee87bd5fa4f595986ce0e339716408576e1d5ca05ec7f845a8aebe9b24b5177c6b208c663adad9ea96f122c902833496505b1ea15185fdb4d4d7616c541b5248d27e7c23d61e194476dd8c087dfa7c017b8605d0d33c9a14aeb2201709c24d13db449d41bb9f6bd002b407fe39158e3877f413538bd4d8d712a3df1e06e13865d18a0a6e08ee22201c8f46b22a549e1a07522125352e003573658e93d7aa90e7f2af9668e9378ac8c050f8489beb744efa75698e0802009f30173e102a3a4bcb29aefb2c9521229e89d1549c4d3949202b4f9446edf125d82800329408548d1fc2e60da39be98e48cc1046875476c2940b3f82ea5b8bb70d14e5b9b232a0bdebf4a7545ab5579bb00f9fd8e6ba9724747950fe7a330edddccebedd1a06ca51ee039cc0633d68b9e6ac028155be29e1a86c5f6accd2c095413ba36e23a98dc415199e23fa4057e1c180a848c5d7b6a1b8918808337f725723802a0a30873e6cd103214310ccd228ed7ab9f788a36d5b1c89de2c55153e9fd9891408700a3024e41d4432e1472867f881ed98f7cdc0f7d5068c65e51a5506fb0278fa57a9b2a09b1ec3f8512aad6a5aff93444deca039a67c46a40eff7d2ce1c3ef4ce080a12752355c37c9a71b792184cc584235fab2504ab9f4081c046656f3b03fc17c4fc8a22f2ac30e0b142a6aa00b4c3d6879cf185dcfb1d7395bc23fa6848e78e67d1fcb427492a38ab4828c9db329def85dbf98f60c13bda7cbf8233aec078945a8cba49013e96790f8c7010bbea3e42c59ea58ca7c7db9ba49da488bcb08df31dc7773b4aacde56297a82dca57cd26588b6a4cf542c3e005a2560717a8f07e078c44d6a16a4c1334e04dddd9cfbf0e3c3ec64924c03f12db8b7890d48d99b2e3a6f7b3a92214c0dbbcc1e9e1eb13bc6e966fe57cc28b20205973b0e365a31a9dc0c3281984f4701dbfbb4e401279e26b0f0c30391776e07a482861ec3c52f5005f58c27153585fb8460831203afb76812fc88d7d2e25660839e80e7fa26ce0f89db362c8c03da6d054914053519c4c15bb56503221c647936a5179743e1300e08405292f7bfa901776f32b9263c0c5e68e6ae6f2f49a5e6e20add4dfa1ca0c0bb4be4a6023d134420f341a1c98d166e3ba63e60ad7d7268f6d5814180154f4c8114f4a091ea7bd94ec7e86bc503fc41d7fbf474906b13935d897d7137d7700ebf7d509802258adba6f9186bb0309e3fd6480e57cf09087d41eff6822359f4fe1f6ff95c40703fd153e3596f89a591fa9ba07d3a9373f2d3497eab65ddc6b7a68473978d34b4ce234b6f3cb724bd87e42406a4c0dbe52af90bde4cd93aa10bad2d8f4c4556714594bb167058aa73d0d33c85d4a262471899b102d0c03ffb3087eeecbf180c0d3e2e92ac60cd841157cec0a170e850753dd24f70210c5fc21cd8394480d777206617e9b465422861f24cb6d104f69c310c824dcaf9eb659c24ad0940a021e5adc73008230eee4f4cbd604915f7d5da2110e0eb5a00cbf02466406022c2574d3dee0be3cb58c545dbc899138f6445139b463320692a483c5f360ae7acdd7b8c8d57f924dee442c67ea7739318cdbaf7c101f3cfa8cab89917aac6e0cd29771d0b773fd9935cf91fcaf5dc47d7ca90d93ba8a4fe23a3d13f3e7793070ea1072d97462e093d1b37550b15806fe41a4052169c7b0e447e928e72a9af63a05aa3511f71a8a132f18968a189b3427dbcb509eb34777d6cee9b5c43baeae89379ee85f1a470363e613666c427974b9fa5a2aeadf286c998d7ce2b25c3608e86a07c426e0d309423dadeda397cc0d2213d3d07ea638edb75f17a10234852db46dcbf200442b6627a67819fe61f614c19071dc7efb0cc3b2bd7f87544655c8762831f8a29208a45b22eb3abe440e54572d48a23f5786d9d0e9f779d404428992bb9438f1ee14985eaf20c1458ebdd9f9074d08c960a0012f2143925c7a3e6ee9b016f606806cdaa66c25fea44146fce439ce174e52a7d10906795f7cddca5ded10ceb78fd2c0fce16a94f089aa81b0ebe31a48f718e5eee96013262d132d73646ba57064ecb93e8c07aab53a831a578a982dce273391f48f55ab6c0cde71366eb7aaadc0c34b54bd9e1d46234a766c130161b0e7d2cfe411976177a58d552c58a3a66b5a57f0a285540b156a9d44141fb4931b9ff333a4445c5a4083730b902b6d0bd35f76935a03d0a3d4ef6e58ad58089ce8ec1f7847b9628ea5f51abe816895782741b3d41bc2b3d44aa31bc4340736c61a776cd6a063d15b28326f43d6232a12b580df8cfe7f9c4eec0beda98a1872df102fac440057f12d9643c556620bec80274ffced8193648aa5b051f15b67e20621a0f8b32387e1e03b48b83e4a8de77feb410f4d02de5adad155b8077516c614c2079bb7aa730d58ecf3fd9eb2cb952d14cd9bf0b7e97b034c07108e0f6004cf093a27ad64a0586657c64578732ebd896cb530665740daba5281542b66794f000c593546b89f0409b46d5d4d4be4f1f7cdeafdd6145c19c6afe6aaf286a62e47ba019ea3f840673e85c824ae12b69ce1a38b58f1c77843769a4078dcacb7ddcf5c1ca9bab2e893bd4330afa4ce4b2e966b61056ea3278c9de879dc2c3b1ce9c57b9aa57149dc9220d8ad14ddfe81285f9b6ffa9550147bcd7a2d79680e9ff24cbce045e28cfd65ff34fcc7946ac517a243af5142accd4cae01e735abe13deea7c001b96e2a6c57089abaa93a3b671e9a9253c88eac49236aa2e097c5effac0f92b1ff484e82b3ea08ad47292e8efb71d80bbdc98a235cc847ae4d2f6eb52582978dcba61d8333bcbe9fbb576aa00e7c1405159119f1c0af8134a18d8ba80309e63dda8c0fe05d4ea8bcbc19f034a027d7f663dc3422a7973edbc341de4e40d6d812fed46a9022c663fc10cb2275b45f8da4af80b08163c4c72dde40f9d3e89032f1823b97a5b975da9065e0dac265ca8be6d6a990ac47de172e61f529c9a330e24c4d461d8155032fb8389f370fd0cd018cd864c1aed51355f2f777a0367041c7c6ee223f3d9c8a266040c612b37f388139a8752da2084ab1d5cd78ef60f1aece08e894b55e70f411300f86829363060754fc09ee3a39102b879d668aac64e19f9984f6de80883e6cfe8dba28e56605e2378c0ea689c9ad5b1fc1fdf782da0f54233771c2b43425d7416d9578f704045aa6bd7a07c6b6b9b2b2d87ee056788b0ecb43be8afca4569383c2e269f2b6fbbeb21661457264bebecd44ba6fc8f52d8757e43663108429c1639e58a3d8b9ea0fe10e481b1d77d0fb27756cdd104cd2b96c31467be106e5b371a031395f94991e7b360c76a01710e1157f49ded9216b23d003fffb76b87d31e45e753eb6a69656995957f6876abb37032f2d9e4449e2d575e1515aa7bd1ed5164330a411445035f83b43c53149ba2ad61edee20064b7cd208ce5ae0e874e23fc405dd03041b5b7bd86db449fa159f1c21b4afc538a77db44543c27f4b6ffd82c751972664312f7729f8ffe058e03ee4f5b729f8366e13d52a31c7a328d4ef086e60f6cd01c3d420b22d9cbd63e9c0d224827779628825f66451e58db502e611edeb249f2eedbfb3bf232f82596c2b0d66461e5c2cb320f8e3bd6215a33962e8a82bae605284a565528af80b0825781bfa5837076092104425b8f6c22d3929f844285df30b1262eff116ecc7d31a0b18d5c62bd7dc138b5462fed37025e14a8c5cd52f6c77d5c0577053a291070dd604f25316048410df82c74b79aaddaafe539b1201c8216bed90e31f24e851df926df50ca37004c94515c26c7175146a1c8d52a2a2582918f75723ddf27c61dccf6d63c50eb52badd92707d719c8d575bb6ca19db761f2f874d573147eac19ee263b2baaa214b54855a3342ee3c4f040deaba1eff87b248223bfa1b390d534d233f1bfe2cea30bfbee52c6633d4a23b996b1d9da3a440f55876d4d7bfa43d54a0f2450b95004055405e5133eab9a1db3311061fecfe2dbf9d91c4b4e694c08661c91611f156a7a360f3817f6f15a58798d1ab10de163cbb22a5fd9ecbd741248ecf9a37fd7c1516738ffa48e05eb42cb7f08e5757bd005954f431f1bebf49c2425b16142805bc31a6e5c3647c18b38942d7320d30d59ddf9d1ad149b3a7aa9fd14d3d69e1189ce1f03bdf091b62fb9dc9733adafe7bcbd68931d222a213c34bc031ff1d47fcc65b98c7ac72e9c806bbfc921068003b71d71b2086b121ceb5ae40af754885ad5b89ed28170c66746276a00114f31b98b4b08cd1e1210860698629511e3a2543ef3886ed118ee2cce0e9299b545c3f0e2b121420e4fec777d19654fd912a825d199764442d9693445428941e313452c9ad99f0532cec05e45b2d42ae0439ba0c386be20e7b6b6d7e641ecdc1e03594353eee90f57a5ac246fddd45eb55dda63ef112d23a4b9f4eae580078710aba23f607cfab2e1ca64581b507c9c20c80488f14b003ea5b64fbf9af249d7fa43047f6ff127d1b64c15ba20ac42480d016bd32507ae731f895506970a40b3990e8a0fc8bde0ced26725d31972d9817c759068fbad8a5545a9c43f09b4330a8462889d164a10c3eb8ceb36b34147bdfb5708939dc7a65ce969993b96ff25ace26f345f0130ec5012dc5cc2d03b07ac7a8168752f4f05c384d5c29548c521b8d5ef8cc78ef4c8090e86e28bd7ee74417aaa14891f1309b4eb2370d00814a784b452ea2763dc380063662ba282b13ee89bcce724bbccb5b8abbdf65e066ec1de33acfe84e366f81dac6aff808360c81b847a2772d5b5ae13b1937ace60b5f4385ec84b09f839472e6f946596dbde1b08fef3aa44195695db3be31bc72442d22506f3273ad9dcca1d65d9360310781f08e7ed604c6905e38c41d30ceba634383752f7d91086a7aad3d07375be0f3aacb52deec21dec0f2c7d855d9d59620e2d37106bbd7487a742aa1d23cd851751933e80de3af8300a83074a13d1444312f8036d9f2e4256b6579bebba7672d0de46849bded2f48170c77b530312324b0249d2854ccb7df5e1ed697eb8fab4102090bf48b103dce625149bcc154849f751e82d03209c7188c306c7f4328ea51729cb558d1200599b5690079b6d5c8b6bfb69c9e009b1f16d41a8078dc1df14c8f20068fa246f75a7ae2304ace0d447121b83197e328831b953cd39f9344aaa8c50ffc806c70aefdc0c19d385bf78c0d29a9c87a94b3233bc6882249f81275f426e268ddc045a0f4a9ec206b61b6ded41b68ce8eecee4a903ab51d4cc7dfab9e87d5659b3b3d010034124ae467a363a371a43f7762733ea6082401149d6b68ecf5bed99c6e952716e6a6cffdbf7a3ccd53949410662549f0cbd5d89cdcf71534e7afbf6acdbb403c921c35f052e99cac04abf12767f02cc44dde369677fd1ba8ba95d719ab3d2afe300cb884a2f4eb9d5f835e072da4e9269419e03faf2d397e07bd8ed5dc1dfef70e2d7c10deab30114fc13b2c57e2394760edbaed8976e887fac0723054f1a3b7ba29b10eb61588a3cbf2aaefb3363f617b40ee0443b21c4ba5825749c78dab0209ab12f5df184df5ed6f8fc788816079394a55269a19457ac99f86bb8da5d2766b1fca1aee6ddc2b9decb59961e4a0f9925b9f6839fb67bba687128e4a1da3783649e6443bfde3f7d6173f32cabe3d2e335f6cb1ab970eb37b9a27ac7499ae5809aa5340a63aef294da64886b484811c351f5a099e63af2e5112523ef24fc0c3058d2cefae1dc53ee9edf0156d282a58ce7026c0d108c93d1bd2a801b1336e828d5c644054addab07eef509a662dae4c891328f17fc7faed91869aaa6280eeb16a4558bd6d7b85267c23f5f1cb1e14a34beb98dff0a3aa9642e978864808af94a645df95da37de95dab2ff279c3b313074531010907e2c0ed30da51fdb7b6e97c532179d5855c7a16bab1718bb4c09dfadabb30f4e62b949971ba86629f69d1fb9ebc601299698de33fe1b9b32ba3a3657f9a9338d58fe8c6cea67a8c4f3bec7320d306fb5fd022e895cdde67bace28e631416f0e198671d91ef782ff012efc9adf3998ffd554940003bcaebc92da7e6640f0e316a0617dd5a7868821eeff5af720c4012e686818cedd6bed7f23b735c80c4599e42ac419c832490bf1f60f12726f4b5fc626e0debd9d438a9e53a61e129b836b9b542e88138225277a692221ab4eb10d1e4e249b70e3a62691e64614e00a8aa7328c28f022954ca2bab62670ec45a563e6203f24ad0ba1cce71d8ae81d225b2019dc7c5cabfd94ba7bc2751b5b9d5a0b6705ece4c118ed26c9cb5385c8ad5f82b74de51e35cf9aae607ea47853f209352742c8a4656a5af0eb7fb81b088fbfe36e4ca2335c5e3248e23c6aedc34a683079288b3842550c611a0e526da7a050d1a4fd9fff28259b0f12aa1bec6895bc82009d36908aa3002b0a22dee98d66a2a003a8de487612a41d5ab31283d558835e29d8dee91de408c00419317939aea041bdcf06c1a8de43cead5ad0107d382fecfc4ea5ba8466bd2bd2a9b9912efbe9a202b7a8009340a5cadb59b09d1fc0109bb47d760d3393d962187f55ddc25aba1be53aa56fc1b08725ec9e83c156bfc0a1fdbc40d4a653b6f07621d74537c1ee8a6d6426f0c7f8e0f351bed1a67da1b9130d07ac0ff297a7ac2ad3fd3ab22695f75c26ded60a06ede5f09f44da195ebaed6d4ae5f614330703ac5ccfc9e140276cc84c62e9682ac5bb82e8658c180e37929c882e46c4186b4be19792a7bf0860e5e90b5614fc15eaa85c4d8b4ddcc394104627bd7dd5d5b53c3ba9cb9ef8853f47d2a055711d5f5c49668d95516310008b5c4f1f36e4541e87b3a2b9de45b70b4e6a5202e5af4f14a6519fc5ccd1e77652467b362f3938c37df243383cdbf92c3b1b2691e56d93b69be814e859a7dccfb6c3233a8f646e47d3d2a033b64f7f9dc427e43bd5f3b90b4ded87216fe2ff05ebe28c613836cdf30b71274e015b32ae0407ef1327c12586a0b24e4b961eb3c09cd7a364e999815f49d8870f21dbe35312b5df88046528cf6c8ebf4e5a86ee6ca3cbd762b16de2897362e1520016549755c8f4ed35a5b0fe9a5924e99a089a8ac7ae897f0aa438076e0503aa0cbd2cfc064ffbf741d3ad674464eff019e7424e229ab25083fc826b83ad606cd5a65471b7acebcda11032fbda7bea4b81e05b649983fe2030202fc94537cae88be4a6006b8fea2ba96152b2fc048c83ec8ccdbd546aa71a65847e8020621737de63a1616e35cbeb78ea1081ad632c2aadad5262edaf1fc8afeb28a02efe4e8ccc4e2b32caa57a54cded2b99cf48d14efc53d896fe665c79232f92034735bcd09828538efa9f40d8f5e0238c1b5c6c2bcc485f816cacb387a1c18f538c299ea9bc5feffcff3057098c067d6b7cc522208a35d92997a40a9b658e19fa775b90f9b7bb02d05276c185eb20b99833ac0f06855e39e7f6cb9e3bf9d689ac92fb1da4ed527c82e343aebc5493b70ccb0e2d0fa268267646bb22dff0eaaec208bed6606ae2d5a5aacc523d9d15361f3b321c30a93aa7586e549e84a5b62add0dba0dbfec5c48ea8c522ff3871759e6fc7e38e0c2a3d68efbae4f6b78414925f294a3eca1b270ee7888f9c503925718ff15501066d5cf596b90fea0f79627c22c43f211e1a1c83ef5e25a4fe096df4f3174ecc300af0466d4ca75848bb9b309d61310a38701f55d47154c6bf0318ab1f12a2d0f6917e7cbe80a0e60880fafbdcbeaf2a4d2c68ee63c43415304e925a87b48d0257b6eacac3688e6316545dedc7fc04d538ab3a99af405b75fc00dd71a6d21e58a15cb8fd7217362ffc44b9c7b86d2702d8175241f48e7b9e015767ea60e54b193575620d347dbd4fccd995bc36d9002d84c656a48eab359cb09295b3676f2da9b45aab9346af02ec4e2454dd060d850a8799fbdd9fc45df8110b6090d41332a3eb472332336c14257237150633338348ad092ce4bfdef00ce468f0f0891fb5fbfb6d727ea4583e148a79d20e772be98436a7f591eaffdbd293a3616c84ba323f8efc94fffc423c8c194c029e2a9bb6a86a07994f4f2514834fc09ec7932150a8bab55e55f3f78dbe88f40cc2453c97b63b6382ab2a959729815b3008d15d6d31d84af7dba237c0b44689bf62cb66e92aedd882da966a94e9dadd8a4ee699cdabea32bb16b3941085aa1cd77608ad4a244320af799509ae97435d021dfa1c027ca9f6374028951cd54ebf730f67608bbc3ee8a9b03d59121107e0510dd633b88654a1ecba6286b8e11cf6181aba45a3c196d99809b9a2e1668ca2ed0382b4812b5e3d7d2cd4fa890a3c725db5f90d36ab91e6d60df7d033cb344ccb8f06c33ad8adc5c94a67dca7553a569a55086a376e0398482aefc17eb4320caa90263b694efa0380a558155c8ad78468e384e5ba1cbd4010b61a335ca7b3b0eed8358ec2d5f7b96af7f401f3279eab9861ab938b56abe302f44592c19540b80532c0dc0284e151e5208b525c01b55a71e2a9417ea23d6edb8d358c70050e8223a87729d8ee6a05644212f854c9e2570506cb29405975d026af131cda706ec3bc2fad9bd34f8eefeaea63e6444abfff5d5ca587635ba708df63ac989a596767262573a45cbf51cd1e7ab4996b8586019ce9015153daf65b281679aa2c1ee1af6df90a4bba060fb33eea1999bfb584fcc1caeeec362c91907bd50ef361f7a2b75bd95e23f0a4da1509d8eda3bdb9f6ea64cb95ce3e08607ce7602dd0b5900f7d93fb984fad9e481ad46dbc83d284dc12d70ff9b693bbbb6dab1839fa7f7ce025584cde5349e2b3d3476812e6a2031c83de8e3bfe881b821825c59b03cab6ab752f06a9a30a7b65de4ab21336e42582e486c8d48c2da06f1a28ad314d4b177cbf51856e91580e8f4212f8d6d1334d709fde222f8181404b553be5a2660601c71a031bb6151b5e03d44ffe32937e9b8446826c5da200bf76d4b97e657ec5ae824e240532fd6dc723d3ffe25ed82447275cee2b16490ae89fb63e225d1794a77615d0ff743003c1254540de8c828e219ef227a7d556b51f9f3fba54bbf4d0081dac5f9369e940b9f31b2f4866580a50dd5ab9247ec4189ae0e401d85516a2534e002082702aae996527744b7db7a13e67d5d639e0c0d084aa323ec8331c75220fe16205411482da3d1e019827ce8fa109158198857ca736122193e8be6e608869dc76a25efd2715a31eba1c9118bf84d61f06f23ac6971d4e809c713ae185f6c4c3d80907e17098b739e615f0c8dceaffe8d346ec9348280cbfaec969d577aec1845980a3801a01b30032b52888d91a89c803f3d0fdaddcce2508e0452d80a71d28793d856d5d68e192b650a4f7a8006774739d203be4d08401843c0e8d974e6122b9ddf380ebf0c6f8d88d74619053a3a61deb9b9e14b170a88fd0080668e0f4518dd19a45671bfd6ba5bebe79bc486296723110693d09a35b3987c2c24a3c811e48327c1d68b7817dc4fdb9bbbeb1b3761262039a8dce37b52aad64b281dd2a016d6f60fb061173698dfd8d141859a3d896b9bf3736334600f23476c5098feb64513a539e5c3b37d1c7a739a827118b2dc9c3e0784a9a8ebbd4d33542cff285eebb95997db777e237138aebc7ac1cb6c5328101fb96681d2a2210ef63190223d909e2b1bcac4790ef748d5acecde4e0f7cbf243c3772a37b48c64ba6d435a47ebfe4fb9cad537fe49d4ba07b24e51fa1b0f1fa15d304773c41b422a893346246de80ca71bf3e91b5f968f6c9951419ec1849c92a86bf9fa69383019a11dc9e7e5a240d66efb76c31decfbeda93345b0dd395069d54d50a0a24ae401bf5132d85f252b358219613d4cacf7ae0227ec9aa5c32c8f304d8bc38124dae220e6ac7cdc14b17b44b1f1df61526638a1cb9a289a3578cefa650173c594f8eefa99d20f9447748389574108718098969bc2f03fbb94e3ae0ff6e26ad6a774b2e606f16f0f5eaf6235bf1adeab6a898100f1ef08639e018353d015bf9430f222bebf6bdea7625d180fdbc6c159ec2e99ce2b607d827dab9aca8d82d6db302cdd23784d8002d50381a76e772b0eda0952d8d943918ba06a22ddb3028217a07514dee8d4926486994896d31b334497da11aa28aca62499ac8d20fa0181672e057d6ad4ec7d5e92dc4ccc5d5168fb69ed4927422597ede5a4a1bcbdf6235f4768aadee99972e5c740d82784c1268735e830001033345de1ee965080f35e6668047b215da61b228af3955d0d3b2afe68c4a1c2d823e229bd0aa41568f084571eb4e175003b8b502390b628ee22102ca746a05dfbdac3b65e0c9fe3ef901935e3662f4223e432afffda521d27e39fa585e2bcb4de3ee496daefebe35951a642f22fbd06915f7f3d20855e89891656f95397582e1b8aee9aec7dd095133e45cc0b246e4adc52f71926aa0df1fc00e221a420e7b3e3cd19743c55514331e034388cc0ed3b66ca00b8c4cc573c5da5c0a0e29ee675e55006fccf03dcb4603c595f106c3dfe1a7f0c2ae038a936d32baae170d13716b3dc99f14b73f8277eb01b47ce3295bcad7cf25d7a549bc1187cfbb639dfbfd38392f6a0c425e6e0ce38d4650176458fd2cd6bb9a7041c81e53239d723331bc2da7133fe43664970341b52259c5e78e498e91fdf8aaa3094ef26cc0da971fdc4705be042651b252e5cd9faffb0ec4fcad2ae5b27147e723c9f079412aa69eec1863935d95d89203e3aed25924cb82e023e94b9a290ed16ecb0c4b6520563d101447413a2daf17b139a489cd7f34fbab38c811013ed83dae56fb7a085f9ab3379c86799ae0f84115853e7f614d62496d5bc29a62e3fc4665090244357176e5c65770ff50766962e886a72811d7e55cca0c3078c28fca0393ffc62988f58ba5745d72eee1fea3ebb22f1e83f40e712cc7c6305079ea6ca14299cb8e7db69ab6dfcd818497e01082d3bd4095e3b449e44c9f595383e3e1a42b220ee1bfcefee013e9a79a9b064a55c0e5ae851f4d2717dd6a02f0e27a2de44d8d7dbd4a8658a10e6b5fda32dc96a7d804d7744982be6e022cb2afcbc84dcf03f50d0c65d36bd4a7e665ca3ec52711c39599cce7bf1b03bd4178a6308efd531556e0f9d0fd7f74a487205e40090c8aec51dfc793a002195dc2e6188508362aeb34801c9bd3dd972ba1ac8f35c8ef334fbc293767ad0e1db06b69ce67691a16a1a5dcabee11bf218e36420b4935099d3609f7d7672ba95205b9c454911ffb7382db9b6ef7dc89d140390d24244106e3f3cbcfec265125fa15bfab0885025197b3f3c81b0f945810bc09d6f9393b30765cfba890030b4b7a00081bc068fd2b6f7e8bf9f971b50d036d391787e1cf8f3c97ef463e80589ec0155d48ccdf58608ea5ec0358e4a7efff6d7f7bd947cdc184b0fc9c22723e404ef915c035766e379cec645e6333ca0e2060e9eec14fa19655c6072c2130a6c64ca7c2a32c9551e5dc6786f913f03b77111f524af3f02dfda3562b5d46689031250778bddb48453a623096cdc0f67f7b4cd67cb95453b7dc622beb9d12d1f3f25410180b732eb9dcf6cc6c6d5b51878e476be95bc87df06d91728344e23897953a97414796f275000b9eb7f11e089dad1e3230722aba960128e47289563fda6d4ce1878ce3b1d8d8b07e95b76490370b9d45374ba0fc60dba5dea6b58462989af71908d794cc1d186f8808b077b1f4db582849812cdd38fc88adb81e86caa723eada2214179177c231e4aa42f4feca9629aac4d6fd45ccffaf145843731acb4113399c828ceefeeeca441aa6a2d68e8935282c02d903989393ee3067c130da2678a3908636bbda463f9ecbc0aad564bdfc4a460f5c9216c5699904346eea36ecee92f6bb1501a931f1ee19ea1152ea16cc4696e914c169a1bc70af06e169e05b99d056867aa155c41cdd26a37ee6e66ec4b53bf68e4fabed90932d7e240d1df92de2ee8926b22f4693344607207ae65c9e1ca986f7989eba6becff6d8c9e037e047fd95c7f5c77a86842845a1ae7c7855d584d72978bb094d8918b8c8f8e223329cca9e9af5cb4bccf66cd7215042a664041795451e10078d9d2cf735de32c24a4e7d6b1771962138c16c967a578469c9e0e2ae9b65ba095e4e17d9e44da139bf5fc41963be7e3d4419a30e954dfca49feb01727a710c4c82535078cdcd5d0de29370b1b4a5e242c67a6bc2cfb9f67caeb567fbb59999e39b9f0d6f61b90f45733c5ea4858b149e7d9a32c65fcb338461445820ae61c87b9364787ebe329f9b404850e1046cd380b36c7202226b55a9d2229c91808cd1679da2b80aa73137bca3535cd05f239a5c084895c29b23a8943d9d00eccddffd5b4859054c6f982e06bd4e8002795471c75b0363bf64e91a0a1d7770660177e9d90a7edcfde30bf721baeb5091173484a9f95e38e36d83acc9739326575cf70e4fd31610a795d55c992182fca28904b9594a09ffcedb4866bb2a23ac601ba1bea2f6a827bc55b0357956e750f05df09621dbc407c3dd636fe4607e1ee22c5755a3e3f83750f22592be26932cb32fa353670421922e4997e0c17e8bb1a606dd1607e0ba3600b8b0452080d6ddd1a6095bd5677790d8bf9eb103a24c22b1ad41e77b67f4ffec11c917ca10917162b34b4163cb7e4deedb6a674db396b5a5e1e54a1efa8f389da4d94e7eeafb7ed6dc694c04785ed5d4f8d6f51bd2643c22b20600a5a4d06c0efa8b4c3a1356a8987505db433711971d8c100a1f143c382e3b40acbb3f4dcc08061fbcf068dea547840c01c7ca885440c7298deeea68ec73c881049fbb517578da74d8f09825f2f55576da1f3fae2585bd013904e60c20b1f68cfe42d14394b90d214efab774964f57c2235d7a900c4ef0a26c5ceadd243304a9a8f773bd92c2ec5af7248e36c39be141840c49a37c703e98ec6cddab97ef15e85121c5677fe4454b940741cda6595c4ca762126e0ed559ff3789f986db23866e3f3d8f1de2154ca45fd30b31928a48ee18b3918b60b291cc232b903444d57d667ca5ed09433ead018aa31a3caa41e610e66d75a9e388328a59433e9b8db6cb8e0adebb52f91fb3f5848dba5f05f45f8d370c746399a94948d344ba8961fa72ad3a580c45e5d4ff394f293518e3308aea2f2f7ef2ab82a0a9a19e062f95be60454c83619e6e997b00b9d77ade6ceb7ab1f889af7a995bf77d03bf6880309b81def61f05d965b56f89d7cd85b82a7c62d7336e20fc17ed110b8cce3006921b3843e1b189f5ec328e57cfb13099004433d2ca48de41a41bf70ec8a986771a45b70fc16446ad2775cd3564f896845b151177abaf2aabdde14c0f7a12dd69d7d350e52d4c8e3989c6edc6398ee36cd8d2de624eb2a53d68d11ebb47641c347ac13e5794b54a7a3d719c14158d13ba424217fead28a72edb4ec378da6597907cf497ab8a7f78bb09ee5161916eb942c30c7587ef0d9564114fc1a1d51d1fcfba0836f7bbdc9dfed63589c48b2e9ee7efdf07b95486cfb8f4282b119a2f2f2084d4b97cde54c628b75ffe0e5c19b3e74383e1f89b4dcfd194677a3c6fb087d9b2b4de2ce384c39029c9aebdfa60b8635ffbfebf007d7ac7e3e4c86e94a67bbf488830e27bd08377e0f252706df0c557a7d78fb44adeb1bcb8489fde21ebaf43678fd28f7e957347d180efc1e42cf57f9e2099e8d0f09b5653d053ba8bb25582f530505b834c3f961d8f9b8a093d31f78c78ba8129a323531315aeb5b65b433ec95c11ffaf901077bd0ae21409758cb2d5c499ab2a861f7cf1abc8d663b753653cd7f2dd523c9f81af131b3e5ab8fa0b1552d7a7293004d0ea9d00f7e37dc82033a53369cdc6014cf51e7d9bbd769060e44f27669c466f2d241a6462895dccf6883e54277bb32a99c0f6625ea82b2eeeab5636d25a535fdbdbc333f024e1e8dc516f17128c3c69f8483db83bf062fb748689136ec437e589d58026b2f536a352a70b5920ff89e92bb964b110d7f1467588c9f6ddfbcca98eb3fa2f66c2f92ed4184bf698cacb29fb088c7a8e5274d1e4feb437eaf6d3748ae99429fb8d8c0e758599aa017233db8d2c1d3afe60165b57a031417dea11a0d0ee9ba3d70af2797ec130ed1d2c0955f5f12e72fdb830d90c9022d5bc41839182a39c9d980764f56f2ddda917fdef9009d2e0004bb17fb5bafad869f2be5e92d4d893b0b7661ab3bc8764761e4ce77e2d359e317600bf18dae87c0fe5954eafe0bf96621b760ce3940028071e2dd1f927ad766abbe4d3dc50cef5bb8a385a04678e0037fb08e7c360a03f5a326056d623232424f78fce65dfa24f13665dd12ca1177d1b74b63b4fe98d485dfba385a0524beac389dbc33b9efc7fab9d0f67cc07e598c3e42f77dfb0b0376785370ccb7df4a1ed273c0cf72729dd9b9f538099555ae882a3fe1b06e40765c632242163e686178fa517d029fa2051da816d5e11e5cfded2c5b7796802259c1a10b620658eb9461d85e0eef133db967d914f05479dff0d555a7237c9d38ac3d4b35135dcb67e6842ace1cab9f0321c0d5b178663f49ed65817be14a2c07480fa4895623e73fc816a4595a7f440a27030abf6d8b3047e0c36186de872b9246f71672c6fa4544a046e4790a958d8aa7a47d458c2b09a1089f11091a858a513b17f454ffbbd6dd3099072d2efab79885d5d46ca74b50531d218eea0d35ba4c30b400bdf3bbd21e4cd149e171e4ef88b45fc2a987aa801952db9d8007f4372ab805f07e4d0510cc4442e8cdf477e12bd9879a7661d00ee207e1fe95c405644a450bde0e2764ac4f2e4d8426af96a81faa1f78a8a54d164da04b9a5fa68a6b8c91dd04ce835ca403fe4fbc30561b261220e9c36497de1e735a58da203edfa808a1d3d5fd5f6cbfbd234d75ecba7a04ed314e2844479426f050f7793f6fa0571b4fa9dbcb50d251b7dfebe72cd0c3d6f0009f7f3b2e18ac6cdd09e1ed233b62216aaaac170d3d86418ac9f80b78cec8478ba57bd83e7d98be276bac7b48f092b30158ed37893dd7d616b802300a54ee84c6bc391735ffaadc808a210f30aca2e140306c171e85428fb85165d00a896026eebad59f77ae78ca7420a6b0b509505914ce4de2f6e49c574cc1ffb45ea1f198e697976a1f31b417b91e278b04d161d7e2221334e97f473c842e2e3ace5c6394fa49e42d8cc01e3c8208173740347b751c083bc6f51cbef46113464e7559eba343c73c46909f343c2f42b779c43bb5dfda93180cc62a1a37e07b00cc2305747ef3c371ab27015088276c6e71f4c72fa1b99fc3b34af8582aff0787ba861d2cd959269b8dbf9d2eb4fc513f44b96e1eb955b2ea93b84301199321ad575e9aeba6d1d9058dd5d12818da99c43047c6d38ec3cddfab03d190023a256981e2117f5845b4b980183491ec30c3434779e602619a255c2abebebd8d7718f8605b1a59416bee0dd78db8b6e9071e63133df69ff44ad9da466d8a50d4a034eb80869bec8bf65b9d4b97a8e04cce82860bcf19dc09fb3a00c519911c07ebd7fec10a7c0ed32d76033d082b053776b3c1a9d80db379060ebdf27ab659a18925b4e5a76a71baada13c698c669b3635c0ae1a8c1afd4318a60ebeb469bfda54ff16c61b981ca8ce1f621e9e73b40d7bf4bfd71957b7d6fe82e046b081d9158c4892de7aa4451337dc7380db0e54502bd5eef258be43f9fc5bc128fcf288987c003b83d0cb9c2618378f113f3901742a4e3fecbb682ee39834224f30eb7277e5a6514546fe2d454e055bc2e04d8fa0784da5c5957fa79846d1fe7b765aafd554c5766790ebca2a1f167f50f6ef411e2f9c60041254bdffcc8a4fb90b230b082d733aaacc97ff42e28fe33bceb00d7c916bf328cd529560574ea3c8740f51f0e21c365539b861a4da12a5e73927116a96adf7ac95016542dba9e5446b09a376d068db2b1b60da2539ffba1955061700782cfd2afaa72dac2a9fa4a7a4ccda5ead8daecee2b3214b06ca7bf9c8eddfb54a987783097241d2f05a47f327cd7bf6eb9eac9005df6cf0012fce5a1820f6d60587f921af7b0e5a1415d08c334b49e87b966ca3ac7b51719d658ad8b4fa00299e6ebca315c2061dc001249cb8be2a53a3f3cd724c20c451c11559ae41b9b391c831a360a96cdc574d7bf863c907397055f6574aa1ad02cb88162442a8ca6b19dfe244db4c63e3c3d71e246a572d8704009134a3cbd6a5c8a54c89ce300af9636373c910034762efe80d2044bcb16b98bc9ef3075e73e902453d2d951859caa553b905558b7693d50a9046b4b5174bab40b8fe88168f627234bff79e60e37867760b5c46d0cd3cc2ece7271a9b62f3a9775d9c6170d867b33bc1fb61941b24fa1a84e5c9da3fe10f3338f44187d2c3f3faa93aafce2420300cf003e5c0ce81d5b144e4e1131d624086fb212f5195cbe00a28f912f42843d2db70b5e166edb355f2e5643f56be8a17353cc1f917d7614672a219bf0f9c84110cd0ebae1e6f40d5dd84beaf594317962e1a95f627fd2af1873a57fba24d5e976cf77ba3016d305cc9bceaa7ec5f397ae12343c2bcb249631582680b3beb2a4f8967c80616c3643871503307577000ee16561ed64a4057c321e21ff258a797952375f7f052eebc4e67a14d6412c000e25c4f42d3ade106ae7772ae38aa293a78c6838f6c4773211eed8a53de7d30a5575209b8e8b8be55b409c03460733c53907bee0c8af473c79a3df9c134851bc476fb4ff247046c2d3c51506f91ef113d42e90d7d9641e52bb28b9639c44666c526612410c97137b31d4a0ef5b02d92ad195037d27403797045335f685049c4659babcdc0283c065768057c23a70ec5e0af87a4ac6805e1d4814a940f91ca07a3bdf2f05a36abd4703d770517bd4289ed4550f6a8b3bbd3a2ce40ec055c37422be3203a38e0d48ac1c0413ae74bdc5d694be13a9297d192db938789b3a4e6071eb395cd2a27f3761ae38da3e3a21124f6fe7ec67b4f449dab019a138e5c0629676af46484f70ebcc00ab40959815fe7cb3677d122e2239ddcb82081ad34b2841c5453231ef6b3b44aec98990b964848a4b733eca97c525f162d615b563e5f7c5ec63cf274ecb9bb54e3ff873883143fb74e49ac0982f566c7d0b09d3b8ac7d70239edc109da148868a3fc3dd44113c0d6704b3143b1e315cde031a9828ab27da665d35afdf48747ec091d33fb3ab43cad11bb2d8c59c42218369ad1263358c734c46e8934b3c717b526c3f8af06714fb37cfe1bc8f68c5ad4b6d4e8aca03c34d982431990bb007e3dc09e167dfe309b4cbe79d728622cb9fe6e611b251af214f7d0050359651223a8659b019d6e106ebe776e08b6f3b07565f9c160b8b98d7635c7bc9b0c6d5ba78023dc8022716832121e01b7236be5d8d9adeab3e46c2f34141efb2d9c4ce92472f92a53981c005f73fca32baa6b06dad563c20b32112fcd0c08fe08474aa192fe22350b1334e81b1fd3bf48bfae520af1f2589251e9829180646b6be40a8425a17310e6aa3d63bfc22fad3229b994697b31aeb74714028ade89cd9ceae04db4aad355383fa46c9f14b19f687972dabd46827161eeaf7bc699909ec60d5685f91ea8de29f26a64e8dbb497bd10e3c054526a170ca890f53b2127ea6eb289b8a3ad2addd7ba0f689cb6023eb5f0862a8b9a7c36bb1241cb97dee3e5e60eba21a9ce38ce4e59c8e939d91cced00a3e056eb43a3b497e63415c318a2deebc68c24faf8a5c039cff455a68a4e5f9be83cdbef03189dea07be516e353ef99d22e1ecc9f3a28ceaf1d1289e3094db1946d3b34fe426ba6600d75a0c198477ea64a6613ab712f8a6ffa4ff97f3688e12d47cea890a1db4f5045d715968120cb6bb291fe9451908dce6f404768e309f4fc776e25d2a9dd263105d21602178f5c046019de8543fa39492d0aadc672927da7c95200401bb00593e442aca1b3fd4c9637992e99d3139c776b6daa3dc2557e078c7b628dbd526b9240b8901404c916b97bd390590d6075b2cef26643a98eba23293470eb2e542c4f6bb56dc39a9d88d19cde1e410a111c5f6e646a1886c01100e073aababa56e2ffa8a87296d0f6a56845a3676917801b83a2e8a1b3d895e37d3f9d59ca3184949f15c295a85d577b2e9e5625fe9f1a104e6aafbb3616744773f48772548250e9a0eb9f5b3084a5cf26feb746a822bb5fbb7465d133e3435c614d05d86d574e1fb7c84a7209361c5e4c9335e1c53619a6066b3beadec2046e9e9a60aaf2e16f349fa1f693b44ed4479e68d211965ac643f8d2e60fd5dc00d5fce1612289fbe0e7a00e6689df4aecddfe453fb1d3a50d304c8b2f4c17223d9c85e38979a7745f119a9f0e71d6ea9120d2e6fd7530590e50891fc0514fdecad542cd3baaa7a00184172552fac9749a69bf7f6f63ee34f4c05c342521df69bbc34a0f4f7def17ea2f0830a55872515929f4605cf3508cc8c48d7960bc49f168cd801f76133c2080b1cc5be98bf8644b651fad74ab6c1a8c4b2cd15596c720641174f5abc9305e8f51d7d07e3f0ce3431a4b2df71a6047acb28a802ca2cb54560066f60f93025c87dc41a29744838239e116b25b351010c482aab3c05c19d4593604223fe6f845cf6c22d6ce1e2452cbd1c19163889e4b3f1adac55af085c1916cf7286b6681db47f53172eb865ca039819877c86316d655fe17c5544ad3a6902c46f333851252c9e57033b220539459cc370657e5406d34490a1c5a33cabb0fdee41c8d387cf643a60f1d52b176f5f1031359faeb2b29ea9220bf1a69c127751960ec80b6dfc01e61927e2854e6af457b8e4273e8940a2d6944b8e5711c4c7312a8a204174ddd5c545a3b3330087a3b4f11763e7ada0ebdedb90ceacca92ded66d828542d42f916bc79796abadc63276763d15da9744311fd4ec9e88d11b08a7105cb7962ff109eaa695b17c0ba6a9988290b1941a15282d875e2cd84651a77c568283bba4815dad6b8a76ac92279a6c7f95cfac51515b3ad3811a8209817ff523e8f81a3e3626fb66d96da1713eecfe534eb7cc42af1534779c8acccda32fb5b4078825a45f886bd9cbc7bedc6b2944c38d603ff75dec371d6c97c081b579de215e541ea5effa0c1d59a2a371168848ff6d9a6f80249c4016e700d17541a87e20abcd8733f927c44dbc5066ff40c68dcf3044679f333b9b7353234dff479d065335bbe9f089d6653a73cfd7c86744e546f64593858a5a2b5e2f42c4e24f6deb81bbe32938aef92e45245a1cf5aec8a85f1f5b1134be5afa21e3aa345b511416de19e32f8d17ccba3ec432a8894f00e75a14c7ae64698cd6ef91b7163d3888705ffc206336621616d00846fb5b41b3a361b5916f3822b24bc1551242192a2e91c176b2ba502c68386ae8461294da7524603d5434aac857de59ac5b59c8d621a5b2673af10e1c19a62f1213a9bb8b1aaabbe0d651aa3639868bb4ac4b4ae928e516731a829b38eaa097ea733bb1fc7297bc1c72c66027306eac99ee305bd1f52a6a340f578512a38d2d5f45811f1ed4b80769c1b2ee67607c840a631455ac3f21f880e2c22a2c1c49df475b83e2524c869bf155f8adef1564fbaba5940bbab3774a299b8835a5e4479f26a148e5df77314bf02ebcae32b8bcf8f0940ad847feb42f397227e6a3d51b562c83baaf8e5c038e87341557dea23b082b3f5f04f432b275feb46c00527e2426e90a9d21e86ff9f29290f1312bceba49257111271534d0a18e7508f5d1ad8bc3912e39da6ca36a8024a03b0376711301b6f2253f6bbd9f19002717e9b4b7c27f04bc7ac2eb9a55e80ba76b208c7a4807a35063ae9d7451bc24daaa0a752128c29c40880a9297dc414d39dfbe7180f5e18b26b1bc1ab6a8f8ae62086397d775f23d3495d979e04d9e6d4dfd50296a75c632e2b5246de87f6df2b8b0df35a038c72e6eaa1878d337dfd514fc2e2a7af9d10bbfca90f7925b41317eceeac3260093358c378f06af6f4a92a5e833b9c19963fe1587f5bb23e2c054e2fa38e23319aad264ee5af38aa7a8353eaf3787ac40fd1bc616f06dc9a362726a503abc2aba858292da11af494b2ddab8c26ce59e724b67b07e14217ac8bf2d67ed240c1582e18d615c6009e5c72d6a8ef82c86600d36e40dc971f0c7ef2dc88404d38daac2242b64654bcdbf862d9ff4e9e836666aa9a76f470d1455c4a8df81711ffb5de7f5ab475eba13383e06bfb7652d16ec7c37ce95270ba8710b68a402adae54498fc5e6e90f87e1caaae6becd217149af1b0e3d71ee0d60c4a3c0ece0b38cd8048a510f63c31f3ab9eb55fccef56c600d465283899dd63f042950d0a03b9684e98ad0162e07ab5d2afcb94c25b7baba54fae4295b097a85fcd740f2ba1d4fdc05e61b36a0910f313101bfb2ae1d201882274d4065c7b8aab76f0ff1a8219f4a05e37425b5761234842fa06b2f4ee542e93e7d8f20aecc82b792698476243e1856fedaeb8a7f5f152a2b0a2a8169573c3f4a0a0479595bf4111c99a8e2954ebc9b60e1d90e14ec83a2ec5e78ef7523dfc98507762cdc5dd7e78dd6190b818040ba9d2f01401fd304b203cfcaf3680127c65e8eaa51ac9d076c02cad8a8748197774f3e4548c33b7e586d973fae53a4df9502a543082dc8bf01e24b6d11a5663aea5aca6edf7a82d06c1c4e57286482661e25d865463cb6162268426da1ced0790f15f06a030234c3fcef95582014d6211d3bacf5da8a8eda61786189ac5148946db0b0c3902c3f680fece487dc6973a9725dc88f6c50a899d1336a46bfa59556848452dff88c108eb7be8ef802cd26664348cb097cf4ceaa7e9b646a2ce0dcd1223c2396f49ca0e82a0604120cb068bea222cad16ab6243bc533a4fe11c07a5b5120ed110414af8393c04d3e4f5ae5b29c4882f68cc00ca94abb18684ed7eaf766d485aec99e464ff666ab9705ae365e5c76a9a9e58da902cb091f313ba84b9a4a7a1882d2a65ff7de1df7418055f4d899513f214c0cbd7e262858de1b45940f35f39756e381e79173c34de8156fa87b627832ef63afe9109fd91f03d35270f2f4aca1116931372ca85360ead62cc29adf5a067c6eebcf47f8ad2d143fc75249c2c25f4b0d1dfb633e3dafe01649d8b456973979e23dbfae11b834e84605ea1df7a3402835cf901126f60abfcefc52744a1bd7220b2bee83b200c7d0892aa491befa37ef704261a29a81b0fb8957843f0cd1247620460ed7ba9214dd09b982dea13d9d4f27a23890065e074e6216807db2836a92038c6491c1941c3e8873e98690a29da5639670cb2d450debb4e6f5c1e3819f9cf2d067ca6a606be6ce0c7d6a5b57555fed45ecb002c541125958946bc029c3e392a2019dd8cb4cdc3adb61df303981d731cee39587116afa307c8c5b07812f97dcff6d59f168f2d78951e31f07d4d4e6d5c83ee534eb8e9a76a07081c14c05bcae01fa2a094060508c694d073258b0cac25c05c01967486bf61e6ffcae842eddb4f7dbff6e99f09daf1dfe75811d9582d0d1cc45772b51ec6e10580fa30000000044c8301cf5a44217559ab0fdd870a5a2ba08c546d41db6b52ada425a93b29bdc7b6f29659201260456048e039bc65aad564beb8c81a9805bcf965bcf15baa222e4e2c643240be2eaf3c6e3434422d544e68ae8027774a7664c75d1976b71a782a668a2904f44b2750d8e0e5bd02d6c174b7d0769afcfdb4e1011898ef19b559fb71d1f9dd5e76d67a8931c67079c14eca9ea5cc0c0439847109f1d4011869b0f939b0f944f148f50df371ea2bee7057878bcaa2d566e3b4eb79d19bedb4e922370521393c60020aef08928882970b47e801b9686a85e382a62443eb7a4b5d62a99735a1a7b266f0408389e791e3fb09ce32b2c30420499b36ce8e4b119819b62f6d85400fd0cfb2a09ca6f40cc6d30bec16f332b5f6191885ef1cb3b9d5ba361a47e0f0a3843b0a40cd2ec540412fdafc28dc8099c74ef8af1d79a1a8e8a277003685192a8e99afd2e13a845292fa8d5c0bc90c142f93b6c28b99404a0a95d994da21250fb22ddd37c5272b52fc645810a9411bc8c911204a4efe031a6dc3556ed996655d10a3a6ce8f15e6ee5ac024549091755b34b6d6a8418250d251101d482286f78212e33886610d3896dd53e8409e57dcc2ccf03131d7a88617af119b3844259a69c824309abf54c1760e408da11a6050f199052290750ad1fcdbaaeebbaaeeb3a1eff03e8811881809a0fe5eb306b78c00e4a254ecdca9772fe60a654408d06a47440cd05116ae616aa2665046a38ccf038a264e86a73ca4b9967861800cb016a7fe386a9728a812a19500b9a609094260420c99272872425044c54806725e6abcc909194b876653e4da9b20035a372c68f13aae01083069825495e18e93d9aa2f450fe8c0ba4e810228b121a12e527866ee401e5ec4cb928235484ca141746dde8c8938fe19316509b4d93872c357c90a166a41cfa1d1aa54d0d0633a50ae5d4624188da87f1c8bc15259306593997d4cacc1cb490a1928254c9a4acb5b0964329a2e67ac156de1917d8b88490c2cc8626193e656674a3b1c654ce3035d4b6b450fe0f0c2505784eed0b102595d2c9d74e285fb5149ca0754035eb910313a232555ccf14956e444259c2e7544aa0c6a25641ed6ddcd4e60bffc3c4e2746b40ed8fa44cdb192148509ce7f1744fea4b67adb65686e7793b4ba4a23e089518a4138568dbd1104cfa6be500a551ead94a27fd2cb6521f0060467f65599e35f81cc09f7382167682feb08f769c8d1960ec730919a63e0300ce39573419bca8a2b149e648ff0e014d726ccd9021f2f3e64b5065b92e6bf05f3950b9e5381637d2bea27b9a039c7409199e9af3e19f262c8d593b8ea0e3fcce7559878ff408be779cf3f11c05b5cf51d02d16e3fa7d5acf0268ca672531a21b79684373b40bc733a905555b8ee3382e64317e218bf92af0119000377af2d90d6084713d2d2880f9d14ac700e8e7340260057a5a10d358c7c352db686e03b5d65a6bad754408f5c66687489adcdb86dfc444e8370366e0bbb8f5b42100b4e62981fb700b7cd4020a819a9bef7b3d00dcdba541007e1f8d0e4b97cabab7b77793a8ac77fccbf9cb63c7f3ec4ffc489260cc33cff332adafeebd37cfaceb45dc0045264d451634e5f3c6d227429a37a2222d2276d3e9be11f13cf971449df65702be6b4a8b4bf67603861b2cd818938ac70a3b104902c60521dc0d2929a9aaaecfdb8da539ffe7ffd7d071246dfabcdd409af373fda729f4cf18ed355730a56bad1c05a55d174b3f127ff9c8fff951ae5a1859f9ffff7fb56bd27a73d6de6e04756bad75bae113fab8d1627399126de82eddde869c86985425f071702ea8961a6912a772fc4915377de33ce03624a4d73e6f4327f4f0470fcd24c218a13343412a0cb5d853bbca4b98430fa10e39e80065d3e064db600ab9a88014642b49f2d1218e6043cc51c21852f2cc40b50398b02a4b68260a880d3f326c2c4a6847422d436a9020c28eeda4dc446a31c2a89a4f7843102910838316a51d361051f68ba63069c90f0b620d14c41d20418e786e8434d8903165e367039d49610cd50f3b569448d9456ac00186508c4d29053b8709a10d3c421f70e8a021c2a801b459a811c29e21153e750965e041dc818308e4b47b9a84532e84608a8835a51de523449223a452838a906c4b09ed6c13ca84247ce981e54685e969470ce10a49b6cdc81321210b235015ed16b5ed038d99e882468f28a32a1c214c68820f5ba6431194183483f8e2051b565881080a3ff617a34dc290d40c5a0f335c943113a60044105bc45409c7dc008606d1e886a48532296c2825402185588836d28c5d838c17473258843190115970d9e1cabe61ca2e9f846498882520d9b254e484137a846144d85e8444192d28e4416b115a99da495ef6ac872d398834284b9cf860aa4185a320e12da98a0e3336c2c480b193c4e03142157e01b363c892254a880dfb8a0ce1192544fa1e7941df2122cf8f0dc3d1e681481ca211be300b0aabcc76f614aa2061c212b48c50c587941e4f441d4d760ca6adc54868648828f4a3c951988588050d2118414360ec6c2b545dc28837b4ec1eaa389122f63c097968121261125b18c131247cf263473932220242630fc9829ac876c424aa508530a14dcb5eaab289a4883d9ec0d0e40653e8c5c86632a4851fe109479b07d1121a620841413b84a01d17a8c432cc9e41cbfe51450422255c7ab24b68b261308960048521a2093f9c8ea410854c686c324041bb0868274c01151061b696304a952629628c27529a845798ba18d94786842efc08a18e441c443f68fcf022489cbdd8a1412523cc0e427f5a764d7f55441e53c22350c21f64d8429688346c220945a6fc08e9248e0c3f7a98e407a993383838b5d6fa83a3d75a712a025aa0a005e5cf3fa8fcc71122f8fa1ea0e307b6ea7f80c90c2aea45abcf9b4f969eaaa0ce850f07c30ec9aa9d3e3c7c82fcf8147111c46e5db3eaf3e663eba4e64250b438436f1f2da375a3872388f321c38eb1fda46fd30baa7ba2c8f4fe7aaef4d818bfc97dde76649de438d706b5dd77cb7dde788afc3fad566e3c50d65aaebbf154f188e91bd623eb1bc491697cac562b10b4f52cb56ed3c37aa2f43f1868eb5cbf31464a46453ba4b0f406f479db41c4abb5e31ed45af557f9ecc63a33ad7650fbfc3868e7f3999f4f1d8ecffe7335e7bfb52399853860efbdf7fbcd351781b9089d53707c6539a62e9c31c699e316a594ba5c2eeae22c976b246946dd62d18cc1d103afaff26ceb5f91ed55a2946959966999a6f47596525949785a73eab978cdbd2359d36f9953c33f1e023629895b039b94c40bb677d757c6da9bcaf6ceb33ccbb33cab4a9a7a4c3b908aaa8ab67403f4792b4a5244a43ba0cf5b118ba2eec1488b659d7cf2479276fc7d23fef9139f4e071ff42f83fab57f32f2470f2889f9ccf813d1cac9fcb2a8394f1b29c5948ee4ffb038f5f8d36a8e8b7be3c7b5a6e11873176c5212342369bb66b1bcee81377b9f53aceec59563a03ff18d3acf3dde719a3378ee75a30660e76a91a6dd982334ab1fa86e3938ab9af4e6e056d7d6d7e93adda7d7cbcb20e5bceb74ad5ca73be53e5da85e3535d1e21d6df2bab17efd68936d82e2e03ed58ce4e7a2b94ede85fa0be55da8fefc5e1a9afbf4259ed626d66bec78e55eefd17cb0dae4791d0f5179cd586db6da68c6fbb4fab94fd76976562d22b114f526140bdad46b4e2d2afa5b11ac02293dad74cfbb4f5ce6f87daabca8e67c45f6b134e57040da902aa6951a2c9ac632e740c5b4529b2cbf4f7fe2efd385ba4f35ca456d4670516a5b515a54acfb7fce5b755d47499ad547699dabd5d66a57a3f5eaf7f18f4fba5a511925298e8e613a1e07a15b1a4a31a7980aad68461dccbd1aded9101bd48c24a594f6728d765c61ee594edace76e3881506e0cdc0722afb139677238a4a734ee1e276c47983bfbce6f5e2a44d41f306b8538ec16b242da5b3ffa7b60e62d8ec2b4c29a674e55118957d89e71f07b334303a8be9bdf76a35f598b1d53a96efcced080fa7e66070c32b4eaad85f4eb1e23a78bc2b8e41c5b33fb1ba239d7d098eff533aab2bc0ea9a92c4d9bc740bfabce958d2f1d3637dde7244e9283b9869dd3675fb48fce65bf195868508c1bd5549ab3749d7f33cefc27432d7e2b8cbf1fbdecdb3f7ee67f072aff7dd4f6996d18c83d22cfb13340b557083cb29bd9996f44f7937d6ee41ded1aabf766fbf3c1b49ca2bade6d82216a5619b6534d33ed33ae5ab157d8da4aea11ca7cffdf71dafa9dc2ed5d738922ab6ce334a69b675f0decbf18ecb60e559b67ace16dd24d5a4b74bb668a9e87e77e719a59cf4c0eb97d351c5ee39c35e5f2aeb977e9e7d89ab625f4faa9334c92e556d9702bcc23e1ab318539eede77f98b70239981884aedcf29b58c56295e65f0f590f9e0dcc9a31780dcc3e62b5baac4a29ebe361eb3724a86e39de5d0a8f3e65ad78cec0f7cfd258adb15e0db056b0b6480c701cc771dcf3f8e51f5fe141ef3e8fe43837aac0ddd62a20cde1f6cb3fe2729d8ed7cef187d9af36a1f457fc7b0ef2150b966276d6cc1db0ac9104398bc562f18ec53bce1a3f3e5774905f1415afe817a662f76fccb3eae115e0531deed3c7711f77c7112966bfe3e5f672bbe295afe81c8cc41e746f767ce6baa27b3015b8776fe5cba292cb34cfb37154c6ddcff2eb8d644d07c12ccb33229d5bea5f02f1790684ad13017c6b4713502ca3318f528e13514b6cedf8d5e3dc37daf1e74bd84fea1548a7483456f997a2184df9072307f4252c87c5e889237f4a2ea24a1c23b5e1ef075b929b932627283bbde86ab3699bb6692e365b929b932627a82c54a12ad4942ccb33305ad76c9b1b1e137fb8dc05a375cdb6b9e1312efa6bb6cd0d8fe55916b2e9265dc36d49b42dcfb24cdb4a5db9cd56a90d83b6bdda3acfa29680f685fa8ff7f38f355a6fc11c7cf047fce5bf5aa7d845eb5cce75f29796a88915f778ed9c50134dd40438621aafb77af3c0ee35b0fd3e9024d82b7d123561f92b51131fffcbbd123501f2cac52dcf2f7747318cfef8ece416bbe8ef36fc2686833bf99d1c318dc63ade413d73e69603c727919f74cb21d42bb749d22b27ea75de4490ca790bfc12c63f5fa2837ae6cc5e922dd51c6fe9c191fcd56a5cea35a9e6d491fc3a18ae4df888e6c23fb874b93897cbc5f18f0b972e17a6b95c2e2cfb1fedfa1f8d35cdd769b44bd3600c8481301006b2658e9cfacbe8f36664b3e4ec977b718cbdc7de63efb1f71e7fc174c88e7f1c84fe30b2768cbdbffc3fee690c5b759c97f1485aad5f98bff4eba55f2ffdc2fca5398aaa359f1debd748aee8afae356f8d282a7e8d28280de62c16d7af166f751c6f912defc547f26968c696d57cd249f548babc174b73974b734b63f5f3d6e87116d600ecab91ecf8e52328ffbc8ed3ffe9a0b5386e61a056abc5f14f0b97ad16fec1b456ab8565ffd3d23887d5d2b3e6600c8481301006f28e20d1fa01fabc1d59e9600bc37440e8d7cb59ebfc91b6e7d9bd5c5faeb3e6f9729dc98c4307e4f55e9c39be6307b56b1284ae7339c867de00e499a3a01a733c5259c7bcd3917c166bc4ad9c716e699b6e7be6ac91d63c858df61bc95187221996e11f5ce21f4cc3328c8b68ceb8c5bdfce239e7170cd30f9108a8f44b9a935246a301000843170000280c0886c342410e0421164cee0314000c689a365c4026250d23511445510cc3300cc33008820008020008c02010c61802723d000a6a9b8dcc186e4bffe3fb4fdfaf9bca47bf4bcd91320bf9f1d0f5f159fa5ad8101ba38f2655d947b54f5d5e9ed3ae7f46cb0f7a3d2c5ac7158a3e99e2c1489b2f256d0ca989984cb813f5fa1c3d8ba414903c4d52524125f03e21e45c2eb89e75be867eba8d3541ea07d1ce73dd85949fdbb973b91812de62398ae7091aa09990b5426d1120221a3a707e1c8d8fcf47c239bb71105da9cbe53dfedd9f28eafc73b801ad076fd6b188f75756c702279fd3974351200aa8ef3361ea1263f4269c9ff05427289479fd78a3e321899542385a781b8857f42b1091bbdf6936d9d9e42824d1af065bfc393cc0003f66a0abac4d51d9e3e5ca8b0d8beeb09b027c1267a0a17661621a1b39a45f746aa9942c8d284597a3b666cd37d71a97b19699878710460018e6f3f66b9d4a384589404288ef7438ed1bf4fc85ee145c911a6c771876aa64fac9ce98903af46075c31cd862b8b1b733ff4de750b87c227894653dc09248cdd004af27ef299c81fbaa3e98815bfedfd1b48bb6f0420682e8430af8b953dab3406ac809f71525eb24213336854504be296a4e76dfc2799702a856e6a01114aea6e2293a1a5bf1d55f0b7b92c5a0f46fbc2319826ec663661891fae9b195847c95839e6036b081b56669729f08d34f7c822bcba9a91105047b5280955ecebfe43c2e8316002fa1b1646a4ed8e107c79e1cf0321aa517ba67f9d19151b6c46dcb6c8f8689d877b2f9bc69a148799db2e71b2e2d59766feeb6651912049309fe8e903016c9cff78c4ec40c19cd473ab158038e012ad1f94196475b1fc4469fb5d6718c3b9a0b7f02322b176a5f05f2d47f4ea038c9565a7a56c7077d2241eea8b4b8956b15ba593d00d137e744df6b1f11677877979614e9db64095adcc0cd8b9ec6121f9f37bd870b2af094ff4b7922cb67667951cd0b121009a39a61ebb8df0213196a6c9feae3f749f125956b92eb944edb2ae4fea8740273d78b7c1b8f07db27dd667502b4807b548a67fcbbc3c76bca12f6b6e5bf0998393c5cf0b42abb7b9c3f409d87a09703ed125e8b21a6c794aa794adc63657f3096f0301e3d2a307f035b0f099a6d8261e1d1b018513fe2fad02518982a8d4b5a55425ed685a4cffff87592ff7d9e5e53e1acc48705bafbf117d953213dfe9dccd4783a19f86cd39d5837b5ad6d275bf8a6f543ed949d92a0186053588ce380363ab655bf01d4501a8dbe8841327b1b5e7cd6829f89aae5cfb4985693f003db4b096e6408094d8aafca98d3c1030494a8d9fe0b9ac08443a78e764b7068f97ae767aedfd174236c6895c5a3adc79f261cfcbea4908bed05aa1ad9ef5a6e8361ecf67412baa8fd780280789c9daaf834a94a3b8e398745db7cbb6d338c5d589170423ab5d7d7063c1e0ea3c34161d7bea59afac356102d409200cf4a51537098635f47cf340531e732b96b8d26437c504b4c7ea0b7af91000b6bfed34bcd724ddffd1266bb1d8accbd94c952f6431f335d9a4294b9511247e73fc91b4d65446308fa67f1068f2283e5cd4ff2a3cf84671deb422ddfea0a916cdb93651553b33698954892afc1fbeb76d7cdef3b6198aff353173f59bb14caac93f1c2390d62206a1c8276bedf510cabc12c362986f7c90a8457e666a54f65bc26726ccfef864f4e161004781b4aa4aa470c5553a30879eee947bfd4f05f1cd383105d4a4f471f853818c49339d792e5e297c3af0826da51fc440418ddca167314e778cdfbff1ea1b5d4790d754a5b3c31a07bc4160db0b59c849efa43eaef11c3a64d5b9b3b1a4dd18e36927251006c4eecb92c762935552bc6c1de1798000c3a89a99ca518e094c8a589eb428b0b6e9b0568a79119d0502b980f0d71d584f2f693570621e0e0e448743d28fcce3182bc7573a4fd1d4099589b2f475443f5329b3721c41b18e8a53311a0bee939b4b0a3d978ec54cb0df71d33eb4504ad7ab0b983f6d28326b9546d154d0339b2467e890eb5e765932af06c5aedfd3de27c5f3bfbef8f7ca57aa2eaafaf699fbc89817cd9bd9bd47c61fbc623e24689d4f899b649dd31f7283069d4ee65ca4b1d4f48460dec0c2db0f38d3429809ebfa9456f60ef0287f58871575a0938b082cb7057bc1282bd981b9e9902f2b4577b88d017b13ebd5d2c377f014de0356a6022ca19e503f8818b58b895f5588aa20d33d2cd84cdf0e112b1af278bfa0186cdbdfef40c82139b6e4b5b0370f04c2d605f8bc70a541cc3c2e4fb773c24a81a6e29f556c8b1d3423589ba10302d55724a0e130df0a3676edbb73d4585155013fb6d58c8197733b8e6c2d6a39fceec87c70970ad58d404ea36f5f998242b9d6d8046745631dc84f0a77d7496f73ab586cb0e2855ac4fd4014aada02ca73f6f2bee9724345c4384771fccc976cc9e7decf29e9fdda1575b26dd05401a564f4a690bb971ff7d66d5ff1aabe0737e7eb7c9b4fbbdf8cd12dc8f060672e89ea2b46260ddfbff7a42e84f0cf250cd46024b30d1e2f5b1e21752b08e03877e4a88c1681b9b5fb7f5bb8282ac90f694b79345c1cfc15f13b87688a30dbe84ecb856eda06b707b8df589e6b54d4c2d51939b49fe0bce30dc4a899e79ef6bac3ee8722353a99ef01510f0d1dc4b5bd5ced8f6efb50492f95ddb3ad0ca8065ee4d17731fe4a618a83c1151afd8eb2476f99e6a621856477b804873d38f60e58e5ac03147388b7b63aa80017317421a1a8dba202db9fff721436bd18a5501a068c87df9b72819fea6e87aee222b1100b9a3b50ee85543b9d6e38f96b60d04d25b8841dce2e68833ec68c358ba953ff3bce1724fdf561405193df4d1571e32e6dcd71d51e706c69002dd98a7cdbde2243e9c8eddcd12334b9b6286c7083edd27f2648e3ccfcfbd8a48f5ac89f9c70f557a2a9dc72e8f6630b8fc0887e758890998478626bca34f7520bdc26110f8b7f15759476c8a8f6ddef1d83a242f51b6a00935230d5e77860b62fcdafaf027bc8ef430f8418cc9126e5aed0a0a934aa1cec7471a03e71bfe63da8184089bab18e7f14bae240428f3cc57d801d24395d4ee20a7239e59d1369208942929da3a8936e4c490fcad53c17a40b8c87f38706d64a04b922560ae86063268ba4309132f121b6490b32be37d0b8803641d396ce97656a933634f8201076a80ba20b572031758af09b267250e8dc568709882b29224db6907ad046bb45a03488623742b9c48808323dbcf6085d45611d8d3275d144cdac88cf302be21ac4ea61908c871e96022041ac067819cac2160469b3984a464522afc5ee4f80cd0d2b2a573450233a10bec21580f0313be0c02cfb0b6e346acf24613c5dbd2a9b64f64073ca05540601ab118e81e1c4149bcd64ce68e267268c96e3c5b1688c1b73b2cd009ff71bbd66c39777921cba5cf284cae8f62073115e21a924156dc83a385e4499b44bdcc85843a70bcf0a28906288294c79294eaa11eda3dd594e04541e9cb8a44f206a3083c2d9862c131ddf97029a53deb0008d4dcd054ee09500ffb1c08902d77ebe21888cd69a9d74613d499af2f110a1313450113ee21eaa1d805a7ae3feb4bc9424403fdb19f2d7481841fc213a1531fdfd0420a5ff8526e0f11320b1e6be37a1927356146232310fe9139351799c08e9a1475f2d1b5393f809a8f70e1cc85a610c523470024b831297e77e8646fe4d25d7cfe0f1aa83f0294225c7c2747f0e0db7c7f3ea2cf48a45c16fdba2540dd8132626e8931b88fd0641e3c306816c6b78a2d924e24b342e848798b68b0bacf741f42e0b831b95860453d1607778ab4ddf95e5cf42b11778a306620dcbd64b6bcf230f44da233f151efe2fcc258bed0668635e5f7513c45462f587bd4f645d657ac6f30e31514044dabfb788afdf4c4eea0de145abcc19dfc764eda1a715241cf2e0ab045fba8e294bb8a6c92160ee79b567a8c75a1819a9fcfb1f526958fb362ab1279e3921a46d360a56e41569ffe46ec7c8ca638747df6c25cf39e35366be10d81834602b2f516cbc13d6f54e2ae8ab1abe53e81b1ecf5d6cab6114fda37a60bff3693542ccafc88bcd7a02276c3397ecb0c682dad6c270d90008a0b8e3ca759ffb04cc827c135829772637977247a37e9dca834dbb683bb5b353b3fc240bdbb4452750113f960b5cb5057328779c66d416a0656ec6c7ee4720d5efb0c9f0faf50cfcb08987d035cf89c7f67b708616fb8ab45249de58e56fc598ac96f5c4cfb915ff9becce5bdcdcd1a1e40d6f0dec1e4c2ef5e52c21742d5dc3bd3574861c18aafd3d0e428e5ca33cd530f1a7b54c9908295312e5160cf002441e2f0b4f5398dbc4d1ca668362b96bd3277d582159ad7f306920fabeb24013de9c5c18eac2b286172908ff52aa78a7aecef18c2637a396ff98ee0735fc2fb144b052fea8b6b1805bdce0b828b682fc851e576bcfdd0b560472afc80b982682f1a03b920bb3cb2a4f60b0548ff90c1f1a41f7d4039a8cb2c52129dc061a68e91073ca020f1460ec0fb6b7b472bc4275567031680327176fc67961120b5e057c8ac0b859b032e2f22958e644d2fdceb5eb000064c36d00690bec8b08f6ca55be3be353b50baf84473ae7b1a8d32df8e44c1fd754fc33a3910b1aa5231003e09ba8ab826b30beef378e38000b8d6bb21437986684941b6524e7631f45362e31c062d05d8ad075b8cc8780491978a9a5164bdaa9c7394ab010b3d2b7e497dd66b9373fc8fb2ffcf396a3f34b00d2636e867b9600a06b2bdeb888d11e06f72685e3919b1819bbbb8b675a77f1f8cd95131d41cacb37fca570d6fab714757ec419ac71c6ddecb1c75d633473d7798a7e8e93d6b88544742e1b08d3b78b5860d52c053695a36e85c9163a095f5c60d01d31a3419585d394a18e0d6488e6eb776ef128df541bb1976309a760d342ecb2608ce89a8e957dc701ccd58504b7e7a8f5bc4452e6a76b11a171b4b5e1a4736daea1447edcab95ac120cbd803016a2e9a4f3810093be3665029c3d1a5f545d88cf069fc19d3d79cbf2d5070d4c2f0c25b9851625af763ef578f1c2480c96becd733a0d100f2460be854abfd46852e9b2aa6f51aec5310063dc99831e1530035db07a20102a17919e5fffe46b1c06b9720af43b63577a15dedc472c2bb5690a00020185fa39668068cba2828992290e08afb2f2b47b84e0b267b21e1e445e8bec2a7dc1c89005e5aa06e0e8eb030344c28a820401c6848a1001aa839b8ccd6b979efabd679bc85d92cdab851d2430230f9d6cb950c85e6095bb53c2ab620134434040608aa73af85ef8ef2cfd6cbc293fcfa9f14274a89973262a7dd61f5c11f3b0b7a899e136351aa3fbab414359cf59251c37c62362352e6fcd812f4271dc110d0cbf23df41fcbf5d828cffc0bc556e1812dec335eb17f2683a4af90795188bbc646c9a9613db35a545983f311ca0fe768bab1f9e418fa4708d89605afd05702f1ed081ca820f9602e9d42289fb6ef238dd08c2b6f30b52ed54e2f4e0869915e798f01c3149eae1a257ff54ac1d075dc88ca768a2881e0bc38712b3d561d883e5b0b9f1af543640ede3cbeab58a951c846cfe0ffbe7867a4119f7f1b245fd988d3373783862f9066c2529aabab0dc9a02454101d88f79cb4d5f60dc32cd907feab74acf441012288d9a5128650ab576bcba1a3244c9d92a36d659f33a1a8d90e7decb282efd121b7afe86a3110c7d66f5b2c9d95e89db185baf538b8de3d21fc004ad5437cf7b8b97fb6fc06ab91a5fad80d1806402f9b3a90f60ffe8ca0507f9a3265c680f40c075b2802f487b65821078d4f98a07088f980e1151439e0d74e2b6194b2a08361502b4ab49361c914f2029d3b299c21b634a7e7960c907e0b25e34f4448d2800f6d27e2797dfd40b9c766257d3c66031f4bc6df74dcd8da04551b133a0a757828c49cfd98e8325e8787fb7a282defd0f32bb2a1ceda2b2e8b60f1a3890edc7844cf25dc50439087bb2fe790e82a7741173d76ef805ddc1ba31bb4f88a78c0ddaf8be0e127f059c3bfeb110c1fcfb402d7126007b425a1582c40e1e110341721eee38ead5eef1e6f1db0bd02bc363fd0a8f0756610a792bb96da8f11f91b2823e2e3b3f2f63533b66906bbc7a19a06d8f72a7a0a854c60d21245de2fc9a9bcd429c166587d5f346019a418677e04cf4cddf01e3c1d735ea237133297a86bafcc7f29a1f12b9968a885b4d0c141ac6a209cfc54683ededbee3d24d2f770d0bda23947e82417b43f1a874f63de8f0ecc3f397da24b0842724121dd7f309d6682909a312bfb58112eb7a0880c13b954e01f2763ac06870acdfa7c7fbe9cfe91328d85d33cda84611ea3a7b8a4d0267856fd0926b8613893df5850d4bac7c50b4966f0906cb56ad42d1b003a7f2bd38763c2b0bdb65afa50c6596fb2d38c31af8a099726e5d7c79054251cee9f0f949fe32b908ff6029dc1c82624fd2f73f563631077810637cde1240d87197908613e843fd6901cb4deb42598b2be0a0ae0371167478550f8701ea63415c214a9031e383d4a3821d3a3aeecb3a56cd2fa5e3bc68759f6828961f32a684effb617319f289411475f2465deecbabeeb1789ea79ccefc05503c41ffb0dc1fd85e831cb6d793c706a8a437c5a935382d5fa1c09fc1658f46d82122a9f310e154037e0851b68fcc170c08ea2cbe77c77fb2b56a4cba7ea2b6db61770c400ae952c83478c5df3583e69ca65470b36ea9cace60e91d4e990b0555df73b08b94276a390374f6328acb77bfebe018ed981ec00297f792c9f851960266bb30b67481e89c3420ba85ed22025fbcbe4f8c5d7b795633d77efe41db3581efc3e4f063c880ddafa299f7e7da5977959a56d77f050b7e8533e39310cfb54721a6d08f6b24e72f700e8aa6f29412669eeb87bfb94cfde97634930b89d4c307014a56756b6424ab15786394404fd7fa027f96cda173870b784914ba0fa506cb8b8c1fe38c55c74dcbd99094f5ce9828d133ed19045ce2b9139f2f3e81ae9eb3a5fd022a7c7715e1690c7e34582995a554c04c946d266b5ebf5ec21270c235f2079c8c9a70d4b6202ddb71e50db00f96c6c4c6b7398dd4325d1f8769ca18cc71f64dac6e92b0b17b7e33366707b4606228b37e1cb2fe67f1bfaedf8248d8ed6a8fed3a1bc03c4871604f0fdb0338e4309922e80ee6b7c9e7a307051d628d1d297ebaef1a9b837f8ce758d894010b56fb4a9c5dd19c3aef1d94fb8c41e369e2139ca750ae2b7e3f379dbc0f2b84d6fa1c3dfe51aef8c0ecf96c6f8ec7b68fa509f413525dadfa1c1d46fc4971f3e63422ec469c68a4f4b59ca06587201a0c649ee38f129ae30d71120a7b74fe2b09088c00b44824ff7a10821ea3269f8a9794ec3905916d768da784c1ed96bd5a978f05f4e783e7c229aebeb55b0575428d9f44f3a0a832acc97cd3a7da4d2f63daf408b51bec6b03010e6d8f0b9140b34a02b0782af9f52bde144ca08eb86982f7d274e5e85cf45e480462501096838872a7c16044800dbe0c53c43fe5f8aa5f5c2228c3aecd0be94c75b2fa1dd64fc8dceef5179fb20921fc05d0d43e10e62b28f736c8d1c3830f5b2df3be0c7b49feefbd737fd14b940af7f8718490f0be2222810d889d4103545f1b1b9d5533c4178c7c486b3a0fafebbd7a740b0e94c0005f34da5fb807c87f9667b0bec78faa30239d88b1365b98099b0360201a9da6a1ad990df6209471c8d582a468625cef97ece84dbb1a34135ccc2f0fbccd88448f80cbe5e885ee3559282348adcf6f3d549a49b05e054cf963d0af5566902a1c2184645134a479219eecbf8154cb6f6c068c365a4989da7d8d06aee6dee65af5cfce5159b8201fbe90eca055fa2b544f964df80047877195ebc0a33804b4571339014883212309ab378af90e9cd86b77c3cd720e82da6f8935b980185259f9d068a3649e0ea01cc4c7a3e8c756b20690bd39c7ec972f8620809146ee58af297dcc31301d36150026645a433f14ef21d7f465d38c2883b2c4ea29400d10f86130b579a51e5f132564d4990008375b1fa1677ebf762943c144547172148b34a6904b8bdad3c5a02805c4e5991e46ad05c860f984941fd509fa40371b534c91de018e68ec9d8a592f2b32b7973916fac2fb4702eb613cb2a60b0a3f852fa78942e2fd3fa16028237098f769accd613f542ca94387185de2a647cb758310f69c93b6b281f2315a47188d5b9d8f16b3dbe04ecb4cc53fb6078be38992828a64d7aab40e4103d2a656da24bdc0075977ad8622f82011435f050ac8f9e947cb54a6abe89af0eb0b9f654d2e7c2cc660fb7f3bc2e577c3256645b27d43544dc0086c15df556f2b97c97107d9865c3a0c13016df578182f24ba307f2c5079ac087c36a588744c23a322a7ebe4a3e4c7d01f7eccaed7daacedca4e01b47c631d84e9e9730b789c57622501ad648a2b3d48385bcdd3534f456300820a8457f20051d84b5cf978232d2f0c71a9d173d89c71a6cb799a3ebc7282516fae5cc7eda21ead7edac638437c4b3027e9f8387d3a8549363bc6b8ee5b59bba7b5094cd6b2797cc0b47e9f03385478fc9de48ae2b186bccb8ef2231a4192efc559423128cf85363bb8ab5fdbd508358223ebbee8303a78be23ab9b8db77de115b75f21cd3e1349c6fdd8217b208bbdf43a5c7f57c7c4a5081b4524292149a8179bb39a7ba2716b37dcaf58a844d55a70a898648d5e8057988ebf9fa0dc3126911d5eb1b8b1a1cca7a469420981b56d466164caae9beb8c0fdbc90496f33395ab4c3de7a98565282384e192812f66adf1ea04548d8e32a4a0a84b8615d6d6301c701af539357955eafbdb1d82660c47f9792b6a999e3fde7f50d5e4a7120b708bdfe9f035e322ca3bbe2554a9ba62c52d6553e83d9adaf5b311b857bdbee70048222f35ba6f219cc6e7dd5ebbb03eeffef75475131f4aeea500f7271396e728bf0819dacf37500b4c64df73d1b9867d9535e6a290282d6ccd272811dfa7d435026eda4325f956a16b19b4d439408139cd891248602f9b07c8bfa5aab979e911a030899de8ea7f17410b8cf9a34c6683c16fa727ccdf1e8389e0db4a6fa3787ac5c044772b7386c531a394c691cc71a4ca07405953201308723504489e9edeef22cef82d7e9db16b3a8d91ce6b030c2e05d35c7b7050b2cb5376e507f13b39f74d9edd1c2f78093b0b9afb96c5c6ff44fe038f7cbcd6414bc1a721181d59e93ee8b3c4e56da0e5abc8906ab03f01e0ebbcca990c473ea4deefaa3f25c0349bb98df20becf945284062b969d18affd93b1232b0ab5c44a4db4bb89f19ff3fb05864210c0566a2696156006232171408e09c0320e12aeb34f5b75b09e3dc6e637635cd357e015d7ebdcc50e23c03b4b02bab5e42e074ed80ce550982842ddccc10e5a843a4cbc71ff982c210f7d386f60f0ed58e3dae42389cad953aa67fe4e0b4ffe3858b6a6352af75ea65a4dc536501a6d79088f43952a1b52c37d764141affdf03c84f956e881a0fd783c2029dbcb8216437de99a886cb044dd4473d7cea2aeefb07f377b166243bf3e1e2d46d0d4c2920906d3ed194fe33f11a185e230622856118c0edcda8236b37fe10d41c33574d51a9190f935c3f7a5d927f804a68f6d4e5439d38d041bbff16d3c9ca5d0472d42ccd5b099822551c5365e07caa7774ae615f6b09942286b621b1fa8ac1855d66db532e0f567d0d5f49b68ad4b1999b4b47c05088eec0c9d95e5a770ba9abc954117c6674932d6ee67234e50e074e00814614a3d67f1acfb69a22d662d2423526b89c2d243485fb48ad42e0e13bc5416ae0c692007994f4e08676e87dd4b6bd655213ca743fcc6edc9d3d3235e62cccc4260928c33cb591bb390a160976f800d1991b18eeecfad9b411d96306b7a06891f0cb6b7ed760f76421bbcb11995b15f4e0368e3c32e3849137003d2af8fb1a2f927d28f306b113096e71f0c8011c1eba609289319d2953d7df1e37e08a150d9f3a1b6ed64a8b9fc2f248742950bfb1686aee6cd612088602a67708cd6823c6103b6ef3009f6746f830f0b11ee2899a068522660d30a2c2e1756731ae62338a7dd838c7524b38d7e05e5111222ddc61c815ea31ed593de09b225fc6c14ff565de4fbe97b568addd63ae123128aa0c359c2e4eac06565dfa06e44c6f89474508499b578a978903035e2e53627706d78f77d9c45570b040304c029e0e8771da083e5bf88506d4ebd489aba9b21aabfd4588c951251552a9cd1608141bee7d4e62f7741bb9b6edcfb50a70139958bc23d580c03697fda6aef932b363e621c8eb12e078306801a4d0cf172aff583423a86dc213a8f0561a804767b0d9c3173c6305df725ab41683d05df6cfc5072de6cd3d2d651addf5e76a8e8da9f28756f237a77741435753e9e887d461eade37aa6940e169b093d773d111738ab6bdd5c971403002f5f49662e7db4e9f3c6ef946b6690381c62bd42fcfd3e9c94d098063a5f81d438c5cd322e05d0141b818a645b26a94afcbdf91b0ed8d716c1f8b184ba2e527e0b8661da6e0d6f8e1464c5cbe50adb3b370e8f610a65427d741ebbde65c4e01a48c8f4c0ff62dbed149b615ef022b90c963b9f438a33ba416a06e4499d8e53c8589638a9c37cb23e0281c28f42384e36bd1eb07b731cd2e264e12355af1796470b72970487234dc1d8b4875a1173fd35876c05b91331f0d8aeebd57a677059cf9f415b8b1c76b0a45d1f7147f286052351209f2d7c0b5a0b34f6a42b370e48a468b4a73a12a2a95b81bd0a1b1c5236b868c890e2dd6ae89088aaab34a7487757668167b11b8b0e362959b37a8bc1f6242839db23484c8def2a38fc24757754e946bb4d66f1bc528c366dfdfd480c9bbd0af4a78699d8b1aef05a48b1ff2684ed476452a3d195442ba5b260e71f99859191e086b248638b4488c64143ba5883ca4ee2d57457fc2dc616ab16288b050b2e15ee5a744491f06ffb16bf85b882629162b1a4c2bb253564e8e6a13f2779b99d85c858745848f7eda07292548ed01536d824437637ea24986b5d516b71b6d85b70abe85401a9f0f45305dc32374f47480e9af20abe15a22ba857a0592c2d3a16af05b48ab416260b9d85755a74a41bca57bbd13c1d0eb9a4953bda026a7692221b079d14e75855d42d9a2d90ae85a1a11bda721a15889e4a2226e906bd5106254cfa9a3bab627731da57fca64154df4262b6c016542ad215b4a8e0b4b809be491b1eb7d00224647237f624e4ad5ec5bea2c3a21e0ba85124ef358e1d12841bdde2862e298936a805540b297b378e4e92ca41cae27616d2271a478d04ee5a2cea15e62b7416d56da1c68b7499c6412485716d0bfa9293b66cf159d4a8428dca24674d6905df0af112d3e957fc1635aab0414972d0942d9a67d1214662deae6f01b59fa4aac68126dd3859159fb3f0544bb2756515388bdd58a4a79d94745db778f22e29b9452b2e4b5e8db798555c5be0a9a8b56055f863d1a97192321b87ecc1a879e1713d15332aea02b21a2137685e2149c6e0f2e01da17a4a4cd4c75d4220507a9215f1d8916f284a72eb78317667b5605b8b8e6187f94a7e7a1a0788168fed7f3d1131c986326d0db4a21f761c9149b8b4859652f246a782fa0aa8b924636d7605bec5c6a265f1b7105b34c5e2069a24e0bcad40c1428d6712c1360e3652cfd9cee2c63fc9d72e0d34e9769bad287cc5530dc96e9355c0b1d054c1b2f0af1859545ba4aaf065491a27bb462983486ab89d159f85b845c52265e197161d1c2418dd537312796d1c1cd2ad9a0d14c9ec5d1a72d27fb71a9d24754b5b3ccb621bfea475933269b959ed0f82309220a2414593a08deb9093bc699dc5cb2e416dc3cd305f4742724db7e8d893906f835808f69ae4d5f88a9aade0b890beddee2d3a649380e94ea82321ba7a85eca18d027276d7989584a68d83fd5e4b81cf1a9914426c6ed60aadb509b6cf0f772a10f1c1a332a30d15dd0ec3396877cfb0224d9d5f05aa16b54f2191a071b890fa9ded4bd000c289b87d3dc9f066839d945f9b7e851aff24950d5d45bb0adf626ca9e17c5f61c34752d1d02db0aaf02cc41694168f2a750c1cbe2c91ebb75d54960babd6d0fa307015aae2bfe80bcd4dcbef9545ce8d82d2f9780f5cfe02926333a10bcb883ddc716c005d7caeec8480216844abe5c1dff28dd24b1dc4a7ce30c6eae0d02184106e595ce952ff17f34fc491ff22b700e8e77539dd5f4f42a5cfe516ca700c7cf6ee5de4eacd224949947c3a41143494369ddfcb1d84e93fc6f9187baf5053b5fe42c820e91692043e20ace6e0761081bf8a536965ccbc79ec5b56f921e3744bc46824c710fe6b801ce303407ef7f78835c8f0bda98c4541c1ec9d9922df90876d5a03b094d5388002682b5f84988a40de5c8118c44162bee7a13467b4fc81f3e6da5a587887923445c2fea0b5983cb1a141fe2e4717afc59a13ac3c5ffac785653a1a0eea9f3128af83d290836c588693cccc699939e999c2a457fec8f64cdd4618736f906d462a3f607d814b5f81b3f13d66d59c0d2f1a91d402d47b1581cbdef453c6c586462161351a96a56345cd4077f3750d9a45a43959bc64fe9bb1d0a0929358a9871944cc804bebd2410a4e91acc020acd57ea716fccac0e79c284aec52f43dfdc42a01a334746429c49bae726a347f282b8eb46eb6f51f54a298e72a4f213e7b80a10e80075330fbc564f8df3eef71a92fb20415b902cad31bf4553a84c7f160a1ddeb1deec17ffd59a0117c33d2df4602b111c80f95309a284960ac0ab6e6f6aaf4daf2ee426c5c6408c1c87c05b24421a481f897f259fe1a9e72aa87d1682203d6ed190953217041754e9092af5182c74311809c27e1be9a67eb506b5b74165cf173755817819e9023aa5e779fca90c7a8c3197e3703a750d5b61e0514bf0ca3d342649f0ccf69386803d54fed7d90858d77b2a87051b40535cb9ea3b544cab124cda817ecb738bd04c8d8e50d6ef0d1229ee3084b517fd40b89ad2829f18bdc179f82dfdf2692102091c282df3aa0841350eb3c71b0d7b2089ba38928a1d3e2ab076519d90666079dfd41f65469a0eac9e3073d6cb3539dfcbd128bfcf5d218f40bec2545785a498910641dcadfd6442828c9847741d6ac548724a509efdf950fa603362e126cad60c78231eb6bec6c0b8a52916358a5244abd7078940abde6d037730cc6f310f113bca2f0ed9807a5bad2237f6da1c266c45c1f2e4b693d7f49d52afe4c672a8d7ed506ea3d1918a122c8561816374d8abcd98467c95ff22c43a0ccdf87d1e2044f400e531fb7c2e2c32df694c96feadda4c79dbfad6645731b3677775ee846e599ebc14874aaa5f94c1d21aad8566b2a405c2fab6abe603a73c6f7341e48b73052cc376c1fe8e617109daf7378c653df7b6b8be8f433713c139d7e66305a241828029bee1145465de43e5308ef2149cb1909a55618a700871b8a767f07bfe08ea5fde832cb3fec1dac4c1d58ab8bfb416b82a96d147ca0ce8b45de704ed47723b8483166f748b2adfb4596f1b838fa3d8c0c4e03fa215a6a5c4016d6a60d9d35c27473b419ed92b0dd585d575cc045bb3b66a6a966ac657422f1f607453175ce6863968a35c7bc9777f1736cbdfc80543257a998c6c1e70b2088150167b40dcbc088ffb54548c0426b5434b196104224b27b73e50e7e0694068c06b387a6ff6b5d39ede0120ded1217e4025cdfde79e7bd57c313fb994d3cafe7b3eb66d98cf69fcfe769a0fee49493afb97ff257a7f31ecfc907777017447b3a09e8ce96656fc3352ccb762cdd7b6992f82023205965add5567949979aedafebaa15c7482446095c1fef154b75462a670d30100b707dfbdb7befcedb81a2684a23608661da73279e9e538b5dcde7b70cdb4e7610dd79bacd743e45c6d7dcc7fe3ef6323e0b42447f6474309e749e871b3ee982e84f27018d3ddb964d6ddbe0679d0b5fe0cfbcd2bfd4e17ca832778841a25792945242e8c15a83e8e936644627a57452297330d6f0532247d3b711640459e263cfa284c408c402ac816280e13f9e0fa36108e6ff29a31094524aa5ec48d99112bf863bb2133bb2d3e9c80e9d9183e73bad156a6bbf73e7f6747d1b5ee3679226c9c1c979018e86df115ce8794416a84a6107ec435fe1362cbd0e4499eb2b110132ef0ba537233b09a597836d605f82a406488aa0ecd390c9477d1aa9ebcc6a75ec7134c006ac66d96758ad58ad17eb30c730af8efd25cae8a061b3629473aae786ab972ed41fa5e2ea412932fb5005857535488fc2482f3e8db4ddc6de6a31cab7e106e952ebd3408d7d2663ccda6b91ce2bbdecb34c6615467a18f695824080af8cf35791527635a3d169b41be7306b902e1bd7fa344a9610197d128e066458f658d623eb2a50c56ac9e751924272d329722252b236241e44db0f1d7a5400070ad8e00d3f56a6693283b244b33b9d73c648639ca50f8710b0a4b6f9670f8a19f6fe11cb8cdc8f1decba1c12332c62d8e390731c026569db7248c44adab36c843764c5c741cec49fc1a40d86fdb015c0210c1c9a2f6d0858acea2727582119a2a3151a7e3350a233090a02efebb307d7001cd24382443c7d8898e290483a19754087fb2e29e0374060fbd706e0e8c131e007bc43299e678c9dc7a6cc3edd8e272d1f66dd0c9e0e7e0f6809ecb903dadfc8d5237f2b9ccddde98c13e74ece39f3f8f46d47a40ef201d3b7e12fa11c66e86f3af3c55eebe836a3514ae9e3d9ed1f7a8a74e73dd83dddf6709b50cfcd8d5c1fb11c922e565e1b3de07d658a3fd4fb3acd349bd97fdb6143362b64816ffde4071664f271bfde4eea0c440df2017bbe87a66fed3cfd3bafe766cd1f74034c3f43e168d88713a35896659e14fc359eb78fb37dcff541f4bd9e4e0ba2b7ae87a6350cce0dcbb3466b43f488cf25def8d70f89727ddd66eed77b6fbc571663846f7febb2eebad16e3331deec6117df6af76f47358c30d26d067617c2ace3af9cc10e34c23ff4868ff76f950cbe6639140d6dd6304809de346a682a3d4a51e40bc4d765461878c3148a7cb1e12bf4e96f189d27087bfb0d506511c757977b3dbd386e246156d870830622026fa892807471678900e7cb2a2809867f63fe0f89a2e908df6197b197298375b75215d097f5af6b5f7615d65a3fab7546beac9dcd3aa8cd8fc3e0388ee38208228319449a734e381d44c2fbd290906a199d9041f9c560a5e10783d60703283e1920f1c9c046d3344d73bfaecdb9cd6079f7d0b40eba600ccb1a6e9d7675d8a5fdd651ad7136dc068137a7df632086fe68f8c500474b193a82446e33f1b71b20206a56b5209abef75ffac578d8c7b285d005d7c7d29335a39c00cfcb04064834fd0f06456030e46297587aae49cf2776ecffd2d05c83d5dcc79ed28c37c7cd88ce494e079c9c5b9b770df6f73b62c9114a7c5fbdd1d01cd8cbefa8be179cfa4a971ca4be3006662cd6486cda1bf5674c400e516bdf74c031c6d0d7d3941cf192ba6e396e1735d6499dcd8c074ce9eb33ecc62d47d431cf28b0cd8e5991417984066805d8aa6c33d2b7fa1746b12e7c81ef753954b12d90b08746350d339419a804f86509cb0fbdceb3d3f303514a996be4cf0932018610c226b0b4d045601009709e3106159c101a68365a53024a410689349b2f6c401fb021c285920f054ff85280c447448c23454040a4a2117b8d5ec6d22ccb1b890e118b44226e3b24667c81771c423b0f72c5e3103006465118d453f3872254bad3f02b020993f6cf20cda8fc48b366236f0f9788a78b5b176d641cc91952c03bf6a05dc33dbcddb66dcb299dafd99e7e677bfa5bd57ee8acb369590f4d63d9de0ca549935e850caa641804c201de9e9ef3358cc26d1ad8bd7f5d97e76ba847765bd3527b0cf374577a327bb86941b4d6f5d074765f6236fcba241f018889983140829ac09b0bd5c0cda06174cac614f0e6e07358e54a803e106d4c30638c93870309992e60c2880d0ea49448f85c20c6870228ae26f3e1cdb2ee422d035a481cf9b2256f24121803b5dcf3d2e9d947d424193280e25b52848a1ac74186a3e7cb1e7c7abeec014acfa73d58512d7651673be4cb07e2c36a4dbe3ffd8cfef061f5852cf1bd6e3be84fe931de8dc77c99c3214bfcd9c4c69fa025607f286be83b01cf8fb376d85f9d0f0f9677bcf62b8d3356810bedef592cd1f1ab121dbf2e19a25fd0f09bc20bbd7fc4eb77fcfbd98d353e8e51fb5b3f76da5fa8c1abdbd7cfeb3331b43fa7451acfd7f7749db71df6377bdb798ff6d78df88eed205367baeda8105a38fd6b4dfcfa36ef48b71cf16b9dfe90c6da8fdb8d1ad283ff23d6f0e1d1f1e6400c225a0a9b8f8b2c96488144e6a9215d760dedb30d675fb36e7bcfd76e7bcfd6a968addb94d6ac5a0c080dfd83d3dbff981a731b0dee4296ed6fd7f9acc39fcedf4ed4d8b6e37aadc3b61df5f3dd519fe60fbe301893830f0cd4f73c90a92bd5326d47ede87b687dfa9ecfe85f4a61e729842cdb67ddf59eee3eedb6ef742a7acb706e3bead5a477a1a6144b927d363abedc018d5d0dad4686fb837cfd0877d435f2e9571e33d7c41df165ae21bd28a1c085ce1a7e3bf852e80399da87474f38afcfae88451aed15ff66a8a26b4817aae918a33b087680d2311a7e51883185165350a1614c0ef12164a95ff30ea2b7fd2aedd4f16b85428570d6802cf099c88f39e6dba79937a286f0696276887d103d3390c883d659738d4bf943ad13cb344dfb2d4a6cc62d4bd9344dc37ed3321df5319a1a5bdcf811b57dd011f09d7fa3e022cb2696bd16b128e3bc91a23d90b9b38fd8bdf72f1f71479681c49981444dbf6e9e6fc0aff18ad1d68f30ba10e4fb14565abee7687945ed1e180335cc3448b2afac7947cd6342ffe9f9ca20f3faf0a4fde716252dffd2c148fb4f28723cf7fdefdb8d2605c8c43ec2f7e1d130675f371ef46ddecea33ecc40a2def573c8817506e45f6faf9797ddf57fe4141d7ebddc41c76e6e39e67b9e578cfa6e3e3c3a03908587f3907f4d2071bbd9e61af9b986fa887ae68bc579832cceb72b6dbf42f1418133b57b31e6b890f44258d3108f1874cc33804061e010132c85f6cb090d57fc370d311ac4d025be5f68e9c663fefd995d0f72e10b7cd129339028a50b5fc418eecb2e47fdfbbed9bc2590b8e347d4b326c9a074f111415de02dff0289daf39500164238220858d090459321543431f283228e788208fe44160ec2e2cb8192cf092620216c35c8c125e38915dcbfb30726c6c8c20745aa9002264432d791219e40c1133f686330410c2300b1e4cb8115a0205c10164f50f104147a7f485be29e6409668004245418c20623900235c25dc171ab261cd724146ac25dc9022414911773202aa80b54bc1af231f739f18920831a680a1cf5c3f7dc0e32c1839ea1e1c784496754dbba941cdb77b24ea7937aeb6860a675fe99dc3a1aa8cd4ede9c66a3829e7f2bc4b61bdb6b52c7ed06a66ddda681baa647fdeded6ff902f52db6cd6c340eb3bf1f738890e5fe8fa92164b9f6958c74d4df0d7234d459bedb8cfdbbcddc97716a710c7d757b072139a4087652d319f59c7b071d1fb3f302b95a66185b826cb14e21c48350880349c1712dc0411125251d4c492595b17b0a9a02cb5905863f1f04043c5d36fd0bc65c3f7f8331765f4db9a8a9a53536e5661d0bd0d4d25f80960fc7f82620265f13453e269280a8c0842802153a40c2a90a4d44461441f235c104e80331f996c8d19a86df125c44110a45c171d1dda3478135e752baf41897c822091531c627e2d76f41d79748ee0de00ad4dba3e943f88223091270056a28700b1a6e392ca0a3f46d86cad8828e119492d261266d2449c3995134944158f9504212b49e5554b4195be00d3f1c11067e94281e65a7428385c50c26ac804a12bcaa70873db68d113e9d50bac0951890935a457a51b4042ce5298efc45832bed1d476a02cb3edd482279f3c6f5ed6f3652c21312356e94807764e9f83b4299f831caf8a194a45468481b1469b305f11e4b075f12221f8a043370dce348b38150d220a474e934082025384eea0c3404a3462bd8b7888c73043de88203f503f4a0deaebd0a385e4425f12607c6c41c0d7fa5e187e4d3d0090d3f258668efb074f11b604cd4fe72bb01b278763c2975779f3ea7bbbbcfbc64088c89930ae805cc74e9fe6eafd59c9ccf90e3e754a807f512221ef9a016e0a84142602d640efd968da595f4621645e0fb201260491a01de1247e2482ea44b2bc6eb772c7935429757458063fc8f713aa8088e9a158378b51b51514944c51bcfdac7d66694cb769cf4ead7bf3aaaabe6990677dff39728133f3483b5d7aaca5a63487a1587fd98c3f46d46be0713bf460d3ad6f7fe6e41e93a7fd2dd8717bce0052f785dbf5b503acf9f74d757ec770bc420063188410c7e30e6b87fcf832d2d28d87f3e9fcfe7f3f9ddb2427769944e463ee93e9e0eb26c1d4eb672028c24b630e20a98962db49041c3cf8a1b197b70495b5abc97991dc9aefe65f7b55744554a0f302625c7189ae62d79c8141df3a996db8d4bcfcfa609fb89844d777d0629a493529791629d99e708b278f6293d6099c3c4ba3d8b6827ed79b367f62fd74c1bd2d6afb986667d95b0eeeeeeeeeeeeeeeeeeeeeea89bc21fa75ab1704237dee94d5e1ab96ac5c26979303ff2d1bd1873dc3f942a19599fe5382d0d45a452c9643a9d6e6e501aa6345cb134841042082584104208a3a99583d362e1ac58aad5a7faa0c3b02e0e6e7132e7378c76c780349dee0d4671a9ff5aaae9a7f8ad538e8e7e92a393249d6489ca4496bff8a36e0a7f9c2ab258baba2c89ee0893b8284b27eb5235f2975608c763fd8a8bf872f839ef43deedd86ca4ca5019aa9041955d5508f87d67f88d0ff09bd3d400d4d334e42dbf6f017e6396df5c8ddf4f80dfde00ec8af5ac006c006c0c56c5c2f0fbe6dfb8fbcdfdefd7d7d337a4ef45e3f5b53d7d85f415d2d86b0cdb5863107be8218d7f7b3a7b9d71d9ca5fa6df0b7fb819dfed150dbd09f857fe4540de17cf9037e60e900d7065b83a94a7c857e45f5c80bc31c79237f735f27e8f00797b03c83ba475907f57f2bed8cb1b7302c89bfb00e4fd316495bc437ab67c45fe8521ef8b73de98ebf2e63edfdcbc80e32ff4e42bf2af0b795f4c236fcc710fcafb6770798728cb57e4df16f2be9885bc31b742dedca3e4fd9e8cbcbd95bfd4d027ef9087f3f6feb94ede9c56b393fc5e8c39ee7ffbed6db9456f27c9f857ba267ce26e1ee5c94c11a5222aa2222aa2a290969928bf17638efbf7bc1d9a32b3e52fb06567cbce969d2d3b5b76b6b4cbd0d3bdf474e9e9d2d3a5a74b4f5abe94a12cf9a190e7fd731cc6176569995af27bb15ac22af6254fef5af25aba57c7ffd25a7721cbbde2dfb8d2b1aa642880121954d91a49bb15260dbf2a78d003d0f0ab62889e3ec0974bf2398231d7378142257173e46484898892764f11e273a3b9f495ed25b5b478de3fc7e1f936a47f294270fc991202bcb31569a4fdb395ffbd1873dcbfe785fc9de42f33ee4b1ad92bb45f293c60bf7a1b991a894a20f07ce81bcd7cea49afbe27bd5068daed019cafd4e76aa534b26e2e808151b4b52a74a3e1a457ed461321cbd4ee3663030f21c021b8be427566350cdb68aab6d9a5691aa66d1bcd46a3d1cfb4281d4e8a423fd3b48d066f345706d176a3d1f6b30b5e515e1dfb347646560804f68fd275901babe9e5ac17d3228c22c628e59c935221586befcd02c3b02c1bc2b66d9d0e0b63fcf91821c6181fa27c4dbeaf89164d92a0254a1819880a4d4c4d4a4d464d8468f99a155e80209b30ef2ab47f840289fff542fb472d80f8b09a066491d7cc368351a280f76bfdd265a3a878d23d8b5fdfc68d35eff67dbaedb81ffd47a40fbb1df7b563ee8876dbb1ed883fb7990b84221a42adbeed229d3ce2fba34817687fa00289861f93151324f4c4999c3e3aa0b7f3f0809e3f8ba8f53131c448a9aa5841ac06d3112bf615d36e482d371d396ebef7e97dd7108a0b97a4e45fff9b83da94fb37a496fadeaff7ab2a0b2ea6e06f6db4fd6bfffa53faf573f2f9601928db8d98d2f7ea6a3e9b8e782fae34a7607f1fde90da7e26b50db7186a9c4aa8061c37e0d043071e484490481729374dbb2e0b1a7d5973dffee6767db9e9881f1322dadfdac772dcb70f377cdd48b3cb19a1d34eaa9353858eefc50f7406371df0ebcbfbd7efa8f7a5adbe1ed357760ac487d510b2f8fff0616fde7207b63be8083fbe9441151a6ae8032db2acc3de359c61d97f5eb8c67f7ad43e3cd2ab4fb37fe6f9c2b9df49725543a5f2d148499496f42164894fa5921be98244a2a412d7dcb3a9cd5cf8a1f2e6fabaddf7a7bee9f09f28e92991dea5a2e174a821a5a13fb354223d9923064db3bc919efc2b07aa638eccf117c9922c95cf0ac380670481cb5cd7e4bb5fb1c27b4f862a420008d100049817603415365c48e5608283c6e700950d29aa08fc0002a0d5047c80c30c96057a50010ec7c7120cb4d0d2c0143ab0007384f040b482c80729462823213e920c12113b289d948c88c2f4311dd1c1099f9280e2c67393e4095407e5440e525b4a0a273eed63925265aa2b9a5861ab58042622eb8aacb8050e702e4e1790452a69d95604e30631a7c61c214b88a8c887247a3485802c92e42425608c24a2244b368031d208136491358031f20864912f4fa016de92c50a578ca82428144a060a85ba99567bcd155064b868d6cb29a594525a6badb5566badb5d6de7befbdf7baae6b659bb9590dcd4218cd539ec49338e24638111abe0b015f9c04efeab2300ed77a99e389423e42a5be297292936826d54cf22baf1051178ca8568b063b08534478fb37450a5899eabdf68331ebf7e61b3f18b3323aadf776d1fab4700b6b5d2d7b73ee07633630f7de5d61e1d26aa5f06f05ff50fcc3fc73ff26adf6c2dcdddd7dce39e79c94524a29adb5d65aebbdf7de7bef9571f2c10508f907533e7221607421b79045b802bedc6857d2a43a9d4ea7d3e98442a15028144a2412894422d1c5f2bdf7e5baeee9c8e9743aa1e0e0e0e0e0e0e06032e2cdcdcd0d2a090a8542a14e74f049abbd3f4530e6122212894422d1754d5aedb5d65a6bedc90763d1462a954aa5523268f7005225857422491247347c69047cb121ab34e1dc16cee1443ff248215942a53ed5ea743a9d4ea7d36ca15028140a85b2015330e5163e41cbf7884422914824ba17c6ba3eabd56ab53a1d399d4e272c4d2693c9648a1e29c327ad28187393a05028140a75eff549ab5dad6aadb5d67af2c157d661060d762e11c7244b42481fa4103030f8710bf8a283539c9b8bc229ee7b95b772d6e9743a9d4ea7d96ab55a3a5c1b8d68f91b2a5eb5544bbfbb9528128944229108bbe1dff77ddff79d8e9c4ea7d3dde44aca38f1495b30c6befcd9c56ccdd66ccdd66c596bad4f5a4522914824a294524a29ce585edd7c73737373731359f10a0d2313299cd0137e4c02bec49b3965ea15e11147fa9267a2acd3e9743a9d4e3757689a37fee0bf6e2311b47c9796cf1ab1930fbe2118ed445997c62ec61cf76f73cc228cf9a42718538f9c4ea7d3e9547355d55aab4f7777779f73ce3927cefb8a44379b4c2693c9648a38110746a3414b11d5a049533c4123221150080da30f508886af01e832f05e8c39eedf8b386e8b80b7d85c176068f9d7105a7e96002d4584efc598e3fe639e2d8c05638a405994455994455994524aa94f777777bf355ff96693c964329968d062b414119671f21f8cd5128c992fbf12015faeab85bc3f9f1933b26ad7d29c7664473863d973cd1bdbccfa9b63a694524a69adb5d65aadb5d65a7befbdf7deebbaaeebba12a081c6c03156c3c8b0d2cdd0f0822f9e87efc995095c91dfb9eef6c1da8cd5aeaa956b75f3f61eb48cb9aa9280b7ad2a140a8542a1502291482412f917a38950b375a2ac12680c6c47f762ec76a4adae2a7fb97756d5acaa595594524a29a52ccaa22ccaa22c3b5bd7755dd7856118866118dcee0559ae6b2b9d309a7f17d23882e3db140d7239c502755330e726e298320f0cdb03ae4ca6a281182a9dded91b0840865d777636070440338f6b8185155064d4cef6c0ca03e0051768a4806c67ef3080154f0001884105867c3b3b88ce08105fce11a484e19fa6fd55c36af7b3db712ca7f080218dfb46a33df5a4e730d33fab95baf6d9d4bc6a557b6da3a1da671567f0eb4643b5f699d5ae4bd3a457b5cfae866197966598a66d34db775edb681c4689cdce0ed2e9b08d46cb343617c0c0da6f345ade6e5c0f6a1b4d8597f63664dc720a10b8e68dcc8fd8a6a1f7bd3a65978002a5962204d31aaacc5172c025432fcb5762378b687f6aa2d5a6ded044ed1b85a4fdef4613b58d7694142178e394486f8c85ad46d8a37294930ff6a8608ca5b9341e8db6af700acac40ecb4b1d969b3a2c3f75587ed361a13aac548795f2947c85757170cb53caf1945ce429f9a8e4248f4a9e503c2a7923c3a3429d7854afddf3a856235f712ccafb4958c6a38c47ee2bf795fbca7de5ee2bf7955bb76eddba75ebd65530663e4e394e394e394eb9e314b6f2421eb6d238e52bfe598a0deeb05625edd153b272254d2aedd2a31a69773ca21127de4c5f4d195bd24e6dc9736cb7714afbd7141bdb6d6ca5fd2b944149754e9a64584b7b8a10bcad29e5071cdf864c1101de765f6bf297f9fe79db9376933561ad784371561f4a3422954ca7508ed77a1c8e8557572533a1359d6e50290cdc8846a412bd41a5e22ab252a211a9643a95ae54b94aa5ba1d9a8d4c87a9e2d21a6802680ca581c2d097df2d302673794f86972618a37d7c082f073d027cc481315b0cbf5bbce7f005c0ef160f761cbef1468719bf5b2008a6401ad005f802e47eb7e88ff7faf3c1f0f336600cfe78618c8c156a48400c0d302f79b7b82060860318a025d45200961a2d0358f104108016151872f72d2fb8402305d4d2d2020b8e72b24287727272727272e2a493936ebb103abe7f1225fb938e7eada22aaaa22aaaa2fabba5d3fea4ab6fadb5d6dadf2d28ddf6279d7df9f7de1ba28fa8d46e97243154430300140013160000281008860322c1609aa639a22a1f14800d6f8a546a58389288c4491083680c116314000240440000640430180501b8b2935b6114a098675414a452b03a0b9e18d70fb96bb191ec9d658996b6ac4f2cdcff62544b18c96e63ef707a2f08fdd292ec19ac8f873cbc63be8814209b51034ae06241c526b0cdb929bad1e04c3fcd9d14c3b37b991eb48c14231864be600a5e8318863b747faa28fd6ba2c7e7af2ffde5e5727a549c939b7bddcf80af4b4ad1651a2923fde6e5e7de1224ff86fb9b72c63b59dcdb174d061a943ffce41816c6a4b6a9b1de67a4816b577a99a59aaec28750ff8664e90a2d272a119532cb9536eea7f1ee3708ce6cbb974a6c3a19f771dcc3db92048016d6a8b7d2121369baf5be992c75c92ed197f805774ddd359657e6e5be7dac1ad96acf34c28aa8ddd94bc303b5937f68d245d5e4bd4bf1d662a1c4ca3a04b10c0e2156ad21c412339458118626dab7504226e5866dcf88a8e1f34a713eb926820f1b9cf9e9b7047d5c8330c3e9cdb2dca264c4193530e1c74ef4345cb11d6f2d097e29d298f00bbfdccec39d34c4e5f4c801ae2fafd937f08dd11313aeb92b0dfbe3662b96c15cde2713f047a812088b894cae7289cba7489f0af661f348c53fa02adb2fc727c51e714a2fd6804445cc261434ae421641a0ecc2bdd68cccb6474389569747390d0ef146bdafc2acd2ef012a7e1a6eb8d936712fe9927870910590ff096634c566451bf876c2eddf0e97054565235918e76406fc905c1505561b4a4f24acc40935398376901b790c120e834be5133ccee9557670a21483f7f32921c69b2fe18920cb52c6849f29cd0f302caa57f29aa2cd7afbd472de7689000aaf96e533ac99914fd5801a27c4488ea7113da8cd7e4ba5a269a1dad664998e1c621c4cac2030a4517d2c41637d7516e4808d3088c80bba387fa411acec3b9c104ea30c4682d5252272838cdc86e04f72434187462e6aa0a10ba62759e681066bb84bd695034b8077bf6127c98689f3903548ff1eb375cbf6364df2c6668885e1a68999017ceb24abc9041cffb177020e08c98902c923c03485993a13a1efa1ad3cf5c50814f71e32e78cc03bb43d43932549a9d55d0f2b59a080a4c304b35e8dfacfee6cc04e0f570d34afd0fbb03ad0037eb06fd11f9339a999dbddda73ae7272be654a302d0a71cb419dc1544a543206258eb09d04d31a4cc2c9341cd030c58f2ed1e8be1c612897fbda7f1e6fe4fc721d967e06fa5fa38a5c246d17d83dd591f7c22456ddca2faca6d51b824194bcc87d188426d68bc50063b36e95515e2ee7a5dfe4c790bbcfafee7732482ad7eb4902aa68f9c963ab740d504ab092e2a1e46ddebf2f7f3db24c2b9c66bc7157ee1eb090a681c58f1eb5205804d11092be56d55bea4206e4b00790a6db9a7b1c153105229c71e4f2f283f8c491ed6c0f0b0c475f393c7030384ae713577df81156044bd152b3166b2582da72c8dc09a471e6a49330645ee331d591af04759014f2edaf9685f9eb6a3e6d57d0c7371054482adfb1ea77fcf65e0e93d93a00c80926d245369449b29975b2d11b654fab730a5bd973ca2133f3ff0f1a35e50800b0e5e98468a7891908d0dfb211d93bede1c003ac2e7f821effae34bbc3f12e86242a8758f6dfe12c2a625be165ee50ef158b1637cbd82c49fb3c0fd191fabf143405f141042448595c4a82324e694a804b3e3da92f426df221e07a6765ce34d78be2c23fbd1d6fee39907ce4d9070131f6b376e9c5ae0837a84f8b3d0add3f232568b5454a9263c919570156dcf1f276bf25d1283603c67e9a4df2872df3a704910634363de75eebd5cb23e4f9bfb2cccf3fc2464a7f67587b3fc79a278355b49615c609cc726e288fbc6a5f514e5096b9c1f3c88bd592734399a8139c59c2debcdc5891f826ba6361e97b533f160dbfc5362149fd2ddec85a04b82a4bb6c535ab6bbf7839ee0bfcf0394e564b61c46a2db0acd64093d51a68582d266f1af8de16514cd3d98e5c74c60cce3431f620e8ef99959d76beeb3b955632ec7b5991eb0230702673647503bbd22b541df854c61936c6c1f9527adc5bbf5a66f7f9701ea375450f8c7c1a6fa5418d6d3e8d74d2bc97b1599a4cbf1ba475356cd36c7935f556862ec3d2e532ac34ae87bee0eacf82ac7c852e5ae182bb1ef7f364fad7014a389d025935e6f97b82608c01a925d6f8a0c75cf9fbac785f916143e98434f166fd74e68a6137f8ec97139b4ede4d7e3e05d26b7d71673d3af7d553163bcc6dceeb8a72272f2502136332fdc031946690a86c4ada129c922f089722b0125c4a12fed7b559f6cb5e77274411b7e0e1d2cf1fc307c4124239805882dae83ea834757a3a256cd63adece2c12be68c900abc504a4ad2ac8deb20f5e562dd22a43ebe98921ea31561608a5ac52d341e312182f12f0af84788d1a3778d6fc744d9a67c23fa9fe4c518533dd0fb9d26191384f200f78ae6433d31a5a333740a4f7961a79f668897612e8d2c8c3603acf6ccd3041ad7293a687ef00ec0c7b41a12f074ec9913e8e9fdb956b722eecaf532e80500364104ac00c428981eb8dd7970a84ea85c6550700650fc0dc63fe8179dc01cb8f5ceadd4b664d85a7e26082255b0b6f628878017c714d4cc71bcfca28d3989665a63bf31a1cca06a28f96b0be8fbe6e30a61500f99c031c9e58f554725f18bf6cfdc83e62d9ed6fe6f347b25a08170c2573ab8ad77ce950323e4ebff112743cdb9ee9de7c46d69dd2cfc761921607aad3d4345d4018cf4828dd9c10070dcb0a0736c28cae7d545cdc9e7b5c8b9a35357fe7641fd63db71956f5c044886ff92582c82adb6737d2eb23b63ad0274db685ac2a2d59f641d9e06b5992bd50999cd16db1a79fb102cb5997fbe53106d04e7ce57a62c8941b62c96117442aadee7e7b3f7b45135156b41359d55235ba3a795fc1dc86a48cbafc482ce73ff694c59990ce516cf9691529fd754d5630c3f285c74e80519c575d02b0b63515a991ed13d3bb79cde84e864ace72334939368fe1c2cfc068c4383d2871c7c0ec65a7042b504979496bf4ada18f8d0be97aff1c38032bb00abc905694f33deffc4b04a0b6e3f3e963a03c8d467ad4041cf87749068c7d70cd39090f844cdbb2517bdc8d1021c09193458e0cf1d39193a51d39f06a51a4d96d9ddfeb704108696661330649adabf924718cababb11e716c53979b2bf65f3b1e21f54aeeea638faf2fb0f6db6f388775c3f2cc0d8cf6bde546963558e3ee0447376f4333728136ba2023a90e299805e0b8b0a0623542a268dce5c25d8e10b4750a9a6bd5acc434e6b0c699d742b14dda9d4daeda58b2d355313253f9c0c20219777360304f088ddd074460141a8bea90bec774eb548b37abc94a69059d5bad41aa49db72102b5f508c2ea6d2a685f3cd4574e1aca29bc7adbd0c5a9c51422a0318c2510a8e64ff4a6618cbf68ccd74944ee0795a16cd849e3658034fc82408bc832516d788845ec3218f764d15f6f35e637a6ace2692c00a071fb8b78dc50bc63eb489affb0823e4a341d4d8ca97797eeb400124e00bc1c6c80ae6457078742a71b672786251a6a875531aa0d5a3a0f4fe1ea797b7f0134a786f1b42f7c64745804b408dd86148be7d8ad0d6d44390e8cc94247b3ba5627c2eadfc94433e314ba32c7f4ccad0179837015e82542bfa911740f26daff0f92a9368e3d4682a3bd59d90075878f6a24a0629e140139358d0a5e629ac4178bfa6602bb0cd99c5e51f5c390e4e8a7173752ed37f668c980ee44959ed6b286fc8d3a9f56907980b33b47e31630fd25def6324cb01a37008983dcc1f20c71de13cea02847c5db3196b172e51ee01e998dbb615a940d3dda7e04319d6d0602d7115d8d2dc8e910aab471be9292164dcf95b655bf98450fd219ad3501d9300246deef30da25c5d2b51d292a8966bf55405d5927c289572561ca2126062a6b24fb00e955a66401cdb8cbd34fbeece68fdb2c1be7f5371854da80d3532bc004c82558f404091aeca805e7fa3288fa1a9463d3c2f38b863d5111691b66eb077241a5485a49eb184819cd7584dfb8f6371fe19b7841a4816c46a1da20e2c79afc0d5f11981fe20dfc8e3fd9f7b07fe2dbb47056fdfd941c4e8ead7d8dcba9423cc555e182077caaf220dd3f2f49a91a4de35116fcf596e0543e9802229a0f9507581201dca996a755135f9aadad3aa2c5fb13a66e90bd6be00969a2af6e77a36266e861a0f363593765f7f23b0d07f02c3c01cb805caa210c01661eefc7758f60e496b833fb2f6eb597845d42f8e1c4e5e30c90023e51e39c067a34cc388223650cc483752fae0d7f8f133d2a735a6634652ae4673401bd0e2cffbf2bee506ce2658739d40c8ef2e9db156a135e50621bd77d989678fad991b18d57f4b8d2c6bb4c6bb0986686af376f4726d77793612dd6f4c508ed0867a572c01cddde8c80bd1e5270664576484e6e5bff4841a739f70a30e5e7364e187bdd3755a978fffa7049cc994ec0004efc2502f5a44a9cd402f3a8340a0a738ec38c3605e9428f4e9a178050253501e931d610d0a06ec5e14f757485ea9ff9d1abee70d3f2cdb6887639a8ebc54f9b04fa880ce3aa88f5cb6ab1aa86ac462eaef03d2f33efef8ac5acbea9366ea2760de5310638340639cf4037810a20a38db16491b471fe4b79d1eda17697358fc20f4bd921e5d510325d47fdc3c4ecb1305e7b95bfec4eb21899f9f73699f9be0b938a31530735c152d729dbd1e2d0357eb6e924fcf999a21a577afa9abb278695e82a6b930758c8f64c08ab7f5da296031b82b0971c4930b476c8b84230e1a1cf1ca65845760e5084880e5d5957bf3d45457f5ce1a486c9a59d9b6493d30020b682ab96d1308d91a1e686f00e51ded26375fada91dbf0c5dd25d2f95008bb0ac619e4635811551ff251dc80535ba01a449f53fb9702eace8ac609ad0fa8e04d2c4472bbdcfaf4d53a4424daedb56a4bff8739c263e810326a4c4776c499c06457ecf3a515a414b7e48310bcafd156ec4624aaad277009e4d6f9f8384a8dac43346eab7cd81b25046040b94451911fa2213ad354d3a4e27e76b379f0fed979ee48bea59df3e7e6517d35d68ce1f88879a75e6a50669c1fc1c4b7fce5000d0b147eebb7638ac95671b613c385cb2d60e0073c405ca92ee4162fcccb5f4532aba7fad621976704a96930705c9bf77805f2dbeca71b996c3edac5dc724af3e0deb6a6829a6ed6ec97731d345f72fe09518d518fd6b8c3a585c73f0b7ba9aa2a56fd615d19adc6e66ab2d35062345dcc87a7228c1d28aa34d0451948b53a53ab6ea47a0efd84fb81f3fc9090b8850e40e601e41d87f1642f2af1e1fb9d78945fc91bf237cde3ed63129e79bd5b4410ec3be685b86bf994169284bb7e48b44e65c62fb1ba8fe97dde0d1ad45b5cf7ab3fd851852d9ec873c9a991bbb3e519066d0f108edde2da17cc9096e204c1c644675c2814d6d224014045f9e4614b350be902866238313459082eb4c752d0ab8b306e4f62daa81a890c4e07373ef0ce8ae720c5483b872ba0e672d9c270e26a64e7b791ccf3dc86d2ccfd1ecc14ba3cec519c71789d9dfdbc1555aee88355b0b40d3384e88bd7cc6f0318e34bc52f137c7157718bd290fec98f904900736d81b4ff3fb389ed7ef4804df1c5f7762113188986ab74fb802ca2934193d3e2a1048278f6cfe82a148f07200daf0b8774030a0d7808c1eb96ce18db254ae8eb2742057e696c2f4226c0999b56101a14f5fd21da08a4e07f20de41f9652bdad33e1343a1ae47453716701cc88e83fd609724ce2319193bb2ba129928ddab7292110083409189b98a272a5f9173ba0b1b9e60371db2793d9820737bf2c7e56bf4a62fb69196f73bcd9b392e5a4977ae5125fede1a1d00a7a44d24b541b831b728dbccdb6940e843111a2bdcc7d9c18c987f7b89891cd04f670fe303af0752a7bee1c655ac9bca4e0859f8289f57a0d9bd5ad116c5f3561d4b0997e466ac6dfd3d47ab212bef4cc36b403b6d47713d86424874a19ca11b7e1ae1f1d5d10c1ab8df55b8fced81ab944339f7ed889f3345eec2f78579278ee781790db847f723c8f58c0f29b351a0ec0e72a96834494b94e04d18a842f0939a0d6a36ad788008adecd5ee81a19184326be2195946934a4b09fd29c844f2b5ee846bedef700040b00478b6e27549b038828b38cef5aacfd6b9461a429ba3e943e4ea025cf2eea80c5eeb04a053156cf252b7c6a421f801468253a70ca5cb888b6887d2248b35240e11c1f4dbea8c1258bd3210d4ca5beb45d58c1f042a5de9d5473d05f1902ed9383dba997b29cc264f6d8c54ed6610f083fb37b74491f1e6b83f2ad63ae9e5c85232ee8d4d8272ac25daca99b8ed2d366a6ade6c6f3cee072d8772a0a03159471984b5683574167a8e9e466735904f8be3b0a8888faa8f37d9d53c660446cb596bf672881343469c4faec11340f5a5e575708def15f93a4f7fb960c793d38bc960814d71c908cda98f4fb542f21265fff6961b2b77a70b8251144794741e5ce884f2a7c3f26f1417359688827d38558af784e29340676f738d4b753e496f7b213a80f39b910082d756e9f7dedfb64f5e0b6607f3728eed42964d923c7cedb4aaf7e412f76f9c44e22a70d4defc9fca35a1d3d2c241a517914638514d1adced6978707d8aec77a0b56883e9bc2a68a186429b807dc6a5d43b6ca92d674c5c0a4f19b0837fe3e0c9ae2fb9cafab62ff2f6f92efb88c3d2e6abdc3dadb91d30f70603882f5f37f4152f6313c98248c8167de28c9e899ee32ac4c01f60aa806dcc6557bde7c90222c23e698e105ae3edc3d0e798ee35fd650f48646b178dcaf60c76739131e03bf79dca1ecb156e76341a4c58a6998b16ada792e78905cd05b3361e5659533ad547ea7956438129a158a2db4a523c932d4d133e93e43476063f865570dec50fd1730b1719cbbc1aea08e993da6f7e17e6bb9bf7833e815c4534b40d2de069f790275f56e2a5d0c8b9299ca6ef5d9342e304145a138aed156975d86c9c0d185dd401967ca5359f902f44eeb9e57e5e850bbe24eb5e0a7a03b6902a822ccf621d94e7bc44d6e3cde9fcdce1b1891464200c1dbc6c52f72344f5447006e1ae437fe8d27b52d35764e6a1f29d04d82f4d52c6b21e5d2092946d538ebc18c1a41a3f0811148150af970f804c5289dc0ffd32614a16502708a43dfaa06559f0d5ecbf457e9368f54e64c9c54ab47395493190a867be40f4ce3ca68e044dc88fa5135791fdf112ed3f49620ddf39e3304e9d21756807b74e92f4da165cf7a1efa02e0ae87a894fe62908e68244bd901287451efc8d2363672683943dac3895877b7a9ee194c779e53dad76ca42c01721a9d6e8ffd8260eae459ab829ddb94c59d3ca9e67ec1bcac1b29cb008e4647c78f9f533075fc8603fae73ee5e071eb9cbb8424eb278d2a4b06a0b2a394150d75515d951408a6cd44294895768ede0a409754db8692377c0750dfe87c4a0cb53c4d76a13963447f81196860a965527d2da6d61d76e000e75d151f17869e2a199423aec14e87d555c185fe827b2a4dac71750c2b0b400be505f6568a5863ca0f2b6bc416fa05ec538aa8063b85528da316fa2a8ea3836121943ba8fb900307b931a614d6e6cafd4ead4a7427848624e8a9de7350fc354062fc7e780521cbcf93431008fa39f205c2ab9f9b6f408cdd73e703889f46f127c1cba0ff40a5eaee21a04eab4af7221da76354fc12fd4b880ad28f4c4822a562201420d4d293e065dcb8546a3700d2d6edff4f9d8a3cb54ba080b9a22dd7ddc8ea918715c5ac12e06169fc36259ca669cbbb58e717d432ae95ae14ab19c24a8bae0919d764b7090d9ea63148b3ae1eac7eb8e4aba6059c9cd24684ee14341f23b57399ea0c5317728d5f77435d38c071f45ad50d153e4045763bdd303daeca4d554fb0345afd00525256b01dd0c4bd96b9cd760795335e8a081022ecf1d78e2e491629e655dca554b5dfad6eefa3ef1ee45e7aa78d217269e93d8c6cf217a5668d19f489b1f51666c1a488f35f61871522c99f71bfe035f21a9abcf53afa4811f27d99b646fcd0e5fe207d4425eff2352ae42aaeff362a9e9b8121880e6b5bec1b65ea12cb67e5ca4e686c426229d2254aad44fa5d69bdfb3813e95b7fdc69c108453a3b3a15a248cb331f900ae980f2822c6d5d1917d5a55c7670ed97f87af322bf57b29ed05947776016e2d2c3f22fa8be611d521732b9558ca1ed3897075c81f89756cb61aa6a85400151ac7ea92c037c5f5de43022a252e39dc21a250482a190b2d946927a38e06117f95c5306f734c8b0b7efbb403738c6bace37fd089189c61d7cf8324a6a07108c81dc49858d66f6c19b529cb82c650a89f948eac71cc0fe6592f24f752aa25b002c7ae74859cfff9d9160bc292129f627d305cddcebfe397bd14bf482ba9c56278869d3d4345b99833426660cd58b0c4a8952304d1e91861387d1584f1e2c6479b2509179bccec089cc7c66024b500b945f2890df45455b444b06563c17c8dd9012dcfd10ce3e825c1da14ca7080e1f1111c121006a31a43a0410376b65a778a6820192c6cc47e85e7574572514650c5a50c7a1de7446ca289cb87d0edfc277e02683235de381212a1679e79316e231eb2bed0624a2a92c2f0532e4ccb796c9df48863eb1141ea88d6e22d40740d2f535153319826959d4658a22bb901874f0743d1269a8b9c8832a68b81aac9801108fee695c172f5c5ddde72aca9cec8ec18214b5b0df8b866a91156d27ede32c6367fb61dbccbddb9dd27d6a3fb822d38593c2723f6f2ca44ebaae772212d86e7dc84c3155dc90260b24c26d0aa8d5c2229c14b9165025c279616de7d5e8cebabd3275c20bdc2977b937e3dea9fa14742d0d025f1e6f9a790481c4a933cf3dd3db40f3c94a5181d1545c74b3c734b5ef69eda9a9a1b30fb201fa4b9f4e1bf0980be6a4041eaf099c5e31f045ba75f003df6a9520a25cf303f5e6e918e07412da37b719d5d6d9f2c68c5f022d85be6d8547fb9e744540d75bdda81a6453f73312b532b260ed2f3bf198f0e0118afc0686daec710a18225009f5384d4b13085a64771d4c4398e1ed319d21347afb8a7a84d2f8a644692c80df6ab1cc2ffaefcb8374ad14ae513b3da4d994c7002d1c85c790887a0774a078d95632c9266b4c82283d18801b2228d5ac576fe942550ee9fce8c185211000ca06ed0d31cfd6d792ec28a6ccb3b2de0a2caa64911f4ca48d5ea0b4a7c1f9cd31cd990bacfb84767ed278ce5c45fdaba8671bdbb78010bde0c263e9e9e845ec140ed222b6a4f3cf48d2cfa53175d3195d0b0b1fb9002094b7a1d17239270cc55e1771cfc373658b409294d5f195be8e8968de38eccfa74d4fbd3bd270190ec6bba79c9af64d258d5f1bedb59e493ee4a602519c7ac0a91c44686a8c0bcde257278c95183415ec99f51bbe8545b1a1bd51e313ef5b8dd9205cb4e4927c73c7952fca105fcddc7a9bcec432bb744c3a993408ae4e16830207818df2a87e2d6fab70319bb052d221c4072a448116b2e653340ed97371e936000fa9cc0ca5510027037c9b86666f1b4b938ef3e0fdcac5bb95618291be1257871758001b2dc0055c22bbf49dc279a11d0e05f6e8c812f3b4def78492b29c010e03767e67b6aa671a114db11c739448a45f280acb09e9924963e9f3ce31aa465772499443e545afd3c1e4134cb3a5ebb8bd75e9b44b253e19ea626859be5479950df1023de528f44ea9912b0587307f441d4d59377169c0b068350151f780d53be78bc6b73e9c90b3279b6d6fad6abed65dd21f968bddc59bf5d0c93e1ea9933ceab3849cfe307a0bd901a5b459ca14954a8dd8e0a5a2a1c720f6a10e3c1ac8530bce6bd528410ec152b981deec47bc57c38a8d54b889c2250aeee1060131884360ab4ecb7d10394324ccc7753a2c62611d62c30a51bf16aad7203d8682f262647a23a7cd7b7db26291bf8a947d3fe490be72326944593c43928def31d0554c49cc8ce240b48ab136d5dc735c872cb48708af447f5f7394e488edaae3e253b54bbf4192b33414c4a0280645d186a281d1b23a203dd1b507acb8f134eaa32dfa3f02017c36cad74190ec0dc17a5863b457d0dbc8e5c1d5817c015c0d00bc7cc1f596cb767f8d7b53b9d5dfc01adbf6b883b74f1e413c83c90c802be4c7e1357bc5e2eb0bef26e330e2010242b3d51cbe5242a355029984cecbcf32493f48874a43716bb379bcaf5e84168f56397e3a892d89d14db75bd0b8ab8932212576346f55399447ff01042cda16e132c5330709a839331ff8806eef84082c08e152996d9a9de69806d5c38918f93d5aab5dbb922e0b8a2cf826a1fe04afa0f26c52b3afb534671e03e4cabde8d99bd4d242a1a00004b49b50b31a8dc5185290e3f5e1242c1b6de1444697773b27225a5619481b67e291761354754d6da30ed01db5a8d355dbc5b4b698f6f17416c5fc167f4fbf7e6b1b53c5fb55e6e33cc99a4285b37fdd5706e0cc3342073a7943950dba7d00b64c8826e3cd545d0f38fa53da8cc81fbdca0ab04c0fc078b14b897fb910ca0dcbb6fd8e401ec6c14ba507218fc1f02ab3cc9de44bda15c7ad62f340d40e8f372f6ade9723858883acb9afc4eb60a4a0522acb5e7eb29fd20a0e1743a03a9f69733c13e4a5cbdeb5285813215060f250aabe37dd954261bbdfd1d9cd88b174b6c505abafa34d261d22a7f947c4f5459111eb5db62e18f25c9592a5754b49eddedfd7a3910281356fcf0cb9688bb4d331c6ca6303f7fa8108bfb5dafc9d57f0bd679a8ea30dd66865fb384554c284a51f58992d3da2dc6cfa909b623d506e52f287701d89ba8095d4bab38846b604cf487fe607e540ac6cd30c1d17d736f1548c4c608373212b71dc963dc586d06d1a72ae0f5a11010f8f38b0203dc11b5573acda71298ac9b399704a231050fe29fa088645fc300ae8b4b8cf80295a4251fa325fe519f23024c1b2953d7abe8ae4af27ddc5cf7a4e626a3a15235ada78d4c0dc5800b5eb4db3d592ecc9e3005d3aaa34fc0964b847e3dbf32ad872e6d7239a4082f6146a0e205fdfb8e7d2a85bda4c7dec9c10644e5bc349b407b7cf152951054b610822d6cdcc3a3f93a3c3e4f1b7c5a1e94f1e1e41964060c1ba5f3fe9e449bf30cf8cc911bdc5ea9161adff801f64f37cee571dfcc235109dbf2f061a6949a635bd9a5a9609f961e2f2b55217a1a87d00cf4455dc8d7502275f1970e66453cfe45639f99d120cbeed50cfb10c6bf5a0a8dc05ae195abf5187c16ddc889b71636ea7b8e91eea3b72050b4d46d3070a811307b9917ffa0478c0c0d95cbc44dd050a9dcc5c79392800d701c7b8e53b3b1dc2872e331777a38a52b14ead0fffc48b8b659d7fba97f152108d80867a1f2e8a47508ae2fea00bcc84af8fe55081abde8fc3f13019050afcd3adb290fb56b954ec5776e1db782c80c45686d35dc315a92977e10cc57e5c1a0f7890989c4eb75f4d8da35cbc352bbaf07cfc6af093a575a1ee101ce9a0af8f6383af1ea43f44b9c9955c846d97fcdd13401d01cb9191293b77e2a82871226e7ea92aca5b3ea20d64faf5b59d3f0bee2d2c1885c4bc68d36a9a800fe4a8d4402cd3270c4f754cd38d110af840af80a6d182e199e6bb1aadd1c866ceedf7bc2e8166bca2c8578e645098ee7a843623c14a744879e5fff2171fc08644628d02cf331e735e9720d18538e00c831a1b73136dd45b8399bb57f7d535c742c695b66286584f55807ee08f0097cf3c9090b453d5f1c9a21c3609d2e483aaa6b51952f9b9ae3be5430118b09cc1081ac75dccd144a9e50f8837137f07f2d98c0757e09136b7ab2f06853a37a7fce7a6349966f7ae1f39e1c3d1999405939904a5d64538e92f7d62284218dfa766f910e9a128c37ae643fd851c3a005f74396121b18098b2653e01dfd165ed2569c7d1679530ea575a6ecd47a70472b19a0460c47e57f903a3d2670b0ebe7a901d6d43a1a4857679a42f0aff0c51905b72f68ccdc6934de3cf2554b0f5045aa603f015522a158bfdad225d7bc2dc8b52271777855b9457b20bc1cbbb763565dc0a9055e572866ae2b2a01e0b246b882ee92ff459d929b32e430e4324eb2331f0bf927e489de282639d8c5752610baf597d6414610a96f59e465697b4003857313d4a5a3ce151d069ba17f9c44bbb349ee41ca853767adcd6ba3cde0579f76560cbe7303a8912e321ebab312524009b165450cb4b3e7eba4a7ca19d548cb09232446cc68df41548390fae45991231d078de707388249698b5a8e7f54540b7894e8ae173f1ed7d786eb2d81c0849c06af2d2a35d4d691c65499d51ad16735d9d8e66db88366ab15d72b26d948b9ae50ac41f680ff61780064006cce98f60f70c8aba881950dfd6de0d5fa03d855caab097f59738ea4976ad7344382dd37ce82146b7d4a78e611b4a39717e1a064ca9615b231ed32e5b01d80ae0685bf4719ba23249c81477fc559247672ac49b61b34a27067eb0d452b61422f3ae1bf77aa7b42d8de02dab2f1865afbc943c893782822bfa67f9d8f416e8621dbbdaefcfa43138dea3a45d06333cdf44bdf573fbe66359381db6bb5518e7548b5d01b4eda74c1d6b233a2d0047aa715ab40a309c00606d5364bce6b8b23163c953610da36171dced34bb58ca390c58baefa068364e66dcc88df569146378633a5d404608a8ab5d7f591c29c210b9cc554c21877c02d917a8c2bcbfe59b6e69322ce67fb181ce083414dfa56af112678c348261afd39c8272c40e8e124dac519d7f21ca8660d24c32695da0ed4301cd57bccff34cef4545750091b1d08f8b930023e7f449a8020415bb4a526e7a17f4f55e43711d60e30da0e83bfb43995b6a24e9748f4214b13bc7552b47ae0f76a48600dad9289d7c9469867fb3f58b86c46b5c96d4890fa728086604ebe03e851989f012881cefdf2c0665f41efc5d1aa7651be78c077916d1753397d3626961ec85b1c76796f6c9a9ef4056ce294a2e0b6ee07bccf271b1516d86f5b33244b46c587334e57545161ac67c305bf34015c86527c4e21c3fb2d44351cda5684110566bf72166851d028189f276dc64270af9514715b8530b60b36d33048404878d9c56af17b243337c1a17d45e3eb7b83c494cbcdb0d9210efabcc5005b50edb853847ae3251361d89b66c542cf79217e7c0042e08a4147034d4e83480a916d15e686cefdc0691313b49343fa083bbf8129a184639ae037a75e200c632d2776aa3986b64ad077f18d89344f2c4927b01228728284f3caef858f62cf7fe2ca73fa929e8eecce9d8c512404c75d032b8e8e5d5d89cf27f2d67bde1f748ec854483060c60c7f95255a5da00ca0e77d026239c26d10ef055f1b9469baa67ea675cf2af359b97376d4e6530e717e5a7f50ba7a0b414c2be2b0dd9dcffb6e064d6fd09242998d48a3818edfd1579844a8e6f90490ce6ea220a675bfbbcc563f02300197d4b668853c6ac9a35d6f21d546f9d065e1016d6aca19475607deb38d0c2b8b070cdbaac03ea7ac7c856431810ac798320634e327e25cf6ddd3324a0b9d46406f874809469cee2bdb21a712cd3878e751463b51c12a2bf152de95dc5d09dd485a42ac0aac1bb89e29eaf0e1a76df6d8047acfa21656610b5347bdeb76e2c756744bf444d2797f23a6bf4eb188b020eed71ba87c009900ebab1dc364af103b2fd5687be36b0eb1441d8600a55b4bb600f55dc8c5d4908b321c008ed817c84302c7654fe2aeb4c44d8909253dddb457a2622a0fc55d612b6d700cfb197bf8bb2cca1465833eb3e2af6cd4267370db5d2e7fcb4d9e7b48d66a29b61b29df95f86c27b48555d3f607337ae007d9145388fa45b3d6d61f7b0cfb08e066e9a3bae105d0cfa1fac0c34bde32454ec037c9b84c86787dd8a908bf47d4ecc1352c01582e57216c1482b9249c9547fced42f4e6f1b0eb157ae92aca29919a8b344229f76ac5abd16e811dc2f2e676e7d79f5e32ac2020398ca521b5d1389b2b3e1687ca4752ae0a951c389d7f91219c3d30c822a0d19f0f2b2b09736e9d5b242f9091777e6c3648b9ee3e14ded94e673a44d57f83f28654df0259daf57094ca0f1b7900855bae439f16848468e3d0c554c80d4061ebd48dc233d14c9deca9a266a573129a90353a015144300247a1a1961e3593c8758158605559a26a3db8812e8317d4ecee7537601de31528f0d5dffd9a6ad6af139ed6064b6ac3a19214b0283b87890c503e6821564ad08a6a5f638d67a628e42f7faef00534a2d62e5dae1f63328f3b6ae6b5844538a960442df15bab7ea9d731e20452835633d6a94ccdfb0ef2d7d2555f5224fc2b5b28376591ca0d60e6e4a4feb544d11924ae4b8130ce0bbea47e64bd7852b7aa5f4763aa6a72f0c3a2d43a04ded6ca3fc1cde2376896b5ee9e36d328eca74f3fcd9a9ce4bd92668690e879d6a48b28bc0b037c004a5a5749ff5037fe3bb4e7d387f1d3a29b20d1b20cc0998c8c3bc901e5dea8490de551f165d2d888db4b9cac9bc14d853693da52a588ede37751a877854b0814d09884e9a1e821d88fe4a9369fda302d7aeb6286a08734e77d1f3b47fc3fad29dd3b37c7111bd3131c0a7eeff1893ed00852b3f48dc754a386dd863f80eb2894ec21f8597323977d5e4efebfc5a7f8fb6d7f5e85bb8b0734072bc35f151d8dff16f5e60d7fb0f73a70a771d42411ae6f000f4f0a02022336d7501ae24e405a1d94ca14faecd9529c8ac1178e5149403d1578d65f57aeea6aeeb24f09999745ac7c85b8acca6a14372a2ccfe38bf7b2337deb6404dcbc235cc9a462b328ba13dc80bdb6b63ec45a5c83f11f4188264c95a57693cd3b0757425afc24a47996264d681e26940b34acf964662667b436b155b6ee9e6e2101a5601b68bbcca5174267e30331e8f62fff2364de0ebe8ba8330b7de4fc443d6c278d2e99d3f784e8076d28ce65c8c3acd00bd96b0fde1eada652e99cba830007d8cf14a78c8a4f653894513882afba88bd1526e873f73c94c4b0a5d1df615a0d14ff0612fd3d0bac14c4858179830f83596de989ede088055ed45501d5d0c239e27aa1971774ca0c2af8a9f54890c888587eae6aab7cdf44801443be6b5ade03554fa797c50c32f9a5f24801d28acb2dee21e0920725338a542baf9b779ab0c59f6cb91e652dc3fe03e50d43d49cfe0f364760590a1a8f2a4252c57631b3dedab0790135be781dd592723d933670aeea084c806091c2a46e54d1636ca0bff1b27fef158534d5d4bd4fa476e4f3d8503e6a61eb98a72a83313284573fc25d0c9c9ed906dc9e177251a6433d15d53b918b6ccfc67dde221acde358d88725ac384944e4b7c69ce84fec073e37e704418b0c8bc0b544375f23c4a47a9f44f633287a324acfa53b4e3c1e773ac0f0781456099124b1967f446c08c085737fc29de9d0d0bd19308b3c1dc3af26359deea17b91241b5aa6f81bc080ac9daff6b6503ed111e2586d2b89f57e0d0b84f4b3ab5e09172f5a45c24af129c172a97d5ee80b9b116c4eafb82bf2b4295c9e95fa3a35285ee6215751e04c7971d01796ca29625736517494bbebe44cb0630001952bc08d5369481475562ea14e0d10470efe601ccba8b64e00d8cf3da27eed162a8edd4c275e72c1ec24f599038ec39e79eba331d87b6661b8b4e65c2cda2c1316f97ce66068f813c2d41971efe1e9d4d3eab24e1e21cef8c09bcba0e250f71dded47bbdfaabe82321ae6bb5172ec9435abeeba8db46bf4dc93393e112f955142ea85ed7f77b8991c7c67114fdc484dcada16e584fc3bf610dc26cc962fbad8fcfa28ca2804981bdea9ec6235767dbb0e5ef12a268513e214cb793525382536bfe4c24c6dd5ac5c5a2d89db413c87450d0c8442953ed40574b12457e794a60bee336740bfe93b90dc6f0c4e0fbf9488028dd43e24568c9c6f30d925213cba02d9930f08e4f840fb1a87016de3d12cdd57c04ee8db1549625fd1c4c94080512831cbcc062302ce5d34524f298bb8237cca1cbb3dfcbc0ada7e7286985e45310169217813e5ac2ec3a0a086eff738540c34d21bf689538f4406ae31a3d58d1cf23ae0c40561325f8f2246123338403156ea237f3fe58751a044e8074bcc07a88909bfb6d58f7adf3681249e9e083b549e2b576a2f828845e0d24fc248dcb7861c685e8e376782069aa3313efe597ca6b9d831cd2c929bfa483695592bda123fa582caac07c123de39e686e5074e28a2066023a79dc9cfa178b18e512c3b8ab68e76dba277d6abefdaa0d08e2a63a1bcc6c1c571bf39b380eaee26e80f718b4632db449591965bfeea7e2679871176786386fa7c42aa333a8fb413f9e84c4efb625c8e6fe9d35a85ac46af99e337c7798546ac22995141ec1b833e7e4f208ea4dcf03029b2965dd7e2037cd98f239f71e890648fcdd118d75e614c313c0e5e609b2592d50e7f1484aa8e130bee0ea0b7448234dba773b15815a9e82f4231cc4e4cd736796890b1ac628c9d1036699c689938eee694ae16dd132d3a4c2c0168e80ece61d33ffa0d82733ea06478e5085f7c87f5eb47ccba9011b05bc132ece5b9ab8c7bd106ca769fb91f581745f6017cfd7a4bb2921a56751837660e192bd4c7407f6962d69f731c39d88e17beebbffbfaf5f9846ddeca9cc5bac43036a3050fdbddb7d3f76d1f6dd7fe1f5c2940e189b1d35dcc2708baeec122e2b0aadce79abfceadef858ded6fc3883f77133f84122651a00f7b6a9b6fc5e5b127270dbd76dd5ed00a95f906c400a08dc58f15aa71e6b51c77e507f44290714c4db8f6a7eb88e17f87861c9d83b8186698c937f4224c4d29e4246eae1512b3aa2e201c0ceace12769d769d71bb62febf11c2362af58e87defb4f2c0cf5b5cdad1f30be3bb637783717f38aff0d25cbcb1beae0dab718f99f954ef9b9ae4a04fec85c73777a42ed2a90929fcbeaf69399b7eb120a85a47c00b214ba78bf9ab10273530d781c0064c7bd7c8eb70616e8c7affda2fbfd7f7644f66fc5fe7f799585b75a62b08eeafa4f8edcc76f3de33e380853687d467a74d38c6dc7714f15b12ee675dc5affaf872813938955d711f8308e09864942e2fd2f6121941ad227567f804f2362a1e8a17de016cb04445297777bfc2eceef7622408a81f5d6d8b01aef73fa97819240e90d80f01beb4a43d7a5887a1f3a974260bd8f3beadbeb4d09bac7258e9b3beb50a4bb4b972e994a8216bf644d4c7c63e90dd03b6c5fe70d9b9d38e2e5d09f7776f97446087ad95bf999380935de9add302b08c68487bb31dd6445066fcc9e84df98330ffa13e5c83d667d2ce7305a3ac5cac47dd4654811d661551884c6090b8a902b13fc8e044c37ab40bd08923ca0ad1b1235cb122ff84e5b54dd1669716bd2e00d12c535630f3a7276844e96708ce1b846d96ef112aa00d89d31975ba3454e386da3642ca1a732e46195d1da0b8e46badf475155e6ce8af436e6d51463be0a43ce8e7d629e89204af9b03c2907bdf74c78708b916f35dee070fcc9b945c3fe1ad75399cae361e2c03b25e58855856423da2974b9c3c0842d81b61ec057fc2d2462fbd2258610768ecebbe6464c78b9177b928148e496b84b542ead516fe00667c8ceb0226695a9edbb2f13176c1d1605895e5cd7a04de012cf640a247150dcbd464a1afb67730bf3de0b32b827fc1b681fd6f2fc46df2e210eeec892652c46ba4300bc3f63910bf7648efbb5fdcba0f4ca5da0cbfbddfedca95262e4a8c06a32038f35b084c3428a3ca055c18c0058c20b5bdba9448fb76c914b615a96e17c96b63f75e4f574f6ae0784a42e6583fbfa292feb0e8ab91856af2843b01c405c8f189ca71466448fab481a62daf4a1c7041bc2b28418c4d55f6ff2ca31e94205446303cfbf695549389a92d84f11c578a146d6388d2c4dbbc1a662e8b9969938c5f3ed3a63f41683a30e6e487a3fd2a88c23533b14e4ab98a3390f01413ee76a3cb472bace30aa1f760c96e85543ee002e585fd87115f1c7ec357eb7b76b8f03d27f9666b7ae766140c6d4950eed40fc80e531a4f221d49c13fa2c5d4933e2c5326ff40c9d4bfd583f7ecf4de8e94ac158bdad006dd9c2d5826f61b3ff5ec5fd30bf52ffda3dd26c1519df8d9ce528dec1d8a8edcc257d2cb149301aa669094a0f7d981d9eb9dd3f71ff801aa6711df2efbc7d1efc902763e61ae8391dfb3dfd910ef1bed27f517d3cf2a37ed44143455544939ab69979c363a5456b308ea3eea3792cafcb133a38623619114e207aea126e451fed4de103cd1c59b52ad46c3a64a66c94e1c84b5222bc5eb2907142b18079fc730ce9f29866e956d0f7b012fb1a7b6e183ee5406e5efde5b3ea54280bff65cd013224c059d61ef4c0c2559150a1e35f3d980e4f82e6ea65c32ff3b64334ca5fd93d06508c1cc049280f746cd2065b64c03c513b937d1b751feff8bd2b93ee8de12851a1cc086470967f4a1b3da2152c783590e21390fab330b1a0d6e11dc3dca9de5e9bf151167ccefbd57c1925e12077e2ac2f2a7a090b24a4c363dfe7fddbd7978e1483520c19ee09495b5972dbc397aec4f1cf8c05662c87ead5b4934987e4cc6109649c03f4623c8fbc5ef29382bbd0fa0e63ba39393f0132435492fdf7e17ab52116e54721aae96ac930692755ef9bfe05cdcc98a8d753244548dfe5fd88204d2f04148615f94d7132ff9e2ce88b3d5d8db73b7c95dcd956d1dc4d83ea65073194a9ec82fa778729b0e8e0e2401db88fb85a86198f16a53a01ed2a8e4f10d19d51622ce1a71ccfd00a3ebec0d2ead09311b7df06772cad4f271fc3bef5b05c13e2b93074503ed5a955d1c7c4a8f448a4ae8a1258d05dba2c58451a4e1ef3296421e85c7de5e86eb42a2896bca3da7f9eb258b8f648855a9cbd167fe464e632e546733d91a784330f94be1f452aa7c29eb7006268ba6171be7ebbf3fa869aec67604ed3a4757a2eba1a57dc0b3ff26304ca276c52197f18308c773c032fb601903dcd003bef629eee2ec0d1d31719bac42071f57c4c97e82a6f651ab4f829381c2c698c7a10ed629e8b8c9f06f0d09e835a71875ba3fef25c57157cf5d8e98ae5ee69eca3e74e12ed899627e1c1036699a0c686d688f44a2a45de0eeb4a4e25fc557bd99bb3261cf0cbbafbcb93c5793c924ef2fbf297b519e768e4bd1e58dcea9150cedeb625fa93c8fa82114ab97e470dd19cfbb3f68d5da12560107ac1c4b9c70d72a4eb8d11e112a18f9cb141fa8e5108545e73d004b56260cd5264f20c5b71a517eace05a9db7af051e6eedcc6303330e05a45159c3143e952b9279d582fc7c9c334856c5fca0119ceedbe5e38f324c12854b33fff7c09b8b281aa3cd6ee6eda174b7ead099757282d24c0b87f6e434a6ac946ab583741f350a382e681fd7dad35afdc9e829ea50fbff638008cc4dcad550c46e83c36eecce6917f4393ad671cfee03a976596a4f0e7e7b93f1262927e7f8dd8e0c71a961b69a387fc00eb5b1e35ed422a4f974a95be6148463f26c19aec5d959800e89e1f5a27ed7452b9736d7c89c0945e8bb6c378cffe7f1f58836b8c9e9a7c043ae024171f14ef27bd47859373eed0334983a2365199c567080009436eb9dd6ea5f0428a4c4e5db683cf92ac86f0aca11c71c026e09e4c92e348681a714b5d974f00f10636f689b0c141e1f188959109534031631e098a02fac1516a46493264a138483001a1272d165c0ae52a6e44f9ae8112b9ceda027fb93a232ea42c46b580aa8bdf084f7e50ddae41414c5707dcf8463c3dd2396e0c8d783c65ce1d7b87a5599ce4c230564b8b34a7994490af7577e1f48151bc0c862676248d242460ce75c1741d6022832a3d6cb34b5d5dab51bc41581d7f554930006cb4987eaa56ff4288a2361cf909066dc928488b11d47ce29f2ec52df659aae58ba9c93ce910522a5d6a4daf3d6f82049df8e4e322d99f25767cd9686eaf9d2ad7c6261398290c20fc64f171da5e83220668f1715c09368570a12a8b35e01f39e8591cbe815bd9ca3e852579da56bea1af22bd196a433b83d0bb837506f08cc8c8a5f99241de3637043acd355255d93b57d7a0bdbd79dbf56c4d76363dfd42a6cce1b3643c2a1369c6562197fc4f3ea33f246576e1e0929aa38da16d8fab881516a3e6f23448128c84c1e618ddaee01c5711ad8675b30056a5b3146a8695e7e7c565d656e03dffd66b286462c6f2ce7dc13e1e8cd8d7d3ca79f2786210ebf5e2db9d71635a74cd3af8938659146530e4f9cbb7c3aaf8afbc52059ac2039013878541eb9894ca35804c5fa0e87c550a48776b422e207d78923007e959818871b7b2323f99b9205836f3c29e0ec753affcf831272f2a65cce9a04e085b041c5268ed7226080e7fd90b1f7a3e82e7bbae24ea1e4cb163d1015905bfbed36e3674883341dbe22bdbf29d7ef7b95a42ad63b84b71729746477933c95bb52feac84506995a0b88e47e4afcae66ad49b712ce3a9e512469d9e614245ae62434127789f7744861874e20872050fbf949c60d3aea5823d5a53a76bd9459d86a100f305d90456f5e505a7a19346866a1280622409e0429fb3202c9dc65f40c1d5ee11c8acc52c13766b28e2ddc2b0a7fd68cae3363136f2faf9d8b6bc76473082e6f606463d21742a935c1c540b7d02746c4640d2dc15eba963826bb5c6e199713849464299e70db4147ef8605ebc5823059b242821ebc3ef9c10330bd2864b1821b351bb81af060bbbb186dcbb1882e0fc938316754c36b8e11292b5d641bb91b784b7108c83183760f4e74191ca097d8ea062e65071fa7aab4699c727149531e2f42f74b39c2ac0d0ef747d23291613f6bc9e8b5e20e7b2f18eeaab005d843a1eff1782bac48da841670938d045df3a7942c5162fdf4f2b6f80ba6c65dab20ea26170390563fa4bc48dd3c9f0ee14a7dd356128c9a55305a60dce4fcea95d841cf78c126509ae3fbafe9493f5951898762ebcb94cb1a8785c49f22863745741403def0d9dcc86e18117e548dc6baf8e14601f63ce92e5870e529f33652355def93f7bf3696b37936dbca80194fa61866c1e7eaa47057095a4a387cafd1212fa79ebfb15b3262451f6d74badaad823722bc51486ab74714c5b856d9ad6939785b0296b86946b5601a05f45722caa778b65a5701a6f78d5ca2cd26b87391cace01fa3fd17f1f9031d0c17ef706cc66ffefe7f7486a761984fce0a984b75bf6db86f9b8d6b0f36ca8e192e97a853fbd6c48a8e1d5f9d23d03da2100a636bc205957aa80259d1da33465a60be9c09b4bd5aa6bfec513c6e112f7b8970fd83ef0a7cc5729c637f3b0af22a2e118e35ca8fbc274ec70c5fba7e4f71c571d4e11c19a7bbd9375e581b598735fc8fb6934e1f953cb78ac6984529c77c955eaf359820dcba5c3031a88141e338f7f81962828dd58204cb8bcab9b058aa76f234f3488824eaf54435b404244cb6df0c31b28820dc8307bca46e321817b8e5bf0da6f36d08a3ff54f85af98293cc784f2a70893ed945c5fd24ec83d5db7346a05df76b83ccd9d5c9ed57b78ebd01938c923fa63233c58e34153026f09b65d3bdd2c2a6e92b24a6ba9571caebab33925352ccca18bfdc904b11416924f7b8545fccb7be4b570a56e3228c41283238a6da5e1f2453a2706538f64bc723ca12d3d62c8c08ed223bcfc758c00c64c0d302fe76084b6358cadc38dbe4b9d998707b4b56acb70b37574242f602d7f269361e87c40ee8409e579b19ab948397c6d398b62bdcaee159f293f771a0720bd2655d50c67c292e8d0674a127afd07641652b26aa1461ecf927a3152b418a066038dffd2e9bf3d7854420dc1e9a23040fc4fc1d81f2c55c51609fd5cda0c8d4aec9489f640902585816176acd564ddc6b80e5424bff2ac339853d5059ee026f0e0d719d405b2935108389fe46104efcac2490ffaa742d473512fbcca325b3319e1f98eb3eab868a7a8606de71bb59db82351c2eb179bec0d604193ace31dac48253b90e7333bec911a83357f52a5984bf38867ea69de4d2755afa09a6dacfd96a2bc5123bc662af22144ef8477e7e015d32caae045955df4dc8d3f26794c1b88fa649375ebc1f2cab2c1cf5a36105cd254b0792ad8e4874bf974ceb04e2888ac03bf3ee76d37b586169faa939654e293010b94aad986c4ebec8e47845015a41e28879a89b52ca6cecfb8215597464fddc096ee0e2fea60cc4f52020b56378fd898aa8b36478f4781b512565d3f46e8bd0b094c39e355ff21e5524e11cde4c42d1d2bd802d2a0e6caa2cbf1d9a7e2dbc980e88e8259d2de50a7d510f887b62db722771ae051569448da7072397b567613e68b1183c3aa42cb38f60e476352b1b458cbc74764dd7a64da2c56cd44f0e4fed76043daae3a87483751106a05d1cbf010116841f79e5838144f713c0f6191d2de376b6b89f91f4990f9233021fb542ea78c660f0e6026177a969010182a54a96b207b04104fa9892dc488a097adc65ce1da2ba21a4403d0eee579315ffd88658aef34b73724c4e03b23bb22743f2fffc0d827614042d11ea35bcabf3a32c3afe568503ea01a3a2e7552801195d39213e1c642b4b23c70720332dd9eec7eee08aa6cae79a88502818f782f285740824a685c8fa34f08e1368ae4a3e6e2601c293b17f5599b2ce826503b5d737012367245582b045c4936d81549826253e1a9b6aabd58ab226b23e7802124a9a9823e409c9142cde16f48206661a97acd04647ac6db6e10964ca9da7ab6784e16e0801f9b45694a5731057070aada6fd414c3a07f7b400f5b7d724d9208755794804c724c321942adb6b9262ac1ddee91e849600ee3959c660fb6c1e228fdcfc543163e59d3ff671d7c09072ae630f06dd106eb83ca2d4484498ac4167343db829e9db12003d093866a0a350005592d575f6b3717bb818aedcd756a9b73e77abdc3e5bbb3f1f1942517af3447c24a6b90968934833f9442927a157c5fdd09bf3a40992971960c7805e93b656e9d78aa4894ce663c6adeea73af3f79447a51442a5f70680c3b0b7a1b09abb3b0a6121e8e8f7ed8037c1104ca932a73073ecdf6217f038d3a1391ed750e74a1bad8d96a4874b3254741ae0ef3edd35467dae3dec20e26a9a8e02254a6c4b739ea73761a464389bb244681051635ea862990ee6f516c713e539253c951fe394174c30e8a294a49be673d657a4fd4657277931b58e515a994a1a8b991eaeffa6751b5e7f42f89c644fa9067d71f3ad435023002bfed92bc6af2de5f6b1ac3e63ce5c226919540d3d53e487c29ec811327b9ddad96c2f0706b4f65a8028e63713d0d1da3c058bbd100fe01e39fa71f0c22278ca5460486bb705a1e77736268ae1fc68b7747e8d5fd127207594cb294eaae6a8cee9683d0babbe02492f71e8a795485f836b94d57940805291e612ca8d9f88c1f9eb5308cf01876b574577f90526be4565f4e4dcda73b6232deeadc53eaffc05a2b30a4a8103b655da00ceb526a0b4a21f0bd63421eac856f4e1f99f609d45c43a4c78045337b7a52dcb322e08e8810d19f09f969d7260a8e0dd731fe8e7191a118b5b50aed28dcabde0f140b4df449d8fb6847281a4c971b7b1234b90187ee6c165db11c730091e6745c969c66721015cc0616a44798f5211c886ef56dc9ecef9dcd10c3630fb3d00592c1d4634bf76dad52d1247d5ce4d1e8eb6db1df1d5ac492bf6f38a4a8565ebc918e00cc928b1db275e2bced9a173562ea336f304695f767eb27d63167377423133f7dad480be22e81ca91b95425b40d2c5eea57941a7326b0fddca94f5e0c079c600313e3ca9425c10671a798349236135b505e8d8025894026a864980573a93dfac1daf70748b38eb0297f5854d003323d5cbd5b1729401035e7e29098007d18a1cf16dc9676e1835d106ff3638621b072e7ca5e231382e8bcb2d3df044fb8b94face986b770351558d3340d4bd4f47207d05a3492e94b9098373049cd0aa54a94b254127c6ff5af440e30a0432d4b8edd51f0bb7a39c9eb7979fd7c6ada37f629fbdeaa4ebbff44c714837b40d016f90aedb789f8263b6c3076431d262e7f452e566c0a0b68cdc5c7d2b2676c5d920577a524030c9f0c64fcff52b264c9f2e9fcb979ed09cf0451fb543ee3fc185c09a19a6e662e60cf982e41f1ff47ead6c45f661d1c542b33372c03506071269b9c19e7560e93af690ceeea83a4d40ec8647312332f1c8aa7993da4461f28bd589c82deb66eb107ee0e68b87b312a40e3aa5d359131835f104ff5a6bf69de2158c149d337108c4a34d734805b880b8040571554853a91c4f8b39bd3f32841d708529b0e036617d7459d55005d8f2a89b95017e3a4da812748e5cc334382913047daae0bb6e6da1cf06307b49e79b54a551f7206ea5b07a7393a883b2b5454654392437db9abf09a746fc2235e3f1cbad4d582009c581c37635ce1eb5a73344e0672907a21f92131935b337625099a73b4b19b238735b771531c91718be21c918468b65b859700e8093c44c3cb0377708eb0dd9cb123e7e2b069803909f2af5c56019a0c7be49d8c2bdfa2586ccb4a3abe01f8744f5d1337b02e5dd44bf880c580e3dfbc47564ea620d9cd183a3e73b67a6c3fa6280089e87ece5b484f3a7e8bb3713641f9d2d733fd32af0f1a622f3c0568e09a017b25ddd8de2f5ee62875e81d72bed337d5d37c3d28d434a889d068bccba6ef92a675d2bac1ae7a43598c254a79660941d1179344f50ad4b6f578530f32109fc00f44c6d235cdc2cc6bf13d24bb2bd67dbd425d411721805e293b0e286123cc054b81c88689cae25213b24379047b71602c9855d8b0084b2b7d1f062c2dc71369d67091075fc8ad9e4c356e5a3be5ee4e2b0ebd409227fc5797221b3c2788092d53161fa472e8201195c288be2e4e98f96c8560ba9d99dea13b098fdc5c35d98300d9fb0bf82de521f02d3507855d800d23a5e431783e092294e97b72e9fb23c2f460b548c95f225772e08bacd631975fa64f1d32acb36ab2b0f4d0f866f579b61d6ed9090278760b6762ccc0c88898646939e9b520e6daee5bb118b0aa7e5f32f89f9b3e9f5e9a1f406cecc6b0621d11e54f90303cae686c4c1aa28bf690ddffb0f4965ced2c5ba06261a5193dcbe2568f6be719a9aab54a195cd4225f31ae92f9386927d20d4e86c464313412932fd6486aa54626d0b12cea25859560e9aeac4f13b0fa71001c8916593c706628c05c33598a7099c8d50a70a1b2a447f41a7cfb12710c93f18ac0e8f552985b5062850172dfcbfa76dccd8937d26304751343e6c4a533ed14122288870d333f012609d1ac17fb3fd06d4804ca85ac3d51261318fa16840cfb901d77fe93cadee73870f93f73c2c450746122e6a6a91cf138d8f722e8894b1a5ab91452ecf661e26ee29d6b21d86b44f7dd4182f4a832d9a3b41aea4132d8827c792c62104f445c1024493f3a47bd7a15d2d2b637675a1b97193c221fca896b45eb5015155466530ab80de515128837c469a1540894f9fc09f4681f365eb17da9473d3121081d4f88da3399be5eeeb2dc3872cfd29e27b3b5bd5eb299d34898338b9f1910f444fa6dea1799d62f01e97d0e16563818fc3b76536d96f728c72ee9254195ea4c85c00618ca204e937cf789bea8110e07913b047110da07c1e732bb3e5263aa05356c2dc83360e0225b39e95dc84b94c551da5653926ab7c9a6d4bcfb9299a0804f039d4a400e73d6ad494e7f3ec67b78c47681869f7e7e0b18b582b99a521c2c081d0b21ebffc419b86dc2e23d24551cc9f2086ac804ffb5a2a739a895bfc01c8b960490c7f03e5831ee0072c88d592c4ced204ab9df5d4f10e15a0615f31c9948c020eb21d007b717a478634ef7051504ef6b1201750799d7c7c3a9b46be4d633761e2d08ff7536d350196a166558b86a9fc51f830066ce6459670ff41ce6e40413feed238ea91fbcc69303352e92b5e40e61afaab20710f6f39713113fd349a10b2ace7f0d26354595947f3a368bd3094ca1c635e7d041bc4fd69d4e22fb6639e085e4cd3bf4aac0761fe2b7c6e34037ea48e99841780b6593ec7aa560d1e074d2a324534acdb20953edc1a6a8a30d6de9004a772d0d11ff2a6f06bdf2eabf28b692e7e2b1be24805150aedb44707427e64fef2e1dc206cd44bb104c9c4cf28ada283fa1540957f745e65d9572765fc2a310e55ff1583ef0f34474853dd1d163bbd2c0e81b88cfd4088b689695da0c3f30d220b98a75cb317179220c7c7e21ebe6c71ac947455c6aea11404655b6e75611d8d7095b78bbd7aa10271a3993e89c912b998b5041ddad20b2a729177158a1c6f5f4742ca783b165217c4814a474841d5b20acd4d59bb44bcfde204e1c4f6a6f87c124be1b2f82a2d38b1e82ac5b5c6fa992bd2a151f4157fa2fd146dceb84e60dd84327bc72d80195930ef7a2f12dcd6e7be3b450a25797f84022b5ea904d860e44a8a765b37c1928a611766fc7c7e93e6011b57765595edd63811f52da96fe91491df6988ba2e772490f7cd500ceef92cce111aec704ba55b7e2fe7695988b5cc4628246759a30d5263a6c612377cc7402595d7e42431dd5986510e3e124691a9e1c36305c5e6e84f1644ce8e3a5544b37b4e95ee8e80e3980bdc19c89cdb1b9669bb1647a2bff771c3819a1abe1c53bb6989915320b71dcc840749013227d795ff080e398694071152a363198bfa66c91eed344855f25111d1073407cb1ea3f2adec049b21debf9b4cb9c38bf576c411ef6859bcdc31f543ed8cd2ff4ecc56ea2094144d80e1444dfb396dfbc38e64ccd62e5dc10660c06fa21d64af86868e4efcc540895a4a3348cd0720920162615a892d757fe009f7f0501684c2451aedc8458d10bac20da535dd4d70b89c472c5530deaf7739a5763d21e615edbc540d33a2cf7c0ad3118209a2f7182855590a7830acea9fbeb7029b1c30d7302917569e61bef5ef8600722fc5f1db9af88a7ebb02e75f7e1d457d3992c0dbaa2bda188ef82d5752a2dd31805a2203d9d881838acbf5f76fc3326ac447c9509cb026d7188dd4af17aa0808b9745e8dec2dd2b0f46fccc08d25018c19d831144fcff3e81955a29b3c68fcf9e0a94dfab12bf8da41b2a1fd0ba74d14ab59e90509ac03869ef2c8b76e00d76d5ed76013112248142d603e1c0397be2dc150c283eb75acd89cd7f07359c70b7a7b299040aa03ccf04f659d88752ce7e3cfc80fe96d8dd3d92113bc65f974ebcfcdf128f0e431d50e29928bdc04055cbc38f4f8d525702c628ecebf5e12c2dbdb12f5b485b5af969447c12bc0f314a2e4417ec6ed2c3c29d89c7a729f1e4f8f48fdbc9a5e2e04cd2611016061823191beadcaea2b7e6ba475a3b495bb3c48c0a7cbefade57ae82209aa7da9c4279f20745941130f0e6f3385b69a60a54000ef0d98810d7a31e16ab0e98f8c1deea67b78158dbabe8a30f8ec9dc922aaf6f06b846c7e0c55dc7299a09a177f8624f96759c89a5b369b12882ade105f9c43b08d88732a152dcbf850c39abbec719944fb364a98112f25f4e9cd404c2399cfb0fa7f92048651f6fade5b552a73803bd5dfd7d1cf2fc9eeb21135a937951ed0ae166aad5ffbeb4aca57b39fa710685ed2363765297083da179cf385f71f3933d57fe21e276463cb3ca262892aa88988b13aa2619a5120a976dc6e821dd90b35f8b55d10cb628fd6608524e567d2e7523a2c9c60bcd6059b0a462993ff0d60b554002b4b43d2adf7505be7c0139ba834b4848aeefe3174a3d1f28caf30659b23a77acf77439056466c54521bacb200989a5e3ebec72f441c87b3dcc31f84bbbe372c87b825020f9631e7854a43f69db9ab61f9d5d66318db7464b1dec24ca80417c24242d96b2f35e546e719c01606ee134810d7b4718e99a3f292213c8cfbd57cef4f86beed349200fbef70ec645246dbf70a267b82f335e81b6c5e6a02db6bc2e710662b290eeca9387fcc1abac9985f0bb00fb7022f598afd81cf672d04e3a8697276565d5ca1a2f9b1e0d4c5b6e6157400bdc037e45213807de2979a776a48a3716003b7642d57a57dc1d7ceea907325736d4d71d240c4ae00a7062fc377e267d246b36b3e8af6b2d98cce012c1b7175029c9cbf44b778389141abc626d54e1feebe3357ea6c2977a04a2aa04d0bda1cc7785ce51e0a500dc4cfee0b565be31a75f364f0b08a94cbb1360acd931f3ad78334da363c8a4d1441c4d6ff4c01deb102a51bf04a221d828b19efc8361569f3f99414b929f7cdbed412544181e8e7f1d7addba4a652ebd1128dd9c11e9a65c1f994025b967afd1bd1d6af4374b1dd750b57bae1fc6895ed4a034dc9694574f25550fce2147e58450ba92b6a0a9a3ae0822365024719ed09c4f8107f9276b6c0616e8202b5089f65cf9f0c9762a503dcba82f0408d62b0df6b656d480396f12f40dbe41c884ba1d8485011ae6982e55809615758dcd43b0791007985caeff8f7930a247763a96d171fd03771cc0825f391d4cc3567b24dd810610e2332f87a8ff2494ea3f04535dd0142bc25db9017ee85125b1a4a4215fcf6fdc12bb9bc894929452ca1db702940212031ecce7eeeeee16638c31c6ffffffef2eae162fd996d3962cd059ed6dc78f69341a8d466b7d9446a3d16818638c31feffff7fd78731aeeeeeeedefa7038738b16414c8434c3e06816aab990e6d793f016d20c6b2117d6858b4aa70b17f8d4e549ab6dd94e4833ac565d74fbcc1a27007c6ad925491cffffff2f93c964325aabb5f7f6ffd37f7981f960f27769dda5d12eac61d561187697f8ab6b71f9f0b73efceac21f5d1f167fc2bef9315f002f607c0574659744c7a4af0d3b1a3a6bea40d7b27a61b5abaf66decc97f298ca81a4acbce63a2a9ec36f50192b4346a553860c7cb26066117aacd27830d634a0653deb1d2679a384341b7073ab0354bef9b2e9584833027d830b694ea0898c4fc55493024b15ab26cda5a1b195d2d0e0d3253b023a5cc224c8ca3f55beeed280429a597e5858aca090e6969b24a4d96bf9ba97cdadd5ccf0ea5c1a021f6e3b764f92244992a41d478b046dd934d53c7695558a4f5caa5298094992a493aa14e85f69b4b22ccbb26cd80c7fef80ef71b575369bcd66b34109696ea9f6f64f4f81258c11484006c984244992c429d0deee6eb01b638c31c615666117e6d28f3dd7f7b6855048f34bd00b0cccf7af6c8df2f72f1bfb13d2fcb23e300b83553a61307cb2e3379d756559966559d2d98c0611d29c31f6ae7ee5934c48922449f253a56a2f14655996657953edf8bbbbbbdb4551144511e30ab3b01917bf2eb0309c90661732173131b49066002c10003efcb2b1b190e600eccd0bfbe245a5f3c50b7cb2341ff659eb1c0390024b3e33aba986644292244992b384a22ccb52559629b054adca2a45656f3beeeeee6e777777ffffffff1438e303f8fc7581f55e7cfe92216560c0f004f8fc653340921836468c4a678c18f8f4dd4047036bac31ffc8d86ad0388ee3388ea2288aa228fefcfc0830df5360c91b7f77bfdadb3f5360c9c96a6fffe31458c24e7f062e263cc018eff020fae136221db6db102e25ae2588a88551bc2ec6c6bbbbdce7a019ccd9c4b153cc0083f93f34976edd03347f5d1353031d0134e33973777777ff5cb2f0ec9205689ae1359c71777777b7e9048238151553680e7ac3964c4c5c37934cdbbc09cd71eecc5a4700cdb89fd58631c6ffeac26e74fcddeeed76bbdd4a184c0c72b95c2ed7ef9f62c1521d898ce3388ea3bdd65a6badfdffffafd56ab55aade6b9640153a3b55aad56abd96b55d6df3ec618638c71b88ac3e170b813985279ca5a6badb5222896c42a8a62adb5d65ac1d4ccce66b3d96c468348b16dadb5d65a5b8ee3388ee3288aa2288ab5d65a6b4a754bb6d65a6bad305d6d361bc618638c6badb5d6fa62adb5d65aff4e39d30cd3f47ef6eeeeee81a94f456ff44948f38a962a51486ac4c2277aebe69c73b5f209695e1959581488d228103af3ffffac366bdb276ee26aabeab66396159515bef8de7befbdffffffb3d96c369bcd66d471c9f37f556a1cc7711c4711144b6215ad288a258fdeeaed76ab364cd55ebff7de7befedae561445511445eff3db0d964a6badb5d65e511445f1de7befbde3388ee338b6ebbbf7de7b6f5b6badb5f6aa3ed38cb932cdc01863ecadbe9515568b8b8b2556511445511c426ff376bbdd66b557956ac72c2b2aabc76f5db2a8365aa1f8ab52607777779765398ee3388ea378af78c52b5ef18a576caf9e024be3388ee368c7711c478b44777777bbbbbb3b49922449628c31c6b82ccbb2eceeeeeefbffffff18638c31bef7de7bef8a6946374d1dad6fade8b15a5aae162f301606a6d20903d375b4ab9ded463a8ee3388e2fede2c4e28ba228da2134dab3aca8bcaf52548ee7cf558a2ae5eeeeee0e96aabd7d9b567bdb31f66a6fffffff7f777777575b96a5bbbbbb638c31c6f8ffffff03b74891cd1ec9f99c7d52d4c4e218a5b4561c5b1ae1dedb6d34beceffe392d1cd94a3869dede806eb74b47314833dcd6e771454c424348a62f42406f59d4ea7130a75b4000b45c46b1531738c4c8c189918fe3214dd72a501c16c140bdd4196b788c0d2083e3a36231b11f00b3b9b116e083c859ded689604f4c2ce7604247444cad8906ec20f3bdb5194d026cf94ad23b62224477028f2e9a9960ea140f308094daffb0e3f39e408f16e14502c129b0f3faebbbb7b777777b7bbbb7b774f0f0839d69da7bbbbbbdddddd79aaa8366c361f34baef0e3faa8dd568022949121a357cf0820e4341e0286ac1a7fb4ecf38438e90128a74dce8ee3288bd3dc0ae4556d8415a1f78dea0431045717777f7eeee6e779e3c8371a8eedddddddd3c3c47b3e290a1c38d9013215c5062490e484c501b3848538070058d1e383d807a8696b49125eecee8a37df4bd512c31654e50f2739301881bdb13385c115cfc60042ea6038622166e20aa517b547724361f66c811d243e82d72ebb1c3dd57d841be7b4ff7f474f7f4dc668f904475e428da61050e1551a008717f888afcc87f6d0c8a1a55f820c3121a78d8704b2aa2862b8809585c21850ab9216e0db72124119a4867babb3bd8eeee0e448312da0165e2d3d7ddddbdbbbb9bc773e00fc14891cc861e1c724a8e7c3044c28da2dd799a87a79b8747083d3264454ef7f5196a2188ede93c73a7781bd7c8123b7ee4f8edeeee28c21ee2eeeeeedddddd3d3dddddddeeeeee7906fbb0f0a3babbbb777777bb7b4f9eb144f3de2261671085db8e9a0a8d5b0e3e46e86e222082d4e86e433d41de9da77978ba7978f24c89b4d17d890c2199b3529113391ce4f420c3e28e4ba628f58d063937129ce881c409204cb8340cdd28019bca70839274a3bb83288acd347677f7b6b6bdebeeeeb69e6d724cfe9bc19c15e8c0c80e209c5c5104504fce79e65b8875444436b0814511409c48826788051d28dde919dd3d70afc288189c2881040f280ef80ca1df7242177239702969a500b672b8bd40a46334041210d9d201b666201147dcb884326b05e62c936370d8d9885022b4c93348ae256c4b481b114e025d68a90b0778bb93a043170ed0e6df447988b71615a0cd875fcd315c8ed25a5a58c54ae3e162b9fa8961ad2fd22805d4018779b70aa366970da0cd1713431b1bda2f16d6fcc5a80c4a657c61ed4c3535673fd7595108af234d13549cba536bf5c7a7ca9a44c9e1704dc849abb5f776fbed76ffc7fe8f71a9e4e152c9f3becf34bdef33994e2754974fb9130aec3a4a76047499ea00fd0425a1354a7b426fd058ee49e92314f4e3431afdf88cf366e24cd914bb2ed3da65db45d09d68add6dedbf676bbff637f8c4b25cffb4adef7994ca713ca7442a1403095528129952a2565b5525159616161b15a5a5c668cb0cb2ba69a19caacb0b07cb3cbac2ee3f05a117461976bbab0eb26ec611f6a3027035ecd852d27e0ac945627a0cdb769867f5528acd95b4ec0cefbda7fefd451994ae9a44b3c5c3873474e60636373279c99d668adb370ce2ac33589926b42567b6bdabffd658f4d35b8f42a05799fa9e633a12c0a55e944fde9339d6a50e02b8502533f2995a94695b27aa5d028e1cc2b9a5ba9acdc8493a509ad511d0a447f68104da24369b927e1a4b12754a6e349f9e32314e4431af98cf366e24cd9a44d20f3668a13826baa99a1ad63557bbbfd1d974adee7994ea8130a44a55429aa9495a94626c50481ca0acb0a0b8ba5c5a5e56bb95abc986a64582b045eafeed5c25423e33241b0ea5e30a69a19be7c39b4af57a5f3f527983f7599763e3b241d91f444f8ff4352ce060e481021b401f3121227b4c96012492b81ec094222217ba841068536790689073008a4015c014c1aea4026c72089a024d647205c9c07168a161160528e9b241d6ec4841a188947ecff5f067648230d21cb025740a191ab8343ff501667d6f7591ac3ff430de6ac46781d4532216421f1a094d66aef0fa4d15227bc1613aa14666a870e0993746c520e354928e9879934e438afa5c42bb9de51e342d63791a0b0d6de9b2456e1eeff4834a41fa5a41c9787d7c275266ae37a5ffd5751312d54c22e833495aa19a49f875209a9a98341c19839e7cc5d57410e944fa8748f5bbba101048000a3190000002114858138cbb25049d80314800b26524a407632202a3a26924802413a1063281061000601180418830c428c3184652d72b8d54c76d73db0cee0fe7d9f5d3fb5f3e4f5fc1dbefcccc7088a44dc784af9ae9f93e91b5017e84586f0eca1dfcaf36287d334ae5970484ab91740695e20571ebbf66ceb7424ba793392972f06bec0345e01abfe02d3d7bb6b2365085b06a68977d7c64d39cca07305371076baeab87989577fd434dc15cf8fb36315afeda338d2507a11c9d894e12e83d07dfc38a652c59cf22f082444b417ad9cb4f6d54d65586b4cf8c649d82cb6f21236ebb2cf1b62e20e4597ae95de774f68a6dd0735a988d57b251ac2573d16a331e125866302fda0856d7242657c006bc496adf0f6c57188b34b23510bf7c0876730a56a61e296e166e39691afbda3e42d28821a991ccc30c091e48fc0f7244eb259220f8f1a35becb84cc05c9198eb70aac904474457b3635e8d13fab48d9749b43e16443d3651413f2c8d626632d2b03412803be32de01a7049c941af3013c9b023ee0413952759c383a52e83e1ed7dc28395efb77f07b2ff7c533f4fc0cb910cb2aacfb528361180834b4ae8dc30dc35c62b1f167ff3a2fc6379a0fcdee69cc221b41b3ec552db3babf16564c96f762a02fb7ae9bc4c26a2b1feb7a30f342675756789ac6a7819c08d2c44a99572afaecd952448328744eeeabc731ed8dad8a9f45bcf80c31b228f34aa83f198f8975edc23a88c4bebb7163268ef818856251f6badc64ecb87fef148f3bddc414222e5c6e5ed14179634368c777af519096a9a90221ea5ddbacd2712c28360ff2ad8fde90ee55375f45feaf6117cd5e43f391839eab58dc27c80fbd240568adc1b6ab0e760991fd0f4062beffc0cf3009bfb5647772324118a42fabca70bf468c3f211568851f52ccfe039431ee3f70be4cc2ae1ad91d18491026e6cbaa23bcad31c34b480552be8cfec0ad57be6ccd9171bbdd675eebd353387fef188bcb2fb3d4ad8d55976663a1d9324c29b8cf4f788ee770a94efa2af265314a32e294cc912ed546d8cf17571c35fb0173370e72d6d9b2f44861d4594f12baf9de7d14df111c80fbb92b2bf4f617c3bf964a9034de1c98b93d4ba83830a25499c571789d21d77f3cd8d4825a6a735cb6ed7ff3f44d85b42dedbe229e57f7f45bbbf96d25b66543517ada592ce13cb0197fd06ce12e7d15e2c55600c23c1d73660d357c9a9eeaf492205fa8da7fbcd3b71a0aef5c698840123f7cb6876b9ea82adaf33d76cc4632f4d45deaa060687068dc754c0bdfb1eac12c85050cd5a154c0eac67ad9f2f52842d76af6ad4f47c4259b02bea2697b5e5bc1cca882ff7aa29bea8c85c833c0b4e5e3259806f2bcd25a45c1b0572ba5eda7f823b852b5f229a57c261bd2b08aea4a1563e7da12b701fcd822f31a2015e7ef4f11c682740b93dbe8e3770d9b049e96f98a856df9fbed729833afbba53d7e7e966bf9332eac970a4d8c135f859c642b8516720779c7eae0acfdaf76c134f081322c7b859264eb699f48e1d2c93f4dfe34551d5ce2a35b803e50ed729c06309ae2638d143afbdf5ec23ab02e9d9e8372538eb58f0f918cffd69b3f649ba7ef1cc258d7fff7d3615e5a696bcbd56c966b42e085c8a8543dae4d8d7e2c81293db0bebddcda23d8df0f9b62806bf9a9c4dda6120ea71d990769197d746061a653afd40700e37d6aaa0b350a4b016db159ceb7288870d5ffe657a2fcbab1a9add1ecc624f7df44f1cd918a56a40a3f593b976ccbf85d53f131d4993c00d86805275a8133fd21ba1d451923f945f8141ac2e3ff2f37584a2a4850504ef6054758cad51f2bbe75a5a0192291c08cf1e70decc9a94cd3bf40812589585295acde0cc9271a32d5110b6cbb0fd437b2f25d35ce4de3e73ab1b008e6903b3bdafff65ae0446f1d92fa345a10db3564a709989d108d1ef358026eee0364699f0839554b3d07bbcd4147cbb930d0a86d64e57d42763ffd708fd96ee35b670831a4ff54969c538c7d1f8b9c8c09886ba94c9f9be09248997b6aaa3d35308c9e70d9df176f8608c455af51b53e0d2374f17eda6ae66eb19bba16d517ae213c85752cd1535ff6079867b7a2b9788b08a17d71862611478fa3c5d78a102c33e09ec504f3f46280533fdc15c54d0360a43afc384317548a85040fe6a7366fcded381d3c95940fb430ff8604589ef0c70f807f9441eb2ec304c5787ea00039575646f4ef6757564ab7399595fc3bdbd2ab7b2bc370de2a1dbc1bde5b1906a2737fabdb4d28797983ecadd2c409fcc452ff58e5399a1364dc9601388b2ad8f02c733eceb0a628722001854523d9a1c6fd99430d8fd99efc6bd80666f54bc6b79d6116f2cbc64a7c6eb8a11b93bd9cae44a6139d73e0c30f63386f54ae5a0144a0504fea498612942fc051141cc8e2cdcfff992e846252e50c303b99a5aafca1955ec7827ab9e0a7c86791380326673227692d291ada8add0be650b67d1f312793c656716a04b5495a94fa8aa7b8cb806ca4b6a3c7229ed43c1fb0a9161a30831a6d1c000f7db4512d4bdaeb73420968012fb84738d37cfa187a8b4f2e5edae4f01586a1ebfb4cea3a113b772fdda99e319b8b9f61e8892b1a09bc864064fdcfa54595de4fca517b5ce4b8dc1667d79929f23271e7055a53cc1e29e4d7c8ea0935ffbc9cdaa532e601e10982676485ce62ecb013be71653fa13cfc17acb6a05ff2752b98ee1a7879236bb32385bc97965a441355b137b6877db345a946d79b3d9d5112cb225ce4adb5d41fd46831e425313fb8afdd1290ac0f51c9b88ca0fbb709b8b9b13771df0a299cbf6ec7fc767d004d2b410aeef7a8a3aa281de8bbadda7aa8b9e23feb59acc1c07c4427d697796420d49ab71d0df60360dbb26b9efb955d8136ee04120e2baed7d3414fead29bc40d71af1784dde8878cbf58f1e0e1b350b9b618926a65ee2f62d337bc1e9d5eb1ea86495700665cf63e347fde6755e9fc51b799bb92c162ff9985c7734be70182c00f062aa263d9970dd1dab2279554a9ca0f61d675ad65c0d76afa2d8645c0b1bcd98ae42368e2a7cad669995f959be8bf5e1fd28a9d3dc6ae453646e3eb82403746cd446743ddcdeef6d2c96c586c1c193474baffd2059b9c00db15c2d1176a13d6b7726893cd50c6bbe93a6477b4225d6b872a140b086d0bc7c9358a39f621d1a0e8760571122e47586eb51a519adac2a1f3281307a2795d94f77d78a80712305085a12056ddfc081ee38bb83e12a4a0f25472e50f832d0c2feb2e3c37d4e2a7ca95ff7c5eaca6d981945008798022288efe93bd12ccaa01186a0b3d8a6aab59cf854d64f1861d78aceb3be76b959b0ce81a9402074a7ec74aea0908e900b8276c4645bcfcc1f59ad835c77261aed8ab7d2c6fc8352cb59b0902050754eaddf7a602d2390428757380aa3c4bf4397198b64e3fd13c6a4ce19f1d471351869a8af9677fa9b66e2bfce9b75a98a403b929a9a6ef91908fd8bc800d310853db1310baa37339bcdd775c4d92fb8461421eb451051c8893e22045ef97736de3eac8ddcc8c6455ad822dab3d0320051b26c7755ef77d095f064f3e56a3619ce1d47306dc8492e80d02d6c4ad485fe0a3f33ffbaf6416431b3573306ba190108a9f33842293480fb1194c750fbc6c48242ecd3b8e9c06252f0324b142abe57af26cd8183f3cd7ede6ad49b76e03f66863cef5e489963e6d49706b274f048992a05adf117a0c06d5b792a8a6adbafbf4aa96d60885afeb65dbeb18b7c70193ff3521576047eaa8ed57258cac82e879a215363c0b5afebf88a0121466ee2a13f2e6b65344d0424c9d3a52e3480161214f6fcb62d8af22d4153b52f2bef23a34e51c350b98b23168e152e3940c756200740d45c546937377df52d007e7b2bbf13f8d5e995d3313d11113c201b657350cd22c2c2e1edb354a001288e1df45d1862d822677aa0ca0b9320da2612d4710ca229632133de4e777c37f3bf868b8238c73380a80a26a02a91c4f4ccd6b260df9a8baee05da9b60543b6100e94a05fcfb33c65a9c2df7dd0293d61c288dcf7a7004a7a163e1c0f6489616dbe781e048ff1aaf73f676b3d3c67eb9996cac5a8bb20b923590d8d93d1581dcccc20d6ed1b86db26d2a8688199a341a33596c0a6aa8733faebae434ba27addc2a2a03499dc2827a71687d60e77bcb6bc0211c698d5ada47a4a4455365360842df58d26bcd0d71a9f52e500c6a8a2d2a091914e3faaa29f534cd782bbe401946c7f762795d62d466a1cef8b5f509fd8d41b9cb2fd6effeb87be5966adaf34683439aec99046e35d25e22cd5fb6f53fe8c41d0773a17430ab640ade5c8b8c8d4851f2fad6498585cc16a721936c6dfac82789b89060149fd04aaa8babbe5be2d5bf82fabd3865b395b1b9511ba2f7aab0ff23d9b86d6eb9f1a3d42490f57b8835f34b8815820b19704e45586969bfe92b0f0bb7480d2be1327cf261b2d3cc2e0bc341a2edb2aa6275b1cd89b8c43d2011501a1f40471e9f16208be9a52156751abd1c5c7e9cdbbf20d2b23d0a9cb88c64e0ef7a1ace61d111fd2916a428301801d1ec00e7c64d1e5510609daf634ab8599e19674c33d3b0b743146496524999b62455020c3a2db264bec2273cb7be9e511706e19af04dc3da2f21eacfe6788516ccfb0a47ba16341037298f43976528cb6d57429885f03365554cb64de0640550db9ba7fa71c1183c4b57a8f909142083e0f7d038f2c9b9b84cc7ae4e3c6116ffaadd942b79e5bc75417030e62cacdbec41ccee065ed39debae0a41e85192c69075fe78ff286a6d6cc1706a2a9e702a4a9f0f5db6079a3033fb80e24a77f7aa96e3c51bf95ab12c79e7655dc79ac569714f76e93ddc7baff6aedfdfb7eed01312f4313e38116b4dc0eb74b2e8b9c35e714635586b981650c2760d91341ab6d20cd0f78305c726f940b48965e53822eeb29705e018e918a94909471ae8299d3ca92b91c473c8e24aff8249ebc3aad4f9e0f0493b1165bf3f0075ff052d9a676eda94bd239145b32368e1e609133326cd142488eea5fc931cba1dbf3be3912bc29d8b5a28768c1d39ffb89e1728b813f7a245c40a73e30e7251a96c1149094d9946b66b91c50efde0ffff4f150f4f8b962d2b4961147370ea922ded5732756944638a6d49aa00aab6260ea150b2559f312a437b35634a8322627a54b880ead39ed5ecd2af41be46c19f9876be60208c97b21685858c51b92b4136d6a081f50e76bcd81d89e3efac0b009c23dc715083cf68671421112524a8501b67d16862c6b23d5ba68b3e92ae2c2c94e724fe2dddd0d41f494e334aac28292ba28a511eecf88ed2b9a4023cf262f7c23ca29a121bc8c863893bec292c28cbcd0e9a5580e2f58c58244d56ac1253cf36c90da245acab2f1131975d16c01764c3484d4ab8b197504268214b402ff9a1366666b54008f9e8b290172190e1595076140da26af688e19a06a9e51bc24edbffedf9d0164ed3a7de1a8f916091f585676262bf815665284dc3292598190ba6ad5c600c19e7654438112706596a0ab93a373ac855ba41ca08b3131f17df474a964c047cd077267a14923828f667876a6bf9b746cc5b5d6682e4a0315578357a62a3bf020e484f531434c9ed86ef91850ec3b3a58fb854b9ef121691cc6a9881e506feb3d8cbe54a9b07d9d627f7e41d10713776dac6230ae71f42bf6144f7caa0e1226454ee03e61a6627042a5026bb5a1eb8f902765d27dc44e40325610acfed099c243c1fe3e676aaeaf85840e99e3e35f82abc9fd45f658c028a0fea14f6dcc365ea83c5c041e26247f4a0a67e7df12c63e5eb6131cb6d92e31b5a1c41eb03a04ee6f04bdbe6352b3d2aa80ff3bce79c1b8a86dc3abd5d745a7c5f9e831825de1b1542d86f4abc0f827a5c9d6476c18dae75222d28aa0601a3b97092f4ee33db579f5bf838e5745930087208d8f833cbece0521d21c7ad544d9f99e5de4a7fa1dd76942e1897321dbace50fe951eb7874de9e129ea6a6b7026339486930bc4ab28eb9bfbfc9d3cde069494ddcb78a3fc8301cfe3eda03b8b51c01c4702bc0d1686f1b4ae858b0505fb5bb37d8120644fc2892804c76ea462b28fd60c8b9687fcf615a4c5ab4458e454913b0d8994234d519466ee89f9e24490f916bb1ac4d500491463f6b880857cde93151ea22c912b15e206554f1743940a77bc9b3868c491d3b664cba8def02ec12dd05b9803b62be7a2835f625f5d449e6aa987d88621cb63ab35a8d4b8ec9689d95012d18935b1dae908af41c62c90a90d87c2eeda951217a24901ccbf6b075fb5a964b9180d21517c289af6e11cfbc209a33a430243d6edea10da9b0651c3cc9ed10ba8289554fce84fbcbb86a270e410709d71405cbc8ad404e5a706f785a504726665660cb59ce406273522d64a6c123f606db9501c8e12a5ae39e27bc32b04aa46ec7f492969729d5acfc880d8b4597b5c0daf8aac10a53c5a6aaaac746c91a1cedd86ca5bc3aaae20f37bc28ac5f043752f1796141ece9c1a3d811a234fe4413459aa8345974393c74c4344947b697a2ce0b887095c4aa24296227190b000bf8a811a433f92481d3dc0c9c535b4c00751247ca01c7b6a71ca450ea4061742943de46556701174400ea0eeec2157646fa6696bb72fa79bc4bac85e3330638a2da6a32edf62d2c868d015adea3e697066109d7ef8eeebb02d4ba04a3556341e6b2877b8f18086b52e4caa5a7c3b1a1bc0e13d46ee78a87317b48e75b1ba0e49a0995e1257c7a37e31bcae94a0472f949dfe25ba8317785ffe6e52cd195402b8d03f982a3a3ecb14bf5186869ae102bc80c27b2b7227bae75a48103a4282018e4028860a9d0f840f3be54b682a67bbab0c1a6f25cde7954106f253c5a26e65d3cbebb1446e075609e748a1d87281efe5a3db795bec00c0d0225484b52ae46527b010de2d165a935608af9aea1ef5afcc13c5e9d0875291e871557463d361707a3369baa2aa2f4032499f8739879521544f482a7d5bd0d473298f24587d8453b7a60fdf00c092f87818783e073e41fa136687c85a70c3cb235818171d08e1f7c2b5d3f7ce7b46d23587b0cdc6e0c11981c06ea1fc4a20e8eb6fa2a945c0d3245a9a21360fb4e9275d11e3ef1e28da7eca8c419f9453d06fd39bb5f426213fe47909df7a82b1190f0b51dda427bcf39eefee73918721320708c8df87d3958fd08c7bbeba2f8ae4603cfd6935ce1b7c18a9010e234006736823b837fae44a848b29485d79c88a880f1dc168bed12b09844a0ccf7d8b1124b88de288e0bca8c6efd5d02b0c852d0d668f019620535d3a5bfa87e80db55760c206f163168d44485c6a611429a410dab99b62d1752d8540433674562d333aae380d0abe0c29731d7c7e7a0dcb98d4cd27856e28961e01ad94fdf4753f211242b02aa1733a8f8255ca7aa0b5a926c157f3535801c0f8955559858f57265731812a1559d93dc678bdd76459e0a7650a13b9427dbeec95b847e998693a1d414369470ca4e111141439e650fa689868b7c525f57b9a07b0e5b32903d70dad878f996aff6c7c1929c3d78c3ce67489acef24a52227539dd5744f1462424a0611821114c38cefa4c72901a00bddd7d02730e34756a0ed3128a4feaf37e9bbc6703446ade058cbc3618da6ea6f73e5bec7b23840878d4b8fc7cfc620d1bc3e65c0e1e8fbd2b3f078caa165e121f29b02b5972dcae2e873164c9460b20122725c2a9d3bdd9c59d8832b29dbb87f4be823ad31c0bcfee18395b2562ee0a5a39c7a64510acfc8555b6383493d4b9f8ad6a909915698f52a659b80d3c9ec8e82b7f35b8e707697ebc4fb68e6e489f793b7c403d50df148fff9117af9cb365efed098ea7e2e5e3a560e02437196e9b26e58dfb99a2e3771cf8addc25bf6cb42459c67a66e6daaa1c8f495786d166cf23bb77b0eb6fa5063b9baf973e8649cecb2367a3a09cdb324a363857943a74ec9a735232ba23da71025279e23851d2730c7f0a3695a2b87ef0898fd292259f03b2aaa92cab481c352466966e902bd575a83ee263efd4f199c1ea64d1743da3ba1f93bb23dcd4afcbe24f0eac366d3774b33595d4f66ffe6d6beee6b7f839b45db8a55d9eab6ea0703ac2aa61b26702d865cf07b590763c61eb9103cd47f429a3167654fda2bd7d5743fc4d5d4404a1e537993440a3d6209abb76a6cd2c25ca514cf2d620a55e1199a74980018d49957f2fe1147a50054262b74af08e0e65ef1a92b70a26eb5ad2ffa0eda39269c73021e3c0353186ac812e4cbe24ef25cce85bd34e9c5b0efc493fb2994258986feca93d4360c29524de17384ac1822be64281c3ad7ba7fd4a12505c309605c4b5762ecbc6a7d1e7883f7dd9d2bb3fe8b8b5c14a88d2d3aa904648a147463a0cc5e560afe32161524d845428779e5807d4a98389027a2979ac3f1f7c15b081d8a178b0df2a12612c6a646fdbc2e84acfde098e041c9df56c78a74d570dcfad2ec3a4a883f6bbe2af51c81b0aaf4f821d5a258caae6cd64ef0c041a109911cf3465c08565abb8b8d27382e0b42feee4ea7ec7a061184594c89304030866208a34a000792a66459a1ad88e9b7d40250f1fbe30ae56cfb41dcc7f86f35682a4e9d8fca836a9cfee623a1f1d966cc199fe661a5b2c9b18aaea7159ba9f86064d275a84e7fe7feaad4fdafc86be2fd1276545150b87ca956324097f22081164593f5c754715821a8090ee5c5c363bfbfcf6672078477438c3bffd47a03772cf603443cb2208850af4dd06b458d0f9357c405cb4b560a6d33a0a77a905e2bac0a24610621452383f01165106644144c0da854d001234a79e3e6d6a650aa232d13a3222ae782fead859eb24aa22c0db3d1861eac866e52a21b768028601595a6209c578ef3b4801f9aaece43244f58cc539977bd8f71695c20544e62bfcc51a5e56e4c71d7779e114d4cffb257e6f9c5026098c78b23a68a75a8aa12136eaa188f135572029e8aea244de5237600cb85901c477c826cc55c9135a3e735d091cf531add507165c58b17dd9fcc3c1bd3fa6fbc054348ca5ebcfed2f7af3f1e209429da7731e169321888374e23c6327e8995129e98376b8ae9e2ac98d6881643e957846bea6cf7d2ecb972c39bdb3a98c6afe5427e70f7a5fc4861d48d671d961e21445f6ce45b64834d1b510906388671540c998d2dfcc6accc6e4d309b8ad7ff775d00be77709a07e06470a96630b387a9486626b3bef45d8bacb1b3f8e0b2df4487b6df1df828bce6fd17ef82859dacf42bf69c76d6e3bc63f432b21e696b6264b6a8acc4c6f14a0def75cfc2057f21867f3ae18f86920413ff140c62122739be9cfcb3a6c8b3228a4c6210978a4ac99c80d25fb7c843a69f00fbe88185242fda1a175234ad6b24eb2873166224849363516b7911c2098a2afa0810ed24ed27215886b7d83128a98526e756cee491936c43c5c4b38264b9f713cacdc84a32b7d077f7144aa496fcef9b417e29b29fa4041e0a599bfee344baee935c57091fe517782ec1e4b0ac9a92e937dd27f40243b9adf4941e6016c359caa4f9d94b9c1305cd0f1356c6155a53de0f111a0a1e2bc5e1a0eccdc0a66b74a09bf31529c237c3e77fbfa4461381fefd2fb9282a2ac0c018a9b08536e85b8c070b21a2982653919ece341099d2f33b47d18802e3665e6f08d8a17e36199099bb31dfb82886160e8baa77ffdab2d3b9036fd18a4255ba706b3d46a3108314b1f468939560e4720c957c1afc995932bac77b5db7622bd5d0d54991a19df281028d1835e756295a14496761136b18b147b8a4ec9119cb1e8924003eda88b81f13d3f88d224922e16c2cc42f0980c6c4c9133571bb208d6c2d13964ca46e76502a626e3a089b32843d980dd8c372d1f7f19483dadf01742eace9fcd183c21af755f174b7a52c8ccf5a424c2d602183cc9c48baea3d63990328ba9e9a1f50254aefa093334f07fa3928e32ad0c9fb5b9bb83af31861c29b20c1335eea2321210d8260bbf69919f99661e49809f36596f72527e5b5abeb19dc47c8024ba25a50388a0b340977c128d6c3c817409de217f8ffbb1b2b19f8f90dbf5728187599e1138996054af99686b92a9151827ded7c4118317f8ea948cce8bdd186872550cfa5383549a0e5f333be428a28e424c8b73dfbe50a20c2c612f16a10e3b61fcd5b012b66d6ae46fa29000245d357b30352e469c4ab013d7f50ae09b28c5668611544dbe016817520ba497730794b5d2d221580f347b5894175e11b46500489100c61f8a155e196d37b63f0a421f082c5c6cce44b9267c8ed5599bf50082289957a4c37fedd87814c72559521d309f569ce3cb416f785890aee6826d5583baa4290a8a061bca81f9e18be205aa5fbc30ada591106584f940d2c26bab64047b9b6df8ad1ba969804cf6efd38544b1cc8a61c972556ec11560127b2955a92b9b1b2ff740b0eed8f6598ed4d16d99e96d504e43076b52e90155815b3cc9c481bfe8252caf882af526adaa14e06515d60a34aa08bb59a7d185f22caafbda190090801c4088e9042fd2783e34967162afa614579702e06f2329002db756c31a75827224ff0cd05ad858ff6c0f8aeaee39e6b9dae75509e2d156c54ce09b77fd4a8836e6f6745030d277170469ae1f6508388d301554d56345128d36a61c4a6c81e9b0275800de30705c63d07799d6e91f7380c816e83cda2dacb7d7c9ff709a822a234b6c35b9c5b1a04919be37e31f11089c52cb708f2e8ba3526413466358c0ab34ec7efce588ac154b560a89da766f65d23ddf28710a34140943cd2e5ca46b955cce2fced06c3dd480da279d92f25222cf0fe7c68ab85bfe2248221ba4881223e43c0ad0f127e2ad0f1847dc097e16de66f118c0e9eb2b1cf6018ee8ccbafcd45164199685c73dd214fba8179f8414f40bb788c8433290a8e06ca0095670f7e32e4aa39a09b7c46bcaea09624df6309ce6103060d870ffa3ee7e79a69700411234085fdda2b73541748efb84d031f45a0192a469250432299de9db5f74c6aff06602759b6c182b3a483c50966f29981d474ce842efc2642d0187463698e5de5b435e89940151f2ae042bb8d02e8d11da12156d533945f18f859325a083727e2c8942f1416b48389ee4eaec6c93dbc4cee10b0996f42c9e192380ba6ca9f9923730a135ad4f61c3be1e42103bbb6858f91fbf26cb67ec69d9fdea5b3cff49ce3216b66b5c500a376ecf7bda06cfa3d8aca5a39279dd002f23b7105cf7ca13907c893cb4b7a9f514c58b2b11257d06840c9b91d329e43664683e8dd86019a7e6a94812d83fba878a86de648850a4867afd6d30168a0532ea7022996e50eb1f7ffa52ffa9239405f195681f75a0ad798e5d46af1bd82891b498ed736f5024516f64301b218c1ffd9f13e8eae41c2583cf98cd53f8990f138005d133b77a66218699517e359a1e1a6f8cb157b72b8ccd078b357c892c122463f7b404d0fa634aaf7ae5a0174cf9324c73d6d9ee83fc62faee041361136bf22959a4ea14710667acd8d99b17fce732ca2406b1e44c0ca5ed28a947d7dce5ec1f949ce107fab84868b5840828064b99e2bf24d26a4334188f8603f4826540fc28f6e44e01cc4e1352224410da3b70af91d5584d1f5d8b61d45113b0a5b580d3a360f4d2e685e10a13ed7afd800588284b1d406a04e5aa1d461d0ea81566fb89256e2d1ecc7557695b0cab90ceecac6c3e168f87cb25dd15c896e8ea5c5a2e32c5ed7041d6f4c4476b50474574a407791047ca5a3cc6fb6616f9c1b1247693451f98f6081bb4ad7ac16bcd89c97a61cce01d2c5cfac00740f42e6ca4bb624dc099c10ea7ca608ed890af2fe0d2f019d286bd502b4270815d7379860815f8b1378c26c252fcefc506fe71d5f99aab7f3c25e3998b7f34eaf4c793b5f0ee7080ab5ef04489fbd36a915a9422a8ef20e242f5d1ed9be3eef62f06f444557d58223ddd4d4bcc0d6199e66ada3e8daf9e8d8bbb6d3897d302a6d3a69afc8fe4d99397380d2922fbf5651b5e039774ab6fa27aca885faceb1a55754375af706b44e15b9e9fd896af73fe319fc63556a6fcbf3cd10eed733062e43e3f539c06c22ddcd1ab9deb645da4d22576e68a3dcb635a936f2872456d8382f60203e59dde9b48e9a8aefdb6d42e15265febd82393c680785a534431eafc3b2ec5de4acc789f85b395428efc97311552726d9dc0f0f0533675f9924d7691ea6e1b9dcb410fe92a2e8db8983833927173c27d2c1b336e2947fc8147b2b8fa6592d874b7c6975d88eb48389a63d64d9512411f7df45aa8ef8d34e472113394444510a9e931e82a8882abef95b179243ddb8cdad5c6dd2c0923e0dac6c5d9efb394d66042a70504a66d41398f874ce4af8bfd82a8ec49709c99bc1f53216c372ed3ececeab6d6f32b00122966be2e3115b1793c71b9ddad14e038b72af2ba4b6c903c99451030947f4023f403e991736c9033eb385ed94a157372c1a3af2a2cb177f34deda91ae1ab524c0c47d3bb87e22cc1994c29f14ac0e6de0bac104ab3719ccbcf260e11d09d34912e0ae8126374650bb2fa3c4cdcd3fc9e788e0330ad15f62d3eb185e48adff71beb9bc28defd29a0a0ac5c5a4ab43b72828bf4a5fa1805aa2ad79cda7381a91d1794da9f9421f70c66e6380465b2af6146b3089d33544c05ead5de0d514e5d5fb1831ab78f30649a438a6a08fc6c27aea81533f4de46237a8f7b64a859887c2a7bbd1502804f2318072ef88ac525615f91cf06cfdf6b36d0d34a70564a7659451061aa9865950aae695021e1773624490039f312ee8fe91b434fba38cfacdc0e09f36f61cc441beae399435d0aa6e78cc4bdb6480608957597819e029622cd9cdcf4d529711c544817376941df57bdd4db44cae3f0c0b7f80320d720f7d85945910c6030a169aae9f90204cf6a8644983f9644e10f305b3996cbeb1e89840655a8c33ccb491092f009bba4fdff85e0de78c16c3cddac88fd3b179deb4b51bfc14010551dfeb1f1716e9dd18ef790fa8e1c771b14101bf2b39fea98d63151d05d85542897f13437a75ac8cf80f21cb3946986394005f069c9289b748227dc1903d1ea03c70874007ebd0deccf9481c14117881dad4d0580c1064c8378ab22a5658116f7d59720a7e5348845a2eb72786f912c42c67f54814be72b2cd3c51058f567b135b2af70be79d15f543000e5fe735a7fb43030001096fa66cd5d950a43ee3c5aa04f07b14c1939a526e818bc8abf574edc595c716034e1aa27065b9b42fd78fa32c64f15f5d03e1d414efd852c0f0c33052cc9017a0b89365e801211b10ea8bee70d8a94aacf8ae8ee4e1ab252b4aebba4e42ff3799e001077a83de30a04f416639d2c5a413367dca04094a5aa11466f29b7fb1c06c5bb4f5f025706ea503d0943b8aab0f78db124b54835701bc5c02fb7513699a494014903490362037ff9a992b02fa24057129a0cf777dc7eb33077d4b2df32992c53f77661ba31dbe2e82fee877d11988eb13386d8bef16e7f7143b00e28e812bbf7de6bebbd321fd98dd716ef77ff7ddd98f768ed14465b49841849159e1747ec1bbb116f11232ce4f98e5102b59288000ca2ddf19b672c094916ddf724d9bdc655ae0439dadde96c184c37fa1631b218c5b184c58fe377ff4f8ebf7108a87b24f5dbdd7d646754117e0a23c6ef10418608498eb15a15cacb194b58747fe20a228820429cdfba311489445b2412eded62ba11138944e077bfd9809f01372009d28d38d375a3dddf582f4df71d69b7d6546ede54794f9b8a303ff94a02d85af1dc4abb7a60b01b0dc3842ad2a0ed5b1c622b8f96004ecff3bc8df7791ef8f6451abacdd78d9beffbbeeffb3ecff33ccff3369b71fbcff33ccff3bccd88f9cff33ccff3bccdc8fde7799ee779de66ccfce7799ee779de66d4fce7799ee779de66d4ff799ee7799e0792dfe891dda8ed28f88007a04b088890c30e7c40b9a0e4c4070cf8aea80f17d89c5d511f549820a28828228a8822a28828228a8822a28828228a88d203f1443c114ff0756c658c0676658cb1851d3b76c78e2f76c78ead630739895d1f104d4413d14434114d4413d14434114d4413d164b5aa2aa209564deea697fc4c31a9a42b173dc84903409de9006e3e534c2ae8c9344dd334cdf33ccff33c2190d6f4964eb754a6699aa6699ee7799ee7a9324f930a7a42d994699aa6699a366553299b32324dd3344d73059282549f0a51fa743a9daaca3d6198d6e18340445397d8b50078d9fc371ff1fd0b0281808c5c171cc3b4f6125814ebfd10b3602b09ab85121d43f58f7defc8258a40831837e286be7f2dc702b6c98b1bc92a5692ec6b3521bbd8c5d86575a1f81e78f3101da3319c65d8414a38f7b594315105e3d16a8bb92a091b97c70df96b80fc5f57a8dbef88b12a36e1856b47a5c8047df106b17ad0c40f683f85f245dafed6d18e0ee8d235451b74e9a88996989842d7c7f5de6b3da3a5ecbd4ae8810225b6d9a59e00b6ab0e9d1446881d2242707036e0e775fa12c1e7755a93e1309b966157b6300d1e34190eb36919cec0952dfc43490d569f5271006b30141f941521dd98050a43051b7f00404014c6686750bbd4ef3d60ec3588b97b03b6add60a0a2693c9945de414b7322aab6474dfaf79259bb295e7c52385253af38abc22d7905dec9c6bc836e4157925a7e4151f9325e268a2344dd3344df39971c82af99457724a5e91cf7c86962805ccc599a8a10ff42e9b3b285005aad2344dd3344dd3344dd37cba8865029df9747c793ef399cf7ce6339ff9bca8c78647e59607c9b3f210798c3c4a3c693e3f387c583029f3b4785a3c303c36b6a7e58678ef81e1f1c1d3e251e251795a3a284cc2240e91069dcf7ca6699aa6699aad4c2693c904aa36251bd186b44101a6600d50c5a19e94c7b3baee31f228f1a83c2d9e5467a29ed4e7fce0f051f99c3e2b9f94cf8a8fca456ca863a393bea8f3828d6527d561b9a0db41852617b1a10e0ac3b40ec3ffc7e4947d4dd4503ef39966ab2bd561c8c956d98ae4f25b8e39349b30ad39c8320cff03551ccaa196c87a675aa00ad33a0cff412011a8ea4cffe84c8c8a5c768c91a00a7b522e82d1abc390c49e14a8f2a44095382289237144964f1247a1c93fa78b6012a67518fe8340d9189afc6309baf4a452ef49ed16b2efa05cc4519893a5d6982cc3f01f04eaa0c4917fd86c5f3b6f0b7f5cf8d6ac979f8fcadebefca0e5e7b47df959f99c1f93c5d8f6a45c380181bf46b0634305e659c0188b1bb1de6f355b395feb19cb603f123ba80eaab343c708df6141b141980eaa7c8f2cb10eea737ecebac23566fbda795b78f4a1cc971f175b7ff97ef7a7868f0d9600dfdf07096b01f4e73440f959d99f94cfb9afdd9f1537c4fb8b6d70cc2a09cdaaf09ed4c44afa0c5353aa624a612a9d862f02894e2c459b4295176df4a2fb3e265d4cdaf71d75513b6455b0a18203965d778c2d2b632be7ebc2b0ecc2b24cd3b60da36d180cc765321a2ea3d168dd759eee3ceffb4070b3e17070846188102236186ce43c070706f3c0c610185649d0a0b1169ee41f1886611f9a442c53805f644983be756771b4ef93fce386a61169df0f4d7585d12785492eeb9a690c965dd124882c8d5dd124a45ba9f493f7757bbf3957a28550a4211cfde41ff64515bad454254d5557e8debee6525748e1ed6b3f580270bc7dadc60df9defe26729112169d106f7f1bb9088b118f012cc421dd904d8acdbc21e0dbd75217114574bcc6e1db0f47cc3f6cf7dd08aab017998deb85ff56b76cdbfcda6dcb32f7c71ce7a9751075d8154575d07e9160fb0b0299081dc3ee86c90e20742986a18f54d2926cdc8191d9ea18b1ef80faf72b499273e8006204ff7d8d4b00266d107b73f7bf306012bf39049b0d626f1aebd3149360cb8d5cec7223ae71fe4d635924dbe24672c6fa9cc90e17fcef2f00fb92189cac1f0346fae3b748158ec791baad8b1c714367d2ba206bc286ee357143d7dd84872ec61887ae655996151a73ce39e790355ed7755dd715ba6eba994addf39e696a325991155594145de88c338185ee6f9a8a4b5a98458e64926457ceea48407eebed26d99563219375b3988bc71ac2985423b668d1e2c2b4d0db4d6bcb0e2fa8022143c60cd6daeb2a268cb19565a0649caeebc23219a90c95a6691b66c6688688e3b84c66c68c940d874d7c81b5324ebc438d193084b0892d7049e1e2019719760bb65bad55915427acb5f7a2334aae2a552fc226ae40f5427542a9545433d8e1059dc864c83206d4c0e4860e2728d016a18c879dc1b8b4cdac66df6698cdb22ccbb26f5774460eaa16c020460d13c458020862a44388e10415316c902006104788b152890185182fa80c0e6c6e575486e893daf7fd74939b4e4a5d54758c2d2be7cbcaf9ba30ecc2b02cd3b40d9369dab66130dc86c1705ce6acaa8aaa60b83425f2e84ce83d6f29bda454859a50269b624b56b4b2d7b1a5c160d85733dba10b035c3b6f0bfbd677872dc21b2c01fcef87a6d014b2ec50250b4da18b1b7261bf309b96751f462499a821f0054cdde236e646b419711bd20605b80a4d9d0b445267762b1d87822ab006580374015f3658e386780fba803f80353628c014acc1a15ea8c2c178680255a02a5b752bba925bb943bb94ce943b95ce4577822aae857bc96777d29d7426dd8add9ddc10ef3b936e04dd49e7a22b7527397f21064c71677a3ecff3ecccceecccceecccceeccccbb17027b7b81597e2545ccad5e0509da9a5d0567c4e6e855be174c0b16c6ee58678cfe980db01b7c2a15c0deec4ade49c73ce9f13ec4a1ccab570292ee56a70276e8513813151431cea229e148843fdc37128877228877228875e0d8526722bd54e8da499a956d24eb41187661c324b9abd642fd90d0dc5ce5e6e88f7d98d0c0ad98b76a289b29734dd642b2d8546d24ada8926ca5eb255b64ad3344dd354c470a77d4dd4d0e7fc9cd90a94add2344dd3d4d39cb355b6ca56d92a5b65ab6c754d01bb7e7511ebc30f2f15b96efb22b55c1066cca1bbbbb65376e9290c463a6a83d62ec2658ec276769576493c6320365cdf5a6b6db5d6566bfdb15fe213ee0dfdaa2b78dc1cb67a512944a02205fa8b010ab4dec1097e3082e9879406344e208186c9d62b3ae0346e90e16a1a39386169a0252094061168acecf2417a7010901d76f095afdcdd1dbfbbfbe5c1c3c3dd8a40b87884473cc840d7a0f5aea84b8b8b0bcce5052e2fb0cb0a0eb4cb0c2740efe1a242754206ab2a8d5c44bbd47f826518967900c358c0011ef80045097a10c2583686852d282c9a853eed0bf40cfada159df172036d037d997ea083a04df40af48c140dcc6801831cd8ab19b1fe3ad93182df3ec946807f7d3b03a75abf44932e2f5434692ca241713feefbd56c9a91872a3dd4b5628de8755b2debba36a919d94033b222fec24f1724b2a02bd7e97a8131a764adb4ec9c5bc8d855ad940b3624ca40677f65648a9dff4291359bb57bb3e6ee59c318e3ac5996655959cb39e79cb37695dc54a572ca3d57a98ac91a59d169e7bf381107396bbf69ae42233b1290fdf523d985daf9affc24fb00f722f1c87aaf1bbf8047f65ebb89b76aad65fc99cc39e7edeab0a11f8047db01f92bb0c21c068f5c04e47080258df92806413b66fcc0918b5ccd7390a3cd2141b0b473876b6387ffe6495e443654398e158773fe009763fc5a3ed50569501a1eb9c8adfea13f864f93e27c302a08749ff3dbc564cec407a37edcd7ec503fee733487f3fe7bce6f1626e346dcd01cffb5b08c7c1ca486c3f98f436adc840d6d326f398ed5d8e102fecd2f00ff465bc0e637d202db6fb69506e55f6ad4c6ea1fe00cb47fb9ad368fff43b9c8c696e1b62bffb8dd6b4e2e827291edafee204b6c6b2d822c5db5cbed5ae50f419658cecf4196617e0eb9dae4f25395b6dc5615586debbb725b6d4f77b97de9be9fe158ed1b5e2254f50f6d2c5fc0a3ed2edc10261d35e284f6bfc87a4372ad781462e1255c146530dc4b0383cd069aa57cc12d39b27bb35b6cb1e1addaebb88a98ebebd7ec2a4c6f6cacd64f1597b070cc5b6309063ec4627b1638e52b5fa1fb3eea27b7a40d5dd9b2175bc7999202dbc98de47e1961c3e20dda5fbc41a35ce486f055ea9041e3bf4a99bce4551a3b36a0ef3bd6d2abb2951871438b3a9410894ca69494a824d22fc790a91100000050006317000028140c0a44519885388e04827c1400095482426a6a38134d4471398c433186c418220418600c200400cccc0c910902919c1103bf40d0a12b72231362628c88420e07be6394428bdcec76158e1eb20c8b3c85649c37600d5403999316df13106f3719e503945c14072a79aa864c8a5ed70b4ae9e74c125f9a1e03e7a75b2b2c833b987ddd6f534aae089ec40930cafa62f5cbbcb0887a5ea8bd4411e2f8c0653f06592e29d40e315d22498fc186e4852830488e5fc9e9ed08d661f638d1f230a7c63413ac45c82ee43790f7a008ab22990ecef63be756104db94c971b1f8cd2bbd36109d1367250e1d2275cdfc7753394743c4430ab6549aa4111f43d2ce0803fafb27709692ec1d3bda9b3e385e062f765068cbd35bbc58dfac10652110cbb9e2caa6ece72ade85720860ad45422e1212216cba2ef0b286326f604af0717fc3e5cdd6f186b91a26cd339d690533b27af8d8ac4e3022ead05976b6ca0217d7b703d7f883873c95821f4204572d8d856b985039a0412151ff815e7678cdea1a438974b092609b6aa6a722446b10aaaf19e4c6a52d5c587d6240f0de50148888e0cea47f982a704460f4bce7304ec6579c9c1ff136d973233c4533239e889a5b31e04700b2469c0d8af1cda264c2ba4c13ccfdbdb3ae85ca6b71e1e314ed5f3def7d26f59e900f5dfd52a6635977ee3268db84ab26b66296662543333c29e140096615443cc71e20aba947483a7fda419a39f4f76b91d9239ead9a3a16de772e5ca88f89e3ad483e8b500330f94d8d27e5193730d64308d9fb5053e761b466b21207a8ed4d6a16a88fc4ba2fb94ca904695eefedb982ded61e2db8be0353e0014145f70fd7d0e319d3344515fb75e5698f1e1d60d6e6882ebad5227a271f7b4fb0dc79db5f86b74e4f14635536864c9c3a46b73a30e8a574d4e16ce65ebc5f6c741a953ef82cb9dc07fa7d677ca3b12ccee7ac11d70fb0911ddeb05aa462e1debf637913267e2d49b476dc35eda3747e6d9595aef602b843f72449cdc2ae0a56e0cd85efa9a8cac959c5ee75eee0f7da03dbb8459fd1b8569d59b8de01ed6f68834aea2285d10acf0d300c36feb716f7cdaeafcb3dbd07fe6fb116077b702d519f72d9a7dc407bf232e4f5a39096597441800eeafcde8453fea85ec6ea36372408a809eb4d64dd2d8d48434cd79c5e6bc41c153c17320d5d2dc3480e47c83747607b598d17e1ccb5869c3a254520d12b0d60068341b4400fc3703fc49f5ab49581ff248fa492d2f7e297976a908acd85b9f292da67776c32160c78aed53581cfa8e36e6d969d346c08aedcf2f655f4c2e695831be9401001b924c5a436435b45915f556d7ec1f0f9f12ddfc0a937ca037667bbc96f02112279eceb37aa2df71218d8c7e6e4ea34281ef24b2e0b41b060e7a3602918d3ae53461d1b335aa558dd2e26c7f56b126ba867d2300459836aa7e60317e1aa04a2d3e67e596c322305ebd163066b6c59d277eb63a7023d8602de81eccf91577d0c1c8e7fa55561e2b1239daf424adef0743da9c1d0e117658a923da62085c2c052823af76e5b0eb2068f96ddf8264235d3018293068663a40361256c976c7a2cba100ddf2dc60cf4b04f3c8849ff52c24d23d6f5adc79bd26d51de2897ea30453194fd6149c22d1436cc8509c4a22b54d26d818560b1321906a77db7e583b93b8c8e7a35ad10217239b04d37c912f47b5a2002e402619d248214abe1a7556e89b803cb2e44936392dd7c9a84d3ebf84c8264f8614c9a03ee533161569e19778469518eff424bbec91fe04396cd0421b5325caaba019e46e26845281a2fef431b6890026d837d19bb756c082a83d16475ade722a9d92c6ed49a32f6a89b18eb5c6cfe98124eaf17db09d72882f73d5f0908c3a2e7b289faeb38e6a67274c6b8d7f21bac674d428fb75d020f4f1a23c1970ee2253a552de6c3bb1e1887d0b3c7b8f6030cb1abdf3c60e5f4a0154294228318eae9c1e209fe9c84887e871938481f2d91149c16813a8c2d4aaaf9c4b6f22363fb3f0d619b38f6c13e32450a3221413eb4440500eb4e59bd3c462003ebe991d7252146975572aa17b5b1d93fc8e4ea63309808691a901bc8cb2087ee7bccfac9aebbcc653ad15d1b8d82b06b392994b138d8c3f681c053f4b7ed4aceae9bf80408c0f97fcbba7ef31b5e008a88fc3b7b1d7cabceb1449c8923010c63cede7fa8bbb20946629303aaf01cea64b4f363f195330cb5f57cf1e039df23d6731008c9007828e4ed8cc2aeb811c95f01656d9c8a66e23a14787c7a0f440a529afa1369756eb33b5114c36d4208ebc867260def48394efccdb1709034de4c41f1f9c016b6d108e85561712c5aa8348e3dccde12936747da8b47ce3b91a1a86b941cda95db949453382cfc4ec8217703ced06d7d26445d2f9fd6b6d2480a767502256c1c7fe7a410d6be8bfe0737bec7997886608fc0e134b8113a7b63a540d52285d4821d4ffc253ee711a3f2528b97010c93e9010ff4c1a580dc22152b332f28959bfd2392c1c503f972eeae079303a742036bdb8962df60541aa394398432f4ad10932c400f3ffc7a54e89b47740c2a18034d396175bc75a53d045558c279375e6bcbb88a9bf4d95cbeba85f1690112f11dfe7cf25fe71e157b97a40f58b4e26f854f3625728cab52b2225dc25e209b3bc8f82b88ed4a52d8d44b6e6fa40b2d5c55d66c91ffc3132063196c44644f3b74b778e08163d1cf2cecca4a43eacef9176eb478694f8aba419bf924ec3583b5c8d03cf670043ff8d4ef674c0e0ac2d702d6b38acf18e5a81b752cd954e0c907aaa8c9b2f729d9a763c74b9240c460ca401b8fb3cbb388cf6771c5014cd0068fb4fe776822a0b19fd3fbb8fc2b45f39ca8718841ad2190cc4614d050d394d4fd4212583cd8363edc09f6dc6323e69e09064b312e3e434e4e6835f6896e379e91c6f6daa17c5e0eb63f4f6d015e8783080a111a78b2313e5660aad138419df54f6e77709a3622caa987cda8e30ae807ab3ff5489d2660e4f6f02099f55d6e140793f0c1f146215356fdd92c6dc79ed11708a8c76cd6aa468c7d4ea2603af0542ef9f5d762132b86975f11cf6f8254bed96812282105eeaeb6e852e98a0b81b4d1cb1a57672f9933849758b12b4c8422be3c0de9f0efebc47a5cc4d2236e335be99a80422efced1cd66e12c4eba521d9a91b5ed94ffe014f4fa0241b1d5b657e65e95c42e0b9a853a5f54de691fe363d85aa96eeea85ded1543cbc0a392daa0fff4782619ca7a1eec7807b9e1c63378752defd9085825a45ebb9dec3a332527ed3818037dd3e18197d5ad9efe304a47ffb017310ad0ee6f0ca15feab5adc60ba39aa6e08a08d0a6497833219b9bd6dc1c180c9bbb6af630d6b94e343eba719379dab1220ce88964211fa232210bc7e64a928af9f9662a92d918760f60e61ea28bf71025e384a62029942356d56c6c4035b83ba353ba53b007e17a9f5a19f2a30ed55bdab0aea864e0acad6c46621a7712870edd0043c6c7e4b2fddf70e6d81de9d4d548705e2ff1196e453b80fd79cdffc81c3eabe324454efd3974a71e159c520b53840010b06a9276400cc7acbeea516731ce4ec7c8440681a2f5df222932f9c61811596455075f480a090bb413c521936ca242c871edc0a593f34292e753019b1e7c09c6a2685956909484c5575311fa06db4fae0e9ebd4c14f7c0228e13262ff9b90805e651010d819ad7f8311a6e40c7b0942f36bbec0affa3fb9669a2af6ecd49363ead09f1a1b3826020337578c962c80e934aab906bdd74d12aacd89646677a4838605bd51e6f9b52a0752c56b854610be6283a00106940abdd9de3089de7047949469bfb7ab94d5782f659e17eb995706839827450b20a2f055bdf4570e7ac3b32f15555b183b3f2cd96acc054450d62563b6488f74245bcddb36bf31d3495c7896cd4526785079d15468d91487588aed8908db13ad924a73ff216f164615678a5357ebc12bc34be93e7ca88e2b9c77f2937d27c0dbbe39deeacab8196fa95d21db94310346c57505d394da9d607b06d2222edfb04b4cde1ef621313b2dd1b33b0f8d9ef9cd5e50965fa3d712cde2841cb78c4eb811a05b8d57e1dcf42bad02b604c645057f8d63f139b8a64f46c81a554df87d1130af26da85b9b4284d183c321b60ba382ca92b7659f4fbd32eeb7911cf387d213b82950c994bddc9b42d101c346f6c039afb6bc476158d7c1d0703566d2825ecccec71812a15c33fe47a2034e229259382e75d9f69d1c453d5fe6f8f5a154871730c49cc719a770f2f0cef222fbe507a9e9e6ce9ed973d37b0081e403beca82a756953a35a5eaed56d437634c56d4ddefe350f2eaeacefb575435bf2b56096052f7097637926e6058616fe028e70d89c11b2a4eff4062807f7af2801cbc85fc74946395c778a429714820d7f303fa272f3eb41e29ca819a730e1e38778388c27473df01f4b886b25393527aeb1eb772f03360dad3e379c5fb84767b7ec3f7db895b0e72cfdae78d7126bae225185cb037131bf39cefb3ef9d89e1100c980ae6c35f2f151c3fe0472a2bd05924c44a6860bec559dadbefe55fd82ef65538b4906fe46c83be1d1cf8aa062c7dbb65fdb3afc2358f447b055672b991a7f3c2350a1de0fb07103fe31560c9ef569ea6fa040681245a2af0a5b7db65ba2e3dbca79e9d8d5f1b243352012e7def82b01bd59f3737a328fdfcf352a5ad323d70658eae001c134f6b7f536d3961567c7506390b1b20a7938754ae6579c5d522bd672de0d41188ebcfdf7bac1bb59f649d932549a5e2f54662a4576b55fdd7416c8eb5c643481fda9b757256096bffbccccce5b6b208c2f055676a3cb1f2ed3f52eff948233031c108fc448056885bf1b4386e8d8d465b686ba16288b7d580a57d5eae6886969024b27423460c4f9fd2ef94c6f17584bddc628bd689d685679b04f4a6f0a4a4c6a08afa1bea8a3ead8f5834d229103cfd4d32a06c3b9daef7d99517077509ec2d975217438987c4694247e1a9336e5b16cab2a21dd4c1cd289b967e1dab063e4c163dde0d15ae82e58039088e9e0115a2b4c3421e7ab734550dc51eab54acb73cfcb779ea04c289050d9816dd4a07d70cae326c94d1a94ce41fdc471f421df013c2f1cf512a27c6cd82593e0d9703e7680a5ec37db067267030d1dde8b77bf188864203bf6ce3e1018c8f2082bf8b5db5df3f43eb7df38f60cf782697b520389543b6794d189a1945c1e971004d8e2eab3d48cd419d1024703cb902bc442396830c28d69e04dde4c1a6e8ecf925e385e68969d5bc50977473f0e9304bd5d1a031e9d56c2963226742f12a873ef39a3073642c21a990d5f364c3d958b25dfb0c275d3b23573fa8a720a9206038f87c23febc7f5e34cc9053fb4c5a769b2ff8191e94095e8d4e3192771b055e6f3d006dd375f54b37ab01e69d714ad4481b83238779ee6292295c1c78984d5f7fe4fc8e7d8b91d662bf0b170d5a1f43d92790830deee6be57cc76bf8b6dbc838619ab6380059c4fbabf7ad5cfc0566c9cdaeae071f4a53eeaf12953955590d03cb27209efdf42fda66929098a0a1472120d04cd339e65e7cb8f3b22be9377e6e5aa747f9f7c08d8e599fbffcb4e0ba58400612405455c3869e3bfb8ce8d1a2543ba34cd2736c4dba1da59e3f360630eaabcd694b7e6e80a357b7dcff18ca909bd040062bd1b4c692685b56ba552ba330b509deeffc273c75b8a7f1176e428ce9e5e8b7f112054a559b43acdd647688ea6f07c6af99d734f4e7dc9bd99b75348fbf689491d7315b2fd7c50aabf1a9157b2b562499b87b927e4ec85a3d46744415dc5d9537d9790071b2f6ec41e8c021832bc4342e62c9fa4f2d99a08097d0a2b8bac83c7ce7b3fa2d76cdd452284646a932b687e4ced264a8fe34a05da65063d99be1902cb7a0d36792263fbafb0d06c88a00829b5520fa8f35ee5e2ba135122f23b9402cbfb443c82d892224117e61aee5dd07745a19e8436c80cebe6e99f88678f36c1655e8b4e84e862c0956a3817e04205c2594dac5c210409d287f043b7409f709192480e589c08eb2d48da62971545d4e372d501cda3fb60bd2261d61d41388bd3f9abae2a81b5b9d4b29059c5f32699a8a923e924ad0e4cb2cff35004deee0a8db20418396112862e9127603e0d1f5d71b564155911e8d395df40374a49e5b73351a328bb6447fc4a8c20de92a822ec786c43238812981d595948e75000d87173844318ea7b3baa6130a64f1a5629ec07a66b581db0c10266fcb1638dcb3ea5fc10d9841fa7004b861d656d30b2a1ad8b1cfa8781e7765c41dbc99ecfb37ba51405584f700d465a88c8a46b4cff0cdb2ba9bce346c919ed94bbda6871557fac406847efb28bd6ea44548491bf26c27c9e7c8e7dc30b73b1c259fbc564507a22f9c800021fe091314846921394d45b852f4b5437058dc51de6cd1b84475f1dadc289bc66c023d1c51a6c38a8eb6491d2fa90af82fc82de31cb7b7f962f66acd25092c61bf1481689219e19c3e8abe18d58e978ca5e1288f692a1aedaff6005d3fa6816a200df50a7d313cd34a808a717ba15fa2aa7a0dcc63462502f83502b4ca12b3543588e435154884248683e0642ca820f72d4a7be9709adf9b4c5a7e92daeb571329c10d71a8000eed555f6a8d3333e3fd8617321d9b982eccd67f0630a9f1df0f0ae150bebb99a2acfc91cfd63dd0919eac9fe8e6326481aa3e74715d4d1aec08011ed0973a3ecb44fa8e8d1e668ffa22ac000628df61fa582f30f6b683f79e4cf96ca796e53ab7ea4467b6f961a25197c2830926dacd35eca05dbd27412e90721f1018526edbf361ebab1dd481af0cbf073daaf536e92e6e661aa25fa845843320d063de8dcc47d015be36449018b45b7321ef862785eb6923ddd471b2deeeacf4802b4e7935b05fe5388abc437fc6ecd43a7af890daf0cb6c6b2a8232b91430ec6f3aad930015b740a680ccdb6bd2f100352e4af861770fae59ea71cd9c8a75f2d96deec8db657f20320d7676728dbfb2e0e74d946d74460a8f107e0e8fbc26cc522fa22c11eef52b7e788b6df908f041bf8237d45ac9b1d8236b5c29dd51586bf20e1349b90f2da2eb1d2b021741e0d4139dd7d5ef8c7b46a78946c95d0f5221cd984ea082c5cfb65688891d0b0741bfab0eae8911896d267e07dd500bc7f83f0490eb4945c3f84e31b2c7b8707be4ea1d1654801324005cd7cc8876cc933e1942f52963fa9317f248e0fbc19d7488aad0c2a74cfad705f6101fda185f02a175a68a1f1b98631d2f6aa925328412dccf7d75d04da303e5dd0fadd0b382dc2062994d887616a36480a9e7b0f03dbd5282404d281df5018ffe25542afae2d0f032a7747cca7621ae2a198f4a054d49fcff3610e6740c6f725722e99d525b0d5b0f5abd041888a28a2f60d7c1031ddc30847e12c27ce308e848420db33923f4f1fc69f8c35729251ac141fd58711ce39116b34e06150d16cab1a027c98d4106a5817084054bec8344a3fcc8f92ed00be7d122a0974e4f630792e26a42f2302fa8c1425ebbb874170c3a20df8c624f001a3ba3fcc84c926af6cb21a2f237dc18871e9c03bc9d14e74da39beab1258a071cbd0af28ff24656d34b86bdf0c0278989f59d86176a12370fe1ed08ec80c528f9e9a19050267281334f811312f35ab666815917f9869feaf23a6445012522161dd58b33d97f7ab04c353a0099541dcbcf423c6128fc9e69cd7a211c37531e04a359c0b70a182b437d98f6c576930b4d2c6904af0766ce2f26431622cacbfeb6ea0df399da785f44ce42dd0687f86567c520345f79c99e34ff43ed1211085176730cfc94d2807cc31581c181973023705a16c19b72be1c3e646ad1dcfa16710c901318e2e6765175c6497f3210165c7851d2e296601050d97ee5ba562503f03ec852671321ac1a13483c769a813095a0642c89174c539ebf4a5af494179fd26c8f2389e3356a0d2c0ed3784db1f23eebddab8782772e329cab510022a4fe9974415af520af6cf57bfcfd50469da442874ec3497dc31ee15cf50b7fa475024817ac9e4a325dc3679786ae69799f7fb85e893a12cf6b08cce0248c1136fc980bffb8784c09c3c8dc2809174afa95b6acceb76a791ed62c92e6898099ad9c96de68da9a6a9d7c980cb771fd023c91131f8ef170d40cf25c7760e04179f47ef9103e792a15fa29359fd881f5c12416bd0a9d9999a53f6854f4eda9c2e4e3f94003855d736c3ddc72f4bd6f422bf743f45bab3a484c0925932d11b03ddd8dc511af865f8e992ad61ed04cb4d533b66da07185f1419c8423cf8c42de12cab44e263c98a26cb8f9dca837ed62bada1b641ff411b0dee22bf440f4be6f35f76d356e58af0fe3615042d2ade51480a1ac8a7aa816c6a137a8e3f27d2c036022122e888994d2a341922883929a2ea61bad9fb8b9bb32cdc9344770118ba59929a2c7f0e9d04ce2ed564d6e9dd72c63a35d6c8a14fa51975f71e69191a99e6468eec1b89e81c9bc95a18273659ae8518cd0d650695603c6f898abb3059423013f51736616ffa61daae2a8c3f41c6283ba46a531cf70499ed1628955270ec8f09e30d5cec1cf138576cb116b02191ad984e47dbc49e03eeb5c4252f303c7ab5105b2595247cf18e4e0589ea9b2cdd970bbf1f0b644135ce705964b08d4db861b862d683a889a70dfd88a6a60bc65b9798a45d74c277d98c78a15e246919089523b82bb6b55a0fe2632b3266f8105c9cea36c309cdd1b6f4e21a51782f8361cdb3c3ce5710037f482c5ea1580ba9079ffd837c9a0e16ea62fea85b8ea92f813482a4b2b1f1696372332d781c165e7d03649292ed4ffc1df43926b3088a0daadd096285b70badb535f7947afc6bee56c35de0c4f53d39f1f885c00b651e0ebd1e7f126db97df34891df7299e1c9659aed345a128239fa8e245cf85f5f2600ba66ffbfcc79c656698cfd6dd3c309c3520cc4d7593ee61330f99d740b32c52415fd1062db3138b69739c72433d06eb10d60bef27b345ec9540971996ae03428eee1ccd499f3cbcced66460c1be7cb14d356885a6a45142a2cab10e2a799e2bbe0042ed36808986c13a5d03b6a21cb2f53d4c56ce9a38bcc5e27b1bcfaf832d16c18bd615caa84becca8d1977970a2c90b4ea1d2cc430f3095281ac8903c1e0a5fa06bdda0245c66d1309b080355128f9484a1e62c950aeeda7fc10d2ef307168e3ae0a9a0ffd3face18f13c775adb7c662249503d2aa3bc43ce1f22feefa8572e6766739014520ad00b5a8dfa61ec7379044d46434063bc7969cd4c4b3ca6cd29af513393eb63a02f6db8ac024309da9c59bf82f82463411f690b2a613eaf45ba2bd9c84c04dc643535e207b8e3d746976906c489b33f5bd374c8a6facf645e32d10c2867a16a14cb9d3031c50642b555863921c1542b54a5291ce3c29c6d16844aa371f6070957360786acf53ab198e807a866860a062abeff81b4ec67f272cca5e78a57486453c80f82f2ffa52b5133656f01421e6106234faf6ba97f320179ffe1b41caf03b61945361964fbc2493c4109de20a4fc0a5b0d3e5bedff020bdae03572e8006f809e12c58242f3d4d6a8af624ce4aeb80d201b58151050869560bbd08e1ba1c64d3a08b6029028892221eca48800ec898a502b7084fa4912ce9325a86df80c756956949814906d158c99c61aa890e016037089c1cb4be93b19763183ac8319b8010b42e02af4cde3cb70e875c2441dcb37b3e00a911834fa26cfa31a4cfe111af9ac9cfc3065fa9fd4f259a79f092ad08ab7d6fd231b1e8ee8dc0dc221814afc2d2180cb0e10fcd31269ad9dc4124ef69fbd2457d14fdb665606fee21cf5c9508fbbd270682285a7c9a337bf0249a7e15ad0c1f2b22091ec942457700acf2245cf60d3f37325b60c3b58c30a93ef0e0d52013d3a881ce9082a49f215170a5307af3206924303e4e8e2e22b8bb28587cefe4eb911ebfbbddaace48a5ef89705425e548044e98368e7fc1a5fa008a2dc66330739748a9effe2e571ccc091c35ba1fbb44ca322dd150b051edde59a0ee1908d3c6a8b6869598dbb0769e999e00fa385acbb641611a74f23e198b02550453c33d144b34a7588b09e87937c23767635e0889c977a3ecc36e2720c6612683de818a1bc4839135c6ed2edcd21b5b765d5e9e2493db9747d14fd4a3d02025e9f365ef8455f7753c98b21d604e8a1f207056b08b73681aaafb18245d69b893d8ca2656f738a94651b696da5f6fe3b3220b01da67ea07a7a5794dc2605502827d3feed0a48df33091081fc82713fcd08347996970e9c5a3c9ba30d5b70f1aec8a9136caa5413eced88b1151b003290a244d45465e7cd8239fba06e84292af205a86ab5f4fc717d2ef26e71554ade0839204b850f4a0c06e347ca5585a92d838f1e202f9486caa607eb7804c242a440287845e5203d2aa86ea366bbd6c8eef1ccd24d2f0d9c78c0139bdbcec3c0f33146fa45bb003eb06fb930917a9ae8ad36f78d6700b6d283413f7e704a555e117ce1a61a69853dcf3065bdd6555a9792da241566ccaa65c11e06c4ba6209fc1afc01c03bbf946b9c2ff7c1877d7dac46286b90b87f0c665f54c88e39abc40b845429ea2162e30801d6687c7175f16fe759928f818461e1922e6f2625b3836e2ace29c0be533e4902f1ef06405b0df0db6a0d2e9ccd7472673c0d8a2b9cf8f7c7fef8dcaa3fb9f2ab7503f495c8d50c2615106028e74f2ff805a7bb441d3c6af626d9bfa82785eae4c3e99aaf0bdc7eabe1b4969dc4fce6a6ccb43a24ba920d51535e5345242be6b5c37f485f025425056d36c9cce42cd939dcf82528e4f7d513b71685a8f6bddfaa4493df1fda26e13e2af123586272e7db66a4dc1887121937b6e93e1b2ff951ee0da5a0b3dae17eb88a1a4c82ae5297c4330a537d3d7308244f84dae6e5c56087d4bbd2b1696feab1c5d055e42272ac9217690168f453768981fe3e1072165d8c83ba22d9681ad139efc72e4b7142c279941fe21362c062ee55f3efca2c9028b46b884d81d8161541b625204b37109b6bcd09cf9e2cd2fac356f370ed8cbff061a30c49931f7fb4eeed9c98c41a982f278f5f449d1d7644bb59d1ab16fccc64f8e86635c7dae1dd72d8155603da553c891316c1135c7882583b97779dd581765447e684453422f32ecd1dded579ad5818884b08ca9a3a2c1b72b71e1ce64822726d480c44174ef060178f10bd7b96e91887311df182f624e6113bba5ee5336cf8934fe16e3c79b3de7a448482f394054138751d7cb6ee00f1a215b519435690f0a703d1b6826a0116789f8026fab499bf3a8e78adc489deb7e4be78ff2ea48024e2f639013f08a78814ee702189229ee2577b993667ae6611b7cdf96982ad5e261eaf1b253c88ac9d4ce037e931268278dd2891c7bf044dbd78b4ae4c77425c5367a3248971428048dd16dd9d95bfd6daaa4ed8be216a171dfa6bbe044834046eaaf6a86516c5ae044aae00c35031563ff088f72a5b1d0adb39791c89b43b475154af4801ff80a05a017483f0cd28c56fbaab76812db6a9a1645cab29dc01bad2534772d767a415c8182ecca488b85d14c8c2acd802893159b870a1ad84e452dcfa3aab45bbb2501f1cc0a6412d3cb23f6aac2f1820e35896bd19ec8ce48d72ddaf88e74700d5c772b4660e61c42fdf00a38d4229bf9ad109f1f0dd9171c373927a670d8082f99abfbb72ad18ced25af02d12fda57b2f1f57fb37682bcaccfb92dfb48896ae331cd7a8981ed97fcfa29b5434589d400a69c09a18f4ed1537a8d71290f3be1b1fd5472e94610b65b4823cf2c30c808955a2f0ada249af4b2543ea6116ffd30b340e4889c2250a1718a46a5980f88ca9531d18be332083b685447c33aad61bbf67a89c27e5b970f073edf53ff639afc0d250940fff21199a99e1e94f5271f860a5f5f22e610d301bdcc862eab433fcc77603fa5b95e3a9b94c745659c685e609893de5b64a6ba81e98086130e214d93a81839f889fd364ab570458f32d335f4429e2028210f3985ebe23f5fee94597be6ede50426fa319410cb05a193cce49af35cfaf19e601471f80908345e4ce756765b808df961388fe42a4c02dbab5f9f201c9fe83a7112a43d4fbc308e8d7fffba56be02cce3714f7744ca72f38e8638f560d23143b4a7f1927a6103243f2408d1249872c06ebdb5e01d59e15d47089fe582fb16605aa4f4c8a23e63db7c5ea6a2f893a6eb44a566414ea6ea60c228d7666a09bbe68c607056c6ca27e02a522364f9b3afd62cde94e4eab12c9d9f119632e97f0aeefd16f2e636147bfcbec0985f1cb7171028279639d0e9661992023d2720edf5e15a82f93a7321232085d215041a87fe680e0113f178445c4f665be4f2b5c186bed1fbc9a390b4312c43add649359fe3b7cb866b34fb0bec239199905de27435c017606315eb67ba53c6a97d1b86797fa19edde0b7d89846ff5e2000f0c523b71f1e71645c2f6fee8c86b1d91b31b6c42fda69dafcd78f29f400e32b8a44db9a8893902f01687cc78f0c77e9a1932f3ab874be6bcfb922c81ca081668cd30366ac46fff003116b1e81b3a785ebb52f206d0d033cc90c1c395eb0e11f207d0d033c8b0a1c319539f7b04dc18bb91483cdd782b8e3d026f8cdd48148f6eb8957913a837590c5dc346034cae04d2d53f60d0b0d18045a0697c9d838679b0a28f45e1753cdfa1480b8428e863f50d11871cfde3abfc353d9affa89b8a54a452c97769f45ec469bac875df1d7517398d4974b3e48e94927929335a74ff9b3a12ddd86c92f7464b808cde38287892b8a2d777c8241ac41306e169ab06889ce55a04f88fec4468b12098ee466ef967fe432a00bf68779c0f1275f64cb1c246460a132c2561db3c483967a92568e814f0f30151c6eecaac389c479f6802a9645432c4c9560568f423d58894e240760b34dcfc3ec967b4857a00c03bef2642968b0804cafc8dba5786ca0c5a1fb8514dbc03818afb6164d5a1958fd4c7f80096680ccd1c71fcea788b61dfe960c11bce1f95633362afc9a4bcc3185b8a4bcf7c7824c510d8e6c3f78590783befb77eba5418a6d5ca0146f4d4a6360205c4c133ecde2dbcdb96ad1d047353b50ea0185389d05ac130bd1bb9f19ff98f5002fca2dd711f4cd4dab31051615e8b0e68a2609ef09158b442456851ccb16c4203faaba3d6f428a66a37766ce85c4c752ff4eace96599829109ffb900dd44dff1f56ab69f0cd69d51bb0958197df855d29d5ef10020f49d8baf6f029a8b94f35e79654098198d59ad359ae390b107e5645d0e63dab89781485970cca44e2aa73480fcbab9ef2908896a06f92ab06c30db8bad02fc984d5ce87c2d44842fcebc1dc56987122c4b996a8a1c3c00225377cfc2291d9dbabc69ce9c35276fc6ff0bcc80329ac74ea71dcbb7955ec183c249c4f508f15166a49bdb668d912b7964b62ea5caa8ad8327b40cadf1c7d9da25ab7085b46f3dbc7bb6b89f1c36be908e4b5acac2e7d16e7db11cf14dcd1cce2638f0e85ca2e0eeb39e6513db740dfc571d921c1246f58053b261e92d46d8066154fae49971c9c57841468e2e81b387800744b81667c355a98172c47f0f4cd0fd896b5119055b8c7a4a98485f3355c0bc3338b2208f20f08e7a51fa8a73eb04f7aa09ef0a09b37b50c4853194b266fac1872665be191d4a900a45ff351aab7fa281194fb2809f385b79c20eb693340a1408db5c15386cc98668bf7ed0d17bb4025789d3ba5f9329bd28150d30a66034bc9eb0c9ea91dd8c65abf4719eb1d3e64d06060d2468874643a5df63d9d5cc7f142ba3f5c03bff071f8163eb95affa49c277c826ade8bcf2c59315d169e444cd6f4bcf9c4e98134982475e37192d43ba0dda456d3665bcc2ceff63cfd54df60dd9e6e3064f6e4131a409278abce7aeadf3c622ca092f25acddd0f430645b189547306cb505fd062b6a2130393cdae8ca7bd6c8b30ef27bc5671d08e4c9a1281a2708de63f63bc7ff0eddbd235cfefd1a4ce98dd95bb702275c37ee1f66b47c91e1dc1a209e26399bedb2b49b1264ba8092757d792b177b44ab5276d895c41cc65348f76b69208efb1260f090efc23e603c6b1357bedbaf39717a71e7fdbda71da0901d4cb8dca27e45c7290f5484700d3c268f88043dd7aa681208446aaf0011b473859e5e4c8021e5f30328a1cd98ac66e2c24c4223a55b5388283069ccd39a1160bf48b3a9e7adc186ee5c9de33f92fa00b28f1b81852f45a4a8dc752e943e828bdcc14084a6bf832758352324e4c1b1d93386a66b9c0a8bf9f6d8cf15256185f7f37f0c0b5467432af99dc95e84b75c39d75b12e8a2f61e6b0ce623d0017dce3ae1e858bb24c4594df4eac802101bb28b2cd89c764c12c7849d0bc72a010ce7604debb764cb760d217dea3030947e6857ec16e05b0de9b464f502e65ead0a3a3b693759290aaab1f0f604ec3e51bd90e1a0431eb4560894e786e9af30acf406e786301c6c682448d56160908dad75bd673a898c70daeb062baf92386b01d249d9c65b083613cd46b314e0a7a206a1d30182a10515388a992bf84f9de058095dca759cb14e4e31f471b4e299265fb86b39018de0ffd59b1ad71a371c5ba266cd7172e31966f667e0fc415fcde5f721cf594a244bda3d768bb16cad77c01a16d94a1acdd1ff327b13ab69857c30015f8f9b1e4907b5e5b5ef56047c7938e73b43eaf12a4b70d2387f03bae9d2d7b54f8a4bb4ff08185dc500ae35bd334cf06a8ba33449683101c02c8569be59de4d5011882630b9240f8dc0b7e8384d047a48a2afd0d6927e574c570b65add898e2ba8833df977f52e961682f61487cc3f99587f4d3e1dee086378a3df07b2d48f47240ab1841265f328efbea5dc5ba01c07e1ff7fdc4856f7f454dad92b064e390dc41628e4431aca29d7b6957e9fb953b557067276c424909b92be8a4147bdc65525fa0e01f1fb135e5d5a2b6f8fb5c5bd0aa876c7e7e44dea99a8a6dc282154c8ddc6139d59f692932e78f36a532b4f5b719d1ffebceceaf643160d3e00af095aca2c55329a5762eaa965512e9257222b1b71716fef6b37ce9adda889bac9e8740fbcb7ec975a12db7ea1fb6cf0dc8cc27c5a11a484efc90da3941d6e11071ddefd7a3d89f66d01af0d6f2448c4f9d22ac24b38898e0277a8b6ca177f8e8953ea380a4a1c45e13c50cb87b406afd7f04d93a917a6392c65ef701cbabe4c27d151c259b4c43219f751ea2c5a8a1c6c6ce1908db2401404fe391bc7d10f9dce4cf729521edc01deb1e40f054e08e89d8143d72e59029c158ff32892044f0676471161bc993c91d230fc137c43e69aa986249006000249a933919cf8278811cb7c02079960c5728f390019f443b0151307c988a6c1ccd75feeba64e646da8583231372d4f4860a7295318684c2fc2b41fc2cfcb18a92d20f12974d8a4217e4004161fc41575c3efa51b62fefa6cf0598ee9dad1886f63b02fec52af0124c1a62630b0c6d59f037a74957dd1ef5a13041245ec27cd263193c04d00fe80650b1e2f003fc10ad5495734f4c506c09f2a4d9898b54600ffb81265078b1effd0ecd3c9bf2ddeed009e41c0e8e8bce389f63ab747402bab861565b7016514d1b389217d7805ff0c1770b6062ac8b96f00820ccc07ec8626830a19401239c97fd48cb87fbfbeb81f24694d3f12df698d0b898d00cd3972da234f29630049cf23b2858e497a532c6052c7d33b39b88904d2485b6e4ca1da20515054605f649a27cf8171140e8eb65966599d691f2ad0750daf39ebc59c815142dff661dfb9d0d7fb65d2dd36b676fb76d5fcab79b8920609dfd7d12b758b8a0c1e6ed425fff2c1c70f47bba6d0ebcaf38ca15f902d26cc8aafe50840f628cee1ffd4a45dc545555515a844d113bb2109c7a3875301d8a23780a82a66918cbd3114aa79b13121f1e1e4271f4f1f1f1010272b2911efa958c8801c32d4288a6841296144c84e85732c20aa24e0700187a0840a8068fc1501cc12dc7126e0eac2807f85ee79d88fff03b61d2dbc40e99c03a0f015047fc4ab10545fc8002187c3082500cb0670845dca0e0e305451c51c40e1650083e3db4786250824e0e58701076d08ea04376ba51c13d2191028c8713d81798e08a9102ab0824a84a300135420a3a544658a1053347d783ccd1030bfc55f972d4c0258711489063092ba51c35f4d4af94030a2139885470947e9eeb14f0965dc8961d4ad31978dc1b94037ecbeea601bf1d47c56f3fb9691499303280378aaf7ffb0bc96f8761c06f9759c06fa751c00cbf234e3c459477297efbca489431402c11e063cb00de33e97700fd46fa6dfceebb037203b28abc3101de005e3cc5019c14bfeabc2b4966405e4056404e80c95360c049f16bc508c81b87427f80dce22920cc2c459802e4ce5344978ac653441b142846a3ff5008e318b28d4d75f214be426150a0188dfe43218c4fb5621c0afdd75cd7dbce0655c8168fff489638127afcf1250f201f5feaf0660041791ee663f378cf56691cfa4fa886260ed9a0309d134815a8f071edb1e1507e71f4d99e8e3a0452052a40fd01facef6c93040196f387bb6a755c8154fd172dd9f7745f6d57d77c5855adba0c69a7c912f2ff245bec817f96232994c269369b6cc96d9325b66cb6c992da5d2cd2cddccd22cddccd22cb9788a8ac649f13b97cea573e95c3a975a310e85bea2a94e4e8af4549d56aad329743a55ea35d46ba8d750afb126b880df676f5faabb6c69d2114a13bd89302d3ac6d95245983d4b3afa2ccd134da7a3ec24cdae68749c158deb6cdbd549c7eb4d700153986cdb1446c7bf1bd4efdd9c37b49bff650077b972a39f005050b880d60544714a72422a954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9542a95faf0803afb93dea303d4a0a819e1d75ebe9bd51f8f8fdf7933787c947152046900e4e3873c1f3fdfb37d3c68ab34c8c767dff9dbf978fbd1f9c8b34383ca5019a93fb61a7e733d26f76cef9d00e9e4174720b1e3e104670268831a647bfae3c693617cf2cda0ede94b634f31a3957203d05f8f8fef343edef3f1dd090f011bc09a096f06fc8ed3f9e8369bc777b64a7b3c1effc75f8f0f8fbf1e1f1e263adbf47c801ce7a5f620c0fe0b0af97defc49601179d27eafbde09fc9161773adae3734119c6a7a2d9fd9bdf3bd1d9de8579d56ee329e275e975d1d6ef91e3f88d1ab7b15e83c2bbe24c2c7588c5ee0aad93d55ab1ec66ffbabd0c633ebdd35d40149f201d32f00b7613e20c80820296f5984d1c39c05f9004caaf9e80a19e31daabda7cc915ed5badc14a71648f84c04a3afec84738058624f0bd68124f216b9c14670dce8a125bc017709436818fc997359e027b71527c982a4313aad1f1436a705c85cc180aefd1ae353a6ecca4e347eca65a55e8747ce9f34becc0da8db6909a2ad4d75b9baf7f5088b2827a05d3d6bbd12491246eecea60d113d330639d14f0d6503abe86a2262745acd3119312d41d61a1c718e10aacd54c18f1301347e0ed37464c59d58882268ec01bd78ac92e64e208bc2b366285891c6fc20818403d9c4ea7d3f3017c27dc1f0b3a58c815ed1e442e8289214c98620eb4070cfafdfb300103a1030e21e0f801870f100710f10720601ee028601c2d3fc0f142ef47c1851ba51b3537704a374c3f278e0e85a32509fba20e6cb003981b2fd03764a0f7a38853c84208bce2d0e169018916986fa8a8946ea8a07483458a40eaa96dc4e8ab349c93f44ec424dce8f8f684131072292cf0bab895eb026d2214ae573eb1b495374aad9c4a0857282eb024914a824612337401f42b25d19255b512e928a5282d4828524a84c522a14829919489c25bea57fd16e96aad740bb1d56f166ec5af79dbbc47259dd9bfd666dfc96cf616672bb398cdfbca27525b39845d44944b5697da69caad4c9fdc8ac5add0fca813ebba6467696a59d939154ec56b7744121dca842aa15e502d3b6a50196d45910ed67fdbc611ab1e6b8c22dd25d2dd571ad9bc5bfef5b36d64a3abf5781b9dc810118a859b342d6fcbadbfd6e7cb59b849d3ebabf74bbe65b97c87a41c528ecbe827002b2b176890a3e156b4bdb0d749968dda87e987d88b5510a6d00cab3284f4257c492b2b9b482c7bf89c8a35ad8c6656b5ed8b613bf34669c1755c8ac5bdd0d7bbd0536252cfe73a2e05ce203f72957503c6a9c019b2af629c1ab7a22b8bfdccfbc4cae25f310257954b44aee352b8953927b7a2a1f6339bdc1b302d5f836fed7c4a4ba055d99f4fa17cae8b2392a3b92e29a7bc32fa5c0a8963b2258edc6dce594d28a5cc5ce729edefd85394a76e7c4b9bc81ba0d581d2fe9c0a9ca1b2ac6ade1bb094de5687f6c7b6138b53e154a00cf3ade73aebe55d61712b9c0afec18e148d69d057323b84d8f142236103091948e8d05643914e67367ec37560badd0ddecfe0d7fb78f3ef6cf243acb76ea3b5d6469a5555fdf8a454b559f6b5da14f4f4833da8669f8f55fd6493f8d8d3af282de8c3147d28c2a2f7fd93f879179a5a128a941249b9d57e1e5e4b23a5f924ea8a7ef514f8e9c73f89d9a4facfd3df778b74fa8e6c34cdfb7ee8fd3ca4d5fa2d35a570b3c825b0877fad1ae89350f549293803fd2ad2514af749dc229d867f6df896803eaf81a065d1bfa017edc0d73de883ee9bd4bce1adaaf5dac6e256f441f04928196da3c668f5f4739f948232d0af6e49adde23a1ac6d3a2a8e78280c0d3dbf62f561c5ee572b6f520ef57cf51427526e98b349659fd2fa968e4a1ade1a2efc0ae612d66b4fe79372e00cf5e989d4f0f789d4f7b1dfa392d6b2680766719fe24dab8fd17b034643ef2ba5e767a49cfad8db27a1ec57778515e9f435b5655549ca8132d05c339b88621dc4837defbdf7de8c38366e503a4e1342392b5a51ebbd6a59082f8bdd875d4dc39df71146948e930c1a3635326e6ad4c8a081d15dca392b39ab8ad25a2d5a2debbaacc52e8b61f7669976334dc3b8d3f1783c1ec87b3084000107582687165c90630b39bca062adf6de8bfe830c9ad20c87f921e2b8947356159d554569ad16add5b2aecb62d675598b61d762d8bd59a6c51b9ee29db7380b8c4008a16134451a91068828938a2d5d2abe441f629742cda8612acdc0b1519a510359a04c0cd80259e0caa3f1503a9ec906c6e82e258cee524e39ab8ad25a69b5acebb297c5b07bb3ec669a8671c7f301813c3c3e3e40e07f507c401e09f08851d3e27bfe7c6631cb9004fb62d8f2457ef6d6ca1d92f7f5d79a64f8baa4cc9ebe99c76bbd7d09c0af54c40b2dff53448a0e1dfa7a10226c68f9181134b4fccf5b4b31782300b57c1ce567797f7cb5e1f3526aeff1326fd0d78cafcffefadb7989b3bf4aaebf36cbcbfe7bedf1b55d577665dfe9dcb79f7d672b81330dd7dbcedb8bc43bda93444f16edc059662157b4bfb289f6389b806c72db99966f06f9f7d23fb2bff2f6c8329fb8c63efb786dc0fe9337dc2e740df6afb7d766af0bbbb0960faf0dfbbefd7de21acbfb035ad6e0dadebcb33ff12b6b29b365a513b0943366dc1b2e6d330fa1a193374adeb8a4457b1e7b30c6375f355879b3b0c1d2013566510caa0af9f13d6618d2632ef118eb0b6b5f8c1686c14b5f3903f00b5b763696b0d66dc4917f7daf114715f48f12fbac2512bb7c085d4ba2b6f8b51741f6f7e92d3101fcda57006b15c8eadfecf5ad9559c7e0bd017bfb170d98cd6e7a27ae2c6a018ef4eb93f8d3f4c4d2337343687f1712c58a3208b5457690722bb4aa62fec8a5545c4cd1f3655ed1b58ba3a9021c658a5ca92d73051607ca29af975576c012e92a4b56524e6bcefc293aa3b4d11a2ae3343a66932805387e0ab09bbc86df546a23e5b4c918ef60315b02bca50b4c85912e1546bab060130ba6c2d41855a6021147aa2aa3d6c4115b2a0961339772711da7c275d587ea525f5ce288fc9738421f5eb3be8876807fcd2b5f26902e3160645830943ec817f9430c18194e8563a92e71644b974a13477675912ed20798ea4385a931a44b85e154aecca5585ce7c2a96c1c502a942e9c8a8da5615f0c8e33a1bd4218eb90fdbd591591006f3f790a6a72927fad58c403355d6aa235e80db51147aa1bf414472e0a95aa4f4a411950a49c4c85a0a58ddad0521c914f6de2087d684d6a23d2c19a96a805d37fb424e201437d721d8ef2944c5949d15b40e94d4f1a278e6c5af2d349fbbb8eee8817ed4f85a0a638f24a5ba8e1276a22e5905295843a698795422bd7bc71407198f7f6132947d68e3a0683b7a21db009fda92bfad5ccdc0a06aa2a595522155cbd77a27a92d8c55195626b68f9cfa44f589ae49287505a7342e85c47a9bb731d9d93fe9c16a494c29ac2a9702bb4b6685971dd932da2237055b568f87293ef28970bac7d188494ceac7a92484241586155ded3a431d6524cd5c3ad82b0d2b62ca3104239453a38e753ea35da453a6093fa73eafafe189aa875d70c445d4f71e43a5c74f573bee884270bc7d1f5028ea351a938aa77b332165213868972e04d4d222330f5902da157d41447aa0885ad6a3b8eaeefa9ecf5afafd5d268b74cda3f93f8dc2aafaa696b2cc774d0a1dc0ad771295cc7a9702b9d0ed7712a9af65c8af65cc7a9702b7144e33a4e05748210d614e864e2b403e8c4a978742094c70ab702d2014a79a4804e9c0a4b1c4998242401ef2a035f88380ad9c4910c95de09f9a013d691c24f123194968fe9d0f2f1163ac5510a053af140ca8a464807e844a3868d1b3a7e8081e15464d7e2f262e284c958fbb02db81c81041da3bc35b8fe885b5c119f84ba443a10100b3e7c128a9422a1483922dd24716bfbf877577c5c978dd5e3adfa1747aaa7f19350a41c6cdf754bb1e7293c2008e67d222fa795465c41e9c35ca2942a7521a52dc4443a6013f853ebcf4d1cf998e208ccffc18923343e35e2888d3822ff631347ea8b54b0952e222170f62221f0ae2b5ac2076d9df7d83ca21e60a8a5687c40603c85e7e585c17c6c3cb6122d4e92dad6525afe6703a18923f99e0d04660391d112fb8dc17c6ce248be4807b82ae1a2650c2dff6e1b4486968f7d6cb4fc1a2302216386105abe65716991ebbf7b6d149dfd24a3fc122f2ee29d181118be065fd3e06b58d328d6264a0b4c7b128a94c2341116ad83f346911eed3d22299ac793e77bbef3d55380be93f789c45ae73d0f7292a743b146ca21e59072483911458b540b321af6a05f890b3ee00e7c29b9171d296987fe49d4554e94169dce73291de9e974b88e63e9749e247a6447a3f869276f68c9e75438154e855391a9ebee8ecd99cdcf22a7827dcc322e258b5a9663e4bac8b164c0b59861dc8ae537db10fbbb619953e1543895ae1a42176e74a1465bcddd5d9b73def91723e59072505a5c12ea3e29754558b0ccda4828ec3591947bb1ab8974f3b5acf3998675e67bd51b07ec318c9443caa9f4cd0daabb63feb0f2870edf436901fd3de45ebcd716b563c1a1ffc3110581e116f221749c2f185a18514954129544315c6affde461111b0b6d11a27d9cf4adabe7d0d48ed3871047b6be7a5378bd02b401c6c739c3872bfc2937e85aad67aeffdf8d66efb95753d7d59343f15960741f354ed506f67e656240cde89f82f9b7c71c15bc280e58584c143c0d372c50518ca952a1387b02f864d6b3269594f4544c02a424438b07ca7327144060582d2e8f910abfcaeb87faf69bba9058c45d171cba41c6bdb239a3a7f73d38b614a5f827d1f2222025716b9a259fc637c51776dd15b761dd4b40635bd1344687101deb26b91126e2b5986bc441cefe1eba146947d31bceb04583e2efe03fc41f171fc076908a1b5bdea3dcfc1da701c4d44046c59d6c7a774d39fee36427c80440c2456b48559a47b27fc452bc09b6a8b4deb2dc0d87693beae9f15455f6e9a55962df14684027fa1a3f441c78f21343ffe14fd20ca02dea35a310e8d467a8fa0ef20f2210810cc0822071ad10b4439984002103140d9c92e4503b2a6bcebfd45607dbddebf0257ae80b5257419a3acee1357b74462d5969d0f5132315ae75b6bde50fd7cd10eb0ec42628864e08d759296666666666666666666666666666666666666666666666666666666666666666666666666e2f653d5af565a4324832549b4a13520f5f6530d1d55f8298e447d8231663bc0db4f34c42812029e5f553ff909ca171abe48081886bf05a20a87ef4f78efbdf7de7b3041e4f0a27368b1f40b2287141d44a723888e8850101d154a98a044032525250fc2c0947c8c2850402f8114f05b12a534e1255e52f234ac443588100a3131313131313131313131313131313131313131313131313131313131313131313131312f86a93d864d0fc9db7ed679bb61dadb3ca7f674a6557ecd07cdbfd67e68fe9d0f9a8fb55a79e827fe8f9f797b7cbd365cfbdadbcf3c3f3bb6c47e866512b79b7d0ffe8edd2cfeecabf9d6934b747ebe2dd179ecb5f76c253a9906fbd8636fdff3989dd4e24f66e138f86d36c1dfc926a1b7f6e7b6359c65e8df4bbf3584b4b779bf2c3df289ebfbdac76bc37d509e77621b66a7edccecb1b777be660396b34ededab43e5f6403c791dbbf30cd433c79a3e4dd097dbeb369efd9eea7d3f91deae4cdc271323ba7b53f352d7b6dcb5ed37e87f0d3ef78b06c32dfdaf9b6858bfefc276f16efb12dd3be3333f69eadf3dad6d938b3709ca9bdc55c4433c0f3336de264a21960cc3acef5247e529271d14f45741cd9d1506202f4e55780bea438383750c6eaf8e16f1f423fafdcf4627429a59c73caaaaa2af9966271a394525a61c080010386dc44302c18160c0b8605c38261c1b06058578c7705847185fb0a29e58a39e75c51555555ad10d1608588063737a7130d8d8806d8d69a95c4d869428b63967543768b4e7bdef72f0bd3fcfeb34eac2b9fac3936b47f278786f6b7f0b19c191a7b8f1c20b4bfcdf941fb77a27d07fdebbce7eaf1fef19ff7bc3dffe25f9e1dc3015e96ff85bdb66debdf43e0e3b5278912c0fcb12dfbec6f2ea1bd3ff6d7dfad84f6d6df125a16c90063d8e3b7b6dd82c427f6f1f7b32cda81b16cf2f15a36f178ccd2379f58fa234b8f1abcb3b3f4e413d7d706fb9dbca1b6efdb7661b1cdc21cd3fcadc7b2bd7f6599f7752cdac0fef1c50b8df17b08bc346879a364f7493cfb6bb3152219e09bf78985e52b9bd4b7aa75f9bfebf0ad9c146dbddf1632fe25714cc3fed65bbfed161d7ef8f8ba2ceb7140d1f72febdb6ed1896480fdd270eb76219201de2796c6f276b14fac0a4fba0e74bb45956e7d06dc03663b443610bd886c00e332ad50f2c24ae98897189f0663747729a59c73ce595555555554857cab8962109808a8344eb576b1753513000401c315000030140e878322914092c469968d3e14800e838a4a6c4c9749a3d21c48519051921062082006000000c0ccc8cc2611004d78b15e92695fa2c4ab911704f200c20f008b99a4688ce6017528ba74e8ff27f705b50c3db9bb3a1673d9ea59c06d02e65aa872dc27152c911ec067a1e8ef4ad0f5f083a97d2861aceab3e937365e31e4c96ad81701a0d3792b23d6f71c7924c8872464e491c20a1255e491c23fa911e9086625729386f85a5fee4f30b19e999ead3b64fede7816e8467ab3498541db33fbd211e373d0a0eecf3b454d9ba6c3d5a3638820aaa867f040d20a102458c714ee37889964bf21c35c56c9239b99e682c5eca24ad59cd3c41bb5e22f70a33f07ba8a8432c2201e5e25941f930b23bab0f388c4b8a53ca5f673d386779f10793269e0dd7ded17c6a9de77a1ac43789c5c843a94eb9b73c27960ed922d6d04bb47dd5816597cb7211c4bc509189217475a4700a2f3eaac684a7f84b8e50bd7f1c3fa7549ea8578ee172e1075dfaf3890bf0c7eb6c47afb2588a63c879c555b80e7d80ecc83ced46304c30f659566c818b0ac00fffb2db32a4326482f6a6f2ebbf2a05f5626449f4d2629e64e82f2720966cecd32ccbb6a4eb0a4d693cfb3e40847f1e1f38c4495e1565814c0f9e3184f67668734306cadb36feb8e59d7809678695d2cef0e09e393d407c5f07387751f32996425c9dc623b60d6c36c050eca2d1e78dd0a9c656680bd1dd98d06dfeea51b5b01cf9bf6e59f8c224fbb0ed4500d85b4c92c7c3d1531714ca095ef78a9845293e514a49a22cac29cbadeda5a03e044a927c775472895b663405d83a6d83a68e7cb4bf61abec5364141b3019f0fa9636b8d299f73646013011ab041f58e0e0bcf5de8cb912ab661c1961c570ca0e445b4f77ee8cf93cc9dbaed2372861b3fee3587d26421ee85087421772f0f8c8d8520e474a8560d01f767eeaf2fd95cbdd92ffd29903a4f172a9de3d0b18c9a81532024daa579a6710c63d8b971327cbce079d4611b080bc0b16f4070df22db5e5e799afd29a49fac91b5607203b7e0a7b95de70bdcf6a3a8f0c5c397e0fcc5a889d8868e5de4bc06ed9ec716ea2ae5721bf2d732050f4d6bf9f3a0e536e5ac0325c53e6ed07a079333986afb0349d37d5f01c0b8231f114335be3d2728d1813ef4bc2410793d0500e65b3d891af07bbfdd5aafab04f598a8d0d993ad39e9a70fbf3b48deaaba662cae422463f891d466274edd0945fcda48e685eeb0a304644dfaf8f923bef6d68cc55a7d6e802fbcd97690eca7ea4756a86ea601e0b67d39e846a9186200aadd5ccd94b32b83a7eb88791a4a3e959bd9408a9bf890084e57dc1b2b6c1008ec995b95d691a66aa18935d4770d36df2f19bfb99a76519aa2df288a3f6d70ef67d468fcc35dd69db0cbaa0c9c202d82e504d06a92b1c0ec39d0c7a29b53ecb30ede2fd4afde790c313d54c70cd2b9b2345e49a0722be179ed821a1dbde0ee0cc6687ab33d3a6de9d153ffb73d653f58997523899a062d5ddae81a4cee1ac3f8cd0a4be946b128ac4cf65c488c8a3f787d5a3531ef3b1802888d180cd251826d90fa46d087e0395b5f8abe67fc6f0edddb630bc003dfd8484e7e891e5ec9d9aa94d22abb9e5735954688239be7dc49ffaa717c64ed204f7885b7372d6b4f457d20153f788317b3acf114dba362a5fd089a00f7403d646d3755e238218b0e3c26f9750883c2b7000c7ff6263a0bbbc9490a59eb3e79d20f83d2348caba181b5cdeea66cb9f722b5475bd94549e44c412e2a22d9f9485776bcccd303c84d30d4cddf114ea26c2d494166765fda4ae27a644aa4e178bd18724e4eb97e98899f472f72ae965c9f06dfebcf6ea61595113d562a009252313fd13fe14ef71b3833676a70cb08ca3eebc8bb97edc3e18b251e06f1f953bb8f337c9cc6853a425a81444e8b4c8f988bba47525debc531d49dc69d9fae015e66b05f9675422d2eab615a4695c0c5bb34d96fa2646124d7b36921ca10cf133190fc3024d8543816a84f6b549d354284bb3731028e0450b2fe2a9f48d6f4969ea24cbdee9d00151415e4d2664b960bc4c8b48e974e857bbfb30c6673c053d7707d19d3748109e5cd4d90ed5b914cc7ed364f7537fce0198649580f3e699a3475d3331003acd3a1048c48d117ff04bc94bfa42a9a0fd0079960865fa02955921a6b28596545056bf62c5363c39615ab5459b060cb3a4bca58d8b3c6ce262b6a58b366cd8a0d4b61e56248eb3758062c36099df1c2058f2cc5a33252dc76e3bb0fbc7b033b9a91c6c58351db84d843e137784a20ae8ea5afc90f317839f86c90221abaf6eaa8f697b5ac344a9a56a2d210efcade284abc4e3dc05c71da2b50d30922cee7f751a202fc8e62763d6464fd83b08ab814f4129e0eea318933beac9cd52974dba00753461dc01b0e9c09fa8125567fd8826befb50b9a005651e7345028fef554965de6e7f5495a2a4a2083413f901248644663c04daef8ae586e00fc5946381405cb8ebb2c9b676726b7cd21008ccdc5e84a4ca3979df020da2a667941c7c0c835b151ec62ebe3a1511f5236d3a069984371d4907be9dc2ff5a601f6bef788fbfd8b071e1b05a515987c05f38671318d513e4d9c8490b05c91174e2117f1390168eccfa02f655e000ed63ff5324b3ab436bcfbbe50b6495a8cb60064903ad1d68a804942806cd4007c3f9f355fa8acf30dc0070662263fcbb102aa01d82f696a5c5fc96e53b9cc4d0d7b0e5ba43735a27e53ab3fadd6b1eb724827811303504e3c7ff57249a22e70ea1a0f2a197343b7654e8d736be644c4d200242d225eb4b446a44e2b6a8a2969884c3f3dbd74a2534a4d315d3ad1d3a74d2925757a51534d4b253dedb49e0617e371dc07d6d6f582353c4a3eedc2e2eee1e0e4138dd6c1b4b01018031f34a6f125e165019a5823ea879914ce8f7e797b06083ca8eb9c45830b945f822f05d5fb0165c737683ff0c582fc94c5bb338a6968c3385053580abf401012a814aafca6b3fa7ba751685246ddfa1b7ef3c5604b62ac5159d283f652f8c2d04fdc4f37692cee1a60f8115269fb44772bfcb28b6b5a0f774c379af511f9c70406692a7f6a8fcf33cc5154ba58c01a841a03badf8d0eab1c255b971610439f531f95723df996084dab904fbe399e130497423efb33d53bc13e609c8ef7d1d6af502034104527d8a357682fa3ee7fc5c38e74f418b967b91d77ab125fcce7086b300aaa47845e0db8e1f4fefd8c40c4e192de7a20d759160e4d1be0db8e48be189f8ded17f9bc57a211b3b7b313810f17cda6617b9708e023ca5356fc27e3b12e5ee74fcc5296f787746f76e0b4245100c02a98f0c560d2e8052dfbd049dac9676f9f4cc986fc08a40320403399f6eb6d327fd26913551549b8aef1fa993f9d20b8fa4240c581a16438b05a34014df0372b049058f946ef41f6ff13d2a2c3fa1728af14a60d018483663c12cf9797986defd07b81db5fa0118dff64e34a34febecb6721e22b246a8a5f67e930475d54df45af8bba7c0a48b1949b5fa037b577363a89e78b41eabf40776daf4052c8eacc9c02c586e04d30509e457727c8ef748d2d92638d5be40296d4dc9700be5893af6bfa15e2dad20ee7bf2edae76b0e2755dbbbdc99b13b3f906de44f77966c27c9d6b973382faa3623c99d691e32f454e3ceee1ad5ff6d883bddb7cdc167744d6f3234c551bff5cadebe9de4942c85dbd98cdea02332a4ed868298d100befea4b6bff9f0ffc8ff6cbaa834183fe1cbbf6ad4a7dd56d93f2b156e916704364ee30d4d3ec45f91271db8385248a60d14fe66459e2b33e2cccaf8e5177b1e4d621579f27a082b6cac39fb1779562f9afa1e3372dc781b35352bd3248b3c5391331442043dce93e23afd916ae1a5cf65231e787e07ba19bc41feddc90360456fe20639094c11c5b1ad67a89295c1f33703b479d9ee19ca0b1e30ed10aff92518a5568d5fb7cdda859c3161ee5252e71530edf485cf57c340c9e60700bdaf9cdb15f1c4e66006867cbca2ef7c85fc350245cd432f0aed5ad0083fc589d6ac990ac42e926b464c6767d7102ab9204540282070bb7852ac9e7ecd3bb2a396548380051f5dd0e8a366f2585b4a1115aa0f46fac835ec90fd8204cddddab49c8250e97c628541c76119eb687d83b0e4c564295329453fe3bd6c9874857d0f6a434c0a65513783b0e6e687f0c7d84f3ac632b35a7696bbf7f3da29ac1ac8fd25d41daab049f9e66983c8984bcdc3e93bda1e165d3d439a9d398fb541508a377620aa20bdb9477d2ed806ec8ffa74a9c3f65232e8bb4861110e9685751d1dfd9c048932fe111d88514177770c2ae2cc4d57322e67541eae48ff6b0cf4a8c2cd69743c7914c075e49e7c830e320fb943bd69a6ee1c4afc410ccffb032bd390934c109fe011132ecc83a0e9426abca49bc61092deffd1ca4a928f0963317f1cd4e10ad61631fa82a8a19094bbe6dc2c8aab1b9a474b67cd83f6c46c7fea0a6a9e45ab11cb43ec57b45bc6bf6ec51220dd11cf838c8562dd45f465fb54ed7fa3961615c8726d91a8abc220b61b88b1640909921d9f8cd6ba1b5bc47a65de5457ec416acedb5460a88d054e1e0f8116d2d418c37d0af2149fe5b385323efa9f4ff8679907dd820635fb493e453d64da304c7cd20a5dfab3fc617c23cd95b14388185725a2ed34bdfc109a4306f19b8e879072c93e5f3dfa47757c0fa10dc72ec1bff86e12cd7ba4fbf4788cc3291b836e3446b8deeedcc2696b8cb23f5ad5ed11daec3f84249e444e7960fee9015d27092f9e7b8fff9d0676405d6ed6a7c36e6c8cae6461f49498e2f890c2ad20d84b8a622a0051759ef723289aa3b8c36f88ec85a54a9ab1af8e08fb0bff297155c7513e28ebc1d59b813e781b648fc71cd9764d08e09ab8f5dd756d6809c1eca0f1ca029bdae99e79cee6afb09590bd11ca3eb318e917da0b25d14e9ea3c5de5ac2edf66e98e6236e158ede180da7b9930abac58a8a57005a3ac94816d5534ae9b106b6521ae10e2e1a806c661d90fb4a8ff5fff78a4a2dd8283228a1678209b255392c48fb5b251a47a503c28b1cbd3aac9cb2dc03d1985b3318c42b29425d0b80eb7d63efbf30ccd14e2684b7c7620c7d239120a4e961530f4b863fff41d75a51865fbcf946a23e4883812d5d2cacb072f2b31efc6164b20c921e222ddee32cb5e53242fdc1d1398507dfa5b4c76d5894ed926ad8ec6120dd08d793711d2c65427b397d353528836a042819e17bc4fc30004e4648bf650fbd57f7f867ba0bb8f39d4a6c978704767ff6773d6d24741be9c535636cde99b234cdc364b651fd10ca4105456d9c135e3320b57628acac2ab6fa3f8be4416927c19e4a8d2d777e8b5de8fb455e0419d5328a92466c6c02b3c8b566c7380b19c753dd6324a474277aab9f7827a375f521e34fe80907b8f237ffda63b74416de7bf41ee41cf3e372c6137eee11138f2df8c0e591ed71bd35420fcf7171e9ea08430931ca00254c4167dd6f2a4dc7cf4ed910a60af9259577e90e23ecab5a9413e49010bad336cbf2a3d89cd8bde392a8c25ade42720fccdca48eb473e0c1d49a601bf08a0612a943d4d1fa8c2bb919cd81874e8b5e400ceeffb5c2de362fd8a009565e6783d7dc89b91b0ad76eebb4df81a4c7de733ce0f98318ecaf002f7211b43ff1bdb9303072adf12f4cd3557bc8ea931236955abb701118343bd911cbbf3f40e44d2b06f6d3d6ea9544a9d27e18d6a78916fa8ad39a287add458cdeb71cb391a34103aab56fd815ea598d9c13bf736afaff9330f695579575df15b981953f985640ae8fd5d7803042f68deb7ad130a6413889dbe37a8bb38de5156b286dc51a170d71643450bae2c58fc6d67e81f7cba615ac0c0b5792d2350b3ae7bb03c844d1c1aa7e6a603a12907d0edced7fd99f300f4acaca03912f6423b9b9f05b28ad66282c4377349aede4a49ba1a0d8d7d80394c735d518edbd4278acce510b71904d52031a5193a9311a3b0ddf313e6cdf45766c5a429ede090023d9e5dc5193a82a72cedeecdb3b01f7b260abcfdcf28e16a34752918054392a7d24a2f99d3db94705e809997d4b6320dc873d363dc2317cdf293e45c314e31c3de1ea0c251a4a96fda447119da5c54d467d8f54720da871f165966f77f63ac4adb307dee735c53283235aecd7bd1366f1dabe31f6f34425d1ea9f07fe11667411b0f790145d7efc8c4326cd9eb4b47d8514c9c01d785d6a762b79192357e32aad1420e5a0325d062b66e8f1a50c86caa22091650f6cd014c1c290402be5e19893f616e878e0e083a872494f5a7d1526e660666a6697c0028810c3d9a09aaaa35a9131cc592fe66f7994343aab9f7dd6060922b6828c73cb555d9a2892f05211d616b5361a4d6d243bf3fa3c94b7bd6a49619879ba7553454cbcc4295b7bcec03844a3cb6a7c44553fdb8d320b6b96cf9c329c1d30195acd4f898722597f1529a5a54d45fd4ca4f2d83968eec4126d5704bd68efc355f8337a9209c6dc6dad51186a26440359f71d6aae14b39733e1eb256ef7e4738dd64174a2c2df58bac9b8eae991de400c8508d0cebc0721e3b3ffb7c9fef3cc4fbbabea79169196ea616f6ecb5845912b5dbf9ba0c7170cac943c2f22ce345d85b2ad45bb8ce9ca5dc0441d09106d665ce8b9b7b34d695400fc0447821cfacae8016a44e5fdca68da6a5ebac3b2321a9255466f45abf5f5af2c2e2766d9b541769302a7f3bddc490416f662dec2d14c1da6599612899d3a2f37a38f10bbb11a470c6da79e0beb4e8d362c481a4dfbe1809701313572290823725433d43efd2740683030cacc0185de351abc49379f92180114d804a1786fec7b98a569d575279df6362f97779abea567d50535cafd9513cfc8e207ae7119fdeffe6e44b76d3d895b626cf932ea84cab42cedf1d5a3b92da7398402defae46507a05fbf0a7dfa0e0c4508308dd8004396304d98bc846c1ca247b359fca79fe18ae52c9448d24dad1d0dcf9646f4b2149dc68484cd44b4308e1bc4dd3c901701fb61db76669352b46fd1e6cd9bca498ef888633235a1c2d3616de9d53837270ca539d2516b07a13bb9c753c1e875f4ccaf981614a24814446b7c584625ead3534cfd1454b67630b8871a9684e11477e8606a922387b9560ad1f0b9d99544f1d69eaedabe3d59cb9d7924f4fa844a00991c2d065428fb748b86536f9739dce0a4451b43d0f06359ae9741300972301813e54822e3d015a8f0f00f4c5a42159d2b54052d2a82f097f465152c6155faf1b53363a338a6b87c7977d898e6ebebc7048f12a5385bfc7709f4d97cbedcc96c8e45feccd24f1dcfafab804e62b2633ac43680a8a79f397891dd11e7e8d3d44f202113b1e0e94a52ccd09584064d298fd3b039523a5c2347c1049232f18cc427831ccc5e843b174e80e6388b20d352585f926445dc46290f980b515b5802b59f26700a8b6573eadf58253c189ed76e8e9b0db933db77ea61556d0fb7ddcaa4f223a28153b493073cd0ec5977a43638a1bbabe71302c34317a9341d3996d055d84d1bc9cdc1b46886929e91634e6eaca609c1071b0cb3d1abb0f44daf82b4971932b0d9ec8332422b3309f5b9bc5cf9c8cd8c3446585664e14de404b938504bf2e0bc5b20302e225a8e2c83f086c4909c5b7750d3c77e66f4b93d740c31b3df9951047213dcca252808217771e1c24ebd7f297e6665e9dad1a5becdbf9a27fa1aa2083b55a1d92cdc5aeb661dad86246bc4fb9f778b7b6477b47e510af18d3b04d246cef66aa44c003347a82fa0c7a7ad612fb3ea50ca904d30e95357cabc6a5cefbb8da2cc07c974eae77ac3d71996456b6c41bca4250bff744ffac7c7d62a1847018d10e7387cd373462c7b46e2f71ac515338f54814f0797f41930bba91d804904701089dcb7dc0a0240311ca86420f500157ca9d64fd96cd25a8d6c28227748c8f48d0536d39e5149b60c123be407859efeb0468683a7afa73289dc0c032467c40dc6dbb71391aa58f6630258e0a8bd4193579967f49ec10bd4b85d02eb11924ae6f592cac92f6797568716502750d637392cffd0dca2145781ae158ce427a787ab466fef6880549dd33452144dfff84932882f56a0fea439b23295cb24f3789873f0f561b38f49967a8fb042253b2dfef013c322e30ae0bab6d81d1bb190db0f074eeb2f61141fdbc2adc0eca65baccc085c2948c22013c0b923cdda082d1f9a79484049008cc87a5651e5edce0f679a98a98d5a13c2235faec9387804239a0ad06b83eb89639081d553f4e228a2ace32fc35af03b54aa9d0c5951a0347da145c6934d7ac0f436572756d6901a62877faffb031c0d5d9d2c5fe61cc734f4bb316e14bae8adf2e8c88cf765b92e67b4f3a0d049d2ab9f09efc198f2a96fae9fc3cdfb05d9090ac72b066da5495685961a9816a9371672e93ee66c5a3c5b40d49855f2c121749c7338a5b484a85042386847e74271a7ff483964c64f7b2b503844ff6fdb8303845c08bd4213c7bcff8bdb59fd803aae6b1ae106b9c09b73ca05c280b5e365a8c08f5294d602d71fe8de34c7945b27be9dd50ddf1c02ac52fb7ab48f4697a35acd30a4fd63351b3da996a03157d13b601f73f15a000b185c09e952e5d6666640642328da7a3de822c2aa264560bcf101ba561e55825c521755ad07261cf7828c7a91192508160e0f573ced51a7237b1916c36515c911ca3adc91daa39af651b72e7c4428f135b79b96139fbd18b541343e906ad49c9da66ecbb040998b2aa2546ee4f7bf10a75b7cc55322961d6a44d2541ef86d27bb266e25e9e13ea9ffc825a172e68031551451cf6b7726cb3ae3a61626b13cd097eed4da4c5f4c7b7333681a6ef459e2add8ef11bdcd9d994010566fa15e7f3edfb2938dc6014e093e4b8bffcf56ac57d11d317890458962128395979290680fa420a26110f968ecef4b9f02684d6b704fa2f6e0ab9775c34ff58d9fac57d46f9b3b9e81b79fceced2281b380a0d28c094ec0c7464318eac9408dbb442e102f871210c14b520455b35f378bc13f2bb98575ee8ec53d9c5bc48a29b53e43f14e04700e450f49b3ab71937890c4fbd1bd30da8326f9e97ce623244fe9de77d0d3d000ef542974b5a48746c9bc91e4ed8772c7726465b2c9175e9d7158a475352634e3ad82bd479e10b190b73a13074b3c36909850af5374aa1d4f93ce0e5628140aabac52c07733d582588861d87824db7036ba26f857db1cb1ea9df1851b6cb827689d92b06e9d648419e817b3501e85fd9454977e442636020d8e56b9b92956932b630d11f2022bce958bd08ecf2842ac74918d3527de0afdfea7519203464bc2e171766e275b92f5705dc11a2ab35f5e4bd3c4b779cf2d532085085765d06ff6ed68bd55d65ed6c7660ac88d60142ac509d955de8cf0bd7201b1251ebd2b8d0ca55dbd9b3ed7ab4f2375170455e4a5fe3b17008fa9878cbf1b1f9300399bc434557e68b81efd7659600f3e0ffbc0da836c1d4027a098f10f4340b8fb7db10bdaba17a6c3bcbe99b166328c26efb7fdc31732cead76f5b550fdfd94a92e5a147f9467fa81c3323221e757b2872ceb25987a157efbe1e9aa9d868a5e02ce06b55977b285edf69dfd03c9fc55150a9f89ac5e0a06a219899cf2409cb3bec78955bbf4ee45d011ea0bc2d5e7cc1fc65838c059decf8aa0a13efb23e9e3ecea4d5c55f9e28c4ac8fe1b263c72a6e539ee29a4d240c83ffc357413567711afeb2ea94f25ffaa169418a6c25a6f1f8adf7cb80ae37f95a6fba5f3e397c915d9d1fa4ee97f994aed665946619261b42cd3541d9e386c2bee10252ce75e17ef99422c9bdb7ef7496ff043583c0b532fc7af87e8cdaa3b5e52de5dca92a986fe251e1375797eabd44181a8f1a0713549fc83509051b4a62cdc7771e4e243eae9269e18c9f3f65b36e583e9180570ecb6061535521e52f3eaa6af3a17864d13324567237e88bcacbf32989d407a97081ca2f67ed5b194933f8c0f38214dd53bfc3a0bb8ad63b2b75ccfaed73c5e554758d2ccc327afe06f486de856a8a14ebbeee1f7bda551afedcb54ad4c424ecfde40329ae37d1d8723ab7117d2c231fb7af563c6d856bdf603de1206a6802441cac410f9727c9c588dbdb8dfe67e34b06684d1e1097833ca32a9255a67a415a85ee3c9fe3ae250bed6ca326020eb1a4601994655326416050d1482b72a693c96b3f59a69b6bc070ac3c67da442455f6722f08cbc87164929e56552c8bcd8ae444cc999d309a2c47da8633bf1c1031d34c8e09fdff10730066fa513c1e553ac40c567af24e17c0285e52b1f983cd748d0a0066262b69c436510cc6f22c6adca8ed0ea76709e9bbe5311102cd5d585242c61c6d15f5d534579d832bc44cbfc227a2ce1436f5c4029a6602e18610f5e067a9be245f36729753607d498b33dff35b621b0c4a153f723192ce3ada564139c9d9a0d4002d77402ce43909b89519b8fad074b0da627389494e6945c0902c738e99acbe0ec981935f167df71ea5f0a07c08124a3444d5017839e32bbd858058ac54295520f8b1484f26635fb5f9703a0ed833fead453bbc68167c64294006cf44028bcf1a9d787fc0160c3eec6e0e7c0a3d84e2c5af9859a98ddcf2e5a8cd847a7997ced2383fbd3c6046fb0a8a99e5f7b64163e0aa46e33d91484af0d58c8aaba5d0c86040c5efea77540462e6a544df4cf307b563612722c739efe73a35a4f9a556973d42dcf3100d6614f02046b809b67c297723423aa0990efb96caa878c1439bdd6e4743f2d00ed2c0b9e0a11053690f25f783a3b9d743981d47fd21cc3ba0d0d6f3197d0659b4ad662789ac50e11c9b1937f36a7bcc741a35e088b4fe81ae96d2d57b1264b57cd0cd1cd45805ae9ac95ac7da749520c1d4bba71002d5ab293ea8c43c23432d4b40c94317d30b686171fbc0ef6bdf051433127e232ce8e8b54cdcf5ae6f7b7040ccd30bb56720a572d7cd29400c7b3fb63dacb1330e1d7ed18eafc95677ae2c1c7f26db6b9c6c1f875a454d4cc899fc5095a6cd2e6591bceef8cbe6ee4aae41e9f6a80325919b24e8e08d4b918862686258002e73c7f372fb4f09c4c57bc1444ffd82fc3b5620a399a2e0c484fd739cac22c71fba8a390124c28be23e1e93a2143b85ee9752ce537c8bfdb6c929feba56f9619ea06d1c79dcd337e992cb9d203f4ce1b408752e16b316e1e84f1504256bf606392280c6cbe7858e76c60fc3e92a8a5c79ec14a205de85988cd38c661a3a6397c36f5f9543d3a95c8c8f39b24c0dbc53ed4ef143f5855619713e4441e4d1ce87adb639583a1fda80b459d25e795229815511076aacbc28aad3ee56a37181988eda023103d32c831ef5773f195ca7aa22ed5d133e5014df5481789076df32c893f2fe1b0ced578457011bc4001cd3bd75233ca4eee5021d552066a68d4b64e0a5caa5b492c21488b90775df796d812d43ee956cd7574ebe06623a9f7dea6f6f71ffb08ac26c0585ed81b6795f380e961b7d006ea4c3eaa2a6135ce8cf9da40f98b83d74af089ab3046b082f25b1d4e324596b0289da77d932e5396e39d0ff2ca0f40a215a5de9a059d45b8e20d9a88ec64963a789ec6788e9450a11c322b36cece61d72e8ba3a415201306623438ced4742827fa575597a7a314097110d71f746d8d631317e7a3fc2d5380baaab5be556abd1486c06d34d36eaf8bf64f8fe8903e80ef86e1d58440e9457a72a24a512e3c12a2aa9f9c27488570c2c02c35162639d8996855c39136719b69ca2837eabc399305e7b9c70564431386c175405dbfb613790a7b08171865c96979d9a857f5e12f175b80809a07c53b60f5b49282fd726d6e363f66b2ae1cdc4f37b0e17e5723c9ade4f0f82cd14c09d60f8675636c212a3fe989d0068485fe6f0e7df908e6bd68a56136a770e17fff2a87d271911a9d307b5bab8cd3ce41919ed7d0993d188421a41a0d9b3f745191f282501495ce4238053588bac0b0a0079c5a95ac43c2171119b21590b06a8ebd982de3131449a4e37fc4b48bbec4dfcc67e5e968254e13bd79e3f666fc2e21cf7aab4a4862107ea7563d159b8b1bcca1ab127d2934322dfa40926b42b06328f40c7423ef0ef1513089818b63b779d540f0f7b63b8a5c5a87f06705333851935b294d23ef26a510800ef43d052d0b608af50be48f271776aa78ef7b0d66ac95f88d8fb61d14f7c745931ee0615bbd0424bcc4a0b6af270d80aad4278a1dcceb1a8403308c6d41c8de8d5e93da623c4a668d0749e3cb8c899d80dd8a83e501c546d8813009983601b541c936314e9b56143a841d1a39b8c697e2af5d1318a56c831262685d47dd65cd7332b02ef1695563baace442043efe13cc907b93ffdf2b891d3a3834be70f9281da2255179d1248cada16d634aa72a7c94949cc5819d0919d6eba08c5323332ca695723a8c37c36336801eafc29b55d19a59739c43952863a81b439b0600f7170d72d604ac8a1e696c86ad4278159b7bf6afda5d4983d1afc166ef990246e1a9466bb76ec906ac027fb67e0341f3ff07271b0cc1b83e7daf8781638ac842dbb2da1e040ca4dd427d0296b29ea4fefe6570f62031a7d050574d66fa4afa783fe683fcd64d49c1b7c691c5ad32f76eb971c46fb8b94f3c3ffe7ed13997291b3e98f35f34d7f8dfc813a045f992378e2c4e5da0419b5d718ced10cefdbacfbe5de2bf92b9a516197c3578eccbf009269e083042aa925e03d2f81b90d1c155f474f0fffae7786a065dbaa43252734f19ac7df282826d5c583170303a4c4bcd37f7a85248e3a60cec54807af17202f0e47c2e7546262206f1065459a249c05100390997998ff34667d464953cc47ed12bf7fdb409180f4afdd72b9e36f7cef97f94535b2f28f97d04c8a658e5f86b0fd8d914c1a9d5ad52ba23dee8b3166e319b47aa8bcb91c990faa0126f858a3de779603052042ac7c17a7f96af2e826550b932c701cca41bcffcba05103e8b5ab8c715f398b512259521097a31437ed5e80cd2c38f2cfc8ac34c41010107fbe943e5355e8ca797dc42345fe70045f817031f306587f7b0258b77259782abe9c599c5ad380c11bb8f6111f0a28c65e6a30a13c8b26a658877e897485e2248f9d50f76bef27f9cb61b9558e1139b2ed0ebc5ed957e5a0486aa0980129cfcf662bdd869a599546e060da1e33f873aaa27d0e01a25d78a929b7303a67b6e566b5829e505c429baf0e04148da1dd39a901bf6c95675e964a4eb976850d6353aea033271c38b4b5ca190064e8aeebf5de832957d2da8b2f097a26a103777a20846829f7f8537d69cd2ae580850fb371e0815fbfd64f2e3b29574b84d2ccfa05e007529f51d1f24757317c24f3bef3f7aa16049f9b9aac980481cf82381596c674cd8f79d404627f934c4800e100d9b822e0a30e6223d2c9213a6f0cf884c36ec7a0fb3511ad7794c2cb1e852a82b59a7e1e80aa81e5b91473981a1630905844832eb4a2d01a6369ea5fd5a71a8881a561fd5c4dad5512163cb4f56bee0156c4d47fa3ba01b5ba084c6bf027b7f19a7cf97433cef27efab79f2159999b4001551f06e957d0f156030a61eab7fed9068113d0d64253b74786d53be5fdd91bff2fb56aaacd393d606d8a8395a0185e912626d564d06eb3e0f93f6edf6c003dc9bec134de55755e459337dfcc515be361cc6a3b58d54a934bad836bcdd4f86b5d6a93e027b5444c54ceaf1c5a6d1d57fe5f9acde2a7c4dbbb2b90f1c89138c5845f965c97999157312318fc86aa0da22beba22fdb3fb109f821a6a7b3f528d94ea6d631779a8ba85018387a0bc53da295cb01003fc4e49ba142f81adc62069e27ceb4b4658230b92588536f1cdd4b3f6dfa8d56fa5d69656d9dd8d830490323ce65a438d287a10f74e6d22636299c110978c5c66142a1e9231eaa289bade1b84427ed115c2deb45ef34413d80656392784527937dc63e870f68c8a45b39c66dd40374954ac10369b471493869afc970b31a893c19de5e8da00bb2052d9a6b1e11c48d4efc428151b3a479bc6ec9688378ae294596ee435bd78f058d6361ac5434f33e67da862efc65196e8ebbb1e32b4dc924b22b0054f27d0c12576e8c99e3003a5854a86461e1b895ba0b57006ce65b2347fcae46c4a686f8d4650f59c4c3cafb2ed294f33f605195338b9d02c60d9993be7c9746181ac23c51c6abf3c393bcec978ef001903cd26c65a55470f315826427290e829e236d3b0e4f25ef108b1a6c38e2c33440a331bb83ea3b39a7824d6e5f2a6d3e87c918275ab8be95b9c21149d45e20462865e402e2c893cdb0f8969e0d2df8084eaea639eafec9ea514ee3d2593208b8a43b4e470e0a9716d7edd7bcc147b12ac44e025806d2bcd63a4359c484ce1072bc0fa99ab145f31c6e73e5020242b4b952b3f58410ffc34252dbd25bfb836d13b0e61730019c2b698a4ea53cc779f9dbb8d737572e3e690cc82caae315f320d36122e7762d2db5a0a9e7ca823cc176073b64f6f7fd1d813020f647159179ce24142804b5accd9505eb59da5ca98512fd46ffc1ca94dd1cd28dcf49a2525a3f93b4ad3c8b29deacbb90fc01e449ebfb1a960d2abdc8e1cac63dd0b81a546a062621bee2dad272c37e05dbf069d74e868c3fea0fb600ca34264cb80e9a17c3cca7b8751dfe105802ef1f3e253bc944eae316009b17d7198f206494d09c30022e34310880f69840577f4a1a2f2c810350b117711ba40385cb3d56b292c604f41661c125d84ef321a35cda215844e1bfd54b35cd132b626dcb719eb2cb224ec1aa70684c79e6543dbb9144ddbd10cce1f6b25b53cd42d288d1c2eaf16da0e345b5f4a371d4953afe63b11e42d4ff1fcc92de1377ee5102866c105a556130232d3fd7b356fd5b949ccde19931f36d02c45499a24691dfaa7e7798a67d2a2573c6827adf589987147f5226098b52ed7754d9b1e8556755b49aaea4594079de038bb850d6a1d9844bd51dd632235accdc92ea214c79a56130572dde142f31a2f89b3d02ce6dee2fee809fc3f88ec31fef4b8c00722a34dfd0216b0f8c685ac266bbef4fff79c229f156025558b007ef0c98354bdc1a249f735aa7ed3c3f3aec6ef8112a7c06755ecc3a12bc6dd544458443e3f9c12583c12b872b3459baac3c16107fbcaaddc26ebca9b649c86645d93cdb81c455fe8d5d73f26b5cb5c237c8834fdf1ae0a97643621af102e8df1793d574ce9260cbc75c12a5776c4c2b99da16f6748719f9c4c68984cd99b4ee250951207e3a7aec247be86c72053c9b6b8bc3e3a6de2c62faaa2eb9c1c8fbe58638b9f4effd134c064472c0d9b8c2c9fa398eabdae1cb6990f4d3d5c0da5ea15b3deb56b11f61511150c26068388f69082d18aac41cd338aa39e561a35cec048bdcbfaee1a6ac7e871036c29a8b51efd78a75b495549b74506ba53ba601e28d768ac5900fad99313c23843e76e294ce8443bc825e7e7cb04eb9ccbced3a821fd6d2d10cfae236465428c2d7bf7736b9b4667048a6c10d176ab3ed4856c129dc95cc70848ce00d6e7db3381a4330d391de2c8bc612dca5b3d28c1b125382b9804be14c32f02952d66a4085e5ec9c031ab6023ba3e11c87cf3bd9f6c6d5cac9dc48958eac422da20a97d81d724924531927aa714b822bc7df4745ca4cede2609a1e35f2413d8bea6dfc2223cdbb327130d6de629fc2b8f247d116b634724086e83e6b4175ccc4bb7eaf1725f33de02b80888cd9735ceaead8044e34a1244e25603f9041b456a16e98ed954362f32b26e3e093e20441be02c06a8dc2e324d652598650e8aa324cf0706aacaa82fedb532a981be4b52088534459205255404cca9584e20f0c717d159894757e30097cc7c1a4210df806931a106417068a54be69d413378e03b156546c8992524284b5ba662985d10a26692607c9c2c4f1ab95ee5da48e891263167ee76ab528acc483ab95863152bf5bad4c9591cad156ab4f715eb5400d69b512e401e4b46d22be8a28dfb512bf99a442ad95fc19a953b95ad1a79152786a75c55a068341ad34312669d1b4d27e237533214f3c6d3e916a15ef182936aad5b772287b51adc230d62014aa95be17e119a856b4f918ea7f6a458aae4c93aad5dd2f0c78e439d9514818a75a1db3cf8667aa95865b203b94cf9d3c9e37e48236c7e4130d98892bbeb3f92f1c6018f66dbf2362e4f3829afb670761ed56974c62fae4cd671554421307d2dd131b413798b2d7241db0d91118a45d04d855dee12f0ed8237b7229f76f9b429f83707bd46467a1e8bfe41393f17921b03b6f58a693637c7be1e44491662a21085b3cf2a448c0bf27ceaec80858786207c01241357d1da4acf221c676747462722549fe1aa41210aea4502cd734728095e808905b495fde004fcb1170bc92fe3647f73e1de6f25d41e1fd8c8308065849c69ca06864a86860257d28014653218060257d32023c293549e54280c9120404aca4ff7e00170e08f05a491f75005bc207f85a493f9e003b7f0f80b5927e96007f7a0f90b5927e1b014eea1e4096597d090196e01e602db3faf3012cae3dc0ee4afadb0160d06fa646ee9f716256d12251625654e7fcc4ac42884913b35a8ddd7d9534b0af8e7a56eb0933cfef33460c203b6407c02ab3caa2cf2d3418566615ac048862a6c5b756924207186a9816f7aea41e8402d4702694ad6116fe7f9574369026667555a697985554413c312b2a19ef57490d6e6a1a809d72528279f038a8be1d367230ef53ea67f0e0ebbe97d567ae898528e403251d781f5ca9fea6559dd581ed038e1b9aad8b7157e1060530ced82b81bd97d06cdfb49cc831a2b674ec179c6994d267f53202cc4661cb75d9cd4de880310d260e5a7f9c180c95c2da16862b41253b6543fca9a7c8ff7059dbaec0c896e1c2eab0b382a8c35adcce4d8b8b223fb1ca4e71d541e195dd9021ac0c2457e1408324450c0faa2647347f598c5cf65871e1782d0c68582716117cd9b3219cfed048ac192a312ad91215ea1dddb67150a1dacb0749d55c54f8a1881fbcd6bf17847a0f22e7b469539ff2a6dbbc04e7a1e0c0e63168441beffc11d63cf1d4058585ef023e187aee2d37f183cc0b26355c859c17599ae018c7773807ba93b14cca2499c8bc8c1e5f99e698c0fc268fc944deac967fb3addafba9b19597f57eb128f9da710f6a8d8d4480ee5c4957b3373d944293fdb16a55fcacb490d19b74dd4a29f9265b587881721210ea3a8281ac94be341ea948c6d28b2700ca36f38b8ea730ef7e24cd0c8925f0f70fd7a994c794ff1f95e445850b55e88330d2b2250bdd954f975934c550bc1adeacda19c73dbe8ab87aeef2616a9b45a583735088c5532c2bcb6af235e213c67a9ba5b7820001c1f0739b005d3044748067794e365ebf1924d36d8e57565306fae7c1869055a8dfd48d34e48b119a1fbe7547dac3bd256b2a4a7798e6ef90e30f0db2250062af8fe4fbb107b92bdfcb6055c28047918d81a892d54fc3d2912c996d57a484c79a4d88db05684a27be658d7a90c4fd767973c01d18f780837e2d4f0726b611b0b2852114a2a7c87eb7a5958f5491e559b5cfcafad7f4782cab6371dd378d7dd8b362f1abd875d3c58b846e9a977603a3ecaff2003d8f0400903467f26e9296a37df1aea8494a3fa5913c1dbc36a73e2c383c1d3751d0f6ea0a7e7b420b48d4ef1327591d45df669bbf7ae0e8dbcefefc2334cf300f5e1f2520bbd0a730f484f4d2907ff320a4f569a5de70503131f14d9a4554aa4b7afec590dd1b05477aaf64fea36d28d5962d31517c566b564be7e36e7201e4df195ba8add8598cad82a75aeff22ee7888829d6ec088fff38b55c58a2f0ab5c10b8b3525e3d4b1e26e9cb701cf166721788cb155c1531e1100a6a33a86ec76b9f10f2f4f27001857077ab10e8686022582b3cce7ccd48b1b4dbad6a219d1c5e9ec991a3c44a44dea58848d510bf10afd871cac3ad7668c2bac543f230d62b20cdd75c04266a2555c74d18bb321a93b2cf2c3dbbe869adf28bc5ba6923c6a4e2e2cdb3512826c2bb31f17e5e63eb1611172d59a34cddb1e2ee09ffac505ae9166afac41bcf6be664f08792e4757c6155c89248723c8fbf40314c6ae09bef63b2c46a76832ded8a639e16d0d4d03a11dfec22690805a13a5bbb37c7638cf934323ad7096f2419fac7c9ca7a905d4ea6c6f3ed38b22ace8a106a6c733ce58d1c4553f279411f0cf9972e35a48baec55d24cac87c5f1b77f7329216874ad4ed4c75058f204684482b42fff8cb38781d5bfb0c2327a80f4352b8c25ccf2cf8cad9322244e16ec4507e59cf67f459a987fc1642b9113e9901bd3e90994f1786746433b889a8db63b0d2d419625fb1cc42336e97bffbf72d466225e6347da96345d66b2f410fb3f8535a89ca61ae2ac819c2d58fd5a2120efbe4c4639e076c501eb7362d59462ded4405e3d6d56af3989eb23bb1bf816ad5b941f67c85c60871d6ad078d05d40ade0d575a6e17c779345a12338bfb9790cdde60141aa39edc125ed0dce46e008766ff2a2f58be49819c05d3c3fb22aa34d9ec60d0ab0b0631e005cb625583e5af174cefd8649b6b5c79eceaae94013c3ef0f6a593f5d57bf1c8e71a7d2314bd5b68fd95d8c8f016ca3cb75ba6ff0d0ee1dd8840fd3d8801daca7b268e0fe0f2cd58bc24f7293b6d83eab70445a452bda4041d6f6822f3a36073d05f63cbf16d5a3ee0e21f195f19cb0ca05916e1941953df97c222cde9634a2149b0d4a73adb4ad79cd1113505aa253ce7f30a9e42d37984cd0e54e286d3bb959f0a2ef63ec0610f9a216ea751504ea7e0e468abd93aa8c487977482ced5ddae16bd4ed3c3224f60ce034b18db53d030d54668af72f59586b638bd484537fdceb58728bab201f092b5c22e25975ef53960501228e2c51782925ae0248a0a5f95141ae288a7c004973ff100d450c285de9848cbd24a6cd898086c3175e498f01f0b56148f09250403726c96a38d14e611d22dc8435bee90685f4cccf59760913cb66d1054b43972082373242e42bdecc643bf76f03725c7e210b6e951c5484ac0790fae98a854549021ba6348aea59e67cb6f898c7828f8fad9bd3d6de2a9547b833c1f6f68e64a87e47c7a5f9d8b0926bd909abc27b59fe2f7fbd42c7a3b8aebcd0c7c907099a1bb4af46ccc5fdf3a9cc09930b6fab39ce549450b9ba7e84fb8ca6546bd1c7a72d6c8daf094522a38e349a7372f61e70577de8ad24b5ba4c79bb18230637d276f2fd53d4e2058b083c348a8f55df5ec078ec53c4e141fe9c7309612a137bb62b2e753313f5094981c860e0f10395e5311b460dae31b188f13f7abb39df76f748852f1a337e049fbc6f4d7e3e66d005f5208120931c07dce29e9a051c85d65825226881614aea76444b2e09b76a7ac4e8b9b61c472d62034e765d1c80d9289644d8b64c227bd474a8904d52471af8a3d2a1093440a0ac725f828b8868447999040a030c8ba7373e8383193804549c03eb0feb68dd8c7a3bfdd3fd1878b04774ded80c0c00e52515947f3acddc2a08a0e23c1a897c2e57d248fc86056b1a0a3d12d11d8c492d37f57ff31f3d8230ff441e0c0b475883db19117b7046178cbf6251c0b22dab56581454e98173a8481fbef68a2ede3afb8e0c1314dc1d038569c3cf50141a26b0e2e265b880af3b554fa91db643ccc86f70dc752347ddbb4d8fad141f0d8c0d8772c23a1bfd3b18e8f3ed8f10bcb7bc052d631d0648a09fa5821f17b8143df1a6791712c41160f6af14d40df679a81637a8c5d7472da4b4e2d61c724964ed0477521edf333150212795c341ee31e617cbbcccb8d5ad4213c9256ff8084fd547460c5f99cc8210d316b023cc19b630a734b017c09e80609464f0bdb442aea6e0b9eefb489548c5a582d1513695b08231b527e673f97c3f3eb2ca272e1610225e9b7612e8b5ee2e27705b7109cf14f6ad8cb7e88892b5c470532419048ab2a88ec33b7330381fb12318790b560ec720d59510f71a5a53a93e01f1754d7416d2a5fec336fde80aca50a05859f0f74da8470bda7e0bee88dd946844bea112d11da82cb83602c10c515e384709604e739cc8500b93b9e8f7c3c0faa0f3456ee86a8aa3fe3cc7cef5f80c0cb6846fa4fbdfb649eff15661ce4e2d9635c3221d7eab8b538f79b09ed0b5414eed1ae0da1598faf631cf98922733fbe86de4baa972dfcbb908f6bb14fadd2d7f2fdce28049200bb1bf7a8097409d1f77146b012564c33079cf9033fc60763764310fb9c5e80d9983b4c64baae31be209b58164413dcada85c0ddaa314f4150bd1c42ea99d5539c1c4f40c706c795a700c3d289e270422c79b1086fcc5df3a3856f04b85115d38d2e04eadffe95f273bec714e2c011c6eafd09247fef4bea67cb66e0f1c43c0b15cc0d76f97d92adaaea339e44e3d6b3f8b30022d4ac2cdcbdc54e272a50e853b83d5e427644eb901649a042e2f44b20d54107066351d800341213804af51aa801208e32914855229a72804c1711e0d2e61ed8436b15b4ab22de5f65fba91b4bbc94d986ee9f081874b267c7e5fb5a5756afcb632d029e8546022fcd0f83a26e65ab4de64a7360f380c1c0de20fbd117df093849f29b6e4f7bcd17dfc49f263eca2cd1bce3265522dcd607933ae3ea238797818b55a237834824dba15d0dd39dd7153baf3d1b3e62da70ece2f8a93d4e96eef8e8b82337e190d5d9c8f7d26295dfe2249b3588e1ed6d216d94cd0dd47ba2b6de96e1cbae37afcbeec4ed1a7dbec4595de19769b3d7c7a8774c0188c870e1d3d7cc4660c06448720030079c4e68f1e3d401d80c08080af2304127b1f3b7a04993a60c6e5d5b9dd2dd45de902f87a302aeef078783b58f8730da6d3834710f007000b0730001e3f40f077b0460b7ab07296a9ac7633a6b2bf3a567627a8733f146909d3f9d1ce74f2b5b0d9dd32babbee8ed1dd32f44c77cb74774c77c37437aabb5f5ea6d0e8aee49da94862fff2fc6474b771d12d4e9e1add6d5374774d775b13cdc37d5c6977c3e83ed9d832be5e68471df08db6eeb6263bdd3d4377dbaabbeb8b2ec41fe6a158da197695639af2a30f2bf537b2e3df173969b84bb0eeb6e96ee31a5f2f8fb16bef7dafd3c3afb7cc7fbd5a9a67ae3fbe488ed4339d37bbacd29ce7786dcc67e9d4dd3574d748dd4dd35d3bd1dd342bc6ee1b59af650a4e7282f87ae01bbd68f3ea8017eb805614a74eedce0ba36277bb7497bafbc499babb44002958b8c0050580a941050a150c7cf024680935188a11c10715664422291c2904a9328386f2c0c0c4163fa2039c800992a302c18e2a33687880c791b807070210211d31029411601a2045a6a94489e26a0ee6015374dbb6335384112577c98952f2cd717a4746c651322f302687294931b98c6f3845a07c2ba166a044c14182003b9cc3e04841da76384782003b3f987cc68738198fc1e99d9919878971a46d07468a0c4a8a8ccff88653048c6fa8cd8b8871199cde8189c199b9f1e204701571fe44ade42e335262dc0547ca8c23e13b30becde444e17cf32d474a1146700e931385938284efcc38070308ce67708a3082f3989c289c977e18e2bc34038383b4edc0380a0769db41790c8e142408b003e348db4e8ccbe0dcf8c1e4330e04e732ee822305c504cace4c4e11510cc5f8e645c0384e1131be790f9c0b4eefc0e0e02011c5b6f385eb25a7e8895ac99fa899dce4dc8d1f4c4125df600499dc4f50361717149ddc94d32e28dc660099369d505216a080ade425d3e60299deb6a2cd4dcee16c3026938948c961fc05657a8131712f2f309c6f30a89c22ce64329938cef48468330014d78b0f2677796254ca1cd19313777a823ae564ce005050ce9d8a4e394425df5038452f272ff9e652c8949c3bc178fb707ecac1b9d9e42e39462577f1138e131b57918bb72b26c7c913178c97709cd8b85c7232e782f10d8691cd85e25c303944262742e53879e27ac9e1dcc585e35c45ed1dc35572d456ba01aa7b67c3414232494142c20605ec94709088c209015c4898a42045e18400aecd9130e544e184002ece9b8a8b632283e2803c796244c939376273938b3f9182e43ba721183fb911288ff1ce798284ef9c729e18e1e2313948bec3394c8e11a81c24dfd98c70d9fc94c379bb112e5b95b161013644b9f902c5a94e6e0303b64d0817db16ba9294238ee00ac021a1539b73311c12623ce6e60b27578ccba0bed0c5784c4e4c0c872587c372a385cd63884c515c31be798c0b8e09c9940491498aabe49c9b904c51601481c9312561427a9942c965b62ebae862ebe2a68b2851a8a0a28b2953bab8e9627369d1420515446ebad8b64d054b74443578134e4c8181e2742382ae51eeee2e45c90afdd22fa617d32aca0a89151211ca944429d5a6244c4c2075442629b6dea294548dea128e290994140d40828b23b2bc6871712f39a2b8bab435d72e2eed27180540394cabb6a8c690230a0c220d8383c2e1b44099a234a02b39920d0e4b49d59eb2c2844a59c101d9bc9d2855c5d539375ee84ebe715abc683955114247b449b9094257641b22e2380f924207c565bae1e3e22f4e6c378a70ae17df9cf84aa99294520ac9758a92a523eaa4cd65db729e389d4c505ccea54aa9552945b472955c2bd429ca4d968e0865c5490a0c74513a2d3a84d075900ca3630adde67af1514a959c8bde5c5a4a3f5c72885a0b14aaeb6c6cdc75f8682e4ea753149729474b7321840ea565089d1657898b192d5c6871e5cc68a9428bab8483abb4a1b4cca009974c8cd28c53957c0be98242a15059665110b76df36deb98d83627b6263ad031d135f1f282738a42d45b8e7acb4ce4b09480b8c0f8064513ae2d36284a279fa1524a9576d09ddca506e9a5344325277440f795522517a2942a6d2eae44e5880312850372f2d2290a1514165412d1cc0c9528418204091224488d248e83d142c94ba51b2a74250ecb1525202f59945425d722cb165ab878f1224a2fe12a212d51da3121e1e0da1a07242e07290b0724498babe43741e8362ff58c125c154a5b89e360385329e70859b2dc4081e3361f1c81c50747f4c007475001a493e10bb88201493180f8cd0eba195ee38e330367a689192a34b849896e2d112343a6460ca7e1260af40e319cdb5054361714150e08aa0aa7e2505c0d1c193132dce4362e23c365626464c8c839b5aae433b2a0aa7040382dadea969191c32575aa94a5779462702e19385c5277ca1443864c8d19a6d229c7e6031d0c279a69829b99320345a924030d8d93175769c6899929a514374385060e11a704171a7088562e6eca35d1f84c13251ae77cc6899929353433546c9b8dcd56ba1142131f25a7d2415895525c1057c955723591b9f94127d340e84a7e3ad580b273c36b7ce886d7d4f88d9c52ce500d7ec36fe43cb9e135e440d98911c4c5d5f80d270ae22272259628fd80e1363887aa12a4f42386732ea487265036e0d0f806e3c589669a082204460e0e37706e94fcc66bf01a9c1ba59c1b3fd4f80d5f5283dff80dafa901e7064e0d0eaa03a514876aa294e2504c348b3351096252820372c339140ac5255141d5e050e92188063a0ed5440dcf28d70c9ca33a40830de71cc50467e3338ed240ef60e3dc4c13311e84064e0d1b35bce434d000a3060d354a35336c6cd030d3c44c13346c6cd030438d19336ad8d8a081069b276a7c861aa7513323088d49868c1c27db174432706e36d0999ca673184e8303c5558281e2808bd31203e35c16130e1cd79d6c6040e686085dc965ba534e11510cb9b80c5ec4c963382aa7081797c1512eb3ddf8e1e4311c8893c7c801c2c5517873c538e785290ab7a5591c91f3a0e3b6e4984c318e42c5981cc6e42893f7c0714938a59713924ce3406493749ac198999999999999114d45332e830c3ee325199443d9e1bc3920308ef2211847c170a59ca11a8771989c2730507664500e5345e9c7e944c34f369cc64d584c3549382fbe790f2513161a3438262ca55416a6241a3082a4dcf4a0231224a5c669f01aaff1225039373847b98ddb7829a708989c1b5cce8d1f6c1ce54b6c50bea4a6c66b72aa205243a5943a79a9868a669dba2494141c10183f75326460a9a1a2c4838ea84b72956aa8e080c0c040e254279f314326a76b9260207139449c16a28ec60c381c0c2233b84c0ce7445d928cbfbcd4e0a0b84a3568b80c0def819b0187064c0d0c4e4d0e87855395905c307c860c2213961957378303c363e06c527236a42d4a2945840e95e43293d4753636251848441b0c24170c120c2418a49a18278241828144844a4225698182794125a1925e3822744435495d854a475493942404ee492ea54e47262c594a3f4a2f38642975326551fac17992ebb4856b564a9d5ec452eaf4522a954a3754e85e9c7bd9904aa9d316a5943a71a746fd50da41e5a06e96d06d2520286f189c99920af5827323848e0806e925c70585eaba524d92094be9c78b277157b8883a534c151d110c120c52e947124cc04c29fdb8513ac12011c174000669862be1dc044186a8b3eca043d9c092e43a113d918253a14e5e93a445894694d28f1b2514514d92ebe42f2527e272505b14ee74229a71895b6c4a314694a0702f375e70c1c201d976fa250ba7dafc458b6bcbd22e3336924e377eb0e1337cc8c68c9c214ee6b4256d7e4384cec4040c93121ae8367ff19817295164948b468d6fce6591512e1aba35e31c127a871abe350744c696a384ab0667062fe1b8b868c031426d6e6363b2e1b628a54edca97b4bab4ece995c3538dc169da281638472cd90c365e9d4c965e048e1b4f48e9333c088283b325c869b0187cb42038e11ca6593c369d1a993cb986c70382d9a753a39e784d639cd701a384f20a17666784d0e97e5c42535cb756384ee0443061964f0120e1187e566035dc94f1d0c37c580812ac12002c329c1c58812941826981cc898fc460859e8665cdecde1cc70eed29dcbe42ab96e6ad0b58b977eb8985c870fa219213139352e1797e92587339db65045072f53925ea8c821e29236e71cca8ecb9673e30793733e64722ee74914a61cd4d08c9bdc94f3c4e4333736e8aed0716e9a223345e947bb0c14ae928c14a617177fc11284d34946464606e766039d8b13bd547932e5e43138505cdbcba94f2f59e0bc5c514abd6039bd54e19270701002e71ce72693e948e987c94d28940b8753729d70da7583838e68e626075ab8e478079552dc02b498895995bc942afd184311ae1b24742eee330e65e7e59473e307199ff121199fc97912c5c99fe40ce53c91c981b263c2d2b938e735a5944b4ee73720e860728c702eeee2f2e28293e374429d4e279759a9861908ba6be29ce370724431f550fae1d26466e448e9e5a4a3072fb970701fedada53443812b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb9c1e2068b1b2c6eb0b8c1e2068b1b2c6eb0b8c1e2068b1b2c8e707385152b56ac58b162c58a152b56ac58b162c58a152b56ac58b162c58a152b56ac5829c97407dd10a16b6f1e6a24b938992a64a8c850d12cce6f88d0d9b8d14129c60c2a382031a890498a219314432629864c528c18fe22f3f2f2f2528a913423890a0e08979494258b16a21949584e319238153723892846928b93499a91342329694612a7e272886624b938ef1a495b89c31283ae944394616e3cb0422ac116979b1874442287e5a60339a2705b38184ee3e28292e19b0c2f2f3164a0b8c0e1b6f8c9a55d2ea6929f648081d3a1545b3614ca73a06670b69c19207439a2a8c68072140704c66de0c4c00092b9f141f7e2a6ada41a831125282e9c4b0e641a48d70512175818508593c941c5c8109313e328183ec4b86662fc0546015e4c4a2cc1449f4e2e3088ccc89c4e2ea7189d0c9a538cee743a9d6464e0d0c4f02e46c965885921f112835482412406c6f4836e85544a41e1c28a18d38c69850417e3a7182019574c4e0c8e8b8be3a2f423c60b33ce6d51fa3133136306870aaecd61b4e0dadac509aecd5f38174785ac5c7fac4df2f51a0206d8bc5fc5d2a8d2577e1cfea5f8c3577e1c560b7bd5c019d2b04ef0953195e54a5f6f345fbc7f1f885aa6e2ccd72229027fc653ed63d6b5e4bcb48e072de4bc34b779f2e8de7ee0210abe5eede6fa3ae41c75fe6f86e9e06a6946ddfda952e4bcb45ab65a405ff8347baf857da618f64cc4abe4c13aa928e2d28a25595e10c7e8d1dd0e170c08a9811027bce51b1072d4dd13c0e9070889d13895c6789ad6ed6044eff076b0c46a2f35aa3fc3d3c8acd502e9fd70be1191ce2248c297d53954bf680e3dbe1ff6d4c2a7b5705625b9be906b004b188010fd0abfacbdc06b637f3f16d6c741800c89e2e4a985f3938ce0d12bac8f811ca1035265e5afcfb6a6bad34105edad6b635eadce97cd8c1de320823aa6abf0a7e779ffe3d1a3fcdcb3d9bf888a347f9a7b31ebe38fd7c62af5a739ae0ffef58ced288a4f733c7d754beb7f671eed8dd118cdb6867ffd8de64c145dee39161d9796666bd191d2c3bf1f525c2d8884a709febeda9fafd26c2daaa563eaa1c72c129e26ee367b8f7b2a519c9ea7e31db84c79f824f9b04bf18f34bb77e9245df57d1efe2ae531eb3f74e0e13cbe688a30ff59ed7d700f93f366f7a73f1bc29fa738ceeab376df8848f7fc5b95fc2deb0b857f3f8bb4c88bb05995bc08a33ed9fe549af1f7d4323912b97606d6f949b2ad75f2e070ee544b33697f421bab948575741461048f583a72e898d101828e0eba4b32e81cc1d7cb475f299d31b7f98848778f2296514cb35822c1f7e90be1fcb23b876a319aed0f6e27ddad43771e108d133e3845f26fed0e858fadc813f684aef0b35d12be8f87316c52a3397b987fb6469ec572c63efc4ac7fbf943c7a4f8b31fe9256bb094c51efeb5197b77c6dc62c7eec92ab532ebf8b35de21e8e4c3d467d35c37326ce32832ef7b0cf9fe139cbf68722f96c97d4c43b89583b848f04c9aabd4c382ed810b4b2c10991e480841c50900313eda9527ef458957277daff18a996e2199e46c6cf3eb59b2b91eede418e1ee47822c712f87a3a16b75ad7be728e592bdb0ae6f001da23932ea932faf78dac5097a33b4856a908a3423356dda9aaf0707dd2563a6fcf0a72e8ee19bca0bb71ba7b04dd1da5bb9417f87af975f02b7c1bbe911d6162aab5d8fdeb8b9e676d8af78d80bcba52479a478ff0ab8c0aa5bcdf88e6f9835d95ce194f6d8a9f045f4f07bc983582473a2378a4e3031604880e1f03d009f23ce6fb781d42203c62417ae8f0c1baff1ac1a36a297ee18875388e747b2bacb4c857def2fbb8bc4f9642d81526094357c8e30a5f001ee86e01dc04804a7777901fdf4f1168c59def9be169e4f3d5f7799d2e4ff5630748c95a4e61eadfe7d36755566b53fc90f523cd4147138927ca2ac5fe342b8ad363762c477a34c798f5547dd153a5bc1c9c478fcf8b66feaecde02c22abb4fe8ce62b5cce86dcc3f4e8597fc94abf276b431f5867c6959622e93c7ab8acd2300c3f0ca7d78e2cf978ee78a18fabf645fea91eac539c3ba9987d2228fe88a0d8c81fdb19cdc7cf549cd5d24cc3707a9d7e6d0cd31a88274c55fba294d77e96e73886e2cf3cd7d28e329b7d7527163f743c67e444e29e3fcef627db9f1761b32a11c9b2878ef783ec4f5895d48eec0d8a892f647f5eafd7ab468aa11d5ff87a3a00a80000aa177e069fc47fa9fb9316c45ea95f9bc137f2e931ebb32cab2f0a0d816ff47a15cda7b55ae19318fc253b45f3993c58edcf7dd8f8e32b3ffecfd6e8b1154171624bda4bbedec85e929c98863648d11da4bb277063047cbd114f1a3863ac6abd7ed1cce25ca2530bc3597b7a642f894b3bd6aaadf3258ab4e873fd31834ff4377cb096b6d6f9aa1dd94b7637b79960daa5698ad084a6294296a629c2154d530424d4f044142df8aae1eb6e2cd2993f7cfdc7ba1a8e74db58adc147773f586d7de55a5a109c35d88416fcf0c696eec6b52f7a554b317efcfaa4be5f742ded158bd91b3aa896e6d7e70945e3ee9ed1dd0d251ae7faf7679576378eba2b8dddf8fa55134972763782669ee1cc3f7637821041c51bdeddafbfd175b59d0d2f1a3fcdb4e4d3d970a2b391447787af6c45dcd920a2bb6f7467e3e5ad901ad94bfacc33f45c92957a3877f0f5583a5807cf3b49911ce92bdb701689967c812f8a16ecee1bbaa3c18a760f7f86a7883dbfd46c8eba3bdf37aa1624c92f86699e18bf0d3d87a0cb2a7d983f59cb5eabd3f125dd5e708ebec37734471c5c88ab8ee688838e9394481f741d77f2e1eb6159a5b3fcba4fd2fc63dba0bb0fd09dcd4c77e3dbc3fbe1e960fdb5e02bacf376b71041749b82d8907457a336bede2cd33b7530695529d2da9f566b87d1fdf002fdabd51ac1a3f0430b56223da15025428e60935c5f084978278d5452249c3be1dc11e92c82f1836029d4ddb3ee686c81818189093f673abe07e13f1b82818189c9f58d887818094f934a5d56e9686fccc3774c3d08094f93fc7f63229d46d3f3d1d7e9f845586943b75874b9f77de1b5e05fbf6ff48ebfcf2735f2f0bd268ab3ac73acfd2cbb48732d9d9c636d66ecf865610973f7a3397af8e13f78f4201d67ad8558b437570b7a09e2ea72afbe1195f9f44a737dec0f734b276d3aa6fe97fa97373ba62e5a0bab328abd96e9b5f492ac998cce7c7a581f7f7d3c41afd443c7d477f86a3d4faf54f630c7e21cafad7e6dec07f7f0f899ba0e3d74d0e1c7fd3cffcadc56a7d92b73fc6389f1f467e2de07f4f95704f44d7f98675c8efeb796c9117f9e20f5fab3ec2b71964e1e3f48c34addd2b28f7bb9b49ef11433be34e62fab74b4e0c3c26bbd526755ab13facc3b83fc3ef930af89d57e9eb2bf32d9f4710f835e292ef3cc421ed617b24323d8249c3b471f561fa070ee643ad223f78d80badbeb8e26d5ed2b52a4b348973ae0a39b63c279347473acce8aeef616129e26ac20243c4d5c5629c60fda1bd4dd01e82e11b1d1bd85217c27be43f81997448ee70eb54c8eef0febee9b6e0e08fda3bb0ed5edc92a25497b43af89b9be48b17b5ea9fb1361bd55801f9f9f242e26dd3d761723020d030313e3e5174518189818950e0be7fa468f411bb22a9da38ea59e87411beae8b43099f32c35040ec2479b71c903030313d3c5f0d1dd1e4871a5371fbdd7298a13f487799de08bb03903f324310d739df44e23ff6a1d573a73b53ca23879bc8f66ebe77f6dec61feedf01c1c7ffe77922c717e98ebfcd1319d0db957044e98e3214c67d92bf5fcd8a7ff7ddafd59fe1913f78a402bc262d65d8e671015a751f5c92f846b7522b1766826a346ac1d0a3f2c45b0fad4c2f95774bd085625a10814fe8360891dd7264d9c2e8a94e6efb4af3e5d56e90c97a45b8c63d6efc3c6b28675fa2afcb09616e6987e7d99df277d622afacff26682f0f39d19fbd3bcce5976ff6b479f654a73b2f4b0be671c7582fe3497555acb4bfafd1c9bdb94eefeba43f13416b6982dcd8553778bddcdb03aac5f044e58a533708eaccf33631dfc4634d3915e327c5bc127f1eb28cb867c6468ba6b300f1f7f321aab96e7737f5c4ef061ee3fcb1eb39eef241d530f62912378f4e5974e5eb814cbb1046388d0dd367417b3822e86ec62e8f7b991bf6c5e9bb1e7faf796a06323ff3eaf74ce405605724ff59e23cf6474cce13390ce6829c7e2acf773a58eff4e11fcd07d025464a1890d3c015f4fa7d5c2d5525c3f1f7dabf51a3fe31aee6050d0edaddab57986758e1ece9dfb46f6f52035baffaf113c0aeb93b8c4a4bde158e2bfa16867f8ef2cd726f8e12b83f466fcf725ceb2d2d7d11c5fe4081ebd3ecf902c8f869850fcf50b003e295404fe8c474747871ee0f40102d1d9c163ea00d203f411f6e8e123888e07c2fa3c6fc6b012ebe05cda22f067a04ea6b2568ba4337ced2c97f395af25c912b37e9c37d66afd48732def4b17daaf8d5d191ddd563fa2034fc02f82b57ce5c7dd6def13e135987f488d68e8367b26c7cf797677f72904ddfdd3dd8bd88daf773f539d07a988ff5ad0003e4644718219dbf195e7ebd2d249019eace5972582e2d7cb26c63fbe8ee698eb5392827fef87f5f1b5456a775290c6be3eacbb89bc8ee678df88ca6e77f7f4081e75370ffeb0bb77321da9f8ea6e17fe8f75770f04c85f04d2dcdd43707e8c679ec9e8d35ef77534c7eee621a4afdafdd249770be91d5ab82aa996e2fb4b1e462f8861a51039d229f21cd1b03e49baf20bdd17c33a8dbc102e45f29642612d639fa45a9a4bf08f88d4ca1d59a5a1688d7c9e34d3ea23ab73061e11b9f65e2249c2fa20fe9e4a65f402ddf9228fac526c459ef033f920e8c25f3af924f54920f16b9d331edaff90e33592c1793f86ebbc438fab25f127a9dd2f7f083f5f4b7e3c7af80e41ca2068d08180090f6f87c783f5e204f10cfaa1030f234354292123d8640850abd56a8de0d1b5f71219c12641cad0e703f4033a3c90e401a41e42085fadb258e29a9831f51cbe077878a0460770d001b17b08215621ad962ca7cdab3b6d073c0e8c8103528034cfd1e672d69f0d71c0080e040d21c42a0821bc3a853850da00141b68d2dea7f255e8f319cd5919fac376f84471f27c1ba8a1812d3d84102b1768e0eba9811a98d802131d58e13963e24806ba30820c0865a03100457b5606b397ac6f54ef1b59992371af26c228c696f49f655cdafbb23a43552eadcd1ecebf9ef2d21bffd6445c5a8a69f58711c1c0033a0c34e99e4e9260e006064cdd3d84102b3c69ae0b30e10253f41042e472d22e90800bfc2cb1a58710c27b7c5673a47d1dadc59316ba96c8c1122358e248af42ea4108e189e2046d7d7dd1ccdfcce10ceb5c8286ce0255ba8710621584102e0b4cc002b8bb957467011b2a60c5104278487d1584105e2ead87d7fa2af44933f5556dd6c2f7e93330cf31f40a90dd8d597f2b6024d7c715e8308e8e0254bcf0f35ff21bea2870d4f4fb7c880241dddeb5310a787b147851428aee8e59af4d9adbbac293a6c4874b3ccb943aa63bba53c2bbbd5a9da35b3bd44d204b7b0f4e008a090c757f2c56c2c049628f592f02a7e8139373763fc83d95acd25cdaeb36749bbdf768caeddf9f0d75b74d7713587577507712c8c2535df2887a32ef53feb3a1214386a852438688e2e469b586e09a90e3e94342848c6093e7d1a3cc74a447866021477667889023bb93f1874c92a8411260123f10d802010f40c00210e8a183c04c777bd673fc68718e176b628827ad9623db9ac33115cb18c62eefc339da0a7afe59c6d452d8677fbc9a284e9aef24af7d911c6578fc6698ba579717fe4a9cfe009cee06eace01561c80030790ed3dad26e63bebbc2fab56745b9374f70fdd215d00a9eceea2ee9062904a0d80a201430de8babdc77306de9244c2d364c5fa6cc7bf2caf3691780dcc45985ecff3615e9b238df97cb54a96bef2907000123f90481dd1832352d0ddb0ee8e3822a50bdd0d7627c502527ca4d4d0dd4dba63800eba7ba83b06901d037c58c016cf6b936cb1bcffd824ebb33c1e3d62d65ddefa3e6779a91d4d6cf64fa5f2bc94af523c9a7cfe301745cac43d9c8fbef565fc6158a7c72c39413cbde2ff55f8b52cf17fccaf8d7de367fafa8f7d31fbe10f53ff2f12de49bb16fb0218d02d00c90286747792ee14b0457bf8fb90f034f99ce5618a84a789c7ec4c56da3bcb3e41904e51b4f98888028c1490f266209dd197d579a7ecafe3d26b36fbf422ec8aa282281880324577b3ba8b42bb7b4977516674b717565f21e169d2fa3e6779d9da2448bcf57dcef25433cf592a36b1d0105590d25741ca949087d5e6984bfb23cda2b5b017a637cf232da3c596d147b48cae62092da3655a46f368197d04080d1c8eb36d465459552107dd1591d4b53a63311afa0cff6beddaf1c769450be2d26b30ff6beb9643f796a366cc79868f29f84cba3755f796da0240831e9e5069b22cb25644d26d84d63d4935bedeebe9cd09e0e2e9cde3fc9bb13fbdb97bc3b109600b80c9012624d3024c504c46984a5997001b9dee36d25d00223480aff779caa8d1acaa1411473c979688547713f152fba29664b3afbc35da1bab51d1ddb45a086a11f0969dd17c85af97c919ce570d3cc2e2884a9e33daab4ef088088d0a2f0f874fcbdddec2a288319e22cffda07b89140111194a52cb4646f47ef8c25314e70bcfd70ccc1306623aea80988e47dd953d5867067eae657a27a9e3795e7f3c5f247d87f0efcb64f4e637a2b87eec439f65aa2b53ddde42fd404a151828d0a091c680d4dd4d33c593190c0f2b8200b1c1f2c50d9e69e3ebe197acd2abf3a5930f5fe01b75a99666bb9400878b8e0b134f56eda5f98f56c83d0c2bf10cacf3eeb82841c91204adc75ee1e3d2064e86890baad40b539cee0da77bf32e5e8072693f53b7d857199706e8de00d0bdd9b0dd746f35740145778574f787b6fea5fd0f086ea562a5feb0eaa1ad2e83cec9146f5e1bfb5aadf02b0de843fbf309e16a29acf0d9d2dd220c46eb86640322a75af02fe9a19de51fbd06db3250e204d0bd5de9ee21ba236b3a0b58580290eecec21ed13a03db8d2e6458509510131f3b0f423ca4a3b7f014613397634d0dcad6deaed6cc8c58c629ba7b06e6397ac651371bdd1b0ddd9b4df756a37b9ba17ba3d1bdd56c32ba379aeeadebde62746f32746f30bab799ee4d6683e9de50dddb4bf7e6d2bd9d36ae7b2b756f5b7fd1dd63e86e3174b717dd1d86ee0643777fc10bdddd85ee3675218641c4d2dfe734039df844f8b8d54a42ca37f30c5faffcf8eb360280ee8aa8b4f7b794556a79788a96e8199edd423a9c3f73b207d01535be1eae4af21caf2d42fba389c4c39e692d3dd52a958ad91cdc8738419fd73af6faa41dfac1e2b43f31a05c02e1a7d7669ffb950694ed4fa596fc910ed1ec91a38924fc6bf38495988a349742374ff2935425a150c6f648c6654ff8341b5622310fc46ebe073e4713493d72349178d5d2f0bd267ab63fee79e47f38165d4bcb5f75783a3c1e462f14fe387fdc0bebea71f853087bb5ee628bc810d08f7b35b15afc7d3e1d3f2e71edce0f2996552b4eff3ec72b1c8bd90fe7cdf8470be672c7bdef2bed018a701f3244c8ccb3c75737c8574384b45a31f185848c7426444e24ce83ffb559c8dd13e0ad96fb8b941c2d68ebf77d44fc06f7aacd5824c779f4feb35c624c1d675a4b1767b619d7320d69e984e6fa14a4b15889abcf1b51d145fefbf06219fe0c14922d2132bf071781f6c8ccb3e7d60f7d669e3dafee758517145e56ac56defafc17ac36dd9dbaa1c6eceee5a36b5ff4122768c56e09b40310f084ce6b048f5aad6ac7d182affbf4de0943400d773cc493ee577e6c44c5f922ff8b445146f18ed70bcf17d8322104d0e5080b9fde8c613a412c0173da6862ecf4c065e90ea95d725f14278f4552cb54a45949cf0836e119c126414744e62d5df3962e215710b6b1ea2384a5bbaf1ca1bbb1e8ee2b806084eeb652842add4d842174d72ebe59a746ba78c407ebe4a9f6a7565d07b0e9c6c100ddbd1d40064679b05a808205aad0dddb1411982068c60cac00d2dd1b012a100490120ef04015ddbd41c00a0050dd9310147477e90811024401023820e085eee6684ca00a1632c0441556badb650317d8b25dd11a430fddbd69d105059e7891012800e96e1307be170dcc8040d484eedeae80f1d881101170b2846e5c7b1f8460cc3c4377eed42449b6e2fcdb0d44c7640adabc3c76783a5895662f6c86e78c8912d967781a316d32587413e1a43d904577c7ba5bd28489a93dd0edcf922aa1053dd7f7960ddddd80ee66d2dd4f04c00f2df812024c07a1bb4d40e816c5f24714278f0e0d8c18c8d8ce7aa340b5747be243774349b4cb16c057b58cb991fda985f367d3adcccbde6eccda4bba7b6d8a7fb726422ee8849ad03d679e3d9d900fdd5de9944dc745778e33b03ecc6b79bdb435df61c887f8d11c439f57922a49729004a9bb55a9e9d8c8552977cf3fcf9166fc6e731257921949ba083f04e9c6e2a4b97ee9e4b1d77f5a7e980f092dbd1f349623ad1489900b564a84ee7e7517a44477ebe82e280b0d561b0e91e3cc38ba0bfafa06f50479bbafbcf5aa95b0560b2be92eada0bb11d01d900ea02b0065d101c90048054014f0167e2a8a936645f163bef216be31f7d2d62f9b24397fd6fad102e3eb7d68ab0ecf070f4f070b16b29ede8caf87040ced79d6bee8958fbeb65a488a80448af696e7e9aa55ed8b52cd6da0bbbf3b2441bafb024b74ab523c96ec58a263c9081ed119f45fa45aea614cd20c4e72a4fe5424c7f934cf25cc57df57ad87e458c2bc965fe62b2be4de47d26cb1381d3f154972fa7dfa335cfad3fcc14a71b63ffe7d9fefa0cac177f01c9e83ffc75e34e53c3849f32bbfb8838aa439058a137cf1e09e5fbcb688ebe8f85f5b6574957179bfef73cf7f96a9d760be529134bbad290f9f088a5935f14e918eb5bcac5ced8d7d3f9fcfece31e2e417182532c657feb574bd22cced9cc30eb36fbf71f7b7d46dfe797626b73489a2f35caf1cf25395af01327d097a9588efe1f7397fb00c0c6aacf0fed69ff63848702d0a0004bb4633164a85b9c3853b1c47f49ebe41c5f31cf88d6c4cf93863f8ef4fb1cd7e93f5ad0e622ee65f0efb520ce437c471349ab158457fca23fec431afea519cf23eeb9ab7c55cbb496e368c154f84734e62b8a695fc4da2125d9fee0d0274f0a5a8c5df627fc24d9fe74d1dd39baeb9942ed7d087b42b0ce12631f71663b8479f45012b3f606656c8dfc486fd0cb6650b6a25058ed0e4f488ed7c8b5e18bb089690fed7fc46969123c8fccf034125a1ea10f2d4f7ea190f6e09e0fe9c5e11351bb6f64414c7b669e3de17c23f783f0bf582629ba73bc9f271372bc46669e3dd5d22598878ae47f917cf43faefb8fe72ca8d26c4ff84a92643c8ff02809690fcdfe7c9e59485669aed3e8c54fd283c3f9464027489c8c3d19cf23a1cf0836f9d814aa7f048ba28b8950aea5e5897d9217497a87e695914abafbd45d0f2ae86e55773d207183e7e98ec7c778ce9b8f88fc2df3ac322a84ff86a1ab24127e55f2b2f78978555bc7be9302fa9ce591a5e792f46b551f0f17e2a90f7bd73a0064d000a06de8820d36a0b1e1c8866b430ddd1d035ae5c039f0d10c0a4a017939fc46a6862b6af0410db8061d35bcdcc0e2c6076ec4686ef8d0d8f0c2091b1cb0c143c316342c4143830f5fa0b1f981cd91cd0d3435aa34eec1527d3b82be948b7446abd5c9232805f4b9efc4807a38ebf395b752cec3593c825e3647fa97dc11f47d8c95aad4773e1e419e83eff01c7ce7969f0fe7810757a586f0e8510a69b562f6f585f36fabf5b239a991f3b8f7790e5e98c37fac264eb0c4d5d20b9bb1796dfd988f17d639c3b4d298db5c83d5c831c3173433d080668618ccf03433cca0a165c9e71ffdd8f497dd390361a5907bd562ea93e6d1a0c18486860f355da0a909024d8d12ddbdd3e3397c2eab34e8fb907c1ee439f837630032b2d0c888a2bb659a46860864fc74f7a96964f8d0c8b8c10a342da001010d0d066868461a9bae0add1234dd0368ba9d18588881849aa689b1039a18962606101a19a44023030fbe5aa77d0d45bb6306cef76b634648f01784f3a70a72577da63705f4f9ea5321d9e971d61744fbeadf8f2a7c168b8559a168fd43f2e3397810921b6ef0c05ac3f9656219fb3bc1af565dde101ffe82f09fe55c5a07a9cc8ab259e768c4fafc67437e834771fe7aae12b27c856288fd7fa4e183b4faef78a57dfd9ce591748603d7660debe3af4d1994a0984686264d9d46061ddd5e28838d4703438b07c38aa698d2c060a2bb457068884dd3c00062c88f1649ab3544b37506023309a099b98146e68a0868642a4023b343230323860a9a981178de971fbf66feaaf6f32f9ab9d5fa3c6653be63547daa1db02fbf5005fa52eef37d5f0de673cef09c91d5d23ca783b44ed27dee93e11759a34a6595ca2a8d09a289f15206a3a56960a4e876d1c090210d8ce3681a9496f6b0eaaf1d535eab13c54437100d2a287fcd572e1a54d79ef86077fbd0342f54744fdafdb0962e9a97284dfb18cd4b93f6ae751e2fa86e98671c7507a771a16287d246c154a443342e41de8cc6c506e6299d4c1268c810212607d0987a684c291ad30b0d4785ee66d2345c0568b849c3cd74125f793256b5bea2292580a6a4034de98566eb01cd7644b3e1f0d5fe783c40a4803c9282ace93e5f2ce10b157c1181ee0b295f00f9c2c462a9c4f00031b8bcf8c215bc188217485ee8e0850d2f640843953070200c621870008311c020050c3f80810730b87c61055f08e20b34b60c610b145b685b6ef08210bcc0022fc0bc00c30bdd85157421d68556175e74f1042ec52067a9bebf36e3cf6334e57835441042eead9d1e67798e1c9ce68f51d171a675357ec62d96c7f23eef6801e9f838cb5309c9ac9802fa523e03ef7cecb53b2b157a917504041029a02f6605e0e2acc11cf4fc139a650bf3d50ae3495ecbaa5689b3bc4f258a93c77370203c07175a8914d36a81dcfb767c5e135f9c46b474e2cdbbfabec7655853fefd6885bedcfab29dd15c9572dc12c5077ddcc31f2e45d257f4f396f7bdbe1dcef2cf6336463d633a7d8890fa339a10f097cc6b6dfebfb1d1de98107e71c1052e9a206b19bf382b2de271d1c4662e7070010bb6a2e7d2ae7209e30213cd85a3e742eab790e4a9301dfddad816a6747bdd16a2587bb7d083a70a539326b4854e2787eeb480c5b53065470bb3c62e33722d04e9a6332d5ba61629b440c0bab539a47dfd529c46add6d0ff8dbd685fb380832ce42cec6c81050d6081070b37ae60852b28e10a0fb8428f2d94b0c5115bf4f40dee5ec697621cf77139ffbaeacb9b53fe4694fc2f72b7d96bf78dde558fc5194be13973519caff9a2b52cec79607e5fbd6cdeafd55983917fc9d5cffbb095eafb927e5efffe17d5895f2fc2a67bf5b7e8aca0457b4340404978bc07614aacb084155c560052052ddacb25cc595ef8344661e02d2d3e7a3183f38808158e40051750c1082ae0c852258b07b20865e92960610a495358620a760a35a460450a2590024c0a3851d8a2db1b777adc56b7b8522067b9e3e9b549f3ef0b6b29ce8ccb9e24df8bf6f5556dab45fb9f0ae4d86667b97bdfab4ef0f539cbbd95c42bfda8c6ecf47196f7427e9fb42b718234d35bcaeeec719677ed0ac7fdbc28241105044401480b2fbc1bc431cf3ccf5b23cd0118c0008a3cdb3a87f8be207e9c425a44408b1f2d60a040032818412189b5f7734c555fcaffae9e66c56b9de6e3d54452f57d292f31a6dee7619dffb7c837bd24b85a3cff82988eff37569f087b63afff58486ba238c3214f20bdfc582cef136c54f8b14e0a0b39c18abed40964f8f9c50ff187ee851f3ac126294bbb92a4486ad29d645304d2a2266069c294226ef390ee9af035a107af09364cc072951c49a2e4081398604290f7e1a389e4638277b635c912b27c18c9d144f2fd2cc18af696d04477376d094dba9b2e41c7126e1653b288d2dd338ba06e2f0bf169cc6b5324310d9550a53d8ca9387ef6518212ddedd9ac84991252fd4a8091042ada0b1fe6d78a4f1bffc3247cf4e6af799893a0a35b86842dddedc9c292c8436b656e6b2d631c48a0d29e2ae5a1572468c0e637a20d19e2e3ab212131a0f1b38f10f0978494e7c5f20ea989e21c224e6cc921437c84601131161ddd5eb51e7eb64657a2f0832b2ab842b637946dbdefe1f04e0babf68a91ee6e91c8159bf17dfcef39c2963e8214dd4710bb08a43e1cc13b820b1653747b5eccaea8af7cf5d54471be3e7f6279736961d37f0916140beff6feed57af268a2e4be4f6475be968abeb8a2c5c31c5cb8ff1d74c9978d888e6150cd39e2b1a70858ef6fed25ca963ec5466842c2ef762e2e38795424658c2abcdaf85a1cb083eac70e1857f2979f44ebf0773fdf1f54654f63d58430febfc4bf35f5f4dc72e2b505869d2edd1ac28fa0c3facef78ceacafa65bb9a15b2caff7f8f0b85091201fa77d15af92227cd143f091ddc113fc2545004011ba0a145586aa7044b88208503a2218f13e58895fe1cf6fc563470e0f0ae7675ce9a762d5d04b5bcb60696be1b36a89ebc77cbc4eefaf37d6aa0dcbc7a4873f84150c61034358c010123004030cc1c653a5f07cf9b45a439e03136779aa9d1eff0ae42c0f87f36ff8cef2543b5240cef25ed9da242f7fd80b6114828d1d04a116041c3e1eff592e63f7692e8a1fce71f585ef3303f3dcf97e96ebf4951d720f8f25782958a97740800284cfcb6479338e6a7155e2fd40053f28e20702f001161f28c007a00f6e5891d41e8f8a2705f41511c5c9f378eeb45a93acc170ca3df04e4c633e9eca739d19d3947fad5ca7675b453a45d15ed1ce68a3cdd38a29f6c78a285f14be1541dde3e3e18f876b5fe423758cc3888aef430fb2f84ab33de0a107347890041e4cc103920742ba1d74b1832a7ae5318bf3bbbc0fd7bee85f680734e8400b3a78810e22a0031d74d0e5a08a1c7c0e3a1c24e12005dd5fed7df8bc1552af7d510b7fa69709acc759dfeac3b5f7211ffdcfe7ab2f0614fad0a1cf5b389c9f04d6e32c4f95c2217dd5bea8d5c2b5f7a1d51ac2617df243cfd8824fd6543b789ce5a9667866ec54258af6ce94acd2e918478f8f1b3dec33f8b1d8ab70aaf645b52ace213ba365b17c3d0e52dddd0db2dc8005dd0d8ebabd59a6b4af37e8a1bd9a98c11bf8a4b9a85479d98bd4885ef2f31427889f878a1262aed6e69528529951493595eeae36c0523bf2309c8e147eb6410f8ce3c95a9ee468c14a5d3f7694435aada1199e464471f20c191212033a726477447182add6500d64d0a00a1a34d1edd55be6dae7fa63155734ae22a79b411466d08119f4ccc0a6bbbd3c65ef35d5f7a5f0a5d5ba2a4c4dafc190783218c014627081181489814b0ba8f8a8f8018324181801060a80c15077e339cbdfd02b1ffde72c8ffccf594378925e13efe7acf9304a9b247e010a5e007b4190f6fe5d507301ce145e98c20a5330d1ddb83c3a7a219cc2def7cd4f14670bb4d082285a208487abfdee5b16408005cf022444ba6301aa5bc10e562083153859410e5250410a12482184142715e8a0bd5690b3bc96cb592def739617b31e13ab1d59ad20ef13e7df8be7ce37473a3f92cea6bbfd5be632c69a612ac2caa0144c210529e8528094021f29d089228b2882104519054e141c1452402104142e284a2898a27b87cb2a45e22da01ea0212fe613dfcf3fce3bc9d538f10ad3af8867ef13e1a1a5f7491d75d2322e89bebf384a5bab4adc537ddf8f13af8e3e2c6514364e4cc3cf591e8c1ebd18b3d9ff8d48717a6f6459def77d1eb3993aa63458aef3ce5236c37f633ebdd2262984829c1304e104b413f49ca046777baaa0d46332470e2f632b622c8aae1c39dc7b11462b0dfd67f9ab0d3d466976e6abeff31accadf77a615a9588f3ef0c4f23a238c1d90c4f23add6d00ccfd9db58f5c1a1cfd0ac4d60849c7f5d2648b53e13d427c939f30a34054bf7a4b9a64ce9ee764d0992dd92747b9f08561dea9ee0c2135474b7b7e4bb9647142748896470de7cf4459e803d81c3389fe81248e1e50b7e083ed99520fcd18278ce420ad2526848ed8b86d4de0721e02f11450abb1f547b1f7cfc283fb42009923ad3f14990c4892f9cd88213217042891342bcda7d23d5d76a59fa2271ca3f95500ae8f396cdaffcf85527f879ece813fa843c071f81134690c4081630823b821f46e089208b7ba258c6fee6b0beb7c3599e2ae59fe9a5ed70967f3c1fcd3f158ff77d68c12ff621ed3b1150e96e4f044988408a088810c1d74384f80d9f6a470ae873d610217e835774e7f8f78b261211d8747be4fc99631c5e73c19ec90b85c08a982b044d74b76cbe5008749a7042131ee8f66e09827fef87b5745cfb2258894bb7395b9ba426fef567e23972e4c8e11dd1d85fd2070c52d266228fe72ce8f19c9118df1f4b5c2d88efcc339c9748ab35f4ca2569ed7d0d191202fe9221414a21e02f098f3eac43e8e03144a389a8e4efaad7a99e059d424423a2010200431100203020168c478462d9704a89caee1480037ac85c904c9b49b330c729440c41c4100000000010000084410001d4430040b59b41698cd39138229bd43c3125ab1b7187a0399ae379821afb001729652652c303328dabc4df413e69ecb0b89e51127fae4883f5fb04ec9952bd58b11dfde5609c2ecfa7c0162ee9312791709cee7e4ad0e101ce8d81e8474108e19169e85ebd5ac9972f6ae5d8392aee7c27730bc707ee12ad0c876ff670428c7f13f25a64e6b1bffb2ff8ebfca1d9c75c26e23e643e6dfca3cae320781fab8735f630b4bf75fe61907b2c74900fbee792bdc54b827b4c7c82adf64a82f1a595abe05d9be3829c2d4f18269c20ee4974ecd0bddb5a56188a5b194d46896994c9e4f041e98baa91c6b01500afba8b323007336cc45214391eac7808591385b5a906526455ae465445279e2a298dcb020b37dbda388f10d6201b23eed9089ea264c0c422530bc8663a31ef01381b614a9d344bcb8b9568dddf3088fc6779bacd8f1f7bee529ccb2d2ea676ea1da348621d2112ee9dd1dfcbc11c58aa6f6fd00f2f502eff5bd07db3102a04c9c46ae5c765a03b7024630e9c712c4be8fe2dd01a86f4bda6a98bb439d42c3b4b8167e3870955a26153f01c84ea8e0676c8614ab438d2a65f7e7dd4cc4381b07dca81cc6725f13654e688d05049414c9b1e08c8e2779c2cb765d82029b1e2e1a6dc8119886a39c21bc819302c9e588c856db05f91b5aa08925b5393d52423c3ddd3b6a8f903632ca34ac30a655ce7b07e32bbfe84b43943bd11032128014947fdd2f11f7658845ef1fbdd2b427e7cd26c5ad6023255e2d65b37db9fec93e08c4c3ec9554f153952802f0eb316c3132030047880e8f66e39829cd893b4f43f175d2f5934fb03c078332bcf8137fe53e90286252545af6142610ce025d6e9959bdac97e77bab650124b6d51443e55e2ec608371faaeb44ce4741ead369fdbe1656e8e865f35f7af61ff189ad963ae02d4bd99bc5bc6c970f0fb4f22cbc13641cee172597afa3f15b3ca545c667ec432ed2e904ec43493b4b0b010ade5b87ba35e869a5bce7ad27a215c67feab1269d37bd59d4355c8ae2913095d95f89984c77d66cf209fdaaeb92fd966a073540477c1f0996cde4b6703e180cec319d9f834c73fcdd1d0347ea2e709c03f37a8de3af2f82922696117e9b2a9f78697c568c41d05d9c5ac9fe431df029f667d0736e7396edd91bbfd15d60def24406a2f5f136ce4a9b4c2e875ad912b949f4501d428caf180251ceccd1f8d4111543598b451d4564d7d21c7fc64cd4af6c834aac34ee021862f1fcb40a4cca07cefcbdd13a29740df9cebddf185a1a2726cded036952996199763ac01f53a40dd436c728c733709701d99d3a300646058c5ba28bae1d39857d668e775ed2ac3638a61aa1969b28d35731ad6c20502c775ecea9efd4506a70e84aafe64e493b8d17b4c41aeb49377538b615a1476c11edfa329ea5e94991294eefd8770e80b35845f357f87f0589798aa0e63eb84b4ea9203f65591d66ce78d9c9eebae08ff157e9c8ae9e44aaac45f814542385b3eccef02de7c2fc975ca4cf95520b89fd5fa7df3e206519ad821730d00c319cbc0c65086e1554de67a02c4f462e99c968e6cf8cdc683c013ca0498489fccd7b8d6593661638598adf0f2fa729b812c05b34d7589cf4f3bce3898010e08e659e4874a7bf61ee7bda68727c952abfd072e40221c9ce8bf0e749724de524cb08f96fddb6b4e1a9686bc43322da7bcf1591e605f9090de95734edfc9b30816249561d2d11580dfb9d2a3936b2701206fc146d9b60a0f9585031e3f1c1dcff6daa6ef08c199ad26f4e30fb99652f929a076da07ce47b0d000fef0e50f00b20b0986135e25239a5407921f1cafb08921ae9a0cf282889544163877bdb98e668211ea9b8833a827abd1211590b49036b0fcfc5f4caffc13a9faa0e70310b24a036ae97f900ffb5b9d05f178936e67267174125260af13ad0da4d6c70baca51dd0b988268c32f936cc33a488ac9473d5c73a7318adc5be55f58cefadc996bf9c03e72f7ea9f27a209e48cc9d5a97af7426e6482da73acb5c4da8cbd91e4f8ce700686e13c119b73bab30b4c84e3ef79a3d883c501957a56bd0ded52c08bc9cf4b0a7819bce8d75d5c3c5def229560d0c09bcf99188fe0619e63975b67032ffa3fe03c2f267dde6488b33e5f4dfa65474a78165dcd877788c9c30d6d9c27eac92e38838bc48d5560d66dfbe948e1ee313a543cfaa9af3eef17f313f0d36910051713a80e52ad2eadead110a3929da5deedad8214d20a4a49ae9bede14cc43d6360241b44585eb146d64dd47e3b9497612849a5f51122002783dcea407a6bbb9d155587a1639f7515061aa8d12a1888d3228f54507c011dffc6e1823ad15d5b7409ce7d36f6e822464d09bfbfbb7cf925caa68fbb27ec4ecdbec2ed63150d07239527babe0367c36026396fd49f1919204f78802ca55733fb043a4bc76a9b401bdaa660c8457a50876f6357acf3968ffac192ff0fd725490363fb70d5589a6c5681df2ae8bef667f3c7c45f64c0ae08f404e504c3b6028bd4a9a7de4fb0a0b7e52a1af52261f4cab4f66ca740576da9a5d4995fa958e973eed1af75a3a03daf9ee98d8f452eced374c0756a10eaca34d77615037d7b569c97ff820d3201d895ee1a588e49f1d342c3ea83cfdafc1a8422856471433a5c88e8e4bb53125128b99240818ab1330c111869805c67b701cf41bd8ece0a59b134e3749f2b2d06708dfd72e4cf5d9971b9171b77d6e36c3ad2ee2ea127a111fbee1ab7ff751fa3be05f91bd43a0c9aaee47edd80174ca7efa44e192f8eb4327a05d4891437333a4b8e937e73c223b8b97ddacd20049a289a3ccc8f1291698ee6ae89e23267451b8f112836d42b962ea9c31f90e7d1690ee609cc5f8bc90ef2811b8c70cbc3913fd92e24f78d43718950b8550181ea53a5f79a4e81af012a2a2a9a55e3781cd5ff79f118f8ca435ca3d644b27ac5d9d07a68749e2cd84df9d78e6940b622e98bd92269f53a84b8bd91dbf19f3d3db55b18303edfff8d241b14b8bd2631571ba60668066769684f3aa598ef43925f7966498acb0923c1ae60fd3f08b197231421b9373e0a60ec5e5d3d155d32b601655b8e585ef319af6c7d5816c78c043eb88a156051881842574a1121072263163421fff9ca25d221b8ee5baab2468cb04cd688a0bc989e707429ab4232dbfea5614b6fe348e696d79a9d33684f31496891233ad336bd515954c6ad0fbe8355e1262cdd438b8ab79013c642ff1a6c68d617cd6a3453e9b6f1d86d8c24f692adea1eb4deff5dc516a8c9159e81d8ab35f99936b898383a4a18fe9f17fe631caaf9247e77fbdc20be8f81519215fcc82fb97a567d5db9734fd93ae4e3314f4a86b2a77ea32bf5ebdc59a10780ff88ec7dbf126545aa981272106a335769489af2f1f20c2e654dbfaabd60a95cde7b2dcf1c62894b8d16f11716048c9b7832393d54f34e6dbf0952c3e402e6e8b32469fb134221ceb1a2f8ae4749e3a3bce35aaa713369319a7b1beaf36bf975c2c9c85d01999be8d6e9b217f49ac1da655896bbb95f7724770875db02cf144f6f62aa73fa3e5904522de89bf9cbcb8aaadd5cd8d00c1d4ee89ab4d296001e340941a290a77de10d97c41fe90ab1127eac089b6be1a7da138715768d0ce3127212c194086801cb8b28ab3750f62dcf71c9b58b80d6bf13c048d0d8cafaf796332875e8c13bbf406027674e7b4dc17e855749b426aed7622b21158d91b211f11904c5661bb9b21c6dd8d96755900ebb09bd7da6a8d6b41dfbeff9b174117f06cd22594623641540cd86a5f8b635121ea1d8f279b26bb62da52dafa01bc8267e85bb592985269dd12b5324bbb81621008b2904faab1cac18b947511ca9272758ca414737f66fe0f6f67c9afd2e436ffa0d7349bb7ee07f242a0a0a5345cbeecc43d61dc03d1d63340fa0e7591b3da4b23408d7f8068e840b21a08be617ce04adbcb57334a4c90b33a3c8ef4c38f37bae2b309afe12f4c5df8b50388cdefeb33c62897c149c48b735fa80ecfd0074b9e54f1fc67dcd6c49f7a3a22c2c59e1915256ff04d7b79b64857d61a4b8493845b3a8ab905320f4a4f20377e1c6beb27198977d0112ef391ed7d540f748260696e2dcdc6efaf952874ef71c620bad516a43a0bc57173512b09caf1f79a62957cff04d7d9b14d3fce64a51e35aa9b549e1bc4955bc420108d40b7189b43f3ea2f6b4f3dd34e4ed681887216d6e48d51466f460dac63fa82588890b386941c6d846e9d7ae642b6d353a52d104a5190b09120ff43e8eab3125460f1c50247471a269c629679ca6865ddfc50c06ae1ae8c79dd3657986262ded226f9813b6868c46056c1edba61fb71f5585021c59cbd219fac94f9a520b707e165a99607cf493fa3e8d15f4be03b97fea6c3c372cec686f4d1c76cef25ce52d99be7bd07a0174f8817e200091ff33e3fd09e675a52e1727b52f64c04f21a1b4019505f8f12bf85a8ccc8aa407e13764b6f63c14ec5c48872ba456cab454660705da1d29f07273a56b4d384e0eee0e98b189d25776440e961319c21c743341f7dc21c697d074f0dc9b0b3b18125718e34b49509538789eb09c284e5322bdcbc64d181be8a09d7314d82366cd85ce12a1abd687b7e83f801588b76d0207c92d23f1d128460ba8cf83b107bad61fbfd966f50de177ee290b21741d2349bf7137577e2be89261b6709014509ce72bdd85778159cb83fc2f3909df811fa57d19ebc565bc3d7387b605c53394cddc1cffae7649279b1f4c2c158ba7df20262815f8a76f061d8db64fab80d147eb2c20b7a658c9f606d1b362821bb2cdb027fa9552cde24ca085640ef475469d841ee1463674be609c58baa64d673d9d951878b7282389b67792007c38e55eca9cd9a379b9fcbf2c8e321c1ac6566b38c0f5b99c7f087e1e771800deb27e41c4ef6706470b4c7af0cb98dbbec7c8993f5a6ea04277b37c23be6656adb134303a952ae59a9b062ae31a7cdc365c8f0dc949805c20a31028f6730aece9c32ea533d7f26a44d448288e70b790d99d506c4cb03dda40f27442f740e56376f87562c51e716c2591e0f8013f1fa82887a8c4b60e78501f7802fc2d5b4040c079fb008d91aa8b775fc6e8879829ce9e6623c745607ddd36dfa27a0938b3e9c49a92d1989b07c11850a7f0ad67a432c4701f3696d6c5a502806d53d836443ada7246744fcb0354441c392bc26214341b925257b11116978650c653de232d0c4b7f4839934cebac619b4641ed205415eb51438c40d36f54e8a8bb166b5fb73820c49dcbb7e063b43e4e5d5119eb8e8492a92773728c12937e45cd9e1e2871f4989d9996dd3daeae41ec1d3001a2f50c1f4caa8d65f59e1653a0482eec5a3779e9c1f05f9efc5e7db0b7ce216a076333bb663c3668337387a0139cf4d3444c40bf445647d3b2ee0d236bcc289b8d0365822adc69a08f39f5adc97661e24c2516fbeadb0df1cbd84951787393e7ecdacdfe941540fbe8c0c4255c4a1fc041703980801eb2260e2fecd1159740a4a340e52da78e0d0b5b7204806404dfddba3140aaee55128c67d15f7b9d359004a46c15f5a9024b3c5741860057e1db93050666561419f21db971e3a6458757b0720db74d083b6fc3f677cd943e5ec2ea050e203f2241d0b8651df299e5d1d0a25fc938935ab5bef62e80ebd50d080bb9963ac46c5f086d360d193913293601d18f8e2a4c3e1dd32355c92111df445212f937aa94a821f108a7f624f730400ad3d4838d96153c518caffe7b92d0f64133765e6f04cebd97a64b80ffd015b656a7a3e7aeb2483bf8bc7dd4f5f8986ae52c20c999dc9edd573c9cfb516865907f6f5fc0c4176cc1a159e523ae9d67e771899bd5071f68bb97197c20a35d35491cf1bd460a1a63e0dfbab414086dcb8434b36a94c36ba403588cf026179609cf38d68cfef94742a34caf07fe0da6c1bec9af700b26ea1db810baf7ff8a2f0fb26073ee41c6a6657e4ddb0b766204c4c65fbee3a329f4d885d9e170116cce4e441ede7a02a6345d46c6580135739b4fd9ecfb2fd5f861787cfdccc5fe1334bfdc36210588a8e655e14fcc6c8df2d89c88b162e22297b43cde44e2dd6c07170357733a3814e08c55032a592a85fde5e9b16535444dad3c73ada77dade134fc90b8ae3dafd722807c8011ef4a94b3e8584c00dc36174d234c57381be86cd7cb79e816d3997170a2524fde460a8ab814bc8d41287a2d178b35434448c8e4cfd9291fcf83e58fc56d86d4ce30882833320ebc003c5cc6230f4b8847ab175311f43832537ad181734181c08dff18f6eb0fd689bcf074817883f64b3cba0c01379a673268837749a7c05bc3b8a1696b67561ced492c7cc8d3a6605434a47477581927c8d49b07bd0ad50a3104b2bff4687688db972dc6737d372d2c9c983ff27e4d80b92ab8cdf30170eb298d2756b30f79ccc0049d9e71632b1b32be022d0a08f4948be36673d9f7d88f2ab23b89b345ae959906fff400eded03875f39faab7127233dd8717b3a705a8ec6208aca66837a703939f26b72331482b7e1191ba8db3cc32be857b5db7d1216942b348975288f619214b30dbf62e84bc5ca520c45c145b44201b1d7c420306281f9c7017093c09c8515f6906c0cc776ac2d64d8f92e010937f779e6c9853415c087383553bbe8ab8ac29ef3daa83e0ee986e14b070d035b996725a564429f630acdbd4ef87a1db09b71fb4414a21ce76123f647ccea1598407d21bc5fe38d3b16277bca8c5d89dc9bfec63d57d02d851666a223907c84135b23685949340fc4b3e5af27492884a20b24536fca8eef0e41744fa9ee87d16972729d6e53241988e10ff09ee01acb9dbbe91fed3463e8fd5bec61e50513d2260b543c23653e0cdfc576f3f5bdda7cebe6d734e14b173860fe334ed7e3938d0793216ec646029accc668c67a89c8167f7b30e69cbd1b668c775c49251e087461cf229e0f9afb65d38460aebc5fc4cf75a0d149117bf61a4c9c1dd4e4a45700aa1d3d74ec9be996350f988a372d3d7e2cc5a71247b46d6e20f9e59f8d0cb9c2e745698d356c5d5813fef4f499d6af61b03032ec65f5b479553d1a267f08763795726c71139d0943f0a7feeeba3194d1218dbde799f4531c629c50d90efd4849a616f131c0a4e3e3b4aad86e143742a989bd8aa19858d2814e0356047967de595fafa6877332b66695feec06932d05a2240296b693c8a3eabae29519214261146ac3a427b38230922b129de48ee646ca4c601c9285f69737fb56c09dcd221f835210dbfee0395e90e55e2816a152024073a2df0199da0b7720c738bdcdd6c536f9406fe007f85960e10f5aa63779b5cfe45be0291e7a3cd7299bf2628bbd0538aea5252018569d41fa58e3b563297e37198a1c1211a5931383a01e090d9391b41576568353379cce2eea6a959bcd31a6d0fd8f51cfc5bcdd919636c966cb821f4f523c706eac5dbaa90f349e3409c5bf18b4d93e31833953b78c1979da46a784c792754423df2eea1edae268f27a8dc4622f5ab17bfe13d9dacf5128df7f41d4e698f41fd0d8d5236e6ad29b161124f821bf2dd75961762618b786c2eaf896afdf3f4fcf3189199d73f2dd274582bceb3be997ab8f12998ed9d9ee5b498f62654a69ec2ae05ac4c02750049ab699da51cfb00687ef245d2d92b029ae6dfe719371371f9dcb8be203d9df49a08cdd2486e54c650c74b7018a1c63e0e7c068277178e256460c3865747d6ab61c9385200e7c95aebb87bc9f7904ae198d10978ee4966697ffa54bc023320d492780e02e5139cb7f2ca9dba02f4599b11b89b4c583c27c830ea745ce7ffb4a23acf35efa5b03dc42d59ceaea691f3d9cea38e196f68bf50bf76169f313eef6f294eb7c8139eed09ff597774a496117110f7a7a52d42f871dffa2f3bf76957c9436e4331058e97f065137bc371a901bdeba5a0b5d4b0d84a3ac70c36e893531b5a4621851e3d2933dce9eb234854ccfee7c2ee6cb77abb88bb155a6ffebd5ef426dced57e8b34ba3ad7832e717862152a0fcb0aeba8823c411c6637ddbab380a9146e74f157b456ea55ebdf9bcc00a03e98a6f94be77e2920e9626e2adfa4702d789d26108f4f105f23075135abc5467de298e22e9e1c51b891e922c7afc63154d395ad9ca93496445ba613e2adda63204588df54fa2f6095f9b2e2aab68554c053c29653357e6f80a0626032f48ca6b5f2dee62bb19177d526db3a95655804d610583f8424657cc213c9adc9b2c851b58ed0f5ce2e0155d17b8735c28b62da95a7c40cd17a10c8ded6030f67bc2fc1b23e3f9243213ed14b1e6608cbe1f272464728cfe81a1249efc4eb025cc08d73eb8c46dbfbc19c7ddfd8ccb98bb726bb185c85027c41a24a091ed100585aa0ec38db61dc6a4c7ff676c49ce591b7ef8cb2b61de06bafe28d1f355362ac9b63352fb28f274d5b9565c07a714d13f2b2b0a68a1c9044e69ec70258a29d3f66fef007f08391e934219f3581a0ee402bb1c3f873d6f4463929ef87151fbb9de98a79f8925f2f9974b180555da0b1fd1c8d13ff40a40f3b80cf96ecd065a79d06888e0cc9ecf067d9e198892f6f348c8b6be82e8fc1b104198247819841163db7b415f737d11c698b791cb8415f27d5fd1a014d5105bee3184eba83f921f35e72daac3d9941edf555eda16025d5d13211fd77fb23ed0ecb5929fb20da1b54064b44c0216013a062222b49ae407274958ba9f6417b6df1ee9e12197de3f4b3c20d31ca697fed0cc44c2feb80e40218335b2bf4322e3a895111a5df6728bf30e51bc34bdb9669bd6ba4c673144e4290925ef9062ffa6b456ff604aa7eb9965b974b0549e55ceb679ff85802b8df50654b82f679997b5736b58d291807e25520dfd90fb6ef9ec236711bffcb7a3ad7f6ba1db1d6d7e8351e426bb2ebffc64ce5e12a279a802366c0db559027cf84f5c9d53cc2ab09e3da5b2de91c734b7224a5239b69f8a956e9ca8e513e58b6eb7ccd9a206286ddd7b1cb2c37b0db8688a4093c0989f537c1b45401b8a53fab88da9148493402c044895799e3ce94734b0a1501a3eea3b7110c929ed51a0f05f81fec98da8b74713cdc14c3fc3fa415c9c4c765853f1a6b7ed8d4791047ad9c9151c9ac066c9d09ef3d1ae4808273f391f78eccdddf81d3f58bd3eed7845b9243e64c456196479ead7aec5db9b456759bcf6eaba43ffe256216913ab5d52aee391ea13e9828ba078e70c0e3194a962505f69b5deb58385e8f3c56c29c78127157526e317354562dc779f4bdb8d0e62ed4c8ca89b1cb65e18d497b09bfbf91b2a1868e3737c9f5578277537fc9714a6c53bc9378e4cac16fa37ff7e9df7c53320d789f5070a455e5c660c352957a871c6f54bc3025d0c7708f3dd80c2d04dc3b8aad5cb6281e9a456e635dbe1e315ff42e75053d9b379cb9741cd42c2ef112ff7566e407912faf7dffac2026b64e7cfcbe7ce627be4449553a9a9332e7991443c6fcb46c4e072b9d83277b81fe1a72c3699cb4180fa7ae51c186d16fedb6127d5119587cf3d4a37155cb4dc57579b118ec247bfc963039c108061f5ff728e014b28127946cc179c4da2031fe5d3cb13cd527aa21d0b3ce4a3a3ddd6256b6ee869842e9985ccb3e54f02ffc1a0c12fec97cabb2e1b306284a7d6df906de5d3c39b8fdde23047341370f7922d4b41039ccfc555f486338f843bc8379c934df4907a972ef49a50d8043483bc0d78ad6ae492eb632fb06bf168a6720077f6a7fb6c314f1c8cc6ee1e8cf3a4a03410e70c6162a23c150c7da6330ee64bba23b58253c598419a8fb4ff5589d2cb328fca2b2102b98535b720615ed05e4eb4758da2398c4dbbe87a8e93a7e87ed0af4f25feebfba1e7195bfeda4cbad2ff81240eff0c157d325063ae9b21719d20ee7f1fce780cecc1d47da53abddaf33e95d756a176db713cf73387e2db7919707a711b57677ed79f1c5e66b23127cf36a317ad1d7e7eba52ef4c0f7cbf5321ed2b0cd6a60f39b76aa6c55300d159fbc8c3ac4879d70d24009a28882eb8fce680939e0b5b88e8949259a0c74b550b05680a088a0c3dc5ff19bd3f5706cb426669dc7b7a1a7b6f59d03a5313303fed6486d3f0d687a38de3cc2de2b15f859c3e3bcb3b686da8757c1374e6c5964fb6d17d61c1ceb31904117de7623d342df9c09718541119cc160a914e1d5f28c88bf9352df9bb347195306b8743e1ab2d82caac5c70e56212f0fea09429a08fd0706348fa38f1558d26f672d4d14c2d9e415a5d0e7015f66e426cd836f2fdde7b7663bd80a0bf86b1cbdcc27761466fbcb36e15d7cea1d9fbd32edd93ebfe62d9781e28cd6f23b578e2b9c3fd2ba054178c2f8ab29e2854aaaa9e789d95c2bf4c254b4f0903001b00823e79caab894c5720e673f56e404bfb877c82872bb0eed7263dc3fb96abca3bdba817d0538310290c98419849c60950affe4a6b84d37ec5f58f5815efa12fb524798af56c696e435370fa8c723947c7d5e5daaee86507bd908082a67b868867d66f7c5b4698802708fd0a2d00234b1fd3d3c50309568711d4be1aa831d05061c94231cb88a112c8e6cb4c2026fc252b39100ab2d384e54b730b137a54d018e5960ef4d0130cf6231c36e1910755170c77e0fa67b71d71500b390062ce8511b685a1b8a72ff43523d97fc56f23000c820fb97be4b031b3e491e9ba13edffd4dd63d9567e718ead717f7e9f71dec372451ee22887b6eb0e050fa70d04a4bcb9b15d94479c1fd80586ed487472e6532ace0626cb7f4f11c4046d76c6d107db8a97dd61431dae824e18299b43bdb3c2cc4a721ade6a007b7b5624357e265595cd113552c9525ee575f39bd2f6121884b378d48d50af813e8f1a98418061d670aaf2a9598c798f0e4a834056f964318b4f0f305b0ee6283e960140392c5022d3d0c73303fc8b34e355844833ad01b5c1a48db9025bae15946e0b19a7141df339b9650a80ce13b47bdfab75d7ecadfbade89d8c7de3a523dd437600848d990b6db0dbf3d40b79d06a7bf876680770b58eec7ada595578cb1e1c7d4f327a61eb6f928784ca8f8613ea50a25ac54ea7c3c745f78c1207c23fcbf157d7fb15ae6924e995a1bc101dd046c63cc52e2ff9eb21cdebfdb688523fa07771f28f4cba6bd3fe82f80d34379e1d017da5cedcabd0a88b14a6b76e9cb41fec14a72c3230cf4e41311dca7b5479a1c98a8b06bb932b7683893c802c275c9002027115a534509cd421a701892300ef3f07a8ed78bf240186155010609d39f87ce4ed8eaabd15297d0af4fa353b1ccb8a68348f03bc73f7f2d9b8d9db4323b3e430a3f4fbd72ad70e10fbeed6553b7c499ae60f4122a6777075754793d058f326874cfd341f41e82029bf997575015ca5925d75717427c7d6f84bb29ce5bfebf1c2ddcdd793a2e92f63cd5c1d350986009879553724928371c60306c4d0562d8269f6e7f86a8671ed7fe09fb2ba82cf4e955a4fed8426d6039e9f4495b72804cab9e557ae41e8b2840d815bac02627a317792b732a6cfae2789c1c4f222e9f5c02b3f0b60bb02b7e3d70325fe50008d2f69561862fdec58ba68daef3644c0f2233055876f28bcb0f7ef78b41b9233a39b6557540c134c6bacf8a333d6415ec8a5334e1baa0e0cda3b0050e96091a34abd5c32475dde1b426a334f8911e561ad650f0e2e53853423054ae9810ea5b8395588941186bf4e497768c255c9526b800e52ea7d58b3f83be564811f01564aacf0535d7dbcca5ab2ea51f5e4ee7e9c0d1c151ab75bfdef0f2cb7ff43a6f2801ee36b4b9aedaf54caf49a829cc45117a00a6d0dd079e50893d6197e7f68a66c15e3926d8a9a470f6d5350a56ebc1ad174732ed29122588c9051ab1c7c13614398c164b9c255c5657e1e827394e4806bc62030174bd5f1bfb89a125c62b93ec992db0e455ecbecfd09617559bc30de041567c90fda6dfa73c7b124dac044ccd7b2637ca69e5f1bc4c2c703e3e8b635b85624e272362a773bf38eac8499911c0b870d0f7e267fee8cd7172de44dce4b26a7c6ed5831ae5cc8f9f8654520ae4326a7699339ab16b5ef4ea5e8bf4cfeca9978516a8b784b374eebe1aeadf1063f929ba5cfa02e0f6a680d38da0a48fe65910321f0c68d4ce9d99c034dd4a2fc60d887b332bf281db152eb39907ccc6e7b43b794bb7d5ba4ed1905a0e0732f1be980f84fbcccc23ad4e0c551a263dee45c7b1c66193eb787e8ad8d48f7a97edab4f8c008910623e3c524bff9d2213bc26e37c5a6ce24b88c16dbeb80208e72c4ef27358c8567000a4ee1a381aa7cc2d990ac043eadc9ef8626afc5942b42ee4572a89a0f1e5f6aff9a88cd80632455e5c7a40b17f1d73d8ed45707fd4c3b72df429da44b2e80024622421a096a30a9a0181892ff11b164af4f84ddefbc2241600ad833a2d6de7aabeb1a74e5aea47c19e6d63e7c0d205028e446e805653a4daf627e314eb3edb93d0673a63728bbf635730e6e618bdfded5d61159a2cc6fceb2dc7bdb3db7185f920349eaaac446af16c820c42132988b8bbb800ece575b47c14f0e0875440956d22915a11952c059f82a9d4f3aa4f135451a02d176621d1085b030a212f164d5f56f3f707ed963d78407a5d8aef7f2cf1d570a73c6303e9c87b9c79ccbb85feabc318486b8ac06ee1fb90adc90f2721919ca1f3eec41db8a072a85d00c1a3cac6e4369244fa38e69c6e75ec0ef1d30f05f82be2bd575611e42983ca34436bca095e744c19706f2d2b1f6c1c42a28a8129775810ecf0e533630f1571c7be8b49cdc441734ebad2aa65656450e4884e16c2ceed88008fbc8dd4ff9872b5c48fa23931efa13fe93b62d687c3318c83a4f6b005f365f30f5eaca6f0ce38031243445c65fdc1be7ec5109fec0efe4503938a3a0c8ba2deb4500299f748993735cf944020ae13be4c05c126cd074ca414965d008908ad92711e2030653e6443dfee6f3d4b10f5e8ae7c57a86f672b0db659b40d0878170d94118e44e8228a1979d08f94f3c88bc67a66d446c1d12a1e196f138bd386b066a87da434ec4b5debef30d7856e8073a33d7a76ce6be64ec02437897fdc4a11645cce863c6781b831980b2243dd4b36e53f04825bc83bc069acd5ea46deab0cd9916a34a544138835534ab23fd931fb26f0d4e69abe6f9a6bf3e347dc7f9b7679da15a4a37ad2f7d8be7f6e3fe4aaab5e42b4146df266373be42447012cf2b1210e757d179a829594a310b4c4b590ef5ab9be3467596c8e00bd5be0106c0b06da50aac0cb1450ed13fde4a9f3ba7ab6f1587ee6d1a611b169e175b7d625c0b47633081f7b6cd910381850482b879e0e6f37a64bbae739125e502961ea457963ed7b81d6c8136ab488aae71801cbab8af29dbc54fc1d9c761f720a1216f20da811ccd16c093349275798538608b8677b9a52ad956cc3a41820e32e112980df24ae5d75c853f71602dbe48febd55e29f416026276168067f0de10f542fb84ac68566eaa2b2515675be0b2438763d83ab29ce45eb17d8b1c8c0c114093d083839db40184e63b500f3b457064456e3307da9b91053112b90c07b33de3a0e3e0708f4887314480cfecec9e29157466055f10a33062956c4da531fcc59f9cb58a071f9da5f1df761bc0829f9525b80d3ac6ecf8eb04a0b2b58285b1407bc2cd3202a8a76872dded71edd1589f67ee46b574b7434f0ff6396ef8bc229b96ef70148ecc7fb9cbf3e47eff70ccdb5c0b3b2fdc77bb806b7cc2dd0f02195f6d8699fe18c782b386227fd85f1cc7202e20ccb903c5c34f51e46443840c2d24510bfac9da41f0fd4461736dee27b4579f5ee19c859678ac4b1df8b7cb1fd410f3209a10dad99f40286237fcd4f45004a1139a044b8498ad71a5f6820eba8bb6e7e8f18c912d2ccecc072896bc58e853c4f1380a14645a84e51b2b3bf98e78bb11fe8148bc667b1024c0f403d202a353e9be2eb93c1062c4078de3430511bac13085e9f29fe99706e2d71eb38bae9a4c63d2cb85a0a82d91497a3deae27ba3a8040a774fb447ce3aa9bfe38c4fbcb489323fed546945f499c6a297b303e49a5a4a977f44db5c846c0a85bb6ac697e45f92b53782f3020b21c55a85c88553830426b4d19f92a3730804cb4dd8c1160209e29c756b23ef3dd023fcefbede10104186e69e09f88fd60f6fdc57750293134399bc9f5d9e6992017c8328467df1fa224c24aeb969024a099deac706b66a2806d95c94efe6a89a098311d44915659cd69aa710957ff59914cb15acc9bd4435d92843bf7e547888c11ace521a18dde38b8128529c1d4790d24c1afc603f3a488991b9310a43049c264c5db23359351c9a3cbe7bde063dc881be092b89063059ba85d8a57c47b722fef8aa55c8ea3e360428f9df8b61df42fab37be627b98928cee76a2828fc2de8dc97672b7d43a60bba3d61dda693d0b7fa9956984193abfd7ea6ba373174b3c37ce63905efc4b9b5687e01e507d115e9d9749c381564108da740029a9bcef1d6125b6629e3904e4ed3bf4910e69104028acd87cea966629773eaaabfa13bef59dae42e69297f3de5b9a0e1208fc87eaf9deef96dd1181545a69938efbc70612abf2db344c872fc428eb0f4905c8defefbf85304348b10a953f94c28a390b093e715e25fb9014a14111633948a63366fbc13145a0b3421c06f53a7b1a45c093b0be28fdf36fc7baffbbf346abb741d1fdfc68fa1d38f21476f574cc80488b70a8663992f3aee1e60b2a2ce460085725b3c91edc5224ff19a9baab9c6ae191b0831b0ea0397682c583a0e107c7945f7d033f5a11f98b98208cdcc7ad5c20ee5ec59c12b064e4e1fcaeff073eae9d44e7e0bf2d34344845da36fb134a37eb039e71d0a8b69afe1ce6548487a5e373670a2f3fb6596b91dcad415035e39e83c76e833c3b4f86b58b2ce47cb97d902f04188cbe9e227be99b1a1125709f7f7490171289e388a09a2da2c4f709c79cc4bfaebc4089a7e3bbbff4510981f4f117e5e8ac95f9738b236506d80f6536ebe5484bbc8cacb38cc310ca7e974c5d11dd3410f918ea93478a2675eba9f71e1e2f39028289c932f68df5118f54cf5233431d364c6f56106d687ee9414c0bdf1bb4272eec16faa715d729818fa7487e1d8c24bb9b160435ecdca71119609a0e05d827b60918bb43a435cfb96cacd45ff9fd6f6e738641d836e74f11765f68ac45e81452ab0c64f0f0aaef4868692ca95169bd5d8c6f5579732121bb9afafda46e016fef6c749bfd42b669ebc62fbc99b4448dc611858a64a8b9cd2192731b681a495678ce4fc6bf85f15be7148fa98a863513c4e8d2cfd8a4786b2b0a37e62eaf5e280a5ac57a5366a5c463ef10b9b3d5cd17943786ed1cd370140f4f8a2408bdd3a1575dfd33449cd4c1b5479609de5f1787a0c7cf3e45cc46eb4c32ead5d33b3db7ecf33a996e508af8dc268725c107eb4d3e391c2e0019ef539df631b0da9e1802e3d07da7e4cce69d61afe548912327701ce3b1b2a813f19e001f8e698e68960092e6067931cd809b5c6b4ce71677fb2f7cc2c2bba18a302cff2fccd23e6a815f2646c80788335abb67f9f19c4cfd18af1424d2ffe25b15efaed5023848378aa2fad0c09cfadbc3c1bff38c3f8add7e1320486bbc89cc3694ae101f32bea26ddf52a5e1ea4aeaff6aebfb1e1a4aabf1c91f049c632ed57e7d9410d0e823b01cf84f46ef73561286786c1f0e87d86301485bb772024bef67c93a4d467e1ec24a227eb80e782fbc9d8e1c9369bc04f4ad13874c4920c7a4e5fd44cd811243aafaa7937d7f176bd20de91e41a80985aee13ee4d9cf776519bad2377a26ec35d4f6bda3240a67da315c9bc48f528222cb607381ccd37ad9b566a38011083ffc433d070eb12485c4aa55b3fe871b0b9704a7aa46adf36613701920bef1fb71f9795f7f273b87e9f205d6fba74ac44d6084fef0c0c79a9ee6ff555b016638e51569684c7e9a3d13d3a6337bd0137dbd8875a6d811c8e98d33487865a156bb93cb1a86137ddcf921e106208f28ae157e35042640d73f15df800c54d4d9dd78cac769bee700a05dffc269ce29dbc03a4ef979374514bc61a8271045a50bb5d5cfa7bf2ef3dce74a903fb6dd7f8942a7e43b185aa8f3dfa390c1f47dead53b021dd1d29a12d2e08c00b6e40191cac476ffcbef92e6ac22562bc0f424f826792b5485e43708b0ec78f6a61e52dc6810ad81ca8b73a82f20359d74833835222dd353cf481c8ceaf0447d941539e1f3b6a12c367c01c28ce8b4f9c062d81effe2280e20d266589c3c8142eb263dd7907899e28642b4ba10f64f5e4f0dbe0c8253c31553efd0e8f09371bb79883d6fb868967ec869f8f4c9c35e1c62f8c78c14902cb89c3bd48cb93244ce1781b750e51c025c592c1983a1e1b5c2fb2667c03c6d8d0c044fa4e7d252182357a823ef590196d2be4b1f8e994b996d3bdd431ff603e6c956fc986a59f16cbc28690253f3a84e8e7a2b4557a2c457c3d442bbcc52eef637572a17101349f68b434fc7a08f78499fc15cc58907eec415859bcff419a3b824b60661b2f14b7734c0559e86e5b80fb83e299e0766b70361ad7ae6210c19a1b7e26d7d138cb65f413b5356204c46d6ef36f91329855f8c0bd041d91a4a9d8249d4302f901bbdd3696eb81d6ecd9a79a5621a5d866dc1175d9a9dc20d47922c6add36fb5fa24df5c1687237de27486e8f501851d7c1569ed4c08742972e124a097c661e5beb161695929e2401c79e7cd49e2d082da3ed04e401d7cee4a7ddba81029007e931e2d9621f672f832fb0c60d68fef7ba411c4a6f0d0700be2d0a092e7a377277de649c698c8f99cc7050e23ebd4820493f3cbe76be637f8023c8836ca6a3b62255ebfd0fccfe7792d8ae16cf8b03b1ce82ebb9add6beeb3dafcd97ab2370740ba7e5e71330845ab4e9e7daa3a58325e74c4aab5c587eaba0527b0a6f240d7263c523d48532f20378b3a6687c3bb0ef64742fe43bc8124b06001dd565dc236b3137109ae96af2ee6c4dd409879c11b76e5b581df40dc0d11951e9acc86b99a416b7e6920cc67f2ca783f2c63f9b5038c4869ec68823ea13a7e6052805705cfa75bfe7d184bec2197b9efc31fd1b876cae8ed1d46ee850e51134ba63524df94327e5b16840d8f68e74464c93cfbc64aace6ace0755dc2afae946cda1fc3496a1e88f485841b05abf307a0c2a73f6b166c1248bc9f1a796aefb714025869ad6d1e72075ed436ecc9d9865e1d857eb8c914b9c9671c8bff33e73a7917e0eff939c6f25ffba07ebd9d9384175846fde9b99067450616275d3eee6c99d9bf8a0f99a504cd0303b981bb04488f3bb036b259e74480bf1332393a33f550baf2b4194c2de60c23f88b079599f255927fa65021e97f63b64fb95185bdfff9119693fc5ab998f6d9a00f9081c360e49f55c57eebf0f50feff983b640a6547af1931b967d915db39782bf6f950763006100eceb6761f416e5c3e7ca06ac6e71e789b2d71e5d29b63b802254800bba303bc8eee9d1385580cde8952101e201a09d9d607e6d38b7a012a47f217bb9d2d5b758b6905923046c47b5a569721dbe0d7d287d760b570c4b4763bbd3e5fc2c3140d45dc6cf17e0387ebc5934669d23bb3de377682b2b97ffba5e123e1b8d77417739f9a27df2ddd3d0b53cdd6a849abd1676933d7eed1c0b22623de842f89093310e3814d422e0043bed77fb1cd21fd5eec4e0558506c9bf38beb059f6f86dcf3132033b61451a9f103190931a2d88191aabc22a96de279cfb1434afb959c07274922f3de3717ad23f25add0c26bbb7826167eb8376141aac18ecf7b164018d116ffcc51a41145c8632a3bda1c05003a50238415cdc475ce941150ccb063ee178e7258afe9020e1072653e8c2e83ff63fda6e5ce2aa5d1b804bf0b95e1316308671ba5ad7d3d7a97a543c48fcf2bac8f5833af9f9a5d16ca2b3987e85b24ef71ade239f151a7540516d5e74148e6cb13032d72493ded5a8289cf010c147ca0d978ea3b614356c4ee74b81d92fa6e88142da23c18f498f215d6f61ccc43737c1831f47d90c325c01d276a6ff4961003176b4972c194be3c8eb331327e93f59c8010daf12eb00662f87ff1f1edb1676210e47ed12b9af234d580a79fe1b88682a94525e4d6dab7bbd2f0c9c0d618051b9098a13fb2967ecff64cd679b7679fafe9e65c8f3cc9ab92d32b01a3684c74aa151eaec1b2e7c324cd0ef95ff305683df46160ab2177010682b9d623996f414133b7a47241afa932a8f2aaef1e71a27967dd7c29a259155b84643e13884f58bd530f1784866e866c26119023f69000c25597da5b82834ed9d95499faa45367488ffabba35cf1a3845575773a08ac8679c8ac25fe3ceb206f71e63ee66fb8be6445fa8ae888a2fb736f659f2aa0d2f61a9d6f63e46bb23c7a28dfccaf41c31e66dc2cfd679c4f9407e22941e2afaaad138a876214086674ad4ad06db4ea26fc56e0bc9d0f15acb6e12f1e211cd7c798a3501cfa67ddf5b9f6362fea32b04ed88ebeab4ab230455043b9eb1c5586f3935d120dbfc96fdd93066cea2765ebf0332380383fff8d2037f41ffcdae059cbb90e9b5ee6a1c015e14bc99f14e798abd74ae6075f1af84d7fac8b3d37598fb4fe9fbdfe5689d1cf8674e5039157fcb0698de57bb4059fb35b5c4516b1ca7fbce564527529d10c191dbbe041de448a4ea1b813eef3ab7064a5bc8848eedf7189a26b2723fef1b5a99415d97ddf4a08773b6e339446c6d68b862d805dec0d32468bfa77d36fb2e0f3e015016b6709a608a2977832c85b9bfa3cd524df608a50a4460723254a90f38922e687f52471a4c370da07a79bbf192382364fd81fca3f9b27ef2dcb4ed8fbd50dd993cedb58374d532d17298214ccef3042db7f0e5ebc7451013475affcd04d1396c17090277593a7ae3614ae7a12172a107168854a813153d8312a6f290966d84a389829684d224e88c41bab0f98b0a8a249061efa37de28018bd38126e1ba90f61736ee8be8a2ea128094ec5804bd33a10759f0421849196037a30142f1de77bd28cd2563edd3da75a761fd73b4dc5aef1175a3769383590778337712df93e46b832ae40f63490534afe946b46a573af9f13a298377ccc301ac86cc3f4bcbdcc168f381881e1773f120567f527570ed15a8c6fb18f757f2dd6d008aa3d41f2deaaa01eaf24b59ad53820b91ff34d23167457b5847d9af62fa105357f298c7da198c3e96851cdcbc9bada59e4ab40d3c0951d198ea00c3908c56ef5174e14c84ac08dfe91210f2de94fc3312c75acb9acd8c2a00af89313e675dc24b377bdb382049507af6a793857ac651e224cfe2ab7fb5af5863cf3fb89f73a33443d5833eb71994a7b1e1b340f32fc53e8c5549a74780c4830549fbd9d1f63a213bcf4bec8c57a05fa79c969aad1c1082bdea9b188dc619205ce98b245c5889766670d70b08726b2150787f9ffcbb65642262dc4053e4b8364cccc66aceda35675ae213f5d2901b2b73cae1c9afb67260f0bafd2f84719b0dd08e1ecbc87e7c413be6c660b4fd0a25ac5a6cc84f2ba6e329786ad82eb7206e39acc2c07e7c18b1ad50e2f3619107bac81bcad6ad8fb6ba61fa5443fe849167e7c27d13ae8223a0ed9b579796a4372387a0eb0b1dc03119255b626053a360bdee8b997e84d4afa7c8ee602e53c3dbc3496466496e1e9d8fcdc0f2f0ce552d86634bc1a465f111e5853d87e67aadd2e9fbbf8ca2eb6c91b55db61ddd1d334ee4699138194c554f325cfe22972a2a471695f18714ed4faa4a36b3c02dd541aaa0d747cd49fa256690e4ee12ccf4490e4ad84951aa76a9b910fc9c17fe6c7a7084cf14d661f4f9c9b7778472a99ee42b95c0b05774b2fce073e9602c9261029e7d0e0bd08aa5c115c06eaad10f31bf4248086e25a2a56393129088dcc02d34e2382caee1b83cc1cdd2f17389141692ba999a1510128ecaea5405273098e5472d108d8e65b8f3b6f67376088d825fed8b7f3fe8d180f568e7dfe5cb2dbf07d8670778271cc27c1df3fd9cca6abc3a98196e5a922afc640917fc1f19a9a48f7a772b6cef6c6e51305977034ba8cca02cbfc1c2ac9acf21a02fbcd97479768f42786941326c9149c7eaa9dfdc1bb241a0805bc78fc57a2952f8896442d6a69982f9d02a7dcf1eac840eecc11ee61eec10c7218cf19d9c2c26c7cf95e78ab2a18a9511311636069307891e7cb88a9f3e49c3289cef0513bc643d16d0f447acc55323f283750fd2537fa2d0189c57a38731dfbc4787578f317444abfcc606b6e61e10296473457e230c24336e44e6a19248b848881cc6da9f06b5b1538a3ba8760bcdac4d7f95b517e5bc12afd2f67425cb2b267a4ab97c31cb19ce9eee1b5788f0e91fa9250cfcd092fdc294507396923207139704dd3f0f9b0c1b0fa92bd7a1cf978453393013bd56b6041c5b300da1e38751aef1f47fff0469d2206a4df1785398e5bb79be613147621eb92dad92aaa1d23f4b37c042e5a0dfcf200c7de92a21d2e9c90714d8e138cc2822c65f16b2e8c82f2573187d66ef4e1a9e0de534904f2837d208fe8aab42c7ef4c7f5971418caf4280e2a98b7632bb5fdabb96b313d36cecaf022b7d9d3aa845b475c0c41a64fb244fe14cd5c07502e7ead5f83b730fbd6c87f1a5779e668e3db8e371760fe6b5c87e54a367a574c3b99d8a81030ea6711ca6de76c7e24b3ac3d2b23dc8691613aaa878338a9ae154071dff797c5d385fb4a0ddcd8b4efefc795b4cd2d9d37632f2084b61a243245f24a34b08fbfaed18ca2d4b5abec1990f8144dceb923eec16dc46ca85ed4062ff46271d85770e672a2d192adae02023ebee9664904f7c90e617d390947a7bbc34eb00212c63ec2c42c13bcfaed0b059d94d96c469da7250e782908cce5a0bf0c063b530d2d6c1dbce29716cd850d6a1ddd391e1c2828b6dbecf82288556b23cf67ee41fdc4f38a8858d0b2f112551c27823546f862dc5c60171455aa4a03f5173a5b046a968682ba0553ef8b9777315408a42056fc857ee49a3defd683b14762dd2a1a349839e65ea5bec53c729ad093e334526a9b64df952abaf71c6238485a555458c89f5f4b7753a334b6925f22ba5608a5adec6121463f2d8c9e5b4923202d8a97b966c278e205639fa511c4f72c209a33d4cf6e78a5465d90b6c3195912c29349398517424626b645be0e81ed2e3c6dc1b99f1a78a789a240a3d8a15442f70d285d89edd8787785f5dda367f64c9957bae68b96f03048889ac0eb2a51666e198b77c2525ae6d27d412ce8021228ac598f3bef7dce9ebf31b032abc50131be8082ece720cafa4d4a0292c944e5b593322e533c9c05c931f3c52c2ddfbc4539adc74e01fd61c719ed5ebabb335bf6be8fae63224edd60d04ef5cd8749cbb1f4037cd124b338cdf009fddc0951cc3094e51ef2b79943ae3583a92ab9de03231cae763610edd8d8f432615a3481b1ea868122a9aa06860649483c0015b69bd2065eb694f887ead3eaa29bef13f86e9c1ca23d846d4cd118ed198b34c00f0340d92621f66936aa65f8358bdd6ef3751b3f1de43b96ef7f2ef91c93b6427b44609edecf4b7cb2bcc2efe5f125bc1ec447acfe9ff923dc14fa26b003019c70d7d18b48c3310ac8e22ce2c32c61b1f1ab659bca6d02f6640f4f3f9cbf4b591f34ddfd90c3feddf97373971f95d9e63faf92cffb498de854e0b029343a838b3e56246eaddfe6e9ce241855977f1cb0ad95371118bc231a1b11e9f48da2a007a1bbda9fd30c75bcecb08db3bfe4778cb85ab33f7a9dc2e01193002f4899b38c97a936a87aa466ebb21c4c9bf75ef08231493d76142c72b39f88fd8fbefd580154fb0c020c61e7b774c93f20948903462d8159d6b22de56b60f9dc325f6d0eaff800b16008cef50c8bdbb2a1a6c34a01a87ac5e4898d540c8c16873a2972f0eb0fcf7ff7c057a2eb7db318da7f42ae8aff8c4fffd6b573bd0f8583908039091ece267ba0b00f10f0189e5a259898b0c134cc235f722b074cba41ae2d8c4841289e0eba6c9620b44036ae133cd3780968f89302bab6004c6a130768d2c7486c188b89050732bba207b46a3a31e51bd9f66a33771c738dd136bfae35f5833e7e939ad34cf6f5be696ac544d50896eaf96f0322a1dac42b1297ac67ebeabebf4fdc7f0167d092842b203b4e0aa38558eba1cc7b498865d3e21793adfb49114e7fc6c655560e05ceb0b13136a6574e14e1edb23cfe7619794b366c23664ecbdd80f35697ddd24cf8d2e0c8a7a50d9007a19c609294ac70df450f68015db6cb6accfcdfc0dba386f6c71385400318c21396cf74e4cc95c219352a15fcbda656b646370c5fd3f124f942155e1ffed35b098669677d76eba7a93a015f5d9954fa0adc3d34f2f4b99fab8563e7af73056af1e27e8f41e8d0f23285da3027f496d0fb653f7206bd98b50fbf76b280fb9b7faf681022a8aa558857793c17096bd995216f10ee82ff6e8558d9d9aa8ffc060b4a07d7fd7837f5ad5af14e03feac52c5c693900baa040349fb662514d0f2d9da6985654ef542fb682ad4ff7588808745a79171d544a48ddfed98586d9b15ac3ee1233aabebe1e1d038f812a1317ffda3f88fdc0e968b5955498426c8115bb2b3fdf40b3fb108372c3cab8d839222a3ddc94ed7fd9161060295df476c4e74bca499c5fda6383e572832e425bc517e36e97140525a336327c8f16edfc23955c018ec4bf0da5026aa4088709f400c598893f5e89a189eb6c7b8268ec114c932fe2fbcb34b36cfe1d12942815c67f49033d12f95bd89038533beeae62cc2505f52556bae3b3cb89eaac18cdd0c03fea04215ae43458380306605b5235a2189d8e81e252ab85d8175faf27ea5d945c20217ed4b7a2cb63145e700aa338b3f8566cc1d542b846646ca502a656f283efbfae30511863fd3ea677677a2bb8e3c6eefdb0b145ba2c5f42556fe5dc17cb0b35dfc0ae4f829a982e3645206483ebff8869f996545fe39565e29a05d7d9e285467dbc621fd9bdd18027025db74b7d1b6d3cacabceeb51da8f476a80aa9be9b19c55c2dfa4f981c8c0f1373480d1e6a643aa380dc317e9decb632d7c541c3339ef39735a01af7a43500a7ccf250fedd000288fb651ff158ef4ead3fdd75479741fa687887edf05492fbf4c36ca1603008555ffc317fb6fe5df0f2ffe67a3158bcc81667e593f4aaabae605e18e3c2334cf5e5352e657da5275cde2dc85d1a734f8bff392bc7ca96791df99b6f48e3feb47b6a7f34d10a043cb789dfd5fc1df43796f5c9a7a03fafdf61221c97251ad805026f45e6eeb8a2c2c5f9afa416156506828806280fe86f0142f41876a9b126d11d3c891c494acc046f9188dd8e40edb71e8082f5e3122152faec87a5ddc3acd6946209c70edad638dd49d73be015093591e7f2786ed5a4b414ace50b8d2a541f17de069ab0fb26a41e408c44ebc53a0665a871274f866c22146ed8d82bf329c6daac78a52407a0999c21e38eb94180cff546c1df73ebcfc2944a6bcd212004f97fc2ae4db5268ff23a144885e823cfaf3bd556c40557fac31ee423a50967d13ba4960d0228db6b678fd9e391ac01fc94c6c1c9abc6d80e16b5a517fa4a862a86e021ed5bc6b525ca50fdea6e37458042002c743b0107ecf02b6ac837ea5cd6c5fea2bf352fe9cd4769d73ef8bf390c1b12046b8a8b454eafbb3a7b457cf0720438b7aa849bfcbc6cffb12230a0a2cce887f1b6c4c4d9b3864a8d839bf5e75bdade3a0230e53e7739c5dfc19851cff520bc1826b988102c5298e698aadacd37804f59b4e0f61407373437f60a79e2bc67c9f0184a2ee055553d24120e379eff269abf79f90f477c3a630be7b7bcd2c2774454df0c0b2ff460f3dc0406d0e4147187f23d66e66761f2cbe9c22a2404945aa172a8dcc634454831735719a2bbd322f583549fc8c0bdcd3ade5b49956532056d381aaea2617a3f48b4f76bd7e3129f75216118f79512a5b6b705381d300333e516595a528b37c81f5cdee7bfa5bf39a860fb0806e7d4ea0252cdd7ac448956d79c96d000cb65b3b4c05fe4de0c5d7829235afefcc5fb4f3d693134a53c9dee8f9f9f7c6584edfd3ad8447ef01e026cb92aa255993a590b73118c8df5625f9f192807b67189b64f800f1af4b425f9a38c47cecdd69fe205762b2e85bbd4dcbd39499c755737ddcf8f27c4bcce992711394ffce14a43fd7f191460d0bf6a22385cb1e4a92b62116db90babc79cb15ad8241f7be88e659d9e4ef59a7339ee338fbb4917d81eabdcf26573f279f7ca06046099c65dd78dd5ca1b520fdb349d73594fc3d01f5f7f0e07e3c516dbf977e60019d469d8008133dada766013509692aad2b1aac661cd70b857d5bec9fefa7225d382b475c9e97e565e60d8e1a85db2bdead22c8c03661f20ee5c09d850b642051aa79b7868eda4c4176be09d2fb2c5217e9a4457ab7b1dede5252308659199a443468cb538cca8adb27106a28f6bc9a4cc5be7a92769f8bcf13a23c9771729894c1e560c72c6701e9dc840d3c403d77956e8206421e561b426610ed38fc7eef24f8142239b425106597b8d3278dd373a20131811bf9a68e82eee1197ab8dfe4e60f7490d98fa01280c878cbd7b0f583c43bd415d67777c24b6fb6bdfdcc6600af5cf860a0f0783aa631323c8aa44a21ade3fc5cdb5bd77216d2b954227c45b38a2214ece129bb33512889d520d810e8ec9e8db679a47d17c3fc87c4e27963bf4cd2bdbc462cae07f6d724f1c8d1242eec9e5495be07cef1044620e677d2dba749dab7007f735d93a9bb355a731e9d88d49d173401aee0c43bbed7ffba5c2813e673139a7a4858a50aaff525ff61ee41394f1fe4dcf6f991e338b81860fa46480003a26d6cc6a313e897b5a7c677a1b18944f5e6f9726c0e1ff17f4137689cc778326475ff0be81af8c0279bfc202c9b8b7784f0cc4ae8506f0c25cd67c6b28939da85208393ec742b9ca9461680044279860caebe086dad866548b01944b6c476cbab8b484f584595fb2b9adaf9e9adb4e4a4c4fc7eceac0bbdc10ff62312d8377206290122fbb6af42d4e974a82aa9ea21811aac06b144ead456039ca2188f04077f666d5e4f18e946ad56952f6411db4a22e91956e38ea98be44e048a83e1280e0caeb044c16da93f93b5675a49a0c05f6d110764ca6d18afef4db07818f9b84b927859ca33937071dce151c043c111d9a07fdee6ea51c072390034c9bdeeaa47fae27ecc5ec3e2065dfaf8f53fc036a24d00f442832405f0caaa833ec116c4a2b6d7a3ea3cd044a00a4b70c1257424776f89c328d0b2475690c6c1359df432038d99b5fb23e7439f1897e98c02516a3f00ad32b63199c017339c6091c52d00b4edfb2f19f994b5fc780027126be061dd073353acf6b0484236004a1af20c2165bda11376b73613115fe904ce3a6f39717c7b22058affdc940e49e0798bbdc1ae822104b63ccc34b4a2b4a5c2c655b0bc03721169b1c6aa976d9e90b193c548fc38b393be5ee275be4336769e6aa42e6ca224288c741bc5eb5d518ebb36b4b28395f28ce0f35040ec90ce90c2913163e5debf69bb1f82a6dcbd2ceaafa9cf0fcd4400ec67f48202740681fb6022a5f1c08dfd44eef7f993426d100ec838e9b637116880c4b5ac7542e92586260570d2191bef0bd18db7760bdb176265b29de7380e8402c0c512c6e7c4b68bd1e6a3ed27775210793026797aa5bd5dbdfc414f21b8598bf569cd516dd43b4432819b329cee45c345e015025e51cd134aa540105d6735b72a5006663f0809f5861804c5ba02090531d8f5bfdc99935c7445f0cd2be09b1e7f2a828dc5fdc51a06a77ad192d4b3870b3696f94c2d6fa0389e096c25f595259e93ebfea6f89e673c16e73b8327815515d47d28740858f77eab1c540981562f433cf60e100b32900826601704f3ca2d389812b69fcd2319fd5502a4899823e44db0f74110067807a495b6f28c061d2ed613da70152e307b7783b2b819cdae5b3bb882c0c8a2f425b94b5ca445bdd70d6dfdc272f6eeaa1b8ec23f9ab2f3deb390445427419b8c9c4707a5b76a38bcd9a56ea3229c86871b35843ad5f065de791bbaae5115a0d3a22b3408e569814ea763f8d34a4a360b80fe0095acb358e3da0a4ec0cc7e2f48eb5b056343c414c2f2b3dd900a2e599066fae103127fd007fdc69488299f07c256101b024b76e8cabccc0c931609796dcf98c19e875d68f315065861b2cb077da0137cb75f2ad29135e2163a0a636306c26653c79c244ae1bc95bf304c84a0cbc888ea5105be571a3242701ef0b379190901917c9f59c74a089af13e83bc98109cc4d74a07e0ca57809487442422a1de0bbb2925a673d9a6f7020819dff40238ef845e6d0c0e031c67f4deb8ad669b2cfad589ce9aa723d8d8e337b144606e58af341cd06f22fb21a498f4813056bd39363a7f534c21ce790f3aa047422b8768109d48abae397c4e17a89c5b1ff3118727de6d56f7a09595fa61525204b657f5aa340d87782f350038a3ce0cb97721ae8636941cc4926ab15f0a31a0017e318299e331afbac14bac071d74d01b8212f3aff99ce37e6a2ce59cab996f0b9a2a50aecc078907775ebf4479845331c2d17926d55b7cad2481117d64c2a8164a28e4bc101b92d9d4398b7cf6455b9401f1a0bcaf501e0492309aa70a3e4590b5c8cd67ee51ace4039808a680359274ceb3131a627cc5ef46b822a5301d5604b874a11535bcecdbc40c2427eccc8bc40b3448ed14ec4e185add980868cef413b8117abf41587b69446b655562e405d52e572d362824d1c86254749ba9d17ea16f708b0a6465db96cefa57e0ccd9ebe726b1ef2bdc334c79abebf20d3a66e67a4f3f2a3d6fc60dc7e843372037820c3c5206fe4cca07af3daa37647acdfd50d17b5437f45b7a5f9dfdf4fd6af43d6d43ef3b105d29bf9225a9c90168004af10148dacbf31eba49f87815f1c877ef1f013568a0b7011b9d650f71cf0c75eefabf7bfb66361cf4f7a294194b59aa614940c1077837a01a6ba65781ada2a1b730f5c3882a71009b54485886f107601bb21ae334ccb93264895000830c81070ef102233acbc05d91847cb3005dc16518c47deb7d6d542717e2a92fdfe650bb1c22d2fad1c8c26c283c86f4a4914367fd17a00b289bbacd7ebe6e2cb638c0004df0fa705bac2c9af65c09393f17a00b03b24d5b25435717e2d56e7d814b00edfe6a5d22e854f8679122d8adab75d0f2b5df3c108b71b608e84846f4eec492016ccdfe40b74062fc15cf6904d056b2535468075bc38c6786656ba8910efd2fd4a4502129eeba3a6e256510c8256731c0ad18a0dc4b69813cdae4e7022be15a34870a1d5c8cd2b2473b9e22403caf07106c0c9cdf914f0dfe3c1c1fe41ca916062d5e131027c504dfceea166390b70f48e108256f7cca7d50b086b90618066825b6790e39af8b0be8047e2266fc85c301e23cd1b91a62219bede9e899a8cd7aaf33f9b3916fd9c35cc49a9d1c2abaa880638341ed0263ef5b3fe1ebd06b5b3d12e01ebba2cb47ae4733d4a3a4b97bae6e4ac4f3999ecb4c203879765046a52311020f95143848f8e0a1eebdbe10f7833b40936e3695a31def5bc74417400d45597e72e52006845f04e24ecb4d95a1373b69f04b30146ebcdaa27f1e102752b936e1cf0ae074e9fd1a0195fb7476e938f7e2c917ec140e0269dbc5fdcf29500bcbcb5618df0aef2835ac41fefca280d51131468c82586bee8379d03ca52389a6d0300452192bfab15b9fc9c50854708330b6e7531042faf22155b89226252bad5b3ce2183b9dafa3756a09e23ce6b05f30d1048f65a08e35419ef53aac74d6fa63abeba3481c2b6835dc15f5fa414e3ab881fbfae8dbb80a009f6be751a0a51c931190ccdf2440ee1fcc54b8ce4043d90d9e8e56e26621802348c6afb2f590db40a316bed4501ac056546aab32d0ccd6d4485a711f1b83c74c9ac03140f3fc71362b6712e10e0de928f1b34c7826cbce047d6030b8c805b431104c37814023bd6b2a007e8206d81ac6d2f5623678aff9e467eaf1f0ef555f6507b43d59e48ff24b14b4e022e5cf795c4c84887cfd0c4f129a3dfd6bdb3f98da93eba9f404e45f31b66033b7b79f5fd35d6ee8ec95c9078a31f9d7c50bb5ecb1a3da93c5a160645c7c8c2e5430e858b218acd2e9336edd981a7ff813a598e8fbb23dc298ab40221484b1c074def10beb70f39d51d71e83bd4746e731d9bc1043933597cbc86af2b26644ba2a4f8ee3bc444140a2d3b208963c63e020ef69eeaeb912a0baa48724594c6805fdb98e6e9de265cae550620778387a48899d337957b722158a2d2fa1eb9739e466ef78f7057f4fef156202bf0ed2fb690cf64def4849080c5679838f80be3e3e50bda49fb4849df623533687fcbf42b39bc8dd0815fc527261b3e1d2b4e80a6b4f2f48e5fa30fd49a305ed179f329ceb159eb640110c1da06603e54fdebe48c931c06d7cd1f48f1f183628bed66a1832a7a2e6c23eb4c7383b7bd23f91185df28031f756fa8f284500670390cc24e1122704c0f9b4c3419b7aabe237c196a8719bff50d7ac053644dfd96240bd14f5ebd71719614bb5339e5475d2b8a30d8b181b51d92f6785fcd98942ea1b5cbaab45d53af55b036186abcd5363811e23b1901e2d5668318601d120c6555ec40e73e8f45038897a879da857b5d0b8b2104a25da8084871c6ab968607c756896f1f122b332a7e44be3ffa3f012b319bb78254235d200d978c0ba246e00f3c44a3d295399bd9ccdcc385bb51d259af310b4734473db012eed66282ee277588211a32d3692ca564a6b595367cd23a92573441251262a210c2fc75cac78432a16c727464a2edce7588d470849203b13aeaa25355899e579eee90b017d9c6c0c56bb4914239279cfaa5896c80f9d130ff1152ad43d602136c835560854be98c8c0540d5a72b829d052ba92bca4dcf4d9f48832bcb33f62a396f113bf0d0db340eef0a2784672ffa3d71fda27cb842c3318ebd456d41cd8d24b4510a51fcea83a65ecca131335a80573bdf558ced5c0369045b2984a4110a031611156686dae224d4339196a90369b17c69570d1afc07646591850446749a6d108d2e9ae96c021e1be5bd591f2f5d62d5e85baaaf0589476bc5473a2c905593ef4820758070907b1c1a1122be7f6cad640974050626e3d4939e4e81acab794045171460dee07b101e10cd54fa35414e32f2b6fce386841dc6d8f06b849dbfe7b2840588f571602bc07d6ab0c6af92324e2f8e36fc9e337bfefb3d4ccb8f488992fbf012e096aa03db03d8c4ff36f129be939442bd1276e987d0fd6ab4f1700864b3e42255bc93e24e25731657a0916a9038255ef2b945d296df8766d035af39c9a3be40b8ce289d07411c1492022c8ee0324a12ad796c9c3f67c0ca13795329a016dfa60076a05b88161facf3bc879517f2ec4ab03ad99dc209afc248db66581e7f2dedfd0f5b6de41ad2d9f853f84680d3a5bca45304002479d783f42bc78e5cf8d081705c60bfafef714a0eb4d096d545c76236e84c68097ff62a0f2710a9c160b371bd31955c119d57b23e4e78103048a4807796de64f3eb174c29d576779ea97d1b9bbeca53f8a7f118b7a2a605f7142904197cda018b218b5b011a7991e00226fa2ac49ecd15b3017d49c2798f184eaa7f5bce32aa5561f800af4cda5163c7548296ecebf8b36f8da7659b6d85f4e23e86448be4dc6035d54b54ab829c6423b086cbdf5ad94dd43b212ccf4c66facc3fe4db9b482979da4fc35ec1ebc9e167ebdd2bd8b4c0c944c4f47a02b2c436e1d5637940081f89fd90975209657bd8e32cc39b444537456a570574b3bb9ca97458a5f8da924da2b5c377b8c0bb0e08b0b6218c27e58f0a20d5190e28a70c886d424511e4e15c019739446ad3ec8ba8fc958f5f004be2c3732e6c62258aa8b6082f43019d48cdcb39cad76c4a5e02af56ddc47ab2a4fbf88031ff0deb1a20f504e07594a0c91e194d6afb3d17882ede30e89d51acd924bcf613c4483f21d7f2736802bd723a29cbeba1e0c1cec920403760f6f5227b808e89b4bcefdd03926ef96e3450eb3df8ae94833078f2c2fcc8ff1f09c59945cb2bc57433d9148b71bd4e6bf47f07ec5f709b32b12efe1c25b4b8d58c9c20027de9fff425ab5053b389231e71832312b3e0b444b24faa459c4bce057cfc805ce8498efbd3a86aaba9b6fcb7494d43196cd3a67e6fd72c835b2cae337e6070e7aaf2c97d662b9983f7d99e956e4812661226c476eda0c82b76b69e0c1f8427aeeb77b0ee8891ad6c5945583e014304fd8a12067616cd55e88c48b02810ec8e7f9b91ee937971280dbac797c1540282773c973bb067227543fc0cc43f169b10091c372e1a408bf99f291fee8898f840778b36d24089f13d2e709b72b331d56444929bf16b3472d82e4c43b0b22a83876a38b11887627d77332ab6beb64fbcbdf66734263453b6983e7d07bcd5d58c9bb82aace2f6aeb345ff64d25912375304d9c70cf119b093d0acfa5cee20cfa16ba3aad6e69ffd99cf7b2cc27b0a292f9981fa4a2ab6a17de2021acf20ddccb73e655c59a8bd680556fbb4981fbfcb50b117d211690e3e4e8e1d715478599a9ff4145d474651474e524dbf3e7039d46d1e75c64b0cff146f65849dbd23db8e6104f414bd0c8395fd88dac2f0f00f115dd7622d6cfae44e2e94a99974c32380f57d97865362e401bd9d7786895ebf70fbaec09131644e92c5088f51ecaff35503761ecdee105266b64c28ac3cad35dabcd2f5b21eeeb41661dc5616383ac42ba3a38515814c72ccd288ca109bea6b57143b6d5d8212b984c160de6136328065c7d1b78d977581dcf437c5d11b173032207ff1864315c98400b761e790cae372a544f441a5027065d7fcd05c982b0b4377b5e40f1abea69b423bf6f2dfd773e5893313c41c24ce88cb3f36dd6edb60fed086f6e7f6c42eb59100ba95fcae70bd30c536ad5fc462ea65e382765660b347dc61a23b7d97adaa24f487c30dcbb32670373a6f5fa72a23195606405c32e27ad1c51b5702f7b61f641fb3656b8e772349d93df74e9aa3f175ea3b0395c9341a363152c173bcfecf462b7af63a00acb4e3fc6637fc33e617e668f00519ba3203594e616227f2f79090fbc6702ec6f27b76afb474b54a4b1ed9cf98c65360ef2bf758abb10cb4eb902528c30a4fb3334a9bba165bd74122fed4d4929cd24f2dd5939b12c74c9a0fd1c7a9781a345fe25a6dffde5685fc987f1042b145edd946c42b411a67d617e4a84991f709003ca0fc1e04815f1be81ce8199a0f19476a86c84f22aaf875e9025299587cedc17f68e6c8cfb2b4acdbf8aae7eafa8b5dfabd46e8842bc393791d978757a7e21a8b2559dbfeb4810821384e8c94342e8566f89a18390804887d4cdfb86104aea92ca7a696506b682d5012962c271c645e7a07fdada3b0745da42c21be97d748fc810fab636d98fe653794ae4312799ba9b0f4b1a8b1ed1c57e3c3f4c7d3e94bbdcc2b45cf588f4f37494709916f0bfcef593dc9b26c448394d6f9d555be23db2998862642e182561f56466686eec99c2872733fcc9b83d99a30fce15c43e99e14fc67dc4461ff04ce1f370c362d9e7e136cac43f02f7110b7f32ee237694897f04ee2316fe64dc476ce483961d80bf7f54777df7064b27fb09c70766cd2dc9fa7d6b2727d5b90f22f4ad6631627763f0729d5930c9ee439b9311154f03fda0041a90891bd0c8ec999e93043fb0a875ba5e6687f93bf45e0d69bfb314c4ee957e742fce3a45792fbd9d2bfcad31f6481955b9300a260a730d2e248ea6fc1f13f38767d9626446bf7c8edf3871786a3f32ab14cbe7f88d138767d9b1c514cde1fe5c65359ff62e83183abca13be94aba5b4f27bae9ae3947ef799dde5fe1b18b63d982d68be91dd3cbee1c50057977453496137b77d2b226746ec56a4917b4a633b45513fcbaa76d1520d1ba0e27a690e27782960aa85fc72bd98c7e844e4707d182c875b4964ab69107732941c18c1dfa88020c0fb54229aaffc09fdc02b91fb7798ebf59999b4196aa02bcb742662f2245d84012ef7f46ba532075402f919127e988721834b99526c25a656b0efa38a3563416855abc493c85deb74542cbac892a3ac2458df96daa0b7a49a8cdd16b58bc5791aeb42328b06e89013648da1d352061aea0a025a1b3b0727a492c219d27eac781e656606facda8b71591dc5bced878ec102ea4b8552bff43f6dd3eb06b84225e60852541f99738e50e2039a98fbd3bdee873e68bf920e29c9e0092684fb72c81714f479c56a444283ac63353ab32f99ab68fc27fcaf8ad43ef46adac4ec5c7c98f0381cbabad4ae82f58e38cbf3dc3a666fa16b1a9b4e7a3d96dd454474c005e8174483f804e39452fabfc5e4ddaf5587d8b98dacd4d6afbb7c9e6aca6bbc0f7e155a6a79fecd2b1a8cb549bd79e5fe4a717a148f15a679c895ab20580240d2dbd8dfae5ca7c2d669d1f97fe435b816450f57be587af40f707837d46ee21f53d78dcd8d4ae12d34061b0068213b9dbba8f85e35a1c197cc4af2afebd6d64eca974cdf02d75c4d166d45f645803597e480d669f88264b23059c8817cc9b5460f77c01b86c177abd58c4042c59db5016433264e111bda366ae19b2c1aeca359e896624b41a7ef19dddbdbea1c9e69b85a0db2630d00a9e3d4d3bcd225eff724ca94d7c24a8b21ae2d7d081c84a7b4d6057b7d7539d6b54ef7b73e54bc3baf1474209987a59ae4b1fe71aea8aec7c04047f4ef59396c19787af9575af41e62bc4df97c6ca010c84f1c65f3257b53d26c19b3bb72168fe2a746928417f091d7b128a6f70403a51320bf35082a425573a280d4da047e64f95b327cb036541fa134d6d5c79d4d57a56cf80f1785ea7d381b49dc62060246523df990b9c994b11e2b1e316b4006b125c0498fd268dcced5d57d2afb2f1cc891731dae907aa2410f58bde0ffa1e48e3797b3092ca35e788d4e84b72864eeff7535cee8a155d40a76f996198d1ff39b04b49fb7a5555a16c9d13d47bd8e141d8a405533bf00a52ebeea4b65381341f0ff963f1d773c35e1c5f8e59eee99c4ea6624c334ee1f6aa9691d47d140e439022b282a86319693acb8ff9ae0dba759da7d112d104211665986d2ca17e968e83cd4f8f4c89da6e52b53b646d7d87c7e3e6c494486ce044459045e0fc55a105010705a9303003088e5fb06d14304648c31495b2110e8924ad162519917daaf2dd96f48969876449d999929c75bff7bf5e52d283ed72d5aacae88888888a4e87aeac337fc5af0048a88989a594bc86e193b129c12df0d7244d143097b7be861041fc0e1461b6bcc60e543650b2d98241902c9d5524d60829121342ec8c4281180283b7be0600739d8210be845174444408e37d890810ad23043034648403c60d565c16d5270021e41e0c10e602082270c208025028025ca4e114d76d06106194e608227cc28c3000528e5808396daa10539e260e2a7cb1e7a50610a4b2831830ca33764100316a8208d117c200b2c125012401257a2ece8b0818318dc00055e3801c20fd8c0810c60a0821464e0020ba0420a27e0f1060f5490821380608a2ebeeb301905c1c38e3ae45803062628011a646c7185ef25012ca1c4151d26473222a3206ce0608d30bed8620adf0560844e132647b21682889e1d75b081031ac4c0042540e303647081c514598cd0417224bb3412113212bd3deca8230e1aac11031898a0041f20838b2db0b8628a2194b22c3184115216b0f0e408175a10020e5a58b1002c576005ae584010170ff8d823a4c795c70b16ae2bc87040b4818b8c4b0396bc62085aa41f45424284301976b870b06e88b1215483458368064b061f2f081112a211b910a4059a203600a9e1070e33231f31323031170ccccb4bc87acf0612c0973a6d2a23be6bfc945a3da1c613d440821a2fe8c16a30ec8471a7a04debf70aa0a9b1a99152a3e73d0cc90d5683e406d3924614d4d8410d18de7b5dd0ce42229194d0710263431a17486dbeebb4cac8d6a5a1d37842648934744843e6619dee34c6613a238003e3e2bb7f7404633c6e23191901d0083ab6697fd31db7bd67e9f19e95c77b5616a860d92102fcdecb11c3c1b66dc583c819e79b6dae99e699658e19e68c31bed8e28a299e58e28821ce17df7bedad97de79e58d17de6cb1bdd6da6aa99d56da68a1cd15d75b6dad95d659658d15d64c31bdd4d24a299d54d24821cd13cf3bedac93ce39e58c13ce2cb1bcd2ca2aa99c52ca28a1cc11c71b6dac91c619658c11c60c31bcd0c20a299c50c20821e402b98df4b34a19e97e7e1625666c6a666a0a801500230086d9ccd8cc10c0bac27b9615a8804614b0ac8d9e0da0210134ac40837bef61594f0f96cdd8f4f46059f73d0ac3667a8860ddf7a89a1e244890f08006942798cd90215adeb3aa40053466c842b04608c8781877f2286e05254908a6788f440a819610f451083a11ece6068b35980e365f14f12c18aec4d0c40202044bdc4882453a4ddb54de1fb15d795c705b7744c3f6cf6ae398c6b892d6a54ea50e34fac0933b7e70c60e1eb7c5b184f72c25bc6725e13d0b09ef594778cfbae38dce308dce58c232c27b5611e23883863380c421c38619aaf79ec482c0545aa5b965c77b561d4418021d735872c4312a438bf760c7adb4890b130fbc74808a0e901e7f6f0d32b4973a59d1a4685d476998dfb4d3160ef35bbaeeb46dd974ea8499b8e6409ba7824921a3c87bd9064658a729e136524fadb25269278a0e95294cac9498149133250a0f955229e3e24b7a5be9317e60757101137ce0c8cf09e3f496aefd1c09ea543f5e9fb64ea5755877e2e2b1f05d102ab5691ddfb59d244bfc69e3c17a4a67d9fe596d4aa0d080d6e9cd77272030f034de88bbe08df80ede88cff1463c8f37ea33bc51cfe18d7a7cefc9f0020d0d131f1e0d93ecd13041e2d130e98f86099747c3648a47c3a4018f8689041e0d130c3c1a262278ef0119f53c9a91f66846503c9a51158f66c4001a2133231b298fc6863f1a1ba047637380476383c5a3b111e3d1d878e0d1d8a4f1686c62f0686cde8001080d4d10213c9a20763c9a205678342dbc3c9a16468fa6051d1e4d0ba4f75e901684b8e0438047e3838047e3d3c5a3f1d9c0a3f151e3d1f8b8e0d1f8d4e0d1f8e8e0d1f814e1d1f860e1d198823c1a930e8fc664e4d19870de7b2ecc2024861ea047d343c5a3e9d1e2d1f468e0d1f49cf1687a5af0687a78f0687a90f0de73818699f75a78011bcd30f39e0f1bb6e86fb405f7465b58f1465b5ce08db608c11b6d818237dac28d37da428e37dae2096fc4c5cb1b7141c31b7141df880b9e37e2c2bf1117406fc405166fc40506de880b34de880b19bc11173d78232eea78232e98f0465c48e18db8d0e38d18f0e38d18f003cc0c58e41b6139f2465872de08cbce1b61f1efbd1f40de0f191aec008f06dbe2d160603c1a6c8c47837de0d160277834d80b1e0d6683f71e90179e0d415dde28c88a370afae28d82ca78a3a01abc51901d2d04792f427ec4fc68a2118f26627934913f9af8f36862138f2656f168a2031e4d8cc0a389207834f1058f26dae0d1c4373afd319fd28a508117a060059709d0b862c6bb3440e2d299563e18a6d234d4151f33240ec33addc4c70ce9e747e31af35bea07698b88f57478cf92f2acfcac17903012038627703095e6a52d3e65c1f7ac1c0964e1e174af529db68ecb7e38bde5e63dcb07ef5970583dc8a458847b20144aff70160fa630d9411bef8974d0c6b631e9c152397837f0f17e2c37da78ef3d800d6e234920237ce3b89486100611ef89c2108dc020e2bd178130addb561d437129bd759bf637afc2c000c2c41770bc6ed92f4c0f08a30854e17a611401d8b34567814014de3ba1a8bc32a680030230bcb7a4f79c1fdfe974af859f8ea0923a694604a150395bfc0ef7d33b4fc5a35653b6f89d2e84d045962e601ea987e3a2a170d1507e561cc9a3b46df32a128742e590304e777af3c1525a8a07db569d66da92839d388ff29d0654c4a7340ca54f3aa83b6dda00f44f91cdab561ce64d3ca8243a6da707a1503953b49ddee9ad082ee749a7ed703fbed3f149694f348d87eba955939eca59624450d735ad882b264e3bb1d2693b3a49ca039d8ae8b49d9dee394e4be9b41d6b678400d316ef3d26180f29ede4936881079669d1012dc8d0c28947c270301c1eae6841b18c07affad122940514b2b8e385c1e5bd770dc962e6f994b6d369da941516556071002c50232cfadb7cc90896756f842bd96091048b225886751aeb3e752afd702e9ccb15565c1134ba82e7bd47a484d258963a51b1e28e97d2be5f62e2b4930ec40af91e29486f2bbdadf468015a16a0f352abadc36cb4cd37c19d804e5d8f040479af891387d22b26bcafe3bd97e58d1450e43dadf340a7d42975d206a0859fb4f4ae4b25bdadb4de560888c1a88a9e2d1da8c21ba3030441a57f86704103d438c093d785e58267b5a0052c78cf5a810adeb352f09e8582f72c354ef09e65028b046abc67a5a13bbde447e1547ae3f951381f2d0589ee39fdc42775e241651ac5888bc712811456785c6a5b75259fd300fc861d81180e36e588eebba6440a2aa4c842458a1829b852a1923aad3446e25ec561a8ae8726b8725c0fb852a192f2c14845607b0989fb9a89d34e3a6eeb38df515a0df78341217119070486914c3d5c47a406f31c4a37c1483d3f3ad563ea308d8bef52fca44afd1e2236353d26ce7fcdffaffd70a7943671ff83e9adf3401e7542f1229dc9e784f2499df8499573a379fc5683611a0ad683c373d363ea4e5b7ebca9fb5a916ea5611a172d09462a923a61563429bfa3565d4fad30d2e66d9c60a49e1e2a1889083744a57f6a308cc4f9af612a0dc5a65ba950ba26c5839196e8acbeffd13bdcaba8a474341eae7bbfd3718d47c99294b6a36d3e00296da7fbf7b2814660e2b4695b693b3ee0e28211a0c185025c1ac0e50a2e5370d1465c7eb8a09e4ac388fc50630423f20366f30396a934cce6072c558361990d87655162c4c50a971b22353a0b6f8b099e37f52da955dfa2a17e152cdbb46df34f32265374a79768dfff68547c4adbe1b172844a43f17ee349320242a150a75f52715cb7d23cd7a53c902f597bbc6b889513cf2a41ecc58404074b7954a9fb1e55ea286d02523c519397f76046d0711d438204e31b3745978815418284e47dbabfb8116782f792e0d1519223254709768371e9a79c3d5ede680f1fde680f1fc4dbe1bd21efbd9cc7cd1be541e58df2c0c01be531c71be5b1c71be941e48df488f2467aa4de480f2ade488f0ebc911e76bc6785f12c2a44607cf1b252479d4c3c7bcf8a80ccb31a2085cb8fb635e93e769c7e129a001224d8b6e23d446ab46825ee4422c2614e102961365c0d104e6036a5a05d2a91b8d429c4a46f9a73a725394d469a1d23ad3f52d7de94653d4af4f4605fe3580e463a2dd1b690b668d31614ead455d9b690308e71409ac37a4a6b0db535bf85d35bf4a69938954e711a87d21d67a3376f3ae9cdff7893ca934e3fd8294b4f8f12dc89eb9b96d2c148284ea561a91cecb4759dcfd2d3a304e6ff698b4f7d0deb29a534bfb12c53715886695ce39ce728d4290b9325519464590985f25b94c8a204e64d9d4d11cd87f340279f1c8cd4fd0995d24e3a558292742fc5e79444d378723a6d874aa7ede4683b3d55850fd1532a75de67c78904ca32eec46d5e8a0a360cde7b3c046d27bfa930bf7fb42ea54d524a9cce163de53dcb8bf7ac2eacb01c20c67b5603de7b37bca037d272701bc9f394e7385f2271584ab3d1db2a07dbb42658ca6bd9346ec5a5bce73413c7b695960446e236ad52696cd5b54d85051184dee29360246e88cefbf4d3128c14821e21bc2406290855daa524de1b32a44b796cc810ac7b2dfc74c4a6355155e136529609408b478a4025ad2b41a02922b0b210007def69ccaa42008fd318c83283cd03511192c50ad2a6c9f2e49ac90264c9752d01c633b244cf7ba4ce6d24af0497a70494f70280c7eb3d5dc71fd1e3b5784d733da594d6b3698fe218d7799f94e61a87a9bc16ee81303f84f3a60eb3e1ae602793df984fea74e2a71f2da5718fe2c1301217e48fe841fe086d67e78a15ded39db6bd2b686cd15247580c78cfe2c2d2e23d2b8b37baa21a5de91616ef595758565cc1410aca03f9272a8dc70a1caf9fb42a55c54a17ef6159136e64656764058eaa346154e58e52a9afb852f74d9cb84ef97731a08a8f01a44edc9d339eb8206e23713c537896f0641eec61192f9dbadf94782d9ac7caf2dedbde884a188fdb4850cab9454fe93a5c7c4f8da6a8a1002904300572dae69be8daa330adc3fec9c45957a45848bcf1deeb9e09ec089c0290413f9b96d279ee0e23e891071233ef3da8d21df773eab820af25c86b29711ba9e3951449b348911f8e05b3b9d9b426a8ad67fa49b39265a55229e57b3f994a27952ea9380e277aaed34b5986c34fa8bd92a252e5683c59e63bbd711f304e637a5be5dce86da5716eb8b772dab413c779ff535aa9436993073af974db77eeadfc702e3838446a706eb86849b2ac7b2edaceb29e3a1d8173c3bd954deb70a004baf9e158b22c02f59f55aa54eada9b4a4cfcf425442c79a4ae048e1c255ef491929ead8b0469949297e48c51922eef3d6d2709f6b8ae3bed9349db543933786fb5adb81c2d1e298788f79ed661a31c1e8868e3a5561ba675a72ddc09dbaa138a882c8250276dc7c46993eef49221b030440846433c311a22cb1041709640f23f36244c75ea704880c3493d9a694bcf49ab6cbcff984d4f0e17fdd353da1e2101c20889132324f83d5290deb2f9748f753a87e4b795cfe963dcc9e7644aadb613d7d560be9f90d460375edc387924d426b26bba07d22622bae6067b8fb4b123691ce93992433683f7485c4f0fa6753d5cea04a507eb21a534cc03698ff27e49a9a7b4dd4f3899eabd9749c9e0cb68f0198fdcc67b5c16a3f3414b74b0cce56129cd55c95878f290f75e0a07e19aebc6c5e22671f123f560454858104aff643d3d5811cea6c06af1deeb569a118e34c5f6707aa34a826ae222f6b51c8c94d27c3a4effcd6fd150580ec9c4b58aab33548dd7c3f9a44e2aade3308e36194d248ca618ef917a8250dd899f502a2e1eeb5af3d91a2305a5f43c329a3c8ce409deebd9bca9db565fa56d5d363192354fc990f88258c6283a79af47ebb08ed2ba0e89006330820b78eff53782437a48bad34b7ab04dfb53fccf8fa67f3acd57dd6fde47abb855a74b5dca7338264e9b8ca861a4676484886f4486c4617a8a132c45c283443ae3bdd791b8bc4752ad4624295ab4110993ba4e322a824711385ed7498a2ce03d2959c63d5096f58e2ba9b8aee3933a75cfad4a5de7643303ae633ea9938de93d1277b2a9215541080b7027215a10226614440b82e86214841641e88c827081881c23222678ef91a260590fb72ad283653da420fdd3d383719c5639e9da0369aa1217fdb3532a65c14420098a122c35783c52cd0d6ac0789c0fd252a39a5d43f388d46043ce783a673484cb101e4640ccf11e89488f073a6929acfba09a0ed31e15b489d400a10569d3b6cd1f0142ca0f96f3031eef3d926a8571dd69d3f429e707387eb81394d10f6afca022d904a136ed79463f48793fd08c7c98c123713ddcd7b40f08e019f9d0e3037e231f6a781d03000e3d2c61d44309de7bf98d7a8062d4c3113de4c0031078f8000f2b1e9c8c78f081d900fb0253614a603f7640c268870ebc243fca4d4a3b4d8912b4fd14264e787498f818e4b594b28c3b490c098e0cda2bd44f9d306ef7100946b6ac9feff8a5a7716f0d4d59d66d599665484878f7fb71c5926a6f75f426ad94799e8a926a926559c6a9b45cc4d22ef99491f62e3387d09465280de44b1d973a599b3ae7f51f4e992df65c4753966d3e25c4c73b6fada5aeb05738a529cbb8ee3d57eabc4f96e1609ca63225cb4a3f5a4fe9cda46fb8204adc6a2b956c2082d5f430a4fb92ad3208207e74f861d33a8d830f3d00e077ab1c7a88256f2af1b0e96e0856c30e36e810440e36e0a0c30d35d880430d3534f430c30d32e01003b539c0c045dbd2e9f082ad520896b154d2266cc445ffec40134b1aaae4933af9f868a81a5c98b0056e4810d9691a90aefd56f3c366a6f33e437c442e08190963628908cc9017090051e98790fcd178c96fa552d462ab5471cfddab5463c552a954eab878003c1da690018b2158fe47a74432609184f71ee7815cc8b8934a9780585400f9f1d6508015392f0a28ba3c41802682b86c015a75dcc6844a4bfda0b40ce064f2f9bef3ad7b4a02c8b2841201b892b8b05c41e28de2c0e38de4e8b14208f8f1d6a8628a9c2744c90b33a0c27b2f482524c97bef6dab4e732594e63612370599f72e29e474621041847745e18282134a4f70c2db3423428640809021ba9775df693e386a08c1a9c982908d9193f09e9294ced6a5aaa050ab26a8ad3b6da7a334274f7c13272a1c133c54da96aaf273d228255ee3e1bc6fd2693b4c348d47a5379eaeed08b17734e1bd4b074c70a37b146ab5f3de7584c72de1bd4b074a7891ca0fc7e2af33debb92808423f8f7ae3b3aea740565841f0585ca79ef2a0277d9915afdf7ae3afae9bd8b081ea5edf4f7ae21743ce7fb8e83c7c5773ae81c0fcb61630e9e9c417a8b43085b432541a1563b188b1547d4e275cfc429a5753aa58f780edb29e27ffc164c7f94e77ab88d04817ee08347a486935698088166402bd1ca0fe7f2de05c71bef5d3de0c17b7276cf4f9a156e6bd271da3fe972b489c76f1a94ae73d2c16382d2fc943271cfe3814e3efe094a9ff8a9af8c8041a99cf7ae1bec40ff686e75c400debb7470e540ceee06b56d5c6c4019e48fb8ce40a170f0de7583207f04aa888e3a99945c36e836ad7aefaa413f6d2b9494f72e1aacf1dee3706eb8b722235096c1089465100887888d9c59c675d4e94a479daef8a4564d52abdfb3d888376ddb98749b9612d4b524dda6555d27a86b49b08c2bbc0af25aa85df553d7d9f9d152beff682939573838720a3185117ef34e2216896562a1582a168be56279ef0201c6926511e8fac07bd719667049a8ec44d1e151b253c58812961c28254b4810382f0271446adebbca78efc95c1e78ef0191e4190001419e20b2e489a0105273c77ba920eeea0007966031e1593fb04e80022135a21d86a86248e74366891020aa705981e601044f0ade0f4e08f901c8ce04240006185654514502a6a0828a0da70b727a5092a45227ec88c47ec0521e0531243c60298f7aef0901800c5014904cc10c0f2481801641bcf7b290f2ac0c218487391ecf164d898ac32beead7027550e7752699f144af573c286c0f38ac011821171821dd8e83c95aea584ec6084101dd0d041c97b4272c0e23d5589c3210f213864ef85e1854feab48003707eb38284d8607acf771eeb6e5839b0c07b2fe55551b41dcb6fdae74e9b8d0f1f3e7ccca47492a06e3b61394268a8820484d08085ccf0ae0af850b790a1a68b134f87189c784f771c057e20000c6d9484c0e0440c19bc1a84bc80434a889036de4988901e2142b0f7b8f494080a5b7cea251720b5848d0d121c2418112efd54d37dff24cbb628ddf74f300cc3524b1000e3d24f25efd37de90d0d64e0a50b1f243798104d442a10e28290166c20a40517debb2020864f693bfe47a32286902053bc774de0bd4b02ef5d613c21419600e3d92ab52d3c5e8b462541e9151328eda96c52f4e6f5c6a4d65a6bad94524a29a594ce39e79c73ce29a594524a29658c31c618638c5042092594504209259450429973ce39e79c33c618638c31c6f7de7befbdf75a6badb5d65a5b6badb5d65a2ba594524a29a573ce39e79c734a29a594524a19638c31c608218410420861cc39e79c73ce19638c31c618e37befbdf7de7badb5d65a6badadb5d65a6bad95524a29a594d239e79c73ce39a594524a29a58c31c618638c30667c6da55346283f3aef25f1de1bc01312e2f2dedbbc117eda7ccafb54d1361f80a024da8e3f2de9a89576658b86f24994f826b4adc97b1704366fea3a2d95ea3ac97b971753b41dae8bf7def580f72e074c09d24fb49df7ae065c0c78efe2620bcd75ce84c98f126ed3765239db8a732d9573023a2dd1a9953fed4e7329df84e738cd75dcc96f3e48a33094ee522b229cf77feb948edf56ddc64cdd76da1829a531d48ad3d8d62812e78ff89c38eccae2bd0b8bf7ae2bacc8c224003a544a4b982c89a2648749694a9429539894983ca9b2240a9412961c28599693f25a341e8f5a750d0ac6f9f19d8e8f86f2a9934f8a89122c4c61d3760e46f25840e3bde7e35d0570e23d2235d67b6fb3c6b8c20bb88d14b44b1ca7555d4aa74e3fa78d73a78efdac521ee37e38bd05d39c70ef5d56debbaaf02ce97ed3b68d094a77bac97b179529ddfb4deb54411b97b3d36aa9156678ef69ae734fedaa0a516828aed350544a2a95ceb2928acbb156b97154c80096b18a4c1853b0c17b54c83ede53bdd114869c3696b1c46d5e85f226395758c6951444906525151745c97bd711a86d63c235142a270a4600c016852844210a50d001148078ef5179efd229e2058d9e30851376f05a183d8106ad3212d475dc6a0af6e3e339ccd469158642e564d97b9793ab08110e3cbc78f162851396e0f182d7842d2f8b9c4c20c1c34258890944308188f7b8c0032c6105a5d112c0580256c20c94d001291228cb704c9c76e2c3a5b6681da569bcb4994a3fab949cab2fe45ce1e015125ee0a86c0d95a433f9e1587ca7794a53d275b2ec8623c8f0b88d7452e9521749bc926755607487ea873b649e119c3032421bef3d0cc90d86653d3d58c76915e6794a03719c9bf7ae21de8583e48763e9a828a91cce53f13ebaa35204931d4ab0a38c9cee7f7ca7d39daed4f1c61bd581005d0726c21d8f8469227044d8deeb72ae88408720c77b244e63363a182988f349a495544eb4b2c5ef8c8680e9b8c1888e27481de77d7c561ca74d3bb0044bd20a2cc152b4c2f92928540ee74e50bc6f4285a79f94442bd04a96c9b93271da64e2b409080707db1b39ab745c4a5382d9e0d50db52bdf358e33c78ff71e0a95e3511a0c9603c87bcf7fac874bad4a405a7a4e5b9120afe5bd1b4994048bf868a87acd378aa30e19070fde7bda4fe904a154aa1ccf6993141e9fd469eba86419f75de372ae704a9b5771d13f28dd69dd0d17fde339bdb9e81f94e609c213384ea3b2ccea001066f0b8d3919ed2a6957a92701b89eb4e3f4580a0e53d13a74da61ff4bcd76d9a89c334adcb3cb77920bf5d1f6481db48fd880fac78afe37caab4f9ee54fad1b66f847ba0910f5446501a8e2d8f4422f1536a48e7519df69b0fc6a13c5086f2401e55ca9ef75b9394d7a2753fa50325484be17c12da4ed77ee382b414ef7f890bd22a8ed3284eedea8d1c2e207eb072f9008027814a3da0400fb4788f0856fa7eabe9c10e6f07637813a79de0e0dca07497d2704a59e64f5b5752713edc8fee74df917395832a1e0ab56aa2ede84e2fe15027ddf9255aa2c8b9d2a8124ad37689f33844301b36ea78416c2cc186e8bdc703376584032f4638e86e90850b86f7ae172e2137e0327a3668c3063d1e87884f3f6d3b07b3e93a37dc5b2122e70ab3917355c399f82931f1d34735c05b6840c60d6fcbd5c2688d138cd6c0f1399da675eda7a0744751f14d9ca8a474543f9b13254c543f9b93f7ae201790ebc77b254f6509187821083c18a20247b0638d317c70a3440c304fc8886066240236b6c04cd0c49582c20870a082086afce002154f20c0831641a403c240038d224fa0e10134e08007642c31400e781480240e98910c4ca3185871c5bc77c15ca22b34828113231838c90215485ab8d6366d0788173841ea3c87d24c5c60c6d39d5ea23bbda4a7fce6bd8f96326ac10bdef5523e2794f64d04e9270f8f2e3d2fe627e68990582fe6bd8cac98e782f52283d582252345f7851a20d221e692917911852cebcd7091def52c244443582fe6c8cbbb9e6559a1cb8965c558976585609ab8accb8ab9649862593056ccbbac20a4d0050353338359a2eb126961892ceb9ab1a470593ede8b25ba42deb2067059d62553e5bae1b22e18d16525e1b22c98cb42c29ac1b242978c0b5e42312d583258560c32214b0c0be6b2ac2b54b22ed18c0f7a01b17064ac171f4248ac98eb12c5d0cc7559445cb0160144f10704ae277a17062c51a846f47259a1f7e2006b08d6bb1e0d0dcdb39e25b22e8b0996cc1584655d2fd715b2ac6919b1642c20d7755d304aac21d725ba2c1822fda84106082b88101bae2eac97ab064b6485ac7749b9b0194bf4ae13ccc37aac2b428f0717588f88185c210bc612c55841ac9017d72593852c1cb2ae4b845d407cd4582f961503457107685d333032976559568c6565d67501210463f9b8442120ab876b6559a122968f1f972513635d445c3a5c3a5c39845ee8592e5830d7650511d18444570dd775593096e85b3e7cb07ebc5cd68bd5c2b52ccbb26eb88c80f9e1e3b2b60c9098cb42c292b1acd065892c27560e57be70b87e5c31d78b15b22eebfa71c588acd04bc8b2ae15b26a2c1f1610cbb28e583a5c33a1184b46645d969559168c0c170c96e8b25e4456be7e58a14b072b14ba2ed125b2f27559365c33960f4b467459969559395c3331214b2423b22ceb62160d41c8dc848478b142960f4b4483e5c347f643891b74b00020b2ae0be68af1164d0cf08713cbbaaccbb2ac222fe6a9de953d2c3caea41e66858e3bdab0428121945145d301a9d031c79bc2c30f1e121470c323a1d9785228708230a4f0a0458942c700f078c2830e5028820e1c60a6000d46b26e8103978e203e5c1e662c4b879587edd9430216d3e3917ab0a043919e312e9b3932a0d960300821c4b069c20e3d18901db019843c315ec8f27a5eb67898488af742efbd67ed71e58814b80133c5cc0f35e8e223464606666606e6e54728071f31a197500c4078a0d8e941a6066646068b80b8608980c42401a40b0509d1bcc0214504bac0b470c5f810d904c90197d165c60a902eb269018a8bdef0524564c1dcb4a00b92274b46525ca219d1132254e832c714d64b36da8108282e910da1223ce822041d5d769032450c2e24a1225404145574a9c1c715203044a04b93185432dccc14badc743e8ae8e18226c64728c88b165102ac804246340a15995018a1023e82e8c1143255e8a285ebc70b11a3982c3ac22b7146142fbcd4cc349901026609511031390a1250a08828dcc8c2c81441f81305bca0cb8fd5ff428a20d2052b8d2e355828666232cc8c4c0ba1ab5344288799263150e804a122e3e406264d667c380142a5df90a0cb0c221b3b0393bd100466e607931e0490812e33324e74d80be8f212a279b1609080997939021344ce103f563e86c838819989a921c8121f3e88767ccc00030e40d820431032353b538080624686143383ccab2325068828c686972c647d00110dc18888f111332332f27284081361bddc10e2e14506e843868732932334c8ccc8e0e342a164e70795a911f920f20166035d826841b4e44588171d7cf820c2c18518ca218a2e242356e8878a88422f04e841000cd0526694d1c60ace3063031750c01305e0c269f99ef70860890060b152858a94274638c9f0ac01e2070060a218c0608f2628c10843e0fcd0830d35c48871031b68200348301922cb2106203f605e70821278600c0d5cc0021410238c2a35438c90be88c01e5988c20e401398a08292c64516a78f736426668c2db4b83e7c0007196364d9ce00c38f1999181c6e4863044bf81e65c7089d264c24804502aa103247458119656ce0892b56aea50106911b6d40c10a0e12eb2306e603072801082af000062c800013908004b288b283736408100b0bd715ae2a88f0c09870dd2132c245c7cb1cd60fae37ae1ef8e001901d5c6e5c6c5c2708997169110dc0f2412687171c82d470cd70c560c1307ae145c835b268442d5c3f5e662e1f3232574ccccb25b2429605f382b810ba2194822ea22bba889ec00481593152808226035d5e5e80c400f10328441488a219805c8003300ae8227ae24386191c6890a28b8f24440108e9f0a3830122d34406c3cc848ed030f352832e326a74816109287cdc50184f00224797973dbabc00b1a1075d80743da4a08b0f1a5ab8628ebc187969000262f85143175188ace8e2020f2ef0102a32322243c3688f285e8490c13137211742373217e81282128dc0ccc074a04be8078c0d229b1f31648980886c669abc081193048c0d3033300300020310187cd0e043869824427944016343e88c285e66d0e58701887eb0d20f398832202ec08c4456a8484889484a101960ae982b3137c4ecbcc4d08205f323f42202120a85ae504c4826e46306075128a64a8c1017a4cc8c626062ac508c888a8c882c991a423740e16387170e7469a103508c604437c82c894214b6e60fbb0a7ccfdf6a8a65ae9e6bca533023dd5cc3a8e38f5a7b14505fabf6db62de21fc729f20ebff35e531eeef23d5d80411e359e1b4b5622ebfbe2590ba67cbaf9f74f66c3909348e52d67d7bdf95436ad5e071ff7921bfdb477b314d8376ac29f7b24e4f7fa67304bd6e6bf1fcd6eaceab9422e0f1cf8f35e411fbdc6b442353db7187956f0eebec2188b77abe75dd18430d3708fcecf9631d2df7b0620d7178ae0f60abe9cd3bd33eef9d5a9f41e3fef0de7ca7197f46b8f1a7d56218bdc4654ce8b7afba66ddb997df037ce6c9a3943552c8b7b71db8926b88b98d599a7054dab6c4c9c581eeed8ff26f196fbe7d6f00fbfa69d738eaebabd5990cbba18716626827859eda31b4e4f37e5e3194f8432d35b077dc9c7bbe2d9c96e2d8e4ca00d41542fa25fe1ec37927940b03145aee2bbd74e68ce1f4179810c67f73c4944789a3b6008ddbfe6e7bcc106abf6192ab02d4736d31f535e31bf3c7445c14c0fd475da7d5114eaf693565e151e226cb7a2e317a8c11e6bbf59f36fbea27c0a18d555a6e3b9d326209dc3b3db4356e3d3f853787b16fc630eadcbdc63a6330b096dcc208f9aff2c78bbff0bdeb2829fdbdea787704e6aef4677bff9512e64b21c0af8f704778e1de965368ca321c1c1c1dab8acb8b9c279df6f318ffedd3ea2ee8d7d1ca8fb1971e73291f702b85fa732c67ad5edf68eafce6802a35ecf6d78f23cc50479391ab0153c2497dacb45f79bfd5a62cbb18e061ef34767cb5f51bd7dae4e282620b7ff77c7ebdb9967f8b5b219e74e7daf5ad7d622db09db7560fbbc6f9563d955c5970697ba5d1db1aadc41e0bc9e59f9ed34877f4d8da2bfe9ddafba969bc73ce1b2f2b24cfd8634af9b711e70caf05583b758434d73ce3ff325fb914a02bb53f632a259656ff4ae54a40ed5b56d9fdadbc478cb909c7a7349412242e04c83fe98f3edfef738c5266190ef756ba2cd3c2b529cb88b8aaf0ffd238e1ef34f3d0eb003fc77d21dd3d6fcfe9a7918a3d6bcd9dc33e35c73573f8af29b8ceb5724eebe6b4d7ef995c52f408f39f3857af77be749bb20ca7ca1585d772d6f93be737cb2baf12171413e6c8618edfef58e3fe3d57976cefee734a6ab9be3f475396e16c6b8f8bfbc5bb7388e9d4512c3da2b6706faf33c5d5d7a86d1b932ccba34308bdbcd57b99a5b63166a157ff25c6d7636eebf4446ab00031c7197f9ff9be9d6348c5ba82bfd37b3b7ddf52fa3c21b442fd3c671cab97f0fbf869095661e62df1bcb0527d39a6b3894585ff71ce14c30b2fd4145f130e8e9cab52add2dbc8d9756e7e7ca753e5867b2bd60eac29688c7df4f17a08a38fd943296cabbfbcffc2782b94159ab2cc5b51a8316fbbabdfda574be1ca8282853f5b2fb5d5f6dfecfb13e4dc5947eeadef96ffba9d00fb9f72564bedc6f37a8d07ee73dba96f84b576cc7113f8b593434e3fc4945acf84deb9c6777bdaa1cf99cf25ec6e2bcdb9cacd67c65e9a707c56db2fe101e2065a4ac015639d7fbfbec71d234f42ef37fe18a3defe4b3b2d1220b45457c96bd5fbc61d8f10f1be927258358ef2d26bca329c27d61d7b7f19a7ce38e7db25ce502c23dc1c39fc1d42ee7785379bb20c07c72a4295995e9a2796dbf7eb61cab2034ebe71df1cf3ecaf87b40e3be3b67b570cb5cc986b22482a2f9793c2d9bbcff90ee1465c21ce5bd23971d694098b0ee9e3d5d6636b23fcf2fb3978a6f376fffdad36ca8ee5e8196efd7b977b6a2e7d1c53d75a61d493fa7ae18edf1242c7f656f837bd3a625f7910fccd9b529f798cd3fa798110f9b432dbed6de694caff03ee39e736f389a9ef965a1ff8bc2dfcd1f64dadc6757a0b0e2c6f9f15db5a2b9c51da37beee957f3e77ce50ef1997b07a50bdf6f9c36b6fec5e57cd03eef7f4b7eabce1d776df92b503aa2bb49ddb08e7bf306a1ccdd2c1b593f34d6da754e26abba05d32712b5596e5e0c65865c551f6cfb7bdde8d68b984ff7f18fbaef8661c93d5869f1f6f0fa3841243f9331b5c6eb839e5fc760d658f4f583880bdda1a719470f3dde7bec1e655db1c31957c6aefb129cb7088c02936100994eae754f228d5aa2b3961d9005b5db385755bfaada6bd06d4f3e9a7de15d6ada3bda61f6d6b32854583de67e730779c2bb69377130e0e0ecfcde63b1dad4be9d8f0dcf494efb830e15e4525cb726c6e2c29ac352e86725b0c6dfd5c67db4d598653ca62cdc046ef2da77142b8a9c7560637777e3bdff4525d7da6a62cc39962c5e0eacfab87137f88e7bdd5946538482c184cd82396d1d2ffe996389ab22c68ebb20c27cb7eb4ad49d0c693dda8ac1774fb7d97f56b4c79ff1836b1a962a373a3d2503a8d6a926529df751af537cb0595d748eb8f3d734a63ff2df0f8fb3de187fff26ef16781867a6f783f95bd437aff0a7aedd456ede1e774d7ee5550e1ed57662ae3febd739f0219f384d77fce27de3c7b14e06f278dfe4a197feed89f007e5965e7d97ead658ede04fada9965c4b64e4a2de72598dccfcca99efad65fff2681cc9bf36db98c9ffa5bb51a784fbc3d8e597b5d35d469f8bb37d6327a7fadfd368fe05fbf3df7546b4eedac5904fed22e35f5b77a18a9cc68481cf1c5b262bc33c63187c0cecbaff75cde2e3fec170496db4d319472faa861bf1fe8bee74c27dc96538af93dc3e28aa7949446e8e9dfd60c0c3dce7a53ea6ff6bbd73268b711f2b973f45b4a5c3db0ebd591fa0ab3f533d7da812e2bf47b52eb27d6bf530e7c6fffdcb66bbbafde7f6e607bedafe59eeb1c35f5930ccf7bae33d6e87b8531c252b7c6d053725aefc497eec9e7d440c4b3768c79cc1c76ce3310fb9e3153893b8d78660c70acb1dffae208bfd6585e60db9b7bc61bc6caa3ee16d839d22b73c53f57fe7705a4b7705b5f25cf36d61b2960ad95dd57796fc6f87e31bcb67dd708bbcc594a3f01df25ec5a6b59bf8e504309c47c23e6d7475d71ed1886b1e1c77e73fefda7df5e0e06e61d5ec9218cd75639370eb7be8074d36e6dacd3ca6bff34e11049629353a30ae2c150aa9fd34d9671252b5604aa965b62ad7bd550f7a94d5986c365d98e05816aa5c5fd66dba3cf5b4b532acb70b20c27894dce4d96a54e3acb36df9d6e5096171f676d37c698d34c3feee2726b6f8497cb8d71beff0137fe0c73c49d6e0f6dbf3818a7312c3746580ed059dae86184fe4f6f236f80a5516a2a2bbdd794655a571ac262c0a7bfde78ebac35f37ca329cb98dc585ce069ff8fddf7cb399e329ab22ccb9828b1b6f8596f8cb5bf5ce7eaf3d7627e3d619d194fa873cd3c8b5c37e7de5a4a3fd7ff5e2c2cdefbfaa9fbae57631db554e90a6fe18e10e76bb5aeda5b216bf5936f6a2ded58f205cc4cb7fc1feb5dfb9c5b01fefe3c29f5345ad8614d40fcda767aabee55ca1d3f022aa414dbaf73cf37c35ec5e537c7eff5c772d6c90fc0a59ef7d38d37e4964f2abcfdbc5bcc679f9d72e9a7f810c78feb867edf7ebf145fdeae318f5562dfa58e42533c27bd5ff60c7785c2d20dfbf676f3da2bcdddea02addf73e3ca7d94b2df2728a79bee4b61ef3f7edb0db0b3b792f3acf38c18db02e01c6bb670ffada7e6923b41b9d452728fa7fe3d7f02e08ae196f5d36ae7cdbd09993b8f98e62d27cd7807cd4bf3b5b5f7cd21b5984bc4135ffe61bdfacb29b74cebe38c585adbbbbf7103794cf1ee16674dfdfe7e15b59610f61d7bbf98f38e73db3dfcb4532b69d45ce49bfef969ed7c738937aef9f7deea0e2dae796a263ecd5c436eebe5f6daacca32d20aede79e6b0db156a7ffb3ee1939ced1de9484b95bacf18756565ff34fa5f672dda7fdb64af851bbc7bbabc7f7d24ab3d632f9b55b5a8e7196b9533c0079fdde1a6e6fa18614df93debe5e6df7b5167b8b4d38ce5e29d5d97278f7b43e104a2ffb8e79f3ba61fe7963bfe3c7fb4ffcbfaf72c6ec69b713cfcbbbdc9077d8359e1c7b89b9e49ad68d279ff3ea5f77ef31ffeaf3d7f6df19abc6d74b3d2fbd3e5b597d8fad386ab927ad1e67de4b707e5b27a7d14fea631600ce5b5e9fff8cfe6349b37cac37bf784ffde7e4932ef16d8779ef7b6b8d547725eae433d28aa9c51dd21c005ffd873cebfd3dddf92651359e9ace0de3aed2532cd4434837cd7043aee995cd29a5dd479c63ed724e2bbdfa6b7fe5d3f6da2d9755f2ae3e624afdf5dc7b1e5d719d17739eef8c9b539918e60ae7c6f157bc659c727f9ed06b9ceb95757624ecd47eebfd2bb533532b05df0eebc51bea1823ac304abf567fecb9fe1befcaed4eedd2ea4efdd5b0e72fa129cb521e55e21ea86719cf4aa51c287e7efbb7ddd6caccfb3cfd92d6959e705ea3e4f84eacb7b75a9ab26c87233abf14decf3be67dfa6e63c4ecd36b7a2fa7f6d7dca9df483a7c73bbb9a6f06e3c3fd626ae88939a2d9c5cc34eabd67be2de355a44b5587a1eb7f534fb5a61ef9a6d92ef86f2e38c21977477ddbb56996cba3f9ff252bb3d9498d62596ea98ef9697533a77f557c9beb2cefbb1e53b421ba5492691d0763a31be3aeafcabd57eb44d657320ddd7ca2a2db61cceff4d59a6d2b66e4304ae3eef0bb59dbe5b0ca9a9a475a421e4acf9f3cb67e4f243be4d59e6531a8a97f8a9d31d97654570e4f7f9dabbe7be5ed638ffd74add09a5e272904c1da1cd94d2ac71eef8de400be19e944ed9699f70e31c899a6ffa69859d7e9be534655929cb9464f45aedf5f5b0d70aa7fda62cfb21ff685ac9672b9564f0ccbb7eb97fed54c329ad29cb4af4daaeb59d1ac3bd65c4f59ba6dd53fa2bbfa5345fdc3d3765d9166df321d5eb2dd63163ae7fe5136b53966d1d4765e5f0ca0fef8dd4fb484dd9dc16f74879b4f56bed3f3765594fe992d6b36c476ebfb3b6337e9f7bc7389bb2ccc4ad54a54dfba52cc3c9b1d9a2a764191191660f73e6b5ef4f7bc7d394659b36f15296e16459f7f3af60ddea07889b239052befbcd714a9efbf7d09465387805c44d2975cab2ad53c177fc7c23ae31c23ab7b5d91a21c71c39adfb4b5dbdefb508f0e60d21c619431f7d851d755aed2cc3b18620b2c3c6cfb7c65df66f7187515447ceb0c3bfa594d24a4d271130e497438e31a77cfa3c042b33af3edbb975d533563a26febd6be9219e1a571aaf10cda12dcd3aeeeae5e75d632f0795f26b1abfce59fe48a1024471f038e18d7ac379a5a6989ab20c47c7e6089110baadf34748bd9c11f30883202dd57e5f38e1d41553da4504841c2f847ac30dad8db8a4f52ca21f780871af5e5bd927fd306a4025ad2f21f281ad5af7dc358f5acb8b79e77d522238ee8dfedb8fe7be79c36eb588dee0f7fe5aabef91e6a9af366559f73de835637cfb8757d29d6737659949c4831d682f6fcf3b632cfddf979bb28cd3543e221dc02fb3ae7067df4d3710e5a0de3d6def7072bcb5f6fe0b911b70de9eb186b2db9dfffe6dd4bb23e7f95ffeebdcd012a974ca68039978946ac55373639d216283ce5deb19221cf09b61c734fa6e7bbd4159868313c50607af541a8af500d10d748539c619b9b772527cbb10d9c0737c3d9e1dea2cebaef3860c510d62863d7ac871bfbd7fde6d6e3220a241e55dd7da399cfc4e8913e526cb6e2c0888d6d8d1f399e3e450e2e96d9e019f18664b67d6dad27ab30c74fef7fa9b69cd300679c33cebd6b2ff4839e7a62c838194374a2fbdbf2f8898f6ca3dff9fca8ca17641c694e39cf1fc15c21d730bf2f4b2ce8ca1b5d4decd827ba9eddfc72fe3fc98c215609e73fddef20fbddcdaaaa05618a3c591f74cf7d733052214d09be7ae5e6accbddf1146407402d9a99471471b79cd326bd19d17221344f83fb6daf75bbba7599620d3c933fd31ea183bc49304ff5edcfb84fd5fc92bdc6ae8fbbbcfb6c2e869e6719ab2acf33e5d88d2d8fbde3eebcd384a2a3d1f0196d8573bbda618735ab108b086f5737babcfba56fdd1b89647ebe1fcbe4e0bf71485605feb3986dc5efbb3f63775d21c170dc52615c5a6a74e47d8f8154a5bb1913206f9236ce2e66fc4108160525a7b8dd9eaabe7bcf60319c279add4d0eb5a7790d7522aa94467e4eda994dd46effffe549bb24c55c229c28a8d3cc2261e71a3d250a878d4de340788ccc0fc66cc7daf7c471f2b2f43e48149edff58e309bbbd954b539631014412206e98602245f5c3451d80ba7adc739d5d577d2f356559c6248a88037362fa65f61b7f5d63ed36106d60f60871ff96de7a6de6119151f3c4307f9c719c11de3d46c593c6dcf7ad7ceeae2b14220dc47d75d41fe27dfd863367a043c8a3941ef3cf75951b0392cb1f77ec5156ef79a6a20becbee7dd76f219a5f53f1b406481fb2dc71877bd258dd4ca0af04ca7b6b5efaf6f94b44721a2c0dff47bfd6bbeffdac8411189d1e9fcf8fb9af3ed95e2b94434810bb9e510ea4cabbd7fd7954802fcebd9a5dc764351183d762ca5e75a5e8b25c526244460507dffbcfb573c4d3d75fa59864345f4c5fedc46aafdc6fc5b696704f2af7b7b8e21854e8820f0a3e43d623b29c45ac26885c88b4fa7bf7073396b13a22eb2ce79464cbdbc14de9c653829edc4dd1840f400286ff67e479ca39e1e662a440ed0facf1c75ddf6f74bafb52a206a40fed556692fed1c63adb3e72930440c9097cfeff3aef14668e7e7c272b97faf7652bbe3cc5bcc1e21dd724b9f3dedb06bb135d752567b33fdf5739ec59f73d6bf7d95127a593716926ab929a717c66fe3d7574c9afbeebed77ba5fd305b01efc77d42293bc5b6e705d05c318637768da9b4b82aa0d36ae9e4fd6e9b7fa63401b26a7ea5c49ddaba7384088872d7cd67c51beb5921e6f1a22ab684557e3a7b9c3b579b6d4c9c76626361213a0085d4ef3badb53c4f1e21151b9e9b2cbb4189a8f877d3fa35af78d2c93ddd229a42fb291d254a84104931441445e9a4ca918289a038a9723c4f693988baec10da830bf25a7808e97152e55c89c243280f1f1fcd2344280b1c16b81216bac20d212b9470085501ca284485184253d0c235d4161292029050145e0841a17452c5107ac294b1c6d97da7bfe67cad29cb747cfc4e96e1e004712537555251b2ece7a4faf13c369ce7dc046d2b4efb8d47e3b9b9901072c2975c5e7fff87dd63ec3d1edecbedb7afba476e879a702bce344fbfa3e59c637db3448809d44afea18f787e6e25c5a62cdbbdf4356d93c224b4045ab1cc387e19bbdef87f53112125f48e21a7dcfeccbf97309ab24ca57fb20c27cb0e7684478920bd6d5a8692502584844ee795d672c8f186184b2e89d0119408ddb14346a83bf25fe58d35631d3fec382062a808d18e2ca13a4244b05f5fcb299cbc4708ff265273034343b0f2ef1a37c5dfd3e171f41042ac3b87b26a3d47f7d2563a73b7dc46cdad1c527f0ea9fe1c4ea923ae7174aa21d5dff64caddc740ae1c6d8adbf70e33e37a53d08726e7e3bdddc47e83dc74098f5536a39b47f6a79a1fdc19e15d70c25deb67f3c6350c807537f5d2395704269a1e7706c9c69eeb6c24aa5f711bfd16fed19f6ef2daf747adb83100fa68478cb4a6bd51ee61d81423bf032f32fabec114fae6bd581e47dd27ced96d5df98650e309f79cfbfab8f12568edd88dc7e0a7186b9db7eff6fc3eeb9e9b4f1738eb9ff4f84d8889ae23af1fef3f7a87bc4c1a6f5761ae3f632fbde6f806dd77dee19e586f3cb1e45c80653f2ae2ff511eb1d799d0808d5a057cdb78e1a5a8f6bbf34e8df434dfbcdb7fa1f235fe3ee5ee5bc5042d9f39eb83b119a41bf71e33bb3fcbec399ad0c4231c890db6fffa7bfef1cb9244008067ef688fdeeb3734933ec2f88bbfede31eede7baaf776419594c30fa5cfb1cb7e6f0ba09dd75fecb7d5f1db0c2d2a422ce850ff4d6f8497ce8dbffc406805b2cbaaefde924a6cafff2ad8747699a5b418c3ade94d41965ede3dabec917349231b2114444d6d96d2c21c69b5f082113a41c45d7f8ba5ffd57a1bed172113744bf1b73febde39a5df97a0da0a3dd65c768afdacd48b100966c774d27aafcfde66e9bb94075283f3a9a3fe32faecabad1789501a157e986b9efbfe6ead855984466073b53c632dffbebafe8c45480431d6ccf9cf9fd3b9efdf213472b47eee5df5fcffff5e4d591602ddb7a7f7622ea7ce796b5396a17a2a150201f435dadae9fd57daadad29cb362765843e60e39cd55aaee5f5fe7f6fcab231426740334265503fa3be77eeeb4d59f6c3b1f494a7622120e4811f61dc98d36b758c3a625396dd843ae07fd652e65ae7f7d9d21be200e692f7c92f9e36e7babf0d946203a3d8c01d1b08c5063ea9b1b0086d205a7831bfbee33a73aeda94653a213234d69fd3fd71acfdf31a9f088dd16ddf76e7ff3fcd77d36a80900636de75d289f7cea62ceb364df5732af594ce321c2da10cd0fae3957e729ef5bf369bb20c6715c280f693deabfbb59afeeae1054217e052ebe8fde6dbde5bfb3765d918210b50eb7da53272bda3ce389b7c97d23e5242158830e3d9b7a7b2dfedb72f410951a0df5ea3c5127a7ab1c4db9465abef242446ec36ef5db3bd38729c532bad88d004a4a598d7eea5a694f7da4d599624cbb2ccff947ca7734212c09f7f08bbf7dbfb2d51fd8473e3515dc7022314469ef24e88f1d557cb3a2f1891e35b35975bce3d2185a62c43e98d6f5e4a962d097db1bdb4956b6efdd4b1b1627344f7dda65151adba5f5252adbaef59968050046e9c7f563ef9ed93634b4d59562aa1b64e55e1220401fce7def7e73d799f196a2fa084ba083de052dc6d9d9bf7cb44c801b75b0db19f1d6ea827a5a62cc38992659c164d335955841a1062c04e888b1965af9d625b79b67ff7d016ddd73b6f8e17577dfddea62cb312d28246bf358553ceebb3fcd894657e53052094859cfd7fb879dc9ac20e61b7811016d9ce0a7dcd7ef69ffdb413085dc1f3a799c6bd219cbce70a84aca0f5fb0c39bfd35e083db4ce082d004aaae985d976ceed96500112ea5de9ec53d20da7f7a85002aea69cd65829dfdbde6eb59fd2f14564d94d014208a8d45bf9effedc7fcef5af2267da2bc697e3ccadbdfb0017c758bbbe515be86dcd54dc6abfe4b94a2d6b841b4f11ed95de6e59adb73bcf2b059d90e2b923fcddc61d05d7bd432b65c7fdeeca2d14f7f2ede7bcf0d74c73aea12eb5538ce1ec53c2dde7a47b64eda3a6d667e979f577ea51b18edf576c3bc5dfd63cb8c55b5fda71849d7e2ab3d033aff7479f25f6356e2cf43825ffd9e26ea39cf50afbe7f8a1de387adae98c56e091da6b7bee315b9a7315fad75bff4cb19c3ad70b772e2ac0aaabb6b6431a7596fb4f81c38a739cbc73b9e3fc5c0af9625d67b693f73b29e551b0fb4b4fefffbdd75cbd8642a5317bde71b690572cf313fc85fc6f5a21adf97b7e9dc039e7dd6b4ef1eddad28bc7ff39e22e398fd7fbeb6d132abd95f3b8abdff0636b9930af9cf6f2ba2b851dfbba045be3d73b5ea9efacb45725709ceba5fdda24eccaf9be9efb6fa1afb522816a2c219db2f6de67f447b8327b19edcf9fde18f31d9372eea3e658726da1a446a81566af778554fa997911fa85b943de71f696663aed98bf668f3fd7f84ecaeb9878d73a63cd90f76a8940fbc4985f0a37debeee2148e8a1bcb463d9b79e938e1a79fe9c66bb73fd1fca39628d54ca6b3de774722f07d6f9f3f8bfedd056cce3e8d9fa7c3fdc19d70db710babd9063d9edecb9df1c83c065d5f87f69efa79057205ce86bc5bc7a6b21edf407bf5beae7e7d56eb8a184445c3e88374e5b29c6345f3c778703ca8ce1dcd366ce33f4d69465a953c977fac8f506c7b766a92fff7c5e9af1d503dba1fef4d39fbf9f527f1e60ecebbe30d7ca6b9df8ef20779fb1a697672c65fe5d075957a861f733e22f2be539f0136e0de3a437f61d297743f78f27e7967fedf5cdbb8d4b73941cd73ce5b4916b36a2f7b6ef7e6b86146aaa71e03fce5bdf4f67ef5ff27c037925f57e6ee9e5f69a631b5cfb35bdde6a3937f5fed680c7be65deb577bfbfed970650f69c79bc7ac635f28db16abde1e7f8773e8359efdf1af7bbffeef85619c4a9bdb4355aecfdfe98c600eeaaabf7f67faafbce30f85142b825ad5af71af17cc1f69a7e9d3f9676729ca50bbcfc9c7b2f3bbcf963c9af16fc6bb9cff44a783b945aebec8b0578472971cc7ef2eca35f81edb8560d6f0d9c45a8347169c59994c328c610020061291a0100007312003048241e8dc582d1905cb691bb001480014c8c6ab44c2e954983b11c85411404410c8340000084186400214649c6b207a5e84a4baf2e4dbb773186425f343b46284b55f1c9f21b886bb008b38f7d08ac36da0b9b2ddcccf4626a462c3321d4c0a5e907996084247703f2563bcc669aeb9d820fc2d01f4f3d2ec45cdc4b1dd1addfbc9d4540101631ed342da08654c64a3cd2aa43f32a011268a733781105e54ec87e1012ea6a2010a35e4dc1e5f48590b21f8c13d7c8d813cffa9761380a90f9ade8e748b6fca7e817c810bbdff1d0c0574eb00664067eee8114798bb792fd313f41cc0c3ffcb6c0c88d100cef1dbbdf2e2ea3087dc36a3a3bdeb0e73c199b6325f1546c2864b24bae768e9372faf7db8eeb0265e490328516ade0d230a22bb277bb6ae45c6b4936bc946b895e379b8c516fba82afd5d83e1d4b92286c458a7eba4909414a92a32ebd161e74733df7192d49bde98f25774a3e18c401f59dea3ca4021ba0e18e660a50f3212a7db52534d9cb47584105ee9269629d41ea95899d4c0da4657b898e08f00f8bd7be30d6516a27b1d2a9d802ea16929b27f190cd8f2308d461c755516b29724404d358113e20573fb7d42feddc2a0d2bd3d3361896ab13ad0c8a1ee4fe3f8cb792ebf2ccf73c6f1b9ffffffeb816393df14870b5e0ffd1731d01b43925847d740bd3f3af2fc2ad08a18b72d456cf59bd09846a598ad0314420143a9b6ddc9f8bd0eeed0a8aefafcfa6368e8b13f762f7c810dfcffbae72e179ce3356119abd2beeef63615dbcdfc8a4defccf5da55f44efaff42eff60d9b7c952fa11b1f47f94f3db7863678a40c898bd08e76c595423fe4159475df1c41c4df7131c99b3202107efb1818a0134eee626fd50ac14c4bf2e88d5c4b77994bcc860f5e083ded4726bc2db8c356f50c6dda8bcdf70fccc2bfdcdfb0cc9b9decc4f9c71857f9f8d0f4594810f4acbeb8e5fa254748bdd4a12e1188f6f0abcfe49bdab3cbcf7d81aeaf4beca0a1f2872e326a95bce12184c68464aaca381a13d2a88dd9a93c9f4d388df0f93b14f5a0942a1df1af61d6e7239685210eeec32e95126aa6fdd07bf90bcd60faf29bdc2005231873b8ceac2fb8766853079d8884604dd88959a2492d67c44ce0a47b02975e59bbb62a27cd61eaf32e700e5be0700e621484a58fd100cfd1cea9845443f6d2c43fa204a10891952715d05a0608ee588e839ccc4380b9907e68aabcb40e5113f65b94f97a280a17a5f17613a6aab440a22f57b8f42b682d832f5c3bef15a77e875b65a5946853250a1dc18b94428a0d292026c066c91c2624b707e6a72a3f10cadf55e1b64500427915942984ab1c41997a2e3cf43f173f57a3101adc9c6e539efbcff33a303a9687038eb31a624a2134339de4d6a6b430666d1b5dfd8d865627031d26c678371bf463d0b0ca1fba37145a1b12d15f33c1c58a7c8d76d13f31e7c82bdf6c7b535c40fac7e24e1b3c4a752bf4efe2eea1b6b9f277e29fda324df57c26f6028e21cbc94f1cb8e15e27ef9dbe0a20ffdd4885ddeb81ca9cc7b9f0c4e515316f569a725758065e530691fff7b3e673f83288686d032ecfec2c4d96dcde4c8cf4e4f0094a6ca7c34bd45bd20e185aa7bc44d52f3681dca9af9c7eb68e54b0b60b99a07ca669db7a10242b8df6a05bfd16eb69f0e77619dc60968374c49c7da6877fe1c9208d1681de868345d851aeda6f1aba163c4dc68d6a6592e1b7354e6f8d6745ceb088e4e81919a03c1555d44ae1e8ca68616a2e3c649d11fac461f60ec5d2fc3d31c36dbbd9a4536f483440aba0681664f9e5147bba825305267770cd0af99b6ce0dc9617b21fd429e3644712c12e3183d09d848099612c4dce3fce6aa2da1265f0e4a0a66af8300368ffe9c97800e022540a822bb5461a2f8f1f474bd416453927ab2f25148b24e654690c6f7472a066fcd1de881d6898a959f314a8e827fd4ef6f0c3ee6c4317cc6b5b8806724fcb17cddfe18ae2bd3db821f2501cc04b9e334a6fbf5a85e73f03a84f9fc9f22601b5e30feb1fbfb6eccca6697dd3d7dc9caa2a170dd5569f913b3c14aec7e8688b5248e28796267978cb8f1d5d6ad5127968ccca20d25684aff17c3a3febf7318df70d4d95bec770b33ff58b1a7c83745e2bee8a71297009acbaf97e970fda56eb9f0ce6d89b6eca0ebdc6d8343c93b35a36c472b129e9b327e341cfac8dfb19a9dd01c09799411f36e61dd1ba06b936d180679e2d2e1240cf432f88fd4e45b932c2783b6b92256a49747f23185b9b4c8204ce65bc7578d1de21e4506abb690dc7160f788718a6a2c34707838bed73b046e50ea2394707299c139a34230370cc0ae85dc4cccd1a24a1c7ee6d51928f44fd86d2ac56c37917142f1d173bddb6b9660656c3295b27cd63824d3e6f1682ae81de04a80e9ecdd3f1b96378ada8903d1335d8d60c336f8a38416b2d8bbf11709308fd6b0ec4ac293fd72a4065432d0dd53fd9323003469b7e20bc8e7f8b85bd768eb7aa061914420cbc788f8f9495bba5783af4d6c111f377de5560e2958cf66eacabf1de921422d40d801d1a4f6d832acfd62e2cb19a10f7753817400ef10344ff79077d52f3deee9e8f82fd5255c3fa37237c5e5abb836263653995b9b7be5da891f8b8cc8a44f8e6d0037956ab689ff1ab6624564e14772dc616a48062f8cce7cb323b92e3bc8d14d08616b025424c7e5e600741c9c4b2e09fcc1f6a70fd9f3c0906a72d3975e0f182bec51d200051f45a0856d99652e048876622e0ed5b2c07faa1888c749ddb9cce9a0391d300c5e94e5a49fd43560c8c2352ebd6aa416765b58531628145da39a7bd322605cf2f0061efced91b802e63d50382bc7d0856abd4f017813242b602f534a1bb4f03e90b9d413cd984115931088e805d7c0be2dbdaaa90adb341ddb1d3e801531ee124f332f53ae841f701089710c1e2ed219d8e4c863448a2f67ac4e72634710422847286d48bef2366b78f606ef3aed1ee3f56c2e44615b294fda7275833991081c525e11c4bf6e5f1d9fe5f77d03f76809872de4be4927593c6b64d0f554a3630b2277ef66cafa8e39cf6f7702ea0add7c13ce53013d2cd1ba5c8884a7483a426264dcd4887ff6d7b07469ec651d060842b44afe989f25010c96471a4df8948ef043f3770d3a22f421d61687e40774ec0d452b537cca76e657f0526e956494ba992b8b485f6aa22f38168185d158d23156b0d916bb8c5d62544d67a09aa92bd41b10ddff32922af77392dbb4c1f91863141b921ed0959ff2b53d1d8846f48454592b27206a3f6a4f04cdc1a7e34206f68108c0fe73cff22f829590ef3e61758a4d20c1b64e8c361b2ad539d14fb779cbe4d921b6da26b605eaecde9f5110ad29324faca5cf79869035924ea917f4f69625f55bbed36ab94fb16800f3255f353668565700a617e378e578bfdb9b19704c5ab5f6b67baf2d84c12b49a736f1feae2feb7db3d462be6b09bb09d0bb18c871333de939497339b017d99946dcbfc94266cb5e6deb46f53b7eb2deed2f642df66f5265afbbdfeadab977eac94879ff9a823a0fd0b08c9b2beff20e8a3e947e29e0a69047b18fa24e4aff947ba1ccb998385d6423c7bbd07006607ad4946c8722d3fbe7440dcd28371b346fd4346cc72133c14c0a9a9eef6c10d3c3a0e91be86ceaf7e7a60143b0c2fc67094ce811be0fd783cca5162bb5aec0d205ab4b2d506c91926565962ab4badcba45ac71d28c02cd9f3f62681c212f8512314427e895096d921ad4bf51cee2b3fb2d8e0dac0673529ee29b425140d3904490761043a5a5fbeaa8ec53ff1a2b47caf733653af4e95cf98efe36553a723f252d94b60ee7495096518e8caa46ec2ffc67f6186dbc9b73ace2ebe60ef4e14e6f15ceef95534dd4201024ea757bd9f95e9796d1ae33d184e76e93b9a5da10ddfaa63cc3ce799eb35a0ff234db89946f58f31b0b4c4a42e6ab4aeb0e87ac6536d43079be3b43e32fde7467756cc9ee5c16bb3c375ac75bdb650cc47713ae4379c9509965cc8763049d4d475fe5ff768bc3ea77cc12275a91949787e2d3db165c9596cdb55d5eed1b171f3473bc80f3470ef6a0fa4c5d3cab6733768ccd76fb64dba952c95e2563990e4d442d2875fb1b48b5067973e0c490ccceca915e163804246ac9d6daa740b6e5eaea0a0ff08b2791e596c3d2384236580b9f39b1622c58cdfed790f726071c8cb872fde1fc83f5d2e0b57b56cbb216a9f17fe08a9569413f61cd7529876bbd6941b80a553de28ce35a32409d412b0507d24f63c66fffa65321caa79d3ae7872a56155de729ddbacf99f39b485f3451b618d689eb5ccf3d8620741166b41bc1da3406401c9d1024831faa2d95e0c6042edf66c9928107ed3ea82b80783ba585e56eb5592bcc04234f97b6729ba6050acb159a186ef2b5814c248c0a2cd346c728fb0d4c7fda47336a1e9f24035bfbaf506a2592ab3ec849db155954846f9135ae0c1fdbe078b4b34042cf6402e21d67bdce431b8be6545a21953270f733fdf6cd5950e1132c841290bcd96913cfa0d5fb1bda346bde371536ee4e44ae27c4b42e53817dc6f9a291c4c8743695efcb2ae4ef2cec7a13ae3d5df1414b19005dc13d56a86a8403119f195de5aa47ca2a3b3533dd58cb15a8f8edeed650e7e792751da58225887c046ae3daa29e6ee23aad9767029bbacc1a923fa2874be82523c4aea85ea5a44dc4defd03811863f22216d4587a43be03a1a41af2c3985676b39b31d3ad452f36a8f651337268229c96554355c3bc5082169f04bd3eba4cbe19a48988f3bbe2697407a2d280f0b3535510f5d645070ca24e1ea0c2c2ccc89383bea5a2c3e719b84df9588283ee8f049f08fa2582bab5f9fbec701ca3e96c7281cd421747078242635ed6fb8b5eee90ee20e45d88e278ec811c6e087b497adfa6f01cb4edcefcb4cbcd96768010e4896083694a81309234e4d3d24b735eec2f184a8a1d5e4c7617c3bded87014fed40edd08b43affa796b16cd7f789b6793c4bedb4e1aa5c5aa49cc1d0c3738d1d341d0f80e880d5402ed72c8cba15484a8147ac5d02e415e06a54288ca41ef90396897425e0ea52244a540af643eb4cb909742a918a212f4caa05d087939948a4054cc30f44a401723a4e5133b5c3dc42ed75e8202c804103340770a6962a84d103883082164e62075520d754119ba8542c71216613ada9a2804e4822719eee007117b28e53a207327e4ab653afafe3423f801629f5d80931ebbdf1db53c4788da5cbaaf221df02b05be8720a38ee74150c4404dfaf6dde58188dd6bd2ee54ba54d43710bd3511214cb5b4ba2d9636c94b6144210ce99851d56215e5179ec891329405aaad67b10b045f3b80ae79d7fc4583acbbd8983eeed4f2b5f46af105a48bcc2e035e4a7eb578dde935c0974b57dacc2bd661d7be4611dd383dccc5e3e3e45304b20fca6e30eb109b622c32a9076737c83a944d611639eac1d80d643dce4a962228fbc2acfd28ee5129c8229f7a0fd9a8291bc56c43ec8db18649399c4d204b50f68559db510e6313902538fb1eb271caea9b72fda828633bc8ba3e3540d6a3ac74a7506223eceaee61fd265e28c6a761145cdb2b29e17a3c2807bbb3ea8325231e105c9a8cc02e5a243cc89841d170cf89c25010e655178540dea84d3915efdaa6c74bf99af6775bb86a9e02eb96dfbcca6b27d4fc72002b3481c94015b76d551e4771b7586cfab3b0a5958c2c124256d170899ec46db059b04e87d358d6ce8441624895dca4c8e117f9c40b72549d9d1c480bb189584054e11b786b80d9e543e87d37dd888cf60bb7d6c5ea23a78c58ce1d3d3fa90ccb5e4b1b6aff0b947d576aef7001ecc9e014881119df5672e3a56ad1b1d4b541a1e8e44aa2c48c0cb75db46ab03c92b667a194a8292e32d6a55675f5bf9cb10e838348c16b4ee8ee31865bb0525b01c61cad4b7a4c00ca170db011f3056ef7d2a9cf1117cf17a54dd9854d5a75755f97ea5a012b5daff5403a9bb27a5ce52cf500fcc4209aee76e1e881c3ca65dccf0c0256cdc5cb33733820c1922cf2c0de74ad71439c7cc700ed365a9b80466b86ad788709f3c0df47df32827e3d43e0930066820e10ec62cb015588cb6d970dc63c1f624904208121fe89e5874552478d33c3539e5c9e384318aa100c8fe1377aed30abb984a9df34bfa19639d02e05a61804625ef4a4c3304cfc202c4f283a6fe10c2024a5411a8a5261a17bdbdbbcb4149298850eced821602a4804c611ec07f6bd22ca9151253c7999144aaffc4b8ee9d220139deb787e6e2397008f153a7f8657e063d969067f9870037f90a08abd891e595cfe3fe6689335fb671435361907ca5901c620bdd72e7f2093ae821ca231d192aa388f134b8fc65c0deb56416b3be01f314cacc52cadaf64de5e402d2ca1ac11d1306b9a884aac884e0c035cd89fbbaf220a149c78c18abf802561df182d28208ccd1965333f559311be7156cc7e6c115aef44fb982b369ced12a1761e43e6917b5cd7c6a8be51468ed995e42b4afb1c5e390bce4ca88fcd019551c533f4bc94ce907791d4549db1f2f69b12048d53a1057c2299354d719cb5d2a55a218e0900962173b63518f0ef214feb70474ea6c17c9903a5f95ee475074b5699c278bfb4f205450b70fc6dbecea019155a4004ca7d77d1656cac4c0f58bd6d17e6740c4970ea09baaad5f51a479019663732e40c079e1bee21db47d5f3f87cbf57aa99fd1fa37893df853f73d16f31b62051e17ef5e2422b7acb67dbf2bb897deacaf308d48ce93d0ea62bfdb13a556182d57399fb3e5f915d82b5fd243138593d433556ad2dc414c766b35439efbd778083b3015da8285ff019c5f8ce9ec1c5ac104701c3056052624eff2174b2efe57773a7f05d54d5126557fe2dd6e57d258184fe5161990141d84f75d52bb6ddcde9344d9b7ed5f51ad16f25ae67e15801a9190b9070b6788d0ed5a803fa4d0f04c2a6686c6eecf252560889526b74cf027ec65cdef8d3578d36a04d75ccef31d4911baa4aaeca9f0c89f6f2ab818ee5eefd6047e622efa3ad70fc7bd1fb47942a64ce085dccb5cb50a912262bdc48adac52005f50dbd3b1d69e08f6ba2653dc09c282cfa0fa19cc6065ff5e75c7e963a9add3bb78bd19b038367bed94aaf6fa7c6789ff77d0183dd284b4cba069e12efbc36c03066caf7241f1b72bdeeb28b864fdda8ba9796b3c6cc185e7a76abb46f4a165db664e073d29249619d5af5935ef9c9492154f82243a9f2f466212cbd030abf72cd91346a405fa790d131b3f763087a13e55ab9683d607802535a71908e6709cfe89116d5af1a4137652e9ecc374e9f2a0fb7bf060572caa0a0fe55d097367ecde0b36ef30cadbd3b0e5619d837a74c96e54e750de95623cabb2b7930db7231c264d41be6cc02c0d889efd9e7ebad53c0e415d66f557e70b73a6305d97cb7c9fe79e3b868c58991ac030fad5fd0e96e8e42317b0b179025e39943fe6226b94dc488532b99eb0650460dc07412af3213a4665eb9785347345d004493ced526e8a30c008e1bff16ca18b164992b1f275ac201c6d1e559fe9c928200e235c74b21b90ad02b16b284734f2f4b198488fba7670bb61997e923cc3d74760670df3563a2bb0a2ebc90984f0117bfcadd0b0349ba2994175816540bf429ba4dc3ce0fcc5c2a23a37b2dcad2b27a3c85e99ea2e45c878bf94f27d46809ca75c54897c22f2cf9146baf0738788a6ad97ac5d1bb975036e949e0efe2561c20d83c28800b9d1d3ca525aaf3436d387d73590bb2c4e3efbe79e233e7a333e50c639ba07f116fee5f6f20c1e9fad2815d848c89289677525fcb9c21a662bcb7e70dce7d688ab492a732500c526b47c7068f59e2d1cf60bbc60b7e073496b7a5633e301e18bdc2f9c1528b6e4c50bdce3d0699dcf6b50a199711cea0de8b060c894fc8173de47e4e9f39f8a11086ee6948333ed7a1dab80e7254e963eee0a4cd300279040c1ab65e87b748634cc12d95e90d1db63afdd4a2677c7941dee18c91f2d60b925cf036670d85b6cf70fb960d105ffc4851de55f05ea8b9553f501ee8d4b8ff6d787f32b6e9ac1a287f31e4efa31fe3b065fe8580d8397f1b8fe7a1ce09c3275897b64d10f86e82799cbe34a5030e12b46f53d7874360c6ca23fe5c94c812a7af117f1ebcf81c0ba8edccffe3fa11f304cda6141f274dca1cafbc92d3ad9d9915d2239e5e23ab6f98d5663d278f57a0897e2a44587716e7ca993638decb3a9b46850993c005ad0449168d7714cb4a4ddf8f21590d1325843cf60ed1f955ec0edd5cacbba4fffc6945f6c30a5e378593b2d291df7d47eb48536cda03903d8e11025cf14c31309850e69da5db39fa66486f86727adcfaf3dcfd3eebbe13ae3f3f40935fd0715ea8340aa8ce5462c2384d5bbd97380fe612a90f572ac2123f1652026d168277eee51977d8f9ec0bbef5cf41d7f0eba7c33a1bfeecc9a375e0d3ae7f2a87e82ced72b3cd523b58e7fc8198d5067b23f1fd3ce4f4efc39b52a71e527998792ff06a8afa95ec28f113ff82fd9e9f078bc2bfa1c2fbb35441d854a59ed4ed0b6979b51fa850c7bda0ddedc14eaaa5dc26f9ca8780dbb9b023eca119d1105542e50645f217ff00838f4d901d22cd8dcb00c5c9e8fd4b66a6a4878c5501232249d138836ad0d31b9780b2679a915a65537c2f564181bedd77d8a95c7d42a74754264f8a491250f38adb64bccae2778cb269fc8c6d8ca991dd15e5812b174e1ff9ccaa7f63963fee46c0e49d63386a16d850ef0f40b5569a1e931292fc329cadf3f7152e635a1ffc6239c3cb6cb8d67a544dca7d6d0d7d062afb7b050fdf800da9be294e82c50402749be5341dee9fe9cc6b71f98be7a4d6c0ab4eec780e1b6a8bf9799d540da005b7e28ac067b13ba017c2af50b162f4fc2406e927427fa761b67b6e15f3e7d3eea1d8056f61d51cadbeec76739ffa6b64d9f25075638fdf5f17a9fb9d61f208f580e350c9fb53899fc8bebf7580b788dba697b248a8119251f5061ba614469cb3335f63c1ea128401420610bfd5e211bd86ca202abfa608f0702fdd17d0804f5094782364c728001ef3dfe78d07ede11d6f1f49eba3fded30707c3a024e4fccf7b653d0d4df627aab87d6fcb011ea1da6ebf2c3cc31d6f25a9d2356dfcff531bafad9f9c15069e24f4a1b186f8d01e3446dd7d542a9c690e3adb69667def8f147e99c0f85452fc37f31f8e6a6622cf58f787740e44e7e81863e9bf5d3102b66292b23997a74dbc6f0d830cc221be41e81be594b153af73b58b34663b957db8f6c8bfc64c89a619118f9fceef93827118bbaebe17dce2273183cf7a5eaf1bbfe2d993649a7021755c302a74a2c134f225afb3d08ea428763efd5fbb3626ffddd45dfb59f6bed167ce3fd5f91e7a9d53a218ee3373ae703111c54404e53fd367e825b89eab7ef0903ad8bf617f877c3372bfe8097f9b71b643cf94c0f94671f3d36775a63fce5f36d6d5bd0675d9d0f73892eb9a04bb261fdd6bc3554bda6568a7a31bef3caf6ba6db9d4dc9759e6738e26bee0790a7250330f67f863e433917fd91c0b56dda19893a4c1eee01d683c54e579a79c39b7e377d04a21ab39dd8e6aa2afdeee8e7c0eabd50afc3545107dcc663d7a17e958e5dd194d8d38b582cc55693c89513ee2713813356da0b47d9043c38661a89c32a5ca2e2bbbc45a7883f9976db1476123f6aea99f5cf881c8935ddf4f6d1bf496ad94547c8bdc9d7cc74ad31fee869ef6efb61687e216eff660a0ed27ce974192bd7f0fdd3b79964cd919ec8b599cfc6f07a33f6d8abed273d51d533f6cc113b17b5b8eaedd2bc93d5b7c50c917bcad499eb5f31f9d26bfa892da3bf93f4b20b8e107bb3eff949ad23ded195338fad90ba13eae8bad4a0a541b881dc36506d86b341846db86bc6b506546dfca859975d42e49de342fb718bd17c15d1c75ce170769709b67a10328ff471bd764676473072cc5ab9b1ba0d096fc834665b3f1cbf938605dc241b64ff99584dd30273d81df52fe758e02a0547ec3a1acf1bc7e0ad4531fea28b3336814e326144109ae2c189e3b0a62db3fca2d921c67fc226b26f16055e537a5b88679c10633d0f8135143e9b2e8b672f30ec841defd766fa955685cca188e448c3f82ed5960e84aa9787e1145ba19bd97d74e76da1ba7fb9de8d0ec184da7c0f8a20ea2ca0a7b51d5a77786b71defa251674eb089401d7622c4befea7cef43d2d734fc2854cb30aacfe307cdd868fdb29841f48934db6ae3ed18d1b36c1c05e38049b63b87305e22100cb34b383b67f068d3df3b1aeeaa4153e451834d3bf376a81a8ddec8a8c82c4b6c6a56ff94c142c1727635b45004badb22592a85235f9a6340d8e1734a6ea432a0cb0e2a462f6cbfdf11ed7ac2e4a73553c304124efc168df4cb76c620dfe131c8c329425245c5008306b881bfc503b76e508b8a9d0255a72d64750b6fd2c804246bea28b440569e48ae4d776905f0f5381e4357aaef7b301e1dd5759551703341051804fef7619da525830ad1a6d96582bfbfa0e53e82778c2849d581b36867b8f5962d712816527ca2e9ea456cd5ce0834b1e818527140c59bd0bfd8a30363411fa39ce54f029b9e07ea1453bc94d7f502e5cd14e32f6dbb8c28b6e8779a3ac6d25c0d3c8cb4fd4453a0de6ccd026d1388702191f60512567da2a4c58e552e32fcd858c26c756d2855c721fb53707c3530399064d317894a50d51dcb4358a69bca0258a54b2d00298804dc426531aec7c7ec3d6db78ee680bfcaae892ecd827df6d433a9f3c020c83a8dd08c4b689f9e876aadfec7f0d5112836b9dc7dd6144551ff2257d12c54b1dfee77cc83ab786c0e1487eab50fb168965fa99f89c870f662f284915e8a92cbd13b0670b13e099df5ff408f319d6637ef77f945f7136de9b9793f64393a52cd0d2223e25c5fc3ba77bb8b343dfe81be7765206a6418c76988f1ecab92133ba458b370f572bd8a32b02739d6c070c2b01359171293f1c81f370523de63ff099d4b676d1793e992e5246372c4bd7324c2686f9c8d57b5262876855793ab2f70fc0a884c774e9ec3f35b96e3fa9ebe6174318839ff2d41f482aba8b65d5e0e7c0a8aa94cf89bd75e119adad3b68c0e19d3b2879cb1cbbf88f85ac092bc6d68d106b7951a049746513bf5df984b513dec29387fb919bade65b73b91aecbc8ef99dd2a6cc1dcca60b902d69378395b8ed8789a1d68240d794c5a6edb6039ac041a1ec5377b2140e2d17fcb1f14d219f6c07f7570d7ee6c214d47f910f8a978efc83ab8dee9c4750b497ff4e7bacfe14c76f39593c0ab0d17c452ecda0b4da0c685969737fbf789270a2b076b35f032d31235d7c22ef36b261ff522ee74c84fe7f61f0ec51da8b4e3702ced1072b16baa38d5fdb201cc8b9c1aa1027378dc4b0f78f8c6b4fac28bb45aef95fed4b193ef71f184ff4190adec898be568b03dd61532c8eb6ace2999b7f7a4bca5fd58f14bc87077191c65388d0fcc312b77baf78386318258b14bd586cde2e47110936b0585b9cc47d2bc7a7f10d92feee367b2fad110d74d3cdcecf0402150f3e59288e697052c0570565ce3d8c08025440e0f2cb318324f636e8ba9e36ec66d82dcacde64b6b85321523f4321fab13cc7d7e0b82a9cbc19945a40610d95b4395537ec95adae98252f7d24ec7a41ad42499173efa71b7232be33b010a64280e9ac05d0dfa0af052d943c25114029a8d741ad523bcd9e96a44ace936f492f549fa6d5ff1bce77e67d1543e86b18905916854f1f95dd43f0b62e46350b532b589d8338d7c790095956dab88cc90cd84674e03e8cbb904cde1e3ab2d6bd97e8f9da08696717736abbf2b3d387c6ee9edff09fcefe33ea82fb27d8841b6aa6a3fbac33eb9da8d9043906832dde47bff7bd4e9f00c47a545133e28e7b1d481c581147e3f5c4da4abae8cce0b849dc419b45d788bac1d7fe194b0618ce301a7530b343f144dc2bf177e3aaa03b811c72094fedc967da5de43f370e63d99b1c1e8860503d197967abd62158e8bf18bc1023b5471ddd8011aabf45694c8f08cf27e03e20be8e094eb04a705b7a8c6ecf71130b964e0a8b710b48200a6425236341820a6de6654fe30e4fd8cad4342df56ebf9bfbfa3b78c3c5615458c80298fad83a6084a5a807cd51f2e4f42e83f7d6e90edf00a961d77a4902abd108ffd84cd76a7c921c5fa730e74641ce40ae96050dfa7e466e1282a0d20da3782098fb905312f54e0b109521e6b9370fd0031a20bd544b5616f629885edcd13241d61b50eefa1745dd18c501966fd3b48989540bb5b1de25462cdbd45353a2fe7030b6fd066dfd0fb0d5fea33b12fc3a632f13a821551e5cc27a695cf89bc483e01352d094837b3c50a65a96ef2f0b1a7f4fe100179d9ca8beb1793b1a65eb4180c74b8d2b7c3c01e2a8554ace7b20613b24e4aa3b856d386cfd3e7318ea108097a8c97699d0def0cb8b62def6231170e8bca3e51c198093e7d9799dd2adcc4c35995dc0a39e66459bd5afecef98d85c86d9db7a82ca9eb340c8a318338f549769da01756361c6663105987f3a740694d2e4c822b180adf34a8bbe4099dc7aa77905cd312a7ab828a97852e2d8eec16aff44fb618c3bda8d4ab889216961ec4ca7e1264c7f5d32d3a26efaf424a3d9a4495f131720ec5050f54638d23442e5d6f136ff5f893e6ef3b3d28dfad7fd7cae8e8a0ba2c93a073851aed5e88a1f91beb8f3afbc0e92a180ac9f98e35696e67b88ee43c660ebf51caf729a3e771942fb8e819f9efb8ad3d8154d0f71cadc285010fa81baf83a014ad337944f4ede666c2d061ee766a7557df2e1b7b3928fafd9d0a008e31c6e10e1d3f3c95fc3fd009e4503c4e1f2fe2dcfd830be5e615e4c67d5f69355c58e230c97043abed702ab8af1788ca0d4bb45cf663ce00ec1be736ec3b43efc0faf79482062dd07c58d9fa08d6feb50319de6fe25d7be58d8971e17f7a2e0a11ccba66144801a7efb1c5b2ceab3190f23fab44182cdd0b62c2507569ee5fe83e8d4a5734979b3eef8ef432b2b66289eeef77e2fe8413dbd720efb20bd1d0355f70cb71e3aaf5e2b388ac9f5ae3e2b8ae9eb108ecdcc2f86c572cf5eaf80810637d2421ebdf80d6e63c064b1011dc59fd2c08343efe6f88f9d1133b58991a2a87a5aa1dbf76eb26be09e7068009d541b5219a3120c380099f45f3476463e06812fc5d820488a429f2385068ed054b2de1c7804034cd8bb33b209fa798f6acee6a58c66b8a846e4bf4e95b164cae763ea5cabd495c4147aeed42d9529754f79cf450a61aa2b8c96cdc5b1902b0ecb2a168a803f63d2569be96d9ce2f64af09b52aafa83f42f16180a590388014f600a19a02da5824fb8f66f86d41c6119d724dbeb7214f06baef17f889765e7bbbb79e67b1000f059232223d31517585d2f47d3ceee75d1679439722a1e3854c14550473e1297011d13040d610452861e39225506d2c777467f6abfe41376f7331870a9d00d96c92ce3d620611e142417d2ff3178fab844f90ec0eda87ac23f72144953b5f06962f8b027377a77d37a07f18739b839b7db41cd62a5b971f9be17f70faecb972332a16d7863165ce1dc43ea61d0aed9a5f400ffbb1bbaa83db7b615f7c240c59de73908138ed2946d6de3f144f046404349d7962f51b13ea836e712467539e8b3861cdddabfef56bc5d39d873eab759fc690b3ac8edf77ccd1ff4dd9f73e59853c7595c39d50a9bfdf096d2ead66d508296f37144b3058b6a534c40f935e24d35a11f3cdc98d64d8ab8b213a0e15ba223317e4f22d4e833c902833b59ca4715f55d4a4674c7aad7f00a5bc12abfb943942c26aba1e976742f485d4ba9c7e1853142bcbc945983d7494e7dd8ea060f364f365036c2e018b8aee4d42909d81d69b540a1a144f6691309b0f5bb999953c6b871b8b0dd573061975e91029a29be6f2bf50aae7e91d030ab84f7a12d40907b6e23481754c1cf5ac6abe763c3fcfc00e2eea343a0b1569207d884cc03d3ff1956f9cb52a3b25224bb372e7643e4a64a33a648d58b21a21d7bc2c4c6405d40ce609d6de10d097a68b541bd054fe182d6f259458bc43f6ea23e3a02554c26418a6fa1f267489e0e043578cc06f3facaf55c429a35c0932e21bc8d8051c18d9c6f3c6621f397b76a9838d6ccad4a0cf94bdd7b80abd80b9d7a6d597ffc0ec60296e6f66964eebb1f71320ec7164fc030535d0db177b3250f71c84bd360eb238eb543d3a007692af60535a2b5cf0939de66d696575d44ae5a77c31ee4a7b9aeff5b3d67023caeccb33ff987876dc0b5be9e3ca954287369ec39484a520f67e3b7cd8d6a75b2f51b81173d5e831f84286b82842a6ed27e993acd9c8da3514ff1e463e47a21e32b2d2e7cece120948531ef905b25be4d0972444884d378f9cd8d5b7b44c5a519c680fff3085e5f5dcb5a4a7376334f21b30e02c5e34928e5579d720b73da7c7c34e3b58d011fb5f22e8eb5b305605e32fc98d953c2746ca89de1a49d8107cd9a00e749cfa84d9cabc80427334ed6208742cc0ea67e6094eaa1c01253107f871f9a9acf20c0742c333a2ab5d5d49e547b96d68d26d1e1adce22bfb2b37bf5b1c1d5a7d2e4f038efba092abace9e3d40e03244468781cf04155ba0b8b0d8b239849e99598331f794eadf09eb721575aae1351d7c37ab7fe7b416073c067ccf111a9d483c26601c8408dc2cafa62a2a34d7625bf413a8b3ecccef4fc96c6158b9a7a17a889855cbf09a8634fe85040f47d2e1b22511db9304873c736d4b86824d30315369c25836effc136ec4062553021e0276d2c5620ce8ceffc3989ffc9faf94f5a7d563b43c0365fe7296b8b92823625b19178df491d6730dd0f40ee20f205d01a9b3efb0ac2796198e9393da8fe189fc759203db41823017e573be77e4c8ec3ddd76a7f2ea7c12bfd700ab98b2ce338941cc8bfb60103a40a3f80d8be317591e53ae1241f2da01b72715aeb0f39ba72fd13c30bbd41c1d5347d363a0f49153f2c7878d3ab924b3e43279720af7de1ede2bdc6af63cd57b6fa221e0d8704c79e2d250a40989645fe3d2c34155883ba69aa071af94af989a118ba536456e4a07387dba36efe7dd5207ff677682aca151f3d6aae1ee2f0498fefb2a9ecb075cb3f9de8d0e26bde5bcef9e87a5377e10e9ea97689f9f2e1c12b6812972a5099f1a0c08d3790dcb4d4ae199bd2cbc21e58d5eb29da4e12a941cf958c6598f2cedf510bdd6bcc4bcb8dc1c4cbb7b78db6e5f334e0a1dd054beed0ee0bde50afeeb8423eee385b3d6dee8b0f1a7be1d4b15b5b42ab97ded68dea7e009162cc7d5d904d509082a26445405eb9af5dae352446de141043b21962a8ea4fbe66f1a9d5bac59b27f17c03ab7935cce7182bf373849dae0ff59533eab4e295264e61ca3f68be245d5956536d16b517d742961418151bcc6b531d740be1b0b5f062d5f7bbacecd9d8b1dfa08cf99b9acf2bf0c98945981d78179ae8e26c580674b305be76d6c622d9bf2da6af5b8e88b5504e722fd0d9d02d24f9e1b52c11c1d405c69b6c65b09e041a2538b18c9b359b9a1645cf7fb648b657d4cc3c178699dda0789f14aac0f430f552b19459f8388784fdcec533e6f9c7d3ef4fb86e92a4faec977679ae8616d5c3be23ba8f141fa685667e36589c16658fa89c07d7fdde08c833bb94f95fc717a24caa1a16cff639d39049dcfe56fb424b78ad1e344b2bb7c3cfa8f3e9bc49d5c9e30e7322ea6ebdae2c5f05f4219ec019df9636078886f1a86e3cade0f035c618c091914d261db5c3cb5287c05f4703724058bc8df0b5c89884e7b1bdd72328481537c95d18cdee446ff399544651f1956b32ae3912f3066eec5efaddfcd578f1bed8e563d044f9d3d3ec292e001580a9a7ba92d5c77f8f32b0ba24c8c5ce4c78a1ba92b472178d7b94739c519fca33a143e4c05e50d1bf0264f46d628ca6786c674323e0989b76eebf39cc42897ea23da4d544ff8a0ec8a4fb44d4ee751522ed652de048386cdf651a655fbc67388707c6c03290578c837db8f79aa37f3aea33b4a49074665196e75c97dbdac9808cf29cfd53b1f1d59fe701aff68f91924a02f67c1b3d75d68964ad62dc71bec056404fe80e96fe3019ea81bdc337e582e2c954ad8eb852b0795f39c204af63b8570ad88d4eb47460b797ef2195909ff2c792ec8277524fa0b3f5f9ef5497890338f7ced30b856fefe3ff8606da0fb1a92416629d5ba6b3f37bb54a0271918ae5afd0faa15aca23717bc2cf5ef1fb06f21b901a422913be8fc964973641e57045cf1d6339298247dd4d9fa0c391579bbb88ee80488be360e7af9f68734f4b5fea9ea39d8a527434a46da78e5ebfc783aa59969b5e4e7b5ba459d832b491b59eab717f8ba1c227b562851e26cf66fbbf6b5e9c53f697c6da00686f408568ab5dcc415622a1cfde465fe9e636f84cc94a839da3636c13a24c0b216df6630e1333512369c23e8c208f27400de1f467cf8996be50d5ee169f02f3e90b159f2c3531030a0f57031e4cd887a4cde7d3a87d83d17616b0a9e2e6178447b23a80dca11ea318e7e73ff7085fc27a31da077b1500ccec6e3e634b939b0dccbdc7d1cf9e0a533bdffbeb3872a53230e20fe823176249ceeede4ae16fa1392badb1d732bd803a93e2d8ff8949781f91849dbb0146ecd276e8e9ae9f5bffd30a75b8f97def07ec1fcf93a446650fa02811422ecbffae1b8d457f7cfa738585f05a197a6eeb523ebda9d1415d7cda62b7bd9c917d431478e7263dd8713db6d8af75c0698ee476850b9d707c4b4210474b0ab0c21b2423800803eafffd66cb7fbbdfb6526fe452b19e0adb16826f5acb09a2e6a9b0a3e04d21b5939b8731deee4bda41e081dc4a0dce2a11388139a2df4ea33131d34832479c1b2887d71019fe0d548cee042625df4d47500f70a517eb43282f29b4821183942bc1dccaca1b889941cd4c214d4c209318b99ac1c71ac7424aee55553c3c4dd71c365d137cf4a44c5d5b93ebe3eeef99308361aa1a6a6ba59b132c6fbac66be21b6ab3dffd74fe02ac6ee42fae30b28b824892407b08423b1588d9451605ecc1de724d8eb20b54e706f23a7ac78290e4abdd4e579b601346e35838225c3af6b3d3b26a343419ce5199f5e8b7f5573af014f7a50e9cf15cb3ccb522f6bf0e6ebd5f3174638d1d206e6434ab51d3e219b4ab64f86b76b367ec0bf97be1fb5c79d21a349df2d93f11ac1b5feabfe7fd4c21d8b763b76d82f5dff6477ea539a83348b812030ce44816f6055e9addfb77581f4f3f13b687b29dc34bd58f8c48a1ba2f1f39737908702bc35c1f99325d4fe0a1f4a5baf0dbdc78bbedbc14754a144f4f6127cbcc91f9056aadf772d8896234d77b05ad9178f9080a49f5f5a27fd48d464391941ae7e1e44e0986efa48efbc6f80eafc2872af25842a3d16188d151d8715180832a94447b170b3c016794c19738dfb7146a568fe833b61886676ab1822073ec8a59b58b4e9be47e5bf6230321f1400829ff1b9ae799352e96a5cb05034c7ed3b83d09bb12c9528b8d84967f91a94fb5ae1f89ebdcd222b470b816b004884a53c2b16b6a393d8ea4f116705d4ba881c21e8d09d09e3b4c05b0015fbc13a62c7edb6bd5f2704efd6576ec07d422af0f40129c4c41c0144b29ee06e88e3df3760f86cd242deaca3d121a2b571a2f68db03ab1c6ea20f5163b1e43a2d4363409a2b335847a4e767e66ffba6299cf6e20ca26f94d41f3834a0e9b67f384a0d0370568f1c60e52d092368ea2aeb925fbdf25a4b73151304175cedffa6422fdfa2131fc5f52b0ff427542bce83d3c3b8378466968f2ef7d9c3e2fc8320b1c0e53c350a9ed82ff194955358f40e03a60c80dede2a8e0eae44a53c87847ec7f126c4fcc05f0afeca9d96109a322f4039abe36dd81807c5963c4adc28399fba5e28ab16994688c98ba357cce0cdb0c469564604157d7134a8293b4098098fff09910cf91f901590151cecbe964c05e230ad8d07c913771b32a6bf14ed71730993d6e420413de0438fc60764ea21c3c57dfa600456a96b52a2f8bc6afcdc3270d15fd6d3649641192f31015d344d5d68311363c167b0a60dc25911473a30a1da09e89c57282f8b3265054aa815aa3745aee48b18feb2bb205349097a9aa642018275ce4c4b0ef4395783b61d624f5436bd7cb27a8007dae2dd379bba0cd6f164a1f674f280337f4a9b5149a13df4b3994e4fb83c36c34c9dae22991deb349c29bf807e78bf632cb49b955326eeafaa9ec527aa6a02f59426f1107d60afa3df206f8083182be626609235dcf4f8efa15d8a62821c14e0ed9c1171b474f13456681cca9dfa42aa34c1f9f1bb436008467a1d025c27e8ef064b94897dc696b48871ba4a82b47b601d91a50eecad0d888d7b744d0e96e2216eceb95b3f2c90409aba9e8e469c315b4b124bf82bc12f5a8d37fc4e858722f94d5e834d8d6ce11f88c83d686a6d931e312db72aced5e1e4bcd39127aa1b7dbc93f6a2ad3f1371af0396ff30b055760c7ddd61865b1df175ba7ddcd27eb2b99bb696e8765448a580b1cf8f2411babaee0deca60b29829b63ad6d87485607005328e662dd611675cf4e67f69701c33e1f4fbc732f81c43243cfdf7735a138316653c99e4a60968ed7c43d082cfe2dc23f8abc75396ef506ba7d130346d600b86472c490662752309f2e63110bf684436b161601abe8bb8666e931bd4f3591d5acb3daed88fd1d8d431d2b98c0496eae4a4aac335a954c7a0fa4b8d04203b5a96188847b666951d09989b4facd3b42ea194a48511c40fcce9bfb69502807549606cc9b69657cc0e7aa6d9e2f328b3bd94d0e29dedc8904253ec9448e274185eebdb529081538e9f1b0711d53e88e7294f933118c4ba0d9243109d60ae5a3a0f1bd1a31f2e8eb9936d9c5b7c6bfb0ead3510c326d838814e16c1aab65c92c09b1d08b80e83e019bec808a8b4c2e365161911db588f6c2a50d9c7340cee58ed3a89959c43373cbeb1a667b17dcb4441b3945b0b0577460afa2c148b79ba2a6fa5024fbc95b6d02338b63fbaefa876b9350b4b528b001fe9cac067ed922f5cf8350708da5c4e2055d3aee84f309d641227d0a2d13b383962c1cb8f62da5de0d7efac641bc25da71ec2b56f1334203f8a26a6e8c47ed63c52326ebd90e562efe8179c7d2f9167c3532ffe43dfe755c0f92c71b0e65a932673bd13ae26dbc4b6a9d814f9f0332300985756c0b4ee5617162e09db27552dfb1c7372cbd637e1cc21b0b846c6aab10a2db9916b029fd03522db1079f9c09ff17a2c25d066994ef93c523f1a14fd76b18fce5f1696e52a6d0215fe838899f3272823608caea61844c109889c561063aab13bad762586975a49f980feee1c18f110657da1e38e74534fbddd26ba791e03687123654caf61600f9a9368327ffd4c3cd18c6aa58fe99e76ce2e6d33e37a8fe5d937648c5381cef53243fd8df8fbcb626eaea7bf10ebb383339584973cffd2e6ab0819c7341f94b45c04ab514fdbd5896cdca086f722f48b5f86b76814f2de2d08d06035ba3155e29046ae49a3350fbb0e2dece5affce0ac6a4aa01494927ce5f2f129c4d8a8fe64d7173aed875b9cac7b2d8705a6c373a36ee18739d51eb3209c811bbe02d3b1314e1ed2d3163af23a33aaa00f2439e2302fec29f7b399479e975edaa630f4dbf68da5e0e6dc5619ff02fff9332fb155c55699361eb2ed6960eae5d457d42de25caf41726f32de3241b3d9f1dd17d5cd28ffae077c342dbc18c5ede1b403d65c85cb1a2127ac96dc22dc7c2eadf1a49dac232cfdb1cb6ccacb55402e25e016d4fe3a875d423b310817a51a34031d5e06f23b98984a538789a3aa07e00d51002c535f1504760e42d32308e497ae442318247df1fa1a8b2780dac5c497bed29810b93b484b419c9bba13ec689c076c795b6e465921dc8e63878b509cb26fb2b6a8159c797dc8aa65ae8bcd60ddc4341b230e85561485947dbdf5eee9df0d225f10f1065ce1b3bf400061dfd27d80f14123017e4ced1158713387edfc662b6d1675b32b6af5e5e258e95d5d91bcc058b248da7e1587fbb17f60ba17bde7a80191a8f83eeb516301914958f11fb3aba753293f85973e4cc6095758993be2130a9c3a6d23196a6e567714e4cb952168dc392bb09842b13a0dd669efcb590ac2f45365922deef14aead0703da9932aba739b14aedff179e783a430d974b92e352eb9e46d7f2fba1cc4083b1f128edc57652ea92470be2b78af11eddb02220a62bff3c88a53818aa2045b7d17887b88720a9107fabfa621aa6ebed73af14f78ecdca0f5aa1e042802ae9d2d0d35af0b1b5232588a69dc3b30e3d4f44374781ea21154d59f77108ac5ff360bee8fcfb7fa0a7713a05065541df969af0a02891830050a15fec2b6016cfd05ea103ffc1bee73995ca5ff74b157bb852700dfd44b387c18c0812168f5dfb21c36e2b1bd81ab6047ba6df3a565a0922054c870953f116fceb18c8384cb00bdbf565189332899924c907c4afd1e1940c743fec979ae809c93ea24d3eb5f37e5e3f22950a3f141572b077b6053ad5daefa2280b53ebf64cfcde8f304f09857ac3eb61aef7fc51035c39e02491a54fac70e87cb51cbc11875f5a360b37baaf9ce4926bf68707f43af603b820aebe1f5e7d829a682aab01d25599209e6781c42b900d3f3938e5b48385213327be0b9995a8d84a0a1874aadce107b39d2c722aed8a51a3e7edc90487f800298b220958f8dc4fc030b01d786a62ad84db3f14926906bb6f1ff14b6107b91549012a5c3b009f5411cf8a0f719209b742174491df15d09fad72746edf9477d81e498b4a32755de9e77a7c7e0db35f4df60c55b631098733becd52f18ae3fcbd8de11ddbb7c09218650afc15c689110120ca16694b4c70148cd51de211b826cc42e40c5c6eea41adac08eeda138bd2c0462bf177421b91f667d8c086488729869a287f0beb652242321f1322cb97a88d591ef947f2cfc5cac5ccedaadc240484d59b80e42bd9977246bd9cd637dc3a25fb1cf7fee553c37a14173e46cf5314be769908b3551520596344984c6cc8d0d95572f1a04a463effb9fa6ab74abe0c3e5222c654c5be458977c392064159f1c0e70762808acb85b72a5c0be70eab5f78c2468c2284b74ff3b699be85ed1cc95647302821d437785c67eb4d30f72b9b87c7c42db51e92d2a0f2e111b8c7db580670951b925432a5972006a30b890558530971b3131f4a6be9785d58c6cf7cbc5d7f2c166108c04863337c6273fcb1bb33b062e4de86b3a99289265d6113679a02e9ace4ca72d68dcd514d4fe2b3cf9c67c62e2a33b5d64fd1dc615800c15001effafbc7e8135b0c2e35ab92b67a72720ee9126b0a1b12670576bc105fac4aca34d84f2a0a02b48fcb6039ecb0e1d15d7fd24563caddcaf83b899f80d4537fbc7f9ad46396fb8944c7cb592951560c30b0df312709653e22bf679576bf39a7d82e3d81edffd59534eb4b5c007b9a18e2d842dea575d580745a871c63d0dafc377f83d981d2efa2f1dabacac6b80697c4d8b61878385f3791524f866e6c8bd6ebbc9d242fb2b507d01a45081b903373e58611af65099ddcd6268f9945998e0ea1e07f845556ce20aafc4ec9a999602aa10a7b3799ec44c4c5228c48df3e608754523ed846a114387a23aab1add4458dc30c5a137173ab0ebaf45f12390ec4274ace4b3a030f6538ce3beadb278f1dbdf740760292bfb728ffaaabbc459227e388eeff3d69fc5ce865deb93c0fab797a9233046e9ecf88de45e31f107b8e66923f843cfc6c6f8cf039d8d89c823b5ffa1ce59fbedf48f2c49e556d11dbe7184a035d2ca9e8b2ccb9017a39171fda83b20279948d2e3b24560ca9afa0148268228318280da2fff54f7b13cea8ded014749336cacd9f758d283178b67cd8e197f77a7a34c0e9b9ebf2f3423b120722766ff229a0a110dae02a0c8135a494613c26e3d51f1e819536f88b28be441280091f5f7f16282a659a117501e3c2d3c522c3f3b4956a3ed64103a8fd7051bc9f8ba97bb6b57491871a8e2c6191dbf47c5a3c0c05a25c2a714afecbd9fa1b0e4bb7af9276333581fe83c6ad71a87a44c90316122af10876149a1c921fb5409bc1452cfefbda08e03441a48ac5387451d919572628215d06972573f1dab312b48499d52a2e6900c5b13edff8199e738eae2098b10bdd11db83e6f288c71e81a93f581af731350612497414d9f7a9dcaa8dd0eb7f0fa194802767a24bbce8f5b9d3376bd2e57ce7f26a63fd8cafb022b0a3ec10347109c616be79b71b4b4e162d3abbb4dd98ca24687299f41e7a1a942ea27b1581a93a191c4926f6858244a3f18c72959a938eefc3e1fea0e63257dc17d2b21af87ca65361c17ee040dd4706ed6c3fd70f1c91f059f7d269e2f7652279a738f040b402b936e18e171e00032777135bf0e80ece8cb70c9f6812ec652681d2eec7808e0c1aa84afbca326baf3499a413f0fc0489b92560e1ec09214957a7752da9101fae5794b3c9e9599ce606043ffb0cb00a56011a72818b69d8df75a0ffdb35918f40851d94a2dc769772a73285375a54fca8c888a6a6192e09996160604d53a4aadb0a876029aee17051f3cb80789965bf188b780c598c6ea8857a3996f82809bcff23941cc4b3f2b5d11eb1fe4db22deba363e44912f162a1e3e210b59870349c05908b51f88f22bb19706dda0b4279be8ceb240a758eb8cecfda00467f75da4c62f7bb09dd92099576ab28cbe9bfbdd7d67a59d1188c80aa514bd672aa2dc717b89ea088ceabe69208400f5eb7a4399fd5ec64e52995fa7267ae7f75ffaedf87d51046bd7c3629dec153579bf339259926ca4661f7a510d165c34c9c3b79c9c90c62265ca6c988ec065896dd942980f72ce19e0bb28ee57de41e905655a3633f9e8b87e3d85cf2b166beb79588fa2f71341a022fa8d204f354e68e7f80712d9fe97a1e14868d8ac80c015e054904f0ed1ca5cc6699e9a3e43385c46afc696b8b07d5c4bd1a74eef9f547901d971947f52a9fa95395f3ebcdea2e55c464a01d3f70c9ffc0d912ea7e21d864aa40e1fed0c1faa6722db54580290c6fe0f236653a7e52d01724bc1dcf5a9f9b4ff76577861b241e9c48946f465b1239daa496fdf588ddfb2dc835a118d4d3d4337ef096312d22a87fd28385ffb3879204a301b94240af5c1269b91ab1971fc9f484b26585630c61d5714c889105265752bfe75123db9b92194261a1c90916bb58e4443d6899018543514d3d0928d41b470dee205901b5ec3eb83a547e8a9b76ba8b1e5e44c1722ed5c185d1b966b58dd80917a6a64dd43d2f6cc37c4f94bb61330d50c67ec8059357ed93a174481d479623196181bb8e37393dc8a3332af2ac5eb3dc540b3d013fec2f67203f45dd0e3dc0c48d6dcbe64616c50debcc154c79808ad1b90824aa671311f1ff052edb397f934426102868fe990fae7dc48c932fb8ca48b08303d21154ef4b1eba804d8097383f76f24fa3c8fdf3c4a9d9676641cbd8ad37df2d48c615e998af5b4c5e99179df42bb67daa3c05157041a2911aafb623c606fb58486f212ce3cf0b7d0704d55e033a1899a37cc9ecf2f3f740a9ba223c4c5e7b380f452b189c6e2ba5bb0fe2611bdcb2fa71159a38c4fe367aefecea2ccea4d47efa2b83b9bdc23345b213a0a915e366ee7da8224fe1c0779bb1a3ad473e93dc828d8da0535ace7ac01f5ee4fdbf02dc3562ad30df98e90b463ba8ab84f34b30b64f838c95639a44d850943d80d5f16b1f12d0335c21e9f903573a0f42e8b940350fbeedeb899c8ef0df1f6e089c82bb9871b8717bfce6dc774f218715d86b9ce34fda111af8881a56ca37b4cee29da85dbb9389a97e74caf86c1020aba77a131636586d4c805f36db57655793ab43cf8475dcd0a973ced973ebf7e9ccfd57a6eb2ebe584f9de403e8e3634f8c02ab7b2a0c08e78c34b16aea9ad94f5740593a8d83cce98e824de7e2550a2d785be928e093678c99fea016b255a7387fa9dae875d144dd7dc7015bd75b43d9b115180b47082ca3e29be3f37ae3ee4c3c30cb93ee61168ee758f7668953a81d95f6793eaf0dbbade40cfe37453f825016c1d5a58d981ca1a6902b8ee00650c05307914ef3ad7f8b211744690eec2024bb8695851daacb51c6f7a6d43752cdb702fa3e54c54cecc778a06c6fb62de7d741caf816288396c5b0893235fc00021644cd68488a352e592aa07d764b1f9bf51bbd2f5f5f25a2c5e795872fdc08fb7f857fc70090f5c8e579f376e4962c91d68d88e63214aa2db3cb4336a3589b62831bd31aab622342f75a557736cc6249db158a200cd444da2ae46cc32f00639e32388df4597d44f360d20359598e1de992cdb4e036b3d08f77ff85e04ee8e026b8e684d98d0c4e5994a388482049bee6059642d6109b8b2a5a8d10fd682c64f3c7077bbbef9d0e0ba1a12d5b25cf9765c9f0c8e2002b6afc82640570832ae3eed0cc907479a60db85140a86132c182ead419a6b2798b2b15687ebc7985cfd4cc0351f41b1bcda39f5d2fdeee74cb67a9cd11757ab2f071db71c2e7c37782b3c9ab22d256b36b8b45dba9cd4f32217975f7247d272456091d5c118f2a15b40fdb7b0a23429f2ed38956d4a87135f1281cbe426709280af505d6b65f2b1c2f1b959e6a4f676d43ac422db652c4054206cf5da7b21a1d18bfcdda6b690596aa3ac6c79e97387719bea86cfb77709c72abb3ffd762460ed0f1cc7d6c4c583c95137ec28632354d31af19f4a71925f5b737c4c1bb3dbddce712d8903f20d250394ec8845bf06b35dd5bda0f83f4e19b26c8f9752ee48a95cf724e164b6a4fd9bee67f38826b9ef13cb8d015796d21c061327c5b20010552d0c1375a502b2d8ea6bb8001ceb829a1e28c32f31dd795a1cdeaf74fa448dd39525af8c92a060e6976f2bd0b42fc13828e844ee5aee7d1ac111b90cfe79e90d0f8aa014cc6373a6933c3d58aa3094e289521d06c6680edeadf43ef739d738ff2bd02232c9b6f565cce33294051c15699276c300e1d65b7baf73c43e0b5c791fe644c55d4a41cd11ed7fd381ba1bc93487fc8cbe7f222d48093fda4aa2f134aeb95fc625d32524167cb687e90ec12bca2af2550d5e0b8cca6de823b3c79ecdcdcec698d283f8b8e9b88a117da3f7b93c0aef7c555764f9604ea9bccf8e81aede2af2c8d8482301b92a5a2ca7f6102729e8e3dbc063b395769de0b0ffa33be1d998263591aa2ad41f96ec59485c0040064f03185d96b43ebc5ae9f89009f6f0a7b7d2b055b0823af89d0cdc97809c7754d04fe2713c7cf3981839a35eccf9877ae0df5225bd4fe0d3f37648894f8bed92009416d535f00e933cb84f5f2e550e5863bca9ea793aebf50ca0db1e770e8e3a0179e885035cd5b39ef8e077a0298963120c11c99e21c627f4e00351a670ccfcff8f7149565a1f4fefd2eb3e4fecd933228217032e0ab32e38f4d845056064a25948f9c7f199844d24eecb5a0573daeeef157ccb41ca6dd6fd93b1d57851d1455004ce84051a1551e298cc05fccfcf6d886ca286c7c05d2c44fa6212be62019fc268312390ccaf8f4c29964123ba87a28dc0203fbf04ec2fc1826bc8da6defcd725b22b4b78a88f7290aabb7c221157ea6785d26be66ee3d8d778de170437f2899c69daadf99c39e4038c5f71e041d76d17c5f507e2b4cf612e14c013f97c0943acda07302b396f23bed05744c5550366cc5df0fd7637b579503b241653bba0fef2dd2c45d0e873913f5a6db93a0d6a19368e9c1328dbbdef245bf0377fa2e338345ab4039812fd0f29b98af87c937c9b17f1541658d17610fb8e57e7b3f19473e533b0cc97770a46144670aafb2b4bccd220263d82b9d5f3d1141f625c98f8ba2ab70f04c4ca8f569605d943690645007a08ff373459eac7775f8d9aec124459e14cc3dfb98650ef6119ee513a70b455be99f485e7a32f43a7db2b6586ab8ebfd69dd43e5f383be27cb10fb404fbc1bcf216c2160448be361002ae27f61238ada2f5acf54e850519300417b282e3e2e17e96bc2c05c765d94261448511fdd637e24db0b06dad8703836f1a792678f19592cf5ba146fac37ea588af2a790c4d8528e1dc4121e2e73a6ab604f3ce46282df6fa66d1e59792deadc357228d5fbaae491447245cbeec3e75402cb373cdf95c6f77f6087118675c2bcdb70162345f65befe7f953035bb559af631387b7b8cdd779a0b278abc62c6fe4e916c5c39268692fa1a3385e80167fb3352f29e25d8a43360603f9219e6426d8ea9ab5bd300dca2635b5787314d836d8225f18c753c34589e277d9fd49fbd18bca1e2ad6cfb6a372d204c4586b881aa9c1b7fb3fd3be4b2a58d48fb1004423e4405f26658443e4acc085bd3b8028603162ea5c08cf724965e5fc909d09fa74475585118721077bac4099b5284eade909cececf46259fad55024ceb020e4945c70d3a50ac26c90103c00030000c0003c00030000caa38fe5ae8af5453999b32d4048828e15b4bbb222252eedbeb010087510000000040e207faf8f94ae50d530ecf0c8cbfdbbee4f796dcc51dac132a2a25d75bedc20ef9aa09bb1bf11f2a8744223a0080882eea606c68cb9a133bfc4542177448f21ad77a13ae559f4361ac4a081fbdce5c0ead85c9f5395d4fb57178f7f2e47c2997c4281cae72cfab1b3bd46ef60de8d7df9bfbedc966dd906859e5a2c4d406ea4ed68f9627d225cb86634aa973ea4e26afaa6bc84266448923155fa36a48be3c4564d234f49792bc78c50f9ea3c1387eb924e146bf3f43a59a51dae629a58f19bc68ab2af38fe9da32b49aa49f9ed4e9960cebe5fca9613fae9531e89a443f4fad9f534e0c6c948ee5515ecec44c182a494ef7e46cb1d7070327e6d42016ee1a53ca17ca315e94dcf97cfaf18252f729254fbb4064ac9d145f72e18ccea0f5e516eaf23b498c575151d782256a56e612f4cfc35930c378fe3bdd146c462c707218cb1b5593ff825730af921452e9d337875638577e5d93990ebd6115ccc15a3e7f7bfb932015fccd268931a6b097d729901416d04514d0b72d413c7488d51c14d064ab621f92192bf7046b273d364997a4cf7342d572d6d59bae235e13f630bb1a7bf19bed9880b86a7fd0ec9660ea5dcaaa9d4ad14d0998fc1d2ec89564256b49307fb5a4bc716f52352460d1bace433e49a5b123dc316c45fb8f963f6346e8a2084f67ff50fd1dd522113c394f3272a9343304c5634e45ab965f2784fe4555c26312e5b620183ae45c46e7e6990c0877a67872ca26a942ff019b33db1a2a8587ec03538a789eaa98e7d383f36b85da7729a15c1e745963cebffcd889ee80b173f7cf705331aa2e74e08d5ffe6e9d8b2d89c16a738eba3de3c2181d294992f23829b7b02d99a429f753ca650bedca66c53b66c844b5b83bddc6f8668f2e2d4ac9a3a6cb8bf6a4cfe2bd4ef1c5a2eccd461666aecf29a6e85c6d89857dc25d0aff5d111116764c8274756ebe8892904824e48718328844c6d80cd478c5415a4454fda3c5898744221b8980b1e30c1f3fcaf0e6e1001d3edc023b9250c315754ae26e5c831aada8c10aca6f442e9e28d71e0e8944de7d3c2087037414e5a0c62adcdfbcceb13da63b1a12898001011d35a8a18ad39bf4df558c96442e418d54b0255ff83fc92e4ca6432211303490030239c2d001821aa828d786cc91269ad0ef9ea2ae1e1b934eea5039690af62d2a552da5b4180f0ee40843c70c6a948214a3c043d3594ffae99b4614c6c73371dec2754c01c00e6a8422f17553c9b7b61f75058596735bfe79ccb1800e0018a1c6272c6d89fd2ad74bb3a1a4862756d578ea6693c95dd389c2529e596d4a1d6585ec18638cdd11f2e3057eba0627d86e9bf9ccbe27a6b6c70f1e168000066a6c82d2ac194d08ab8a9fa48626ec98e9fa7eee4fcace84b122934d6cee7cb060a2bd750d9b97798811021d3d7ef0b0808e05d4b8440d4bd4a8440d4ad498440d49d488c4026a40a2c6236a38a24623f83129b8a9a6e6ae6480310107e8f8618606784c20a406236a2ca2d512f914a6e29ba58a2832685bc8d95a502311c5a81c2b8e8941d4f388304d78fa5789f2546287787d73e668d9bbf79421f0099373905bfd300b6a14c2ca5a4247c449f651e7518310e9c5134bacdcf4eb778c1a83f0a2b8ab64e793b6e282c0934973327da1a261204a721a957fbe35658b183500a16a9b5c99ec7d8d3ff45771f7637c7f09b91f0cad49e8a4be163cc614d4e8836952c7fed01cc4738f851a7cd8473d57a6f5434c6c0935f6b06abe9c43fc8d86664e50430f4962728987fb6492d31fa891873298b45e8cf3b94d432211ff61c60bc898410d3c7029d5a9b34a6a491b2bd4b84353c2a64959593185ac0a35ecd0f4e55652d5247bee52a85187b2749abaf01257e2a5436daee561f43ef83bcef0f1230435e650f8513191283d50430e74be9cbd6346fec7ab461cd00a9da16365cc24546ac0e17b759b2e9dced2ef0d5be80cf5b638de41e306f65467f457ceafa46bb4e1245b66b14ed241d584400d362c126635d7256e4c768d355019aace374dc99ee2851a6ac8356515adbc79ad7c1a52eda8bd9e5575fd45c3a993557a68a96469ce807d68afed1c9a21399a6fea49c9b65f86a2a4540d561e36858c0cea6ec6ed939593eb312454902ccff1ef3c586230ef8579ff4f1d93fc861a61d856366c35c34cb92524120143f595a7938934861a5fb804fb0cff69693567470d2f541a9f66426cd0f12d241261438d2e949baba52725ad774a482452460f34d4e04225058d2795bca6cef70079861a5b48ee3e134b91fda84c991904f0d1e30960060f0ad4d0821baebd7ce22c2503307c682012d1428d2c30b5d9fced3ebd430b89445cd01ea2c3c7e0cd420d2ca425d9eda8465914b5c615b0d7d2afd0bbed5ba1134f5cefe49b2ad4a002dd921a2cb6878f6656a8318534e5d12445935cb73d07e888449850430ae61c735f4d4cb9c763c288418d2860ded697e4fe637f5e50030a9468d1296fd45451fa271075e9335e8adf4fe24ee8b2ffd9dac598627a9a608b49962a675e13b6c3045330a9bbd54a33787a0949874af24d57ce9dc34a28bcf4669bd9749db349b082684fe7934542f1c2ad4432658b8d39025956f99759bf522a8d902cfb52d26f6b4ab71581fed35892f09fe3844584e7a4933ccfe4b4c933842fdbd967d90c76292484c2c7e624b72597d341d8c3ffc5f78ee13d0508357e50c3078a4929c7ae3576ca9d1e741f3ddcb8db87e834241221a3060fb0a0f9df13a126577690581653a7d01a2d945e43077ce676cf1f32cd3e85462e8c5d16acc2ebc999352e4ac1353fb2fa72ccf12dec922f3eaa6dfe4f638ba36fce484f9e1fafd5624d39494e12b9e64912335e408b4dfccd3673f5e777165c9b4931a7743b16d516d090452925e1d27ca4dec22716945a8e31a578c3424d51e1f42a37afe65eb14699f45e9613d53257dc9d2aa5533bc992a65a5170cb249e548dff95ec38c3c70f562c55d7799d319572c380c62a0af924c798f8af59351368a86213aa636aa6ec6be791038d54bc312769d3c34f2ac916030d5468728eb7922794b8bf14c831811c12c811811c10c8b1021aa7388b7b8e4fa9ef593105256f9d10a6d96726edf13c2cb0230c344a41b44dde9a1463d27092e220e937267d70cff293416314873dcb71b9188b9e432211ffd183470e31688802078d50289d9bab57275f2ce2410314cb89f9cfa7de3dc6cd27145ffdcc24ff4edde9893b76d42c4acc61d247021a9d30d4b5e4e217ac8f11442261d0e08439875f5a4b25b48935ee4a98e86a22c9040d4c2455986587097abbf225dc9d137d736c2b69244b5cd9f2afbb62b831f9c1637b45f0011a95c82cf6844ed3944c3443223b7cf48844c010410e0ce888443a408312573e9ddc24fce5381e1a9330cb78ef4b49a2572402460a948624ccec294fcc2565cc6f262134225146aaeaad56925445828467e69f1b2a76820ad07844d16a2b25ad2ce57c0ac03880014ee08810d068040d46d058040d45d0488469eec3c66d8c31bc29400311748814d030041502f774d2c56cbf2533134293f24a89712f2a9b86c620ccd99a52565df7f9bc20deb4dbc95d9b0cead141231009e69633eb7aa6ab3c20124f0e778dff1f32a99fabe898b2cfe3075ca44bc3626325ebfac0a4c9861e8ff18154aff99c613487a6f6705e2a39689c8d7b238644225ba0a107fa828dfe09591353f2041a79d8c3eefb77e79c84b19240030f55dc89fdeb77127632028d3b981d5db94a7c5940c30e9d9770b15d3c6b0a0934ea50d28aeb9e4ffcac27191289e418638c85400e1d0028020d3aa07de9f3758aae3b7f4824e23da031072dbca84949e23d853c2412f9e1637d9841430e69ee89ff0d5d7f731c8cfd295a6cc75250b50a34e090bc267eecb4513473f60d5e4caf296a9f5b4327051a6ed0b26a2ec94ed0bb126d8321b63bc8863c3dc10a89444040830ddb98f82af723b2b9b2062e099f45ead2e57e510dce6c9a9c9b33854e4b230d7ab0123cd2c4bddfca183e4290830734d090fab5e7ef20a992930e24d03883a92dd473adefece77140c30c58275593f7f2e5f7b60c2629f4673aa66e7fe90634c8a0b96ef419bda99263c660060d31d008030d309c3f7d666ffc2c99121ad0f802e227e7e50d992f74e80c1a5e7893e4e33154ca4bdae982319464c1921ce33ae5148106170a9b243c63b488125334b6c0c8c7bc6692c40c992442430b44e6106bda9fbac9008d2ca463b97a62ad57d41c0f332e40030b6ee6f8c7f709a9b38544223c765480c61568588146155c4d959b921cbeb9bd9048a4c7a14105c7e4ca277e1293f7851f40630a67a63026a5d41d3589c18086140e9f3676c2a4dd36e117d08842fb9924dd4ed5cab11ed0804226758e399dc62017cb27ecadb9357aafd459e604b3d533c5e093551f35c18f3b29a5fdc5cb4b1212899c317abc8006138e54b79061272fbf4886185b860f1a4b30b4c6d85c2759844e4309dcbaa7b85021ffad19d04882a9726e975acbb8cd85b0808718349090099a83e65c5e2eb7d33882261d65762dfec48f1b21a1624ac124b9643ee700392ecdc861ccc861cc30c005681481061176135b356e491a5af107680c6103348400021a41f83fe5a85bcd133dea011a4060d2de3f8da7f3ef93101e3d7e50be54ef49fde622341a3e38555a3386fc3c29fd212fe8e123029148193da8c4248fdbf4ab05cf5f40830775a885cf10f1359592d0d8015b71e3a1639e336b34748006fbce396ab3975f1310402e12f32dc9d9a73d76cac18531a34ef6a64c6ff1dcc229c9e4d8e28aacf7db683e22732d0e79e15d726f86932ab4507ebbebb4b2ca49e62cb28bbd7b628c25e624c922e935e6243973b61426b110002c04f00a01b88205d00a0d088015b48a0508401502488500502180537ce97d29f92575644000a630e7ca5f17bbee5b3a1304500a2a6a89d93d6d3fdc8714c6e576534bd198e1512494247d3eb18ed9ac440206cb4244704314648893b3567a2314c9bf2a72952463ba68106e80e2e89dbfa975ed7336156e7c6257db8a323bb6e2fd0d4fa8d9e454b7624c78ef831b9df8bedb9224db94d0dfcde0062738ff6ed91cd221d64b2047182db8b189ff2c9b7caf5b060b6e68223159bc7ecebc6e64e206268a153e3e6365676e7be3127a9949527a6c422211bc61892336665a4b25df4954c68d4aecff571772f343771912898ce00625c850391d27cabb7ef8fd0393384d12db4bcc399d9329c10d4958e5a6e936da891a321c043722d17df04ca2152db74972e00624ec9b4a41a6ba3bc594471c5e3c76348f92a3578ea0e49225af635790971b6165ae5effd4956f75317c84c188677dc3e2a4c9e31713024604427063115b4ee1352f378a38b2c7d44b7037391cc68d44101773cc5167ac529ec5308311b1b94fe5d08df325e70e9159c54e295ac8acad420cb1554a7ba3194d9c4e62e046214af25f67cea7593f9a10225dd37c9672f01ced0ee2f99252123b2fc7cc193d7cfc28c3cf0604b1d494a8bae7b5212a2191c88e1988f18120e4666633fbee330b08a65370cbdec152f22a2412f9c373eab1e35b82a49884a1e38783406ff8e1b28df274b29be5b57dd0d32f98eb7d788f9a0f59cc8ad9afc4c64fee8cd163c71ebad160e772e298dc181289fc583dec73a9d3f2c9eb1e1f3dc4d821811b79403f3337be096b1d3e78204d67cd7274cfab5d88036edca1964b9f3dab520e936be0861df8fe4ec256786a125375b8a4de9382f489ffd9840ec96f551626f97bf2650ee60fde2587d73bad0c10dc9043f17e6d26b2d6d33f71c864694fff6dc2cfd52170f0525aea9f6f8c31fa6f703bf47eb4da5482d66e28a5d7d849da8a4a761bdc12644fa8eca6d5dd026eb0e19ecbdf1bd768b25ad6f07d9a4929c9456506dc5083ea9ef1273d5e564d1a742f57d3f893a65502230368f0246dd47bbc36537c866f2cc5985ed54f2e49cc50124d716314bfdcaa96e1ddd81ebf637bde4fc9608acbace9333a86b2bf72f7538a9fd712c37163a5b0bf7031a7948f1e3bc0b81106f398e0167979e562320337c0e049f953ad6bce78921c1289b8c0bd8c1d3c3ce4c78e0edcf882b57175825bce59d332811b5ed8f2957872f7e5f04b8544223b7cf4d82183edc2b17bf7cf7e57aaabc80d2ee4499efda81773824a6114e0c616b21832d55b88544bab853c34b3e7fc379e52921e3fb2704ca7e1a35c7e69562d70030b7bd44fd1ad98addb0b29632b1052c686682047181fb871053ca35e28ff781687808e337cfce0210117f4fe00818f0878e086154a4928f9dab3cb36d9d1801b5550baf28e5a36b73c2f156831bf8ab410bd8f86ecd8c1e3779051c6ca60c78e1e3f1670630aab9f1c3435b2c413062e05cc24fb244a499139f6904824033a5c0c1f6168e04614921b50305da60917a1ff8e1e3f7664e0c613384bedf9a153499eb71b4ee8422463c79655e78c1d6359c0430c17b4183cb6dc6802277790509d33b17a64c10d26dc58c20d259ce04612f80612e80820b861841b45b841044c2fdf44c3eec92b86442225b83104f3bd3b8973d9d56d211ddc108296627e931c9f193b69702308c6f2d499dae277339e88e08c1b40b8f18314dcf08119377a60f624cde5a5720b91dde041e69bbfcb624ea2a6ce0eb6e91819a74a263d764307ae78a6fccef6a9f1f390de0cd8c88517f374dceac8062e9270919fbdee16ef8ec660e561a756dba2b08a91c944d10a366fc0462d0ed5e513265694ec9191011d3fccd040056cd0e212e2374af093c284fb430c1e6294b121703e63351089fc108387183cccd8e17cc692118990e16464c0c62c32604316975a9db9e9e7d8d4b1110b7d4d2e7b57b8974f12c236606149ddf59b92c6eb98ee1318838d5738d5619697935cc173aef04a32f7ce4884c9263a6cb482f45b19cf2727d1666745c99394c4fd84aa4df12a3041a7a23693fa9e50c1862aca9f2f6ac650ffe5978d5498fc8413edbdeeb3a78c600315859f1426d2298651e914a6dc5a5315639d078b0d532445cdac29e5246795dc0e6c940213af429f249fdac8860a3648516fe650e39bad75338a622c495dd484becc4a083644e15ffc24a7f07413431f0a2af7c450d6d920d800c55127d97c7ed6d4e2f9c4ba49b03bf14f88aacc13d8894992247736f5bb3b60a31398249f61d26ac9f2b11ad8e0849a241f2f312729a5f36d6c82bb349fe424f5e44860431399306dd88bea1d453bc711d8c0041997eeaa745ba32d021b97a0e4100d6fd5a51d16d8b044b77e19e6a6ef24eddd462516559fec6c273596131289f8581fa3043628416df08cf48b89de7e125ace4a62926a743a456d482229b6e7d87a6a2412bd84f7080b736727244c93a2f74bc6558ece234c1dd910bbb5996704820d471cb52b977491ba49f47cc04623dadfacacf1fcc2b262011b8c48361d3bab4b49d8136d2c8253998a9e3ac5063614714cd57e25f9b2ab5d861967878d44b89fcea6346fd64c794824620311f84c499f5d4ea80c246c1c623f49f5dfbcf0f738c286215c8f53b1faba9048e4f818bc3e066f256c14824a23221563ce889884304d74cadb60523a4bf1818d41b49b2e6a77da915c1098dc19d253aa277c272412c9838d40e49b64972fbbf0379a904884103600c15d0a1953dee6b57648243206f3b04024f27fb0e107553b548c7bf199732e241251838d3e983eb7da56f5dcc92963830f6ae5cae57d60544007080020041b7b6073964c4bf93161333d6cc0461ef8557b8b99e3f2e52436f0a09a58e733171f0d848d3b50567da2e6f63289dd0e6b5a4fa9888a8893ad43fa1b4aec68cf8e5ea1836ac2863a970c4d85fc104306dd230360d89843a331ebf9427806af42c0884464d0638c311c90e30c1e1e011d67f8088387878471060f8f402462430eb5eb54b81cc3574de54005747c2012a1818d3860b51a2e45f794a4b1e1e09b10a1157f4363d32120c821821c21656c052236de40b46eb86bda6a851f1289f42883470f084c0003392aa0e30111d0808e336cb821b913f35afe7cc2cc4a041b6df8444d4cb5ea11820d3618427f5b374d27d9cb21d858439f5d73564f1afa332e031b6ad035564d65b7db24e521395c0c1f611c000c30c030669c1e1be80f4422eda35d041b88440ca0231211848d34dc6ae2f569d9cb7d340367380622111d2db08186c7daa45d37f6e97a66d83803e749ce71c16ccbb22311e0c186193861d5e4254de8b33d453046fb7941197ab05106ccc773dff6c364b3c950308ffa175636efde43b031067d3ec554af269660ae18b87c62ca90f11573fe9a60230c9626f32454c893b33c146c80e14e92a0211e2d2bb6f2c0c617e8f64d5abbeda33a25c1861734c1cf76ab4dcad9dd0736bac0e55c5d41f3dada2609f9c0036c7041ab60ba317b5432670bafbbf527c9c4132ffb5a3844a23377ce63c2db5960cdbb525d5fc6b83116ceb06143e6fa5379642c8f48048c1e7f05fde2d66ffed86d726785b29689491acfe93cba21111b5568df4d92e47052126c508117fbb0e61219d59982eac12ecdf799a8e1337cfca0810d29785615a6ff5ae3a5310aa5925a37e77c52563cb00105cc7e4e52936578f42191888d2798e25ae54e1d321e4320d870c2fdd51de3a794772617828d26d4f291e51ee59e921912891cc0001a00e30006c871860f07e38c17c3878b40870e30cc580f7141f71883cbb811071b4c2873ce98ff1ca305dd2ca16499c16dd317e23e1a6043094a96fc67d8601d3713128994e163f0862183f5118930c04612927e6663928dfffa186d03098d544e5e3c93332ce708a8f8dd05132d79c6d6088cb7c7dfb41053932bc26fa1e9b33afb4a36229cde9d63eb5ba3bc830c1b43d02c3bf5573e93c91662430895cf5ee5cbb62f4b1204fc7b5f4fade4263d40e0c4fc3dff52524ee50756b2d5b0b396cd261682367ca06888cfe96c982448ce43063d76f4f811892cc0460f28cf0ca231fd630e8f1de30515d0d17e7a404087dbe0818d1d242bf351dd21277e116ce8e0cb9f743fd5bc885e5210c6097454a08b5c9825da83c64b21b752d9052e700d97933019dd92a8dd22ed58c296c966b9518544223bcef0f1e3bab04561d5c49b4fe2769f36461961e8681f0e88449ac719d4452dbaa04509ba98c509ba904517b1f0f6de5eed24643e1a8908a10b58b051d32a87b5f94b61081837b881fb30a38c1e63740d6a10899c318373361201e38718eb238c001ca18b57f09dfd996eb129c419128980d1862e5c918a65e8f9e5e4317d4222111474d18aaf82a8daf8ab9cdc219108182948228002c00023b12a1089e8383d361089f8e9c12312e173021c74c18a2e5661ac6426aeefabe2934a4eaafd1aefd949859562be127b432cd78d0a2e57a9ffcc673af14222911bdc800c3142ca48400c6a50830a74710aabe3dddd6fc65c96fd6186064a17a638e64f617d55235f9e904824e9a2148d26f5ef8f19f3342705776327768ae6132a338a840f9bc4ec68794e3751541e4f324952ceb691cee822149d74f2ac39a549080f28fc112fd9f2b098be7ec29534b38ff24de1e43cd14527fe3d51f3e6effb30931874c1092c49164ace7192e72ec142179bf82f67aea8daf949fc7474a109339b27394e8aeeb55e269edfacfa312553eda80b4cf43219bf4eea52df5c7671097ff34489bd1b12899cf511468e1c398e0572b84f408718bab004ea2ee9d51662ab5309b3798c663a13de6f4a9cb5a48c269918273393e8d3e5bc7ddee5952e09c2829fef57ea8ba34782d318d18d1e6ffa73489865fc56dff347d4f9b24eae92c92eb923ecce27baac6594d11bd1650d993aeb6b680f23aa7839bf999492a4bb08cba3c9d932e528e292720e5652760c194f224e4d594eb6fa9cb53a8840a5e72b776bf80c9dc410d445217839e1624c5f25779a10dc455d3be9132ac50c828a5b9fde4fdaca600ba2cfafcf7ed63fed09841e35aef37fc6cb1810f466ac9c0c19259691c3145dfc81cc731aaa37e34c7a3f64959314f2efdae93e58fd61528e4e95936788d0051f4ae69a72fecfe99caa195dec01bf0c2677326d2f131241177a38aa7c499eed440d16ee220f5e5e8c299d184bf493bbc04309fcc49bdc7b1d4acb2e4d27ed78e8d0814bcf9836f557a8f41cbaba7811b11c92becc3194892726e1385c152be84e94a678e14088a7c58d4af5297d83926973328b7183a65f52e6478d6199363467929d8bc906e37e9e18aed364b6863c57789e9aa8944e0d59d0502e9e3f2c6d69d0838ccae62bd91f0d865a341dd70d13277e86fe84e8a0b219303196760a76194cd5f162c65dd4d764b8d4ac464c760ca5b3acb1af37e64f1143aa22257166189a92b64b434db58b6028ee8cd69afc51f7173ee15363b494ada879210b271fe326c227eb82dd31ee3c9a1c2e1ca3677e4994705372b6d085454fdfb9164c711dd367935f2d9c8537a7eacd9d0b3e3216cca751db84b7af9050b59bea4eac60d1b6c2fe6d1ab332b763da5538a4c6971c5328b74d53814c51ccd3f465b8949ec2a12e26b97b978211963ef8a978a560145cc9ae3c9ea79b0205b353feecf172fd9ea0c6349375374858e784322afc4eba7cd142dd04baa5424ca887db30c1fc239e935c1974f32550e9f6f25446b7aa84e3b4db4459dd6c7292c0dea5ff999872dc1b098d4b6ce9edabe78f506aabb5aaffcdc84658c3092e59a563f12d4226e639297126936b8890249ebc96d1b4e26708c5a9872eef6e0fa710c85062c8935d3eda41686743a47aba7f3e2094d3a498d2db89afd90f8eca29e9bc5ab4b97ca046c5fdc9f6b361e21eb876f132ebb6739807d7e56fcc214334f63bb85657a6e35fe8609335ff2edada499d5ca0677672924eae17e362933b861234e6afe8dea21c63665b0a3fc135b6c024317db8122e67ce5ab4714dfa2a51ae2e498b2ae3c7c2e44a49e52cfe0a62f2395c5924bd6b4a9ae7a7f4db58e41ae773c52496696e61e1977b999462cc9e6c5fb18929a70ee6e1624deb0a53844b7e2569cda26dc5a2a31725ac983427cb8a725f3acafdab4828b35afb348fba2a4e1fe39438bdf7de49c5e9042b4136ab55dea8f8d2e54a42b8f6a69c02cfd96b326ffd86d614f988895ec45dcc4b51cc94eea3bac58a2a294e9ec3a56dbdb87c14b8ea89d9da7f6e445164e5f2d831a148d67c7279b02828f0d44c89ce27cc8a76314fa7f8d63ce1cb592ebbdc955aebc47352aecf7a498a9a13495216b6263474b43651e77839ad1b63d094263ad953846c4e0f93341377ee910ff59c3d4d1413e8bd9fe5bdc52fff12eea65c72f26837d95b228f1119be792594f1b6f1b0ee4a3925de96914c5f9b49a027e9d55ff6b20d1b496051a22475999e8c4d244e9deef324a571ad8104be1f5f974d4c55d53cc2ac529e9d72698951e388c7522e3fc534a26d4b8b373e1177318c304a73b4624c29a26216c169ce2a12fe317e1a452856d14f1c3d492e691241459e96381bad5c348830674d3c6263a482e610fe055d0b4b9bbecf186289381b2931954f640a61bd05b30d99ecbdc41022df9872b7561233ff412495c999faeb926d5e10f798a64b748d863d10a4266d51df4ef51c406cc1935dce4d5e61ffe1dc5592497b9b2bd77e502ac7bc244b89d9e13e9ce64dde642c5a74f960704fbfaaf3a1325bf670add9bc7492d3f55af4506ecd9d6ea62c845af29009699595fff2a5b4e0a174c2ad56ee76f24cb9c3792a45114b79d5946287a724a9648b1531b3943abc51d573d91635540a1daed8355f1baf3386650efc2539a6d0d40bbb15399c7c3ebc49716328b11287ec376c38986622ee7ca2e2a5f206475ba3b362099e4d8a1b12e53c7f4999c136496983653e7e2959be127c36e8a296d2a1b3e9f66b48aa9472f2cf13cb1e3598b1eb19b2a36677d3e0a7bcc6aeff286bd140dfbdc87ace7c5dcfa06b4a4b8f922b4b3543775e196931c4322d4352d29885b9907f1a32f49e2bfd7162e63263a8ba93dce9a6da7411032756783ab91286ea84194ba2892e6a82818d317f542b49cc5f7e810e936f39eea549985e703b55a478545a13cc2ebc63a627bae16c73c98523bc444f15992c77b9857c57bf04ef38bea9d442f561d7fb399f2b6516b8906526f49eba9a2416708f2aeaf2ee15ce925a82580aabd1add0547c088d774284a70afec968b4685625ca542876d96cea58629284a760bcb8a1af29f22f2b8583a674afc66c15d5281424c3d726ebb2325048fa8dfe74e713e8ae0fbf8c27d8974e28c5cfd22ca5cbf29a700cfea1116769b263c2ab59343c6a6b32b684e463fa2737aa4fa604a72429c25536947c12ecf827cd9c1412d0c9d8deca749b2a3c42e639469b8fca084ba94459e59aa8131681d3efbf0e33e76e824428471f1793e344e7ce10cc5e62b59712c2de39ae256ace9fc241a0df553ac9d96b1b20d49be6c4f18a3e17fd41e246cb8d3f9f63333ed8a3a4a5545f4fbe07c9d9abfc53ab870f0ff42425eff0269820ef00d3949473cb0074a05e447bc7e482d02cd55963876578b8304ae5f3cf47a457778b44cb5393b01a254b670b72b3a7e82d17aaf3b5b8fa7a3d7e4e25984f0ba3e5bce94cc1cffb59146c73672fb563e4b230e537d5dc27168ba789c59818d7c302d1f47956625c65fd0aabaec39f20bb82affc9db3b5565426fc58be9c537d31566839c8acb47b4c7bda2a8cae134e8cb3fe699a2a8e2d3529b35ca6312d157ba82cea6296a4933454fcfb35fd3326b88a760a4bb8c88b7f82be84668ac2db4bf3224d8c9a9522c99fa9bbbc8c971929c8f1247249ce280a9792580cee1f991605bfa963bf8576ac43518e6a2eefbc63515030a32a75b1963de513fd9fd027ab498c26eb095efe643d86d0fa742231a62476855e8929e584e16c72fbddabdd4d987d2dd2cf4cc8531325134ec37b69c99bc944492fa9645a0a13d889299f5096ba441a4d70cd26799858294b2c5e95251a1b7f2a5589d2be539e74b245c915259c8ab9f12fad6b8ed524d2a896cf52e79b182b49e4a37133a5962459ac22a1e6fdb4b61a5c3b2b4824d6b947d3cf55b8ea11858bb5693efe4aaaca11668ff9ebab3fceffd4884b46fce24d2ed97c6204beaada15db84f2382d023dcb139ec2dcde4e8a703b3ee8673a39859d12b175ec4db9ff728c7142445f5b52e668fd191e3ac41661154d0e29b31d32045aa1ef92501722513e4ea667b28999109cacc13377ce3c130f62fbae901f6edaea1504ebbed1c4e0a3e16b20ea3c61e355f874290a88e592446aa9da96fa877289966297462ea87e483c6dea54a51e2ca60fd54b69e793e2e4d0f081feaf91f1949d97b2072b548e116b99b356f4c0a6f7d7cb394985310f6e9233fb98f7c9ed111e08b1084f4ba20916a33bdc298772f3b6d854911df8124a3d7deee4724275d85b3cc5f384c5ced3a14dc994a657b6be9f4382fa469d6cbd6c8e1c28f943a714f9ad76c7418ba29abe73b3d78643153a4ce72fe63b7e43a2874af6a72f63af1bd0cad99226f92d54d306d3a6fcb24cc29b56d8a094dfef5996341d5c4397525d2eb152a58b6a587a62d37353f4bd347c967be282c614ebd0a0fa499a4bcef9fbb13324f98e7c753a1bd5cce058f40e1eb6c6f365a093943945ff3cc12743493368b6e8bd274c6378263fe7b2b23a411283a59f83668e997aa2303c267487971018ce37e9c9c8a81efd021d97e409ad34315e387dc99c20a3992b5d38fa7e969c3f4a4d922424128941245286088a175c7832dae7cc5dcfafedc5165aff24485e5732e801811178a1054c36e9434e30a942be9048c478918524f1ee4e4e713273c70b2c147cc3495e76035e5ca137ef150b96b4fcf4b35e58c19b28f97c39e6bbb75e54c17c9ee52262c122d790157841853f06a98d5bd51be90989442211304040c6ba8f1f65a0c08b29785379bdb14b7450c00b2968c08b28dcd99e243937099997175038a355563c85cef5e6c51312cdd7976b7ab6b613f4fb0cd3494a4c52b49b805c745ede4da5a82b134ebdb2e994c6e6374b58f6df44acce4efc8a1256bf987325493e8d79124aba37ea1b7d766e44c271a399611db5acb62394c376e61e934bad848cb0ed6849cdfe9895494824c2021f4e0602bc2802b7dd2d65ebd5a31e193e7a3c1822c881811cfe8233c2d0e12ce0b11ff8f50c44222cf08208fe9c7049c8f28bdfb91743c02d8d055fb9aee4792184a735db889d1c56e57a1184e20510bcf801ff297ec66d6b133bf5812e9ea14e2a786d6a767848bfc08c1d60782047067494c08b1ed8e27d5207139354375ef0a04bbbde9af33d1f3a2f764067467dca60f142074d8613eba3e887ec7c2e38a98c9ec77f63ad8b8ba3e424caf79c68c6945b6472bcdacdb9daa20d1bf75765ac05e3ba62de31ba9294a28526c79578e7b652d1c20119dc9845f1a7366ceaa8d4ad0471431664d8bdf093f6f9ac92e3878f1c3a1cb023103762d107c98e19de24692ee6062c92eddc52a8eb4f89d11baf58eee26e3d7bca98a219375cd14ac5f767af2e4bbf15c7cb762764500b75eb062b12724cf8fb2dc9365b53b8b18a43977cbaf29bd733a707375491f579a9a58c27afe95424f5ee6a31a4c4ddcb0f6ea042b9f419cbe1aab7ea5360c95693f49231aac6dc30c5f973537d3c75faa68970a314e9645b55cc9f374f38448706cad8518687f48f2503004bb8418a1ba3c8c2d3ed771c4bcb7c0c972a5b0ef5c0a2a8921edaf24df6b2bc22bb0a0bffea30ff0cc7400e1f1e52c656c01575254990d24a5ba168d8e9d2d8e89c151cac28687897300fc9988457b145eb5f7ed3cff3bd2a38c1d259aed7ac686a07385261e8f0964297d4e13e2a3ea1242c53be4bcd491ce038c57e639a25b9c76d9ca6303cefec9c766592523cc0518a73484d396be7b324896a000729f2f7fe9099ab3911e1188517e72cc96b65047088c224af6e6b87d911d5ccc0118ac2c79252897a6692f11f384051dc4a9dc4d9df4d5a0103c727dca84935ebb2675c3d51de1bdfdaf06db58e0c31c6e8045f49ac9b2a21638b1e128978000727682f295696cb581c9bc0a109a38f54ce497f2978161289ecc091892d5e8cd8933a211dc08109bd4cd37f4c7125e57b89d35fe5134e3a4322114b9457e953856bd84e7748250a2d26b7be9a64c594c82ef26a723dc99b7242229110e09844e94e9e9ece581279fa2e79d4e2e2538c4462d12413644acc122b1c90e83c3579c84080e311e5bb90717b2d273bdd11c6b7122cd964fa0d7a2336f9e7ad734aa6c40f23d6d73539ff36774367115cdad4f09b62be30e11f3c3c06ae021c8aa0a44df6b0a7aa41d7445067219f9225c95b1a44247dcc90ad394cc54987e87248af13dde03084f92aeb55bfcfc478fb29c4a3596d3c4569876547f310430438087149f1bab47d5bf7c459b028c031885a4b52324cf41a739c17ac0640b0e3b88f1e3fca30050e41709234bf66f1f2d16347e20884f6212f7c2cc43b833924a0830c1c80d02ede3b669a0c7d2f878e1ecfa30638feb09f94a424a59d2109c0e187f373bb4948542c31a70f38f850e9b7491b542dabc684f0d881630ffd599a8a16935f923afc038c21e0d0c31996ba83798e49bbffe8d1e30338f270aaeb3013664bca193c70f19349ec4e276d4adf819eec246ed4ec61826b872ea989b9e4e3ca73b20ea544589adb998b71a343df57b92b6b3ea1de9ac372a29847e70c337939381d26dcd692cb799238147d3c26d94aa9f8e90f70c0e1abd14d1634e5903fc1f186b4d5a7eb3c555d7b379c2f553586bcdf5ce26db8eb438ce7cb6103e335b9712be4bcd86b387fcec94b32ac86e44a974ffe2ffc4a9306b4645d194d6d51dd82862aa3462ffbda7237cf4064ce7cb8643daf55080e331c6347bc9abc61234338c05186fb84794dd22193894e86c3e72c6163593777d6078e31e8d1296d86c9a5b9490c78ac3df1f2ce30301f63496ccf83a1109dbaae515267927cc1d1b7ec0e2727c13aa6070e2ff8ab2126ed962ef82945b18d492b896a73a1ec396636d94c1237698b630b5976d52bef3f593e80087260c0003a7cf4f8b122c881011d3bc0a105cdf6c27530694f4c380b76a578f7715f2cdc26a58cfa7f8c31ad5730495bec3d8f66f2c658a17829996931a13459aac0c794dcb7fab1a98c0acb487ffd7ac820c3026ac03105c3b9f5a6760956f24b61cbb549d00cd96f4f147e4dd27dcc490a27c550784bb47099dbefb1fa13dc2c96379bd8dbc5dc0975aeae4fb97c667769c292ea39a3e61ad992c2842a666dcf67e199525bc2995af6ae235202995e2c4acbf2c97a12bc98f559b765010f31ce88c01d702041ffcc9ffcfb3e8217e34bf95427d52487eca0030e2360e25710db8ca9c7f245782acfc6d774255b5689706c782649b70df596212476b9cf8652fd4c08cc091ef2b9673d5512178c610603c0123882b07526cfead6f17e7220e06b163d4be426b7f507bd5eb4f714199eb5f9c08ea9b72ae75dbd6c8594e1c38c761f3b9c0547023fccd040007c80a3075b48cffa13f3cdfd8444226398f162fce0e163bc60c7f7d8c13b660086057c70e0d733904304393090c387bbc0c792f1fe8153e0e001b266514c68db69fb71ecc0934377879aa4d135c4a1032a76c9b1937c9ea6d90e905cd826c6cde96ed5ef1f128924082ef0b5942ce93ba9a72cc82d92c7ff52988e17cff3b638c63093da53c911d1d742cb31f64b8e8e16e530265a2a8deb64726661d6a85462cffc981495c55272a84ac79458a4596308f36cd2769282851ea3a535ff04f20abae44e1ffb7153ec9009405c01d20a105680ac02441520a9004105c82996fac9b01c3d668c38e405653400c414608094a258e2febf8798564b482f045c0c1f61e400e30cc74048195b811c8f002105c828404401128abc5536b6c3562ce54141869ccf5eaadb96ee273051d793675cbff2c813c5935c67563ffbe41331403a818ee79f1c724ea3ee9c2889261fe5af82fba89b48b0d1d89be731e9a568c291da144f281f2413c5b0196bea345fa70e01c1847eb12693d093e1fab9c4976747bc4b4fd47c1dc412556ce51e718d4a165525d81dd5ac52f9ea634e088412d6d988d96db2501a0e89444026c149163c86cc1b13df21c60e2580488268eb97133f73ba135f22804422d14a480fbf2327fb8644223f0081c429ddad76922cf3cec903904718fe39fd4458ba5f2c0610479ce264dc588d39fb6223fe689a317c95a79493308030e298ee244912be345c6b8b404f1253bb9ebc993279014411b8647dcca82645893a02904498620ceb3985150411df06bbec9a673f2c05e410c9e7342a57aaa9cf0a89440e0f07411b400c91da9bd431fa335bce844422659c01a410b46aa7689f192c193b7afc0fa700194008b16ef68dae5ff2687856001984d9267f8a915fa7eb4e01441059b42bab09d3ce5169024820deac9dc47aebf41425800002d7384136f64c877dfe70ce187fe65556b12a7ed08377aca871e39c1481f4e1347671db57c7524807081faaa8d0954cd65793fa3d9483543e3359cee3ba7a70bd829d7eaa943d2f1000c983514dde9cd8ec612ee321a136675647e8c7fce500e40e9acc742739c9fa71317000b1c3fb61fba4d04a622e31241299001b40eae055e59cad4e103a244a899a69aa1301640e4911e5266a789cbde40191431c8c258ce61493a161952f80c0a1acc184ee1bb1b5f8435200f206d7f2c6b4615b71352606206e285efcd292b2a38c33dc053b7afc1003a40d85f1cdcc65f2c99e3936f82e25f6c965c9fbacc178d27676d9f897581202a206b6baf723f27f4f4bdc053c5e009206bc53467c7449c9c78444220d8206b3e8699de4c99bbe9dc1947e3b77bebce627cc20660029c3275d12b27e5d2a3719b202103218d2f14c0acd2dc90bc818e858e9ae28a152be28881812dfee927ce7b53e1648180ab99a97ac70fd11a70002864cc2f7cadd837cce1740bc60de13268074e13ac1a32f49967d72b8501acf795ba962c9311812896ce11213aac2f698466504102d70f1b2f63d4f867141b2b0a650a2949ce358af068285b4d26235de258d7f8f1e21631c319c0072854bccf4ba463a49621f12891c01c40a7cf0d9501136d6d12404092055389c97ed094320e487182328638c311c9023c78f19f80f1e3d2090c36320461140a8003285bc22bb722c5924dea40b2052d0d34a305bcf71b4fe238044c110f1d4e8fe4e6332047254200708744840082050a02aba5f6892077942bb1596212c66e5392700e204422a95349fc1739a0ca409e87f3a51ad6b10265426e48969244dc6f2d1a301204bc0b25cdda492d537018812eebcf6d1e9fcbf630e89444092d0695cf8b42f7140c78e1c3b725860092048d8d4c468f92b5c4bde2e00720453bd546a7f3a29561f041023bc715a9f3ce684ec2863cb7000007a005284f3f633c63d314eba730042043fdcf37396879ae8e10064088cabc4c50f16635516c2714b922ae6d659cbfe062041e88470b9f8525a524e56200708744840070d408060b2b297ecb6785a412980fca01777adb463bbdfd611407c70872c9352fb9b31411f80f4e0fc1e4f6e1e4be52b203cd82fc79f7dad0c901d6c0044075fe4c24b9e799f24496aaf784824f23d768494b115b82f70f1f77a2ceb183d54fc849801060fbeb84569423febc439045ec60f3124f0852d5449b7934d4c9249f39ff1430c1e3dc420c317b53876dbc9f406bfa045d249b9e12fe5b38e3f8c59f8f1e6e46a5b2ce73418be90c566924ac7099b2e9a7c2cfecd1c9e520e3e96db2e7c018bfea35b861c8b5591f9e2159c24ad5fbc6adf5a8e2bacf469f3cbebe49cd75678521a938b7812432d168851c617acc83be6289299829df059859ee94da30679b1d6bf50c5fe19bc5389713ec3938a524531b1824e9d4679067e784ce10b54f4f1ace4133d750add2a2739c85b3690a3023a92f08529088ddccb1e6fa2a296c22f2bb9cf04c993aa26457b6197ffadaebf4a4661dafe4aed92a74dce4551d584c97d710f453909f3d7974992a663a028e54c2917e261cdac4f1c196ea67f53fe9c224f6c269add9909a21b4f66f045270e9ef33b69aeac6acf09d445bf921c19ce4a7e136a8961334b43f35f471385cf84d598a6cbce45f045267091acb74a1d3c9e184c1c4b54cf0ea3ddea9613beb8c41ab6e4fcb1c4f24a1f147c618953a44e924d4e315bc548040c00f8e08b4a64e9a77c4b653ca59e12cd2771a66b2e7cbde8e38b491c6791e13486dd664612a54d139ba4892271e612f6faa5c43cbcef1f80c1179068bcc34b9c6cc8becc23ee3ca2963d86924d8c99a231be7044276ec133423bcd2d667cd108efda3f562b0922ff09d9d1811f5f3082fb8dbb8cf166ee2da22d69ca84b874c16274a9084df0aa9ff7f413d24ec479cbd6f2af09de6b410453a231bcd44d4c387ff4be800c177c7188c2e74e48c99ae77d43acde95b2654f32fc422853bbd6eb6f1d3e8448d3d3de489f24d919841fbeac4c644198bf76b2740e9ac30d44755203e2cdf559bf12fa37fa877b2e5b9213dbd3523ff0d1fab52e9b654abf0f58d5b7c9696ddb449f0f64cc93d462a7cad8fc1e6ebbfef0acd1831d673a52c46a2de5f3a0b59494d484b83ccbe301db649b57aa6227f777e8926568918cfb63f27658daa4688de1a87410230261180a0582a140180800886a7c2600831308303044208d0563e1a05cdd7d0014000044321e504a2622261a1216121288c3a17030141005c38030201008864381906a10e76a62e305d72d1b211327c7bcf8ca84c08d040e1ae2cc94d42194d2169d7c484dacfe9d0c211dc1acb9e826198e76c5fcf9113288c78850643b891854103900fa3a02b39628ec340200dfa098f060433e91e90e826416daecd7233056d942e0c21329155dcf86002ab254246a4e64b4a5ef1e5adfefc5a05743283ea1268afc7d1ab3177c72f54f51292536d601df875dc1dc97399480e956ba1a712319615588a18a904dc18e27617a90ceabc86568f6750091a4d555bb7738da78049007eb138b9d0e6a900b8f98603088353bef28bcbcb107ea090bd91aa299828e8d69f14c89679de6c05c0940eac1cbf23859215fe5eca9b1003d2eb1438500e4568ea26e24e451256f747b71ddb996598ce06e344e38395cd7ede08f7fc3bfc88860606580a52e4da65449c3303118afa58ba4534e9c5546b7d391e0a15c14cb1d476cee12934bc4225b1d0e49e733bd4430bacd7b732ea0c89d2f54cb8d72f8ebb9ec5e70b0e88e63cae9510bd123d2e4b2cbadf2cf8796775f60f72268121323a01d530640daa954d1646f8aaaeec66f60e4674e544bfdc8097793e17bf807eea8e8c6fde7a978eabea8b0fc3f6a1aecd434ba0cd30dc54bc1e5892bc2d35af914c130bac09ff7274835308b64ae16e0da47549690e013ac02184ad4ee00d242ce8847342496f6bee0576244e99af3373d976cde4e19a42185693368592e5645922c865beab82d1bd969fab4064174188e4769d4784e41c19b7891cf706e88bb4ef074d55908754bfb812dc708ac3e8a8267d789a3b8eaa314f1a8446acf90fad7dd95177a064887b30f7a060985cc2a70ecd37093b53f64623793ca75d858fd164bbe9445ec20476c42209ce07d99d8652d5fed200d3e17f5bd66a4369de878ca3fa5efe59e9b32d0e5c11882605d8e13fa04b3a4660534a82c949331f8380fca014f1f28dac9aa8cd39fefbee0d3652a7486168c7aa4c92a71efae6fead18b151bbfef42d8a267b70328bb2b140acb3e1cdfb61e231b53532b89aa647e440ed2e193409a69e5b122dcce2b93b34cfb9c578a69b4a80685d677d8e5638ed4e8a1809f4ea3e011c881ac2f29e7260651cf20eb2d887a0af2f532203750c1bce16670f90e4ae04db83f8e1df1c65aee0d177aed726fb7d8fb167bb525bdd992bdd39642d416dcede5b4b05eb90b51d61e203f840e462d06993d7cdc94560924d0735312f12ceaa0a928e112dece640a1cc13d3897750f18a60ad6aae10e3b090ac954c4d04121d631165cf07b6a321591a928314da4732ce4a37c6443cd4547d7fd6a3f864b373efdc78bbe80901b8e481f12d7c848378f19534e6fbcf6f26f8ea9386c8d0b538690979f56c766ec21de8d715a966e6a9b84484d1b1089261bc8673abbfa3399f9e276a09b88110a52f3b0ee0ef1849f6190dab540ec392d6d9bd52540e6ec70d9097271c9e2a8a0abbdca200e4ccd948a50d5f0391881a23639763936860c13978ebf162c6d8cac2e907f4dceb20b0e9b36231d29734479da57d4479d9632ea458c7a844b9a7abaf494e9094403e569557994330df13ca904a7a4e9a8534b5230c15ccd373726ad1df80331bb474bebfbc3cede504e0ad936bc4cf3398167beb159aaf66c2998264d9294fdcb4632f895f5d2350a142e2868fa0d324dbc962bd797ccb6a0f6b1fd117af1b57e426ab14a9055775d6b2cd68062af9e97f2e63e6f1cb0e2fadc98d615c9101df28ff934fad23aa05b4994edfbe2d7103762db7dbd328553add2c39c488af4496fc0177aa22483907dd063298587c7c37ebfa157e335e88da74c503d6ac4ee9dee63a4637d14a592604c062e0d9426982abe230156c154ae5262c2659e6b5a30861baafdf1f0c56567b58e10136ce7bbab96b2ca049fa84fe7d9e0701471696aaed3b47794d5239463c769887fd2ac4293916816d87a7fbce8855265bd30e33c6ea32c544b698b2f559b75f957b2963b9f4d707bca2b1f02985a8169b47b57ae3846124b0f67ed003496c938a77632fba84d8cb29e4efc9591da43b0bd1945852dc63da9fc02e98a04dffccb81cadb6023700bfdbb5c95d3380d90a329f2efc3bbf0f35163c6ef39a783c6e645aa8c629b23c586c35161cfc817d055ea29b413cb6a9dc54a8853610897674357f0af27b2420d06c1fbb5b35c671fccd5d54de5683b59aa3decd1f034220ac33e1d4d4ae52d008a2013bdbb07d9a8b99f578951316640e3d447f4cd3a39c7205a3c007cbcb288f78a4a0a392ae9dd3d21cef3dc9987e8fbec9708314ab025dc1f5e512f6ffa842ecf7da0d129f530c728680b06c702a24c75d51a9d75e03d67b4196828ac2de15ba3b655091392d6a0dd22319199df13e63d36d728cb58700898732dc9fe68703b3136f36c125c41633387f9f085a61e05d2b26faee98c016538856b2b2a13048de0afd90421213cefd0a40d744b15a5f5d2bd9064fd06ed1c27afd38c4c9b100018091f3337c046c99e2a1fe362457afb949514f03e15a40d872358a9f1237f1fcecaba7ff3219074317d01495732e506fb772e02c551cf6e4b221331bf0a50af3c0849cc6e6290b90d47f1c1e58f0dfe3e5c8226eee096798b913d4967d90922b0b1f8d5a9ad3352a6c6b4ce30f5e3bcf797b1353cc5b47f7423219c0fcb1c82ffe09e1d324dccc39536eff5255021b12f7ead9f24584a948226f91280912a3eaf7f1d812a150b2609b3201b23ab058eeb858dc9533a6098806fa74c0d5c031f708db012d5affe4ac27cd68d97e9237fc28f5239ce6999c397287f2f55a2174d7e19e5480bbb55113ede2a7d4f8ed1be0720d97234e55957f4df582eea4d036703239de1a962b6b33cc4c4fef6d49b0b75574f7558ee1e3923deac039e443daa0b88b59fcd147deb23cff83f31790d016b49850215bc7783e8a77a03bd6b0dd29c1c4caab1ccc93c5302fcb2a2939dbc9956d56ab4e14c1a81850b3656498e283ae39e4859ab8853369ede65ad57074ce7aa4a3acd005298f33d9337ce78ca9a80a69af86791840850c41e0eaeaa2120de120598f0382fd029f082fc2446deed69a4a14bf76a38bd61d80f78f7a203c13f89173a0d03381c5f78c740566da12f0d00f485dec61a1d13b86d8594296ff65c45e6a6a7dfc63b78b47909eb958151198a9d32bf3935e06892b4db3c2d56ae870d1b8fdc9e31741cf1255e34fb0c7e776fe1382cd362ef73249118119fa8980f7f0f11c37f150105650e5c465b971104768adad7c5c20a4fae3d10e624548721590e534a72a26ae95bb52ca8c1505a61d82de060e87a84d8ea3792936a390d22ecf5b0a7a680ed19284d58e789a9305034c8721d2a719040a99c65c9b0ec959bb917905211a5db38593c3154ecce7bf3e274864cba75a21271a5da42c1d021f355c2b0a8c6d4e4a48978f08b34f0958d9ae8e6bcf36c04016d3dd24c2cf92554f06d02dc910c49152da55ccf4fdb4ba08875db45204c18bb6634ac6136a1508a121863e862cfa048239922026fca18e2e1814670922a4820318203e2fb22d3ab570a99353e95c6a8c52f305b2021cedd90753b3da4227871c27fa741a4e2a0c7c8af45ec87f18ca751730907535cbdabce24dcb24c027409462f61536840981f8a0c44389f323df77880f4f8cec41e49a137d679fc124ef4a2d3e284a9740b8db0dc75917a7e04a9ab6f6e847192bfc9929fafe189e3f900b023fc6886fc29d868e94104307c86b0aff9028adc1d8ee179bed3f9abdcfc8303c70a19227f76083da38d99a0455b102d209045b8dd56b8fc04bc1c941b2f054006ee841d85c31dd41d152682952db8f9fc5d873defe0617f35d645e42b3b9ad73d08bb5305c7cee13668202874d244a114d7f0dcb7936d5f42f5fa61a13c47753c60999446d6d570addda33258bfb6c6591fdcd86203d094ec8a04b768222174422f0a3ac3fff19d2ceca51297c02f338de2e00f9c3b64f0f69c9d666c352db68fb4cfd4ab4c6b06dc19bf89d1b5f1229920912acf1540f176ae4c4ab0b3eb1740ffcc0765f35046b5b420a6beface53ca3052889b04d7a1417486befdb5580e33355822bcb1ba83bc6b4408aa61fa2e4119beb7c4b862cf00fd2aeb9a637ac9338de99f6b31ec11bb2d311737cae334b14f06a841e08788bca1b20e20714bd4d67029ddfc3a31046a61106ab071f76106c3bcbc6f0e94dbae823d528eb7259585e792990cf0ea8892d9564f63115e07774794bca301f7a905f6fd458106901d02e12b549282003d085c624f648ff63a46ef7764b451a65488d046fa4843a5f3b50b4672ad46ef02025b21caea5fb71470efa3e6b186afa3ac6695ce0ede2cc6e4c2de512ee928b078f9ca847be35ba67ab5156b92f5f6902199c5aa3417e9255e58f564029156f38f66c961357dbe53ea14f8053b4fff9acdd63ccd54a18609b98f58d4542b50db8eda54fa756796fcb44be9318d81077f0f3f229cacaea2866dbe9a69d1610043a3dcaf9061eca116f6dcfd68b4df4f98b41624d9766dc981599bd36fc5f4d3c43e1954fd4c310e583e47f2747a9ad9ecb0a01e34ca9d3bc6cc7343bf818cd11e3256f12211d38e346ee59d735dc49f148fe41e4f28d3b55c406ac94ea0a4c548339b225096cad46fe58b2702043852c0f8260be559452012cc3efb5e484730c0720134c6a50b95e85fc84da43781c2d63743eed25f7269d34a5c06a5a62903fe0dd70469929e1f3428d35896ea423dc50dcb9e0d724d5f894853bbe29a99bedd9a2aa73613d8a24e45ca358f2f107809ee5a98805f23d4981d01c7e1c0f12f45017a64e7faaf1f0b83ff0b7a8d235a149d424f448be62d48ab6701b265f3c04a994b002b169f4bc8a3dd1043b7cfa33babfe36d71905aba66ce4fbf52bdbb475b70ecfe5a574c280198035e012549fe8f13c35c24c98b0c15773aa207d4ff59d74917897bb2649e4797236637bb31be66d98aaff1d29b79d648ca4fae5a8cdaa37b2341b63669e6f3e1d32a73f1f668a2c6464b6e81c425e1ddab0eab07c065fdabd7c08cfc96df6366670910cfde4f6f4d9587adb610142a753c59e01df713dff10cce8dd77820c0e6cb7d7ba6129ef2236392e1ad20dd438e458febe4c97528335454bbee476210080ba5715b4af00359e015cbd55b62d8e4d36ccf502704dabb01d07e3ab536cc854ed3bd7bf348defee9125c478df615b6ebe3b78796cc974c81638e7e249338668f792c5f60a7c4e20770f6adf25a75697e168ea045fdba81f4866882837e9eb63c567f53524e353b643e686a63cb9e9b6207884a0722e53240aa1ff98f88c97cbe3249801d18205ee68bb866e5e12b53bc4214beeb766cd7509fa4735e8ae6d778d9488159526f07fb071ded25919cf618a08c1cea20b50cb84df45fdc89ba751489ca6c192b50d1ae3cb09285dee383dfb411fa20e9447aa935ffbec3bee8f151dcb9be787f724c639647e050d023b9ac477aaf839c0020f27a21f049f2541939936aa7454e39ee0561aac2cb2ca1ef8fef7c9ac5f7daeb6e0ab12d51c0d2bb8da5601818f0fa51f41835b568c1eef83c261120748a7a4e76df806031d6943661459e8cedf493a77d40121665e8406aff8c97f68476585db25c6b40879c405f057139c9dbc2a5524734d6d92049dbe777819a16008191ac7d6dec4c42a14031443557072d959a3056435b9e4d2fb821b29e2cd917b3b8732e7180fb3460fd2498daf67d27639fd81ab129eca6a2529447f9f96c322aa953dbfb9d1fe4a11033a82d2cf84c409347f3ae7f378252c1f125143c2f7f4b92606410da9f08eb301d7c21aec7d193aa98b757f7939c2d6e34252080a0b4c60662bcc9ee4d5d583920d36d257d4bcada6ad5531321f17e9962f198de578e6896794915c59826ca580a1cee5cb2dab1e8e508fb587672ffae77e8c969c68a996b70d4ab304b932ae8c1ed78e0a90e558389c43fc49c240442d3d9d38f73004598eef51a0ea443ab29f2be4a81317458276782ce1dc3c730dde153823721fe162decdcc3224402a66d0450c8ded923924640d37f7ea60698e46678cb6b31a25d1010c984e39aa0e660afade5a84355d2bc46c48f2aa1ec3bb13fe485c7a6885638881205c510f1224e1c2bd85ab19b637e4d8c38f6030913b73c99c9bb8ae73a15b7cf59213027d4db348ac33b42a4a18d0455966f231381bccb7d96ea5ab8fc4ac7670cb4218ebb8d357d1d257bf315632cae2850aa256c9edcfdc6abfcea5ff3011329dc1e737c099f784a178b03ea3191f4c9cd82a4b056b180e4b998e2d047c1032af3050245b5b9eeebe0ba9abe6e027f0609ef442f5d88aa6e355da4664b939466f0cba42e9020ae84024b982438ea10f93967e8a380aade9be8e41fa953144b6d0e58a7fa85ec24ce632bc78ca3211ae0c4ff32573a143f3aab00e93d7d761c92231b2a2a74c2f63ca797653835ca393419c98f4650baad1da2a56b194e1800ffc42092616728be0ade4874f804e31180b39925c9203d2ec1af2204011c441e3490151e13c16b7297ddb103a20c54d65a6638796d2229443e228b6ec4b0a5d53a247aba7021219375105566a25920912847839975c8c37ea97ea7b4820bfc8ca9d133a6fa936d676127b29c727b108f2005a3c84bd1fba200f9dd2be4bd74aa95a815967b2655a2184e5680c4c6045101c0d5270193feb02ebfecdd4355090728272a6bb8f03853565f9b604d8c5614cf12d3a669ea2e9ae1109f888a6b5045a3af05e2a418c1db031c56110e181f867d7707ff22186c2d0811a706d052a97309b3a95d2036a10599bf5bfab1822ee3e4c54a0191730ce141d2bb65e76022c7ccd3532d4764d5c4253d53babc01d0ac9c93f2c847a1ba9154593db78bac759a578689e971ffea31c4ac8d770c3a95385bc7d14f2fcae8a04b5a60434cebfcb8d1f3bf56d79981807e79b67de3a20bbc2072e47a878a623732ca9ba19f48597c249486329339c671db51e640cf0fbee7b9e01c2fc70a32d95019cbbf255dee825b49a59b0132f60a946545228b3e982b33584998aa99228a3334cfd5d6cfa69a0aae97d9bc9fcae8352690f9ee564917fa214e365b839b86b2033235ca087f25d8d476143cb3ad6246d2759e481f0d08401014db3ec54e89b058cea9112501f6d4e999aadc1d16726a3f9f4ae06c42ae07e379c0a2d07045926c3de871aace863b55f87a7676fafa978d0d0eaaf112f98e9e2dc44025fc92544dd38a6ca291a5a0d52895607a022a4d775ca030ca4aa59fe64780a8bff786dd77af6f152db82ccb96c0bbad7879f511583d8b6ab97f3c8c1dc4a2263154173970ebe3c5a08c6965605b1865293c6854b605bb4430171bc53750c0bde1bb62d08cfd010c7c1c9fcf4e443edf91616456cd4391a2803496d6f8c2e1f153729e7594346690ccdf5291aa0064df8d90b2913f8b0a9bd38b063608b614959846da0ecdaa119825cc823585f557044cc1a285d6f1b4fb77f8ad8116d3fa11d7fa80e6112d2ea6407fc3ed8af5cb434d5b3409f70f9e751e5147ba13de84a502abdd683207379583aeb29d7466971f2cc93156fe6434fd136bd81c33719280b458e30c7db439ccee27f5c6cb9ba4391032e5f708cc04598ce95ed70bdef4b537c76ed6a88334af682adb91a2876a9cd70db3c29bb0d5c833189215d420ebcad8ea0e0be22e288e8cc1db074b9372772ec54458d25b18b3fc8bdf7a4eca871b2355537fc062197cae18ee2f989cb89b61ab9111565543df92fb31ec9988b8637cc93286a454dc226e3f01ead2d24fba1b37937f64db88d47243dbea33982b31123d37decef124a862ce55810eaf5771b5e702d5290cf96ec9c4243af5da908e3919ce0ceeac5fa3b1efb22e6029b2521b4dc016ee52c9547e547759455cdcd21b148b608b55022808f990218f1efaea44458f3fd36116a4e616ba28069e2a8d97157265b330567f7466eaa93184cab6aaeea0ab4eee2db981f2c1e720b9f13803d2395e3644d321540c1bcf0f2d8b197b588e28cbc2f38344f40bd34d9d1c9b95826897c43dcacc64529a9791f8a4a494c1d8d1816b4daa1458c9bddff24ba29e41db7c1877019894ce8e8b086b83b5241cb249ba50cc8cfa32fbce8d085897be9ca1a0ea48852319c3f60981a029ec1383833013435fd0c71e2f448097cbb04460ceb023dcc57da6e449dd1ceda35d80060dab3b5cb6234fefb8c0844446e33858e83f5702c2999a82cc475b7a28a259d6374c2e2292ca2965c7292fc7ef12fde28e04a26281623166ee91a237c92bbcae19075da3045cfec416ba5c6000d5b9abd9984765a5f0428b2efef04b791284190a53b6c7ae94b119d65a3196f65574b05dfd29ef2ac0d58a18058ed0213fb840640b5ded6a06c8239aa66c987c173f5ae40fbae9aaf3151d0870876c30109a1cd0ad791af057090ad6d2bde43cb095f4a88e4e301c25cdcce0841557a626dc31c6e514a761dd75247b8c2f3658f32fc12fe74c89c1b2c3c189c1cfe64f1630e1917e6c13a445865884042b11e4b9181b79b1b2fdb1afbb66608296f48f98f139579483dbd3ad825f7b0edc332d9249830cabeba1e3bd05885a8303aaa41a8fe0eb6b7af862cb408ddc76910ac4f3cb5c7813ce13416034b3e0ee8131062b7dea333db3e9bea4fe47951c57922e89d403cb0c722bf58b3cc5b9b887aca5500396c3f3847c0354d102d32f27a4f79ed405939a3487bd2f58e02da52e238ab2621268e3782788e9ab5bc19b186130779a92003f92882b7b2cb14ed930509150561026b16f65fba791aa483298602bc331aaa45327e65b0313be4175ffd3f9509123367f8e6075878cd2140278d0037c452d0092d1b2c668688b3fc900e67b0e91b46be16cdcd7edcb86ab26a0887a5844508bd7b49b23fcca749e4899bd0236b572293bf93fb43a0177a0f01a15278cc0d1da2b4fcb08798c73e4c3c86078eed4ba6acb7980039f3edbfdbea3dce951c88940fb9b64e0ca311423f2443328be296d46aebb6643facadc209f4ce857b0f479750968865441090c8e743d89df0207dd0b589e5232e47223847e8bbf7bab2b8dcd4e9c37eb2234c247f9857a229ee0b258f45f0591b3e2a7427841f5a5c889f27d6db38b0524764fb8eed8061fd9736823af47f35f8f98bdb50fa77c1d2c3d4f02a13ab11cfe06f4eb8c73b1bd757b49cc07dce24714228afc9eae6d730cfd14c90badedc299895ff69b01b4b362a36693d307e3d5eaa8ab52d66b1cad28e57f011d2c9d6c146da6e1754b6b36661dda3f3b3921e249a348933eaaf8841c98fbab00b54a403e1b635a88b5fdffac9dea3f0a54f28685d97291a18ac167ded10b9e212dd3a45c34059b4765cd4bb51d43f53e7afad1633cf21afdd4b9dae3e69ffe9f83c5b2f1350414d84b73123272d36cccd0f78b5bff95089024e7421b632b9bade492080f705f7d31f018a9b3bd10da6daeb80c3302543d73bb118aa60f6acf24f5b016aaa12f99f660f87dd2be59c83394b686ef244e668c4a247ff95a0617d56cbbae0a7a4c791e72c41ffc419a0d0057ce5cd618bb91c85a2b19479aef8b9f54d551128c3d8d0b6b9973e65873fe9adcf134e4c8762b5bf0bd9e4e889b0cc825d710b899d66d71efca6897d2b3d407cdf71fbab5a72dbdd9818b4cf17ff74ec97f9b251086c3f40b7bba8b4f61f11244a5ff463322b409c1c58e06df8b9ccf7c25b8bc2bc92c796c71a9271490c395a96412c73097dae31e23e2803d427c81b8f167d2ae7a2bfbaaa87068c95a11eafe6cbbbbf28ab2b292b73e565119d499da812e131a2ecca369b0b1d2228d19c6e1357745f7d1278fc92b5fb7a42f95060a6dba62995268b5a87a8914dd11542e15f93cd61b893b639323527475977dc24a1206876e20f1ee57d6c8fc5f93edbfb1703cf69cba5c88e12e133a9aa1a615b7a195bf237f3354a6a20528b0ea8f5f02db0d2aa0c6eb9c090a0a4d4960c54e799ef3dc49decd1abf18a1b2bab65d08ab7dbef26a9c1372aef23041f9ae59c1adc4351794e2e0ba5bf43524cdb9dcc9b024aaff40fd6ba4d5f86f5957eba3c7502d9dd00507bfb16bbc78ee0521ce6e38447738bde91c594861947771b5bcdeebe88a2fe6155cc04e417f737be578503616e690bfb0061b23286bade1eb6e4dada902c8e87acf2d7d9beec472c3fa4dcb9b90d67a46db71f9fa861de1a014e52c0f1a5e943dd634c99ac594843667429c9c1f8bbb68312776a0831f8ef0778add4db9818649bf77e8e2c37c34b7656cd064c0721f9f0b7641f19f02a3274f83df7165dcbc3e4969d555db704c23bd1f3246fb07375795dee9b6e32d858d131c92e251e21724073435f99d93453549e5685921843d8e88d25e340649f3f60ae5513461eabd1c20aa532e5a4c7849429304b526315c25845b14b37444e00b6e31cf6fedf73f1958099f70413e694241c00f67c83cdcdd28f1f12f0b8ca257d6d43c8fcf24d5b869232dffb948f1a7fe59b944404761f677f8fa2679110aaa3bedeed5e3cdae0742600e2af488d9d162825d4da9191f9655143d4b56859bf4ad0991568054ae03ff548d3f14789b80907349f02a8b494d5aa09bcdda2b0d00ea74b48fe1679dbb0f73111eb562b2406ce09b45ba240e4f927165a35f1806aa8200630f975c052050ae1abe319d7ce6e82cbb4d4c53ffec2ca497ed471bafb6a24a6af382b52724929246935cff9e7473dbf5822c3a0a2783fb7a2bb44cbc5ff7896cf7600947e6dfff440174d1eb446b23feaf51079c09a45765e068b364a7c3b8c2cf8b90438041466a8b67bb54f35b9f548b40d3e7b5d7b56ad0f5d716f57a88dcbd8e9b2ee95eb5f779e3137336175e73d9c9b6b1b8a2f9f638f327d3fe1524b38a8b257667d9ac924bc0f52b36358412f0ee9356c8bba19c5ac2d05d9ff4b4f9af98427ef35d4ef8edcb3c9a7767e25408c1f31d0a27a810b51dbcfc61829620b68de893115215682ff61e9a4c39cd52e0c058d272d916fa05e90c3378a2625a0f2383b95a1599574b2d4c05170fe67f817c28e4a9263815983be184a256df4d8b992322e3ec95a94ba15d602275ed4c6516a51f0c7240bb266151e7b716c0659839430d667a683410ea27bf15056b81bd8018c51456571fac3368c4c9a5ff11158b1882f2e1fe99db7a5bc1bbdeafc5974e075fa562b2bf24a94cead0b527c918f7046d8520b2fda86e08a2464fa2440c83b82499eac1797cf72d27e170be1288661151a8e9b5ecbd44e7d82c182575660a42e7b5b0ccc79f081c7585e47990618ed0153363fbb2804cd88c87e84abfc95e56b7b75aaff53b9a3addf7592d668d08fc68ea5ee96fe5d4aa07573938e484add69f24629b79bf25689e79b4e9212644953e0b214e9ade55795111cb23dc0011b38fbe9d9c5aade80b1a199f01dc106082ff8c392be67bcddf72ea6ba5960209e44bbbadbf540ee48c3a83d6abb9830b0412bb1c135ae5647a5fb9df9e09463a86365811a12432e8b65b73e055c044dd99527c308b3ef3cd02897d2b6e78b04c7b5e4c499fb67834de805d3d44183184b1900435f39a181a5ac068be224f4875de34d3de6e3b880302a02280d3dca08179fc32646dd44e98aede20d1216c2c01fdb991b7cf45fb87384eee469549a59dbee798ac2dea2a07ce3741215244e5ecb57492a60cddf552598d034cc9b528e48c25096b4a32661060cd35b1c4b2ee54b1ee8b25a598dac2e473fa7958d26f060a96008f09ebd9dd96576f33bd8cd761be756cf78af443e3e1a4a6764caa1c4f2912016cf4cc3292c23b0b3c2d709e5efd3e2bd72cc46a6bb99ddd93ee59fb14785e9e1a1081ec2ec60baa1eff45109f805b606a620b8c9532a1b746e5fbae3cb3345418d18b6676c206a08c2ccc4dd7774996700935f76092e7a05813bb0368f1ad9152a2ac07fe5b5f1bb8596458a213afd77b054ce0091e2e23d2a4ddb38e337d9728d078baba585a92dde8ad7bd6d4442dc0b6a1349dda4552f1b8849bcd726bdc456d24aaa109e8ae37e3cd339cfffde59ea1d65feade892a01703a93768c7db699458c8639701cbea8304184b4fb957375636b64758777c21b5e4415aba5b389bc16b765ff9b5953f687fded40e645e58df53b50a2cf3d426c4735e35601a8f025feae588751201e8dfa54e6935bf1ecb15f429aedf59dfdb52322951c42c446dc9524995c995a4902f7fcb82c85c8dfe2530e44a8b4333c7cbb3acde6757db032e4f96f2614ef3f2857a244006b5b86242e591f66e3f641e5d83ea90f545007d080f0f9e7624396a1d16491576c6d16e158db32df903eb7f233e7545a237ed7cb076425a75c01c66173aa600d0c43c9907e88decc2a45a563168f21f31d7edd2bbec8a2578df744dc0bf99f7ab44b6b6c13462d44b6f4667dda86a476309f427570f28dd20e74f376f1db407023ff1285ce0aaef4a257c5855872a48d9721cad247925a8d6f77ace2ab92c93eaffedc12ea5e1c6602eeccaed87f3e064030c749456f9aed2bdd0a635efabb5afe4ac07cf7a4278dea4e91e1ed1737470d36541284b2831cc71c8dd033aaa2bf404d8825b75ac53e80ab0756f4f94c064abc224fdafffd8051597d3248bfc50ed10e68440c2ef999067072cb2a54a782ca966ca984654ae3f99cddddd244666e8a46df053d698405601a0cea568115375e221e6e7d66b27d40c1ac7c5595c13c179ba0e563143848566a7d87961bd7df4457c267254f27ab6073b46f7630e1e1b4d581c2fd5b9616bd9f5a70358a80b4beb242020c5806e12d47cce56341767350892ba764fb4084322a383a59f757f1380e859f5189cc4c402c2222b7826e82e6d5d7052a0006608c4de509204b87c9d49aa9a8193fc1f7a62f8b3017af83daec101849f052881922c02455d78fc3aca286b93e854ce346535740a6eda202dd77fcdf2394181bf6a7829f9051d1455da4ca360ede755ef0de4727356de37ce17cbbcbcaf8b8212b443742a7ae23296365d3c0acd6770121688101e5b353db83fad635a7834fd8e65c80a553f21ad45854aa7e3f83abc29406f714425605732434d4ccfa2eeb39e83ff84e8db5fb04f4991345ce53d560b9aeb6ac2ce5b349a1c8a441e749eadfc8f5e8f0fb223e9fa25753804489876dd8e934609ee4902a40a705a7503c63ed26f72f2ed4a57ecccf4916790ff46fe9f0abbf29d1f3856eaf2a6dc830ade1cf15a2a25264ee96de8b5be1c5aa39b24f4291aaecc2277e5a57625a9862f5b230bf2956ce80e606222869f481d7b1314a3034133239e8d71c27d85df2f6fcf662751c931667f732cf65139b4082b1d13fa7bb24869d1c7321a1c97370a8bf442a6bfded79b25c76295241a15d1f5fc153cd94d018e538055f4843a4d13b571f5fa3e12e9bb034f3571516961d82534f450940d64a015e2fc6af0998a81ab53989ada7896cf1682aaa056a2b15e975808f07a2b1169f910cbed8aa0be7ff789ce739b7e327e3fc1edd293ac8d4c7aee21b31334132695adfea88a1b50980d1de600b5441e5354a8e145d3ba59251586f6945f4d71df71a747cdcd532032cf5bda9225ebb7bef18a1bd6a70ebf3c6194d13859d89b439bf1658ce5de35a5fbc731e6d018d64a06eccf387497200b469c56c13e3936414d50bc546dd0f0d4f9500aa53a590afc147166439a9bd35d26b931cd17641703eece45e70e3440aea69003033ccff33ccff33ccff3d819df570409bd3b2525c105da07554b4a922d5b041502665f6003cdfeff7fc17ec2890a02040f1e0fe90eb7a7f8d57292ad82b45c6e4d51bc889638a96392b5a5f02737c54fb775269f90e27edfd2a824c928b4da0da2959e2d8926a248cc635693523ab3c95070e55f529f78c28509419194fd7163e53bf90b7ee22bc16dd4a429b1b5f304df29ca86f25c270c3a5ad2eb6f68cec6893e732a648354a46c9b58f53cc6d52474c91ed30463f11aee2e9a3e6399284cee4d8247a765fe60c258ea9bf2ec32b3752ef10966f9377ed2287f59028ff927459b58e16255893d2bc58572effbb4a1c4193759d60c4d52d4cc244ec93de50df929749024c1e7d7ecbf28126cab6fb63651f919125efcb04b52863bd17bc431e5a4cd4c56371a47dca14dd68c2d4f67298de054b367e6a8bb49533d326083116b26bdb0986c2c42cf694d2b6f6efe9d4644d2f81124053614f15d12c5b385e8cf662326b09108ae843949d8bc41449967492a44b8fec687c824e55bca92ae6bb035e0041b8678727e767ee4263e6da3109410a6a1a2c48bbb2c21f49433d9dd4ac8cd19326c0c620dd33995a6d08620ba92f4c9cc7e201693d9ac492eae6d1410e71e9fb012cc3f6471a2c3f32559cf4b16d8f003b6e7264a8d8d7d0567a08218a8c0461f123ef4c526f19ecb5919d8e0c3d21e3cbf6d453f49923d989b97d5c349655e1d2036f4d0257dab50211b794033d6f677a3b5648307b23cd3642bc6a5fd55f0031b7758ee42fa6fae6dd8414d63be212eec99b6a50e5589ffb99fa43a474d0727b453b666f09eb750b131077f63873c4b9a5672921c4c42f4c60c2d6f15bf387c1d4ed8b8794a8ea1c1818e31ae728e11b71767c002e80d36dc60a30d5c122646f3e6b021d9ed45d24c4e986b0d67eeeec890e94fba940d35944cf490e12e5c3491478060230d47669993b59c4ada4643925cb9499aaad3c619b2dd0bb1d5f9fcc46bc48619c8d20dfd17438d7e090ed847ca50ff966c455f7bdac98888480f3690044934202202840cace6f8953ac93d7c70a4878d311c4eceb1f3c466ced41964f0600636c4a075bcd0912a9d31ad2322223db01186248d7aaac9b7a413346c80814d5207ddf51e4d511e11110162e30bd707b1da2a4912cc922322225eb84f784d1542a225a61111912e24c6d5899292a6eb587ed8e0421d3e229f625276ce16caf7ca870d2d7897bcb2de7420592835763eb1d6e536577260030be7fd98ac7246fb14f4326c5cc1eddc9ce9ad3c367d464444ac40d709766d975ee3d955382bff52fce6cb19aa1ad8a00226acaae76aaf1e19a7b087abb9a5fc9ce4b4e3c08614940bff19c777733c310a7994a84ae9c32423c306140c1adc73cfe6496c3ff2843edc9d14bd2bad47d706369cd06dcce5e5eba9c41c036942ff296b7d762ad32440c828c3839031c2831e41dc064c286e2ecf2699a53be1c4c6129a1ed32d29ccf6c99a12dcd0be2979eec94193842cc51c353ddfcb62030989317322b222db38c2bfb184db641d1b46e03a5512234a4ef8b247c828a38ce4cd204301368a70c7f84ee37539c78ebb0d2224573e09bff898d0e0860ca3967b0be5a7fa5af9910b8cf1830132081106561574a292c99df2d9c3db8719272418e57a8a7f861e18e798a41cd54ffe40c82fc81721bd08e185f26ff2a99ce7924493110a8c00493ca081905d5cc28925e5096dd72415a28b04b98b3ab35cb35e2e5a37d7cfd86fc9a4181774169ff4702715fade62eba0f7f526d7d9545b98b1692e874e6932adc5c1432beeacd7b7420b379c695d7a679de5233d7e0439c3c70f13320bb32abbb56aeddc47cda040882c8ae925c5fa13377bb623222269ec06426211028b905784b862435a11c28a0984acc2ee0ab249b0f89f0c5185f14c5c4bfab2dcc13292000a4945082a424e814688295ecd954d10138db7d15228a751734a6d95793f529cc5834bd66dbc7e276414f5a5b01e8d32e9045f14bb585ba84693343f0f452171974a2ef55c5382025171b9cd49d27c267e22afcab424a7784c2dc413e6d0bc1223ad3cdfea44a27a995ef4138b17e644a9f6fe4c0e1d4b737213cd9f60172a5f58b7146922c136dd4c26e9e4e3434c08c984ee56be9fd54bd83862c23a7963767989c1d58284904b789ace53453c689a6589904a109dfa3dcb9c249467005084104a248d99749d3b7dcacc43266196b4761a57cb1022094bd4f8a1736fc9a1f6911e3e82f470108444a2d8b0bc4ff5a36b9721041269bc4d29bfda63087944a1666ee346257cea1f6e86191f70800ac6e881770e7cfce0801f421c4157aa2ba411079796bff7123b9c68064218e19669ccd5b52f2164119a24ee6c0ebe9f6de30eae10a2885776fdbfa4f4cc2a552124118a7d7dacc949db2735c23d4210913c79f7717299f82e1016841ca26ecb2d49d66c374f7520c41049d9ae3eef718f200e64032185e85eaec4caf4022184e0c37f884ae9e69f6c4444444484021f320863b54f73ce37cc07472a102208a3cbfcad5289b173de0c218170329649456d9afb5b0b2180f8f72fc8f59a14b5da1f8e12fe2eb6dd42a6a81f9e8b9aad3e635627e1903e14a531a685ae9d861cc287f3b5e3e6f857624c1db287e37a554c42e798b358881e12db37254146d334e72179e8d393ac5f98a44975081ef8a0a36db3b796ab0ab903eed9db3aa2834cdd217638cdbea264fd42ea90647df617ad332793103af023a6f94dad4e8a61c81ce8f7d02dd29229351a111149a38c32921e40c80891439969794633c571130b89439b1697763e262b407a00494636040ea58f7fd2a61a4744448090518390375c425bb887d733dbb8a1d8b4bda3d5f13cc85e868f1f3dda50c8dd74fe7d7fa903848c1036906e62548e09bf31df0308196b48b078af90ee4dbddb87a86199540bbf25edddbe232222dd49481ad0107286effe44347d39222232460ed8056e76300600c0106286ad63e47fa494a8259721137f47e7c2774a0d3d21840cdb9a984b0aff17e1a990319472f09d8ad58e6f133150619e34f224e1e4670b094352126c636731e14aa3400e3cc8074444289046f2e3c7052e30c6183d063b0bca2823c9410a4444c6e0410818f21aa9fecb8ff52eb220e40b215ee84d3ebdfc960ce942081742b6d081102d942fb5492a7f5132e573c02e9840481612a52f3bea4dbce93c1a675820040b8de6a70f15d3a9b4845cc1109784d0eb8d1742ac60a8fa94d258ba4865ad105205ddc35a54e3433ae44b08a1c2952dac745647c7306720640ac692888cf9da05da0c32382022122285648d0f711fa6902814f79dd35212337841cc2063a487fb800c203e08814272876492d22b7cc7840368843c41f7cb8c3dba9b463641429c4096a471aebd0412d204747a3e8698af0cdd9980d4beba749be0fded12308f7d6238918d29a42d085102f3ed7731e7e53b3133e000178424c18dab7f9f0f7565d24828b4956eb29c34c670861c813e394bd4dd9d98311462844a66b5e2971c327815528433b985e474524b8b0921428d61f0225fc96367c9adbd8630fabd14e2f2332549b082b19fb879538e72b125a74727a10630ba9d0be17f1bb37964f4d81e1410110182010778608c203dd8408d5f3026c45c4e72a8862fb2974ea1f15dda537d468d5e9c3bdd634da6943d2abca8f2676b976f7ec69c5df449f64ed0cc1553ba75712c2d9d3d399b8b3236bea794afc4dc4970e19ce5acb868366626b738f97ab424f161d93a5bac1e4cd294e44f397d925a785671ca520ef71dd3824f297fdae4f7dbb3b32879aeb524768c8a5522224180b80dc868326ac8a29c3a2d8917357694198bc2f9c7531f71040d203dcca8018bdfce4fb82454dce82b0c95842c131719d15c71cce961fe613352d30a2dccc7d206b3ff4bb362170dbf71fd24e79157c18ea5ad2a3b37b15e557492fcb77392bcf2394c85593448caa59a4be64105e76d62a6fcdd299a4b424acd4ed7254906354cf17f8f584a6531f6fca5e03f894977c57facb3a450dfbc930917556c3a2fa8310ad2635cede59a94f8c6d8400d51d4dab999677c1568a046284c490ecfba15f4400d50945abeaa43fc26f1e4d4f8440d4fd4e8440d4e503a9636bd5bec586b6c626b686204353251031329a871891a96a851891a94a831092d444ba6640118a18624f6f4ae26566da64d91a83fc951cd5c531e17755103129c144c37c9f7a3521f06281111111169e2d9a90008a3c623ee0de6194accaeca51106a38224d3989291e4f73b9d688b453ee2ea16255a78a1189c9ab376a6846cb7a11c9df3979acb81a3c4720d450445b5567da131583fb89c87abc5ceaf7d2e7434451e52d658f99aa3c3f849bc32eac5518e44762821a8630346612c574f3e45f28e0831a85687d73de6039864d138d8888384044640c163820050ec841102068dca02fe0ce817644d42084694cec3831f5f6db0791860c3f9724614bba5d1089f717a5f285c5ce3810ecbf5c4e1219df1b06847a593fce43fb07f2dc733a398931733ef183f9e73f675d3b553ae903e6e15d296a273109257c28f77b65ce5eeb6e49f6a079fa18eba71e0c97d3c6964f8b0d691e703be97fb3968bfe89874cb2e8992edd6fbcf10ec95172e2ae8ca787ed700aa3ba31c77392d6abc359ade4f2b687757428b7b52449960b96f23687a36b062dc14c7d4a8e1c281d4d169d6bf3421387672f7cea8ff54e471135e050f4bac5142b2656ccdf409dfe5ef59cd470839a236d354aeab49ea4461b4cf5595ede5683af63d46043521e9150a9acfa8daec1f094e864fd9d573c3524853c978d5927c7aab750230d977e2e4d1706a98106caebe54b4a16262bc91914cb94a379864fcf9a19fccecded6ca1a9e25486af4ece2147dd5c3c4f8634c4e76c7af31832edf49f433a35c4d06494b6bbc78ae57518cae1175ba72e5b8a070c499ee2c6ca1dcf2ae22f9c755d9ea3bddc752f1026a6a4f9a1eb266e1756135df1d0b53279e542d29a4445da735ae8b750466ecab1552d94a04616ced20c7a99fd93540e0b35aea0776ffd8c4911420d2b605aa9bff4a4d09255c13cdd5cf558154502420d2a9439256f73132d7938853f6fec1469c2a546470acdaa87e5eadbf3e0d68842f9a772379e673767a0e0753e9d12243fc8983cc1202e6dd5b3f1d9a1130ada49be14bdc465c526783f2399744f7e5083095bfe6b7e7797eff0975067cea39ab48347754a404a736d4837edb72d099f64be75fde726a1470216d2e4ff937e4e74b3c611ea24974763de566adf08456b798494a0da9a1641cf39dc5cb387cfd4d42082d993f867e6f1b373c34818cd6a2568495d0e09a3afeef2a974d958371889afb261ed5a32b70b8c2b68364b4f51a36f4502017e714cd1ef43b389871b7d516c7bb599cdc70fb9175675c558df60e279f2e2fbb2b6bb789aa9c75d74f95ae51c8d1c7f7847a62bc5c6cf4843056904f1437193c96dc9c1377797a30f7c9c56be7e8f0a39f860b4859e19ab9876da1c7bf83d7f925cd34acbc51c7ad8ea93d86692a8e98236222272460f1f417ef830411a3f72e4c1fc2589dd59a493a5ff100b2a90030fe518735d8e7fe61c678e3b1cf2b397c9e92b8cc7cc48aa90c30e26d93acc78b4ec249639eac05d69cc7d52a7a4961fdac11472d0a1d196eedb78fb54e273b02f7ed7cb4a98f8b70772c881c84e098f69ba973c5d8693c10125e488437b65659e97d3f2db09193f1216a41104004ec8018775cd4f638ce75be97e83495c3d4b927a3d794e0739dc70b8d470f91b1f89418e3618175cfea73bba3e9d830d468bd6edd3299a753ac71a887eb11c3ffcdaa4d4600c655b52a98935ab9221471ada541d3f68673641939820071af64ed9f2cf5476db739ca1d4246566cf7eb3cf7398a150e2e67e665a0636c53cd5fd52410e326421773733bd9a145e8e31f8d953a62bf9a4cb9ee7104362aca0e331da74f270214718caa3f3275766127e2b58c80106638808bbf7a4296cfa0bc9a9a4a757f1b024e885dc5376c459122c74b80b073f4f726bbd5c304dcc8e25dbb485eda2d47f6b460babe87a5eca1aa7269385aba412f37cfb58d0a72fe564598cefe71572dfd8565552e7ec94127258c1cc49a622f38c428e2abc25a51376f523324950c84185a7a44de9d672eee4981c53a83b8913e1c1aa3bf423e490829dae6bc28a1a85c7d324db7299030a467d84c49998f75fccf184e3c6b7e5d8b9db258605399c60fc6871c3757a23f626147f59fedc42b78fcb04f4e244f7d51b49cd12e8b0254efb4709870d1eed7b3e772a4b427e2362b27b7220e192d0b6cc9aae536d24c871842b4cc60f390da9241b81d616ad4d621bff9a1c45484a4153446b98f34e92830885878bc12f598671b4cdf321d91d6f34611c2a2a3387a54f92e10886337d2f0e60e0c93b4d8d8f6892022bc0f18b34c599e5b64c3a1ac7e10bbc354bacbdae38276f70f4e2f4a956ef20d57125bc28d8546d7cca76a18b5c58d9152b72bdc72a830317b5e999b89b7370dc22d93dca788e3fbf9b9b000e5b2c1ef65bad5dcd4d08472db6932eef475687b611072df0d09ea34952ef963642c0310b3b7389b9566a34991dc0218b47acb2db7a16ed13138b3eaba7d4b93c94ab05072c3431f9337cc6385e710e25aa7bbf8ec315e7f9cdfd27599279c3d18ac535648e27a6a0177370b0823e9988cf796bf53c3856d16cecfed418aca7c48c6800872adad87fb71aa7474d3e15c5a451a3d52d6a668f0a435b434d93a7e0193fc59617433a33835ad9a638f3c94675e6122aa64b517d8eaba74fa1bd6252f82997873e39c5e0d78e82d58e21729d4c12cd44145645fb88096928ba7839cf5286cecaa03074e56d30f5f268e627923a4acda7f31ccff744e1bbfaba52ed44ec446927ae227d3b6b0a39918b96c7768ef2dad626369796f3dead93324613aecc5b4c92878f3766c25072e5af31ed5462840942e5e4d0bb6b9a3e9748f2cd8d7a62b650a9e0b0847ef627c7f7084d15bd018e4ab0e9b97f629079cff944e0a0845d413bbab24e7c24e9e1c3063d80806312491e6d2d4bc5ec26562322223d1222e090c451eb6d7ff25373ec8c888804014724cace41d39af4320e489c2e7ea6beac1f816da8bf8bfeaaa5f650010e471cf216e7e67b29646e2401381a41e660bee2597e5f3d8c384ce8978eef9b9e7811be5b6ee40991f69ea308f2d7735e13e924f9611c89a04b8c1bb5935827443810e1874eb914e5b26a26711c82ceefef5c29da48a7380c917431e55a594ba7cce028447135524ee2db63ff3808b1866ad83239bd76a7471c00081c83484a57961d3fe11084d966ee841283ad25393802d14e5abaf83d169d96077000e22fdd64ab17c2f187b36398cf992b9f2425191111e9212222820b60a00422e8000a70f8a198138fdd2598e059c3d1872b5734263964a9a59c0f898916ab744f2ae9a4e0d843a12ca7bcde1a3de43f6d31f7d46ef4110738f2d066f9d6c8afb8f5141ee0c04329fa7fce991c2adc7b872b4df766624b0c1db4831dc42f8a8672cdfba9c32966be4c79f33d96659081831fe0a083b1d337a7d706c13187b3f689277a5481c8e19839899c78551cce372ee96ede36610207bd35697f4a162038dee0a55ff10a11df70133470b8e1a43a6d96d7e4afcb7fe068c37267dbd1bc43060e369453cdd6ecdf6b284ac9c65cce9eb99b031c6a783ed33b6359dbdb9986e773f7a675fc7cf2674444e471a0410b15d359ffb464fa6c80e30cc9f93b8cae6a5a4a9f0dcc505b7774dc283943a78c348e326ca13289a9c2e8a5c546444480f818711c64308a9675c6dce118035349b29b170f87184e5373b2dd95901a33053c00003de008c31b2f47554c25edf63138c070b44af99d49f6c990491c5fa063f273efeae0f002f62166eafedb3e8aa30bf77c56faf052ae591c5cb832677a59ee3f3b7f0b6f6fe9690c570b6488cd6da7104716ea8ecf9ff973ada5c281854258989e9ed1ec1f8e2ba02af1ae73b17a43c76105c64fcfb29c45255909e0a8c29ac757c3ba26cf09a9d0f69cd0bd11ff572e8e2970aa953a45d5ffb89e21e09082b65ab26d118e2898ea511e3be6bf4c0a0e2858b379f753e6bd7be7094c9da75ae6121c4e386bfecc61b358bcba58004713d0607fd2559a92b25c389870a985ccb1e5e358026f1be3c768d5d86f7d0087128ce87b8d127912eeb8122c53c481044adea9edbfacbb6442011c47a02b85b0babcae1e5c12e030c21a5334754b0f13971c018e22a89a32858ba99e72da8c88889c8b000e22dcdf293a49f2592a95ac4044c4c70ff781193ecc20c18d61e021dbcccc3ff355f087a7e0479014888898718630d6d4a8a466f223222240c8c8410f33bc8c337c7030bca94e727d7ef408188826417253b67db0724444a402377ea16ff46c9bcbbcab9b6484c730377c617bafaa56a5201dc32040c6a01bbd40b4ce773f07dce08599664dd812db7d539a811bbba8e3caaaf38ea78cd60d5d186b293d25ad73711ccb917bbf8df5f2062edc363d13ecfa6398f3c62d4a132e65373b19b1051b3a967fca96cebd47e0462df4ceb1c755a79294ef1f36f0e48c20490e7ef8e080dda045ed5ac172d608bb943322229286d0e8112407df801bb3a8b3491f6a4cbaba74cfa1d1c381fc48ce9045c952899f323e496d4e2c4c16d95d662d2c1add90a788480a446ebce2dc9aac69df9cac6a4444c415ce499576aae7afb9c08d56309f9dd3ee7db678ba1313888800f9e129b8c18af38dc9397b9fb627fdc72a98943fa93446549779813134704315775a4d4d92955871bb54b0b17e5377d2d7c87e046fa0a2f4354bb75a3f39993d809c22d1a283d4acc9259a670a3b263a95c6d768934ab1f9fe44798e592c0cb8410ab4a3d4e9ab360aadc59220d96be2b896033244447280861924b8218aa43e5fadfd122faca168df3a7eeeb6427f0e8a2ec646e7af389bd46232cc484c30060a6e7c82faacd935f51ae9f1801b9e385acb7555082170a3135db6bc6de95df3f8991b9c687d2cd4c90f1bf4d8c4352e3e3efa9319dd480f1ba0b1de3dfc8c8481b88808057e2423dc3e4682780e44447e24237c431387a6abe76728d9e7f6c08d4c189f362b225e4d9ce806260ef6b71afda2e57d342222d269987101119134cc48e8c625cefeb768e9e92e21e086256e5402336dcd193eab2ae41ef4074444c600c10d4ae4155e2ed555489cfc24961bf5a8d614c2bd95046a172515eeb9965a24ee709d41e43e3720d186126fb3a27af6cf474444c6c88088483b1967f8e004f8b8f188630a8b3aff18644c331c03371c818d470b6f4f722c971b815f7994caf33de9638ce8dea42ff32a7f04a11b8b286795d6fd8b4c25c728825ff1f97fb31c2ba43fbc7ff8b0c08d44244972af4f59f28a332142f78bec8ffddfdb7ff430c3cbe8a1811b876063995fb987fc88cb888888218e1ffb46212eb92fb4a39d1c3509bbe00621740b7ba23925837873dc8b26e7f9687249c10d412c97eee55f6236f94c20ec907937348e5d8f090a6e00c29f2f2949e55e103446f087d44c14f90ab657158d8888a8e0861f1ccb1a37952407031a1803031a68e7e48c14a4e12128c18d3ed0ae2e799e53924d1d72c10d3e7c75b939c36e492e5e066eec61dbb312dd7f335db52322223c70336ee8c19cee2db7cee7461e4c13d6317b727633ef811b786864dfb5e27c0aafd911119105dcb8c3396c0cefa61e3327d934829c9103b74353721d63349ff3bdeb40577e56ae7cd241ab1caa4c8acd41dd4ea79926ecdf69e8861c722bb9f1de2c72e98b4325a6860d7926ccb9950429c3bb0137e070e30da564e749abf10d377c52d2eeeabcf95f62d0d0816b600337dae0776987ece828d96783daa1d22235e6c61a4eb9b2bb9a50dd50c38d344ce0061a6e9c6193e7d644cb29dbf7bf61062b499efc2b1f9541dbca6af184a8fa3811c20d32dc18c3b9fb4dda37b92dc9470cca9b9c73c44647fa0324b81186caa662092b13972d9be1e30637c070ec8d8f3b26674885cc8d2f1451f6ff9943bfc7df0b4fb5a711ddbad44ab9d105f272ecf5b7cf05eea42ceebd4929bb06c28d2da03b3da13b92b1bbd4029ac4848eaef39db7a471230b495317a32feeb22c8f05d5c4d7943db4956dee0a64d26072fab415ee4a2579a26c974945c68d2a2827c9c9d3e79cde3a4a854327d3a5cb583d710a8ec9da593fa53559298514dc8882313753dee6f3dbebfe06149cd6ef35314fbf49f92778a2cd6613a4b5e5351bdc70421bbe2d5c93e6dee534a1923afce4f8ece7280a3798e0654cbce5c877557f099406ff31f9183b7a2b3794704a3595c3c74e57a2e2841b496037c71ee99833ef9c48f04efd52ccb91b47b8373e4379c865704d176e18a17c2d958996db386f14a1dbfc124e4e69d9ac45e10611f8fca61bf382d4758c8d611463e36ff8c68926e64b604318b698b0c1f2c9631eb30bb0118c4cf44da2a7c4e6fbef061bc03047d728b117e6669367b0f10b254aed848bcf0c367cb1947d96a0e341fb62bd3098fc896dbfd9939c106cf0c2c62ebacc16c74e568b6a1aed030369b40f0c7c09d20842c60f1f37484600e4035fb0a18bc4a4986e1e55af76511bb928091e63b2f74646066ce0a2e4399cdb5594927eb2710bb425eaf472a6d795b630687e12a6ac4247ac5a2445d5379b9f12d70c1a67d0c24cd2b47f9e9db8e3cfe2123d4d983ed59c722f8b3da5b7d54cf499d36351bc2c6a9f938592731c1689264a6d45fd15a5ff080fb617615157601d6156c29fe798ba159a3457da93ad517956283a3d9226f468b8ab3885ffc669c5e89bc3aae83ee9a73d53b1540ae7d2d6a282527bb76806c9e6d39b400c2a988268cadf4d7258f2814c4193342731a7735238eaeeac56a85220461452936a2f06ab984b6606c480022126640917dede997a823b55a24b06dfdd11c57082727963963c254d3879e82467ae9c436f2e0613eedc1aef2eae8f592704622cc198f1977365992f4948036228a1b95c9264b82b3155b8013192b069e9a7b2eb943f392006121e3951db132d42ee801847e8241f932c2b7fd6d2474444ce8c11fe4b29dd83234092910f885104c2e414b3358979da1e3188507f68b6ec713da6941bec18069ec2bfe9954617bb760863d5f48e413f3f460c76042339d2846d998a59f2c00e6024d5a6a67aff707d5911111f64fc62954da13a35469ff97c41a69093c352896ba301e9c59b42744cf4a25e89f2420b92529ea2df85f9c49fcc51297f49c22bd8a10bd5be52dfacbb06b972518c1f43e79bce3377a560072e4ae2e7764f31a7fe2f5fb0e316b5c9591f22230a76d8a20ad14e62945cf761ac45425748c9e9774edc043b6851684bb158d65a9659f0e927c9e6fb9c4b7a9060872c8893b3c6b497e2d7a223222235d8118b04a98bc1ffc711119113ec8085bedd939f43752a497a4444a4870876bc82dbe8947b7b5f324e3b5cb156a5358beaec68052747ffbeaa32614a9a15bc274d692b136149cc2adc143ce7a48990f2fa023b54b19418c5eae75374149841da8e54ac6a397eb92a6dc20415f9479fb4b14f769ca2d8579aa2597efafc233b4c91c9276fbc0e36268ac7cff0c14030b0a31445f52593bdab2c1ff4c18216ec2085b5ee6963a3edc939368a76ee3dc6cf753c5a51a4d939db57baae2e83831da1386eb45bd44f69ed2f65ec00c515fd042929da66ecf884531eae5d3bc91b5bf384b92bc5faedea44e1dad5517beca7264eb8276da96a98cbdfd226ced9263f54cc5b59464d28e9d942b9949948b45cb17d82c5676730518aa11b276a697e7f893cc68d4887966edb96c8a7b62cc78b924f629530672c299524c5fdd0d70e4a309e71163f6c1262ea1d9328f58a9f667dc7f8c90448b3df608724ee4c62a936af417c9491821cec88045be9e1fa2df85709422239fd8995e35faad1ea116efa57f8609289976e479cc44dd95d3732891636c29cf94ab629d94c73ca08358ba5e69a0a9f6e2da294a3c465ebe31d8ad86476c66267546e34115a86aacfa4911ff34484fe9ff251bfa4ebe41ec2b4b1aff6d162564d3184de976309262741d35f85e82ec604ed6413a20da71317173753390832675ee7a32aef5304d159a79f9cf953c73809c49d5a3e5ee5ce6459020873ead7790cfe81abd41b2d4e97e417f3c321531c93cb739db104801176f4a1cedfe79de353f0243c2222b203325a0321d8c187e23a347994f8c5380b61c71eb8dc6d7337a3f9bdeed043d96a5e5bab2978bce48193a4ecb29304ed9b320320d881876f43e34b43848729f0811d77b073f5bc7b9ca8d9230810347ef400428688089032c8088246eeb083575749721313b3a30e599ed0a92eb3fac23be890fc2549b1257bfa1cdd1caa289725bce4a6f34a1a415060811d72304c7928094dd36a7d471cfac8983b7c9c5360831d70a8c44d733125b1fac3fbae013f230d15243bde909b7aee0a99ea5ebb1bae53e9f4f9c1edcbb3a30d9c4b75ace01fca2c638231829051c61929a0c10e36987f3774ff0793ea6e0dcb493a65326fb1f36584033bd490b8dfda7d096bb9ef1d697866f32c78417a9046d2021f3c50810476a001134da235ed9ea124e7d63be14cb69eca0e33944bb69370a26ebc4f193bcab0cf9f70f163395c98c990943e9a82c6a8bb4ad9310693a6ce147e532ecb80058821b92bbd24c9e58c69c3a069b69d4c093b1a27306c57b95a99a4cee48fa92f982b5612436f2c417edde1053d6783c5fe7e9a3449c18e2e94d17e42bc9bac69cf327cf8d815ece042dbd3b9e9f1a949aeb670a8e4f1637ca473857668c1941a2c58b69c6b5edd91852429fec44af7ce86754444a487193e7a04711bfcf0f122222fd88185d76635254a70c715aad3b98b724952596b87154ce28484ce88f49c35821d552023e5754a3629e76431c37360031f630715b04b8289276a9f58139b1d53b0d5c28479d17ef8e84101158cf1c333b0430a76b2def124f92341121388888c0449ce10114923c88e286826a74d51a2bd67d43d82fc20e347901f417640e14b67f2d459563bb17f0236b6b9bc72a86a779d60ca8ea7280b7de76a134c6269d2a7de4813333b9860d4ce398bc79790b9099a523831f52fdfa1844bd6fbd974525ab9b823096ece326a6a61a2fcdf8104b35334bb5ce9239416eee2c5ac3b8c704927d2d93e3db3293b8ae0c9aa58bbe7e99c991d44e0d3df65f4d87d1d2f3a8661a53799198f55d5be30d679edff97cfa4a709465ec2887b32314dc2a70318a7dec7244489c9793fbf58a3e6eb94a7a13d73be384b344c6dc6f4c2b8be3bb3f73d5162bc28ad7430d7cc39475776f1fe6fa67fde3d6ca043172639e5c5b4186e628af7c03df0c379e04304a523170957a29ba96c8a593f2eba984ede2dd9a38a949020881964f830c10b74dc22b768b136560e95abd1610b74c6364c4a928e5a24eaa7d16467426fedb4305f38d1aa68ce22d9c5d2e2671232643c093a64d15b4b4989be39c91da3041db1f8734e2bbe17ff4349ea80c52587cea1f63a62c2d8021dafd893d4d9e5dd84053a5c61598a4e7889584e738c76337c9491011191d6818e5664e7ee614dee74b0822faf1867ac5b0517edd69d664f10ab55e1ccbd8c7e4c97dc642a38b3b4dfd984fe2c295478c2a68e5315ab4ed3294e297b123654980a1337c5f9aaa5a33aee3a594a8106bf28d5f2e82045d7d1156e345a8e68758c823651e53fcb736ed245614af6a6a4dfafaf6528bc1c16c37375ca12962fe80045752544068930c1f6b3828e4fe8d57652bd0996fee7078ea0c313edb8ab6659b1093a3a71e8306fcdb1a7ca541d9c28d37f382bb19a0f3751479f8ba72b9bc79268c237213ecb7d9889c25da3a768cca4291d9838a2d2c68bb28cfad925f00ff64912f3abc3126c86dbfacbcf76925702d3cd2144ff3aeea39450b4427a524ff7dcce24daf3bba0db1f163949a22c265db9bc2a93f047c2368d96d1ad2f2ac6464444120d15e880c471e9355fcc8c92df3fe264177276498ef9d47684553a9deb4f8a043a1a8105bd60b94c8a283933810e4678b6b72925fd4d696d1d8b60935872e5c98707597528a2fc49db52ca1546fd2411e55776d6784ef1b9bb810e44e8aab6f5d1395ee936d2a3471034ce30e3033f7c00f9814606807890343000041d876035bad4ee49619f53f7011940d0f8800e439445e236ee422f874e54884a2c0b6352d684f0d36f4cd00ff14b2beb18c45a312726fb389e2e17046ad179a29ffaa7e804a2b0f13cac233f2a3a80d884e9682949795913fdc1b1101395c37a820e3f50139e3506cb4d9a1a1d7d7883bf86e53c81a0830f7f5ccfd456ff2eb5ebd8c3626539c9a9eec434d38321b764d14a7eb731a4230f9698a162495b999227c18391d39d476fc6f37750f7cdb269882701a4c30ea47c860af1de1bb175d4a1cf2bafdc8cc9df8d0f1d74c03409fe6e3926ef9cd331074cb3586e4979b30c02c4832422d02187c2ef04b77c313ae250b654d163653c4fe1d60187dcd34b0531fb0dc98974e4dfafc30d546e7e4b3dd136944b74d1f7ecf46c396c7835ee7aa5d4d7b057f470129b4fa898a9c1ab365fcf9a4c2eee693086c547cd98dc1a4b6ea0030df49f986ecdae34a5fc1912cb674bd5dbfb2e378319d2fcd7372a8339e547ef4a4f6fdf92c18d1735dc77f55878633886cfcffde311c31e3c46ff46eaefa784c1d9bd0c9ead3567d7c05094764dbfac693fc45f503556a95e0e7961731fd9cd77ed9bcc2e70628917b25e672a2f174e51355416d5fa924cb690ac57dda7e8b4f054cc262f13ff1db42c1865a97da6abd4333ab0a0e798b2ee437b73c53bd07185b28a9cac494a269b9d5670a3735af5c77454813a299a7472ec091b722a1c2cbb47d405fb6e7f0a7cb88fd7ef8ecd572285744ac8cddb4c92073d0aeb66a5d9937d12e88042394f9e379b8bb22beb7802e5fd751b7312b35cd4e1842c76b4bfee7b2ce96fc297f2c994fc25ece8a8830979942df92fcfa03ddd40c712c8f1244b74e7752861d7d7b0304bd1aa4e7424413529e1729e930f9b1d820e247c16ee6249f34a6b8e8e23a039e57c4c330f298d0e2350d1c49336ee454711dceca1e56e96e43b131d44306c5efbaf96c5df358ca22e4aae0d353b8b0b038df9b7a4d82f912ac9418e60fca395162ff3c0d8c2a7cbeec77ed12529e755f0cd17650b16a36bae62de7b91b86faf66d3a4397b7841fe9414a34d70a4c7193d7a3020c72ed0f8a8a16312f1b09932fe72e8a23b4b492b06cf33591b393972d1586e1354fe63650f4744446ce043040700921c2073e082de4f5249d5741bd8c08708cef0410211111bf8284302396ee1e776984b1dcbd24573d882f29c6d75edacad5120396a81550aafe1db3d62de1cb4c0463ce566c7149390e5608ccd318b3f655916c6c8d03d6262b148d4e4bae7b9d5f3c9c9018b4d922db69a58399724af38e693e24c37f304b5b8824dbd3661b3c9c39eb48250fd18ab1262c5f796cac3587efe93ed418e555c59f3335af4c9d1d3c8a18ae32b7cf6e3829f89e64805e3b9baa33295f67415e4400519362649a2a4b8d9570f729ce25c9d6e6b533822228201535829946c314b5aa5284c878ac7b0964f280024072992247d75fffcc4b31b8527de6ef93d5fb25ba2f0fdd2a3753299185d288c5223995b2d57a70814cfc6e8191f4e6c3fa14f1c1dfc3ddbc560f1724f9862887dd92739fa4f9d602cc95a576a0e4e7819ad84cda9dc52d71c9b48f0bb8b96951ef4a4736822e9c684ee36933e939709538c716d23ccee5208136e922429a1c265bbd4e5b8849d37a6e76a7da57a23222219c86109357649628d86f020191772542231aa53ee128ffdd721420e4aa49faa6b7669ebde24083926614e269f681dfaaec30824292303392461d20b7eb949aa50aa03492331418e4818a531d3fa3266caa91c9050e4845ded486790e311c9e935eb976b5c474768242087233c7945e3c46062703d0a391ae14d49e273b27c962c23de984bbc8b551a4ae54598f249954a2e8dcd495184257476d46f0c0df32622d16ece9327c9d01444046751bda17e94408e4378577662509bf29bd110578e3d93a3618e42f0167e5359fb84f8af4fb3ab6bcaee7910e5143266c959c5f27604816dea4cf23d26e58fc911883b8949b25d4d27db09fb1866e400049b367fe57c6594918cf1c3004948ce67629e2499b82f1e128c172e2a85b48c84057530c011ac746d3691e9fcc28911124deea63374bca7b508e598a149efd55e4dce0044b0e494b34982cca94589c7300c6e7d5752b6a6931e1428050f6158ddebbe71a354873e18b5c9e6f961ce1fce031f65f81969a8c00a3c80d10965c2fc7a8a9dcffd42b5132c4b7c5aa2c417f89944a75abca063f5e24e15c3a69b31bfa0e1c18b4c0ae9a541db63f2985db496c33e9ce749db0e70c0071eba40bc2bbe89279a0b3e3479b4f11739d9010e7a7ce265f4a0000558100237f0c0c51e5bf9f2b57e63bfb760aa2ec5ac4ca5296e83f6e6618bc23c9c14c6c39a5ce95adcfb316dcc9f112ed28888488f1af0a085791bbe9652acb7f6b3f8ec92744c668e8888c480872c2c297864ed89b12809953c7cda764c65241e04880dcc2003063c6061da05cde37bbfa2d0e17259ce2b155676c52a121df16bd28a572ca4d27c7bd2342b8e177d92d03e7ab25a3c5661d558af77accd5a29aa28ca82492789e6c13b4ac18f2040121ea9305bd2fa94a316ea5378a082cc2785889929b724798a742e83e895679362e7043c4cd1f99f14d7744e92c49412f028c5c13b87bc546b0a7890c2b09c5c4b925ceb67192ce0318a74d6efc48b16e463c54314e8c6b8d1dc4fde107e284a29e9b7af696aca37280c6e65728e316adcea7ca2f91825d77f33a85c3c3c71f449aa7f873c3ae1b5f84eb895eecb56041e9c68bbe64b8a9591a0a1032f234143071bc0018f4ddc953cba790ce21a0f4d6cb697d9534a77fbf68888080acae09109c3d87ec7545c860ef6e081092f4ff3ef7e8ea5bb59018f4be049ce2ed9b721621191e4c7064444921f8e3c2c618a48cfb1f3b77ee9088f4a9c52f2fd9996b3d9661e94784bfe8edb966f3ec6e7318937f3523ef788fbb61de02109f3aad42a3e2ce6d79491e080472454fd547234314d6b89360f481c2a661ebe922421b50d783ce2e4bd494d7fdaf7f32309303c1c614656dc901293feeb22221ae0d10872fd6eabd7deb26c466452f29cc9fe93c58b1671cede70ba6e9e53a5085d3f45973c9fe2560a8f44ace1b76d3ea34949d68c50e0fd876bc043c003119694b26fb3436a1cf3108cda788aea3c0f435c9e755fbbd7fdbdf12844ff490e91edccb0241202bf247b39e7247f09161e83a8dd4acc79622ff4f43c04f16670d168521acbea7804e2fe9610f70b2556ecdc0c3236073e584484072074d5a041ca3e4687cac81fb89462c5ce704f61353cfc704c32d2d773d61f551e7d386a53563473d74f2f0f3e1cec83e668bf9bc71e0e7149455cff6292e4f5a0448e985c92f4b9269e07afca4ef8d49d3f7742021e782849a2749f749736647d8753ca4e2f699ad33bda81f4b4f694e1c2a30ee78e95fd7c729e685278d081b7fbf46bf5caab180478cc41577f8d79b525efcba10e67b2b9751cfcd0b313d22439ae091cb029c9c3447d4d55df9054d94bca54dd607cf16cbaa627a5b6c1d0d997254afde2c986d2e5c9a5b9ccc1b53564996afe5316d5f2a8818f9262d0a824da6ed2b05ddeea58f2b5be060d649b701f3ea7249d9c014dd24b9b341b3b496f862da4442f3a5c4ea12fc3971a9de6c49001cb74223195f9c71e439edba492832d06faa4bf15f3e849c3906435975ad55ae382c1e05d929463af98e07ee136e1c3f49e78819293f3af4e0cd5245da8adfc4349a25c602f4df95aa9664fb76065df94a1452dd815b38d59f4cffab2d05ed818dabb93760e0be62b9363c89c5f614d8bcbaf5421bdb9154c318728f1afccae79150c9725d6c9c4509939155ad3ace9a88f3e954fc1ece4314e27974277bff66a278cf5517034465cc7f2bdbda150dc94502577d1357d42257c7b9a984453ef84773b2e7bcae136be26e4a9c2a2b38afbc530e1dc714343a96d892fe110f17d1a53c241b5e593863a0966ceaa26af3412eec93131d453defc1f41df1e0d2a5e266f845f63f4a6db7914e17ced9bf5a6d5e2e641845bb3c74cf1ee4eae876132cdefd8679772164665d1297abe2c266583a107c912e42401c6d253b133a7c9e9fa0b634b8c75ee1de3555f90a31627f5f3fa077b71c99e1dee355ed4513585cf10311ddb0527556dccf36fc93eba404ed0ca984bde1c4f2e36f10f2755258929830b3e75852679e25bac1f397d524c985fd816b665779cfb88320bd7c26b69352997450ba43b9f099ec349a6cf2249f7d89c2257f496c51ed3668a65ca3ee958944b9a79ff1a169a5758bdb994f5db576c5d826812db4336ea0a77ad3b9c099ee2275bc109369d84cf3e7382acb83d65a83e49b8f66f15a7dcf1b2ea946ce5a8e2cce3aff1747ee3a9e8b3b2797a8e37372accd615fc63730a3f097dff1b53fc96ad95b1346ac894c2935e4f4e5249cc9d14c7a5cc6cf796a96414644e9bb4dedf1c912896b034ea256543c1b9540ee182c22a0fef9997a4b0fe13961021259b30efb1f64497c49eb314dc737c3bb17d25b1a24a38818999c4f25c37c14d6870d998ee3daa092a53f87c5666c213ee52478d63ab494c50f115cd37599e944c2e81995ad8d82cb713134b5c1a53e70953492c4c2a816fa6a8923a7fa52da184d17aae3d3cc924acf866c2e7c6d968259248b828a7bd1dbc629544a214c5b4356f98852881c4e9b3c3d6f343e32579c479ad43760e558249491c714992c8ec6876664ad288feab4c537891dc9f11c5dd7d5459592ef945b82ef9c1a39820db2bc2e9b0599df5c2e47c22b23cffcf318f082eaa93e5d12477d00f910693d64ef4114b6143f45d95f37c2f4f302944a9844eb9bd2666af84d8375a32e9533ab9741064d068db252b51828228eea6eb92f1fb140c44995f92e42702a28c7d526eeba656ef0fc7d58d3639e927c9a37e3086e6944e4ab48b39da8752c8145af163a129e5831fce375b2add43d1ae715275bc4549f550f0d4896e4b5dfae7218dc88b131e65dde3a16abb5fafca517abfc3e92a5253743b64f919b3c22495933a30321e1bf33c9ec4743865bff98dc7dc53cea1ccfa0d4bea52ad1c8c29ae899d581cf2b89649f02ce14057ba13bb6ec5ef936f48d2cdb9169d74839a73b1e2d59caf26dbd05e66f6932b9de529d9806a051337c65d8bf935606fdaf1e29d901557439b7df66e3f2cd54e439227fb77c74fa6180d49e9b35c48545e74cf605c0e65bbef51c935c39aea92ac9a512d4aca90d89f4dcaea7176563270f2d58b56fb5a9b632827df3f31c978124a316042ae499bc478756218e8b5fcb37a8260286627d1fb84bff31cfc82993cc9619b553c58d00b7b4a29ef27f92eb8b21f374d997c1de78227e47b7e5e0c7bf12dbce6d983c9e95e096be1338ba9e07116ccf338f9a931f99260e170797165df83977a854ede5bd792c4c84bada04b6aba5adead18ad02726fb2e5db14fd2515ee7acb65625bbcf2a6406aced5a999140ef73497648fb9b8a250d8a731ddda24a5eaa0f04875104dbd69b3b92798f42fe59274d173e69c60b23f5bfde89a80a70bb2da6f41f5724c70f7b563ab7c72b3dc12e83bc132c7e83af62b2151353e2dc5e46d3f09867af95c7298389723a15815de363f82c133272977ac19d1087e45d5467ebda67011123627d3af9c3dc40520422edd31f9591b466995275f2d877cd68491e49673ca923eada8168cac3f362f7e88aece8091a51426a5e4999ec4ec17c52ce127e3ed6bcccc1747a7bb4fcf7a51f0963e170f1a4e0e2f7e493bd1dbbf525ab60bbafda362c911e619d3c591d9b2c2d88a5ac672518e51375d5b52521f175cf64af2e632b3a0dfc24c3153865f8fbbb52da864a2d5ab5d850cd782d050e298afee569816c6a0ea9e2932ccb2b3383bcd45b6e25497c8a24d616376990b25afb1385690f832fd0eb5c222e9fd779592d4f77c0575629597c7c5acd315a757c54ea12f9a5cb602cf4d214faa7c493f563cf6fb96af9d5594f5f156bd957b324715969860a772f56797930a4fb8b859d3725051b67cf18a29795dca3945736e173e9a8931e4a648f079ff68dd936d97224d3d3e9642a39b2c29d4d01323a2427d4f46c1469974264645415a387965baa7a2190a73f0ef3cff28a62528923cf24db4f38937a5dbf0bbcead95270c935da6a6f324a93a91e07b69d57739bc8613fdba7f74926a137a6be53eb9fb3ba794269293ece1f3fb99b8644bccd4f13f1913d8e4e68e758973bde524e6ff984c5b2259338485f954023b39b7b8b1987ba68441fde6d2633389844e49decffe245fd64842935f4a0ca196a49cc44482fb2417264a875b8981c4aba9dc73a7645b92e61175640cf19d6282891947a826a57c1f45ca3c338d68cf2ee550c9ae2b6618b126693cc87dcc228c490a255ffa2b9bcb2882cafb17aa59b3f2c624820a6ad597a454f13c22ae93cbc28c09e6a93f442b955d2f34f64636c439db9669f2ca3172218c529aefb62f782c2184521fed34c93f26940cc2cb5b226a42ab9a2a08672f63cae431d2c540d86f9a84125c635e1110858e1bd314d5b73b7f48c8d47c9a2a3fb469fd4e73ba856dfa704a72a5d2d928f788f870e757d77429ad2ea23d247e5cab545c0fc55ea6d8a99097fd3cb8991d76a28f87a478b131f97f52fa3b9c314f8b77c94ce47638e6f7c855374d61ae43219e2646534ae1b374387de6c6acab59373b87e28b65097afbb52772787e35dac6e370b8bafc999c9b32091c3ec125aba26db25cdf9028a15e7d49923e9a6e58835898c9b8283db6e19452d6ab1c73d42a366899227f728ee953660d4fe7fc9375f52f4e450c351ccade73ca39bed9a58891062c3f6a2ec1c3bd253968a03a8c6712b39c01b1f3dc147eb2538f6298e19c26899a92bf568c9b11111131ca9067c99673c57fb1b0c9a077bfd5aa948c21073e7c0c400c31b41964f0c00c346c88118643c6ca4ba12c4d3b2ba30c3242700331c060a8310b16ebee9953231110e30b6278014f0d1d4d88c8ed9bbb70bedc2f612bc74e192ee38c1c7c200d0c0001929840052222692c10c4e00261c1b635bc05a24f52ab4a92f1cf820f708003cec9f3400c2d7c56d933d56d23222239c8021f2265a2cd57979efc0f1f41122cd89bb15212770ba2962bd47772fc93db6ccefc206858215963fa9dc538b1a902de1d0d8dc3a894cee2a1c1a1482c1007c481300014b23c2b004313082040541e0c0623b168246aeb1e140000562c1c463e202024181220121009c3c16020100c85016130181408878381e06a9e86b1a0f321382943932685b316d3b89deeea1e35b62da4872d44e9014be98d0520430115105ce06db4bed536c8ef4910ab4e10f1e807afad1fc2607b13e892d5f4104481b8cc3551e1241a12bda36798d7fd1fc98b9f0f2a575d9ddbaa20c420554b99f463949f5792a651368dbc69eabbe8b8c571dfb1c096859c1aec77036ee11c2ec459637e885c46309546ccd52ce75b2cde47d7d988b93bb1b0a224b305ecc8b1faa84cd0e98b79e108d649bec69b7a51dd360b737bcc66811ae0f7786bc828c1d6b20f56f290018c23b58b71976022a6f09155d347e34c17ceec6bb04da2986986cd07e154aa9b6491bca55797a74f50560c8e1f4777f7d617b082f92d223b3a86ce6793c9959516497acc9a095c481e9d8e6351b6ea75bf0bbdf4c511a70900e9b93fe82a165726269eb3dd43ad46ff6cae6913edc19d5598b95b83c68725e6d2264181cb78d2e57af7f017e37297be88babd721615899b3ce61881211bd13f7df66d7f9b7243d59b296174d39fd26509917f1501ae8c1b4039179cd18194a05bda0084a0e023954fb6601b16c0fdb905ba617ec722307d9d2f13d253501de36613da5a05e5af05579f1b2f49ff96f0ab46c3e9edda2b381b7a79f265248fb807dff8148db979409dc2a20538c69534978162f027a60c3d6d472c4352925ec47e576b94ac36bce049efcb0a16346bf070738a71d0ab9a87671a571550b3b4a7fd675a687c71855258513a29030cd57604df50085341e823d93d5d34bf06b8543ab6cccca759dd3ae0b78885a22c6bf25efaf0a9e49ca416f2dc6a9773d9b03396714495d0f46d8991a6fc99be59db4afa23e290d272a56571bc146da35eca8b612fcb2e24cebb009b95355bbb8a96adb2791e881150586f0da9c94e4b4c85dc4bc7adb08d114cc5f58f82eb33f413d6cb32daba5fca832f220df42037a56c182ef4abeae3b846ca920aa909c014b78aabb2dbc61c9688696c40c8e523f9d3a85ea0bfe8f4b9cefda2843fb27efaee86f98bc6a3eaba266256ad582716d8f7bfdf9c5ea8a94f51f1d690de0d68f14d8c4948ed510a15859d2d01a75fc559e1460d9cd135ad882b3c765159cca94096101fcd90a732e90b81bd119750fa50cedaccd46252e2b808e5ce76a65fdf3fb2573da98fd03bcec835eacffdaa68ef40a1b325c3b42e6f369830fc39b98d61438f4b627db962ace7d92086f46bc1797b03aae835cea9ba583294c643d7a22613fe32e9f2bc76e1872534c4aafe6178b11a20b680c6b5b3f2762cceaca53745b53368b9a35ac0ce7661cd31bed32c0146d924f897e26ab3ec257d4ea3364ecf05b2dbf4cd99d54473eb772d7df3ee3eddf46fa7651afc05b3cace17d57da7abafcb5e22ce588800d47941fa79ac12b13918179d040685ea45b224e4601846591a6c17dbbd0ad001b481cd857aef365641847a5df5321dcf2a8f722a36031fb8af63fd7e68dfa77edd587d3ad6adb10dbfd035f0d61d9201298689eef14ace8c635455913a5c16b767e754f3965447cc5325d4c1911420f81a62e44949928e1072047af35fef3b16870c81a2c0a859a47babf3e508f5d67033ed4ef970c19f276693f47cb5bda9c1e7d5765ce1dfa9f5abd27fd3fa75b5f3690c9ab48a75336a3deccb718a827394c4164faead868fb54b6199a5341cc0eb567b921c643bc71eaf6fbf5aec56ce3ebb59ecf2d2ef3b276ec267950c8f86e74d72aec633d34feb3db4a292590b116d11bbd5f2b4b37a567c5f7c5443b119fbd07d9deaf5637b3ef3df39e41a5f1eeeac0566c9ce75db98092c41fdccbaef350c715f63e76ba8be27c5cc3395364086ae92a55bb2fb9cd23d8fd570958772f5f1fb4c36c898e2772bbdb42fb5e616dfc0f3b67aa1470b48652e225ac41195ae5f26e90e4052268c569b058bc60175694bf3e0577874ae6a4e23568b6d717530ccf5c518d7f3277de289225dbce9886a39a5066cc51c99832cf1ea78aaa03a2cd5d28c073d39f9fe01ef0737e01901f1891ce3a7ecc15e0bbde6fbbf90ed34a541cb15222d6b954844421564a8c7d9e159b1b0fe035cb5bbc1b427fb8d768afa69f441022c976b55a1b37c766375226fef68be7cbd99652cbb534a0457123dcf9cc387b2c576d051e68e4cf32a43f6755832c8158272b1e558f053b0120840a3d8042fc644a71454202f1a3858ea7013ce79dd9a9b2e7f2f47e6fd2f1f810f328a805d44aa01b32718c610b7aea189bc4216fb308827a762cfb482e3e3567cc3116b9d8a09f7c29e06c82b86f71b75ae95508781a95b124c1f9c2aabd8a2ab96f64bc5044245c62cad0dfe9b07b9cc2da1914eb565d8e49639be1ec34a492577b4cf1756c60fa539da8ba06e25f5e247c7a02528e1e72e6c0426aa7aed46429ff6073571d4c9fb3846b50e711f02bcb2fc1d7290c6a8ebe56c99b338c06c0907ecc62af3b24abb4817e5bb7662e331e80c57fe53863835f579de8a09172b4e28c058927d3655f7fdd7ffe62983496c2af84250ba9ddc33200a914129b50bf4b1661796750d123086b10593284c6d7158b130d0c2aa6500448b263319364d8429051a64dac2218c281397563f807c5be4609c352029a72e18d42236cd4a58b78ffbe6e995c95bb56c41e600a3325ea8f97f6a4130f1ab56ef3d0e9f0d721d3d52b48f54168bb63c22c7fc4d4d64fe2e118f7ee66c1a164f6cc5dce2787bb83b83a54a3056841736dd420117c17418ebadc8462a71f21f6b0671f2ebca612f5f53e831ed58fddd9ab8167d2f46e9dc238c784b01d9ea59ec0b1db9732a2ac882a0375eb73136d3d144bd7cc8a21bac4491381fcb55e487d47b677fe1632cad7d315826b9f61e9f7fc7c0559c7156374d1eb92ddfad936baa42782325f5dbc31502d17453c54e6f53e64bce18b85065b8e0b99f9710d64e1d5216c8629da440a4b35eeed7c13ffc6b2cdd04056f6874bdb24e756847c9264ec68f86f27ca62e937a9d2c8832e0d4a40bfca4a1356f8d5725f7ebdcbba65704560ab35f179997e2c3221707509c387389802a31ae650e845f937339e909ae2f156bb2177109a51ae0fdecb61a3e8edc2b7e3c51f1c7881293c0c852be80631470acc57ad2256dd5b217ad8691ff58945c0c93316dc1f184a114372d9f84df4d2d38d99a2175139f6c73f9d20b01fea09c4bfb9dce858c913449279b126c48749988a4681033a0cd06dbe202a03c3d3e29bdbad81ab963d6ef2a48e9ebd53ddf0b8e673d6925624c56f061843f2c67f5c803f4fc83f99f032bd44d4f4baa1904e671af07e7bc689e3f5de2b675da8132e2e89399aca60782dcf6aaedfcfcecd87c9b09dcb135ec426b82e642d56a0d30aa7431cf4ef6eaf680ebf1ee68cfa54b66396596b86759009480083bb66507864e93ab45205e5a1616711d16004db07ea757c3e200e19b4aca5104301d4146ee8274603f061fdb2d6cb39942533a50a4faf3e32671914228f69bd301881fe9c676293af18741e33611b928d82fdfea88b043de9b1ed6a6d2cc7162178b13a8fefdf1c4b7cd077547878993299a873e1fba144ea00f6c34df5b28d24b92141df6e0ebb7e044ed92a3a1b44f267a26e780e9ccb3350ffa4371261572335a185e0a4b9c37a15e88ec422e0c3839e44a80f5a47e8c2fbe37f95aa1f06d217a6db2fa5008162e953d49b977b21be60bbf8a7924e4cee9a270532f26544d4ec8c672f5f952ba416e72207701edf7bdc39fa0610ec3a1558f54295e7db6c5af7beb6b58714d94d78f0e49df704e6d8d3499004b8a5fd045da371f91b158da06ecac64dcbe48327019fcd90ad3c73c3b056b8a53a85e0f345d7867b5e9e84e6b932806650e2a5247396f03ea0c8ae89bc4952f40cdfff5a8b1075191c72b13995ec82da97df58fea95e43c46bce9a64a363dd3758455ea51ed2cf76f34c6a69da0fadb8f8a966322b462eca1aa9333016592d77ec9073c85293c36b0ddd3a1852574e8fcad0c2e468a59c2ea622a359fc91071c63eb57073a91e2cc967f046ed7799cb26803ed3a58a341bc7cd7dcb1baa24b8cce8dd91a69e4978a16e89e06f7213c46053e588a62c03e3cab02778e8be2950fcd7c87e881580208d55277884d16c53c89f154a1d1e3f18bad42d3490d33063dca7e639eaba30d4a2a117c7ad038b9884ae77f6e62fef21c1bee81f2380821ca0d3ef188fd5a42459e526f2a52e61c59af186272f1b07d2c4c529c7412c2ceb6b6c25b3f6d66537db56b2c784b0c4ebd5f00e009eb3b54e027e5254095259bf0892a0113c36541aa89c33fdebfdc69865545307478cf349d4c5b31eb0252b143f8de0d622812d71b6820bc842fea0322b630794639c9b6dec7ae70e0f9fe7b901e59de24311d74939d52626b896e4c7698bddb2a496593129f15913927068a74beab69d42d248d0c2aef82d8a62b95a5cf085444c1db33e2dbb170d9024de7eb462772beb02a96800c22a6d56ff1172336520630d6fb9fd4b17fff217b8f60a19f5f5f375b241f7553ddc6c6466a84c710cc502778818e508828763ce867e0a8b514027f2e8376e3c1c9e7739889fb76e643cbf6326d2cc6a8d8a2d1954fcd49a803184aedd1fec8701595c94c6f2ba8140f5916e65a0047e59d7fc76cfeb3de3d31ff1d2a681c074978a3a8a0be88d13abe73d7d34bfd9f0e932707f6d3b751c5dd773ab65caf6ae34af8f47b69b6dc6f0ecd883c72eb25f31dfd6c17a3fa44034567d611870f3ae94177aaedbe0839fc1c6e0e6b6de1ce24f0cf067cbe6d1418f41b904444abb2474c844e1269f8306765d1ebbc2b7251f03426180d8894f0a94f90cf7789eaf109da85349b89b0542171878c36c00ff420dbf1d1749715510a6cdb3017517b8538bd7d63155c3cb98814970782cf8427a174c777634c8dc43715003467d00909a65d40affd57481e7064bbbf592f1d92bef2ec0fe8dbfbf92baa51684eee88f24cb6aa082755902e0810838bc00d5a8cdb20044f637d0baf132f5b1be80ff09ca239322a1506d4e489768c93e83339d34ee3674d23a9eee2b16ac050209afcefa953a1603048d4c25f46325a08ff610c3722209c55998b628cbf2d71a505248fa72b93a21fc6dca31496f2426d7c53301af819a7e2d6cee1f23c98346d2d9aa6156145a2c9a8e3922c99edbcdcf3582cb506decac35b7468432258e7c811c9ae17014dba2d0e747c73fbeba8f2942691ab52b9330d9729ec2391657cb12f0c77238029502d13364c89ce974f1b292072d80cc34bf6dc989d785109d0e1b7fe8e2f06785233f94ff3ddff9a4b0b81d6ccd11ceac07d54ab2aa240fa610a886567b2e2b5a5e6f35dd4c34eb19e39638fa86e8a1c378ae83e3bfddc5031ddac03fd01dc649aaeaee22a86b63ea433462a3e0379cb66fa294526098efd0cd0818d0927cfd7ebe4205d2b660ae719af7d2d819ad4081f1fa1999b71bbe8d65af00d71b94fdcb307636c77683655ad028507c0f03980055081715124f93e14ebac08cd417f161daa2c33626673ee936d893d48f48c23463a70ae552aa017b20074861be9d11a30754113b28c18c7abe4fd34f0d46435a73f9c1169e9b2241a80fb50cec0caf24c1402d04ae3f3152719f560306d322e8e9ea4eb22573bf0e3946409aa4b3c55a18a606f6b69e3a61894ef9354358ba52778f690250fe7e9611c9117dc76f4defa10e31f4d179f61391110518cb5cba4d0edbc5bc14bb5d98eae08d84c3bb552f99ac355e682cb6d64b01944ae041419dbe72f5d06a0ce3d9f3d4f75ca8665e90325473b2557982929629a1393398a381f280bc6903d56c30766ccb036afb6d20d8eb0bac41b6aaf009386e3984915570e515e5420d49fc5b0323977449180e4c56a2007bbd6b065e6eb1563406c29938564a3ec6d5c0b0cefd6b1cabe652f02c01a2a29392c97dabe98e8caf217d09f109dda2d646e1d5dce4276b6f304794282be5b8e4b058e6838a5319876b89436030ded2dbd89e8608269d4812cffb0358cc45bd600a2c5852d0e7cb1195b615deb7c5eb5bfb03d13b17d7045cbdcffe85921a4215b24348fe7fb1fa718429465e8963eb9a4327012ea7d27da92b54ded76397bd0fe2611632bb3d1e700ac02cd06d3a0fcb13137b0571f868cae00f636010f9604dc06e69c5cc3ecd3d5e0141dcb7db708e0bb55757c9d909627eafd0cf56b1b918c9eb0050b0cbc92ca461eb3bf4339bd03949010a88c5bb4bfed7943a0f0df2e9d2f4bc79f5cbd35a8cdaeceb4b3215107ae6a77cfddb0b36af22d4ec1cb17ef5a1adfe07bd7a2aa2ecdd60fc186268361280adabf0d6c24df43423add2e922b6a68de1b4246d940d5bc24ad2db909756e24b522b84ad23b994e98646f5d66d04ffe9d8e5fdc9231d1129621f6c069e90f67ea86481b77258b1218216dba4dcb2441141fb61216e1da3586d0a81430233ed55f5b416148b493e07e5ae5ff7352fe3efab7898c2815bba205e7c558033294750245ecdbb64e75dfc3593ac25c0150c40517ea9f4ebc23bfc5484b63edd4fb99c9a5cdfeb3983ada01baad3f003255b3e866e9d3755a580f0c0d80b3901070e7b06f736712b4ac494e7357194a5000e5baa07ba3bfc80ae082a923975742e8e35ce886409a07dc8e9f542346dc530c2563828806d6126e210d9bf8aa8fe9ac58ad34599025532ab51626f194931fb30542d9013626932613f8d2b2257f4cd228648ae5814b46b510aeeb8c0f4fb22d43a54c1ba99aad0cfd2c43524b2165e70e2c2e926aba958fa0abd395999eee886a23b1bf76b63aa77ec75de0df77e5315390304b5201a55b1e1e8236fde6da7eac4e9c7ad41db2e81ea380551789fbee867c2970b2952b7a060d44d15e717e0f6a557500d7ea60ed86662e409fff19042287fc0e8732f280161587972d33f8142d4d912f373a727c27565706002e9ee41344c0e71a8f127672dc5074d3b8be0c14c3b6f045e714f5ff4115a50734ebe7672a3c5f006c0630277a2ac1488f55a60a176de723deb14b51ad1f8ae2266234b3e81df4d714d17733aedb18586ec43810b0e59546a3ee7cb93da21966aa03db07dd1d2563eae1761f9e172d78fc56886cf711aff27407c64a59b72fc79f824cfb5f166ba8ed29b9d0a9a14e1c0c803129b69560356a52642b39417882fda1f02c9d3c8e5702c199d24339bac1f9e238604998820f07d28786d0f719464a6b8f18ceed641bc20f6c7a2d478bf3b387928b6bdf86a226f25f3458d8a2b72555d3c53086253f7fa87e6117b680d91f7386993d6e46cc73c6cf56edeb892856afcadcae80eec15a5155e2f4a3dd31ac822d6b990132f38e908d81273ebe6b26fae17b46fe29eb1dc4d73c159c23d3f83ecf44e99f1a4ca0fc12e620fba7b52765efa77f1524f60f5c6be2f1a6adfe12da3efcb06c8b6e43fc907ce6df7a3edda3c0bc831776ddf2a08b0710641fd99895caaab3e6abc3716f86ab52651e97cedfa3909d39288baef5fee2e59a370b47c2f434faef9ef0166028271cfb7a946e945e80b395fa413ba35393372c6df2968269bac0c197bab01d6b326d33e10ed0cb267d9ea6b042fc02307ece29b3c67802df619eee6c60ce7c0a2a49860306117595dd40bfb12dc9803b0e0497acc951d605404879ea263d02c57cb63926029bb0a1238b12b3ee2e99adfa7255a887fb9afc9443fb4e36d4cb7132b26ec02ed625832a9aa6d172c9f9f28d0aef830c35cb8c7a94a5c17df4db8df653e7c0819a22867d8366b348f4d7aba6e835272ff96af12e2d174bd189a39b6c41e2f5eea66d0ae8a4e238f81209e18a22124726d6b5e35ebe5576ba45ba154f565367cf6cc5627084787d2cc5e8064c6619f11b5fc0477ba02539f669a49080c96cc8a86fb71bc2f880a19242c6197c9d31d7f603847a5ea3b6056519a8a94fa6b41bc3af71712f81248918a9181426249aa5f3502235a2fc7e2643f414e091c3143a8679efa0c795358b9e53d86331db70f8db8b1489114169d8e23dfb5808af84a0f3b21f407a8a0614bc6bb8fc894bfda2ae89cbb7efeb16399d51b469e9ade7179b6dd05d987274d72a653b3b49997c2a073b5f2a9e834381f78ad8bf3cd41f3efe63d59216909f9f986fee309ddb21a17dfafce3cfe12e236b63fc66a0f8cfe4d23c8edacff2106174ef373022d4f20053e782910c3c6c270f1d6861e6dfce10a5ca23cfc22d06b4e7a5404c806313475baf222bc4a50008c0f0bc7b469f9cc0799f72b5fd15af7eeffb9830e571449d06d937ac1f1349196630540f105943ecc68aadb354624759257f9e0b0703981e58717be48fe5248393aa7449086f3522db55c97ca934a3e6de72e9d0c9a3628e808dabd70033f61ea619efcdb841b9ec4e9e3f0c7268611aef43b0cbec896dd7f10807110a8f2f3cf439e56948cacfe42be06851054371d809897fe1e695d941d5ad4a2b78f0bfd26a108f2ec975c05d7d61cde0521d579a7a2574ad1335a8bdd0de184d903d09aff8627410f081e52de49c9cdb15770ea7f98ab53773193daba1cf8db4383ad97158732c9d0285d34dc2ef0b1913e94cf8281561c21e245aee6dc6fe989abf390db4a096be5e64e31453d519e4372b13d990fd7435dc97953debdc7930ee5eda23ed4c9d165e0b9dc5b2304be7df81ef164693c0c2a94af274f62d928b1802ac587937ca735f21f7073cc673e0ec6b7357f746fe5902c8036e025bf390c73243370eced38d75a5e6adbd2a21464f41ca2d2a9b2c99d08c89fa251ad7cd437e2e528cce8a903859e0fac35076b7ff084caabac03bf83ecb975bed5d03a1971d1c7b4ae3a50b28e10b293d58d1da14bf1476075750b4833579acb027effadf2cb6933163f57b963a8abdf9d2b6e7f47a3c5a5e51f04841db0bf5b302aa894d68c87a7843c873f49869f8f4cd768e0c5255f6b38199df465cbe281b05f5b4614e630896e4ebf41f11aa055fb56cf4a51db8a8acd2a5e46a3d3e9009fb9c08b33284c05ec54f40f571bd9796dc2b83e06a99356abcb7109109a8b64abfdf8aed6e9e6f34f72118ced25103aaf3cfd21e6a0002223e24288df8068892a0e809f70d68dec7f7566f2fcd5d56bfc032c442554baf2274a60e363541c855eab1dd56641eb81148779a0e90e6ffa068d20ee58c5899476d8b19379e7299b9ef7568c5ae1b0020c2c683688bfcc92c13550522c4d8a1dd44fdfab2ad30306d14129e89be90952e5ca4cc8932cf0ba224af7e1554a0b55af4e2450a7d2f02f957611f8c8e06c6e63eb5f8252fa32fd56b5969b2b13fdc09e246425a3bb20b01659d7743cded222fd81af44d55292982f5dce496391782b5a70054963712025c495a7cf91629ce06d99fd448977c2f78313684c6cad5312e0ccacca6ced253846d58726875cf4d729c651c9818e5b57fd2299bde6428c432dcc1da190731161a7afe59c329d0d2cf2d0decc72533b2224d8928d68a465c557a0561496f3d1185f0643b0e883124a571cb3591f189e3a613f02f05df76dfda008c5138a8f264da2a6c57fe0df0b411209ed8e5b7e2c8c5811f0dc7fdfea97d5f6e01d39a633c70e662ee61b9259c707565618a7797e8e87c08eeddc48d479e3110a6921072a9a417b8093298958d54356de3716091ed587515ac3b921eba5f880c4001dfee51a01361976578458b5555d996506afe40a2c82ec82d92c49793ebc2d3449b87226b155017c801d0f01c01c2eef4af242595cdfc1ab37ed745c3253cb1178803cf31c11da30e5ff1abfddc146b0d368a2a500070ac5d9f12c7f8af87fef7ee2b127f9cb4ed649f707e30c72190c15dd6ecfcfb0dc50069c6f489417717fd3c563f0c4bf567d3a5e76f5b76a3727bef7d373af418fd98955b14b472dfc89c39e7ce8d1172df58383ecb7c133abaf6b408119ee703c02bebc1c4268e2e1202ae61c6c1a1d29f938d39d9450ee2e9f3f2d5d1baeeb5cd7317fe9b18fa7405a0bb30bf6851e9fc4aa68b965b8e4a6a3bd84737862d1ea725023d285b4ed4b14240260462bc38d59eda7c75484d4a1ef53f29586704c80e7ed07e8e8995d31eeded9b015ea818cda1797d4d40efef13ee1fc2bc14e7712a59f279a8cc5208a6c1943f4f2d807f8c63cb96fc96cab6f3bb91b7d1a451ee230c085b6ce9f6c4e1b70e456344b4785b21a19849ccf186ea3849988a8d01f98c157a45c7c2dc8012d09119148af7396427c3e554044c5a3d5191fcdc244c79a0242d2d7b8a695027df393d19074db339ebbd4b9ec56d2bb7904e62b467ff107a9f1aff03e8ec9e8d61d95d308a5efb8eb5b99effeef53a06d8594a4683f980f8fbe5abcfaa15beb49d26e42ceca45966548dec1b84f5edc4388e2e672123c09852bb80c4c182d1ba4d4324675de4422dd2ee5a03c881e6b7d16e9e5b99b2f2d035424fe75fa511b7d4ea4505fc3722cb19247c9cce9483252841e173b89030c0040ea1cdd74f4d12ba2703e2f9c48973fb4c70dd02e17e1979b9b1a9fea555265fc07ed863ef26a9201f128ef37c90f622b680599b0b98a335a91082c3e445eac51b0c61938c59a7ba2eb0082e12efc39326d6bddd467a7b2ad00ab5641352684c2fd7dd3a79184b98bd8698c54e7006662c570d4aa86598698dd9bc394d370799f784fa53171b0d71ecaaee6be62a6919da2c4dcb46b5437bd77c60fb6c6577962554f859fa9a3a1f33297db5a8c6abdac2e702c55ea8516d312ebfe61c1d3b6d5325c76cb3347a43ed9c479c53e25837c912fd690a0893d213bddd91b0baad71038c34d2e308a5c2b91659e9141a839814f0aca6353beb9779fb4e8347699b0d139964f2bc787a0b03127e5c0efcf3cd87f6c5b942e15f5482623beb44f34e913f15aba358d1787bdb2a8cbca3edd34e895b738a379a5757a1c485da3f191a7e286aeccb56a22683aefda49b078f884e762ba90c6de17706a6771822d6225421da829f976f5160cdc75ce42dc1a926290bfd84105e02334a1b4ad312e25e53c30efbb9a433da7414f022f71e4fcc5fa1043e4d6115393a262550c976f9ffc4217038927d21cd0dcdbfc69a88e6ba48d110512ada2f6d0cf5141e4a02fbb6cdcf2d7dbcab105f5e576c00928974defec736369b7331ab4bfe5828407ebb76b4e3bf289bde93d171358508270ab432848fb9da5b854d2808af650ee2ecc3b2b35aa839cd14b95424bd7125f146dfa12167701fda193317c718d1e82b4ab84eeb40e96b35c141cede4e96292f037121b85826f1b08d31ebda52e7cea07fc217b8e073415a81a892f051eaf2e07caa08787cdf891a40d9bbdf18082ca1edb404e67d2b311acb72260c63679a7cc5e81385359aaff1e94009d45c81f3dcb8ebda8f38e223950f8a9f4a296abd26ba2d4c45f0fdda50b3df123b8d96bbddea882c37d043ddf8bf89ec7f48b2812f2d1136e2f100b87f279991f257195e319d4fdb0f0726b59459f330a33935417f1a685945a9173c25c139f6796890cb423b3674688a0f5d8abd105391b2cd4ae378ffa9e84257cc56e114711003c5d4efce54ec91a2a785dde35821723422988ec588c5226ecb819ee808091ce1a442ff17e748c3b353bb55d13fc28a3740964990d0e38eee0983106d9a269e5d194bfc5ec3045a1af626748a3437904c19015d6934be8c5aa5cf9a99b2c14f59e2b3da5c2464a976ff7a64e422a2890987ee09dbf9dad1121dcab8fae93258fa12d1d34a87faaa8cf9141f54e152ec4a30ec83006ed462c903f384be5843c8a91e807fb63411d0eacaad772f5c87afe1409885894047dc1ba7d102040b1bb96bb991871c5da472f5c0ca78544fbefb0e0d8ac0b68cd9fc3a263bcce26a1bfa43e5042accf070ba83870e78afbc36cc0178ec42a30d470212452e3c20bc08c42fd3e79ae7d0eb97894ad2495f8ea086705fc58fb29d29146289f0ac3237fc1bb39f98f12d71bd99ad2b6c6829f961718af78377b4ae9d3d9dd93b793f98d0dd94458971869c5ed51d31cc4ff8ec2bd65c84d337bcc507e69199090dc3e1318ba512974117fe26ca53834484ae7ca235be57a46752ec147d90b4381be448781dcd2b31f7ee96fdd5b525b0cab02d56a3e86cf4f48d1d2a9edff5960572c3c1b751f6798c0d97c05839479d7fac9966b5a32f094970b90f31a4d58915fa96c4715f01b616b273d45f945f2af5054843e9772a64a2511911aa45c91b03499b3adec69807445a1e12637282fe9ee70923b4a7bea50a2510a272850d7d6adc3038bd5bfc612ddbe61003b0280aaa296851a3dc856c28beebfd79e01c0472d30c0b0094331a8388a87f5772edb6dcd7a8d7659200e10df4a5d48830bb7d05358dc4b5a6d692afb71dafc5b5050c85a3f9d6dcf39e0601c905b36eaa9bbafa5e386b9ae007e6f1063b128a278c72bb3e0d13a42150d1a643fc9a26cf38d82e82f9d455bf0fc1684af54d7a907676443355eb31a42710190714d86a22616f0742daff1cfcdc4eb005249eab02873345814df6eb62458183c1ac1e6c3a89f91893f9adfa2a679b4a9b8c2606c198c22c8b15d6b05e509ac0d29c2359162c5bf6893413fd8dffbfdb495ed9f28c43705e32012e5da2d22209f86689407f2a56498d0dffd5e2f3379ec1479bee109cfd313f34d2444b11b0e139cfa5c169db120bf46e11b5ba5a09d758b39f50cf97a593baea00fcb6b12f66e016ae4b78ee1edaab492a76cf3b3307e9b6c62267ceb12591c94a0686dc1a548ddb1cce6610b2c7bdec910a61a571d87859adc19f40d7b7c889aabe87cb115b3ef08df15597ae3cc7c6e91f5fef6509ed26ebe74e6fbaf1016d5b28fe28385dd3cb52836dfc9867643367127d0c038b3d1377e1654548aa1f7b762f6799666ccff9b4d68a8814900beeec9837e8a62c89fba3040ee17ab66d26bf4866f163ee5d92aaeefe94e7d8cdf8f70813a43cb63277e833b6159307851a5016c7cab263e221004f0797fe9eade7ed1eda218c3e1f02d17f1b8bf72f6710421bb2d49af0ebdcc66bb9a536d78bea5034e686c227aed950c24a4c437d35eb38db46388c01541a5ba2453f7070d7e92a69bdee32bb0f561b2c88cb40564402b2129d4e6ee1114453d825c3152c7c07ff256aefd35fe9ebeb1362b4a5f3e36be62c03bdb20ca7c22e8f1c3d6ad8d15f62b38aa79f5252a6f35c28cee211462798bee1399cd71ef0ebcc353190e0018dbe4fa450fc09e92536cf722dae3cceb50e0691b3792e942a40183a1e66baa62bb2fe9e0d8fda3c0ac9217476b9bb72fad3a1999e80d159ffdfc590904d5168ccd2bcd190239fd698780ec45c921ae554c9ed5a24050ffc6df14f8f1fb12538ef4cf3aaa446f511e42ab1fe7f94685e985239246ca51cc46f1cc80c7d48418e2e292396a41ee578c134a716442ee9ce8780eea6e3870ba0b1b1d5e15d6f4e147c80c442233f6f71c54f8e8ee02a0239be34dcbec97ca74f36f4d137c09e02fe7839d8d8bf9dbfaffce28a3cbc983f97653751ffd26ec449831f219c6954280d539c085c132ba24fdbb49ca515e6ae350170622c8c622f0e1d4386dcc235b0bb129211dbda777293e750e3182a85f4da0c0b3ef8a60c488d8902b08e86b63bdc858b3cde2f634c42c6da5bfad9bb65971b6fa240c0602d56dd2d9c65d1b576c0317b09d5f21c60c1d79fb56dbabb4edc6b698dfa4736cdec47df5b6dcdb2666b666e92032c451e573357b44d9191707be01d3d2c43d7fa130345f25d1600df5467fc2d2ab04bb2cf03032b170b859e57c022b5f53b0afaa68f5fd11bd81e6fa8f6a263f5e3d875b69fc2795d7ecfd68c32a65db2c6c930925332988a9159137497e3542953b554892922e351045278d088d7862de46d81675c7096a0392c94e712354e636a6df5cf449775756e8ace752f692511b5d2144dd0d4b447f3900a8977ef518698131513c4c30713ee2c47a6fbee02a53f9ee16626b096497dfebeabeb66c3fe2d588ff330250a914598d20dfad5f9a6b3157341ab5a4cd5cdb59c90769c2a86e7173629541a60b3c7118f4364caa8ed7fbeca00a4418125d980e1ef77c7988173d912574018c01a515015ae9654f3650ae24c901cfcff033fc0c3fc3cff033711f11fabf087d42f021735332bd491553804f49b2256da0528702c06acd750b000000b2521fef04ba04d4046626715f6f3d414a74001831b8e4010d100103aaf098c596924bf6e7cc24a54a16dccd5654f7f4f9eb138b8428d19aaf5b0312b8a1811b9fe3010b4a92c49c623c6be6ccd9a041438cc5f17845afa169af2aa3862bd0904b57393f7cbe8f058f569c243954b4606d52ec30c78a0183072b4e1a3d2324530cb7a4e0b18ac7c259464fc971a62ae3860a1eaab0fa3f336e9c5708cd06182710018e11e4b821c6231586f3ae2cef168d1f04a35d05220840131ea848772643bf899939666ce43845628979bae0618aafd24dea34887abc67f02845656a72ee4aba393ffa82072912bc35df945cee713119638c4146e7b8d18f512c7a177ab36c1b354e20821c37fc218a44ff7431544cd2b9651b346880710211dc7884e224670cd90f1f3ddffe0728344bbf8bd0c814bbf3893e4ccaaf62954992b48287270a636299bab935a5a5824727486f2d490ef331d9e99c287a5434d1040b1695df846aaf6e25979cd4414d60ad67492eff3caf990953d0d4bfbe1126ae9bbcdddb0b19837a094dcaf61534bac9a66e09d33c6ed24fb933eff5e0510993ece13c7d44094e54cac4564d92a4ca63125e4a7b6ecf6dc1f3e721898305fd8c317ba7bbf688c49b1e97c9ea2fff49f280c49db39470827f8f4760192bacb36f6ed5ac2334a9d28cd1ba182f783422a9d5a498b346060fd7070f46545b62d6b9fa2292cef1a44d62ac0873c8edc8141ab5649388d3b4e593a05142878e88ae844ee1ee2fc54c8287583ecb49fb39b64a5d0cf1e6d458d3599ec287856826632bdd4d0841774e4d7e39ea06eb06a1668a964a9a3b00c64310b7cbc7f5f84134cb1488dbd5c42e59bc73a70610c6d1df0e5f7fb96efe439549aa0c156366932c7ed8ede4641932e46a82471f14937d7783e7ec489f0f5ccee2a1f355698c13123cf6b08951299ed7bbe43c2278e8610b6e7782c48496e77958f3cf5a2eb94d755b81071e1893ae3be935dac9dde30ec60ed50db1e36f96b643db274d5f788c9c9f6ce070336e781d28ed99e813f3e692e4d0a1fbdd6cd1f26bffa30c1e73504deaf8ef97c3d34be470a5989864f3d98d593078c481d1dbaafb7c154f1e1f70f0734e1a2696f882c71b0cb96f7d5a75c2698e1b922e55366e4dc1a30d5cf494d2cad53668d058c1830d9ac5fc1a4226e3835482c71a8e7b13736c68aad0c678a8c1e851dbe0f2193c7be391864eb69c72fe7e678ffa030d6a92429574827b8eb939c339a6c4b4daa525ff38dc060e6a6ce161066caf476c335450f994e1faac94e6277d8ef43668d0a0c1830cccdc96bc7ffeff92338682d5d749ee7be11b13c3499a0c5d52f0ac50d50d1c6c19fb08c35125e512bf23d35609860a5af000835e1bf6dd15eaa5ce2f24c45efac73c9eab752f909db26cba2e78a9e7e24ea5f34d9a0e3cb8502c295e56aa8d75cd630b68b4ccb40a3b2945c9430b776a55f579ef9185448bafb9c2e4246e4f36c2a8a1831b5bc36fd4c041468d143cb040bccc796e8d785dcbe30aa906cf99c49c7e58a14f52e85509bf9b6e03c1a30a986852cdc54691cbd90868d0a8f1a0c22e7d9b647de557330b50e03185e432f9723db7d3461f5238442b25393269755751f87373924b9e0a145e8ffba49fc34fe8c3de87137895b8b87cc184b9cfa309497256cc9ee52e554699b069be24f9a75b476e3696c079672a4b622765e84aa8aeadbc2e7892b09ef6d87f2c794cd60712e8e990e1545ef3e8477054d4d75ac34f760f8e8711f892d4932465621a0b9111a7cb4a39a1323a5e71926437394a345e9e6ad0e18a5678a2b525490cd7b1abf740072b928412e5c3fd0995ddb30acf54cbe5ebf3ec2fa40af44f663ca5cc96fa549c26c5ca9cfca9e72bb4810e54a8a9f7c4312d217bcc5314d333db751f961f7698a2f23519cd34be7549ce6000133a4a719bcb49f3d353b92d292ebff93ad0318a46cf2ac6287a6d53768822b1356f787d4f22f293d1118ad54e667366b2d1010a7a6ed3eb7a7ed7f73fb189c1c46a37c790d1f7041d1927c473f892f44eb8599ed22594568a73c29c67d7621bceecddc46bf3a929b49a30fedc4f68fee9707a268a6a61a4bc5cd63dc784153bc6a764fc126634bf8de2294e4e5a428f2b556252fe1faf129f6be7fa5c0e25feac9fd4453a935025634a93caa4b48e24fc78f213a9155172249428b9bc820809c7a44e19db7b44ef92c12a87da11e5e98e0e17ea461c34ab7ecc9ec9d3cc8ce8afa2f53d851791dc51fd4493a02b1f459817523b5abeada913c164e731e1241711e615d1981fe2dfca9a2fbd1a22394ccabb2b16c21013a16653532124c4196d378b6cef576510274136ffab8b4f452a08fb2d443ec67d0b4f209455cdb7613ee99980f844c33b6d93c9b9fd8134593e78949824e9c40f875aa7b534dbedf48136fdec71c345c6c287a2cec97aae96e48a720f666fcc641dc674f37af05737d8e807f370ccfda1b44dc4c3e59f1f932396cec33b589b529d31496515433b1426c4d96cfe8f4b5887d33eaddeb86f3e3974a8a34faaf41e56639d03121fa6521a8fe1bd9343496343956b170763b40b5b7b2a9725070777531893a5f23259ee0d89de79b3b92a99749d1b125736964979f196356d30850f1f63af6c68beddbf2fb69e46cd1a28d97c46befeaf47a386e345776bde0dba9a4983a12a77fc731acf914143a7b9259d669c6cf719aad18dad922709729b194c3b3b6fe265c04a78b994c25946930c768c5bedd4bdf3958d01b1ccf41b24e7245b0c7745ad1e59933050eaaa9b4a0483963263cc5b291734c9172c317b5ecf2f66cf122f383e9f633a29ba4fdf854f93f019e6399ee8295ce8243fabd30adada295b2844b44e36b7b440c6f4349d2bdea45859382dac8d4509160e99b62544fb2fa5ea0abd54fcc9ce29dbd35660a72f9b468f67265a85928da89c581b3f27a9806487bfbbe0714e6e0acc05d1147a518714126c24742c6e4af2af3be88842994af2784f21952aff830e281027ca9af831ef78025a194ff64b9b0018a1c309ca758c5464dc5039273b9ad0c18424d30993f22671d330722c81f8f46f1afb9ada7d184a2854a527d3d42a1dc771818e24984bbc8adbfc31e30619387e031d48487386314f33ff6953560c0a741ce1fd91880cbe69b2f58ea30c0d7418a1a4595749fcf24f5fe236729c5186053a8ab0864afe5152c36db06654a083082531495cde3c5f72ba876066938fb4d8c97c7331cac891810e2198d6627fde29cd59d18e20109fc4d10aefab030849258b49db65f2f8451dd3ea2d8baabb770f5fd8e9225d729eeb3069048f5ea0e1b9c65f462f75c38b2be956de548fad551ebbb8a2eea6942755e3a18bc3688ad96378bbe8a50d7de4a2f19eaa28b936a87b0f5c24e6789876fc8afc718b2c79a50d936a52f09f047ec810413d6c51dde68aca38ddc04d4083c60d1cc73f6a91f6465d5ed8899f6579d022640c1af3c9278416488961f9ca4467b1c67cf94a726fd55b21b210012416b0784539ee79d6726833ad5c911c6761937ad48a2b93d499673e9ddc291056f4a2feb2392c34570a64150595cdf1495315c674aa1e3459e80e995474b9375af55f3f5f0c828a246966a5be249101e41497247adfa5e9b0b5e90b404c619e2494e593b1c8b24b29c5e1db969645eae53a148090a27c25cc857eb2b23e29096414095d1763196c656fae12c59d31d346cfdef51f8784e290f1bafee2cc778762000185b9e27e7677b9fc97b200e413ea746da5f1db24cff8038827922d33e74c41cf33a5a9139f69ce5d9337837002b2092cdc764e6f6dadc40907104d249e1e3e553bd826e94c606296c27e0a236dc2983894bb79cca5b1d9ee259c34d18b2657209658cc43e4475f89b42c57c52be973a74e892e6bb6e5543efbb5491c2693662da182480293bcbe82680793b5038944af9d56ce3abec694f2000289c2a6a5fba7cfddaa90479c2c6992a63479f5ac038823f692b2efe6587177e39046ec27c78a9a26c9887b4acc97c4ba642f9645a0277beaf93c6537a11b4014c1babbaf2635cbc9e38303928852cef09b39fa398020a20e71e7277932041502b5a8412bce9f9016a7284008f159dafdcf91b7bf181b350671d699c5ee70712aa5b6c310a304104120ef299d49ee61f95e110112086eaba693b47a39649e0910406c6288dcfb68fc97493b80fce1d5932c6c850606c40f6ad2136d54c23e247d521e3fc93d2d3605e18319d37a7bafbcc99f7f00b2073de421e93439e51425bf29b201c183a1648dbfbf30c003903b9c736e75ec8f1edebb1d52cf9da28a8c75481236cb895bb962799c0e59e8f4888a2beb1803990361c1e3d45ccedd4ecb618bb15ed163300e27b153844474bba7050207adca728ad84f0f6a027983a7da26e655e6ccafb8214912cd3f26614e9ab0da7099d54e795aea0c081b8ab74e3165b856ee3010206bd04afeac24ef9a264b11440dc963d147b33c9ea7c3b841c68ded0d40d2405aa76aaf244d0082863caaad411a809ce19416f45ac4e7a40f310031431992da6edfe42d91b21e4206c8186cebb4e1bf6290de4a0d8818125d56bb4b0806903070e2fb540c92a22dfb42c000f94279a1ba505cd0378ba69c53df85a62b806c21bd986a6fb4e2df665800d182eaa511755aa167395950672be4539746454e21806001720533cb4ce89f3387054800b1423a369a621493a4f8da04902a502159637378ac163285bfcb3a564796426e17f6a6d52858a659552532a5ab640e2050803ce1ab0caba949d6c61910271ce3fae5566c4c39be0d4813204ca82de36d9d6674057709dfb5d7e5ea0ad7a32a81fd533d317c2da7924930c6fcbd34594173ee90c0e5587cf3db8eb0fa9dd86e494393746284e40f13bf7b290299bd7d35931411ba9c625ab7d455f186607fc689afc76930110297efc2f64c0409426af197573ee2a434438060760f6a969320a2e95f70217652cce4b8bfbd2fccd123fb3fcf5bcc6b2fa89256b6c48af2f9125e247c8e697f3d8d392d1dbb384b4e5e483bab1c950e5dd0f2e9c41ad5ed0fa93b72c16564b2bc1caa64773b706187c72713ad63123f07a3e316b7adc64a79e5c131021a34ca18e33b6c410697e8d82d75d4a2cc97c19264a7fffc5f408b7385c74a6289155f9f8e599416cb4b924f6551aa1265726cb6c43413c522c1528ca35ea1f29b58072c36290ec0028123089442650107dfad92dc062c8022502e02156933729c81830001d001432001003023c719261840009c067b060d6eac180710400e1c8e801000e04f495a0d15c6e4dbd846963a83068d311c478d1b84716a9c30dacbc80102050c81566bc9b513db9dcd86105ec9cf49d35a5f46b6a180201c3e5acdbdee3475aa2800085fb0a0d16673bcce0c31c238836be0a8c82f9230ccb84118c717491866e0b091438c1a351010e985199e8317491866886123c7d6a88180c82e921a350e10d1451963e4c26f40c61863f8180688e0420765f4183e460122b748c230e39031c619356a2020628baa05d1c25861d453cc9b434c27099159c8a2fc14da396b0eb67e2c60d1a5e42fbaf18ebc22eb3acd952d476e1e5de1c6f8d3f84fb5c2b43393b369e878f964857ec244e5cff874f32abcefec361193882a5251abed5a64b92631d5082ace49c64646e3c78aef2996540daf1eb64a3534853968f4f446568af24931f26f6166831a214572852f3d8b98ed0f23a3706dd66f4c3af136daa2b03a653777e3814828f8b0494e29c5ce5c6e8e611150109b52b62d66f8cb67e4887ca28a2925e9cbdbc46c02114f147f27eb52e5b4942f158874a23359cb344ab4d7ccdaa04143239c28ed6f9b9c327b1ad76dd0a091914d54a6d3e1cae40fe6711b7c460e1a34725020a2894e7c2c2599bd31f9ae48263051976883594ad1a4762f899225aa1294988424faee8a3a13f124b81c890426e533296ab2d662c786db60511081c4236cdd76f9dc2ee2882b9dece59e3fd2887e93143784c4554a7236c208fb63bc799efb786917416d7694949373b4d6228a8824a22288687e7b3ac99fa9eedf21ead6135aeb73fb55c5109618364b86ddbb4ff28530deefece325612aa508a1c91ba236f37ec71a07517b0cb32fcb392a78362282403327837eeadc64171b1b8804e2be95ad64678900e20f59b01cc6c32789f8c199fc1b7119ffcf5d1f3eedd5ecf1bca3678af0a19bb5b839a4b9873f7ad0db0ea31ef260b88a2f267c46d87df09064272639947e3ea1a4ef60873ad0e128f2298a6529f1d099831c164d694becf98ce676400234c0e12188c4010e89de6ed67862fe289f0e44de60875ef5f470b2f61e379c2f69e645bc8c56d6067c2fa5937dfa0e138cb0c13895dc6c25165903a9210d8486c8192a628632d87329bb09f7a7f769329cd4a3df26b39881838c1c913194dd4ccc9ac5124318280206ef6ceb53c61287c817ec1c2f6ad72f42f28343c40ba709237a93267c5eda85af2bc5cdf868e32f45b8f06a063f29670bdac5a429e7def3f92007225ae0d4c4948a7b6662362359486a5bf3e40ff5151d2c982b76bb87c944aeb066bbcd293bc98b3e6205f77e3454599f9fe045aa80fa6f86fa4ae1c3d30815cef9e5be96e66e3786139129246d8594bf9770994ac110715225f554ce256d9811468d00ac2212053f9cec7dbf1e359f5c040a98ac9bbac7ff3be1137942ee1e4bdc4c594389bf130e9e96c455b619449aa009a51a66c2af989832c1d553df38b1224b20ca4b9af831e924d288129a7af3cd14522afc154982ae75a9a4f57d77759140c6fd283932ee5fa5c811f8507a62b96a1b11daaf2d5aecfe1a448a60b9d9ec9cf4c6d8c973c34f702244a8e4fb924eecca4c114686101102ae7a29336b125c43c2402408d56a64ea8dceafe34780b05fdcce296b49da4c7e51458f7ec9b8f645df06c4179a7912be2d724ce83ca417c48b2a2426f6c31b80354076a10bbc36967df654e2dd950b5cbc412a09256ccaa50f728b34d7f64e995cc9dc93c00520b6d0c64ed670558266abb56844c20a852aa833976120864110055110832008629f3543135080b840180c46c3012d91663f13c0c0ca42d170280e8a420181300c463110053110835010c3401cc44044e224b3ac1bd1a3b4bb7862d3e55c44ae5e0b5dc3629e52e2d6b0480673e51de4bcc7f666fe27e6eb55dbcbbec433741adecc82357ed3a223bb8e58837bad264dc261d956e063aeb42b33186f49fda99e4347facc4d80688ec7d7458350310a38ffc72578f8e1a0ef2195131f5a30d5d47effc3644ac31b6eb58195ad1185a9755032ce6b0f7bfc4854445acc262d27c52b133f126f022dbade01c257af5fe2a1a8cc3963f8661b97c2c1e868121a49cf74f8b54b91cb24ab63361549521f874232b81958359b539d7e772b98b28420ebb1fa2c423c16803213309f88fc647f2a3b8154170f2a6bde166f60b5c6e0d7d078a82c206352e9ad3ef357e30620b69d274447210d9e71a495fbb9e33749f275ff9345652e9715cfeaeb2ace2200010b6c05db6fd8ae90e95955d3334adeca76c4e7e65b46071f245bfb96df60b37ec7be078000c94aa8fdd7f8be270c5706361a33694296fbf49bd35abf59792d843953325e5d9558a47384f12856efb4e0eddf5be58b5200a88bfac9959c89da14da347287413453eca907e02d294763cda4b3f4439991806b804917db384ed08c1534196cead8e94ccd788d7c53562d7267baadbc3a9bc2083a3764b6d3a2e78e834b0b95038fca587ad1546943e04591197967abd948364862b0603452052202ebe8034e11035397cae42c8ffc55134e86663f6c94b1264cb5b5ecdac72076a7ed829a6c9e88516cbb02f0e2f41ee4b8451ecf9ce1b08f7bfd800c0dbe61b24700258c1fd964aa2df4af91eb3e1a44f5549db0730eedd8514a63e1b77272ddc9f9b0728c8c0122bd44579c7e16d050c109419a43b709276f0374c13870d20ebd2dff536c312ed182d10187fa74f71b1fca900372737603b03f8bb970c899cd1ac2de8c816155aa74143ded8841f8e4814dd4009b9bc0ad064677bb5d6f1af9583d9f4646c7512eeb5ef04126125aeae72875b78568bb021699c7f4594c2fd158c500174dea61ee981d689efc28037aa9fe89bb68517ed26a484c604edc3519d115193796ba6099036accdbf1894eb8720b8beb56c4f7ee80ba25d6c950c9cfc428f2a56ac3e28cbf8c385342497225bf59f88c3b54cb94ac7f33121a8a3ed55792b259084d9829e9e7a42f80eecc23231789c8ee41778331403a55bbd137e5a02bfa7d9f3b7ecd50e1ec4341fed85b965bb5bb86b1cfadda7922a51c38b01feb6397eacc2771750ac086cd1daca1c0ee53a4e4b888bc2a114b5c34fa4de42db36e5366854bd99f090b450bd92a6e42e61ae312707d17009e025370dd58237a87c6cb44a338b35da5a2e0e2543c8633ed395b0867f7bc014057317047e6cc792d00a59e92d9b100fcd73f04e9ddaf4391a45e3d44f9ebb03bd9d783f2935ad1d78c2738e1c668ad1d99b0bafc8f29eea804f90ee37abde857561e150216e38775e961f24914135c6e2a5deb43e264ffc5b994b40b35fcace963c0a63a47af32c683c9a621143a94d9a36875526f79e59ecabcc9dffe528fb76300997ae1464eb586e179546b54189fc8e2e14085208dfb6672507c23514208bdfdeb70ef3fb22941d049a23be02c96c23a7788e58d00a00227c026ffa24d6629ce3d620d2b07be1c609a5fc1a8d4963701592f2382f93e27111304a9e385354bfd026ea5bc45a63f1685649531398964f5efe05bc1062084b8f6911521c8d7cdaf473f847c0677191b55ca7059d4ed8799f96d3c9faa13ccbc9d93661da50ae99bd93e3c57cb21f4b26d58788cc4515fa6134af11a2b29efbcd5c0b33b29cf4e65c09526fff27f6882d1cfcc1124d0df15737a85a09623bd4594795b6aef8a370f5e1ca16da384cea5dc3e295d7c27608332b7984139a48d1dc88f54bed80e45b9c4c50a40b030e937883c5aaac241d11205e2fa5d9c1d29ffe37a2cae7fddc58c73ef5d530c32606cd21dbefedbdf774d68d6d9b8ededd24887cc44588b591364a605116c21ee81652de57834ddf864949b3725a51192e530ebee788de475586014797b51c45e59c15d761133a9abe65b3ae5e07c04254cf62d8d93aef9c1d6d517a4b379b8624d9343e6f5ef8455344ea09c81f2b3735434220d0a6211843de10ed8f247d4b539585a06d396dca98d2f11619bfa94264d182c0020b7f726897b9f98c5c49adf0cfef1926e23cddabc2a7f69eb3273edb31eb1d3593b4de0a33b7ba01b45372a2685be4afa4fef228c9c9e2b3fbbbba8d5519ad108c6d21d25a133f1059cb68be3fa714e6b26655df3bdb0ea85ad4b308cc07ae9057fc0285e05f513366081247a71dd9dc6dd28bd78c3873e92161e0f1797a2934e8b36e93ce213fc760d03e876646a252ecade956b8f023afea30b608be4f2909af8655e8f4ddbbdeb919823597a4a43a0093e4efcb9cea82f4dd08c77f57c27989a08ad507d8a480b09ee37d9443008d4836a7b887beab566d3a080dfa0f2f0b2265957553e6f9327a29b577e907b80e59e9ecb7deb6b27655b243c2b301723d728fa7546426ee7a65e35081c7b68daeedb32802a5b9df058f058d7efd209e8a50b6268dfcb138de5c324c65baa14e425d534705f885c1c9f2eef6eccdae34f84f48e4d58f6d69a4134c619c8dcb9bad4c51a88f269275b462c2867b4362204af1c9241b11cc1d6afb36230df62eea6e82095b5fbbe4fb708ec5f81833a0981f3e384a1837d01ab3f5844a043a5b4e8e2bf3a3dd40553cc1c0b0a0da81cab1a7fcf56e3a87150eb664ac5b4b58a36f76a53933c32fb1a654c2236395b7f753d3c8e4fd2072c8f0f1987de535083774c10d5038ca0d50f6049c8690bad5853ec4bcd90227d88db44fde2996570e5936415923a4cbd2140e8ea99efffd48ced8e8bcbd5c77cf1266d799b7c15654f131d6937ed9351503f1c338921b0f8d53616c611f8fa71a087d18e8ebcd389884f36b17194f6ee7743dca03eb195223b90ad124e0abcf8b6ca6fd0a93f5b06b6a0f040b0ec74a7808c417431d0abc141ca159c35a338971dbcfb716c9457a2bf751535f7f0c3adaed15cd0adc31696d55caebfd603cd7fa15daeb07eed15b9f867c7980d49d9c216760de9dcca87b3f9b7c3d5e6d1cde609ad521baed2abc0b70f9188749d70fc04e22649a24577784e524704f3446a5e8d9219fc412029152cae13ee4b81f62c2f396ac8ea99594515d5c4f0f786f1cdf9d4df6376354f416ca32dacc510514c2a22923be7ddf7b0d579cfc4d8b1a53440312f4e3bc62a1110b1775121cb50df773a58238510dd4ff1ad27956d272624d6223dd2c1c9b3bd0f038971b0ba84b08f1a2550743406af8812b28b770ebb9bdfd5fbbef8d5afffda77fe5358f670e8dc3ba342bd43e164464155dd2bfbebdf7ffebbfffa5752effe3a18a850a0622a4855e6e4317e0a4edaa639cd299f1ed359ff84331b1f09250f854e75676486b4b154be20cf78f9f35df963bffde59fdcf08dd3b5e154a4be0c47435fb295c35cce65ee9d7747b76198475df03405e848189413f80695ebfb2f5109877604de82a23d6ce73a6bb6abf718ced8184ed4173d8d6471d69a852216c4fdc95e5372f0ef4a5198fbd7e76e6c69afbb94bc0ef54e5a9335c12bc271c208fb1bd8ca1005e8ec51a13e203744af8871daece8b57f2cd385cd83edaab80e9916b897fa9d9ac5e7142376cf8c48cdcb4a77ed6fab607e605c6229164fe82415a5ace5a5c9135cc0d0533559e606cda733cf2596e8f964374d6f16c853dddc583236b6e359829ffe8b513e2ff7cc18a08e669e97f892f1067762f40cfa711673a64f2695791917f0e13bf2e579bdf6bb87fac2caaa2b8438eb64f9e54a2e401d2983b868e503ca5e8239809a7fb12e3fa471ac7cb72a5f60de7d160d84402b0c2c02c6a01a4290e72bf6b8c22fa3cb6a394ddde3cb792c6428a21962b7c62485e20b577c4762781e203782f14a65b41008d1a81bd63db67ef3e01983d7a5b06908b58f0e365ff6001b796498fda6b9e7929da8ce0e9970de7a3b2a33c4ad95def7b9ad20abc0eb29c68493c5e663ad0562c9845af588d86dbcd13218c4c0a552b4c2fd2f1ca3efc9e2568f483dccb91c2c1d04e8279f4528daa56656e3cf687393ac9a0289685cf39568b5ba31390b885867f312b5747e98651bd9f7f8af63eb63397f7f8f88a0605695a43afbda70c218b08695385d4dde3db5e55917a68d8d16e09282191e46252bac10fa8ad6b590ae1f42ffb00f6b4cbc3f291eacf537c42c4283652d1fba90c71fd96c6a09799204144865866368b595c3063871677beaaa8651325c219a224c071e3ca901daed028f547e8dffdf6d8c637c2058db85c87034bfe1bdd1be75d9c964949a25c3f05ceb6023d72dd2496a09a08ba7b1d2331a2ee5f5cc7324bf3b79e7e254102157b6639982ccb17f823f154574594f4c3330244c38ff78dda9a1c5f0cc2d36fb1fbc5da228532d67ce05b0b0c80e8609e33b09f48b6002c88189c1836c3285c949809076ea8690a106aa7e9716b1269cfbb6bfcf210b7547ad0a99237b6bf37228e586c3f80ad3f8eb7f91cc6529b5ea5d092c15f0ed43ecdd78ce3e0f5aad7172ee2d4a3b65cff321b28a1b63c97ea6fd2a52c6176059f448f10bd1c3e24b277190d993e36555b4a7c32a7770e80cac33d96d64055b941856cac552f25bf8ec695ef2fd05a93382a9fbece87ec3f4be21e0344235f79c33466a2c77f045b95bea6ca690240eb8bf0f89e9b426b719c29e599f283c0824c9c3f331b509906c5770ec4dd2a81c493647a8b0492066d8f5f8f3ebf9859aad890e5ec20708657a8299955afc5d9d87ece8072f4e0fc3c80822af533492ab56454c01ad0ea9071b6386fc8b3013944934434427eab886ede78d9a2aef1134d175822a7cb178b710e57b2a6110584db2ee4e0dc445594b5f2c153a5a820c8533c70fc4ffbca131bc08e30b21cce1102868f647092eca610529e6090a03b1c74e475c7db706b78634e1c9c7984b2ff55c0595226fa27f2be5342ae7bf13666c4e59a2a9c86954862d7b3bc60d6b89debaf0db8a4f38f1f9ab63f2dc69e88235eb22125dce3b73b9691278784b70a7a5a7adc56f89c8bf887676ef09cae8279d12a432cf1a0e9df6ba903e1dfd291746aeec5df864fbdaf006ad580003952ddd4220e08c26eab5516f596bc1e9c66bc628368e23ea3498e310d0b6cec4b04f386ab628363726e68c4a669a860ec69ad2bc23150447debdd3849e58067ca1cbe04318b4735ef31f0289df26b03956e335" + "raw": { + "top": { + "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0xe9030000", + "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", + "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x1010b8483205ff2e3dd48d4d4ec691d40d176926a9371c86ba497128450cdb7a404ea63b50c3023d2eedb6796866581f3260d1f6fca2c08399d3889ff6cd904220667c31d014a1f5ed7bc867583d264062d3c7b15dcf14d487b976cb15292d204cc42c67a21ef4329adcf99c421b72d95e4b5a90e24beb0a9b1c922a33a3b45244", + "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x00a0acb9030000000000000000000000", + "0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da92db362cd71122f9b5aa50a90539ae9294ea63b50c3023d2eedb6796866581f3260d1f6fca2c08399d3889ff6cd904220": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da969add5569b86e6a8960dba59f16ed5f3667c31d014a1f5ed7bc867583d264062d3c7b15dcf14d487b976cb15292d204c": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de4784f2786aab645a9a060c6c97877310b8483205ff2e3dd48d4d4ec691d40d176926a9371c86ba497128450cdb7a40": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9fd8ed2cc49c451026b79bc1ddc510b6ec42c67a21ef4329adcf99c421b72d95e4b5a90e24beb0a9b1c922a33a3b45244": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x29912c636f6c6c65637469766573", + "0x3a63": "0x", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd005844d8023a5443ab5620d0ba4a075a9f151f05dd81c3978c0677fad5133d27a7814bf49e9d61daa9fabb0e7c6c761c13f4eed9b4fbbffb2c93b4b961bacff04e6f9db0e7fce82bd44b87e0b37d1765514949232458fb7b6f42e4de32c99452cd0bbb09970a5d74aad0a9a273858e153a5f74b8e880a143039d2d749cd06942e7091d2674b2e85c898511f3a233a593450c8b8e94ce173134b1333951724c104b236704392488bd11bb41ec2ae646ac8d181b3133b135626ac4ac626562646268c4c6c4cec889cad12127871c1c729ce4dc90d32487490e54ce921c253949724490d3430e929c233936e4d490c343ce0e3921c8f921162606264646ac2a36464c8c980d62596235884dc5bac460107b416c4a2c04311c70d0e09cc10983c305ce163853e02481b3040e0c705c8023050e11b0387092e0d48063038e12581b30366066606be890010b032303060646051b03530386066c0b2c0b18169817b02bb02f6034809900f6034c08d80960516050604f6040c04a00d30176032c0758131c305e66bcaa5e6fbccebcc8e0a0f12ae355e585c6cbcaab8ad7d52bcc2b06af285e53bca07849f1bac1cb8957921712171b2e33ae355c6ab8d27055b96ce0c2c295c695c54586ab8b8b8bab8aeb0dd7942b0cd710ae285c317041e192c2f5844b062e290084c0645869260da6151ee312e265c34b87570e374e806440344027e00d2e282c38624aeca860470a48065886978677860d0e2011e010ad273d4ef41c61e325968567c6860bbfc24ae3e68c24e2e60d100a59826d0a1533a5f8526083022f0ccfca13c37b80c1e1a1c12a9827b891ba89c14c62270cd814ec0bac0c8e414d152e12bc6aa8a102bdc0ac280a280d6e9a68219a88cf0ceb0b96172e275c4d7c3f7c3e7c623ea88fc9b7e46bf229f99c7c377c636a588033e635b573a526096fccc7c407859760281809568289e026780a8e17dc0266011fc1427863f0101e158c08d612638265e051b02c312a5e81eb3013a34609cf6116c60303220195f0131f153088591c332170c8dc488133c543c02e6018c82a66542c319c093bc126988d5133a5e608af8c1919ee04070997c00bd39384a7702898168e438d0b6a5ef08a83bbf850e037300a6a5a30bbc22f984dd5185183044f94efe04d6627e009014bcd58c05138053323680fde971692d691960dad12b46a60c50172692581598925a1a3050b0a568d6503ab069a86c6e1dae2e6c9cd911b263750373fdce07063829b206e4a7003e586043740dc8ce0e6861b1d6e94dcf0004a7113821b24373bdcf870e3e4a6879b26e014a01428033006374b6e72b84972137523021b343670d89c6135792df182c14b89d70b5e2e7825f19af242e2d582d7112f235e2c78ade0a58297945711af14bc50f022e235c44b88d7095e516223c08192637096805074045c19ee0c6e0c8706fd8123c3b1417de0acb8366265bcb27066e810db1307c3bf3817700ad804988497c085f020a818d40c3a066b0c1c2158606ed2b890b86a140d7ac6fc610e319f4818482a72896f071c1e3e1eb62536273626641152ca26033a45bda059be223e2c1e1b5f163565d48ca909e32a83ebd223c69706c74a0fb165d9b6e0f4106bc213e355b1117c028e0296060c05385fb014ac2fb120c02e5b148f8c0e16130dd6191d1bcc32f20699837432c9380f128759141717134b4d2dc6055c4279d0d9a2e3050e125e991d11b81a738aa7c60d14730c98e4260a0ec25b631686c3c05fe0556225e0243c32e418b20c9c2a3a586240c076c0618347873e01e8835422f6c43383e585d5a5a7065618302c2415a721c5708d000483f5065bc930180de9a59580506417161a2ec36a301ccc0417315b308fd8aa6021008ff89289c40d952dcc14c35470da904c7804740a4d226605ce1157028b9a67dc3cc140b0148f8b6ce275016d006bd8c8987de1798981b1951123410c0a9360013c14a0420a46094040253a80015e47041064c2082e2fd38d8eeb72f785d512a9880f0e1c0df181f4c2d151c712c812d2d1516b86a9f1233f8e84b4b0c443494908029a7e20292909410000dc862da294e4a30909c81112520b20780d2ba485a5a4a30e3021c540e42869486d5a4282a1033e1ef05e5ba41f4b42968e7c1c250da9483f968438a0692906213f7ed41e990688901f48403a90716c910e2005392a52a403482b2c09492a52044902a1846367481a529990823009b1000ba144b3484d3e802429f990e1082906a41820300120482eb8e06302009067b648901f482ffc78638b342d213121bdb094f4f2064b492df0c8abfd9154642989a9c908d2510794860cf171c4840444292986a2203f842815cda41b0bc3918f261f407c342135e046b6e18124251f494d494b4938928d0df2438812078e909a62f8816404c925cd2c1293100478728d2d8294d494c424e485a6187cbca41abb2424a9c907530c408e9a842815394a1a527d30c5507196919438e0a3692986168e9a7e20312501594a3a3ad2894d275c142b4d9ed47dea56aa56abfc2475b67935af7808738e0029a544400264021020a54400a53953f62d9a73b666d3288d79a240dde76477a734a7ce94a9531aa5514a27754aeb3951604add9d2953673a9d3a6d4ea693a9bb333375ea3ee59ccc3d594e9d67fbec5dbabbbbcca2edb3d54ca9fc80d256cb5b939dd6f8646e4a27339d9252cad475ccb93cddbbf68e9b93762d9fd27d6bb5b8065b2d564dd38e35e7c69a4e67bb579e9432a59469134daf716fb9b740e0d6ec11da9d29059a937bce964eddb935d9b9bbdba7b733738b9d76bbd3397d8630db9967f39ceeeddc92cc9272b76ce6edd9744a2a67cfdea694cea52da6eedc6ab950c7ee0e76ab6b58ade6c056d7757436e7d39936a5216dcd39a9942c4aa9a4947600034cf9416bca16a535d37dce59809d947e925267dab2a7f40fba5948484808047db27bcf5dcf73e79d4e1746009d393d97ce5232b3f4c9debbdc726eb5585d63d3ddf29ed2bd351b9ccc94e63e5b73720ef7d96a7d9e3bbbefb6cbbb2d4f4a5160ca949d4e14a6ef000104f7392953e78fbd1c3c9e730fbb4f9e01b45c870e771deb3ba72f77d4d979bbe93d999777636fa7b435e49aee1fbb33fd5ad6b45a2daed5cd93993de6cec1cc3448b6fb74973d5b3d73f8746ff756cb855ace519fb30329a5d36b9e3e5db6eceee63866f656abd56acd56b7d7d4744d4db773dc9cad5677f79c94ced9ad39bbc535d73d7db67c7e1f6d9a4f8ee338a639d8d963f779c23481190808885d0025903029a5bdec4074fa0c726766a7ee943af36cb5b85b5cabd5ea39674b3ac264e600b83b7b1c737ff001f5e9be5f0f33730ef7c9ec72669e944673ba747d7a7bbb7f9e3bacd50cd422b8b38bd0dd72e6783965a6cc0c007739cd7d99ba7308ad9f6db578d23c97b3e7f439198496b77c4e77a6ceb5fbfa3acf769fdc07d30573a61eb88f334f760ebccfb9e5eec5a84f67f61ccc2e864d29a573ba4fca94dda7b333bbb3cf9deeb3a7773d9bebd9edd3ddbdf329e974caeebeeb3d60f474f91e23484096928e96927cbcf0a3851684880f0489090908939023a1134a404a626a0a6161e0250189a9852326214d3e7e085152f2318321a969290626b1a785a6187a905e386a5a4a621a72f4a348120c3310603adf4e901f3e38a0a42424840e7638e080039dd9ac5b1292d4f4c34791251f4c4d474d4930c020849623f6f0c09690860cf1313341a8c78890199a38103aa184998e1248382a0129880f250e1cb9b094f442111f2f3c920c484a47467cc0d001cf92e08210a5231796925c704188928e009494928204ed140141674b68122284265b127c2031e52005396a3282b424424e13920b20c49684224d45928c208580b32518496a01896948108cc90792d28f2324177c3009692a72044429e9851f474d4a31f8680109c84fd7c4e4a3a90808259080d4e483096909c905a6221eb8b6042048458a20310d8141c88f2326241984fc40623af25104c80fa4231282089d50c2901f484586b6177e34f9e0c0d10b459296925aa0c9b084246f9684a32521494598906438ea400b494c48321c0d8084134e280108d29190a6211d60fa71d4640429870c4b48f2b5dd0126213020c1b0c9b0842443f8a668777ae2a493f758cee969ce27a7eeb1ad1eebb4393d6d4e4e4f4f9cd3d313e74fd4c9699ff8699d9e640f272727d9e349f670e21e4fecc43dd6c9e9c9493a3939790f2776ea1e4eece4e4247bac9353f7787262a727d9639f688f7d62f5d8a727ae87133f710f27767aea1ebbb3c713778f7dda7a3cf1f6d8eef1c44f4f4fb2c73e3d3d3d798f7de21e4ffcc43d8c641bbcbb0c43111f1b2fd4f9ae24db29d24da4352d0b907fa44dda3a95b96c6349465a8db22a7f5cabeaff821ce2de457e52e58f4a6c65c603b95655c7ae3d6171748aaafc1c073832d4c856d5ddeb2e90ff7e10e8a2953fe35655175b89adaa7f87d4453002b28813bb4afec827ea0d0ac83f76adca5fab3a768d7a205b51b69256d22a09955bda66a87f7ff6cbe9fd5bfd657f77ffc7a35f8afe24999f38e8ef3d44bdeafe05e84edd9ff3e9cf4dfff929c03d9fcfef217b15ac3ecaaabbcf7054f22aaf87a3e7fcfb1971f3e7bf1f0f173d0ac264dc9e7bb3fd8b6e7dc6202a6912942b87e450a714c4c50b7f7fe677e1eecf48abf3e79c33a8ce2160f5194483aa8beed44fb465189c150d51d2aafa7315d24a5a59c9325feda3aad5a495b4e2acb66e3d4ab91f6975306028933ff2bb8ef3f65381bf7f863d7bcec96de43c82959bc50d89ece6228c1303e41f4139bd06509fdee4d5bd7d4ab73e1d535056e7bf7ea4b97e0cbaf951c756b9dfbee342ba541fed258eb420973806e9b811471dad07c591765fc312c7af23f8899e4cd6892d71f78752fabbac1f6595ee0feb29abc7d370fca6adce6d6ed5a3eae678da9cfc8993b30b314ca8d407aafc09127fe24fbef80fb46ea24be1c0b81497e24ffc09957a98ec9bbcceefad1bac3d5bdc4222ebd3f36f8ab26e4ad910eb475ae76c7230acd009acd56a35141d31ff6990f95c8f1be07cdaedf4a001e76fdd5e7e46dbf62960b9f2c7638a9ecf91863af7e3e175fa66e4dde4db6fa20c5ea7875ed7473af1d3d613889d7af9fd4800ef47134498c17c3a48fe6c21d1d2e607cdcfeb66d00c9a54d42955e77e9d3dbe4e75ec67cc6ebea4ac1fc1bab57e7708943f4db3cee7c480db6fdfda9eb53ddd7a547fc9c2cfba719b0c334888ed23ec49cfb7e72ddce68f3729cceac664cc6f05ea2db45374eb33f2144e047fdc61f36309353f86f0fdf8ddef0eadfca13f82756e3fca3a5fdc2130dc1ddecfa72bc4da1dad9fcf8b02037884a5a2725c1890e39ea84139f48020393484018c023be111e483a00d5823ca3e719475e208d631a8527113c7aee35ea9dbb742aeacd097367f881ca2fb335f3e3b61147647a0ffb26935d7aacadfddb10b3476a53f761dd94995ff0039c451f2473ea53b257f46d928abe34e55f99d1772e5a8ee653210dc9f91d6ee475a478eaa72a7a83306ef8961278ee206c23a8fe6c7e35bbcb4393f1e5eb7ef38deae592a8ebc11c975ba542c15536a9856c154557e4741708455f9a3570aaa01fa8fb47ae0828151efe9c956c5b15514b4a95334d234ba82bdf23aee15f5c0adda2aa6caa15b2190d6ed6da654f9ddc8d57f77c77c17474f03f47717e94e8f1b20a745dd7ebca9f23be9adfc8cbcc5d1c89491cd80fe44b243256eaaf67bd8b33a458e6a81e413359f01f233711d39aa2aa7cf6d1395b8a9eab4eee7fe2e2e7153d5668a64d2adcf08eedcfda638729defbb636b9275fed230c0f9fe44eddf0a5d37d11768fbed89db7c7371a4c18924f7f2e5d3c9cd2936c9ba719b0c126c32baf51957aa4ab069b06e3e8753369be148ab2c3b1c956095fbd9356d3e8723ac4e0ea708864424f744bd1c58e510287f3af7f663c1f9336a717caa9c387295356df4ea7c7077f8cff9de432f7fe44f715482d5f9e00c9b0d70fe08aa006b9afc29ca5e0e05c91ff9f2b7853871a4b59b1e17caf80b6a9a7c07805ed3e4f38f4155fe7eb469d2c30272e721d76e5bee1a177d81e613f538ebfcc016eed2e6fb67b4fdce4d1c69a8febc557e3cbcf61335d8425b95cf855b378e1395605ef79b22cf0afdf3a7b804ab2ef6af54dd1c4f93e70af89558b592aadafdb2ab9ddd4e8f1b20cf0afcf2e5f3fbcf979fd15c679e41b72e2a70a59254d559572a49545dd7137301e69c73fe7c6a66312477bb02b8df029eaa3f51b3f8c49c000a74db42ec1ecae7b05f8673861ebaf4e4a702577fef50b6d78eba6eb94a29ee7736449cea5e606786cedbb419cadf2f05aefd549b3b97fb19c9276a0f99b6108f8b2970f57791368d7f86417aae44224e957f94df2c6ed3b891ac10e8d5ab9dcd3625cb97ef7353a15f3e516f0bf1a4d02f5f6ecfef2d34ce0f22df7fdb9eb6501b6d5e256a96ea7605b0b3f14f82a42e8bb469fefe9d4d1111a7eaefcf4644b8bac8816e5b3eedf7df16f2fe8c5c3e7f0ad8caf5895903ddb6504b8faaee6f88640a0995fe9156295fca97522281aa524a29e5af8f8401cc912b47a2be85fafb692d347aed7e9f16e2da3670a9fd5e0fc9a2aea308b5eb38abfddb1f34a45b571870a56c00a2ae54ed4a0075a56a98aa1f51fff6fbde42dcd7fd8e0bb76e21d76e8540aedc4b8f3fa38d014fdc77fcf1d89e13c7edb7effae301d6edf7f3a6f9ef67349fa8b7df4f76fb51717caaf4b970a4dc13492e1cbd72bf9f11fd8e0bc70454eebbfd58e268a4b29e0bc795aadc6fe1b84d3332e4851e17a8dc8fdbb4f10195fb715380dcc2adac90884c9326cd55dd9e0b470254ff8e3d2ef46781ab1c0d8970751347ae9c4884d3a44993a68e4f756e4d92f9475865ca324db73941b4ba758901ae540d5275a475a56aa052f7bd1ee2a27d590bad54edaa6e1d67757f7d96a85b113ae4ca21576f21feddea2dd4bfdf71c71e7fd7def20d0f28244ddb2adfbf5f7e462deedef08072d2b4adfc1e6ed33ae4da1fff7e52f4fd8c68d37a6b875cf773c07214ddd6feede71ff7bbeddf97fd41568afbd40c818e9f43570d40a91a551dbdf6537e4a570e6dff8c60e51fc1eacc4064b79452ca5ac85f7e27e74b9f53f4906b8b63bf1c023b9bf519bff66f0bb5107fd8ad10b8ef4debe7cf68c56dda488db669fd447d02c8df2f6b211972055ba81fd6422ec3adfbf913355173c8b302adfcb4b2c8b3827c7ef92c367175f1a53872e527eaf56931c8d7cdf124999fe8b6aecf08d6fe6e5b68e497efbfd3e306c83f7ab5b769fe2580fc2cf00791e236cdc591d67d0eddaacae0b2618fc3ae525586edeba4b7bb837f944f5b68e42a7fbf932109a0fcfdfd54d8a68d5ef7a5489bb64fd49df43894f59361f3a8aa0c5ecdee60e25a257280cadfdf1f0b5eab557efe7880b5caefb5d0d6fefd7870adf213f5863e2d0601ebe67892dc61baed6e7f40fefd65751b00907f7f59dd0281fcfbcbeaf8b785c67d16b769fbfb4fcc38dd4ad5a2d4e5bad501f2ef2fab070c76228e255a3d597ac6e899eaa1d2f3440f133d2d98d9d053ebb18107cceccbec881918b3256649cca6ccc8cc5a3073c14c899d33b325b32333243334664cccc4cc68301b6246c4ccc90c87591bb31c78d0983199dd306b3283e23963a66456038f193c61666978c8e0896316c5836696c5ccca0c8e19169e333c543c69f058cdaaccaa6666cc42c09366569bedc0a3068f183c70f094e1196307cd2cc94e1c3c5f786aaf253b6eec70d9a1daf1b2d365478b9da91d2e7656b043829d1f74c0e88ca123860e954e183a5e74a4d009610755fbbbcd63855bb485aeba5df5d0367f55cd0a4a5e45d59e5477a8ca3f7251aa8b3d6e80524a1d3dca959534aaf273e1ca9fd19f6ca14d0553476944ed9f21b83b66b2e7c69c2fb5895237879364af69d26d95ca3ad6dd89287f2a6c5454fe294a55d6d134666f5b88bebf0fad855acf2f420bc9e737a185baf73c5184a6b542ea35ad5faca102f277d7deb69009efd300505f440dc0127d68dccf90e3880ca9db73bf1f0fb0528e2302562a8e4366c805e17efba8082dc4893c7f3f1536714511a40caafc320439c9553df9f0c5136d584146131e94180a62aa07294796b8720515212b422019830c2ae068e204234f3c2089c1161fa25460821a9890021d8e20c1151938944c11809136ae585245072492c8e282128cd0c240b1840b291c68f00609337481a2c5064feca0461041335029e34b1c265802c5ca04232839628583551146f46044003c29cf051e1015a0628225d41023268e24403833bc66d82c56664055a140c992232200a165872b6cf0218a1b006064ea8a2c4cc8e088114f3409c188074cdcd0851753392cf99161026d10d143933367a4e00b6d860754e17215458c183e34016186a71bd0105104972353cabcf1c1185692cce0055610c102280f6248c820e1860e6f90c1e233c39a71a40b1914c4808c1ab420c7134d6c50c20609d83862073188323e0c31954409c26011babc00f70a3154d49bba5798d145955566a1d11bc1ea5c5db63dd43f8a50f769fc19c98f0901cee79fb5d0e853c7292af9541ac70e3cad2fc89401bdae54133167c0565da92654dba48b26394b9da2a0091664409bba524da0d8c42648e000ab6a32c41a4d7ee8d280605da9264b3c28c01c2b2f09f87de9c264ca09d0ab2bc5848aee056057578a491346303162e510287ff899b968f4ea9c524c4e50e77bdf50341fd6435e34ff7747abfa301a2cca5a00baea4a31d1a11507f8428305a8f3a55302a460cc00845dd10203fc9ca802bf23bc1a18ab2b05f5436b0910a7ae14940d95bf5506f8d5955ac246e507e59017314b2d29a37a759755a2266a198221ac7ff8633a805c5da92561d4aeaed41231d587a7133fb1645d8122451b5d08d1c40830a27823ac229644d1a0066a8819a38319f60c1251643943860b17553830f28113b8c00625980a02aa4bcf0c4cc6c491e4cc1b4bca283333f224ca1448a8a2cec042043c46464852658c2ba60c21032d76664840185a5ca191aa0295864e1216f080450d2eba605181cc4806b264d1061333a4be3822270425620c31c6042b980195d80c4e362023831a7001a3a50b9c7e6ac205424cf1e26a8d358c2882d5116436d2adcfee0eaffba37fad56b3a188283604c83f9a50f7570ed1227e2a87b856abd5a08af8693de445fb4b4139546408328668a2862790a815bd6affd7fd7a7db8999be8564a91549ec8a8baef73e3a8532a9be9c6d1cddb7029abd579ee79b2d9f36579dbeabcafc66b6a6473cdaef7ade76db8355675bfabb1b1f1361c656dc3b1a9eafe8dcb5d2ed9ecda52f7a95469291da56b1d655555650b159ec2511c856b57bb45baacda2ae2b85295bba5749f9b6f9b6cdeb8a5749f73e39ce36433e773db388e5256cb5b2dd9dce2288bd56a759df7f9f7c9e6afd579def7d5d4d8800e82b219fc3caef1d8c6c66310f4f8c6f5f2d74b36bf5cdebebc856d38821b8b799b2373994c36cb6e3c0e5d1e87afaffbdd0b06f3381c83ea3ecea702d76d5a87e37118fb54e06e733c274736e7d01aba40dc365d36e3d01a2032ddfa8c5e54edef2498a6b5acaa2da916a87fbf07d0ed975be490ff166d5125550f715cfaa71f4cd5182b33f28a43537b7f47da43455399bc8eb487da5dc45dd30438fa545e9fa6f18efc955be48f147bdc001daa8e0e55d5cf51c9a12dea91b3aadd95bfb3b14a41d61a2640de2287ba48d66d9a17553787f320dee06b67d36fd401073d339e1d1d594e0c07f672dd8036359fd7b55894dba6cbe605dadf8f08a7a945c8276a5e5efe513624c5dd1ffefd5ad9899fbabb8b94521cf7e7fb8ffb1f0bfb41a694522e9be97685dc65d31685fe71bfeee3600176dd15b80659717984fda76616787b1647ea4fdb9d86ebce713f15bd6efff2168ebcfdd2794526af4db28500fd86071418f9fd748ef3b769eef37d36cddddfbf6bf6ea6210b08ae3e873db8f9472949b348c4efe8a23aceebb5600f6ef50612b114e53a97fc7210e16bd0b3482db8fd42b7dff8e869412f5e6321c95605bfc571cc1bae2c8cffda43f72cff173df9c7703b07ff4aa7caf85785f3e0d5788fbb139c4c102f4ca5f83f01335e7fccb62ba9fb435ba305c9a0775fab782d74dfc059a1fae531aadbae8687899793233f39c1b23516273c2861326bb6ddbe673dbb66dfba9c5b662d050b9051332bcba890ed534f9e014f5c0add2b17bf4993fa3ed25d7e23817b7906e5bd762cd9f3deaf6f3896437bdf9ed9bc873ce27164b333ac92f59e8e7ef3864d19b269be8a228fd7ed441c24f589d7aabc3fd282322c019a007ca88e4d005e48ffc4fe689a36c3b9628b505f42f85ae9ca864c5962a7f734783876f9300046063298c0d4a6d6ce49c73e3388ee366dd449a4d191a6d526143874d6e3e43af1d7bfeb1e02f7f0ba737f50a526ceada4f44b6336351c51866666c86a452b831a448994e4559ad8d4e3ae59c739b2de7dc441d330a1d3eeec34da7656ed6a3acaa582dfdea14bdf685616565c567ca584937984ddd44234d934f6b4b3d7097afd86ddb422559ddb6b96d1ced8a37cb642ea5ab9b2b8739bfa04bdbdeab1b0d3f9b6f4628b74d6ece8ddbbac16cefe1b6f1f6cccc2c829341b05bcf3f238ec5a2bfcddf9ea322f71dc782ff0cb9f7cf8893dc26ee96857f46fd735b17c7ad52fd69228c3eeeaee4b340ed537b721c37c57d9d9bce078d0ea4600775d4d1411dc1caf500ad97af430ef9d81df29ef5bb42fe43e49027726dfb8cbe1ab6ea9043bb3ab6f7a3ca3d7deee3f1b5fb8e6e5b27fa13c96ef3c6adaaf259e1b860aa7c1a8e6ec489f333eae77e9b9c8f4ff5a6b9b8ace66e406b66e41518d20c0d50f2ea4a5e815e9da2438135702887a21e7875559dd674a0544ba98c0abd96267ff4a9fee10a81ffb42e2f2a5f268774c81ff95447955bbfeba84e80ea3b05d236186d994ef102373700f9471d55caca89e37a41a334aaf90347154656799161fafdf90660d55215ba3a4579b540aea82b79b54eabaaaa73544cba6034546aa151b61fbd26e595ac925b56caa1aa64f3655256657594d54d56fd89541d1d6aabbb40a39107acfc19e5161a80a84e4394ea50c0918628dbb4298e343ca9fed2c35156d5f91d8e4a0e55fda7e89ccce24f467f0205553d8a133fb99c49d01ddbcf67ed0e96f705122541457405301f097d255fd46a39b5c26d0530a95357ff8ec512e756a777db26faa4e1ee09737a756e73c963277e9aee3574dbddb3bb7b4eafe3bcede322e8f33781afd56ab55a1115b9cf683a1ab65aab363c90fb2de45ad3b8f7df42dfb6d9ddb37f6e38d23a371cbdcef9d39bb63d8744e4f644adb4893e4546d2b40903ae715ce3b6722bb6aac1ba8b23adfacf64cbcc23acfab685a357ef24efeef6cd1db737c36e2eb7f49a5da0fe11567b6b7179db96fb11acce7a5e181b2bb44b1b6daa4d1dc159a7485b20f9366468eb14e6b0994615312805c15146e5104755c603b744a18202f21b20ff7e11d8a2953f23ad54b5dfbb8b38515a2521ad681da595a49254dc14124b37086c24d8a807aac066dd3759752703ba83f39b5b9fe218dc6ca6e598ba2fad786c55822ea9a04cdf685f716c0548a9d75e9359018ed4c6fbfa08cc46069bd97c2a70056f5c2fd7eb067cbd5eaf974e0dcc88915636c091d66eee9a6d1aaf08aeccc0f0b71b65c336badd70d634269c6be7dcf2371c5d68806b851727445289a8dd97906168c5891329209d9501f2afd7f1b76fb4e595714695d5b8e2b0a1f2aa42854ea12099ee96920a753137665cd6b45695358de3388ed20e8bce6bb55aadaef32648c49c40e14d89721205889c0d8c2b740af57e90f9151d2792cacc15b8c3d595729266cacff0784d36eba2e0a0c49d4c6d607854f4dc5085ca9a168bc56239393818413f23ba133c0b0b0f8a9055570a072c5e68440f8c076e417188c2a10a9d2f39b6df1728072e39089183131cac9a82e1e3048cac2be584caeb4a39b9f2b02b3cb8014d57570a8728603630dc890f3c0e55d8da710bbaae156290a83216771728f4056a4d05e52095039533a8d0ba52374cf1ddb13b56d6b4300c43518cfde081e7e3e3e3e38107340f84cf88eb5a2146892a6b1a081f11af207c4644384d652d503f089f0ab46f9f43ae1b12e134959fb640fd3bae31e04add0086b53be8ee5879e3354dd6b4159b04187816cfe29e454b992e5ddcc1c8e259ac68f12ccc5eb45861f6a2c50a73192b5eb460b1a2058b15cfa2c5b36c995826162ccc58269689058b4f2146e1593c8b7b162d65bc787107238b67b1a2c5b3307bd16285d98b162bcc65ac78d182c58a162c563c8b16cfb265629958b03063995826162c4e8567b9c18b96325acaf8cc32bdf02c65ca94914efcd49ec38630c24801ac3210a7e8767793bace488bae5b2eddfa8cae5a18709c532dd90a70e33aca6a75de576303deb85e309c58ce4ca6e3ed773b3cde4e95fce9ef6645301555ed2bab99d7e3f1169ee2a91e0e64b0cfc88a83fdae838f7d88c354e15681395c87e52af2a7a7c852cc45aaf6777533a505cfccf3c0c5fc15c151e44f3f47a99a54f20a19959caf089ec2537a38f8e0a683f7764e4daa0fbe2b10586eb0acf6596bec50d75867bad6b5497585e8311430874f0863ea38a9bac6b29a54e0543f03f1e4c977e5e381f779d5f2e41e388aa3aa52e87ac58fc75042f024959121563920171cfb8ae05a0800d0a28e93aaab12a64a1700d8ef446069e0025b80f4a052faf95e00f226d0b4a6f5ef54edef02e06d0b496702e8d0910022290634ad5f844f014debdf2ab5bf1bc19343735a2d4faafde5a149c53ffd63d7dd217f7f8ec1f2679c545d6b902cd00c8278be2268342912e134d5d504e4ef46f0180a18e44daa5ed2b5655981a9fd7d6487e6d4d83754593353b1ac6a7f57f2878b39257b4e7d24781c062ce14bf35d7d6776886535d6b08a2695fce18265c5b23292565d091e97010ac0db9106d5f51f9ff65d81e05704953f53df951c9a7413a73882558aa3acee7c29789d545b40fe7152e97c4578530230a14d38814ff084bc9d616a3fefd0a4da9ffef96587be2bf9d3df3ca37e575620fff85dd5fe8e67e6aa49cfb1040c186ac4972f32287cd7777cd7414f8b8e9432e92e3dc7777d9b316e8c0d47ba4b0e463d4f0b3fc1b902721d3dcfa3e4cf3e51cf97a785a32c178b725568d7baf13acfb94daaee04af3e2c9ee7320b9b2add6557f3b9bbfbac52e33519c751a92bb300f9b74f5ab9a785fba62b7d7a950b9d76bb3b5abeeb2ed6cb77dd65bfb78573eac929b9dfa6f102adb86dd25de67c89cdd1a5bbdcaa7ee678e01520bff45d9f724bdd9758a4cbbc294fcbb8dfadeffa16b4a3d33c3bdccddc9d474a7f39f3914137ceeadf7593d5490f043d97ebb56270532f983fa9fb7d0587ab52f73be6755f8e4d0d087a71e3c95c372f8f757060b170cee935d98e275f6e95e128adeabec402641e4955f77bd6e331071dc8f7e4f37695e1e873be8ff2e777329cd5eb7edbcbb0eb36c3916bc781e7614fd781e7e1c82b1ca03bf4c4cf6845cfc36f0599264d0e6fd3a4d9e694524a39e79452ce2dcce1815e80fcd3ddc519763e5e107f01f27b5d7cf0010820d0dc9d26bfa3f1ece8c8726238b097eb06b4a9f966cdc3820880200b0c0cc9df07e59014bf59782ccd35cc6d6e73cab748361fa172687611953ffd1ef26c51177959b6b7483e81dd4e5d38cefeaf762b999777ab1983d47d9cba329cb5c3b13b975740fefe8cf6e5f3c8c383797878ad56abd5fdadce2a79ac54dd91ebd5cb67df36357881e67c76aaf2999919062c738bce9d7fe57e7b0f4d994cfef47733a4c99f7e991c32a17ffafbbf1476aa14839ad6cf5a63b96b76aadcf721af7f7a360538ca6acb2111faa7bf694c689d7bf3e82fbdae946cd9060a4d9081f2d2250837b80c600a299498220656f0e8dce8d51d7554135ac89f0b5daa56abf95034ceeae653b75f39c4230495346590d00283a9221d75dbaa70b245dda6c805dccaebb2aed4122e606fa98243617984d15d55fef250ad55e5370fc92b7e8387baef9775e1f2cfc843cb3f2d19963e325546b73ee36b4a1590b93ab47d2c709508a709bb96ee6da11cd33ffd5eabe6033df093a2ac7275e3eeeefaeefa2efd399fe2785bd8edeee0a9bb63a74af92098e3b17607ad72777055d29773776c3bfcf7ca435e20fe2d9c5559e5fb0ad1974fd75ba1f972687b49af24fd8c5c945b9ad6cfc1014a33acaf6aa1312dd4fa7e69d5422eb6585f39ea2def991ddac02a3b9607b6108f3f5759a57c2a87b69c33c4a815c99f379f919caadbf7790d823657bca4bc9e70ed3a722f205e515e4480b0d76724c734addd5f86239b01e5134919ce7729ad9ad6b2aa69fdaecf486e59a0fede021ce555edefb6b4505745de6087a8bcda1d5bbbbb327653b57fc76e8b6ab33ffd72cbee586923d3503924aff6e78c77c4eb5a2cca7d35527c4d71e227771711ddfa8cdd14db80c5a8fddc16cac475e414beca22b765816a00abfa87bc7ff8b700476e4b6dabca6de16d59d34db1986ebb8dfce7affb86de4292fb8e86740559e75323ae27ad5aec8f523e4be96ef305e4f75d2abdfd561c3f70354a2c207fa8e45075bf3fa3fd76f7ada37c1c2c7865f37acdca2dadda3dca64b316029f433a058e146ca1910e6d5c832d24c5fe513e6d5a8760d39a3d1972f590b5407481f8e553af87c096adda519cfbd11d070b766ed16bda6ebf237fe49edb9e7b0ec26d2c5289e5084b17fd9dd1fcfdfed17b7f58d3fa3d6c1009d8fd596c096a34414192e7f6ddbff3b96fff514956b9a74b9ad67ecac9c095455f92d54d0ce2ef4bb21a44bed7348e7b49c7bdfce6ede78f4db3f615c871a20cb36e62902952b19554e138407efe52b0a98ba6ee839d444c95e6953536deb4fea1dba6b10805e47e8602fa6744e766b3cf2df3331a9079653b3a33733333bfac6a8f7294d2ed6a7681f63f2d6ca2c821d68f5c1529517ef4a8baa3cb9fbd85359515b6ace44f15192239825fc917b19e0b39294f68075559610b4d9fd0baaabcd10df49a6cce2d046be71e5b013214f0a6ee70535c95da4f39a9dacf45f5102745fef4d327fd4cde41852d34fdd3ad2b0e0e70b489aafd63ebaaf6db00d142a352540bf5d042dbf7db3cf18d4ed5515e49a92daba4b7855fe5a0b66ddba270f19a315b8d55eddf6aaa1e5043257fba73d2b4eea26a17d54175fbed3ef37315203f91e4d07f432569556734e4a22d7c55a2f63a28f9d33fa354f6b69690a8646a982b23350b428866466620000009331640302820120cc7237a202af20314800f70944e545026164623a118c86118c4400cc430c6108008300419641c6264360180381b45eca1e095fc8927e9af412af5625bc53816059fcb725559bcc2904e5bfaa2521c68ba2ae94bcfe067ee4c820f64d6d1e31607446acd0360794df23572b5192353a9bdf30af7540f389a1034250cf8a4f37e499709eb22cb633536f009c042ff6c043cb0128201b571d654b8e3b53a6da8a97cbcd4fe16d8fa21277cc899819a8220285a2f6bde2b48cb3bcd3d07c9a2e9b56ec09bb28cec8af1144acc58d42c7511c68e8840e9fa1f8672baeab351cee973fa0daf2ac9f0a22eb95010ea73e7f0f776e9d09174d6a25af5c6aa9bfeaca2b229f84e07952ebbd9fe5fc86774144aed8f9601d3232c267bc27241eb81278fd9a6dec4c4881f0f65b19c17c1b71d67279970f44341f8c44c75356a308b64da7b7107369d8254a5307f038f4644cc8cccc78240bfa1ca9fa2a3995b1eb8db5796567aa1db1b1b177ddce219e9b1db3af69f5d39a6f29dc5f6bb0d8f915a149a1f48099719e5518fea284fd4dd46da67ff14cca4527b9b8de8eb56b95fb549143de744d3a3a9dced50cc0e6a5c12b250a60202e0bb0059a5574f94f2c09eadf4fc84f587209a04798b73acb72bc0d18b4bf72609883b7df704933e17b92659ec2a27744d610c3f32bf7803c2b57e4419d8110e4b54b62c5ae94d2183ae48780e8a7058b19fad4d3f3f1bb25eddb585a216d63c4a8986bd2d45b3b7248a95a9e98f06e3e1bccbe3eb21d32489c1e6369fabeb6b4a5c8a1349cf075224af9c30965a7693c33f60ec98a7c19302715205782fdd39fd10131f907198bb2d5ea04822a77284f0a44d9126531a7f8303cfe53700e7f32fc18bcbc4e9459436a4014b4ca9b28fbf5ea3a15775ffe6036a99e5f01725653daf90fad96838bd5278739b7c501230868f995edc7d02c28a2db5c3846460c8e34f444c9df8ad25d5410152968805347e1bd35681758d86400e499d76e639b3def4bd214207c16ca9cb5f06e933bf0c66d10e261c6ebc4d9ce10dba04f069e39ce03c1f89c5eb159d841b8c896c91cb59d801b65f7e357a40f59aa823c9168732d0f11d22e52ac712873a88d512189c786227d82623a4882ca18aeb26fbc8861fb4a566c9cb05c8801188092e0fe102578817d2135988c39f185e8905d25428739851dea35e3647830d7d4300cb735692a19536c123f317bde7d9a9342b1db66067329961b9baa018b24683f0679faeaeaad7e49a1c4b574dd52b9f331a8a6aa11d0bcfc0c742779fa0e3856680e83d414fb9cf1064174ccb440e1fdb007f0e0ed0c22d8dcc99c5ada785c44db35dc4f728d4728e636f2dd7d1673471a3df16f0bd22cab55b19d86f0b15188a76dbd282a2c45b8f463b441361429d21a0acb44339e5f0270ace1c48a1d266b36303b853a015f4bc4b48f5a911a4b932c26b427220c25834fe5c7418f64b525f7a3cd126373c2bf7612ced6724563a3814851cc8b23a88067b19ec6f0b15088a766df982a6c45a8b861d441361a2ae21a0acb4433972f8270a8e1c4a516967b36203b829f035b4bc4aa0f2a911d2ba32c26b822a2d91a148ab5af4ab43b2f2924b43d4fea27ab2af230f0b516c546af8a82695a5762470ab2327eba4aa23934e28e6753119bdd163c48798009be4ef9c1b02a958fa0568df8a5ded06b3ef43b01c958e9e3b2d9fd1839d71eea3edc967318a70495102e4e2ca0728cc73f968ff71ccb05bb60dc3e9f4306a1bbc746218d0a89d8010b369ad34a01108de190dadfa2b246a74bdac52257579fa3ab6226c24c7f29e1be69926bacd4ef4ac41e9650f5e7db45077d0b1062f4d64e0701407e77316ae8204841c144232327a5283d5f8c530b66bb5c10cbedac3b656090db0cf2a2b9491165347a60f1921cbc7b9a362560a7f7ea989835e202ed4c49c55838d38d41ebeaa7d1fb08188f11783a8af1a2d757028c20b89804c7b5a908d815534ed131ce9a2d2583a9af1b2531ee54360da9ab04b9f0467047986c57d4e00f8920a68ac4483a4b48c09c9b89410004fd9537061f007da58568e4fae0ae9a905a74e1a14ac284bbc71297f165ae1ee4bc170d96381bb4df59922fbe735450b6d867dfed1cfd9c7c63cded7f6f548aab414cbe5ccfc5753b36499f2990b8f1a164dc30f9ac8a315da00bdaf3f368ee762aa520cc7ee549f8d05fbfbdc1fa5ae1ecbe6c1e36e69bd8d1ecbf283e21f55521f6fc3ef11fefa4b2dbbe0c3c805bbc5070272be5672f971c6e08754884aff3f8c7c233080add570b2d0040969f6d2759b3b52802925d5da40750ae04ee6868eb477626fa9e2e8e38ae58eb938d2a6c12a61a4b872f949d299f141710f1a62a2cb1d5ecacb20b0aaf6f91c002b4de1b54b612e9359d1025af0c9810ce56da523fbcedb9eb630a55d99b8140c89731929c6fd753a597dbb16665504d755eca86c10114bd0c9281d2b2d57b9380a54251c311659b3c67d2416313857cf5f44de444518435b3c868206a82c977146984a589541269d1ad9743098fa89fbf9474e65699161bf046b6549d2b3a81c4b5f7351341b11d85a8107767c7ba3c9a06745c5b2d1c127faad728c85b818e3028bc82c8a76eefe5c60788703d1eb89123789ed993242e179cd6637ed35c94f47dfc1532ee25e0e5e5fe8e9bafb7242662fe96a8d8c1a6f1d84d14f2d252261df16e8dec0d9f53b73cb05a29da9e9aa7a647cde4f4fd8de515d1fb902a6a4dff0cc8c749259ee159e18402a60c62a01e8e6a11ab7917b861be113f0c222f1ec1e9317a4af5aa73db23cfb9c13e0d1739bfc310842806e78d5a1a5c1dc05017a33f18633fb359a285d0c5cc8690ebb43740d6bd30398198053a8660515309afe0deeeb366f8b503b2095d171a01ce9e066049b0003d188a11837ed1a60995cd8ba78a63172b28938fd081bb27b002647c2c5e9250802923d06e5c6a832728dd32002a754418cd43f173d13e326748244b9c0e1faeb2634fd44f010bb37d18d24fd5af921e9e463b8aa8e64627fd177430a43cad526942f1854b95af0b8da812b9b3b2eaa91e5363980c0daeb24149fb015f79a6a7c448de466a45ecbaad48a420a745053b124ca5722e70c778e781c1b540e3b3e796fdffd66de3fe8d753e07a1c7feb52d1869e8c1bab1379cdaeae7f180dc2140d8cc78cf0b989534953edc20ed92801aea59a0f07b80a781e27ce79512e525354d539e9d3079a113dc1e05ad35c0807528d1b2a17a65d15d57b2141b257efe4e68256a73e19b01e01453aaaafc8741a183f329cb87302907a9115780ef0644331548b1046a44057d991d6786c7e3a5313c22bc3e47ba06784133f85819bcf6b3630cd54e82ca8105c869b85db87e7a8f71325ce83d465deda927f78491fc6b1ffec50774f0a252817de5ec20b0d224293511ec751ff6347a01b6619bcde9cf7072657e9c0a38f4139adf428ae9e6bad76e0d583307a2f09aa4b5a087baeb2b699240bf1d3c23858a289c833c26ebc9f38d5731bb61fb75f5a14db69b6f99f5aa6749ae2006575743eb8744fbbf0badf62a5f856593427d1069ea4cce7dd1da167f6c89be17b62b935f0e039dc3eb60854d55042857867560968430fbb36f9932ded93f55bd6fd00e1f8573d8af6206469e2ceb4fdc5d47ca3bc7148daf847249aca6281dd7836fd01ab902e92c48c2206fc888e38fea2f8a95086ad6251eb478e5ad058049f94df0651752dd004452055a29cd3ae3cb2f93216b7d08d212f48ce09911397ec07a782e8c8b58ced4c152422b548c1e49c24300b21b0ccf8854e7f703991496f2785af6ac06d0185d198be88cf0cfd9d732da93d0cb6ea7c06a802dd9d889fb80c7466f9c5d8c9a547a149b9d6a2cdd209237c6052be0ca715b8170d8a28137282ac72f2148b7219de1fee3e28ac7d5ad8e0516e3f72a659a313e963d3efe59d409908426b8b0cf40fda5b37f369dadc7b8f4ff59bce7672f6bcb86b85b5174245a8ec60ca2a74ead222f52914906d90d870860c56ef368841c5ae0cab5f273c8767486b83603c251d92a03818ab08c6edfb9e5ccab1c22ccafbe953ae988b6e01d7a884ac92f6ecc426eab2b49f3280848fe9ae1b7b4e251c8379e908ec38ca5c1fdaefa00d1eeea6396c5fc51aa042d9ceb1268b77264cba71dab64eb47b19661128b81396f502acff0107781bbe263cc4015e83a7c395c14d5cbe680f63ea480c2c2e95cce656fa519cbd5711196f8be522385843f173a8d18224bb4b8c2de45775f156ab0a88fb73730034361bed4103fde435dd46c26b4282495fcc7c1a7c06e52a1c25593d79d6980c07ddfb981d8795edde21f958e98d450e2174b4c3801bd924d7852cbb586307076a29ee268645526170709c52c54d0ea7094733c8d1078961afdb8deb8f8bacd10ef7f49de2feb74c7e8dd6073936c75fac95a2c5da108059e8a0c5b20ad4e827149e74b0938231b270ce9899971077c075940c6ae5788400c17d56333aa20b5eeef6f9c0823e40b10056b19e0ff0f45784450ebd25bc1361f6e0fa76d39521cc18e3a4dd60e6d1b24ea59c13b5845b4d52dc0aa9be62f2abffc1d05d150193a98559c6d2904e2377a22b9ce6db42da50682640e2e213050f1a371d0f2dd95d5c5bb4aa610d811a898b6001696d0914b425d32d49e8a4d9ec62feb6d89a05adf3c643bf1b94740253f45dd57909a5db71b5390e75d5ee9f6570dbe21fbcd147977701871f0a080f611784a6db6764f66a2b00332ea173362a70289cfceebfa4be6dbd6def6e4eb919831227997bd8ba44f370acdc5e53f951dfd30ec46f7f830983e6537d7cd6b0ecd77941c30c103a57995859b97d6b310b082ecee9e858038078230b4800b83635ce98205df8ea5286d037f6f896b2c7699e69c81a104f07d31189c4f5b8d6305d1d8d4ba72b9959115709ea7f80a8acbde05cfe052984ebf90ea17c507920b146185ca82c5abab68a4a880092a332a79017b1b5450b453df9cc4550620f91e6872994fd781cd84d2425107b7f6b234fad59419e9c008192a42c73ab145a271a1c86435c1511805eedb9b4f34f12612c2a6ae18b59e7ea26dc076c1e3b504ea8b568ba4ade91cf7aa9c147c458bb06432c507d8e41d3ee25ecff9b07b9554caea4624fb87a8543470d72ac2c079c0235007a6ad0a22725aadbb8406bff6ffdc46246ce62d51455c5455084f10c5a4e442b2687a2ba673b03bdf1c41a823c9d210f4bf09e16bc7582ce6524a18006f4d9c3dc355c9904d7a77c2716c6a7df9d1fe15db3cf84275cda6923b50842332ad8213a6d718a65b877d99744b3df423c1f630092d32fb0be69a21eabcd5e483bb449ad189cf79d04dc8133c14d5d219575ac5aa14e1d5ab773871e16358782aa63d9cf024195c96c096d66f710880670e016e19c049d16f4f29053361dbd5f26ca281e360742f572685ee3cac9f8e14f76c7f2fb16b6b90bbeb1bc6a48c88e675f15bec917bc5092a1b4d01eea0b63328017051c511681152258e737e20424b53dda9b0012e28e2edb7767fa9de29bb74acec2253d22d19eb8cbb1eb536c1512e04ff1f05948baab44adfd0fc7ee72b8f52837500d67da737223a92c63484a4e5e4e1e1812a78f9d5bf055ebfb400d5161f26e60ac81955ac0c6c21d0a4cf6d31088d1b9738099b08459e8bba7212c02e8fdcec6b499320b82474050f463cec74560327e4ef59b7507563af859eb2062c7236b8cf42af8c1bce7f16e709a3e42d6234352dfd9b6f5f58d3a9fb171bdbb8427ce81cc5a1774d3d7a01fdf068f8c5f713d411b08e2adf2185f4032966f600d91969f0f400a4c450fc240966f42ac9bc2b101970b74bd6e868019219e3d6a90c66dc888f2d1e08b9b1188ce385a312ee0916644e1dd1fb39ab78a8960866744a56aa108691b33214dd8e5cec4dda4824d14cfc6dc987d3eac4898e1c251efabb1fa19d812d926be5bec1c786ce65bb875a80e0525753b99733cf25f57134287593c1095e31610dc4cd22459d77c278a457e23083494ae318c1499d3127707d0daeaa890a7d174f0e57e80f20dca951cebbe1f6c0e823b2ac2541e1e232a33e45ecbbae8c82b10a3d761ea2dd1f12e32f8b534922d83172d945b0376ce32f705525c706ce70281fc8f8d72d5b449edf2fea405db0b7417802bf60c8483fa171fdefdf01fbca21d2edf811a7f689e012396f801724eb44e1d8348edc27eee4b514a00a92fd03f69ff1763d00a0d4a8afdcfce92a60916c8dbbaef0d3b6118da2554092cb52b130fe190dc1d539dff7e8817a4b21657571d78be7a785ee2b4e72b077a78a1ec9259625b732783869770e20627d4c0362ff78113a5815eaf6ae0b1aced869183cb18c49af3c1a15b1d3cc5b0c69ced2de7611fe46ecf5476214536820d60c6879f5f67331b4158f82ee72f812c079a22d9c65502927dc23db45f3d4b9da6de2bea9afa1d594b7fffa151aeded3e2106c675c1f029887835d68aa9cc7c0df29dc36d367b4abf810455a5077863a4ec9611ca25034fa41dc30fb8397d69a7700938d84e0f9e1a811492a562da33eef51c57430c7a855dbcb03d39b8dbb1372977bbd81bb6aafaff4b03376def93e011d7f3fd1bb1f5d36e9c872bdae50ba71a9115fb7f252a342d2059b4ab063e265a7f80f1a98b872822775c5d2d165c4b960782fdfac4bf18c7f12066f3f9b0b94854f1fe73295894f8ff60d8e5e2c664be2668f6e5ca9fbdbcef7eb915eccb65bc5a69dc3cb2f0289c3e12de7a555322570e81a5b1f35d79fb9c766443181a97565264025f073d77f26fce32232bd3b5c83f75e67270df5c0d43b2e9a4ad097e09a4ae2668913ee45271edc88655485ae68a2d459f7dcb9646f56b0c4858a4bb16202b6a28ca524c550648a33562000aef2fc91cd434af1712a1ec49876d2682c78e9bbbb77f9976876d2a056588db66dc8cad052c74d2aad45dfedda9aaa93e784978bcdf2eb43f3d15183ca07d6dc26369433a426b1b2f1058f94fd380094ccd05e590e03632e951499ea96fdf31b381eea5f8802a4afb4f2ff288a587e904f3a29f71a736386d0a64b2bec0b8fb19af88027a6ba0ee85bc3eb623a03229ee15bf2b5a05618bed9bbd6152cf17de95a01b0697bcb573d742a2a9f6e9e357618fc610ba2a2074aa27aad105df74a1c29018674107d440a82acc9927307a578a16d7d59d67bed095d4c51f297324cacdf4c2ba5c9b440385bb7fd5bbcd476a119360072d761dfc13d5e604ad0c63ddc805810ca0a20350c21144d804e9f39db5ace41957378ed07bc83d810c56fe88538e88aa19c4c10df334cfffab03b85aa08e2b6ee386af05db79ee353a02262c7feb3f615bd69e51c9a696eda6333d64c556ad6344e0231805e0daebbc1a104ff3227c2c19cb83c2090c221746bc8bf41f19f84b99040ee6a04c893ac1103f59a310423036a5d5e687b02d453c28dca2c82425f9d41e83afdd45e2c52e5ae78968fab23667ea9a164445cea43b64bd100b2fcae7d1c719d45426c209476e313672b2b03f7a1143bee9ea64682ccc1494f0a01f2e55e225e76278467f153252a21c080a45855984a8548b56e3eea584c354d84fafad84b9c4c49209bcbd3273402b1e963d2af5214a656054aead00c3ec28c3472cb2f04f1d065d44d91ee38388809254093df84ca418e839308feeb9acbe6aadcbf80c8335c8af92e7b90ada61088355efa7db2f1cd261a2bed36a4e524a6efe11895e10dc39caf7f3a5c4a0012fc234b44c62976c9daf7f8c209d378c60d8e7b2e0474be19834f8c5f418bb0e72454a0b41d8812fe8899ebf88de834ffa8132123e065623a3f99fbb3b26b7a3efa4d6475dde6574db7ef4e3d3cb2f491f10de0555b8213f09ee324e8189b2f5044614583d49881075d9cb1792a4afd8876d872b13a9f7228cc389ce7e9032b03e1886827261ac406a0de551082e90303c7749b5873a9c0abf77024b5d3487da49e4955fd5b0e782d3cfc61bdf88541f7c092e7f907fafac62fecd2a1aeabe5d78d7cd9796b659b1cf14a6791255b603fc5681170dd29ef18420b281f7c4b6324cf6b6154064d44ddf7b217d94f1acd7f62a1581a9e25a8b8a628738fd78900ffe3b68256f2c6e2ccfb4076f7812f9f3cfc41c30f46d4c876060e2ba14fd9288998f916f7d0c6fd8f91361082baa49c4d2a20a5cb4a2b2f90f228b544292d97687e08143b0aeb3b65112f95f6aa2976eea94747960711be3a703640c257473117607c8122252c810e13ed09f6f123f09aba11f6b4b4366eb4efc04f22ec7db3b17cfa10667ecb18b205f724410fe59fb7e1022a43a6e148e3c8e1c1af5b96e8a4e1229449c636c9bcb944570189951c612b97d7da672c26c4a5d55bf227f589e7e034ec213c7955394ffd7b155e0a0ba79ac0596f87eb77292c5ff4b7b93729140b968381a6b3aa82c39b70d21109f320d9376545a781517cdaf425d0ffacbcd82f2c9257af26425a2efc8903e3789f24cc5728db570b5dbea9aedf2cd19e644bd680347e4647b7513b2ff5d26629800d9d7fd8349f4657c661ff856633734b9021e9aed6ac68429127fd7ec819dd8fb44a1b265795c0b49f24e88a9f5b75aa20fb37f849db1f38c7edce0954a6c07927411ad901078277b15f29c89a916ee3fa5538d684f183909f09b7989a215dd11514c8d5582ab953b9351785465b3b849abb4f6ea3394c86e2bdf3760a9e3a2982114e6981d4b4e73295a4a6e1bf050e1c46819d603bb209bcaf344392d62869cba1e7fac8511e634dc616e0cebd49432e5b45ce2680cefc6de7d4546bf49e9ce8744b60e50fef3c42086a10b5fd97b6e3b4a98b2e1655961947c6ecca1f95977695a274442b198c785659e85b0e13d9c609a105b37f0c55515f2ae221d43803450a10be23b0f533d3195ba8147ad1f03a89a6e2af491acd815319a6d444309870044c8fb3901da061f80959f1c5d006ecb5172f17d31a79512c430a28048d0d9abfd7b13c22dec166c19602859fdacc515bf2783e7cc8252a7b605b17b986a0f7f791d5dd7f2a817148777ab44a698cdcb083297385342319280109e8a8900a026c91bbb80b0bffc3b73ec4b17ece12e50f44fa4e6269f02893ac633db65a004ec2ad0a311cbaf3ec4e7f9fde2a493745a75771e3c849418360f9300851097b6d2edef534e07ae478e7e6b42d0c560c1036b9ac855fe71e8baa1578cf4da4b5b8bddc6b97f685cbd2761366449ac16dbaa4c61cad8ef9c4778f2022858e49d9bd5b465b6f656ec283a364b75195f2afaf3d109b2210758f22835e347d1c633e8e03572f230bd912c4857e8e62623bcd82d038c2d63ab45dd163b3a42f85ddac08604489040801106b1e629a0cf5776e0e7f96230ee16d34b8bf332b2cba988c8099e3a1fa2b5fda77853925543d7a306bbfa262977616ff1ff12172f9ca0cd260d05db3d3fbadeca1b1bef3076df4cb72cd9af42f5de8cd2823501595d58d5d36ebde10afc5115ad7c7cf3db9fe89b10dd3de5439f91f41681cfc0b129cec510edd6f03b3efc3420c10778ea8aa997ca39b2074d806251cd7b83050ddb1881e36b606607e9cfaa64b3d5b373fcd9d8fdc20fbc781a409f4907e035003b0c82707d4338c752a1b91b3f18057453edac8cf199085ad937030c9809d12995e2d530a60d7ec7ea5fe98615c90571e1de8c09b2256b2efeee6abaf60d4a438ea6c42764e6a924214e3a9e79a61ebf68fa8c6cec85f15251e2c1be537f2fd5f5b7ef582d8cfcd475df5eba709fb7f0ca4324e62d2d0008aff0d258c339f5c72939573cac01821330d07b0b9b0be8e429b6afb01e044701f9d53a8c0d43d6ba8e591bda0201429761ca347acff0399e042620e84ddcc8879767890c608218fd1f977c8621e3702edcc474f7bb8c023d197accaa02fd2af80b6d4d6d846db85e2df5eb5ec81826d9d0c33d48596672d4de00eed76e039df1fcdd67b65f699633727615ad719b39e9b769bc45a07f9ead0750c5171dff7d601ee05cfff7542b268ec27e2b4150da6d67743a55099d46b1ae99c163b1129d88bf294632636394139cb34238af412d1c5df0245f6e8bd2e383ff9d487b53ecb210f9bef468732d28ea067d1ba346595fb1d43bf92392321b0baadb2f23c9e365542d15cb12a6bc2347b1566dd2822d607617174048ab7091d62995777ebf4cc3c144ee81555e980d0d9f5e58f03251208f7e62dc88725009425ad51d24fe5ba5b4097267ba8dc921695c1ead522b4048f844c0d873890cf1228f935e958fda65b2954d3c0422f7f88ba70fda89a38900bacc07ebe289a75656beb4be40606152209106775f9985085e1eaf2d73d15f7169666789df40435f243b8f6a0d91f07386787b577b72997cdcc052e9610da51cceb343fe74bc1e3fbf44ea41adaed572d0a84640c1a4b6b42680346fcb70308e54000d5a6c90bdd1f546b792790d33f86f1b0e45e2624f0fade9eb349af0b367e6497388373722bbd523d556aefd7467ca786da5e7d6edc74f0a2fdfd46e981c484edb0b7e47bdd86848d5274fd2405a30f12f150b35f09e28cb7bb334217a56d6fa89d15df9f816a07f58ac8e0f2a207ba26a70fa6b09c70058414e73469ecbc90017597657f1c9dea0ad14022c766dffff4396dbb6576cdd932fe57cd88b69d4ee4797e50c895bc216f446b6e5a629eb021f48358d83f39b8a14e985c6fc313a4f2e801767fb8cbc5bf5b68b84af4eac81cfd988c604e6cf0c5796683716e2028c7cd27a47bf3f758aa5a3de1fa7a603c7387ea0b72f081c8309ed3a8f8c7f4c482644c2d1a99a40376c9e1d1ba1f260b06138d7bbc79c744e237de699f2587bbf4d87fa6ad18954efe5ea9b93fbc48a1ba1940bbea00091bb07059cbb9c61b97295b6a0a57101afa87895cd7a0aab2b3c1677e55142f83eae920538266c2a8f80b13943b20304d52d1c34b44d6e0af1ca6672779b521b469d2f18a564d94cace60818508a348d45e2a076368c89ec0b3d0ba45bf3c424f952244d94881b7f0db7a39c9737b5f9370ccb9e7632ff79dc7d7d6eb021003c281e116341060a4025a0bc590630a7a2859dd6550e0936830142f3676863ac09f34eac5e0285b7d1d9f240abd248cd2398fc1800f06f928bc8729bba81aba3d2f62ccc3468dd207e43a5c8faf5ef382e1b93f9db7b61f5087b66e93fc67a4b7cc6ebb485934020c9e9e667744d80144c78e62e47e9f091da519d5103015319b5f94dbbe95906a306a71c2435f0a230e10a725b5963b805c2decb285efd0b32732458083ecf4ab9f7d528a53810dd14a9ce84bb4958c989bf317c751ccf3857cc23e416970cb2424b2412b80d32a67be09475a8e4619a817736fea25473f709f59e4b32b43b35333a8e241b8beffb95ee8197eb6f414345b0e3520f0254e58a6138f841a22e2156d463188ceacc1afd35a36b7e9866517403e6a23b45db4d41f213e02c4fdee13e0a3abc38d2315e8d1200fcf1f03313164ecd036647819674c31f6624dfc85d11d80b8af4951f9f68d144caac28faf97fa2d2c21f06f93f540cc3579f29e91fcd563bd2e4e5d7c784286de5207b97827fa023942b625b213cc4ea59a175d789faf1a401249c53ba5030df88eb92477e4409b04b113491bb3a5aaae346684f074fab67f20e9778106eaa19fd9849d56616230e5b2ceec70f5620e913d0edab5fc166427ab9ad43041950e0e334c38e29dc95638485030e4055a9e6c8086cbb90a806a7ac19454ab9149c3fd377b23561205ca390ad38f42d21d8a08dc36a5a0dbf657c9ed49bed7a6196d70a01d1808da5212eb746c25e77f8c388a2e3207ac81fd59fe3506c02c7c5d846dcae9c1b637bfa559fc883b0fa095fa60b5cb22837b63c1e4438dabca0fe6aaaee6ce69cd1a505fbae4d737a3ae0e00636924a918d351bcb493cba23629c7a20ca2f53cf1f2447f6968bf9ac662dd749892074f74e8b2121d9020fdd5ecce3212f7b8f38f1b090e00a2aa2548e70f6aca6643dda8fc1bfa13f3b46cfb34f76456a151523aad8107090c5e28c943cad75e80d0eeb27d4e98c0f60d3477a92b83bfd716281e1bb4d2982f2fcb82b5f0001afe734f6723b890d642178a3ad08f3bfbca70ac789fe024f54e872e17827c5014c2bf781a3cf2b8a2810ba159248fc7cf26e999a7835f356c4a93981cd6e15cd9f79f6d014fa6e3a0ae4b4f043f5b44b043b484c169489f2dd2767a77b2e1915ac084296c900e695e98b774322659e692fd43147a5fc8be75a16352ad240fbdb08a680c6cf42ee016ede041f67dba5f2797010e0962db3464cd722a1145e22c05b0168722a92da98337e224bf4f1d64360363d65560a572b4b1e5c9ca42b824651fd8687dd3c881aa184789ab56259dfe03e78d8ba75c64637c652ce375a1864a6edc14dddf5b6a60f2a53d9a648ae7723723aaa47c89aa2330807d082a9b3246684ac3979a92f6aeed893441be27777adae5a2b310ea4f85ecb88e7529b814ef73aa5b5ad8ec668e19846df1af292f86627ff883c9243a1d1c47d4eca472aacbe23a86822230374e0cd21a67ed29d77103c407443f53140cbcfb7cd06ca1ddd54fde1b104b97dbe7fcc1ea89031c31c8f258c3af09b5d93f11a4c4036000e95373b983b2948d8e6e0ca0fd9e9a2acb6e279faf0b182f25883ae5c46b021f651c28c683270bb87e207410ee200f94c1c98a2fc96544ac5088f4f37d0ff0136e7f553a5cb6031b44010a0b0780e4b7637423dc6ae8afd0385a2d3fd4e3826a517375ba9ff6c914a1d06038b4d96205b3fd72d52bf47b4e1ab1f7f5421d6a95b02db676fd19ee5d28855d0a3dda563a6c8284b3ddf17ba0f0f9f0860f1ffff854abe3eaa159773f990dce9e15ef942e7995f907f3549e412a6a1b6eccbae712fa3729e3c7463454d24e880835a5390ca7263984a186d4d30e1ef76c152a88f6589bde4d6f20454fd42652eceff7c43ee6649348a813211083848a621af82d2d3e12fb987a509829774984bbe0519dc74a0725e995a51bbcd009dbfe952b662dfc5f80aac0b5353443986a2f355b307e8d6d4792be1a91afc2609448e09028ca0f7034821bbc99ebd5cbde35f45664c5c9d25decf8f71587e5e6e89e3196fa604221987e5fb2a11d8ed4f5dcfb44f2943fd6132e52f4369b063f45620343b7a1ee743639d60ffb54abc82585b307adcc239ef29886695bbc0a91b927032845ab01766d003e768b204a3b2bd92e92ae49b9f8669810f5ebb3ffecc9d62381c463ec141020d3335686f1c1ddb3c2d24b54bf894b0da99ea01169fecb36365f7fe7d86ccd275e9d282fab4d8d914305a93bc0309adac476f9755de8bf1369b090f1247ab835b7cbde6c031dd2c57c201eda0d228aab80683a0487e46eb0d7c5681a6bdfbb5a18e24a4684b3680e60b80bf59b78e066f69d6f21a4c9f43322c7d01f16d24ca1aef54223f538ed818b04ec5238c2fc7f25d163c92fb094dafda6581943ff9b585dc8f47617238506a52ab8ad036b11b7a1a40657c47279d7cf39ff50a6d892b2d2b20001d42f75173b93de172d8ccf7d248ae435326ca0e67d2b977aec5211706fb1411608dc02d14bdfe961e4cd589a3ae54266c03c7860c1e3915182e7c5f348951d525e8601c62bd8126ac7fcc6d8deacb292281530386a1a1d62ed8622f63412998c578c8cee102f6d56913ede6e135876efea8a329b12dc6bd937386752a136147f846d68b50b23cef8db29f03331079f6c3b48cf86711e1d2fecd65b891128d2d244fb50dba8778428c5e0d429044c1ad884c19157aa09c1ea049c1deec6811dcbea257c776944d17e0edca581b61c82b628cd95451e5a36f011823d58065641a279118482621efe3fdd3e48d155b338b522c56fa3905e74a6483e780749d4422091e2730a5d6dea09c41c871d3bb0ed6d8988a9be898c109e002b8acd43b939f830c90150ccba212f8f1d00a99f00ccca55a65082f1923b2016e5ed396cb5d25d6d1e1b61996577fa2f6dbd0d6e2862db2a7a6de056237b02db4243dbaed7a0af5dc19b75050bc614b2d100ade5fc253848167fc3d4b073d40450f3cdd13140e94f98220a28ff5571454173a8dcc120984a000bebe00d340c17ce7ebe8e8add89511329fc5e7cfea6df37d853fff026cf0f114a0e79097e80a63ebd905fbb646076488345f00d153748045c752e73a5241abd70134d0e7f72321eb7233585abb9bbaf9aec16477575b489352f9bc8924d21ef45ef5cb7f4b825b9ae8baa150cb5ed40d2a64826f69186a357ba38a9174c5a0a9278848482e3269bca0642220296860dbc6adbd1cc3aafd039c706d01bfb0ddc8cbe368cb5c503419723e22908b181e703586cfd233d38b444c69bfc16c5e4c986174dc55692538fb493005144aef7d97492367fcf623a3d23f4fdafe64a2e7e0f16fe4c18471fe28fb91ccd4dd259925429a6c466b1f319119f8523792d0f7e5fc86e86d9f79223670601c81c73cc2168369ade2f71d211551457a528c81dbc9209d765e5448904a45de86ddc2ede5e623292517aa64656526528b7eaa96986c69c041c830870a11bb7b2f7bad5237b91248febee9314edb10b7e3e7f97751d66027d8642fa3e0669a9a636945c614009f84bed362100354063c0300c92a0ad49d35611b4224123ae29dd6d705abbd65c0a412ba12123ff3a4c59340409a8e02d4412300d998226859c30c2c06a0115f041ff8755453d2861583ff7f17e499f438768f74df3c4b20bae24e557e8cf872572301f028f82c7aea98d6e0a98a541c469dfe8061a78922d6fffe1adf093dd583700586e6f6099dc1a01d3b51764348a996111068e69795413e1acb8effe92dd3f9c81b6d0a4ad7dd829e84ba20fe3352b2bd0c9f2e976d1ba0a0a41d4e919ec9a826b5228f5486937254452240a02343471db59d656aaa9092977ab10ee5825e873c11e0e85d5ff2d6cef6c594b650ca05ea861942196acc1e64c1a9a57913f73d73aa260740ab1878af5e949e7d79e18c416a5c25123bee3b7436bd8fce14284fc2f75b29e8be0129e7ee24148f8730ea7ce955b814667d9e4b067c8255e11b3e99e4d050377311b56a6e0cb2505973fcf9c42fa60f64c61215423a4745bda23f06e8e81f9d5b50c4cac38772b7c75097f8f10b2c4e7d02dffa5d6a9dd7d9859e80a72a2055c50cebea48cb131be5d45779a50dedc230b170cf09da3561426fbf5d5efcd83f1abd2e43faf85cbea6ded7b977132d3c5da7f63cac6ad9fbdec24a9a7407b4ed11a0213c244584e67ecca9d0d6cd5bab19eeac95874b493bbec72c640ae53b4c3340832137d8b343823a0c4407eb1bfaae1f4c734a5ed2a96cd2cab110ec3858b1ae34e62b4c680c6df26252bf10c88d34db4dd7ee2cbe818b1116a5db367922cca8393f15c355d8a809c937309980e3e3859e765ffd0f067019823764ac496541302ca424b86a01db24cd44bccd36299c2f980cfacb70f9d889bba537974ded280ee3bcd9b122cd416df1087744254fb77e6bc277725792374bd327dd214ff11724a07bdc1af18d50addb6cf91ddc84ff05f93b68325d2c096a4ae4c6a0682d76d34e9e38dec94971e3397ffa5139dbe117a03650ed6e28a591f5dbf3c56202ed8603d3fec713801f12bdcac0c14726f75c67daea9af598da2263554c8174e454a0ec2ed2e02c11e80c47cfd1c7e96a01bd180cb3cca01de058c9c23c263bd81cdec15b332bcb086a436c963cea3358e930f2f4cb9d2f2798102b5267adc5f52eec9d0b520b07002069be6e369d6c46cf9a08caed4e25f91237bbfebc0519d896b2b85ef363f19bd6f4eb67539248e962841d481111663ff4ea37e9d3e2b068fdd1c04466d60c9c049ab67c5b88e507b4a6140b31c44c2ad300094e60368fe3f15dfad680cbb8a9b8a4341fb4c1ecd380713f70e1687e96ff53ffcddbf31ced7718ab17db7c95e2918b78bdd25c7ab9596d955b70745896607f4f3e657557515250339c7ca6e2606115b725f4a69430d654609397e5b770e2231fb74c652ec0faddd4070ad9108f71d2bc687738bae438ead6f51ee75874b02f157da5f9abf95c21cfdffd9eab1347d002ef316c1f675e5f32ecd5cc6c3cc3b9217b5e3c69ae91e402167d904436b96709aaefe7127552f8a5bb8341c8517b4ab5835beb175db2760ca9243156df5391a640f57a03d5074506c98647a22673872d7d1bf23b53e8b08d1aab173ce2d99e1c1b534331ed46eae780fdab4ad2cf9013ff420e291bc90394883b9e2d847ed7a262ae03dfc14d7b3b24487cd3402a307f91a4afa32e9dc2783c38a97383753c4f5b020203008b4dfade6355f3f7ceeacdeac855948eb776a357858262bcd3749bfebae9abfcc37f5dcdb83d3295fcfe33c0ab88d9848878439eeea4dd09121a5112c77c7f5343c74be94b041db7be6766703b44d64783604911b40870a9ca4e2197daf021df03ecb1e14f0a730c8eaf2974dd7dfde4c02e81f4ce9f3b5246fd6b5e9252fbd1ecb99994d64c1f0245cc65fdd09b6de60f603e70b003490e523ed034d5472e10b2acd6582731080d755e79b3e73c5c1dbeefb5d76a0b35b6d13f0608724ec088e8a4d2cdee36df0cc9db9a67841367d42c9328ab783984705b3d04a81378366c0c962a9c676c7b67bc35370028a4412db7042077c2b3c859dbb55c26d3859e8ad1ea7ff0bc7e093ab258cc2d6e725c3aa3f00cefddc1595f752674ca4573a070e3e833ac362216d85a1302f55bcd499c1b519866e9b33633f957df578660094964a828ed40513f459e52907236a942801305b4bb46ab5d7cd3e879e13108521385883feda5764ea4813b5680633fbcad7829f3bdca6399e634644da70a05d33055014cd7590538d761e38ec5f99730c9019364679afac5dad1e60ebb540e8c09e718919d36d4df647085f2fa0b269400c55b165597594032fb16b2e576bf63619016d6147c55d5989fb3c16d28d4c574c75c918b093f9ce9611500f208fd50a0baeb254ea3c8563ce198986fe6aa606ed62ec2668ad211774114b8894d86c42b212136c437d3db933df357ded62b002fba300d69459f41a17364b3551632259e5b85e481904462de20e5b62291841948f989ad895108d10ac96aa119954416cd0222aae922a6b652f2418e6773bbb030f5e918deb68aeba471fcb8105238623842aa98b4c6a20127fd5366efb62a39daf373d8d527500db6ebd60d808b3c70b2fe6e2fe4bcd80593464e89aa43462753e9b4957a14ef249a1532accf949ef1cd5be12e44c1453f6a7bc21640be6d4e9db27ec0fd46f031a4bdba356209e15a703695cda02fa82305b44d0b332a943de4c57cb6ce5209ac25680dc63e6d2569c26a9969b35002c7e1da0694245780f78129d6b7e8dc0585af7e144eca8444c4af00cf238b3e2a7256defb626f7de32252903f709020a1e0a6013d3a503f072312e365d9c13ba30a62be5a751005e94ebd96fcacfa35c5c6cbab858ca8f4b0f1a48af87694ed034cd0e9175f3ce7a5ee722111b40e9a3738f43debc3f1fa3d855f9221a229188f4fa19021a9a1340ad8996bdb44334df687f3e462f437e6708ba65419f15c0dbc99e5d76b2b883f4eea5ed190e053d7b2723c1e48683d69f4e21873c38649b836f9676a845edf5d7a326756fde79d7d5538d890294bf390b87ec31ac22d92b33b237260c3d7b3dc6b04ade481bf939489bb03b7c2efcced959baaeebc2ef62be93f9ce635ccdb8fc68bad653b992218829f62c9e5d64af0c109e3d646f8c0e9e9dda1bdae0d9397b3d06cf2b902678f66629ed75791361d8c11878250cd62b4aaf843df768eb599d19dac86de5ac0b29a18b2f97a5f5ec1d83b1df7c13d92b5fe45d27f29077a14ab90da07c910fd1945c941fb261b1cf0879c8e347130263ef45f1ec77c66b53009be0603f44f3cdb5d20dc03b7be20eb46edec5cf0707f3117ae9d4af1785a671d282aead09784d3dae37f5f4a03f7b220cdfd9f3ec334d4117c8e166bdc9d212492d8ce9dc53e4d2a528c485ea90766f6ad9bbeb954f7d0241051172918bec90908dcf75d31a9f7a1ccaf85d1392fc054dbb324fa7df98a737bc3e2ff8944ea7344698ed824cbce69b77f2230294bf6d533a27c51652e448d17a36fd36650610038030e5f534e396fe865ebae45c4afe6284d944a0843068e1630c6f067edb2ef5cda68beddb65a266c96bf7e5e390e9edb363e2cdaa55f95f8d30407fe95789fb32db0c5de4016cf6c99399468d20b088f643a4b74fe93188ca2b3f9fab145e99fc9ede9fbf1a39c56eaa91532935720aac9153f2d6fcd55c7a2792214532ba7a6b26dd4c4eb77ba20989ec45f2229f35fec42c060080d40d5d86977ce49d0cbf3ee3a7dfd24fbfa19fd369af4c277b5d9e7319f6ba7ca0afd01457b1269b62634ca1d892b531a6487664a36745950892a792887c3a2b7f341c14bff9ac975fec9afdc89ca0f0e724020510ee2f929a97b24794483fb591e371256b1a8b014ad734ae611127d209f29d879cc695c8bb520d24896aec947f74ed441d0c43d1a9addce62e3f243a57998889ecd3316a9a04a526656bde334a39a7a52060f0a5bdedd363d3f6d93e645a1a466fc6d9dd54ce969c051543e3b63935bf3db539a78cdafcd98618b718639c73c6186344c2dcb8397b72536eb6264173f9c379a6ea23fefc742cc2684ea37ddb34f91cb745ffe0c41d34678db9cadf498fb3b7e635cdb7fe79f6cdf9e6a7ebd4993e67378c7b9ea05fb471dad539bdd33d3eaf9d9d9d9d9d9d1d276266a1cc63272099c691e18062b25950b7fa66676767676767c70919191919a01d19de388777b8c7e7f50373b95c2e97cbb5b3b3b3b3b3b3e3449cc5599cc519e7ecb4269b05718b6f18875d2e97cbe572b9646c6767676767674716c42d7b7c5e3f30201973b95c2e97cb2563322663322663322663b2877e106d8137271c7785397287c53097cbe572b95c41aee75e312b6616ca3c76028a37be18c63086318c610c63587c318cf6aa29089e4eee61d8324c839be75e4556f42e8646fddaf1c423c51718ac5341e08c7af4d9d12a592deb950d8fe7a2cfd9bb09ab9e2022c778926fcede5c883b60007c2d441e46cedeb05e713d9de2b843a8b99e67873d77ecab9e87eaf65b0d3040cf372779b77d3424cff34e7a24cff6175bed261c86aac6f5f87ca8ceff6a7fc121006ecf44fdde46b2dd64e327d56e1261a48fea1345c0e7c24b6f2d441cb6ff3a512582a4f59ed5e92cc78d3617d5cd762cc2480fd5f89df45ac61deb94f4066275b3f6e69c73f2b75837e9d80e37378d33431757e028f6ed9386bd354fc3b99f5ee1e031e7ce56af7a67e2f40ac6a34f57af6ef0e81deb550e8fdeb25e851ebd67bde2e1d13ba8573b3c5e992df6f2363c2c2e1e3da657385cf3e8a75eddf0e8ce2af718e30e28df5cc61d52bef964550ddfec6582bbb2baa36ae3a8319d92da8bdfa8363c361c04cee2b1bec5bc56ef6c54cbe279a88afaeef3509506aaceb0a4d383409ec9047aa82ae3bb9287aa2b281eaaaad4b0222f3895e2a1aae93b9387aa293d3eaf1f1e23222b070aca4e8e1b3cef46c5435594195d270212c5443251a984831c4d01de8e898050b5f4a00c0fe766a767e4330341916809a7da6bd4f6e1d09b412f1055c1ef4ea4cf51452fd18f08d6a91387d3a92d886b71381a996ad4e029c00b76333c541d3d0e55e423c35bab3638dcb47276463d239f6d569ac5be0f87daaf96da3eb3f573a2e1a1eab7e2ed3754ce0553399c518f4fa7da79eca85bd04e37c977be77443ede26bd469d02e5a1aaf72c55a725478ddd5251b57b96aad3e22ed5f52a2d386ad78acd3c8f76353c540da12a4555ee6bb0b878bebd566d78745822485aafc33516dfbc86772c7ee3fb115fa66e54ed73d491ab53ed611de574aafd46b5f18013ad56abc5bae1394c32200ebb2e47dd82588776ad6eb34eb5b314e0dd66ef281c383aebb9549614bfedf3ed38aa28a853ed5e45320edb6f5451ac8a8062bd8a3cca893b6ca2d8b773084077a7d4c5857a6571179a2387163f9a1a953eaaceefaaa7d566bd68955936aa8ee6b6fa36eb95084804d43c624fe3dd4a1b5efc286561b1f1d16cd659ea8bb37c342fa91b9eba612b7dafd56dd4f8b6c68f9fb5acee06cb78638ebc56d76a64b5bc702a7543ead081c373a92c8eaaf1bb2e7e2ef6d6bc8ba350bed5bb81a0df9cd63b6f5ee47c03a25cb64b65715a6b38eaa3a981aa3b5a7c478b45326f583c2cde49af46a51f3f169b0355452fbf1e21971e2bf599a651d967d4dbb9befd546f28a35e5fa937e6efa6526f8ca95ed1ecdb53ea0d51ea1dd5eb60bd94542fd7faf6d156afa8c9b77bf58a9c7c7b579f98a27a4d7f45409c479f517e349c8ee6fce9dc384bb34838188b675656f4f88d621f6d20d16a18c9acd990c89a131259c334c717383f6950a2f1c69ca4d463ea99000961f00cd3e7a1c615656d88b2aa804eb6018c33ba8ee4813ee4afc0434307c0004d51506ef3b4c931c2b0e5d66c9653e2107d86b5982dd2de368e0b79d0d0301412893a1a230f1f1ca214a40991449df7bdbcd0443fa9010cd15289db4adaec12974a25094e4a3566cbf2cc92794a9f779aa46c8d9d432111d72ea6f3bc8feb057db0a7893c11897406f0c62e7e70b80577b4c89c148c302a80b7878fde799e9c11a6f3989979cee9fde43abd0f5c824f9e348d68684a2812858e6ecd8f21c700af177d1443ba351f238cb671f40b7da26ef6c772c4c919ae2e72d7915620a5162c994e0f8a1e0ef6446e383324cc9c7c90cc743a6d36e866a4537a92654b709a36209b2e31a404e5e6c9c290d5a04d9b4a624033d98f0f904fc80b8d4228a199ecc707c8473277cfb985b8a96d1bc7512a0a7d21100ca5844e2119a11baae862189c93ce4423b98b8fce71304abb510bbac9cc2c995932cb2337370864efa0ca4a9abbbbdb4632745d94520cb90690d7d053e34d3adb8052ca34ac01bc9452d12846185a82ae23c999ce5d8802227f888d09022f7dd9f302f0462026cf4824a144049cb8d1c9f3f098c821b5377ef1ec9ddc86689bc468084094528ef94b65422dca8174a259b16ddb36a715dddd564c59ebd9e70f5675d36d52ef3533d31ef290bdb23ac1612814aa457c1480436e16910e05874582b0aa9f524a435da3748a9cbd0bd22bc99a5108121c6e4e38c1210779620681c16011a60a397b017e84a24c13a71f32e547335d56393d073a3dca9e03c8aae638ceb72a39ce27c771939373cec96d9393b14792678fd6ac87e15f50b6344f0b73b6c44665a8d325647e74e0f39383255a8c60c9eff8a8051538dfa3070ed96594538b2167ef7ef44ab23a6e9b104138e41f4bb08afd89f93f9a52106c5025d303ab28a53e2b5764fa9032866a366abe7d34d5e350d32c8501f8c4fc0b7660af24cba3a2a747c54c13e14c21197b04c6b08a411004e32c54852eaec09077b36af24d9c027293648bacf8450b96660052bb61c1a7fc66d3f6583c9bc76f8821d2d99d79098e1837e366a42e485e908048b0d6730b17440a0337e3669c1352186400c1e5c68514e3669c13194070b9910104ce0bae0917e38038a42d971bda3a01c8c97000d11627c311d3b4c88989410378e3ebe6bebce732279691170306c9494ac440e1490e39244a0249a41a72b0f2ce1539601539a95ecec959a29dbe7ccb9b9c1b65f1b5d23a260719cd5eea356739ce2773fcc2e299d3678806f0d2ef9c2984a317736a73c7fbcb39cf3b39371c52c1320911c04b993265da39a2d02cb6386979d212f4cc1ea8a20a49bae2b91d8b676f528fb4ec812ab624323dfc808111c3aa6d234950daab39f528ccfeb60fabe22b0a4bfa270840bdc5e63754c29ba1af715825bf2439ac1a39149f93ac685459c621c79c8338eca0f86c9057e51772c6a10c8a31254bdaa77d56edc3dddbe61b18edc3213313c02b6f3c79c32a2aa48b55343bac42498fafc924cfecedd32b2562ece013f07a7f39f64d2ac7389449ef64d07f01f4976dd895e895bc61199bfc9575f64a9680de308a44d6682db202472905b8e04221ce43d44321ca51808b6deb4e43b756610c496600afcc4808608ce7d7a444a7d8edddc235809f7f4870c8af2850f1f1c9c7d7135adfb127bf1e3ce647a37d4ad8d8e779fc683aaf86fcab7cc35470c822f76aa7cdd377f5cabc0ccb9007abb4f77825339b3967ce2239b17834cdb59aefa4473203c8d3413140998f46b31e131e6bb48fe6c67b6e3ddf682f2d7b7fe3cc895a8453dc1a090164bf9199d9bb2535aa832ebe5c098b404828d9b92247e2709ca422ca969849b412d34a9f297d9ea54fa734242e4a52f157a2648edcb98243f6697afe68e4eb08e08db24b9148420956c9672a5ba2378fdbb4573e2a887ee9fdd25e140fd4cc6360fe908fa6ed0c875ca79c524a4df319a79cd15e275e1b327378761ea3184c27e411c04bb780c94e0812e73b92e7a17a5f3e34996b91df23df1d18a0fce963fa0c7773cd893af6a4a83951f85e9c2c4f4d4fa94fea9155380f7627b217a4fff2d465125c102ecf858ed8a9cd800b2ea650b5482fd2ab53dc05f0b6ccbe652623870423fdb84cf1ec5ccd935e97f47a66e23205cb56b927dcb01361d85d5aa4178989cf1b7054e1b52e8097b4f3a41d0ebba5ede5809cb03c91966f79e92e2f2d8d309f0f16d20d3b355e5a122cc2b06b2800493e1cb25f1d829e9d0423f9a85a4490b47a1cfa8bbcfbd2cf2f38a24eed0d025140424e725288faa5af753ec3db672ff89b67e3f692cdb43f27e38f66669626d8ee511adaec13f243a1a83df5f8f9a04e048831c618e3a94505f19bb54b70d85ef39a0567c415139c6a6f5fa257339d6a97360078f2ed37159d7cfbadef7e3a510aca52e490e90c87edb334adf7498e043013bd1ee531baaeeb4c1e6ca35050aed97a46d1c597abf504e914a701bcd26606de184382c66ddfbcdb6a900f80353fb78a0262af5452f31ca37af4732e9570c8ae840d873c6f9ebf2298a5b55ce08db12042906095dca28cd3a28298d2d6fc0ca380486f6f7b6b3ec6a79507879c06f0f2f87e1ea419a55a4bbaf8e7b59e6e2d055d54894e50fc76e4b7cd769c0740f9dd49af0920a594f6e945268e73caab90732e5f1fa2b6019246ce6e9c6f1cd73d46ccc78060c8bb9e5e24b2b79d7a472bd80150bee41996df9cf2bb7a1faa43dae7956fa23e79c539a531cfd5174eb166bd8d6e967218a37553d175d16fe7b705caf7e8a4af044b7ec6c7570960df69de5751403e1ff9c8de917f5ef3dd68e49c8f4695ff63ea5e6deff8ab3ee28f46f663fe7c7cce869f4ef937fe6cc8137d3dbe1a9ff253f75e7e3d6afc4ee47df5fa883f8489cd3fe7fcb34d7c349b8b3e1ace451f0d751f22efeced9cba7c424618ea45e6c708439dab433ae7bce7e5cbef220a17c0984518391f3ffea8b3a82036e79c73fad1704ef9934e443ef3c7cf0773a8c6f7eaadf910bf57e5181faa1749141f6a7d8826d4f9acf1bb4a44febc485ebaa8829b362906e8b38d12879a4f6e6220800b203e3033c5cc112e8040c205089a68356126034db89971820b0960a0091a78820b308908448c31c618bb79f6ecd9b3af29b20fba18638c31c618e5133a965272dc41d7dd8b438e4994524a29a59cd3b54dd35ee636a7895f9c46dbb4b96ddbb6ad01044fdc130cf0f2882fce932b00a5735f112156ec94b4d463e1509b736a939e3c11382713de34c94e21ca6d5a37bbebba8e65248d6ecdf3a5dcddddb23b8a46f748d75b84454fba18638c315aa0ebba686f6c220618bd8bd5e330f2f8e8cca3238d30d1a54c032131258f72e0c4e81e38e4c4006ff4e2a3cf6893e050f2a8fdebd1df5626c244cfe1c64f8b92f6bec8d869a01387d22d4a49278e64c2f450bd3d7cc8635c4dbf007889e237f5b2be9cf1529246a697ce79ec95c9c64ea1d8d8a9dbc36fde95aa7cef558cd1a3db1bf2eba5135849a34a39dcfcab1e879b7b15e470f3ae9a38dc5c546fcd8b5c6b5aef8cdf9ca5eca1e76c75b2e6434eeb353d05bbcfafe7f90579207924f9ed97d27ed5abd43def64eddcabd7ebce450e829d873ab0b39245f5d2274a23cfbf4e4af9a5d1e7795554e383f589911341d27ad03d567dde3949e49e77a18fa693528e6a8c305ff56a8c385c295fa435cba851df7cbefc7ad0506dae464d33b1787af6b7bdda95f876ea92ae38ae6e556a4048245d33598a814edaf53af1ed52457df390cfda691f4d68d210b51e8753ab2ca32d32235356b1cf1a2a7905244e49bfa6edd9b5e79eace2f901f089b98da4f6d14c4eca8e3bc452e9c4e22fddbdb09cb6a9b107d28ef36ee863e9a5dfd2c7192ffdce780979c4c89892f2451fcdfc64dbc8aa18a227b8a2e65b2e59a2c4f52445b4aef4083865a01cae5081062e2ad0c0b5c516f2e5dc1c0781f2356d8b59a24994458055b429c7711cc7c9980ac4147b14318c6886982536288057e2449c5e510a82a793e3bc382e28e7853383cd665f90cdda66e6c9ca00fb64b0d917727e46813383cd66b399f78528669dac9403f076305919609f0cf67ab92e3db1e5c5c5680c6396e22cb5bc6e1746490a013dc3aae87ddb21ec9ba380018caf157cf1db109bf392e79ceb95ff11117d3a6f16d51e593df0aca8f6f9252d80fe17dc3e66e10127c42c7ad083f822ed90189bdf1ab658a2795784ab1cc781af3953faf1f44af378c3b682551c054f4e70e85d7bf1e3accce1100a0e398e611c07fa0537eb0457a12003c815b150ac38d629cd6957f2ee9e52fc82f6966ce4b0b3310eb5bf1c23d94b9f4bb1177c0ec5ded3cb9d4e69ceb18c55b19f5e316c732cc00bd23002c8691efb905f9e495984d15ceef44afe744a73cd5e5ab29782f682e0cf49f36f07e0f4cbb308f49c4be7193be120567dae79b7da86559e6bde37ac1ab9e68dd38d6afb57dbb7d855da71d68382434df3191e2501457e69ab5792a5b9bc915474de858038ac89dcd75bf39cb4e150bbe916875a0ef7c40cd51b6a4eeb955dbcc6b52805c1d389b3dd7acd9d682858155ff327802f9a1dd224e94de18a152479d2c797eb051f51bac88ab375a2f747d3563a47db9a0ce0164bdad6b4a823246bba644d7b84c788c8e20092d884655bb109eb8820cc320d39c801ec77c084073e1f5f39f8e2a583264f59155f3c50f2a567ef48ed5d9b78f24cc4262f2db76d82086ebdb44db4450521dbc6266f9b884d5e36f959173bd9de35fe74ea3a37ce0a9d7815b293ae244bfa895721971e39e459593834712875369f75726a7a7f349af4fe7a70c719ee4a03229135cc44e8a490361c83e67a303735682f68e7507249e0bcd3c7c88aac927e5f2e8f1e38d52eab0c873e442fb33da1328631217a3abd740fc32e44c166cdca74aa725a8053c6aa1b67ff05ab6e0c7a277a35bd1d0a8f0b3f3f2fe8489d824e41a780468e0ac02ba251030c7007c4d9e9544b9bdda4f36622e23ac4ac4d9a11053d7e5cd7d97da0df669262efb6cdbb28254a6ce4f1f3367e91a86b3dbb2848347b76aae45b11018980508056ba601dd8b99a02301412752211e7f193ddf3128b97de499426285c959674e3d51150a75aa399ec5be124b8026390e340e7c0100d8568884234b46d73d421ba89b650a8c9b37728324ff61c7be4a178e1f1ebda4f779e7db472c5b3772b3ecd44e48508e8056e23b96d1e0d795d0518fa36bb22e547b3d205870c45cf879e842a131c6c0588c315180d18700b56603460404774ba9c060c3caf53008e7c86a318d463f7674488e5d9118c04e05d81a10081b509271ab57338310605456e7baeea90a424b99e475de0dc3cfb3792915a200a10b52318872c4c4440222f443114a05e919c7d04430122d9110c4502f08a4e5b57ee6945c941f92a4af579f6de793d3b0aecd963cf08c66404237d343aa218378f3a37ce12f90cc7b803ed2cca0e4b11c08b32823d8b8050be8f66b32840a3908f3e1a142f38642ee45c65a26728310e190588c31558846101784730a0671fc558755760cfb02e4640ace29c7de405ab2e139cb3afc0e20e91566ede043d7bf77d74f434722492c9e1a0a2d31c6c02d8c559327188921e933084d9b3a3a4edc13f3d268108b16f0f79b02abe70acf8e848448057b427be5000bb91498ccdc441c1ec6f84d94c9ef84a81093ece0a640a9c0a448a9c0a440a25aae8d14156451c1f3d3a0ec9837c913cb04726fc6529fd803754f9a84514aa7869afccc7d0df901fc8145670183f8b1e6ce14371d61ee83a525711639c72d3a28cdac6e27e3a9922c79730746739c518230e4069afd7557415336e48a6d309043d4aa547c1d97a09437796e81df3b6d90876d36c1b7b008c1ebb0af076108bfbcb93696a5a5701ca22e3008cf6769398e649df6441a404b94edbb82adbeb1380d2fb03c2fdcece47bf8d45732e7f7baec5f406c439b93c27fccd2fb7c35b17eb601dd016dc0ff73323730e0267693ea3a19f9c9d9ece85c5ebc0ded5e7398ee3e689eb397f36e3007c6256ed2f173493fd748a9d72b11e6e09a798f379025e520ee77305e75b0eab3625acea1d566dcdfd8055803bddce737739cf5c8c31c618638ced5cec947c9784c32fc8666fc7b81f8dc361d7f39d3b5e68a11cafe5774f386452d08f664938747515e0a57f3b978bf3b41a59a11a595ce57eda742e2c5c1cb22b0875d1ef388fabbd6953fed436c93537ba17f818617a5c70baf8721b274a58dca11461a64fe7c16bf5aa8675c18f37e675fd63f842a4c74e697c65ec279f7efa953030c24c376d0194b0e91268ba8c4def9b29653f65d04f6efde49b9f8cf3935d3f39e727fbfce4d74ffef9c93020d94f0efae9dd6928205bfb6651736a8da355a17bc26bfde6f1e5ced9b777c1de5663174900c2cdc724fcc027f631093e3adf3d7107698608d3de5a84a0c907e02312d0e0e43bcedb2a7f280d726e31e4ed32885bbdf2bcfde58c55ecd2d3e82724baa43ddfb75fdfde3d5487f3f821d1282122fffcb3473c2b631625e44867a5ccca1a560d6b863bed3b621a215921941091d31a96b7f9f6091139b547a88b6cec94947dfb95b3cf08c9e23c7e454856c89e3a357d86c34e4def668feca06f8f5ec342098947fa25a38c71b25ea136a71e59ed72d62bd46683883ce491d53d325425ad1cdf7c7ba90ba07ff7318b0e78e0a735b10b7cfecaa06fbfa19c459876d316c0eee9150a4c054d5aac8eacf67eb54f59af980d4b705aad562b0ad60f90c8091bc0d8a2c5ba1d6b59cf3aa815637fbb67a405149680d362dde9fabe33e7fb095d4081498b75e7ce771376f062ddd9e3f3f3ed77027d3bf705d1c918658f88c8311e054473d62ceaf42ca52d40ffdb3de0c72c3aa082d74a40a470c261fc97760edb5d00ce6a2a03c8af56ebb90bb01cb4e6eca30d245ccde411163a3ebe54f0f3a325e0f8f83a4114be2b82ccf1f1a58218bcf7f165021efc057dcea40c3025c6887ae972099b4fc984138b0a722468e2f1f1a582333cf8f1658219fc057df24ca4448233e4daa6692faca273e2e0205603d0eb220920c8640d38e0f9eb63c041ce5fd07b808311fcf52f80dec7170ea2f80b7ac8ce79fac9c38697adc821758fdeab49edc9042e017c7156cdf9821e7f197d7cf19481270c7f3d86d344d0c55eb147a79207f943089290c3fa01278b19ab638f2b4a081ff1c1e6c5625bc3ea2277c7d0e8d6e0400523b45848584ee074aa4277b3ec9b9beee64905cfdb3617962c5f72374f22984cddcd1d86a75357a1bbbbbbbb793a77b3bc024bdebab58d35d9dddddd2fddfcc2967bc6599c6926939461186551c6c138d86cd6b18e9d4e2f2f55b8b9d17ae841d380888991dabc993772462691c915a413e9e40a2d5b3e11e68cd3355d11280231b7b6fd9c45b61ed289b8cc28b4ec8d8bf4cb1ed289c8313429a920935d210c6362a6262b7d13ff80a483a4cee65d8bf4d374108b479bb6887c7905cf939be4298017d4bc33f10f4864583cd2d9411dee6964583c5bfbfcb6a8205a93b20a52fe8812e8227b5f7bfc2a1120da48c7debd79bbd4ba393f9ae64fb35302fde814fb4f90e9db83b85cae76cf3baffe400199be391428209bcfcd4a1b2b5b4248d7c72e7b2416d287552367974b58c5bd98c81fb9c591903d225bac621f55e9239930cd36b59095d44a1b8905874ba4e9bf7aa515cf118852103c9ddcc3302686fe6095e7ec42046195fc1eafc7ebf1ba598881091e2c0b3178e16f7bf13c6933d04d8c55977718c6aa988518963c3b77c1aab88513feb217cf5cfce526bcc3aaf862c115ac922378f66e4a669ed327f5aed3ca245553c221d350e9db6bdc217ef7ac53ce61d87eddc74b10a26f1b824800b72779fc689ee896aef894f6477379a72f2d797b4f972e915f8675121808eb55645116e8f1e3598461ef9c1e35012f6fc1ce5bd020a6454d8f8fe2d44a170fc02b5dec2875c691d35288763746d36ae7602535cfdab5daf957675b1a8632f115d32eb2211b8067bfbc922e4e314af3c8434cc481bd2df5f62f809beb704e5dfb82103db5ee2fbce26c642dc43cb756c1d216a0ff07b8f8b657ee3cb35ce93a71c87e9a69d3fea09b1e5f2e2ae7a564e24e264ccf795567736a86219f73ae79ccc47f4eaffccfe3f70d69ff2ccbe7afbd73a2c8730fe15c3e13cfe43edfce9b173f203139ea0d8f29c2618c16c0f61b3e8f1cf586c7c8e722a2dfc04133f26e547b07a0fc06238c1744e7239ff5c8741cdec51ec0f892c1cdc7079d468d20b048ffc8de9a1f79c982258f1f8d4e0ef776f12ea28801c6970c5c3f7217efdad3e611c091b7388a778b4ba7496892110cbc29b2ede30edb374aaf74782a65c6a17432026dce00de58903405a8c353507ce42e2e2ec156af8e48960e8b6af1c8d2e13a2ad829e92526a03fe963165244e16dd4000374f1167f79217d3f8658f191cff04b953fbf2046ee6251418cdcc55dec90154b471e676984726971930dab4c1ca25c6c0f7e97919b707a65d3aaf8caf9913fe3a59b6e4c2e53925594c22cbe6400f4d253825c5a461588144a5cacba602b09ab62135ebafc68804c61454b82ad0f89d0532ebf23449eb2d3a753327ef6a084e0f094a7ec91d9d329e938bc86d53c003980c3c3b9d3524b61451d71e38647567f3dfa372e40ea7ab9922de962557c95e08b974e93b02a3e4dc2e18866040190c5e571015eeada3e9a91e3a891d5dfe2339c8455232b9dba585572e99dcb17a58a1ab9fc91e7a8a891a539acd20cc014179b22e350fa04028862238723d98c30231b39747be77b386a648d2287a0bdde7bae0516623fe3a31658987dd073fe790c64dfde8d8a3a22fa117a2487b742ce811c1e8b88ac90779af701e19cfd468dae7d4544cfe137ea05e48f3cc547a451c94b5eb2773ee81d38c31e87a0530e41975fc947357e6455c9820e5aefa60a5006dd893039bd92aceab60a1074fe8a08b1e84ea7a48faa7c9ad3abc8920ed6ea3645465de0055bd773b546557efc7cccf75c11a608a0e77a49da99fd7402c829b294598a13ef73cda5cb8f08ce3f1b390c87606f1bf309a18e3a223a0ec76139303d7a64cd3447568e1a59b65e2aa35eeaf3d24973e7a5d77aa98d7a414e67f38e93a6daceb50767f2192ec25ee8d95b84dfe46d43223e22a49b9cab139cb3abc8545c3a17e1577193153aba08adb8d105151c4a2a7698b64851c1aabb05abd8aed8ec30e930fdb0eaeaa43cbc61d5d5c981c3aaab73c3f90787b75d69a9c0587575a6b35db94991fd70e9295f0071e9293303b8f4142741b8f494a017979ef2c4864b37b5ac4b37d954976e72b1ea06c07db8745312565d00788f1c565d1a5f712961d52d80af24e150ee20e00a237a8ac022888f2f7171e9a6578b4b37314171e92620565d9613c0a59bbc60d59df177e9a618102eddd4e407976e9211e1d24d5f1cc0a59b6643b8749313215cba29a8e4d24d4fc016c966e462d5edc17d48c2aabb83f390330025322e5d65875577c5a5ab5cc1aa2bc3a5abf4b0ea9e5cba0a16acba335cba8a0fab6e0dff5cbaca12565d16f75cbaca8b5517a5c2845597860a10abaeca572e5dc50b56dd1c5c0797ae1263d5c5c1635cba4a13565d18bfc1a5afe0f4eac86409c0a5abc8546afc2e7e2af6d6bc8adbfaf2006fa99e84936a8901def5ab463824dc860374d8f002e870f7a1c3fed0014447c986bd3fdceaf0a1a3002d0ed0e1f5013676b8f7d8414363007baddb08a2d2ecd841e3363cd6de1edc0fa7b146a80f7b69a80e1f3ddceab0f6be78d561abdbf0fcb0574787fbd841a3c30bb083a6006ec3d3c35eeb0678b1b77a106ec301ee2d3b76b4bcecb0b1e3c586dbf0b8bd3a3bbcc5013b1ce0a3c78bffb0e140dca501e10fd7c509608dd0d0860701a11161c943177b11e02de10f46941a103a4a122e296bc37309e06f8dd05b7220806871972028ef405823209802c26d785aec2580a358235c0b4a110e84354211602f10340c42006f095b5aec7547095b50dc86a7087b75420f920222f41fac1110881f5abc08b717c583b84b03de5e02b811a99293ac119a7a92a75c52f603363c6ec343007b7552fe0d28a59cd40002bc3b025cdc08076bdfb0363c57c895711fac117ac387d277007b1b24f97043c6de0478c91a016fc81c005c00e9868f1800e6b0363c9788cb03f561087b490e5a239e10231f78b0d7071f000f6ec343b257084e880fc01aa109b07700f4c6104238e90689646fc94737ec076c784823b7e11162afce0d1fc21a010760afcb5823e00064dc8647087b493e44c9de910be1e00288f003e4f081e638c0e7a51c608e12e8363c44d8ab93c30fb0001f72380f0bf08107b7e1f9ec2d3911f6827e00f778cc1bac114a85acbc9e5f1fb1b246c0a900219f35c2bdbd9ff774ae46b8d741c2c3616d786e02ae0e1e638dd0558c378379a583bd2b8fb146401c3ab4bd27ee089f316f7005582374ce3879cf6e9ecd6ec37384bd3ad36370dc307d068e981bdc86e7646ffb897d867bd608f73a3c642480be0e8e15c52164c565e0b057867bd688f7f603363c9fe7363c09b05707870be1b1b257e7c659385c076b04fc0fd8f0ac74701b9e157b3f5f9161afe7327ca611604411418838c01042046100203f7cd400788f0a00a7a93878012a8c13a0b2bece4896001c888a83ff5061dc87da030f75076609c007507170990ae3abaad2a1e670a45902b0363c01b02b381c4a00d8152b38941e5371b03a3cfc860ac3c3aeb83a257d47c5e13aeaf454c5e1619d9ea3e2b02bad4e49bf51a75db9e994f4975ac36d5416b715e5b5d270af35dca5b2784b45394aa5e1a55ac3c1cae2a48af251a5e15fad615566cc62559ca0ac4a100dabf28443e92a55f433ea56852896e0e44f9563c28d1576f0326aaf208a1f32fc4add4490c5ac0bffea917d7cbd8a4b15ab22638faf37d5f8312995c8c83fcfde9af7bceb95edf90c7fd507ffe8f3b65cafcbc9b4bf9bfbf66e22503c77bd4a847bce7984a34a448ef1edd922fc1ce7449a731519ab545c2a4e5482549efc4aebaed894fcaedc3c8adf152a5eaee0bc741a359e80dcfa980286184af76aca186228fd33c34b1fa5e1a593c278e9600a1b5e7a298a978e52630cafe90329b208237d86516afc528d0fd6f8a41a7f54a317bf04051070f197f6bcbc348786ad7328bda6cc3a255d646ae11c91ac14591797f0ca024e8b15aacda2751b410e2b7e34415264a525807e53642fa308c35f90e6bca44a38259de670289d55da424ee9631621e0792e8101f4bf29b2d1c72ca2f0e2d9de94a097293254ce0b1259b321a1353490748df43e045dd300941eb92eb26420289d5219a9a43d1dad6d737773b76f9123478e1ddbef89fa052f6df790bd9452dbb6c108231d5c02c8595b02bab9a04caf4a31d5b2bef44ec11e2c4141060481ecdbfe957999b8437cf9310b2954f02c787d7ce5e0c9113ebe56f0e4756438ec618643e95eb3643e01ec5b87b465e2ca484f42269e33a8e44bd675510f33a6d00c08460000007315003028140e0ac7a3b1248f036d1f14800e7f9a4c6a4a1ac7635116c3300a840c22c400030020000001323443430502809e240e7b273028cb9cfa7abafa8f94f3785a5f7f5f9ae4c797ba2f0a9ee60a11d611b88f3e380b77fa10ca33e5b894251a2eb17a3c88259c1adae6e7be465a458356b07cf87ec2535617daf6b7610201ff417363c0430d1f8a9dc8314f167feefa4bb8151f98804770a3b5012f4735bbefe1909f351f981a7aca3aa99a0c471daca85813d10a2702048d4dd2bb7d3b67e9daa4b65c3c651237bbdb19746fe966fde74ea7dc13766e9d6deeaa61aac924e3518324cbccabc37b230a35c1e98b912a63f89e2ce401f842ec44f958bb25e1a9c4ea394f81102312a6d7efeba2c288066c269e9dca8c58764a3b5535cc259d404fbbe5422a3a885f0102d360141f9b7030a79d2f1f7950d9ccf08015d6cccc02876ec8f18c26a814480566cfa5d90646e43d2f1f54f8243d2f9aee120034b0cb68c84d126750f84e801c2fb79562c031cd6009429a8f731a27c1b1b9d6f9f8b66d330205a252c488cca63e20e3885d84f7eb5c765e332358a0e4b237e93aee2505fe8a5c6c702c604c1f66ac02eab6f614d1da101d71cb98a25ac075e27410ae7959b0b6ec15bf59793188b1ea47eaa8747f8a9774083a04c6c6d0ed25d75e4039ffb110fab2f1f0ea80398104958d9ff57bbee2a01a830245a47f1bdc877a3f8f6bc9fa799f9c461688ee06ff133f33154976181e4175358147691997bec5c9630aba5954866a19e20f1124bac80f681a7ca7bd6d5e77a4c2ecd97e3eb7e6e3f72b0c9089c42390a4a9eb0c78c9eb23c2b42ecd2901d610c0acc0fa0b3f3c4cc02952760fb27a972d28609820348bd6ad7c797ebeed80237a255894e5af12e8d7529b8b4de731fa2ada1d89f9588aa68e5e22075e4ef7c1d3e113d31ecfcabab4a7f68198780f51b3801665125f5b14badce6336f84dd798ef4c14de5e1598ab35f8b09d03b519c5b7a2ab92baa0912053623ea139a714be31341956ecbf25535e83272ba138d5722e205eb28e9a5ae1c83e1275a31d35038c9b4c3b59cdf5480641a10bf11991f9059064cf7817c7ebd68d541d53e1e1fd60be2731910be8644dc47228a16947e330e7e6e9e0993d0e64436421fcb6d1773f614e8c7dd61693e32e818eea52e81bb1c38aadfc0605b5a2e29db75098bbce0f616ff1f0eff01c6762e894facefd7d58860bfd10bdad0eda62b80fd9260091489403c9f076c65d95c896efec9257afc9cc280a3f09a247c33fb99c46f70e5343c160b5f9ed4c41094bb5f0700351294b20a6331e61c23586bb6c6d810f8fc58255c5cc06e6ec2f260c5f418c3e63c9ea94a838e7316e23a5640ec898cbc2718bbe8b9b29b01afbb8af625763b0a3a8f5b0e783e8383507ec38b8c94d7fff2c50a7bad38d3011de1b5ee0454e164ae1184d257325e57b424082935ae0ef05845329f749c5e97d62c69aaa854c96affa5810d8f3f8cc640400a1bb2a7315e72233f490753dc523495ab60e7a26114fb087c63b45d69acaee1b08ba77c8d73199f037509c966a87c975c5f628c5e6acda9c5e488df01f44428108f738c3063f2910434537d3061d139af069d6770cf98b860626a53ea3a267f35a6aada4ba60b3d4e488b4c569b9ec77c03d8ac1afd38e29b731e780408eeb2e9d7771053e71e5534a06d944f261e291c64a7818b69c35fab0a8fff76a6a43a542adbf1780ab4df2e75cb67fe2b4fa28f2ac19aa259b42f93ccc665f663bf244d356ece7b0afc64921285188fe156459b65cc70c9eb565aa47d674864a6214ca41f0903efda5ce8ff2ac08d7b03c245b98d57d80913552433767388c0b090a0a64853919c06680df1cf0ad8a97956536549bed835791015801f7a6bd42a20eabfd73e721332faa617a5c732ff3b6231f3462351483c1e04e51a783d8ed7399686cba38fb4a91d21f093ae439f75ef99caa58afbc8061791376e2005b8418b6d5eaaca8ecbe2b5f5bd0fb1d1fed9c1a57e63cc2c72a03c67174d43a9860d18438f1a600c30705bf93882097fe66ced31b0d01c6133dfb52d6b4203dfa7c86d11acd54c2b80079ce99ba637de86f528cf691b5487a3e8538be9b1e0d569ffb601928a6609a16e55fe7fa918553e483cdcd6bdcb8756d53ecb35ffcc03620cab5fdfe8dd44446fd387329bb355967edfd058e0147687b755a130c461745be0d32b2a0c7a114a040947a621e18767b9bd5c6981b4a15332ed5a572594201dd962f21df160da67c2005ba51296c003430214e51cc2091a7672d976c9ffcbdfa67302cd2ea098887338c4628eaf4bd35a8633fab1d930dffc3a9957b5432f91213f778f3b8b98c7c7a59cb71e10bad2717ef5a05a18820012c7f35338cbf16e3b86bc89be8df7b93460e0b9e123189607f91214ef670aa6f9cdae21cf44d313dc9eb369fa111d7dd6b1777e7ae8dbcf36400a151b66b415ba5d12972a560e35c93c664a24eecf63bbb5f4fb7d73000c5cd3c344854c2441a8724a7777be5e1cb62d7e1cd495b8f63fff6e4882252827c697c937024d8c20a4c5100f6ea2e0933258e112349621cfae133ecdbdf5cbd406493cacb4d28ac1a6805f949f7694c88608b4e10de64fe69c3c99a323c26a4afac079df3e15066d950dbbc0ab961bb35048dbe1c7474e3b3fdf286c815202f5a34526215cf1cca73d572f5c3a810ed0409796f0d68295b893da01ae464f7757adf22a89d641eb5a18d0cad4ceec072f64b6b07d60d99e4ecfe61edf6b942fda110f7434f5e8a24081f1ad24c4bb43019e75a73ec70fb983c2ee787ae0e847316728d4d0fb1fade96a6778daa3311fea7ec84a4d265841ff1cf393742a578b0c6a8175edfb833a5136da1d32070071eda7302611b6e1e318b5b5ac5a6fa5233fc155e71bbdaefd73007a6e6ae5546c489db6f86488c8b33f7220ef218d68878c0339e4b6c092a904221938a0212c10bf821b559fb5e7bd7867e2d2cd19cef70e44ff3c6c072b16dc20100fab1019c48bacd007e0b81f5757acec2c1882759a5459bdc1f7a2e0a58974229d67ea4cd5b891deb660b43e192647e9ea3b700a5af5f1a218c4fe6c36214c8a947249480219c98dfcb5361200f4dfa8684a09e911195cd7cdf0eb190ca228ff4395e060185d707ef066909be04ad8e09cceed1f5c067338902f187d46eb7f3ec48f2fc81317912f62846e0ed3c6e13a6e696dad8b11a23c84e8057b9c669f3ea607f493a3f2b8f99649bc1ddbbb3faca517fcf293d66061ea88d8430d62ebf4716d6e5c524f7da675abf9f659fc67cbb52125e1fc41a8057e9ae460de41c895c7ab2e5f34e608c89cc2c6ef1fe23eba42a5ef9ff0bf51340d89fcc7e5174d7ac6629e9ba98727b9d090525ad8ea5dbe04c7ea255e21ec7121bcf5f92d678345b40fd1fcbf8992a14a0325ff2d7ead00b660dbd9921204d6c353e108ec8f3d6187cc8e4a07a0a7e784284777f4a34e363d0c77ad694e6064b4368503630d130aa917d56db09408f54cfa8b442898a04490a979a8d9e849bc444a4af289e6f7d3f91b958fca8b22a5f5dadd4f537973a08e101e9925135cd03561cee159f0c40cb0880ef0aea12678e62df434751e4838630d5a4735af0624417edd7ed0e2e4ba81371e77393252e9952c7c06830ee722f9bea2b87603723000dea28d0e02bd4d9d30611621e43971fd274f8ddef6f39916a9adcf277d9a3e725dc6f2280c6a74130c5fc4804616e5d78ea55abf0294fe76570cbadb890d4327dd72624ce3e21559dba363e2b72c6ba414ac3c66dba807152216b41bf4e8a07a19ab57dd6e0b62f5e9b9d9381a33e14ea797c10e04939f219b7341b2937c9732759e00ea220bacebb588fb49c2214d0c9b6e0b52ba300cc05364d131911f48d0ff35613d8384bb57ea8c98db50a4dcb1f43a1a6364725ef284bbc2aab752564c3a3ca9cd47c91ad8de805cfc3dbae548766f94a9adf8e9cb52256c6a2ce0492bbc79ecf229735668843b58ba5d28f1719b65f55f7a48eb48501fe959af661ee79b842a2c62849bc6c5c6dd0eceb0d5c9b7d9bf8e311d1614e489ce7d30745d6e06dcc4d6f64f7e0580b3ecdbf5f7bf0f28a61b5f08441917ff20b0e9c16a14a20b007ff2d7783a0eb8ffe54a1ceaac6c94dbc50d742db975a2c7dc51eef145dc4950b3f7504cbbd0f19f8fdbca4e0d818fcdd21d3e74a60dd643b86bd96a694a73b2d713062941fc4d1496934f0f83ee1ec1ef840e780b300b96e250466ac817ed2d77ab8aa6aa9c7a4f995dd4d44014a25c719db18db3439e052a5d03d70eecd11a47effafa138df44263eef0cbfde85f582dfdd6f70f152bac1286f7f55f8cccf61cf72cb123fa47af751f9a32d2c0db429e68dbe4342f40f46b0ca8c342228e44d213c3753bf7ca1c8031604c7d528456b3b06dd14f54ea31e5c0a26d7814db647ad12a0f3c4cba34e563cffd7fb3d882a7ea906cdf754e745a3a7959600ff5afa9b734f27d83842eca678ad1ec622ccdea8823c3f3176b8efb7115a05e93f0ad50fb7bbdc2e14895624dd18aaa35a7982ba641340a46115a234cfc353c2f3ab336c6dbb235179d2795823391c08c81616f4c1562273cdcc3953e44d68a3ac44324b9713975a9d9666018db023b767327221a197b372351a24effd980b2f79843c50ae1aa0a8973b25d54452f0b5e32d2c4d255be2e0826ed19e6935fd1a5f86b5873543097bf1a29f4d57cc30b8d8fc7dbf267a0ea907015b2de5e74da2d229729db0a126756aa208e4aea62a10c6002f7cb3d7ea953f9be3e910181139440cf6efa64bc77d83ef51da0956b0fa8d6a78ca2d1a881ae2ef19a1ddfa1daa0e0df668541cd1a610e1abaeefb716a6c41a5e91d1ef766b87db8d5c984873f21a4a2e3ffa1e70dc202d20c6e057413f53e0e3b165a6e8feaaa5d5959e90e19533512710b8ad009060237fdfe9ac1d18833c6433fcd360c4defd6216e0488da0d6ab156fd23c411eaba2a67c67daa8e61a82dfefc82eb6666112106d5ffc12ac5947ce14afea363a3dd18587b0fd5ad4f0864d038248e836ff29ec94eb42d1145aba7642f76effff1be747288c3bf95325e68c0d8db37e235012f0594144fed435d481c6e6071c585c515c2b7c52eafc6617b1c311d0e7e712907e0a6123b5add121b6bef703510ffc581af6cf215b6cf17e6312bed4ea02c502d4098e382062fb1e76ab251fea322a831835bca9360252b327a2d74b92ca0ce5b9e361e7b5b94f188a6c8c0db6343b938abe5ebc2393a56cde099717257df680af80bda3a3c137026753674766a877961d68df95dac7ff740e1b0e8c04d974be7a3b6bc26ba89c2e82ef09e16c943e505eaabc79f41787dae76b89e39fe537b18a2544108d30269339c5634cc1552b23bbfb9b305d2e840621c48924aff6cd9596a3f9967b038f4adbb4f56098986f5ee3c29798c1221c3d785ac70188b3469da04a8433aa4c7cde3a917406fd3fae23ada1a48f54656f79b39272e9739aedfb458deded0df9262375d4d4bd2ca67de5d0605cd3ba88ffd93dbf61acd05b80c2630fbb080770cb2f129dd642e9a0dcfe8a38d547b879454120296ca3d12c61ec35581988846555f2b083092cc13a85ced8bda97f6bcb1b7616011da6778619ae78ee017fb0c92b3a701a33043667a8e24d78e152325d1cc50141819436286990b197292fce22a26fa396c0828c486c154ed1cda8e9ae76b525161d05e0c8a00f92bb87d822e38d2b8e638966aa6288bf478cc802e84d1c0279c3284c6e2a33d93a8b5dfe980d1b17dda7bc8182d1afe2524c7736a28fedac880d3e2a8672d5e98818fdfe2dd2bbc8bcf994050363f6f2c146fb6286c408e3c7090c3d513eb82d687b8f244342ea1b1c72eb41562125eb46f73df31d05e88c8229b38743c801665012cca49255865c14aa39a95a4146e48aceac6453064e6dfd03f04cb075dd6822194c68336bea0400c1d7178157d5851ec45b2f17470978d022ff3f7a05e2e476bf494a79928509f286a1cae8876a8e454b92cae3564232877597626300cd44083a4e39b8ee40a3f388c2123f3e0db90f81f4dc16cd1d6463229b0e1cab1e10dea415a74e9d85e4c27edc97c6978eea14e94d413cf18646d82d19f878fa2578e4a83f562315e5295ed549d5cd21b4103a24b291f6d8943bff8752025c53baaf59bef097a794e50d07b8314993f8d3c8a394ff6ff45bcfdaa3855390ec23fa29a4351621a57b2936e411d0bd25ca9a137e1fcc8dbcd782f015bfa12daed274287ac03614ff1d7f2625e21c2a13b2229b2b17ef07a7ac77373999a8c66702ab970e927d7827f23569319de6813b7ce4f281ce6230b78758d8f40b1798c16b81b08b0cab9bc428b9db4e0f7ce05b4448cfda0f86ea49fcbbc64683e617115bd2a77b138e597a3a3c2112da629dea33e01577c731d4565292e9531f27afa3cd5f34ee87bde77a8d395b251f828688ba4bfee7a278ca47a3b1fa1bb0801c4edcea6cfddf3ebdb54f7f86ee04c769c3ee5a1af821220775aa1d710567eb8f5eb9bc859428be2adf4d3b15e33878db4af91a3352f1ab3deb99afcec144bd581a7421accb999e2e07a7db1d58075683b4e9c6a1df076d4a37ab5504be94a0aeb9befbc5c28506cabf43088ddcf6fe345df9b40666ad3f9d371b701e4a067160501ade5fb513119c29d91cea6233cda84a00e64419d8422f00e9ada659d2a3ca0012028a0b1da824eaf56cb4208d769a93fc346136ff6dc3515dc39f1a96be2fb81fc51c139d49f45455b0387e77c4df82c9aa60526bcab18f23209b163015d577364ce19dccc1adda7692c67f62296af3815432995fa87eae8297acba443292cec3b6693e580b5b757e3f9b905d4394183dcee753d5f33ea83128fdac645a9b5550a2412e163d88d04b326ebe7ac61d0e01a94d1bf7b5a1d0cd418cf7554031c8dbc874eca983d83735c5472c99ac4b4ce4350e6d31023666504cc97b908cf8d852ebc339b16dcc5faffdd2d1b021c4733e6a9c80f75d7f2b09990337101d522d2322da98b4686d59887d60b052ca1e01bd76ee881730fa8b012a1c239b74d71ebb8bec23225ebe3fd3adfe6f09b6f7366653003ea06fe0ab671622d4713990efc481912382a0f8c080dfa73b28b82b9b2545b8fce8ac4185c51321ebd0401a9588e6649d0b190e1601480fd6471c4b4c2e17850f72b9e81de177c2fb9058ae4c0d13f59c22c5666b485c703810e07a2b90e05b3224ee286f59bfe59fc8016a1434dda2aae7f11b364083c127c73d71f85b52fdcbf76f59796eadb974a67e81219f101c0cd734009baa7a8bbbeb39897c37648eca284f063890afa16bb556d97afe0b9f5e2b995fd2767a936a27220192684821976434a4bffc4d1cb87fbe57239a0e82579c565824f06e753233a990b2e216258af209262059a978196f54a3bcaf375b13f0455af40e410a096b020f032046cd22be7ca88337d2845e2da2389dcba5f093c8e45b5e5f54c2aa08c4766080416576d6516dc19ed8cbf4694b1905414f4a249e754530d13e96239b1716169118139b4ac9372372b17321442b7f3e007ebe031742c0d71603171e1f19f92368b1490a41addea0e659fac700a8d9d06bc8b384d576cbf1e6439e179e23ba2b45646b42181647bc455f878a66ba255a26cbc09b68680928c1ac6b6ed50e55c3a47a240efc690aa5a18b30cd5b265500a5b405095a75d626cbc742813f2d2bd9efc5f7d44c13bc4168772333d92acac92ba6e6a14c994838d5b4c01840751de368b344037c7c654a9a2b5c603028b5004f9376695ae9df52355432759bf17b7e90c478578ab33745d587dbfa7d960e234235dacc518511be34ec5a087afbde203b8da3a9d5dfcc03e3c8bc18bf36e97d182e0dd53aa1e72ae908f6ccdc3ce8f760e34a98dfb585ebffb211cf7c8ccdb3566f120caac6007e1d753cf3e0e3ae1bf11c5393997e62e9a84598363ed991a89a28c3b0709167c4b3e8395112b174d8e74cb3c7a5b7b5976791ffbb064ae1f4f68a27a30d5144f03af3fa5b41e14b080fe2090448d1c287f4d3d12f00224741df08135cdfa1e54409fb2f6bc7073dede047201bc66ac74368298a350adb1d922dfa76a0a908325a4c48c2942e838a875b55ba589cdf56a712fd2ffcf90e2ad92689dcd82bab0644db5c8e32b2350957732a37debd1431686a0789f5d3c29661c10bfc40a6ec2272787eb389b1818669b678f0cb4afa1ac610ffcb8010cc0f2b64b5f5de43aeaef0205d450e02b4bdd94cc47c6477f981d8556cfe77e12b8987572ff8fa4d698d297300231ae02a34cdd374c8d001d93db26791cedc04780540527f81b439e4491a983c6071692e7a915efa82d3175d7cb904ae4c80b3701a56ef469aaf144c33441d6b00dd61325513bb468e47d3fdf1f79718420f2850c04c0a7a8485d955e6121e57da7b5b8c9b705535309c00ce9fd0aa8a4239183e1f473b765a2b51646124863cc5a393e41b39bd6e261f66ed238c3a8adc5bbcf567fd42abe68396008ca25caf4281e7eb528910bc1292e8718722177566290cb728b5297f219486e00ae25c223d070379b1cbc31735a72a175f1040416a2e5a69537d86d1364b30b42dbe45aa2ada5804c6ff891b9a406d2ef5a622deeaa719f0e2ff1590953a4c9b246372de2d82f007e458d9c4dd1454b7f0a7bbe87bd08414f73fc20a3fa3afe71dada26bf54512093d3fa45c8a660020a8be8ae57236756c20e2bd9638ae22017dc6cc236d423e40758ccd85f87105e6e68f17fc8ee137005ca53eec5e62d1888a5d1e03ecf52c72f6128a1393ea257e816026d9eab7b8822979e6e4d3ca7d603659a90617610a974ed219bb8c071524b7187999d52ba129afb43bcf0afb5d7704001c0888d510981d8a1ac1420ae88159486c549573f956965442cb53f56612cf721f2e2e6969295400287b686832b81be48df362b3d691f0083a0255b4674b7cad2ab2e34d312d6d3322fb66e45f7275630cf85b6230e1475026331aa24118ef0877a4b5c48ca051ca6aa0df3c21f673e513d273a22cf139764db390a67969062d9ffbdea4c898010e1d84a18fbe20375a28fb086b1f90f69377741ecfb50d4cdcd2f292ba596fe5c5c113ba0e46dd4d854efa804c07e42b002e730b8486ebea45da9e4f5f4fc527afcf05cfa928ed21cf121d63076c921bd191776ec7b881037aed4a954b37beab1c32360ad18bbe2e1c11a6b000bb9590b20b6057738cfcd5eb0588204a3f4fc1d831cb550d4064b2ddfb150ee8ce95459fa3361050407008e5b3176ac43380b3754acdd8da8d8c4f474d864647367242ac13ce57724ab33bd822dffdc7607008152fddc28d405cef33ca9986df47421e3269d3a8f44a96c594df2182393c2c21c2a7a13ec388977a0e8195d39070f07afd812079f957865e361c9abb7fcee4680db27ebc2da76f7bf785a5d4b6ee17718db3e8ed6a3001edc00ab36bd96e27f1f34ce3bc21e6fa83cf4f543f2ca9519a918477a47c0cead2e6c6feb0ceeb412ba1bb32328cafe3a49becb488401c5fa6e7edc7873276948737904403f2f602dbaa8c8b847cb29cbf92e8ca105b83de761d4b5cda24cc79b89b050f7d6758cebbdb26d2050abee65872c1c44c34b81c28a7e246db610936670df3deebe3b3eb522c78f940b6eeb16d3f6bc968cc2bb0451634e901c2943ebc3163c67a81002b3d838d310e5ba881ed830afcefccf909f77825736d7a124614a7ddc0353990b88f1583aa58f2cbde201aca960e1ca1c9b8ddde932cc5bc5d051c38e5861b876ea7338343e02650e1b604b8ceee67420db0efb3ebd2daa5d916880160e577ef46df0957c66708e92de6f92bf720dbf9d0f24dee86c784cf52d829827d2fe5788e17335c9634dc5d3296bb810747b10430a6a5841d868d627662902af3cba5b85090bd0308e5708e82de033ce1b06819bda6228526ed24827cc8fb61c5b1026588ce4923ccb739906ab80cafe527c4935afe14a1398c54938c350478ea7bf41e10fb65e7549b5c2d7d58cf616dd3c7794ae103457ad3921b3edae534faf54c5fd9e6d68ddf0f3e4b41b221a8af34d08924fe3833ce88974795a2fd801d369b9db7b7ad53a2f8370ed11ce787acee7c43025faadff46c721d22836fc53a6e1d3b70cd20a30bf2a07f696ca1d798bab37bae6dd94b137d5332bf06a8e186447ba56e03987ab91b7f1750dbd911e099a4a69b42282f6d01cdbee7bd97ace855f37cb7c04eb2328421369ba2bae7936b6b72bcf5014d35ad97705f008e3bde60626f207197bf7573501c2124a451d225c8c6b077b81c5eb82076c2ae7967ad752c3d177d42d388b3d31607d86e82473ad1d78cee801a50873080652cb6bde701d7652b0a19e69809181ee6d05a41522805a843dfd3812318b1e9d5bae0369ecbec7515882f2e42043cd333d3f46aef3e4c85b4ae63ba797c891388c7bb2420b1c0200801c8a451cb06d97a3f5da7bd1fb7642da1e52805757dd168f2f588e36e20abde34e1e9fcb466895405933a73620626528d7c331da979dc7afe18af33eff5843c7afbfd0442ec3d0e5da81384de5df609f4bdf659c7f66e29646d5f148376a17d3925b55fc00f632f3184f966786848c01f38cb6e1c02fb3a9825c6c6fe171cfa031ecf3e656072da1b4680fd626fa937870c8d35138b56e6532e279f20c7abc4807f33d34a26443ccc8d9e37cb8bbd79fd599229dc5b2e450ddd45229fb408e99c2ec7aa598e53733b7bb42d281d40dfab01d20961db416cee17b9d0fa4a97bc8ec17d2e5800bcc7752c8ae8a6ef3539188a007bb6515f24946e1d2f1016489194f534e0355a0cc6f490882fdcb896c2cdaa2b719220c814406527ae1bb4af44bb98745cd0b5982ff28bb36bb5a103f873002990fa2540e922249670dc3f4a89f46dd397c62f20e2509887292095dd9324908ddc50245f3e777994d501c603f47abfda16be925a2fe4c9db91100560722bb5a9b9303befb010b72c0cc6189d7160f8abd578d508011d6c0ae87a3d19d7f13541f3e50037159bf5c8286604edf6f442ea096ec0168eb253eaf5410b39c30a2e04bb8dd4144a10762046821569055fb539f4208d0feef2192659f1734abd03277892ae29455a87cc921a836e15188e1fb8713dd24e12568449929ccb4b8608d09b3c7f6e8b1c73e1d05e59efe19c082c84d760235fd4131084cbe1f04ee4053769a0f972dfe3718e4d8464d97277a4c441b21a6a0cc502980d54cde0c204071417d4b16ebba638fa048662e4e08bd6d9c40bec96f184df22388571c28b51124839b63d9f0c949ff6c3fed24c4edb5555ccbed5af1c8aecc1952b30261df1560988de8b62ef2e217de28ea80a712b597a66b022aa12688c58f6d4769455b10ae6df45e82e9edbd034c4ddff5001df88df4a9d210b30c6ff9fc5f38dd5dd4c9c98281f069829825806344f2ac8b22325eb313405491a3d39009defd89e9c6c974f46d4f9c687fcc0c10470005e972d266604aba4c13b8dacd46bfce08c5662f5b0324e502e700addaa36fb237f4765832211ab8ff3adc3a4b4d00bcb0fad674870c4453c643a88e9969fae768124061ac95c2f81f647a7e50f7b249ff621d240153bf9bd40dceb873c62df9a35d32af42e254414a9b3a332f3408e8c811f620805b8c8265df26f000558ff1c8c52b51f1dd1b7ec194a3fbb8d4a3476802bff922677957446926381e7151da44185e4d374a3d7c910515a07fb573a3a8f9a42efce8a29ed22bf6d735bd5b7452b075edd79ab4524514944999ea9d6a027a3cee93c050e51eaa2a06c20c4adc83da7f11e416478aeeeb1bc4e22ea795b81ce195a982dcf4329a5a0026857ecbcbe3b65b008b2d3a341681b61d145729bd23c22f330f091a46a0b380c72468de105c13d7e6daea26090340c8c78f838ca4d154a2d02dc1471974f36e3d18d98a1333d059ddc60d6d86ac8b300f7c4e16bccab86c6560bf1c04142e1949b80c7243dc60cd68fbadb110548fc81ac943abc4befb33314e6f66f52cce6709b86b68157c66d9f4a28d4ae3e4b08bedf9e3625d3ca683386b71f263d5fe0a26b07d518795518028e84c107cff0156780de7245af19ee30bcca1e34cd34c5d5fde9b9a2c443e59b24bf9b543c3e9390f1b05a47288dd1a8beadab6c53fcc95de41736f3910fdba79080dc76c779de824738b40e88c0a8515f6e3493b544d4526a2451fe47b3f6f8543848185696918f6a372f97d0c4cea59360d41a84ad7c92680793e35bec91ae630d57d7a62128bdc79c82844535cc6ad370f3dba3332d3c5ec388204399faa4fdde3c41efdc4f30f09502206a7d4736959841bd68dc71fd4baf97e6b3b2d0602c0f78c58bb4f69f7273eff8fa59868c174d84f71204f186e4530aad987ebc5327b60bffe9ec1de5565f505d230d6caddc213962100fd2060616a712dac98215bd3aac9c2c449c49af7e44454ad24081b3c5879375aed6da3635ff5ac6def1088b75144732ed7a3037f3176e0f466eedf032e80dfcebe5a8e4f46213f0055b126141f1cd4c1009b9cfd9016a7171d0e74fdbdc8747463bfa4031d5dae58ec79ca46c81199dfe66b40d7a644d6d539d51e00d10d1e2a4b971a354321e09a27dcae6d3b2842448bb1a1711dc0c835b4fd6e613d370e13bc424340d9e24179a08b0cf68a682f9fa3b581bb7a15dc245a3b34291231752182fbdeeaf0ad701b5964612437b483291b8e5031ae8a7139ee1e9fd95ea02b5016b185c5930cc14fb59a6557f3d9656b87841a9c73d2631e41bbd626e98b474d7c05bf6cb2bbb8d947bb3c7d0a52e2433f24d5cf8cb4c1c25c291031630fb7d24cf9f67ea31619d7bb6ece7128151c8ea8dfe20532cde6bc7b94609dc15a6c6b14f438cbccf54048bd6bfd43adc4711066f2b12eefe784e67e74e04f412891660db4e4f360fbe2c49c037f166e74fc8a6b591277c7ecd498fdc3ce5628ba49899c440d74bb215abd00f6c990b05ee4f66895e350329876195cd02abd3072ecca6abc21ff45e4d1d7de028774edc2d51a1058185a88810f5f510f03b67a62268d03b0129d2231896ecd5f7be7f2c141cea791b0669035ff18098d1a824323f2af55336fd88dfae17afaad8fc62cd392b2a35d13f74c0f0c3bd413ede5f563a350c8d2ebac46d9ce49e8639c4fcc70ffc90734b9bc251489959ed79b6be7bb4318700612e34d4d88c7148ca13a1ae03db2f90736be5c922a05c622c27d67f9b6f55c1f91cc56932a36b740a8781ed3466c6179db00e1d5890edba24898d06a3c8d5653b395b924a8dad5b95195938cd2d84e5e27fa6674d44c71414b53931f12797c4090d90bb50b11fc6370d985988e0c476a135f9420c5d912f9137e4eeb3893794e3482684ceb560d3e372caa872231ef913d1291b8f6416a956a2bd10ea9c424c5b89e471183f5f8a9622db77643de0dd76599497e83fa8995841e455775d8e82bade94975f89d91040b206d420a0c9cec19359bb6f8b42b9fc39989278ae3d7e776e0deb6ee6c02919909a4ed89da247308cc15884ccfadb0698b1cde69a521025106363c97bd2523f9f05739982eb0957d5e75e8aca63897a54637666ed9631ec5854cbe97655f2b033c28dc6c76a2cd1ed651ade8118b271ecaf34896a1ef3222c344a06c0425c8d52dd20edb8344be1620ddea44beb80a39e66a6203fbd1d6bca57f503fd98dff73322a2078832fe09163803cd1410b1485f60ea3bae971f7f7001b0614aa7f90f838f619a382abaf7c0822da6857e2efb4ee4459ee2b71998f88821e1739a5e2960c8cfeead96ca798531089181c8061a47179090b23d1bccd40dfa7abda93d09281c9306a297e292ab0795a5ab069d1bd246769c1590c032c768da33028e009fe37895f443445e076b2c4e83472a3eda0a431245ad1115c397aa9e826651531a1066fc64e0fe7e80d2494913a7b7e1af0745ebae39c77e30e217b3481cb4e0f80d88f44b1b64870a1bbb920484b56375fd2d58a42016a5c3f26d6bac4939456c0945224b9663115f8a9bda32d189b5d0004325c85647155e9f8369686300d6fe49388e9d901e94608959232c6607842b82aaba4183ac9b1fad93876d2219c2a293f9658835eb7134e8483cdea2b6f64ac7e047439a10c2919e32ee37a00dd8152c4a9bb38d8a93b3afa6802b1debd8c1db9e8e646c1e6c225e53f99d9b3d904aca0ade3376fd9fb4ed7e8b716356ddb8f0906e3d7832033a41b07a895c2f49e18e5086f8c3caff827281a920850f2d130d967df6b11ca699b83f3b4a794718d1b4812b60f670a36ad084c675a19715205c6d9e4534e08a1bb529946afe6332db92c1c2da84cb46f0b148f27c24ad7355df3004eb080ab245484bd63288b4f45194954b390d21364065818988638b0387e40711775c62052b8158d55cc04e40f783bd901159356dce33c03776baeef32d84d44e0191a6d0de1f27694bb70498694bf83fab9cafafd570342026c09574fda25d4e14a38d3de76ed27f794677c44d89378b2063e56a5f94c49d080e0a880e50a5df8b56753d9740194c8d86bd98c6731300ad0d441d08407aea4d39d541d8a6c2acc2442427a8b481f1eb7d8f62f3022b1cc5b5ca82f385161d32cd192984dcd2ddb460003c0272c1c3a1a3ad2d7a1bf0d279f6198d21a8ce889d0778867b56e0749369abf441344e1d81f59be1a88ff6610a757deed061e524fb6720b90eac453de73abb525c9ecb1cadd4f1dacfcb097e6654a56c1624b48e51b5bbd5221e1080795ab84b6e248d7f1e3013b2793f7138d479bd49e9916d388354d1838dd7e2aba8e6576483d1f6df894bb62db5afe3525a9b6722b01dd1a2963995245046b1df8f4ee0297d051a4ee9361d7a4f139154a92aef26cc0f149e38bc366c64e743e733f3b5028fecdd72299a92e74bfc341f17a2e955365657b4ab4d658441dd55f84fda0ad73f4a913c37e5461014038ebabe42230f5a4b576f6579458db46ba4e90d422a8966aec45b15a86bed4a1286a1eb4f0aa22dd354d097ddf8e477188ddff4537efa28b842872b279b987aa7658f1b007d570ab1359e2503dda199158148c50340764e020385e55448b35ae0f662b4bc86acd10c1fdaf13ee952d5594080c1cd73d3e94b9eb848f6772ae0fb8446431865832727ff775c6dce9014bf79ac8074fcea82768bc5be04473e828a91c31ecaa9b2e81278f7a09247a80117b63e4004689b4d526e7be17f5d244b7923a4f8f3f713a850f7d6d3fb7904d5996c0560713c5ce58a65f76410481e5008a3b4013149864ba2967bae630b88610c5c6f4c891e5089dd7f73b2a58e7316706c5696938eba65871b07f1285248076d5d9c3cb512fb7fe49c785b9cf5118a7077580cfcc671468488c03cb68900f784a746910072022d67617b1dc3b8964851beb6dc2530c80747b7ba4f6a80ad5977abe350b193c8f7177cc0a40b0198b27b8d86a996eeab8edb8040a3b58252ff156bc826800fc6ab0224f1c81440895efed5148944c07c945aca865e7f3a80340883878758830ae7d72b59327defe294278616c4b919b88c5e7eeebd8bd6d0509affd48b83985fbe0265be456557197daca1e1d2a3fe0a033afa1d018c850b522d8067123ae9c5d083b5a0ac469ef687fc249544e24d748ab508daff3f074a30827bb694820af853f0816d76473f730733bf088070782f99d46dd938ca897290ad7e35078277208d2a44fdc686451293bc8d5d606784d954780eb44a0d02a86cf979583db73dc08ac3117587ec40c5d9c6ff51a092137070e826b480a7a1a3363857812496dc94387038a22e90e98f70e0c3878c0b007023cda36e2cf03bb9707aa4ed71b08c66006ebb1e40971903080ff90943ea8bdddc1c7001d5c7dd72fc3dc922c19b94943c80c8344ca00aefca14a6d327b0cb16ab903867bbf3ae67eb952304013c72f12c57d035dc5fd653206b9e40540b5c4b718345310d40c696ca1b023b3cdcdec6149257cee1e116865e0e7aef98492e8a6e82b6b22c28ed0a98541e18512a5a0a8500c454a4d7d760841e66fcc54145180c3aafa08f2e912b809c2b80d2d263d004419f8f1fad5e038bfb05ea1323f2146abc037e8adfe133bb1d06261302ee68599317bc83d30fd0b7612208f5c798ca94f00b0e0136951c1505a34f2aae5be9fb687de715575206c03366ccad3c67cda76fd64c4ef4b554897b10c98906dfb54c05d8d706d4dfd50a6bb11a88787510ead40d2d46eb7aa131425c02719366f0b3e0ea72ea0117892bb38e891aa7cef30902d09bfdbdcb8315dc7cac6f53319dc2c709f86f27846a12860d2f7ef20e9f747209066819ce2616848334556f60a59b98aa0212073ae8cef17087e5a4574548fea56900ac470f6f6584462b7c6288167f55e75378702d7323dc0098a1acebc0289fe3b636bf40a5589749445e2111e9231d850eda0bb3fedad31baefd4a5be0a52caefd4b926edfad88e7756d91c9d17fcdc3febd09df8938aa85c7aa73f297b9a8776ca5c6bec93f991626aee9ebe227db78c8972254b807094bb7b80423843dbaf7edc81301cc14400943da6d148da4148260d4a941b1196632e2b0d738837a9dbe8af36e13f8434464b3b625a926183339eb0fb10b8fc3187d03ec48cb48dc63112984fa9d6a8df2d7bd7c2a4914abb2aa9625f311f8e92a5427d0eb4392875e420bdf4f9f6f355a2b53a8acdec346d67948e906dc9c759bee3a6056806629b1df60d4c1b95be30489b66d2a201fa1696a5c4169c71c63193f26da6278340d928d380d739ae9f37509e3e5c087c411b64f0327fe4be62ce0f9d6323086f31e19513d6374494f8fd136b015ded1a69a59264b8b1845c723fbf0783122b40127ac3e148ecadc06de4aa6d391cced588cb60a3db1b872372f99c6da06d98a94d05676ffaacad59814264b96297f876695b085316da1137fa40bdaf37acd846d7945ec6e667ad67cf5921269fb89d1493aa9ec9f1c66584a908a03b7000bab0028026817119842b7dcd70d8ed32f02106001b7e1880b6c1c1007c51fabbddb270dd3a79fb97657597ae1e6a500bdc5ec4c8ad39589f27d343915bc238ca11c8f69e369c8e9f92d0941cd64a977c6ff38f307deacb4991cf17947c8b55193698c1f1a199dc22e186bb91d2d25c9459a03ea621bd1d31c6950161b023c32cd3bd11f8235e1463f2702fc0e00bcdbdb361c6845dfb8f6e89c991226e41d12aeecd86a60fb971d9fc57b4c5a5415257cfb677e0d47ace3f12458aa44f3d1871c936489658625044dc375d86f98c0f08dbcb7d275f52c75c16a00ef19e4560c339d4e64fb74bf6ff8e92a60cb52c7421eec975368f1a3a3abfd40b00333133e5048b89c403cd780f265f816731ebdec1c959c484fc79bac37cc58f28d07328d351407fae051d765113edaf60d147bd9a8a1a9f43e662a17427a4ffcd3fdc942c8a324472bea4c3cfd3e6b8af7085d14b56902d9e9c0bfc8baf0b0d7877fad178fe2828e85a7ce5c7005aaf4433e8c27cff05675d5ed56c431bdcf64736b35760fdeffd176eeeedf9708ce1932ea88b3eb3df486605f5da3a37d40341a716531a75b98b8c15da97bf729024c8beae373a58bdcb2f0ff66c202ef5a85e8e1d548130c79a00d9e4e1b5b823cf181c6b55fcb94b569be477ff57c69f36f5c45dcdd121104c12c320fb863cbccc178eb2fcf9e7de88a588d819f143fc899b003f07ad06316728649024d6fb2d20982fac8eae314209301898bade65b5f64263241df98f34e40a26c8b4de1ec4a4215a03a92ce49a44708880fa0d7165fe1ca47100ee52ba009d992182c1ede62a3a22881e6620495700015bdf1d3a3f911844a7239a280241b441c52df96b89d9aa850889b4235a97dff5fb1ff38e41146979f4cce975e1d48a71f8bfd004cee8599d39195e4ebcc2df8a3ba1f0a9ed019f6a6e9c7b20bee73e70655f43164f012d13f452f7c6c819a4010d36bfb8711e241c05baeee036405881a54be8bbf019f0f65cbf05845cc6ad07d7f71168247bad56c3d2162dcf88f01ba269d4ff8dbd560966e7a2282df5742544b79d0c9155326f163ca89afec3f6e86b18f55ad48a02e2e8e54fe8c90e8c7806a7f614ee3a4e73fa3a37f7f1d7a3798b5df46cb869e85399c43c7d763dded14e130ea1672e8fc02e0f71408b0533fa7c4ea81cd417bd46124b8e7a91d0478d431bf950db6804313ab1be18395d218f7af332e243fa8ab3315b6f86afa6f101bfa4843d9749eecc1597ea7db800e639d7d90aa6456081ca45eab1509040c1fcaf195d89f33b949d40c3f265bf3ce3cf7d957a4dd208a798f63c5759ff744d766d9c69122682f8c07e45d3c2c728dc1401c2933cad3a69fc0e75e56044102e3e098b4691a995637e4344a10c4cb7a1663161da2861395b4cfcf2e36d4ede5030ec36ba703da8201bd93f067a1180eff2574f6afb306d1755db964807886a34c25e5b48fe0e5fcd744963c0b66bccf479d7e965e4fceb2553e4aa05cd6d26d3017733ad6e766508ad313ed1981e45330fa0b3b70a8f70b31ddb6deb15719f860c6f4c90653eb4eee8f8065b73bdc70e10e14e60fe462c214ac85af9f60e900ad70e10a89a2ca1b9438c5ecbfaeca0898e7e8ce5c581dda9ff9cf6bcc5de8f11b4f9f27249a874adf6cdbf5d687e77a01d0038fc7274322cf90469a91316f0dcaf0b9e19540c060bf6a96ffd6127ba4c7440f2d4e32581070360fb4ea5a3d4cb0066d2ca31b7112f18fd32111a5b0ab600fc171fc0a3bf8e048a9a865d61e67a8ce1167d182472b9ef99424f6b0ad007747a1cae5d94bd8f44758a6ebb3046272621b2f9ae894adf0ed458d09af395c58c9730f428000897fcba520bd50ae2bd6f341cd5e32ebf7a0e21818e419d96bf3de2c1261406c246678b7d43bd6d6a8235cca04ec61c98d68b21c4b6852765d2a6852c17d8963c0d49c32318a518644463bed048a491584cf46a6faa21267ae150122bda7fa070f3587f4158e5714017c1151883b7186278385a5a76c48042ecffdcb2361c454ed163adb55183b52c8ccb4cc23fe05a067d6de73d5e8863038dc72a62be3e46a00f14ffda0881cb2e93685bb80b9744a3894b242551664a5e9cd31153502f3b8439a73134c8de46f1c36c2ed5a6754c0d875f4f15c72d38da812f9a528fbd0a16a94dbe214f147e87edf9b3aa94afb840d011f47fb2444c60e675f91096fc00d7021bffffe3f66985dde6d247e288afdb2c989343a8e4f8e126be960f30dd4606a8f80d50c44a10afc91d8c25bdb06f60af4f991eac698f67aedae0b043c11ade3f02431de9f9c801b8775fde41f28b39634d8bb9572543ee45c9d3fa722f2788fb9cc64e6db5d19904e723afa51e6cd7db2f86bcd303738bd08cbccc55f0926b4365406519c8619aaeff0294b68d52d748482c72fe6c5ecc2d2de8b390536b00477701535b97326a721966ee047b2c119c319936d4f145e2a21b13b6ac84813b9693026caf8bf277f856a8aa0d23d187cd65864a5020089ad8340ae1f152420c1782269798b675ef9bc8863da0208d6cb6e8ad5d08aab56806839ae2d57828b794d2d925a001ac4b11af02e4c45ecc552a8f6e5888083fd87a0f35747f2dbbfdf8690ec2186b3ef3354ee9312908e2ac9a65a6cfaa60f37de3f9c0915c94a0e7e3cb15438454592433f049218937c3cfa1598bf633c01472a373b96ce2977c8e7e9389161b7680549e41003782ddfb856c9962f66fad75797cf340f263fc0d8226eec440f2b2f46a68c964503fa038060887273e2b5964c4c867e59ea1ecec2ad4c912a7578ec6b3cce5eebd3bb15e8b9f991e36d4551c2417c70dd85f48c4c124a60ffe10f6a70887fee289b21073f88821837ad4116262e002c609407092cd79725628897924528e90709961cd01eb81d77773d6d5c06704f88ed2eea5ee6960f667993e7498e42f4c61c51545d663f7eb36e283f5e02ab0fc6871f4cff867a10ac5994fe7814d5035805f3ae4b61f0520a125fcf55c76834a8cc3c106f668cb0b9f6e13ace8871f249e819220588461a60748d6ffde284d015c874843771710446738f370644e16691c5a275581d949b25dde575fa33dffdab7d84f2066991b1f340abf3ccb5cdff848e799b15d2ddd32ff11962e94019dce5d5354b6052ba34fc8e458f9ad8539b6636dab8859ff32988537a46c1f8494fc17224647da507716a6a28d33e2054c9313da42e06208e2ff0aedf37fd103bfe20d6a188f9a42521e094e784be0b97695f9155992029ab7c3f666a2bf66cbc1e7d67a0dfd2538dec3b254378b333a03f384e3bc1eb167e7774cb81a0356c93e664587079eb2df28716e64acb412703e0d8abc6b7fdb535efc3875243f0a5fca2dc8172c728c18956c368c15af5c9a6f549717310706cb5b86111d3125bfe524425d0df92e4649436ce8610553f3ac871c38492df453c8cd9209e3073f50081e288201811f8424a3e5af625124e82587bcdf17a2f0c8a80185e882a572a1a6371a54c822f02e7e8dd4bf31ca132ac067d050ee59f93a139c1e848ab0cfbd4a9f4bc2cd861e52f9dd01bfc5b9114a5fac22f8b320f207b230de0b83f53e07b87ef67e96b0fb129b85a26231e83d85b0d6d341bf798b1a12a1d7bda88f555062f4fa5f9865140518d5c7ce606fd4b1b7fd3c186c03815a7adc436b00df54724750d40246c558863ec5ef91eaa53175343f74e27b212744f1f7091af063c76b367d6dd52349b3155559cceffc506c51ae888a59e7383e4505eadc8c287b8a90b709e26318f23e08f28e4f8f0c1035a48f91e98b724aed6679e6372c54c226f6abfcd6e9971b0ed1f3d309bea5f311545fee3bfe09d59cc395427b02ade9cbc6a213acd6beb2bc94b3cd36dbec33b638390c8a07ba11002585afcf13b55d8de881b3fe86882c5a288f086b062605cfa3c308987c139e567bf26a492c4851ffc93bd7e9044454dc42ee92d853e23633f9de2974f7443ec4f240ac1b90ef8c0b3ce0fe7f6b01b7e5db662ecb8b413dcfd4715b08c2ada7f8db45f885e3306868fe489ff26ebea1b79cf158f8c2c2d2ce36d3d9b398e14ccadb9032083a7f68e3872d465991b57311ddb631fab97ec7a77bf564d1729bda6d347efb460d159b206d2f3c9924de228955179ea36fbf4283c3a7edb8b458bd8532bee74a5c4665b94297840dbae25ceb1e4e1420fb4b263db4cec0e11f213bb2af13a3d53ca31a8a2372d4c668f782d3177beb289cfd2e3b6ee39d5ee6861ca9fc6cd97730449a8a2abe09e9fe8227476f6d2d4cd53dde3c83cca6c264f1846b7208b76cdea7bf6f42cd416a87ef61cff1b43493b199f7c0c04e19026e3cfc889972b2e58252fab0d5ae78f35c4715982cd614ea4cbf80baca4c6f16a86607ec12ee2e509b92339db3ac69d76ccdbb9502284ad5855f0c40c60ea4b1708daa53ab2dce1350a181a234b04081d40b5bfa060dcafdc45a2e550e33cdbff3799fc0ee35c8a89ccda0ea134832a18ab427a34d93cc431f93e7337d255597d7d710e1cba6630231a081a543403e5c73a300776fcca85ddf4a55be2b5a920a9425956cf04828349847a15fa8a12b7f78795e6b921eae9fca00242af27060bdf1456f7d383abaad85e4cb0db80ae206427d6f88e0263cad27b9805a304cbc925b020a0fed33f341df0fcfb3ee59106006f74dc164a9f80df78012dc6f0c34a3a932e5d7ca9833e86652195e202cd65ced84076729588be0dbe43a55cf77eb4054aeeb09701dce436e0e682ba95545460c1903245ec1cfd321efaca98e8cc5f27cd7ca34c9f781a48f6378452a5cb17e3c4f4191ac329a4199c1d67519ea255d7f5aff5141ca3aca8d280c399fd30ff751823c6f44763646c4200c1e083b091da7a67e9c514566eb02c0772ad402c7ad0c7f49c4b697be890bb20a241264ebabd300dfb340d89d7a8a84945b4568b6c2fe5f21d61f5df95a69316436f670fecde4093484db9bd90e5e85cbf9a02d4512a92afffeb7cce1c1ea22a8f256e87c5c06c218d166c0c30d06af34aecece1ab08e43e754b3de2932b1c595b3e3549072bd8f7e4bb249490c4d033f3bf19eb130feda39b44882ab31996a77a6776ddf645b6af2409d5340b8331b060917d622564cf17a0d7444c913f2d434a03987578b62ea9dd38e7ac20d79491a3fa726077b3a70f330a9d76005982db370cb27b818a8f21cc5968f5cfc1b2714b3b2fe71730478475d55c1e7c128d191d060058e5e24ed2873261f8cdc4c03ee88de299c5027c66784470f30f44d50f021f86170dfa7207057f55b57113e1a4bf09056fcfd866b6f67d39cf6e18f3d5ef4ed1cbe890477b91bea9c7775221b130cca2df48c0d394d7762272660df433e656875fe927be677167fbe82bac7220f747c7c24beef07b02f93ea411302e448c176f407e65dc4a40ec334891f9b3cb96b16ae61bb0a64d52b359ed546712081f5f9c9c3c9f06e11405b40da9380ebc900511184c38f280fb10b57035eb7c4bc07598013b805a4d13661c14c5c5a801c06557876a89596d5ff588c57b7ef230d8b58196a27f881d8b28418e7a5a61455f39b75b9896c5066ddef82856155b9fddfe1e5ebb156129fcb4df838cade301d73115e068aeac04bb63254ff2e8367e0ca160654f02a2a6477060ad15f6bc87b1d9823a97d103302317b2e8997f147c633a337c3d4ca2e9509ead0f097709890a2df0ea9e2de2eb5012e989e7fe700bdeaab96320df63542ea39e959e0c8921461adf5be8d8b9899459086b90ca6215574994de68247723022f84d887e51038f2a79635140b35393f5e40b2b20d21efebc5e9c7e2563c595cc599829202e95ab9f3ee469d51f9cf120461ba28dca06227b217248b043c00af3a5f9d8cfdf2c07b546fe1e4cd8589b939b39ce6e40a84ec5d0ae09e4e9ce0262f8bed37e26d33cd39d1c04bcdd8922cf970b62bf0578013b9e69f6e7aa8290dee2702d27a267f932e53076c68eda3e0f2051d88b9b1f755b0bec88cbc6bd0c334fa8a387d54792e5b02b0dc8ec577be888423ea456609fbccd4e35908efa7114f33625404715768906012ee8a79a0f8be89c1c490409663df32cf6e94b11c06831f5140eb7a010990d1951df883800b97224fe01afaaf1d00f4cb090e9788a75061d3bd017488ec70f289c7c087a57e8c0410d154095df2bb4e302e879a04b9872acf3877e01b3ce5368fb9c4390d91662655a5f1193ae066c6a4a3e4adb7f83760da01f821dbca6059a091833eba2eb17454816813eb1344bc41ccbf48fbb8e857d5ca9be2dba03078bb585a1805d04349ba746dd8c7cffdacc658dbf305f60cd18fe75c0d92d650242b0bd08b45f97f9ccbd46f00cad29b5bf7866035080e2bf500b716a2f994e6e4a2e5714e055b12c20011f0e9fbd0bf6470346b3046c1fe605b0eb90254675c9b0b08fcd08b6b0a9aa5a0239aded990c10b924e61b49eadd55ff50e0d4d421175d31dc88a52479d3ab603e5dadbc3ab9b109c73bc4f6b2de2e6ff8de606c2015ab205434ca091b46bd6c0456d573595185091b6bd1ebe44f19eb373d4ae54e127547365c70030a208dbd1c615509a7405ae3364c7abcc90aaeb9e1a6f5e7a1655164d529d6190a17f55b8ee198ec3ac03b9d6aa149fc88a527aad1e1859067eb125eb1087988b0bfe4d7826072be941f28fb7f46836bafdca0b1051026cdc972d0cb6a70e7279f04cf97ac5bfaf19f541341cddaeb73c6dafeb6812032a5ae3d87bbb4613ff18e5f65ed6c0bfcd9429d4208202d8f49e0a6370cfc295071e4b37d2767cc21e89207838c9b9d8497090cbec1507c8468dc14dcacbfb70a1e607c03c952d45735784b64e54eccf8e8662702446f3122d43ad075e81a61d2cd022045f9868efcb87e1341a8cade330311eb6178f65b0cd7595813e102101722b0270b2a29348c7e0bbbb0ef3cbf5caa03ba547d0aece59e12ebf2fa7c7ee56d83daa261382d1a4d2945dfba625e139ac139873c15acc64c3bbf18c47a5c2440238c09f3c7f41c605d84276e8f5b5e12ca7d891c552264a3498cdd7ae6119431ca4cec134427d11983dc2871bee8dcf42b8e6a99aeb9893bc639cd672d50f77b74d17ccbff26d075a9721bd5096430b25bb3242dc350d6fefb8b50e52660d1c78dd37193df208c9bf6861e6355dcb4482cfce8c144dce4dd70d3feeba794ee300537991eb8a9a84377ba7b8cdea6af972c95f2367de775ee77fb5392a109b7497486dba67b5fbdb46d6ac55d34bffaba2de85da04e41db546e66519d62b669dd44a9060aa491ba714583fd1963e35e89770e2a0d8866e0f515788c0511dbb45765a42bf035eee258d1fe66fc216b09af4deb75ae4d57851ef5c4370d61b8888e05426b537b4d606d5a0f84d5a6eb6da4dab4243666cb66d8fde23a885e68e23a52ef38c2ed503dc5d141969cab51fc87c462cac9e14d29a77674267e6bcd1bdaf28c3a3453eba71a822d6e8a48f61d8c5ce1163868e47753a6e5ce293ec40f89beba0df20c3f6d784254ba02d9ba0dba8813d616bd6ffc54a1b6d800386e3609f0d6911140a825ec6f9441bc8c1babcf1a59080cb2b23afa8f1e81fc2673170c0adf6fc2612ba943500c46ee72ca27bc489862f0132bab73c8b68ca80743659860f78fd9f08241c6df41b4ddd93980b4c845816e2a1143c18d2eb6c5e800b41084c3b693fa6770a5686e24883bb095d9f0617ae32be09560da1666f6705f4ea8d8f75c3d577ecf0b6de79464546d4a61f4548260c0fc3551fc748b6cf570016c34032a80c27b5a405616a50305f48768813b4ef3aa5156a5e2337c1358f2cc9112ce77c0a385543b3d16d3859678af08deb7da49b063ba00d341a4201f197aa8d3184e66b900f8f08d6faefabaa2a5fb4e5549d78a5648237b932df796292599028e078f07d507de9dc6921fe4f875d6d11f140ae5839220c6f8752567fcbab62e5ff0c4afbb904af02b860a06673c945fd592172816bffd0328aac5ef3621bb9f7949fc017e5d65d455e6c4e5821f14ec60e502221c99b2a3c40e3e4ce951e207233b0052220546a6e0b89060b021744f8a8d695008e193a140c2bcaa8450423645024005531c61f2854ce15575c4069a12497a551df1d1150a85ea013b12f418e62e18e68e6d1df6ba21e0ac8c22893952676574083b2bd3bdb349d2a05028222928a282a7646594497c2c0d272ba33fa5868214ace063bc2cb8bdaa54101479a07952cabfd72853a8c4bc5c15e3d7b51744a63153433d7496956c23bc52f3449f9d8487de3a7826202c03675f81a88730d56b3c747d683c549f5dc6436fe8edc5f3e6d912cdebd8d43d3f69fa67f390acc7c190ab67da16f22cb43d15c6bdd754ab85b61a3e412ddbde498553f770f7740fef63169aeda04b17483db5cfe699347a6a1e36fde059f53603cb40bfde75595a5031440a2b2da668e3e10b52f2b383329416543821ffb21e50cd96a6eacf4387618041f35ffc54283eba06dda10f1d48efccc0a676e83fd8e42c031dae1ec22f2447cb67f73cf497182fef9e2d5d8145d6a438d881de606c49552df879a840541ebace0e7ae82d05f66a761b0f1ff478599b8f1f9494a04307b225e841b6a43a80005b3490ec1aead5003af490ded0934c632211a2bfb749924b8e9ca3279130ddf1fe5d3ee3d3f8e366cb322443b7599a8b9b3a30f76bc3b8a9fd25c486b79943106d5b6239dc366665b65fae93d6695c553423ddf17cc55c64cb2f9021b7d96ce4bd8d4830a30ddb4422d7168d448e8ddc666311462e8a1247caed18a60839aaf2ec41b644da5c0a191df31e5bca9c1d862d859c3d7b3954be5de4d9d34623d10dcf443d90a21746a3d93fe2a6740888bc25c03490dae2abb5f88a7c406fb95220ba09b9a50249cab45ff6df67bda9e2c87abbe28f462397ba437f34f238dae40b234e6ed7deba43f307b48f5cb4d1d03ef2ac31bfe12af281790b372517c4e545dc6c0fc17b91b38c3691b728c3b415853c0be95b66d1382e6ed8d6f1a59d1d3edc5e9afb4162997dd71eedd9529b60581976d95c0f34a43fcb87fd3ce181ce1be0f589193cd6e5364bb22411a48fe668801edd664541843c74b67a62cfec96f74603bb10237c39660e3914070f799ed85b1e12424ed2878490df2b7ade304ce450e442e622e7cd5168f1494201859193b6b4bf6e03b3ee353d60588f614daf879f18d5af773ab6b48ec2a845453e1e8fc7e3797b7c3c5473ddd248fbd1c87b4b2c3e1a8db6a52247ae236f5972c3dff622fdb93e6f2f9273e1f1d09ffdfad847cb7b1268e13ec0725772a4edd466473dc816dd2cb9e14ff480961b2e9d657b69f1f72d0eb3ddbeb4b428211d0ac90ebd451060ff003fe109cfa26d723b7ecc12b75b1c48c8cd88f5cbd1fe36ebe5688f8ac3726ddb6610eda35bda58bf80712f0f7881aea717e8fd90f7e9f0206449828960229a208299e023a867cfd459565207cf74ad58a6674b16d01a68accaf8ede167fcb7bbcb127bb8053aaf8057558e95cf9ed649545230f9e584ecc3268c6c1789203da6b6c3d9cec876cc440819773828e47afb8c3a114912c8f1e5b3e31c9484fe68e8f8bab2ddcbd981443fe66ce96d171b8aa3b3181275d860b2a5795d893b5b9ab1c8b37344623d1ef3fdf6cbf17c39ebe57841521e71968b38db3d1e91c9cbc11e75b65b6e429c98b27cc6d4b3db6cd461f278e8b3f6789b4282687f79666d4ba25fd1a39135a5b60463929561cf1edcfa638a4d7d628f38110918d2f9c6eb131eb0f819799e596326e48cab5f3d2f9128653b8e603cbf5e96d8935dd98edbd88e21b01e519b7e2cb2a5e517dd40b6c79e2bcf7eb12145618b8f1faaacb6639f4ec8c93e6b43bfcfb32f177bd09033eaf43c7bd4e1a8f32aa5e258adfea1443f368a43434048f539f35dcc962c4b7dbbc7705ad02d9700a4c1f2de2e006ac829dfda60b43cb277ef06400df97cfb87b5395114d91886612c3ce68d45aca3f38561dcbc386eca6fc8b9caa8b7421e55552f004d8daabac793d4dceceef619999b72b9a832ea107e6ffdebb321d7afcbd057182cc1094408a1065758e185f64311af73008085f79a2db5f30fdda11c80df28bffe5ae879f61f355c01223f2c018c25786042c56965fdd4f1ec4ab3259f67464332cceb3fd5af95e351a57421c1608d757392846d2edb9991b29048c523d2180226595d4728c1481f0164f56084357644020a618295241752129d6601cefbee6e7f497058d924434998388279bb7333484c48ca168e5061bea21b4c927262bcb6d8ea4282912e49a47e4a8f5cc4d2e50aa5612f86615a1132f45d122896d17f0bb6c774332f00af2a9c25be5f552cd8e128d9d26cb73ab6db758f9163a4d952a4e19a2da9dbecf327ba81db0d67d966901b1ec3dbfb87e42579603c2534cfc9cb793c4ff5a43c1d25a5c9343a585028cc221667871b7bc61c99393247292564890e3b4003748d85c5339666699666e9569bb554758350130a5c8939d56e4a232e4e758ffc3a7122b390fd23cf58935948f823cf5a9359c8f723cfa026b390d78f3c0b6970d33487fe9a23738c9e458eccd16fb4b478d6b2cdf82dd26416925fbdd95f3a3aeb301328bfce3e5bd2376da87576b2257db20693e59d58afb644c62f1036fd609955e87f5c476494b2a5d92b55840281565b52e8d0a3b2e939fbac589d53af6a92796ca3c15cc796306f51130dcbac631e2586f913dd609179a53b5efbfc45859cedd364a849b68fee78df456820fcf6194724760289f9120bdb666c1f3659dc0be63ebc53939790c760f9f3e8efb4de3f6c7ac13c87cbd517e35e42dc049e5b1ec3cba109c6e5f0dcf21c9a442e868bd31c2cce0a096920f589131f5e426ec68bc8939f209e2427f8e1c4dcece24a871dd21c9d70c1824c62219f0e1a0ed02091c16b61bb90605e6ba6aa425996b1e8a6c5597433f20f64fc286431c618b90e79dcde87b897ccf71fb08f826fef331436ddcec533155160c8113b3b1c81082d9a84d18393aa0c0a1e37170e852db44d211f8adbc4e16f702e5b10ed5f46dec2c929b92deb85fd112773a276996b2644b435dff0d1bbcc57e4a33fe49a61ef490d48149eb5ca3466eeea39a361890e34a7269d8adae14604ba454308f8978c00bafec361c8097a6f73c8afc3ad874c4513e0a0eb96030a12198252e5e0a48af0b003ead4c390d39c79d655099e77d8978719089b9e172ac3eecd9df1eccb643cfbe33820a4de4ae404b9be1d3b36456adc559f91316b5f166cde5f9e4c6366ab6af036bc7f3e637a04c171e2a33b3607ca0219d901e37927d11ddbaa259868628934333333334f060ab28f1f330f1f6122580bdd34de1a59c65a50e13498ca8d2b725f554c54f9e7ca0224e895d32c387d92c1e40006073d40413d4054a8f8a0bd0c9602af32e4736e35d4db55f8141e8597126a86d96575642d8465da22d18dbaa68d0a82a3c884c969a8655956e7b04c3461d8d6485846af2baa3686157f222f6cbedcb22ccb820dbb68264342d8d3a825c928eadacc6d596c59accaaa7ced48891333804ff41b6265a21bd8f186f839880233a055a6b5c0283d056c12290a845c4499224a18ddce517a8730bb5811f47b55f9a077fd688f97c41994ed36ebf16165aa1f190fcb50d96e812e20dd8185ae46d23904f8672209e0991af5b85f149b80b68a0c8ba1c8bd2ccc49c50155067a26bab91cd620f211fff21ba2177c64b4e22dae9f4ce7f2914b62a6b5401150648937ba9b889aae2ec1ef8aaf5c2b3691385206c4a61dc8cd3833a0e6481c869cd74fbc118baccca24c59950c48d7925abc1153882a64401990e9fae1eb278ad5f543ba7e6e441462bc7e3603ca987f32a018593806bd1a60a10b11666eeee6e71a00921700323794ca9c1c35c77835736bfdb4539fcc6fbbb5325e6faacc7aa1a00bec8a16b66d1ae86ecc82ecafa143f6d710725f315e6170707b0916ec7782ad8313ec30de0d7659af4d65d663d464336303a32231bc1cb604e055c66770eec654659eac4136e4784384fb2c36414b2fcdba2ec8b3ab3e6cbafc39ffb0c9f2b7facbe7398865ae1e36adf7d5733df34a4f4b140cf95cf771508fbc7e78d989ec8ba7dd5ac66a37e4b61e436831e1db0baa0f42d6b6d3c7d6e56a41e6e2333367fb226bf7c22064aaddaedcded0c800d23432e47beab39d21841a912cd32d4df5b9f12fd84fc6ee6e3a8406bab02c9fa738a043e96eee063af47b8fa70be83d5cbce29e9e229357abaaef811c4b3170760c9cdf7d108cb7a17f2010e4dec5c3d3237797f5674bec5715178fea2e4e23f1de3b227db00603414e1706e223ef4578bd177fd0578c266291db847c5cdc1ef3dbf7debeb797cbee7befbdf7debef756eebe7defed7bbb2226fc03fe8100885c3f25cd74f9fea1bb3b0b2056df58d40008dfdc8c5c109a276d3725ba9060a44b93315ef4aa6a72839fd2896800084d773c57772e82e8e203f2472fa30d2c4b48816e6db37d5edc3146bf9883f07b832f649bd1a7e598c32d8bd84714ca7ac5386dbb86ef2acaacd55874c3dc42669bedd46f2cd1f1ea3b1b26cebcba0bafdaac3613328d795d5683452b54c326203c5d228ccefc0ddc680cf9208c8e611816319616c8f952d9f68c6c093a0ebc617160c9d15edbb4ed8cbc140fd2450261d30d5780c610811372bed4105b9acac6afaf3e260298ed48a4e83dd8f4485a84fe1e9012711a97cab80c3c8cd0c74bc5b8bf1ded85589003d5dfa6a21bb7144257058324e595854e0714eed8f4723872bb5b13c40a0988922040a4b65cbc1c36bd1d96d12dcd21a331e47c3baf09c5b1dee2444e0512b2a5f99a0012a409171964bbf59a7d48bace9d040424ea017a171ab13518a879ecd4865bb861ce8688dc18eda07732fce6da41851978f6e70f42657fde55a72093f18a2c73915826c68b6562a9d9821036c3557d570dcba86356e4f3e586b0dfec54553b96511f01413e089b5f0c1dc93e8befb21ac2b6342d69f376ac3b9655777725cb687c5513f478a9f7ce218ffda027c3222682a82a8389205ab07b79a4fea0632ad3f2ed01b83d958913fb160126f211b1edc530ec0a0f104d60a0469322b42864cbabaa890f9a0f127b55316942d6830cbdaa981c210cd9af2a264458435eaf2a26404c7e62ba19191ca1bf884f3a4df482e5a78e1da684742503259e1d13dd703c4d610119394834a97284cfe8a78ec9c2efee9eba8c6719f0b03dbbeadcf08f66a08a0191df27bf1eb58d01945f77512d714485df25b909d0488309448410450f4e637c0ba4dd4eaecf6845ceae639365829cd3731a36ede9b90d9b74f574ae78cee279c4448788ee370c855093a5e90efd8529cd6193c5c1149733616af48a03a6d8d4403492229e8578f609719e83443f188865427f5521274c017154818c511c54c8095340c0163cafe0190aa1f590b54c81e49f1d13f0ea32ca437b39ba9fe9c69369d7e962ed8d67aa7932edcf213743d043f23be4163705f053eaeb2c5f6e72af3d1e197839daf76b9e89c5db33f0785cde3e039b583cf3103705a039e4e68d9f2593c81f374308f8e73be5dbf595d62d6e723f4bdf07d01c4f14a3c6c98c23f58a6e966578cbdf363b910b214f716fefa6522ec0879cb505e95c801fe23ef09e604307e9def297e77d396c37b2bd3ceea5da5b72201f4f3bcb95f6a7baf69a82c4851a995aed2f96059d04e3e455d8a981121d5eb39aaa6209aa01153f2dd82a150edef211c410db2f49f989399825917e388d0cdbdee9c1863dc39524466c555045ca48155b6a6713b6a5e524a0946729ba23863b67c2543b54c586362882da52bbc7cb821d2f0bb6051bf60ceff24142232a880351dbce33d481390f913cbbae5280428376280f0bf5574782f17f8f857c62ebd8629b391663cc307f1816a1e80693c08b97635b3fe69967d876b9e6578c526adce521ac4f97b3e8065bd1cd25f211fd71ba81edac971f91652cff963524106e86ed2c67d9425aae31164783065991d9a02e24fef39707a85fbecfbfaf2316e84bb2a6a8e4a13f245b822e039b485192bcf3519feb39c9ae2de7a19295810e993cf42849dea90fcd43f290f490c4263d41d8d1d4a84e32b00c5c433e9eeda05b103acb164fa53113a29eddcad68a36faca96fab1aacad650e929afb9c0c4f012db970ebb6811468b8de83b333a5880e2dcb545040c9f294f7e5e775cce7e7a3cb604fd821bbc4ee0844777406f61fff94ce421bb302162888c8e3e3dc633cd72c5e102b9c3ed0c5de371f9c7303db3570f5bb110cb1c0251377640e30309acd8800a2cae084a82133c08da7f2de39d10be7d86e68a28574871b511a921462441032858787185052f38b519aa2baea8225d0ef0aa5279f1a157d5154dfc948e840cc60531062f382d3c36b07e3045e3014c4e0b151614162da4ba5edaf3d9e8bd78c5501412beaac6488112c628c2af531083089f7d3ba9ddb734f3ed9d184bf8f6199af69a2d01e05b258613bebd852d59df3d1e23060fc458fd741a4b88e8bc0f88eed01d0650a180768587c31249c213d4490706a84edaaeb0cf640d1e5c39e1f0d458ad56271d1090ea58ebed2586c6417148e1491524271d46ab53fb90d3f544ae30e3f786838e299814519d70d0e1f2d999f9e73af411785427dd1526cdbf7e6a91a1043380564a76390b302ea4d851c268cc4249aae1062a724a31e4d4202986d08234958f0a88955fd764c8409595114fcaaa678b1ec5b1de2a1bedd9b99ec8c74d5eb54a7d567b7674d5f3eb3f62e8d50ebdb3a5d6791d26343aa0b493c656202d2324af92d5d91cc53101c9a6f5fe61a03f4dd25bdbead52f1f72f27951ee650296438fc172e8ea90c3a189723140bf38d5e3d0c3f3eb434e434ead7385d4939eba058a637db6ceafeb0e0a6c23d93a4771ac5f4f247348687226cde7a458c6f2819c5d37d341bb16109107caaf6b2498191755fddb58762049bc4ae2fc97d0bd15b1bc5dba702b6bb3fbe0a76e57587f3872baa604d91591be2bacc7d8005f866d31263d430a2498e0a050a89c937654a4fe748bf42aa3021452df2fd06dd35353c3c3e4d759c8148605ad7171498a21c1f0f5054dc783f3eb33d22546c7eb15d65708393b26724ab9a4653839bbd9fd7633daa8164411d4d3413244e1d303069de282f3eb3333ec6f635655cdf2f9d915d6338d09525b829cebb33fd167ca96deaf4809393b28884dcb1365072d0f9b7a0b9559f7e2978c5f576e79ce782fe8e7fab04ad4043955e5f3eb362d409c18e5e5f0ce4e1455fcbacbcb794a9c288bceeaf06c0f932db1ef6c15bfaa97b3b32bacebb63a3b90cf5767db9d65f29aecec8ece76fbb6c7446777b6a45106f2e1f08e64d3265999f555f270648a091172c68f1aab6011b2224dac667eefbdc7a9b7f3ebb6db15d6ad27e4e3620f6698961c39492498ae260a25dd0c0b2c3ab2abf9992da9d34c167ed9a583819c24128c7459bd22a048576e8822f5eb38440de61581efe2c7fcf8f10ce272c52b5ef1baae8bd3f606548f9c519423677c38cd84ac880f7e6ab8e29f5d01685758c79220e70b122591ddc3a6f6d40be29f2bf3050559d9924a612a6ca50d23e45c2bdb5d79418ac36d767dd8d48fe31ffe79417c6aae7bac23e48cf00989c6c7637434fb8f4be7dbb57b778c0a3990d37d9c4d2a84215daa90d3a30be474274fc876373728332bbb2a54a85055593921a223e4d4a087ceae579ea5413f2f25143dbfee52839035ede91581814fdf7bfa9e3a5b6cb1c5cc0eb70fb06adbadc5cd87aae1864ddb10e244cef7f37eb634239535396a3d6af189ec9d344664848c48daf8f990cc45927aa99d5f7f46a206f386f8242115c8f5456d2fcfd537e78ba93e3da040f2eb302818eb3ef8a99d9d46c70c49f6d6e3c7aec0ce4c243ba74f9cc0f9fde1152021e515f0aa45113993f4351f2314a95fd74830332e4d5863963469bb5d611d4691ad6d8b1a455239729d95fc135596a47a22c9afc33869c3b4a7f51953e4a1d8cdf839b1e8f91055bc907d10f45b2d3e822892653e82c0e1ec699bb325ed39a2c8ebfbf841c996b4c708201f41e06ce9c5471038ff16894eb14f5cfdfab40f4cc121d684ad9a4a955f572bbf3b13a27ebda758f98d57309493227e4223bf92034ab2422ace76dc43e46cc74ab6e3cbd5593d6e27d56754d7b6b3f43d0ee22095617f5a547eda3a8da4713a67923a07e7d93b47674bb393bc922d4dc9e4b99374922da933077150eff868cc425c6419c932ec2d50e4f3e5b21fdb313f7ea82d2d17a3e4e89bda1eea15d98e9fefa658861e363f365004c80c4130ff500f15947a45aefc3c23cf33c823380c8eb59614e9032850a0a0b0eaeeeeb576bbbb6177b7d3482abbfb54aa76565577ab7840e4091428b06c90b11732aa378f649625f8f1181a1d5ad339cd763fb4783f550b171e8ff5158d0c3d316ca947a750e9e9a1f353ea8f12d243ed1a0a347c1033434de45a215777639f578ed019e872e8d97b4ffaecd6a2389edf981df87518373ded3c74eebad1839c51e7e9b248c5e18117b9207f9f4b1b18d6248360520f7766cdc3284fe03c24fd447942899f0ac51f4671f2f373e6a1f7db170a9202e68cf7bbbb8bc6a3d1f1de7bb1d79f947257eebe87ed0df65e0d0d8ca1861ff98f0a27c376ec8ffbb15d0a4c481731640d3f376c69aaeaea07b37c2838c6720b712f6f9fbb97afabe5ef3d4649cb9fe534bc18e3736c751d5bdf8beb41b31d7b67e344ae33333333abcc38c277196bb2f97975987e3ddcb2b1b61ecf2d779bede11ba305b71e36dba16678ab7dd9a647e72246f73553470b5b9ada860e1daf2a33aaf8497a22083fe3fbe0a7bb530c3bd59dea54a73ac526766f772fb176eb93a5bc3a6fa125d5d3dbf4bb1b45e38a63bde110082fa046d2a9eed475a575875e5a525d32b45b6f24bf382cb32996d915c8795dc9ae24ebd96e2ec4f7f0df8e6c70e185d77d0353294ba58a3b3ba3ae2227e7fcf3c9394040bf3b7fe58a4af5522f3575d5556428b2bcdfee86452f30f71487aeebabc885e5d2c876e45b02dd66f987c9602fb678ee71e8eb56cf4ffed9e2070064fce41ff9cb5efce41f7f3daacc978a835e78ddefbdee0dc974ba899c97cfd5a33896899c57cf4585cc76da88a4ed2c18f8fa24f5825f48c6f5faa487347eb95963796733fce5a324e424bd6545e51502335f7f4b32ee654fbd3296b7fc48b77838c1470b8a241f3281640fb95b334c2791ae6b0b39694b21b71c664537a12744f402fb071af09ec4a677c22c7fc1b06ec6ca5b2ec306d6a44ab05cc7965435c694b72c9ab7d65a1c9f1f5eab6265d5bce558bc2c2a6fbd65693710502a5613b24ca315cab46ecbb2ac1717308f1e5dbf7b091227af0d6e1987324dcb4211d01f8012e41402ff05f6ebc505f6cb2fd7b7367dd2967a5508ec35babb6384ecf1da5ed8d75fd8f55755571130a4f07470a738983953e1cd65def89ba6d91ffc9ed96ebbe70761777f368aaaaaa30b8a0bf0dfbf6daaf0d6e7ee6e737f27f73b9a010c1776bd17f782ef716a59584368c5683e9acff2e8665e216b96b56f5f0e6e0839ab21b418428550d7b2a06575db4108a1c516b42c784d219f776a6857e4f3b62c6859b06ffc30626646ad2fb1206ceb8ab0ad2bc2e0c7ba42d615d9801db22e36baa1854108ad2b5e3064b171c10b862c51a689b4acbbfb82218b8dc62cc805a69a83c3bcfbba2ed1cdd511f67b8f61731c49d2334dd3d8c8b6df8ba427fd357729a76c849a9bb9864108c39c2fe7887968838f45aed9c0960028c8d49f03cd7e057a1b7af4cb01519f0af4563fbc50d7e8606167021ee99174ccd0c42023f2d99174b0c2b8a2b61ee3ce902f033598afc750e360b8005fc4c9a038d675446eaa955f8b23e9e86e68611042eb8a9615b564cd5c355fc3323b26020ea0853218daa03fecc85dd6057d6e37b32ba3a6c5e822924f7358ae560e0fa3e801ef31bf2ceb75477d3c9ecfb534078c37ac76d02f918ffdb6460001fef6eb290eb83a5c9816e22bd3342ddb8ba45d8c2d1289b0bf38ac64953ae92f0ae0e2417a39d62714b1b0886e206b2b910f3ec6c5083fbe1a2a8f870534c7ba15ad8201c52183968450bcac90461e40122fe842b5842ea0f8291d8b2e9a8484d005123a90a2575517385da462ba198fe102c94fa72922eb2e35b7b01d3bec56b7385e4eb9a94f5e9db7d4bb3cd4774f2f87fa7bc5a1ccbc7057e7b6bbbb2b8178aa3856b986afc507971edfdb9ccf46faa3ae515221c1d0d4d8f4f0cf5bd8d28d7fde03861864783e03901abef8e7426ec02185f352f8e72f87897ffe946c29f4cf9fce962213275bc2fcf9e351f5bc150fc0d81200b634e551794012b0f284173b04e1044ac0e2f4fc5dd992f6e09f2f4a892d05e09f6f6a4b9a3f5f236bdae73bc49644fe7c916c818417796f69851789442e6fb0c48bdc458403d48b1c664b0678916ba21b91f3913554274df34c74a36559b64591cf74f0d916627ce6305b8a9ff5f07ce621d14dc60425a85328e498e826849911fd12dd4416fe8a52c45f6e896e2e2df95b10bab625251eba0bcc22e8a1c3402d7a4a0b8062e5a1aae96df144cea97b4b915d933b7876178672c4f316362842d57451718329d4a427d1cdcb79d10b1169288af891153b6051250135904fbef0020b25dff3450869f4e1ba823d11a2043d4f921871000f489ee800e1801d524f665002d4932a523f4fa0a41c80ca7922e587d31356242ea20b0946ba4841f253ba88093421c6ba0d29a678118423a4704216320ab144b2ac208b25cf497f3928142a8829764ec0036043eaea150b31a8bc36c515d91053dca08b29be908213e365c1986ec60a357050c54fa7b172541f9de1a8f40cd7653d2c15d18800004000f314002028100e098522b1503c4fe5ed0714000f80984e6c5017cab324086218a410328600420c00048000c00ccdcc28082d636b65f9deedbd57949df6abd2e669f4d6fc3305bf2addea4b43cb9def4170a7fd56502dcfd0435c40c3ee223966a3be56faf2c2cf296aebd855eefccb9cfb8581d3bd14e8b5e56d2d1db7b39ca3d93a213709bacb5ecaca3629ede587eeddb6209bbb141a5013c4e59a8db1a6f82a92546ecc00a7fac64b8655cff8ffa5674785ee1fb1f7331aee93e2808d8738968c725d25aafc3ac3cbd6cd8d67ee5e4ff822c620e3d4bdf9e9ee94a4fbe40e4f3ae81e5c52d1cabf0182f746ac89a96c20f91fc05fede07379303921281829b312f12476f7c8f6d0b3759d9367b0a34c9600f3ba83a8d6e3acada0d4d3dfe60ae48fb158a4b19d06a3c94ba9505a1d4ae8af35a4da3d8c682cfeeb53da5433d6998304a18a5f11dc3e16f0c040b3ae21f78e72a022ceea207d9d0606287ab0c0adfd59d437a095a7901666bf01b2f4085a94918e691c7e412bd85af0d2b0c094e22f9958e7715d415b226c3857172006ae2d4629f391676605f5259d37c83714c7286bd324fc38a10b3c7875d78654d86cf292b62cb0888bf1b01ad514b8d5000b53f1ebf564de95c0006bcd9a3004c2f74bce5a2f18df3348083f7e18ae43108844303a7cbec94d30aba69a0859af89620b81adb7ffd14461a3196300dd137941684ff304dce8996130fdb805a1308f79e155dac436d86c79d25698425379a4dbeae8e250a37167ca4e3b7bb9740242907856931ad74c0f888856a9b24916541ab016e4ad04a424b7a5d68cb702fc6fdb391e8f3fb50eaf440585b14da5d3dc582e45e93a02eb0b6c0a378237a3fcee37af7ee021d9c1836df6ef08e60ca81390869b97a558e705de492ebea259d4adfb50b2b321e1d42222ebbc855a856508f88f9b48c98faf925e0c6daf3101c0ae03cf967fd849ab690225e0548dad435cfba280959d28c4c8c9e93363070eb69c804bac7d6da8744c054284daf9b9b7fab428f30290d56a332727b0015eb5a26d020df72e0d0c058e721ba90bd9177cf4f7270e3f946d7e973e2c86a24def7129eda49725ca5215adc2c03d23cdb01c514a2750e08a4c687a592b996016275e83454b2df232b8c1cf1ff6f2341ac5c370dea8277f5364c508292ca1a4c221ac015e90b32af0cd120e712659b75d293da407770a88f5e6e87b03470b3a77f83313dc9f92e20149e851e4d84b60722a01457c14ead2f9bd3fb3f55e7af60fb5556b3497044f5bda72dc946ccf4181b1c0c1bc6e9e8ae70a16d14aa8c4a20033944be4b100c64cad09bd5a768f88d0b19a27d82b575aae340f02ce3528b45541f0bda5f21538ce37dfab9cde897b591c4e4a035dcbe95203070ea79b769d1f132b68b2c473c4b842c58892878d9bec09ade2088b80bd2b143a41a568efc5f6cb6523c1b69b8536fd5954cb2ae566412f854b5b7875b06be16d6cbbb2054823b086db67413b8cb8dd35d0a890cbc245976eda2afeeee4b8993941a546a14d5553b2bb66450dcdbdb1bf14ace27f553cde422bc6fc1e859a4d7ef5678db0eb1e8c7cfbcb77e64343195e01980c391312a66f182d7365e422c19d5cb82f76cf7c9c7433e32c9fbfcf93e9d4be08c1f73c4cb34b0c5420a7ff89cf2ef2e693160d15987571ae068fb281e414c2128b459ab55f34ed0150d149c10dddacf868aec849596a4e709e96176a80b68f2cf0f4aebfbe38d8e963fd28eb94bc008151164decc5db5b3289309237b7646fc5eefc2a152bad2944336b5ff4bee614e93ab4a1a10cf72b4f676a73a63e79012b10e9e72d1e5d238b751ed2d0f9133d9ac3b670aff6a8a788d0784b782874701531e29e8cae834e7121d23fc9368404235c27d6e59f85dde1626994c294dc483922a6392fc8656d3ee550280ea84bcf6e27043b60b9db66629123ef175d9891ab8561da92943008b078f55e8c5dac6290b0ef45a8e48746bf17145e5a79e2ed0de6b12567667fae12c2f94afd2951cc8d3e1a297e197cbc07ee0f5936fe143a584975b9d5c35b4762f748cb4736b54b853188f7c15249d2ca4b26a43f2c695b565121596f080aaa25d596fdba60d59bfa67846e05c3ae643ba20e9a5769d0841679dc5fe821b8e2bb77aa31fda565bcc9b0770fbeee65ad28754df0bd1381738aff807efe9e7b273ef8de9f7c3fe6ad3f4ddf0fd601d7daf7a39edff115ed8db47e5fe1fd1875c9b61f51134876cbd21574fc21fe16f3dceaf7534e4cb9357decaf1ecd6307c0424eb81425a05c13170b40aa25a0bc670f14d90a05ed839877312bef5cadb75992e690941b9ee96be870ac99dedf60d4592a63c2efc4d297caec35f7f926e5e784e10396e3faa7b8fc306727c86a771b87e795768aadd05d0a26b9ca7663deb50069b72d5a6f1ef78a816b76619b82a5b67e98f2d31885ce538c26e14b1981d3d3f9a79be5c9435ea8f4f515202228c6b2c981375a40d85941516e3ee14713fa084b5a95fe56fcd911c4d6c52e845b5af075792598e95dc24cf9565ade18a60d9833f664f02f7a657077cfa3e12f15f53a63dc1026502fcbbb5a84dabe9dadc8188bf824e6bd8d91d25f0a909fe09c7db9c7bd19ee7e8c3175f350212fd08e195f0a6c9541f12c0661eea5551dfb5dcafd4ecad3e5379efff3d5f6caa5e5b27d9548875891bc52a6ca694c366a11caab7e5fb8025e7ee824145c6e35d2cc73096e11880e80f2212b261e2c0759d91a209b654c89fb478e2b93fd0c5b2c1abb093e83d92d39a6828bb243b57db980a4d6e66fa6e1d4a9a34b8e4ba9db89c699dd812570e8a91f48854e91fb670b64d8964ac8c9835867ab82ade6ca10511d888180a93654e77ab9b638791b1f79c676d9eb0c042ec65d568f91b7ab729022f99f5d252b2c98d03cbbdc319998f8f6fa2cbf208f3006a235573b5d944c926affd3e31c17ba797714c9fafad8dc2a9a1e28edde943c0182f385bcb02c27efcf510584ac1f510eae09852c6fc7fc0971cfebabfd50f385fa72cfe52081e320728f682699f88932cfb1b72ea9a2b2652a4284be50d263479e7fca3f9d812556f68bec0336f1968401851197146033e454acdce2dd1d8fa17cb77e75cccd4dde28c69174bc550e21a4e568fd64576bbcc8bfac8c780d7d79af70431155dc8163fc158e98345e38d9d05fcbeb3a2e84576370558b31064ad107fbf2909949d371bf4fc1b277d708fd850e40ef05f690fcd7589919423a101fe965ddaa90cba2b65899d9e7e6ffb3c99ad1bdb6a8182f44c840a0defedf3f98eda1ebd1e945ca95303fe9cadeef14f81be7168d9fa2ce5176de1391b42315091c28605b0003e86c43e4c2223e254db08f581132f9ffca84bc10864bdf667bed6c10c9517f8d441a12d60fb4a5f911dd889dcb5e239ff06d93a06599f2ad8cc00cb7327b63caad73005d0415d44037550a890d20d2808f8e62adc42a76d02b167d36e890ff30c6da8ffa5fc6292d3a1a0b360343825aa35d657b641e5ceeabeb3d7bb964515be0ea8518fa109afcd30836940075bd0fa71bffaad7cfb280be22ed8e8c2314b22ad018436ab1867042ecc835ae71a11d36b9f76d1cdd005f384754a9079a009ccfe3b5fc714bb64b658dc4215ceb05e598583d995add72f7b892215f70b117ccb40c3aa35cd0286e98d0f09e34ca42a52e9ec016d260d4f7cb4161f97b682f8e7eb08ac5446460e8cda2c0b487515cc6511226d676a3524a2b785dd3320840e121c59bae2f29f4b6a2df571701374cf1ab840bbdda64f4da172e1da645f272118f03cdb9314dd0d9860980a3279888e394df6e29072d1ea211759ab6853e046755ad961fa9f381cef5d5827ae84f8810565a36529e60582f42440ddee7e0d17a0a566022faae8e2cc7f01f32a9a3c277613f627a124f2c8311b48cf09274f2ff15894a396eb20c24cd543f9067715ea65b7eb24579a4931e083e8ea8a122070f57c0479ee537838ff2a027ca4b9ea7b651acdc983ab27aac47f9c376103a8755784f835a4ff5798f842ba059ad315342bcadbe3cbed77af7cbcf576aeded3370615a7fe445b7262b536c9365d46bc37b4a988342aed0cbfe9a92bfe990064ca7da006e927e4308a33bd485e8243d4a10b8d47d7a773d35bd750b1ac84ae520cba9168ec43cca5f128584de6101e4a72ad34ca0bc514f481195d965fb8bb82c358be31a19a74eabc882678640e384f7f8ccad5ab6b7c495d75fe4406ceaf4b3e63fc6f552b7873a39500069c4597684b80745bd57ce88402afc27e6c71a6ffc295d62b96aab337d250623e9daec6747a3b874d0a4a6ecf7c6cb82247fa74806be67f72dcc0450744dd301adaf5769e66b637d264d5e3dab310624817c23661f52ace288bf53cba1d71c70cfb68327fb3e5b96bc947d5c1a024e3babe5c70634d83fc1ebc6b062e015835e44243f9aeaca0f18949fa8729929c211aa4dd77ba6fef5e7e19f7234d379b3816e8fd27ef1fc89abfa29e1f2daa9c67ce4f227b0463b3fffd6369c2e743993bfb6e2cc8193ef2b0aaa5d4c6dd54ebeae8f3170e674a3c8ffffad79b11787eb2c723c9f846b82a922cfc88676d37da014413ff12193c5e6b6fd753cb529e7470ebf9cbe67b028ae33d52314c75dbe79c5ae2d2798de5e5f7bd7dbc67392a235e0e4b6ed60e0f634bbf9207b9ac18d3d85bd63e8d5555ebdaeb6cd93ca114e0c4ecfdb248c998919e2504a5f9c2439681e0d9b135e202494b382bd36ced7d969fcd3c225b9345a1ca825a50ef4a9978690de31d8e150364f66c9773faf6a8c0db442d9409a6b16507def6ed777f3d976dfe9be4b2085729c79726003a2bd239866d8173c86137b75d9dae520612ff924695ba31f390ed82fd2e389785a03c4d488d2f65cf97658672f291087d907540c70b2fc979227db772bac7b8d196370440c3951921535183144c4c36eb556eb91c519cdaf8e84ec795713f0b4a3d0e4be5e9ebec79c17f542d8a66234b84451d47fd027b40f13292431ed6c7c2924c0e6e0a2982b20ea7f6af0628635d6826cf7ba749609ba4d0e96235b71fefa4c2c168d6bc7cd03b97e151d6b788672ed239cb02802f2560a84940cc811b4a05b95d1663d38553d598ed70a254869d19c5eca0d52e6534078bcd6d42b00613cc9592ce9c8188322985137ea98a64b3a264bae2e291e2cbaf905a8578875d24c6a8ec22bbcad4add43059b51453517c5daeb3827f72756c915df2274511c818b2c798a7a5eaed70428a8e5e3596681644c7ce5b3b803d28c5bc72c2c049c6b15932d857cc96b86641968b11c92ebc6ed0d1c07becda4fc01bc66a493b9a20b46c3a71f7c6a3abfa214321d78c461aba60858054668f03336373458a865b8f804df505afe53474c340d8adae4c9cc617413a10d0ac46b53472b4e0e81afd1739a611f8a881955f2631c979282332ec93a51d976103d7da742e89e7f882304a5cd3e4176a807eab17a527a28bd6821112b80217d9aa796523c8b6553fdc4f47bf9896ac069415e8251b2c5f45980378ca0374c78537862f74709f6e35650eb7442324a19ea2fe0c0fa477a450b45038eb18cfb0a59884589f58929c738cb008dce9a0b151ebfc05b5d70d13a38541bd4339283108efe1fb3adb91216a394028b203dda64f074dc184c2aa587a22daf4e740b341deb3e1432599ae3200e96c3be40358822cc523e4e00cd5167f7e8e9430c3d01be53254b7a62927640b283c8eac709c219da51cd806ba79266129c0b42ed6736c85f5cdaa03651af2a902ffff684c6f280517a2881e1538d878eb837b8ca44ff14c1e5cf100d4a7720e900585560ff6c97dfe8915545f3cb106576156354ba8a1b2f1efc8495a3c59eacf36914915a3c3f5081fb2e4a80c90a6c76d8300201862b0a41960c5877e2ffb83438aa56e2cf8ccbd69a7a5abc890f0626220c6b4fa397e191f51c709e2f084a602913aae19c4ac7ef9a9f5bcb9166fa1a8f89abd59c8c7a52358b315f54f414d7e6d34575201bd1a4a640f9bed2d2b54d33ee1642ffe777d4d059400fa7f2b50acb5e732afa16948a2aee3231475d67a85d72a052f1a51563e4bb641d562bbdd5a636b3c3c750119c0b11dc5110fccbc43877f9d853b836d206b766d969cd8270d6368cf828b3c87f8004bc7cd674e8b739e8a5462a874e4b0ab0e6797e9b9638219c2423083e5111bd47c173fb266ec8a02ed32a18a26ffda3f317fa6cb505bc689c6d93fb7113827fbf0d20a1e5c46148aa6eacb96171981a42ffdf41daf951bca5a7305ec14d00595d8d5584c5f395b5bfddacfb55925f40a322c5d80412cf79b088305ae52e8e782e862a7d707d6832e41c6e8c984f804e88438641704812ece4be3532aed6cbebfe0b1367bd83be0ab5b1bad84abed07be2f85d6c05c5dafbcc3064052a46ddc964fb86aa298c197a1dc1e16eb63cbc9da1da5c0a3b2bb8f75f59894d2b00619330b649b94e9fa0e08bf437e43f48f14409f1152739e89b154dd70af1d08b2cd777208d0930b3f2bb3d45929455ebe5dd3f8cfbe9b99db3118349b7520173b0e0e51c5abd72b88eca207fcb941daf8b89f8521607730f49733704899c39a683082a8f972ae331a7ead77e6360d32a07c12435830f6d6c582b0826e64241a324413e7cd498b38dbefef8dac596719d445bf2a9996ab10cee8b384f882c156e59247f2f9efbc49330513e1df6b61fb20222da2841c020a8a60ac6649f5807b7890c53b09fdb368d606843598e62b57601bf91fec5c7f347509c44c0b898ab00a3241f249c4c4f54419c526aac30143896814c88f8ab94ee39952f73ca8ae235ac251f8d1760e97d40bc823565e189245e8731c99cf877bc0cdbe4e3f68270a4335f9363c81580bbf930cb7086f5dafc0cdaac8af3d233b99b2d1cd276e689b031ab92566a8587de6c426a7f9cd6513e18374be575c47598741d81452b10652562915256372d18cecfcdd067cd004bddccf1849b846bae9e6f4f55aaf6669626c4ef74cb23e028e767ac2474def7e2b1ffe30d13421fe0e2004e7fab82355c1cd6d73fd10dc7e932d3bef32b70f5bbea64bbb462cda93cae13c254331e9652b61d4b51420dcd1a3491c9634700403828645dc9eff36018ad4fec30193c1ac1fab12e03d85c46657fe11abab4b4b1a4f5201c3d9498052e5ae554d21854ea14161c5367303d03b29adfc37478577841ee51b90ec64703d1ec225e75100bb8cf8a7f2021086dd8912ba1350c9cc744857bfdfc09e7d4d624768d72eab65928c0436910a544e8bf8118d93616b03c80636190bef6998bf1d0abb9f1aa031a6e94a9b8a4126606f41148f31be3837d3efa207176aa6c63ef180fc1ec6e8973532ae7ede5201519e22beed58e055ad0fd207af04e37c0ed40a3ffd4f1b851c3a0823b62669335d8e9e9f162efd86111e994e6357db66c5f888297b354c3ec9a761258ed21bcc4f7d83a0a601f46f5d2314b44c6c261c798e802a9ccb0856655ea96616360a3d89ee057b9fcb0f0e48505e8ef0669e89eb143bd3266c6230cdc1a2fb724a7cc87d2d5edac572436c22ce6816dea436dfff3669e0558a90a0c14546754a72ffa3619f272bda7974c86316601a97080318793b5fae067fa452913b5486212f6b8d2ec53c885eeb505d1459929a9baebeb8185445e67aaf220ab15e8188643acc570e09205d2f1233ccb13b7ef94a55aaa226d5438a6339b2afb9e14d10b64a64e3b7b9630f757e6d854066282b25db01946593f16fe5b743764871c091a433296f706b44ab97a1a0b755ffc00a2af384e6440c2258d33f11885f442560a884647199ec34b0ee47e1ce7e41044488b414605ab685125a4f2da50a70e73b395eb767e6ecaa044486b3cd72be14d27de408990c99c53438ddedc623ba09698e7fabd7f0fab477b0f5d44aa7738c5ba021145cd0d99b9ca891ecf2e3abbde09f7315a2c0b3d51d103e69261285e7d391ace595a4dd130c264b0a608904f389e6c0787ae71332fd7c7fc5943ca2b98f861c467e7bc517871b9a42de1683978c90e602dbdacbb5b5ad02fa2df31c7c7a50f83a9f5566bf26687a1aa49d2fb50d593795935c9540f15cc103756dc1093e79ca5de159d5a226c50686a40a35e19731296a6be8c808bc447d20cc389ba245ace28e0948e60e3024d6ef858ed3d0a1ba18a5373b90583ef7a4738e512c7f64146cdee440810532bce069d63e317bcead1adae1ef912acc720abff667b1c8631e6d798eaa51c3883a78a61b5dae17248f2edde92c22c9eea7ec3bb0c3f8d9d9cced7890d6e8a706950891ddbdd09780f1fe8cefa540af291a646a46360f57906c9cde32311a83269b4106c64aa8b1ce350c2199fa0d353be3ba41e47ad173fa6a98dc765694939616ce56da7e3e3ee182ed3dcb9afed410f30d1426803e8a24d4cb0761b79bef18637982974e303aee6bf4a8f9805f1c9e606e7a723dcafa7d8b7be398f1548d90eb244bf379aa8bdcef802af2ce777d494deb2f1bf0860b6ffeec8e5374fcc7240a22d351a55ff3ea193fbb6dd2af0b91d842d5f4aa0dcd5904ad9e4ab89ae9d70e98896267b51f87779dec0e4dc51d8f893ff1b80dcbead8def971f1b193d55f514d1f5e54b680542648428bd06b47461c12063272b498a4919a8e5c90f8c051bd1055345dc164b97ea33715668f5dbfeff934ef2b4a62c44d6c60b497a614bcd6df20dcca1a23af93512707a81f7a550322ae8b734cc3585fa9185ee81a1e67281bd430c638f20b81624dff320dad5ae20a0b8651972ba263a6cb4f3581aec95c9c8af1159f3bc0c6b70c6bcc9c939b51800d1ab09f1ef524f320560e0f6503e645d855232c7fab30d873aed6e526a58d47797f85d5524134dc4ad2a32027e165c2dc3698e0b3d427e02492f774b569373fe0f2fe200d1727a908968cfa53d22e0f620fff46a14919bb391b594894ec6fe8ec0eae3a695b39661139f2eb1aa22bd8aef38fb16d401eea1149c5da2340e0d2ac67dbaca984230b173120be04adc26938e933b971be79746641bb1dd8481d6a221fd28c1e6b84c2325c7f9e2c5e30a80441614cc1b5a1d35536f283904d28c3ff33d3cfccc0bae738adb53817a0c203a938d03f45e95a9207b9b396d421a22763507c6bb070a8b051acb1072dbe6bebf31f7707ccd99fcb171124c640d3df9a11f3e08b28200521007224d300db92150d953e7e9679b187e41c24728b6c228e0f0faf4c3af0dc330481151bef0fb407edf6b557e1d5437f9df6e090cc8ec73196eaefcea2d25f3392c4d263c41fc4fc7ce0f2dffa706f0938085a11fa646c75854f072eed0c5281efcb94d4b29ff967c50ccbd44d14ba29bc8ae4bdf0609d2e2c364f7df162bdde8e408f279514830610c391528fc11061d6a3c8abd6a288d538a7d8b78495547fa452bfc27a17021d15947abe07079cd64e8716b3d90caf23629af0e23dcf3b0a21be900a3a15178be54d40e00a982e2f5dd7d70ec202f1e77044df64640f5a10a356f714b57b8e8cb2de1df0e82a21a79570dd3ac40942acb1593592ce23ccf1834c622b0c70366522ade85612e5be99efd0f4bbed686760b7fa8bb684e362836490a1eeb3297f94e74f47b07d7314543370129026bae7fa244d3c1c3fd1f185e9396382ce1b8bc1e6902bd7850178cf405d48ed50851a392faf618ae1d4538e4288a18828cd5816b32f23d33b86c5189d362ee726e9d465932ac72f22bb4c30898d3ae6c9d57d4c6ba46e4dc2cea145e129481390a0f50e1450784ed1064c5224a0cc3a6d55877022568dcf8b3f41c2dd76468a240556d68c2938240b801f3b2ce624591edcde940114838325b240032b73a0fdb1c0ef7ec7bb00f13d0c2459152801305eab725eccb3391e778c2d7a1eee9b161ae28443d1c6c7d4c13053bd9782fa3f2c01b91d042617aad81a1c6845f950073c714e2ebf7b645e1a90745a7c9abfa9ee4fcbbbd37b4f9072c8b8135ca27c170677d0cd8dcb096d4e4743cb023bdc2b7b1a3ab8052875043ddb08b25ea8b1a429bd012caf6f99fca7442eb60a9b0bfa4498c70ebf7c1df7bc3f674742d338021ff1c7d9182298d60c1da6bb2283709fc3b5332e89c521b8ed8a83301cccc670458e427c20a1532ebc1314b4001487bc4391c20dc04585c9f8ab90742f845cde27f0799bf0b446316fe2b27d29d85c081b410309675cebc61c6e651b8d11c73e8b4ca97435a51e5cc5f4515b6e331ded9b8b6a5e5fa960b7c02b968a83cee0bf33b0e78f3d39c72c10e20ddcabd758eb08f2a167c1de10f70289e26708fc257a90d6941435385f3e643c5a7890f7f27d0a0cb6738f3b80ddae380b53858b41e71e0451aa135d1a16cf26c2badcfef89c75adaa1c385f4db3acebf00476703e92cc2e15bf02dc18f1d4a97df4cce5c51bdaeb871b0f9b10a7e8842ba32e3cab45e71083ae88f2d2b4585423364ea0c0135d5ff6f120d1debff8966c1919c390e3922ca323f160e676fe9005db4c81bc81c1f094a22e9f04954ea7f44ff38c6b19b64f9199e082e84ae18a3c2e1f7c8ff873516d382b6dfd6a8aa07173bb7685664c308152e26b84a838d74c0b41582f2722dc1532e147feefe724baa04642b384ffef511ad1f9e3bd31987964148b6619647fe10a5cc2c33e469b79a55d5fb8d57cef34d3ba4445d701108d1c9977eaeadcf8f1165e111d1e441f77c38629596aaa97db17952e9af73ef49409bff0d588e97e4a3ecb229d7a3a951c00167226e64f1edd719cb21b3faab93b017f3c3297553ddf833c3b9db9ff32a0ab599a164fa74425b2dfcd3c07650a362df9c252be59bb6b582fd867cb68e53141e8b8c6e5e7955a8fe8039a1306bb5d1e8e82c82ff5717ed8ad65456ee26991310cc3459f44fcaa82d0e1dd4ed15e93f28553a474efe83e0eb5c6d800cbf0d27ad520b48926daa29f5c4a94a8fafe9238fac31bd05c6c3126eb4bd8fc761a712c754f27887f54a8f546edae7b99e85a9ee1f1278ca88fa576aeeac4cba101f3b8be68c43f374fee1957d2fbd946f9203334c1fe845a2dedf40ce077571e92c06a571e38cc9843a0e2d81dfb72e2affd13abc1adbe59da3f9f65b03f866b27c168aa045540c2a6fb00d0bf2e6e67872133d4ea5af7c206fdd3930398eb65b98a26c8878f856c1c4f9a4377767e32e665f99797a617784a8432351f2b053ce6aa1a1eab752dfc56b0fd413acf48efdf19549e80688cb2f55ab222273f7d85b3633d56e072160d5202df7348de13f5a7e485a9d4973e518d8f15fa0b090e214970e46c1669d1ec0fba48c9498e20728756bb4151df1044b7f9063c88113132ac016017c2825984297695db30fe422e0b4ecb784a0cf234dd530b385b3f889d4f03938db0b04641d45f746fddad7894156d03b949808f04a3ed0593584a94d004f1858aa9908c720060473d462841b7daacab876741eba3ae7952bda29b44bf987164e05508fe0f7e4a5c9fb0cbe11ad2c06d30892fb74ef0008341c1415bdfe2dfaa52c190a5217d9a3d0418521d5a02cc0878b7c3bbdd5d1a93bd0cca63ec4e196ec909bccca1a791c8437368dd0f26f8368be5164d9ffc495ccb4d3cbac040bba30486d8c4a415c1e7cd053e9688843f817393c1f2c2029029c7c9508d70f82c64e86b972262908ba30a040c3decef16a797d69a3fe89efbc06320e91bb9f6db3dd7defcb8902e029beeee9f081275ea82e88a2401e529a4cda78ce32965b3f3ba64da14655b6725f3e92dee39e171c9c05eee486a0b971b12dd408ec7efd6033f22d3bffe875c3eefe9f0d5b478fc1cc111a4397c7bd92c284d2ac44abe8d9a1cb0f3bfeab315976995c56d6a39f4fd806e068140884cdfde50501adf9d00dff533b14ba273da2b31fab317ac174def4dc57556cf7921caff733f080327ad36cacd5e1a068c0a8b48002a4b8e4debc8c58f7d24fc804aba91402f747211af62170cf8e5b7d8caa3edceec3e44124b0dfb0d0394331cba99ec344cf2e47ca3391ab5076af2ea320f765a4c04c56d56f00e58479441752e26dae2d37861716220f73026645dab2c68570a039540bd7ac8360a091f99273d9346e0ceee49e731015c6bc381496bd830714dac4d1b4253aa533577d134f49cd231fa522704b5011d06e71713d2fde8f307b4e077a94103ca230806347c640444860630b18f44f034bd65186290e9352b0a157a8e2450fd575ff48104f8a30975e0445b6b68c68eb08dcb8b19300c3a01a79650469f29b8653fbea0c954e3d591d15712ae1a015688710e7120359e094cf18d4bc5299840bf6a58a80717daa19a1944eb4bc923329d92550bc79e5802cb4d1d300ca9abe8ec99868dabfb9ed150d93e2b5345696be4de50052a35b3e2396efefc12c50799e1298c29a7e7d67a9df51179db2f19a926854bf7c42fec93a275dbd80edf4b8acb0cd35603e1fd4b540346a1a81d363aa8df80b2d283e64018efc08f3d3af5dd11355426d014a2ac9f4ea4c54ca8c440adf0578fab9fabf955ca16bd054e7de6bfce1b29e6b21ed290300114bd0c2404966914d696ac5f238389af9e7a22ec20d341518a063dbb2703c786d0d8e46bbdd21a349be27bfde0f31ea77d8e9f97acc4f7e35485e285cafa8a825e1d4befe43959054b4f0b462525bfadb667e675accf11fb3151d753b729ef48b40f256323600bcf53d4f4d0ac28689cbfa8205cf97524f3fb1f4fdfcb1f12e1badc02d796c3645771699551260e5d173fe241f7a572b0035339e13942bee08c0ee07cf1fde6b4066cf471268dc90d1d3236ea709a19382dbecbbd5bb731781b6c6873e99f0735bcb61a911b475a06e325d0845552411a8eb89cb499f49a48baae83bb471fa617977c9f40daf71238bf1abb41ebc015b3fa0f818e6203c1f2aacd9427d3ab207fd56f5038b858429f0ab556c94035c9488284d08a78fb150910729f3711aa360adb29db85eaefe8c596a61020eccc7ff17cadd054e621a87afbad11f87709c77472240e3176ce1579dbd9920883dbde10b70f8d180205dc10dec95414c4fc7340d52d8945eeea3ed08806e5441e2a0ca6546e6cccc104432153d67792498a678ab0d511b325050d691e767a16642d243fe54bdbf6585e14cdb29b571820b8b705ddc7a3e1de5ae16a98c9020fff0386582e70393233e5bdea631a28d47c7190611bb11e0e634c651e1078a4760c624babfe3a6b394b923b8060d9a7e479d47f88d8c754411f2efced384c34bd13dde13493b74926bfa69f22e156406159fb36c6e1bb668202ca62f772f2d077868d44aee23bd4a1a2498af8b38874523367d957bed2e9ceec8c28e14bd43bebeecfc207c0c1d2ca5b4effc7421e890ede6ca22cddf3683cc68e64a1b2dd696357cb5379c2dc56e5bb658a5ed9dcb9f0fdc5896a704e0a3a16a5ddb29e8922ba0ecc217481d312bd686440f69740a342140ef1e3827dc490f5a0075c431619c2c81b21b3e68f13372bbf9eb3c83b1b0f529455a0e8afcebf3665cd2c7bcc882ef7aa02bd26d97fdca88ef089b9a30c5a7ba9179e8af2b4d58f5075df584d10d0c9722b83984cdb5996dd00a231c130f1614b044b9d38ec58ede7d993e507f0deda011a9d49943f81cffba678f403078470089e669631b65ab790202e7d616030d00400e48387a479fe0c270b1bf3e245af889c7a5f464c36efe63beb85c354e329786a095541c3a87407e82bded3ff8f5545d5b15fd8199fc9942b7e3ff704bb60ea3fb5012027ebee2dc645e16017de79dde8d2fdc3451d0c4963a0242043b161b479cdc4e9c9c69b815a220abc9133a74ad47077486e240b26fd4ef5ea014ae8200d33d10a5aea61bbd5df2943640cd8be40e13c0617d309771b8ac56a5fc40d4d2b92ae4dd2bf6f4a0912a761daba652bed351c7f7fb77d9015cfc0d11ff16c6e7d56e994b9d3e9b9a535397520b7b7eab3536b8ede81af676206228703101126ca3856f6d15d37a5cdc8c60778a16ef25489646f0b9cfc01adc5e590edca0bd94b65e8193873f502fc8ace70d48dc73c48dc356bf05801b1ac67ee81775cb9c6d405490dba3dced9b8a3392e0994332648f7f8c76830ccb6089dd890192c23655badc4ba3ee73e1ed4138a03da94fde87c24721fbc46edcf42f087d9f57403818c5016844ac6f3af66455b24cdcd8b7d9fa8d211ab6e78ac914cb249e91087133a0d9d0ea77a3da7d507a1112531e33337c34d2b0da4134feab903e33d7c536b43b1ec6d3750512b7a85832641aeed96d511df3a30dd4652ff20deec72bdf1cf8e8ba7838add156d5303ca1470ace055c263ef6ae300b1385e8fb9cf1c310e33ba941b1f8ff86f1aecce5be806185c73b52316315d3cde00fd9909649848bf3b2b11234bed850b286776e0a608a2b0b198f40320c8b14c7707675bb6bc8fddf39153d024120afdbe88164384576c705d2a1efe50609b7214b2684e8d22129c547daced52ee9d83bb5172698233b91c0215990880a3fbb4ec4a45c205a347c3b5d29ca45ac69ce7805270e3e689adcf9e96ad325f00aa90869e41804fb05873f1cc2aeb0f0df693001ed075465fcf042e2afee73f2bc133be8bd2c63533f1f31018870e66b17dd45beda74b0ad8419caee28399c7c88eedfbfaf01e3dd37a1f513867f75b9b54edf52c36980214206d8f01a87f60524ff51c012c2882c1f5625a9bfaddd4cdd2be07dfd7f55cbc22608205be56b434cfd26330ae385283d5d1f10be545778184c74a77d035211dcb0b42ed8f444c8442fbf332b9e5c1134bd773c105ccff556b52268fdef9afc654933abbaadac760434eee14e4030d909c1d91a330c5136afdf420faa09db4fdd2d77ffe89fbffd5bc87dba1752fb82eb61c17adddac016b2ea3fdf6a99ad25fd81d302b472d200acd436875cc3596603bcaab41a07c1c2b374241b32f37827cdf8bdfbf14cb336935437ab08e718872fb036ea0d913fc32d3d9d6e56661a539d4daa8e1ad4ea7c95c032391f5a4158dc32a59f5d2bf0fd88c58ade5826db1dd8135094468e6f1ac36c08d3ed9ce2c958e6ac81f1fd3e2296eb1d9fc882ea6e1f6ad0b128c11fbe9299730ad198a31e395d43adf92e324d5cf4fd141b16e697c14c43fbf6d22be6349836612e770ee0f70756f9092707c3a5b4274027289ca82951b560946ae6e80b3ecde60b194f5c2ff292b1d0bd986c0ffd96e5350597a2c40be8f24020549ad8705b2c0460a1c533d512c3138a4f846473f93c888708d591d14d94cb94750190ecc3f17aad80a424075ca435888e14d2b60ad8491135eba76b1e7daa6ec87b8f19e597b8b1f78719444723759f2a608cf3ec59b8b7584653e3311fced03fc61805884b3d0606a618383d5145e9a30c085d9d482baffc3476131f933b63a1b88f8f7104667d2b28457c42fdc34ff23e23e36dbf1103deaa1111b72e6832a3461ce17cd020d64809b526ead509f9588addb2b8ffe9eb51bf8b0786f6e0a6da650f6960b129f001a69bd499538ee0ebed6cb585d9eb1d56ad194736f3e21389089bfe72b2b1f31d37541ec2bbded7452fc083413631def304422655986ecac19555c224b1b1b7c0722ad379d7e7e15a8d916676e70ccb41c78c22b6c69065e78be41f532bcf7b204f8e9802a70930cd24576be5c0dc89e5c23d55b141318b71d4eb9ce369c8fffe5ec01826c2904ffc53e8d46a471c800274a29149b6086fa8d8c1a0c397ed685282843fc4a35f491f70a9dffe2c4f8edaaa808d02d984c90c1dadc3aff9ebced30772c285393329ca4cb79a295ba6b1c4834dc2ba628f981f712acfd98d20dbfa1e97c5001995d001d8a840a60fb06f3d402b26309d51b538253fcf5f1ef25949c90890b847992d9aceed4d1522807f5dd539d902af9d13c1d4103cf72d45059d9af2a6a90139860d3e736c52c542303d7cefbc66797066a6a4532a2c812155619df5633875c325efe4a557772f023bb92ea72c4a44b12c1934a8c6e1af196ffc9d7a434f1457494e8a567fa012b7a592a9809af5dd51ea307495be4031196b6afbf47106e5b9b3073e2b4ccbea232a913d08382d63a0362f03c0307e581c927d8594d228c6b0a2748c5260c0cbd535685d3ac304a2cef59b8c0a12a7fd77be35276d30e11a0ffbc1f3d09aecd8d29f4f7a01cd0eacc2fb0c52fc250283f3e877bca7ac813560f84e2789df495dfff0e330cf9dc66431d3a1f9f3cae6091e8810224e08c3bcdc1278ff40f72904165d901bd470ab01347e797fe20b810d3aa208a426d4c0fd1a61c169bea1e10ae4465894bfe5274d4a858a170e572c9637688ab5adb641b96120d2616815f567631ae4971c8bef7ac1378651a227506047e9af2f32c1c48910f8a258e2ebbcd2058a9655bd56fac6381469715a67f8459c501379bb47d888ff8453b5ed1f76d7cc5adc030b1e81876806d4115af28210580ea51069906dbf3e40cec3925e0cf4afc5f76d88eaa3e2503468b46986aee7105029e98a02532fbd086819921c438d2db4bb193a5b054d91256336484a65c048584caee22f833e1421cce20b0e13dcf1f16927625c9fbd1cdf6bd5db47bbaff3b3c9989cec607ec3fa049e5e2c4c84a875e287f87b62843c37555294dfee16c9da0457d36f3b7a48d12d765620bc2462060efd479e5525616c990e54e3da3406dd3e0f7afa872ecc4d4f50ff09f798148ef4f5ce2d9dae0ac96520f091b5d5a3204c0502e14ac617c91c51027be55d2b96a1077739b8ef88b16848aeaef2ddae67058bf45f053f0138da7bc5c0b98a244d740f49c13f927675f5bf3bde3fe7ce502bda68096fe7e96f8b3b3be09bd30f7c9f4ea1f538dc3cd8bf2bc3536ff9d172ec4df0d0f796bf92c62ce3de1d395b397d623a5f2c6e07e9d55d8f73a1a8a021f4f7e7c098b7d7b5b69eb7944ff7248467918702efe0a4efe8a460b60eadd5dbc8a262c8f959a8460dcab2520a450b36818e1cca75890a177a64c1b86f276c137c533515076c411c6a1d11f7f0c049351a45be1857034b35b2b3978a44907485f9a4c1bd1837fc74f0774ce4c085c1162df02451b2483a9b3394d249c5c63b75e7258d02618484ad5673600a1f0a0c60d616e120d325bc599101138b4eec64804d33e1126029114a17a810ce98e0f34c07917c0521496419de8687fe8c886ab734ed040502c960ddb27285380c04607c03ecdc9413c2ba40955e58aae80547cc382b869d23f15ab07b8b29983ff8819616eaeff5ab8168bcef231435a772402240812153bc21769d1854d935a55014914119f74367aba18ee68cda88718f9ec49f74bc08be6ed85badf19948da9e891c1cc4412aa29a2f1b951a1c3ba42e702eaec1c855504b29fe874295afdb38342fae937404f58d3ba38fc3500b628fcefaeb44511390a0ae32e2283ee95a5c7a853ab759fb0f8c5c8ba8a7047c9f08311930f0c1e1c46d049bdf04f737161e1da288bb4def1f03684f963d0d5aafd790f674a72e4a94dd6adac625e67779defd5e828bd4e2cbeae9712d9b78214ad953c10f7b77bb21acbd400498ab6af7adefc7cca990aed5e9129a1c21518df1df3d2c262580d1e575bb37ccf354b8d104923ea88be44fecab0282e13d2858682124594ee5371ffe10ae4fc21c0805ad8329118354769b9710967315daef3c217cf2fb0328301cea49a352eb66c64a6503d3881993b42a9b62c8f5701bbf235e0053310ab64f38b507e41871f6089f4d558a58279e1a89baa6bec99223d982fefdac35d0ea42080d2b4714bd201b837220c4b819557953f4f7683a2db7e035771f05bbdd94fc2162dc3c330394fc75538275d3f9a658cfb99c9a4661e7e5024501616654de947a2d0617549085d1851bec328396f55c126a3b0fe6fd502e555d7e2805a62a51643e0d627eb47c3565142c1bf01424219279a0bcf6e7ecd9ffec13808edd86931c2f09e8f428e7988b0c2d7cd4c7a6d24204f675f723fd37fe723502d8ba0d2c09512c8d1f5f57314e41e7da7c4d9b6c24ed9d8bd0ea95002396fd0bcdf9cea01789f9a6f8d0b78da3b4eff744b2a6e10aa21bf8457a883863fdf1d65d5a1667a7aff59fe0e7a1488890740f797a9213e402b47711f95a82eaf7a5e89c0fbc42fa68c73cb83a285c181ac9ff3e3a086b0a8928dfe9e9f26aea0a4592aa33fbe835cddc47be8f2bd8a490ff650fd45d83d2405fd71c8a24bb56151c2c97837d6e6efb72f54c910d33d59650245566241a3f4b8272ba897949ee67c0af1390d3b47f4c9d5e3e86cdfe138a64cbe830e0bcbc0625e48f204292c6729bc1ffbf2384c37d8c16fbf0b336b30ecc78c23facd5560b2dbb610ff06362078d700ee66cf3013321d385a5254aff75b38f6ec958c43a5e2ff6039b67e1e6649b1e818060dae458b7fea82b1ac0898a289db506b2a4f66fea9be7e6c1af95e164dedde469578b6728ff369265a3e07d60b0d36af569fdbb9b0754796a793814618304d567fdf4dda3ba20162c4774769fcbe92495f029601d33350c9fa8f2d6ae92654d331b456e4a2818b30d62530a30fb5449bc13495612477091fbb9558b2ac1c5488fb4da526853e1a4a9baae968e4bf07809533d0beaefe5008246b4ae649d6e3f72400219605d5199f743a3a9983011ca6a1c4804127fbdd2596c981f3c2b43cdea466f66497f981888a497f827f02be17c0169da9613f23b524aedcb06c5c1921136276f6f6c1186196b567a929eab674adf6795bfc692a5e3b665a2da03df9ccb894f4f0b3bd6ffb639d70274bbad3d2177517ca0b2714a046e7e49ed118c869f152cd2baae5f692dfba7a07e80b8cae6da0c5dd8541d104a56ae90a72207f5145719c88cdd6e6337e4b8edb39cf10b0a01dc858e4de50a5455669447d96765ba47982330d834a1809d3a61ef7f1490c84f8ee55d4af9599d53b2180467e4a289a9acf550e497a47e71ea3141672e1a3ff3401841f4bdc1bbc62e3405a4666affd2c805dee24a1d5e4d5a7fdfa666867f3ceebfe78ce1a926447d15de689dc7c4fd614660dffa5ac982db37428de95af6c4317a7eea3c3d89179759a0814e19fa3e9d8de1cdf41a43e162c80712b5e47a4dec3a2b96aec3a45d17166ea24242249b48ab0904b145a71f39ba14b6b8fc2fdc66b045c407bec3af451ba77b0d520ce43261b95b34f42f413f4658f6f95fad04e71647e5017a4e08dd501849cd69cc961e242a6d496e48bb4561030c9e0e76d20d835626a3de74f5f9f26b9cddec9af5892612625189fbd21b7d9a48a961c26a7e9420c2e5b289c66f2bf2080db0c4282589ff17bc4ea612a2c3a52da8396787d71a0062c6c54186d199f235d98a96a317636cfdd31cdc6d51645a743b7e0509f587d828eceb349591951e049d077cf0ccebb31b0c3bbbb0091c049cf06bb5a881d4c68e1b7481b3aec93b2ba08d2b0c96da13cebc5a6849a83f8ba7b61d820b69f391481c24fa58192b8dc73b9caa715731037d913226f09242ff7a357e75e5696447590a2e191c1b51a08ee15b4e48a18d4138630765a7da5613bd8b7e4aeb38e91f225970ab5a7f004cd588842cd2ae191bd303f5fdef385feccd8ee713b43dc68434448e234eb9c3193e63efdc77af2c07151d26d0fcc102b3c15c40e85c5fc939bad9d617cd1f671793ffd8a0f3bc70cc2083c3775a2dbf6ef3cd92397319aa263101c0a5c582c0402b19710556302945fe2dcb910edb4eee09d387cb3acffa21045c9c6f136f33702adc147422d59049bb094fc3271b5699305af2e8d27ee5dd521e2dada916a607f237a2574bb404c4b29be8c88a157d96533b5e32610d61980f1c2c4839ff82f047544b4f98a5a144cf6d2eb8ce8e1843b112de12dfb6571ae1fe0e42a624ac51491a3dcc68a105f059575242e6166f0c018d91a9c88ea2d7b5522439cfd7a21429107b5d1989a10b72a5e0aafe364eb2d689cab1b690dd724bcec804d187859e977002e18975fb3d13a4be88dc0f818f0c21014af9ab66ccedb29740b6d47233f3419e008c577586f8313a38ad770bb684b9beb6f5f5779198be549d72ed3759d1944bf16993caf70ad22f119df3393b90210174ca727cd8a052791e78c66765b9bff7ce70ed10b19bb45198b62d10dbc0b69730cebc8656ac4cba319d4d9af85ac80ac83456c395ce0a582b70e49a5296b2b2d49177912a21c834ec703c81b17b70610c3848c83dfe3d81193f3b7e35086a4ae0d6f5f3086210a6c4ac70d946c8646f7855ebe1f02f272d2921934addb97ca854db09ecb607c9650dc615a49165e9357984dde4436ff96600c887212d342e55f5232c61aaaf43125a3a9a9cfb52d062340cc9baad7f3664b867acd1e891f203a3520a91ce7f5371eb89728e71c2977e243b4a011e4bdeeef627898adf186728da2b1f9be9938354500c84a7c6232e9e7b4df368a6f3f6779248b03baa8194fe49715a17b5c3ab797eaaf03ead0a92da8381c279bae8acbba02be800e81abb1c586845a1c3cfe0513a688ee8b774e95dc7988b53f97a8360a2394b28c8997faaef979b97a3c9719f57b6dc0917518aa57220aabb8e3a1ed5708f09a4df5341e7e79b703d595d81db8e5abcdd869962cf5e9b2b4e7b077db67e4f1efcf5ce82599d0a40a0b311873c72a2853f6707f1f20be872eedbddcd2e22d8c1e9bf8dcd79254948993dfeae8058849517459c1da16d846623548bf97d5d696af8bdc0b291f487a70434f6d94dbf9a5d0c13127f71ef07577026a1e0119d1605446abffcc53a045b49c837c08349187a6b22f667e7f34e2efacaab56aeb3d57708656497bb49e238539278857620522920674b5315c1ee9fe35b6879547d484a22b2969d22aa5e5cb5765e726052f0f945783381245c4a5cfd05bf39b7587755e548670439d29e1e7d3bc1647c4992f0b8cf5218f247bd8b5f5fad8fe2580b9c27e23629e35235c46541a6421a531ffb12088af0087401ab708b7b3ffc4ee229bc33261808e9da6a600aecc5eb3451192705776407fe9daa5b488c841b0b92dc369e798ee9751dffc1753a1d169b80e4b49d1b6111ace0d20e6bb0dc3fb24a09a99de86db468779e460347adfd04204b30e6f78010c2fdd7d1563b42ea3f315474f807b1b2ee89424c1c7cb8a1cbffabe83d46488175e944218a04d099db51709a7adc7f0b6eab5ead2eef51f6a30ffd0aa1f90712053be93a848d5a60177f2099bb96365086b0eb023cb6f324afd931a1d24d5b843fa0ae177fc286af452d8f916d3b9aa24ae51b0ebc99405d8d6cc9214bd954db30ae65bd86c2fbf407e661fe9507302b4ea5c5ff6d3f3ae801b92e257505558325d06ab3949db258a5a054c9520d22b22b5e0a5da479d5d94499e1e7f32a07912e0f2e1e73cdc0d94782202efa0bdf60721cc17d7dcc6683233d2746d3873ecc3c986f1e6b8301dd6287dfbcc905b04e4e0d29cf5c963014c5fdc8bcc2937af95bb7a7b7f262a284c0d59c0cfc2c88d23661c542482f68e7d723bf8cbf41555bbd2fb269ad7d0d17df58630cb03a6a7e0b0b6fb2ec935ef3f409e3d2e7b4b7042709d12381fd2109c0bf7364c9e9f797cff9353257a73b8f1c9e3f2d6e7e13cfa7a8f36d205c01a5d99c852b1c57565f64fe590bc5a3160d90c8141bc5cca32b3482231c4878a7b9de71ae7857765ff551401f81cb5be6469de481593fa519b301b9a6b2ee0a50ae58748dd4b3bbf09315ccd8df881322ed05988da3f6ec4929687428aabb260537e869466ded336e61a0be87d6c34b071372f5f069517af468e805a47f38f48144a0f2499545ad8f19e36684d9b400826ccb158a6eb4c2be6c4c9eabd0937ce73f99baa2128b034d394e69244d64637e1f5efcf3be515c606acb6fedd79d8b2531d236a1cb9a83b01521233b523f3fb5a56dc66bd40a3cdd3a9b247f28c42b31c164a04232c811a8c95ef38674dba740026a2f3c7d4da4c21240514718aa73bb088f9cb7826a7a4dbe72cbe49ea9846181f112c61de114868c50c70b1a56b68f103d18955c85a32a28f0eb9ed80472647cc4f25de499d61b9a5fb12083504a71d4542806cf2a7fd6735f45094de6b44cebee1231d764a09697aaff0d8b259ecdc9b4575009826269ed69939b0354ae14aca08c535cbd4dfe08b9230044a8d4a6366cac13723ce91a5cf50b8ac3274ee31dd16d5c0930cbf495a094814ce91ac4e2b19b2bc2620d3b0037ba989915d089339fd0fed473c95511610a1a7c976eb883a152c8f667e3603153e9c5357a4a4de1e8818fb1507dc76960baa5370c21719ddcd770707c3a7958f2b1f3e298691bf676c7a0061c4992adf77fe28d53064cd0c3888a858481a87d89ea4edd8c36a640ef87c372a52e9e853c1f59259087e7a3baace3dfd6cd0c1f081f6e8e1adb3bdbfffde6ae2a0d4b8aecbc8ae6fc9fe83a304b655ef8bbaaeb4b1ece6491c44fdfc9733c08d740a01075882d1eaa5aeabc05aa6577aef0116eca34b3e1ced5e662d0b79ffb9deb5d83973255e976ffb2a81befb51a8475b5b0edd5149c51fb2a7ee063e7ed1178947a3f9729675fa0aab071014201239db158fe056bb3e34ccd5af9e9ec81a6920b240a2c63c7ec1b9cf5615282ec6fb5eb6c6b40831f2e4990e897fef3d1d0a07a739ad07464efc6fa3f8ca9a5375c4daea4b1ad758c8d45a882753944d0c893e0caa55fe3a00ff2f763076c08243108b9b6f1f0e41620309525cf43953fbe056263df1fcf11bd06ffc824388ec584bd49414eea8ca4aaa699d18e82ffd5215f4c55b0b9a212eb2c93d71880ed5447c90061851f46d0aeb55a1ec4dc0720b92f91e8fcf731c1c415fbb96919f5d99c906233723d1173efc9a346e0f11975956bf2387933fbf732abe0d3a095e1191bbc939380e3c384a3733f5481faccc8a81e0133f356317a0cf0cd20c15dfd25cc993b96a942a7ce90e338aa51f7c5bd280f2b3c982dc5258b37ca7ee23be4302c2b9b90576f4f495b46a5aaabe688e79ce70dc2468ba64901985589fc3422843bd7c4f0b78b56113a8eed389485d605e3df107aeb77dc42cbab641ea66b460b12c2946e5d5ba9af5e51e130908efc8ebebc776378405c33247c30285e605a66da7854834311be1d0b508f21db9766b0dbc8b92342075e0390d75964c8ee2cf38e19b0f96ebff928c10af5b7c358acb18cd0cf65c2f07aa2e77d56a9b6f71ecfad343463e875651ec9bbefc86c1ee59e6941a2292098c854ba2cc6a0cdebc80e01a462dd412fd977743d556ea4226a7c4416a45809c0fad55ea9fa38f944cb2d52832d0f7243bb2b523ec38891a14cb5a1392044d71e859e50383cd850979c35155c7ce01ced8dec8615fcf20767a8b8346de9dbe978e0cc63051b6be72c89a488025c6442552df2c20db1518be4279548f319bc178f591c800988c493fade7abc8b3953216dd12d58d4b5cc1369400a60651586beeec192ba9c95e5ac2b86b9315a3f4bc588f0aae42fcc5dbb8c20d505471b0e861be1b9fd33fbc5848f6d1d2e8c4f38f96b7e597ef9b601cbffe809631c1cc3f686a83cbe7d15a7af982bded1e9342958e56d8b42021f02895d52ba86317928e01fdcae84110c785604f011e0d3fdabf4dbf7c6220634f7e7a5d4e507d79414326da7567a7e246b28c4997b65a6254b0b2608cc1c5915e99e2a3972031254a8b673e8a12972bc15d6fe3ef4f2ed929f16286f06976ae3d03a20c10d821b398deee66fa16d838dab9e582529668cde72b13a7be3b594cefb47a2632c7505d32776aa78d84ccadb9d5d090314bae44bc1c10f0eca9d2dac77f08712a49dd2383e1ca4c7eafa354846101fb876e6068f00190d39878dddce6959e455830e05fcac1be5599d3c3a5a4dda91dec37beefc6a7462975c0cf302dd5141e2fb5017a54118c152eb822484230880344bac4d1ce6ad5121ee0d9c5f1146f159a0cc433a24ed478b4554f1d9efbb122bfc03059b03b87cb815c89293e1063fb21ab3c83b49c643409094be68e084d4d8a2cc58ed2a0fca6af9421d16b103c892dd43a41d33dd18d68831975f369e766186a2ced63a7dcdbcf47100df1f98ed0140d946b28ed3654cf3b1cdba4f0e07e2932b6b10c9ef2b8fb3c6d01b0f840d2715d90008f9c0f30fab068409312a8578d2062b1e933702bc085ddee30bba042d93e9a95e6f320b365ce451723580874eeb31bfb9def014787e96ac2120c730ec95f13b8f63bb9af2dccdc21938bc1b0e24dacdc7ce30b3ca688665fc1b68f3f3af7377bd5a86611a073010588a4ab9d23afa199b66f7e0a85f333028749775deda278d84246b681bbf9f59af6c93c552e8f666653129c781f34efa0b8515c8b0cb5b05a43a1039217fbc75d3ceda6b19121382256f58fd88f4a67e2fdb2dc10a6dfa1cb976f313f79dc80c66fb672b89137b9bac937bedac45444d8330ba4e9b59569aef83df01cf65d84520262a7bcbb2802a2f634a928c2f7d634fa80069a5768aa0d54b0691941d76a616f26535448ab11a45b49959602ccaed9806170a7af57cf649df5bbe5cf67c905d89084e48e31aa189af0462027079727b8de519b4403363d0299b84e95a9cebf06a23cc3821d8b71222e05cc168564e3c0278f2097fab095d7a2ded0e57ddbc69ca5029229f305c3e74c6c986fb855682464b46264b9d6e29c1f62d6e0b4f1334c8b7c1fa125321eb22bf01a601b664846e41da6a2f0bd7045dc99ab37439113f103464dfed1ccbd0b21c12008664b45d9d3c2741c45544e3709e59714f92b4e64cc723a9c42fec282a30e10333c0517435c94c98e2e991a107d0e10bd49f482618105eb3707615be5168b5e768f26da75af8b8edca3f731b39b7b7d95d705216576caa88a842fbd952c3c050c36ac3cfe1fea4fee1e0c2dad868896e8017e730474689782461ffeea45350aa85a296bed8c754c1f33bcae140e9e401793854a3f3272df4c38468026398ed83ab43253857a5f908aa42fe699da16074643c59ac9abd645f6ce56ffd387ce9425bbdd0904eb964535ef0264baa96a761127d9661fa9656b01dcedca5403684017c3cea522b9d0d7d2c1c5ce6705b3a229ea397ebbb6e739db9a633bba95245b066d97817abb59f1a2d0ae3660624a7546bdfdc595f569eff56a9092f91fb0174d3668c82cd6b7bd000b459b6e85525a13051fe79d9600a65076e8e6e8401a09f84d98a892cea509dbcc49dff007165c56a9a3dec4a836ae8cfe3a79d75cb9ea42c86cdbc65a02395f28d9c40d4af37c7fb230f89c4c7214e0ca64ef3dc8a1d018585af8cd37f1b3d02133d6fe80bcec3dd2e46bae80d079e19905d57755c19ef48fa631cd0ca9dff2ce59c3fbd106371b739ae23c11d2e4b5050df3aa57bc3ab110091e8f197d7ea7f982d7b6de1431ba17c016eb5c90c6488ef4af55d1c8e90b036442567f88cc22f09456b5392c1a01d7906f9c1ba1c60d56b02c32604b171d78d18a66c427a762bf343848bb470418517214a4955021b896f5c2491aa420e10ddd79d73504d43dc7f3d3a7cad4ee8800b79799c5087280eaf581739782871d9bd011e1bb99e680c12fc8ce5ec622805e369b70f9d3fbde89356f20134208bcc53f5685defc85562ccc6ef8e563512e2ef3903f69b351b27917cd40cb4755cc025b63e8ce8a119934ddb1a05f892de3104bc0eea57a79a1d11fd8793d3402519bcd547ac86d5d08844c8e0e06ed90712219973299ec61efbaf47fa228b9c3ac73ef0bdf392e8af9da1670deba8422424c79a1d409a36a7b5631d6ef8ea610f8aba85ef148444033a63aa785b4094aa4d0739ee113297af9f2e38a86863c0cda75e0178488e1f0af10ad4547106f833c1a240e531c6992493711981d1e786d5bb9f038b3ecc0152d0ada8e31e942f0cf0f417d8b27dbbb0bf8645bf6da146f6de5bee2d534a32054e078807ad07718a24a8ac4e35d890ad5c2724f16d609dd60909e8434a2ac2a836451c164631aabb4afadbe7234eb348ae7bd187c34518c544b606abf2a35fc832a8f20bb9882abf9083a85272922a9f3f10f83ccc0ba0e7e76f06ee41bf357e20f0f98e430f0a7d91089e91118741c94c8441f99dc738f2b767148392816022aa7c54957cc3a07c94a6dafc460b74aa7cb95ba37ddc9af91b72010db787046ddaeee9913df263116bda45011424a821e2a0ca88a4ca288320629129a3922a5feb9edb1a8ebb491fd07d7ff4f33131a01f81bc18d087a32a3f21ce3ffe9a27ebf4d644450b448a68f71702912306e5279f3f0fd8bebf180643dc4fcea344a0dc73fbf984b6aded8d4031557eb42f8c55fbeedbd35a7eac1f2fd6ee38d73caff2734413f6f9781269665f3857850a848cb0a68e6643bc21fa5603ce9f8badaab2732754c3f6c5438119ff971656c365c35b0cfa8750347ec8ad17f8b7cf33910b28260cd66d07872b843455fe9c916767fca59cdba679231fcc495af94b7630420d294fab9670fb589123682806b3f9412c0aaaf1bbade91ac3007c386afcc21b996a0a6e65c29943fb3db0f2639135813df3636b961475d8247caa8c32a832161183a8f243435019b8d41f8cf6fbe30330fdec829c1ab20b722ae8e9b603560ff2baf6a674f9fdf24340d0fe8ffb42fa759f03b804b37dac9c17b37924d233287f7a320ccafdd495228723d5bfe652f693cae0fd588382200fc8034a1918940c4a1918949fede0035cc23e199647062eedcc9947904740df7de8b7080d252a74048d01ddfd843c1e1bacc973a4aa4ae984d74da7ca28a5942fa5941fca9b2a41f2773048bebbfc8c8aadd9ce932829a87f2851b2c89a24a84a9632a892ca223a88aacadc89e0541c4911aab81a341c3915479286a7e169c8849a4d6d7742e3735c435f42b71a3acd872a7c0e92cc8a67fa99b009a45101ccf132a4981ac61583bf42634d31f44c89bf68258b2d816a7f64b2355ef9b78f44060d8217b5579f2bdb75615b118cdd22b268408eab8c0a30079762ed975fdc00cf740c0cf6c715c715a80d1ac6d59cab5e31d831b256d90e58f1f402bf7f51090de36aa5f9dc69a96a485b3b2f43f384e30f05424b58c2129670920f033d223f77118b7e6ddac3aff77500f300b4a6ee57f7a37b94deead89f8f4d4d7482b3fbca259a67accd2c622ca574d17159b9b06abbecd47ed9acad5e6c466bacea8b2455d6d025874b61a693e2521872d9e18cb87811a45d9ee096d09943d0d02515b2d953d7900d162c2d2b389d26aecf95e9c453a6d3335750fed025f5a2e3927299c19a3e5b13ab73fc7c2e337091a287bfd0c58957fc42171bb88484d4eed4ea4883862cadda5cceea68cd25a569fe2e2997255c5a2e52d8246d5c923869856c5c9460d97481225ff318b2d1417129e47242414244a2c70fead91a1d6ea74d2e35d81997d40a60d0680156f13da8cde9b8e8a036a753b52f7411c300994bca25555d74a48bc7e5845e6c382170f2f7e448688c359e78f4d4170f0fcb8d1323aa2f9620a20746aaa8ee921edcd425402a3192d455854184a6ae2a0c226a2894a186daff2055fad88786ecc343d334eeb70f79b12e97247dfae204a5bfbfb487fc1008d36f54b9ef2ab77db6d14de46d0d79b1723faa1d9bfc4443bfcf6d89d2d73e3d486063638343a59f8b72a0b16a8f711efd0d7994d2fdf0a0f43f3c44cf7527f2b40f79f497f364e5360ff414f4a19fcf711f1e73034dd03743df323843212f9ca18f1f1e30a1ef0559e9d3177da2a7def460e8c74a7ff340de11960f867eda0707b41379b1863c10cc173d17f234fa212f9c55f3b8e9710d41ac212814480d41ffa3abf42797b20f3df6ee516f2bfd3a06f7073424d598df3a6ec411a92110aea1e7bef3f8c3a37bfac138602bfd16b6d20f46f4337c38ac501817e8cfa73f5ff4dbdf50b5077921900afa9017c61a7a11f538ee42dee7f703fa1d1cf26ea820ef47573f5fb7432c00f79a177ae57e47efe0ce5b06b9c4a5ed4715c364b8cfb7ecb5e7626758c79f1cfa257efc44209eb29d6c277382ff841344a230db7122186c9c8ddb20ff1c08069bbfb05f47e4d73c3d13b6cbb5353c432e97941b2eadc904d71456b6d357786c5040bcb21d2e85345371290c654f644a42998bcf2082f6ef8d1cd6134470739b676bb647acacd5d1b3679abd6c75f4cbdadf5a98325653e1d2aa9abc6a7f2b48ed7eb984a8a1df04f9a8b44852639835948e52c39652b7869f63cf80f9a30bee4c83a086ea150424a89e469cbb433972e478d3cb3e1864ecdb47f7f7c3c020f7ca0ff77dac5781656d05b8b41f6ff615e8676f1f1568ec5b81a6b9bbbb979b9b8bc0cdf7628d3dc48f5e883d7ffc48db87747eb83df6336c7f44fb65d01ffb648f8debf61d41fd88a9e6c9f04c3ffdeccb413bd68de351bc05315cf2f78f1ec9091a7f670776638c31464dd334ede3b66d9ab67da1f6db73da16e316372dc6eeee66c36d62c01c342008e658ef4953d0102435751ecedd7df2cc66cf4cd3cc6e681b224733469565685450d190864605368d4ebd83d97bd00634fef66c17b732fde9a1eb0a67ed0af8d8a131f49cbd72b20158f46a7564c1711b43c590494854aa0b798486239984447121b9905cb04ae53a3af283e5e44c29041af64ddf4821700ee7f0f0e8f4f4c4ba1f1e5208349c73466c092751343e179242689c1f29c4a3518cf9b42071e0e2fb73214927b63e4e984bd88f5623d60e68e8a11f68385a71464509834ea98a41974568485574a5622f7b79590f832f5dab1515c0388423d60e96445eaf9ef1cf5ed844d13073c2a0b7aa3f334143ce49e5580c66ad393d6331a8d5112b7a3047b6cfbe9fe315c81d46ac51cbc553dddbd3688b1117cec3c7e8a667fc376f84d333feed654fd09bea2db7994374ad51fc50a03fcba4a021246874ee15b5a021a77a557f4ed5a6f8fedc6a6bacd81af9fe1cab4d194b455ded3ed0ad612aa4293466b4e219ffb0eba0b0ffece828c603a9e8a8a77a387ad5d18a1f7baa6a13f78d563de3bff117cef9a9ea8e56a31597bafa8f98702973c2a0ff68c5259652bd358252fd69e675adf6f76cca4b1dad98069406a7c147abeca533472b3984eeac0eff5e3955f58cbf0a86071a8e56aaea3285ea3fbfea8ff99c9476c6eaee248a0aa1ecde491550f9dcca8deca0b927c776577bcc0b7f681af63b18c4a2a41418e1688bea591db1aa87590dbb56f59741e8ce5f1d4e228d9888c0a023d668151242e387a3558ccdcb116e6578fba6713aa753ade9a23ca41768b3af54746dcfb4a128d2cde38039383145f30279de456a5116cd0add28d2f7cac3a0f167dfc470858c5b9cc3fbc23887a75392c73dea489ceec198c5a7e8c93032543c454f03f56a75c48f9f29dc9ed4d8ddf83a4fa8bad08b869edaf155f525fc890862d1d0534e7c8b3579103b6383357d56d948650fe2c90a5654a691a2ba13957142ae861e44e5946421c2ac8b98d0fd1cb0233484869efa14834b30c8aed053ae837dee2bef62a4781c53a833e1526a629f7da951ed2f85fdb29c547657e5f86d751e34cc27ed5cf4e2ca911bd41024af13d742ca70e2e6c479c499e2879e1327af48b9784e1cd652a20aeac4655634c941eac4cd0e4915d5090686ee82d545ead4dff60cef6ecb840723784ed159090e043de4f3f7f01efeb1d741e10db5de10e305a4440182390a81c6df6e66fe3c0f7dca60e9c18af7ee6eaf826e1363bc76570cd4b6d862b2e5fcdb98d4613f67ce811052aff8aafdfa54fefab53ae27f5c743f73a5b8fd95e911cfc48f1dafe87e48a30f1b7f77f6ddab48bf581d18f6cc7b52c5c822846efc361603c1d1f097237128dc091a2f3f822371278ec491b81387c2a1702338147e0437428f6710a4a19191891d819e9352feb4c0a31a468f8961fe16ba475c1dee2308d5a10559f9b985afc33e2d6012071ae3078715cacff1d323bca1720b73a706e297677012c37c7db35d2cfbf57ec497bbbf96caf65cd97ef38064803a6b1e10d600ed5cf5030c46d7646cc8038ee0a288114e48c13172460d49468048c2430b0b29372083085a182948b5681acc476ed0284910018a22a87001146490b164082dac9e358e14016709393c9f23a891460f4aacaef062cd18b9b377ef2ac075a8cc472a1307c2122492ec08c1c50f7c3885b47a193524557715aa3f0bfbae0a42aafa18dc035d056c39d4ca37e03adb1c0c82ddbd9fcc19743f16a19d15bab1633066d9fa8f2ec676d13041b1ba2a284e94a0a0251c9228ba1f2877033194b80225896d099d755550600006e82ed3dd8d49c6dabbddd77d334c66187bbb77776b2ef213dabb7dbbbdbfe69f53bab3bb3befee3a80c1edeef66ac60283fbfe3d0036237591492c9398ecc0c8366dfaa6cd4c82de9ad7d33377776d76d632759bbb3decb21dd0d8eedd340c7eddeab2d47da95bb7bdbbbd63c750a563984f20d28acc867ae06062f56a7f0422ab7f63b51febc0ee0b6f89c9b9bb32cedd53ba6f5d7c1efeed855d8e0ecbd4e8d576c340dd07f4e99a6cd1644ad904c3b0d9750c8934b5265846837ed1b61a390d8b71f3884da009f60102b732bd18a8fb80bc4f17b78e93a151818666c76705065798b3f36454da8a152bd77ddd397afb807187f4316c1f17be7e66d731249226b56e99ecf3de88411aa578f708d56943b3cf0b73a34c29fb30c70bf73e3a6edbb6b176766adce99dc6be27f7edead0b6afe58e0e346218b631c88c38dd73400448a264309f004149e5cf3e3cd801537ea0c2065d98a1841064643a90d1fb832a95dfe58d4f0d55a8417238124bee2c3f9052390a1de808edf40f825404d4ee700895269018c2c80e7690a2e5c0437ce22ac9684b683a9666858a6b45f9618e48ab6d5b556eae403d51014ae7090f3eb06085cd939c223a4f90ecc0f344072c60010bd693253db0b06a3d0163080b57f08c48314e439140e30228d8e0a25059a4864f73a8fb5043fa6408d1451445703950aeae2a0a2332608e05a11451fd73d0a89ad054553eb7597f86715056e0d2e142a7a7e0cc05bd779d33758f4d7e5083575371c39c04029fe72fec7efb1d1c72fc5ca47486b0fbcf03400f24d68e7a2d6ca5229187c34a1843a5dfc61ef69b0744d68e7bc871011f512565d4ea9021dd1e866e1d318a921894efa61018431f13e1fe96674206a2caaf4d3030f4873ef4d5d05f0db1c9132b38a71a6cd0ae589d5abe061b04803af5dbe029609d90803ef4379c628b077202e487bcf782760ffaf0fbd3dc43837f18c5608be435fcba3504dbcb8c446a83eba4cf0d086d7c406d80426d84a83b2f284d4045524a2912b14829e5e7b2b308896e741b2296918b74ef916ddc70e9641271b1688312915948263c99cba6c66d8f4d12a9bb6edf19cb284d3d12a160983b2834435db7dd32e7de55c452d7bd06ef952a6361d5f86956f554aac5634bd753e3a7d79b2c657169964e1ea1a1a75aba1bdc6198a7a212687c1a2ead4135ee462793a06b42473f3cbca77a8ac90b3387af41678e6cd114dccac43d2d6bceb852ca133fb149a9b2039c2a4930a9c2826d08f4061bdc16f453846e09fa7175395013ac688252277ea02c47a6a80104d7841a41362be8bcc201817e8e90a2120423a83ce96840b5ba2a2a2c2aabcd414ca3950628f2c4293cdc2d85c1293da572bb18acbfed22b99a0aead1e3d8c23a328362efd664317236bcf56c3dcdfb21d76d7563f3398d0620b3f2eaf0df7af3e2ea701bb4afffb1e79a79d1797548d91f258f64d181462c2e836273cb6f908a7302c90bc9e6e405831ad247e3d5821b2f22dccb7075552f1c6af83458175cdccf0e0d339cfd0ca7258c94990e97648d9f25a152e367ae296c8a3ae8644f1c414a8d384c6acc76b2568d99941a33cc71b81466a91a9758824b292e7d4604971a50e36f9819a9518bc8f5d01f19eb5b2bed990e6a9443e8aaa6a0bec8d9781127b038468e31f627c61837c6b8317631eec6e82d7f268a8631c6b831c68d5df7dbc7996270b65a5df7b3d47e61b644a99bddea3e9014900be4ea960bca05c5b2d32d908b65876587bb61d9e16ee604750be4ead6092c8e070e4710ba1d9dcb692928ce0897e272fa432e277e5c0e779303044c8d91ce9ee1010d297fc82636e156266471f5c7974268f3703882d010843de8c5257feca3c16bf652f7433fd010f46271c260a6245ba91894456896b1b0585a42a8fc908515060da0575440accc2344e58f12f4f2403d2dc8cab2434316160b8bc5093f77d3261818643cc90f06fb3dc9bfe134f903bd4054768a5c4025e901bd7468d8b579482e8c859a9be728af7bbc569bba795a41b884d52b6ec325e998ac2f4aad78a8d9d444a957b8a48016c216a0c7ca96e28298dbb4e9e5dd83752b0bdb25b1efea0c06a1923122b8950907a0aa1345f7b9dedd0f0fee254a0ae9fe70df71d1658c516e1e7be86e1f7737e9adec6295284a6de8f6994acaed777b6a43a7b6815cd486621c113464517d3cdf1466827e3d29d84814e55ea050a1fbd26270beb8a80df5ba363493281a825e5b0a3da480e25256670a3aa419d479449da1c8458b35a130c1a062d4f9b99851e75324a8f6da872eab14502eab36bdb4e277a379337e8eecfc97d60b14e65635baaca2cb2a8a6afcccc966adcd5c5ce2e11247172cd6f4f17c3c5dd4f9dd8747e46eb2cc49d6ca5c2caaef0a0974ea16a9d01f19ab6e2fbdaf87c1ed4bc1667e7f8ed09e998fbd68f8f5d4f9f57c575c557e8b4ecb8ecb6b6b3e55be0b152ec597efd263820d97b84a16848ea8724d2fad9d99bf55f9a19cad69a952baac3220ac2905d44b943a9f6940c38fa7cee73e3ca41c82862caa4c85fd0e8e91e2e3014d90abce9797168baa4e14747a26260a1a825e7208ba7d8882eb01f223151a825e753e8867fbf920295ce27efe4d9dd5850983d365c5e07cce65e5b28a51a5806ad3fc4c55e773a3e0c2ea44c1d533f3b91005579de14bab4e4ffb39b5cf65d533f3773013347459d59902aace5f99f9cd300095093b241a3f9ec1ed007c3882891d7c38627573043a240a4e0067a02abbbbbbd0022268d8a4a6a096b811fc86bb0e48aabbbbeb547e9f441852f93b229091020ff632786a0065082ba801a84330c308d59dc7cd68a2fafb6393827248e2eeb2554694d5a28c15f06027b278a9fe534af5efa49851fd476428a95e45f5ef501297b2536ff0f0493bf72bd57f05167c6c4d1c637e5284a8fccb599994d290133d7447a44057f0c0e17cc668ad601b9160a004064c3a1a6507cd088a1ba308452612af6d0c368a64a79c961645080fd84906aa1925081da4119e2cca0b70fc14831d2c4a133ef4c9884a4651826224561e85c90aa2112d235c340a182ba045a0ab9d90a069b046a418248071a305ac699a1290a05a420150578584233624d0afab42020e5d1114852859a0718510683831058d263628d01842070d225ea08142c32656faca41f51f915c63bc9a6883f322167185739eca79cedd91ce8644c77a9a39a9045303cbae90f2921f30327d051ffaa5d484a0fe3c23436d3051051355b4c4b216ab99c3404115c6903d665bac4809eacfb9f698a77df6690147c5b22deaf68d7da19cd5b1fd0e8e4a6818caa9dbbf6cbb3ab60fc71ad435ec632827fb5235867270546eb706009f167054f9196b6b70a050e3ab474c9538a4fc160555f370d9c708b2ef30a8c36033883f9859454ca8efb80e83432808b60acc5fa602839d6519cd0a0c760ed7f12498159406a755307fbec320d8998eef80edd9ccb22ccbb22ccbbe797e649e49af9b314250703a587bc6f5cabdca7e829cf94f4f1ec13e62ae6a2e0b6e7269270fed9f1cf7ebc9385c01c098c2e6b432b46350ded01f124575319136ae2538c73506c7725159ee8c333824705cc45c08755601650681a0ab8b00850a0485ea2b7524111a663a9de93433c85f7ab1eed6ce9230c8d9ce97e9d87412380e5bc235d86e73941826e796dc0c7a058dfb72bb0a1658a85458f0d0d151a9b0e09193d3d383050f89050f4f4f8f0c5288142299482162d475ae8a97119514e3bbbb7377777777777777e3ee2e1645e4b88b496f1548ac847dd84b190b1043f815931826a5dcd14cb16f7f5daa7f40640cb0f5300cc3b22cc3b2176cc48f51e60e63969344cabef9fd0b4efc52d973e86729a5bc8185c79f9f87fbef588d0e054bc80a88ccb59fa34c2c40c791ef8ca495997ff908cd0e1e7d414be1f7b373fc28831c4e2a6b386ba8fd936292277d712981b62cc1a62029e8483ffde17144caff7c44a2cf8efe78f4f9e3c2925141df0c9fdfca61deaef102326ce2a785971a5a15415922d1872da97056d18bbe503ead21a7fef87833c8076d3e50d94f9f6b0f069e894fe9e7230bca2da9e50803833e188c0f039b5cd53ec2ae87d7cf176231a8ea1094eafea13f0241aca31779b12e60c70e061b068e85a585f3b4efeeb9b259e0a64d9a181514e2662751b4432d18bc0714a725d526ed5b765a9ee012fdf8a2e77ab6a767e2733da15568257a6269e6a439b6a60654f42115795b475eac212fcc6a185ac996548b0d6afc168f85db96d4d6446075445761134217c060e4384f8b2fb8920313506dd23e827842df12bf45676b441fbf250997d803551c415c350cad4451f4d1296848b917799d14b4496dda9e5d155a513a8a1347a4bd48f4346dda5ef4fce1218a128011bdf6379c3e1f0f067f2d0cad4435706abc542767d11701ed145ac91818d0cfcb1ef9312fa09f97aeda3cd789212f6cd9094db889009f7c9c41439a05ec885b03ca959bcfcd19b5f821169736e4a49b78826a26d8f44cc76d5ac76d5a134c580cc6ef3e86536a1db769b1326150c56054c26094407f2c80bd7f3030780d379c385742e587cb0aad56314150aee18656ad659960c360dc534baa67b029d4556de2542aff9e36715fcb36a746694f8def49e8729cc76d907c6770da6c271fa33168d8926a49c56fd189dfb2137fe48a2daa1a5b5835b6b46a6c71d5d8f2aa717453e308a7c6514e8da3948eaac68def3df6249a423ff217d296d48bcb6f887c03673355e4efaeaf4be97dc2cb95d2bb73e066ccb26fc433912373153e67fc1d1c3f18893d0c5a3cc1c8ed51b0c90f06d3b4978f022472d31e0548fc8361d3bea658f6edd819feafb1ffbc0080c5e47f955f38c9c0418b092a86d8220cd629ec6f051a156822e6030d571524feb6699f3f6367429ef004a5377e41f4b75946cfbfc30797b2978f012e69cf39a952864b6f7ce11c7d21583fdff2859fe80b7da0ef03ae942a3fb9bdbfa6691fb5f5b2acab59f6eb81a0bb24b097aa27581df2c32ec116a004ab00c6a1caf7a87911882a3f437d48b03ae4c700fb92a0fefdafd337603d69c0ad4c88e5548f71524a22fd8320cd8721415731b4699b19b0edcbe289616b3609f049faaa4df2a3e9197fb0baec9156d6245bb2676be2937aa043240ed53ff324c027295b6d9a33942dd9fa0af68c6f5f38b3cf77a05c1c41d7d57a7457e88e6601eddfd511ce1906db1443cff8fb8cda871d1157adf9c7d0fd3d131fcb9156b8425ea2b6b814469c1a597c6235e2f354afaeaa474955f524a929d455ad31c58b9b7a80ba4b9c40b1024465716955568870bbe273a1b89f175066b1222a24692217868440e4d7907598071afe18d58ec11394508ea99d89aff3da51b14d188fa05837ade83a22040de3111abc1e91efde479c48049be4c74ebc58234ecc89cc129541bf79ec1114d5a656c59b56b5c9553164d6ab6e0c9bc5ca82702b137239d59fc311847aa68a9fca7b40c34cc53553b589dffbfd331697b8ba2771ec31ec69dad48fed601904cb321583ce35cc5435478b1f357bcd0b47557b6ece656d5773f9e01536bea6c519490f626470dccf13bed8d172a9a8fe1f1efed1dfe54e517d77f7c3e75d9a287949fddec49c118726599665bda33ad6ddfbb5bf8db14977b7dc6119b127f1b868e8d260cb01ea2f1fcba2a1a1915ee7c2d759dd5d62f1fca34ae7189ffb23c52fe8fc90c61fa31abf968bc707377f7345d3b5e8ccb8657bd3eeb946539a9de1a795431a1c5728cc0b0098a1bf86fdc1b850637f6095c1a2f41046116affee60eee2d758c272811a62a8a0ca89a9340065842d7218020f6c10441a2cc3ab891554809103173f9c18093ba0e1a460430919b061847413d83042c3c146aad9b861c3a6864f837519343402f814d64409f02f03e600737cc454703a43892ca0c829220934706050fd0bb5ef074d7577770fd5c066eb41159bc55440c40728dbcfa76ddabe1a8eaa1399d4884d75ed833231c93455a860340ca9428732525beca0015661a3fae7a081a9abaaf2a462755555baa8e1d7986950b65d57b86b5440fc69f7eeb8efe4264955ca5fae7bd3324cb6e4a4dc304d868830e766da625b47ea999e19ed9996717560ed5d1759d367cf34fd74bba63967d6ea1916cfd04b2c4b552ceb342bebbb4eb14681ca17d1bb2fc277777729dddddddddda574777797ceedee218c57299d3ee1296d328f4bbba091fbebe813e734e94ba0f1fd5986d0f8f21329c17560440d0ceabbd9bb6733c3aea0f1b11019beebed3de787ee3eb3afdddbbde59ae6cc24a645675c72df959815347ee7ee180bbb62bb3f56b02d9ecca8a46d5546452b158d8800000000c314002028140e0a8622a140280dd5791f14800c7b94427c521b8aa35190c3300c4206114388010400000c01a1a1a1e10401e983ce4a612bb7abf4b571a5eadbcbe7015879ffe8231666ae0086786053be3f38aab5257370cec2c695011eadb50640a97db3fab45c2045cf27117d8e43aaebf24938006dad624fb9fae99f6da2cf83e8583bc05634c1bc8adffd1fd4778e22de9b3d992d02631d5616977f525a6edab730a66003e5237e1d81414fc48e7e9d0e18728e5c718bc5edaa06bb7e23043d7bae8773e749086211280532662ecba64e1fb9a9319e8016e651f525ef0e62ecff85ad35a7eb5d14cedcdd668db44d44352b463136bce7dd7b641c5bca20481af63947911301f3e79c234e011a746a08ca48b171d2a0bab992366c55ed6151514ccc429fa8d3d99a3aa2dd4d1a0747d6b38790970ed1400adafd438c3e8e7fbbe1a172cb5aa5d3262b86bcc46a8bd548b5c037f1f04808867c92ff89fc5fd9d0ddf096d2ced9c33b6f8f038c5f5592ab69bae8881d1a416198029dc8672db87053c7c3aa30f90337e990caa2482ae7c32956d0f88ecd735a439e8f2b9c2853763b2d864d7b69ae726e2402b0fe968c5648e0378c863c37cda40c4fdb06e31a2e922da6186fbe3c0b05fd7282bf0f32e519c9bb1e4db1c9eb1a4b2cd74c0e8816673def172df64e8828505cab8fb6f9d44bd584221146948c9e64ae6f1e20e933b58825ab0939498fdbc91a7597a068b97fdc9137d6d2a3cfc79b1338f8fadb2d1b714a1309ad6cb366423df74f024df94aa5f2dbc450b1059f734962909002663d22399265f405177194a46f26b1347e7d189b543619d296f1693a600fd703092ad935dc1610e0519230a94dd80b54117bafb884a0420588997905b7a7fb71025c688bf6158ce3bed5899b8847f67f9f3b6591f2e4d66d58c30a7e0f47fc3a8b0b7f9d21ef3710ddd035999d290a6019dbf12d61c2c09446315b51571778d51b72f3336acc41445ff004ce046a23dd83f00c25f0402ba6bbacd4db6311109d94b302d00437f22dbe635a07a25a9f4d72e622cc4e640148ba9c39d0477cdb3f467090a260dd3b8fe4f73995f8181da62b96c74c913a048dda5d6ebdb1a412e2196ba7996b592f24045ae40deb859ed3a108a884e0868fe80881e46c32ecb16e576cb6a2d57f827af8454260f120ba075f2130b713e97c9588be24c0f74820043265611c30e8ce6ef221f67171a861c667d66db6a671571a4d7c8976d8cef2ba3619d248d6148b64116c7573e572ff81323fcbbbe9e969ae8620c0b14ec4cefdddb7ce8cb5fc61681c1a6df5e1a94c0a3bc7da83422ab25e5d4ebeb1e463703971bbefd202455f9d2decd6983216f82311fb0c1662e62c3a08167790500e344e8cdfcdcfb01629719df04811d8de3f1f2f42f5ae089ea5b6c8e93722d424740a23a92f85a34088b310a560ea1aed6ab8627945099d3969c70d2113c2400d1ce03418302a5ff7a094a7973ec890874050d80ca3bfaf0de7e6e5232610143cebfcd4df05c26fc7d2e9be5db5a7486629f9a529161f67427adcbd0d4947e1cbd83bf3414482bd562c2614d2eb7c119b51a94380502ab7987829d7d08afa3f3069745c96c3e60a239d63bb3fd1a011e684e4c99a524749c56aa5ebf023a7a0084b2d24b7c26886d675afe3c36bfd4b515591be86d319b00d254d3312568041da42d69f4e598238f5eabb8e224c90f574e961952e927a42f37d0331e22943bf67634915179befb1bd85e237c937face06f4314109d1e51931fff3cc015af25794d3f368af97addfa3d2c0729f90fae10f62cc22c342999243d1f20c43468bafd77d67850c39155ab685374f54042211e42f255e6c36f1fb3e919420d3c79f49f181ecfa0f9716be10d541736f5e950d8030bf7bf92ecde92e77b184c718450f22329482cefc344d20fff924ae289e0ce046e2478c8f6aa454c86b09e733011fc0d506464d04ab04a7e03a2a9c02406ce431186d3a655539904e30ae73cdee548781ce5aab0c0d87fdefa532610c067ff76d37f2bbe0fd8231e014dfd152580a4e1d1c84698eb3cf613cb5ea78e32c4cf3b101649096efd3439a946e7841cce35451f012d13f5c433c80956fcc4de55653dc3cee9cf84118cb42af4c9e48fcdca52891331ed8a91baf49353457f119380c467c13f27a974195a2ec5a8b190ba26ebe7264ad7a1016c04f66bf1200b3b6ed7e38484ad1f16fd8b72c546c025170668a1f531ba6a05397cc157d4ddad01d7e8cf4068d47617adad5fe3eb552fc22e71398cb824a888ce8c24e691244efd2e8d51f0709af78f9e04e17fb5fac8e78dfc85a1bb9718cd96b50fa76e2dcb65482af0d771d7dbf2a6ee11e100e45c937658339c834cec723b2da0f29e2d807a4e11c3bf5fac0dbdbb6bdb9d47a2376d6c9329c9839443c69529e2a3102193e2191a43413599b842bf1ea8f225cd201ccf1c6f005cfdbee4f91e106560225b6ad437135e1f7cd075c4ab8721ed112fb6b7b1ff1e8d22ba7a5a7b8e65935b0ea13b71f5d17d4618600ecdde294a9ef2432c068ff6d21304ef9fde2dd20e039cd0adfa7649afb03e4c9f6b8fb6d53a1586490d2ed7c4746615ef8eee200e532dda1ecb58ad0544c911fa46aa7c4a191fe72a3b5c9b093c7ca18221e4c39b4adc7f4a6f448af8921f0624ef2f037e98beef6edb94eb1fb66017d54610aa9c32c4bf4e05d1dcaa339f8dcd8ee645b5605a150c2c5bfae162064591ce2d5f57fdc288848b25f8ec3552cbf08b4d98f0e6f120fad2509110f1153070769e6617409fef9868b8b538a953f6b9a029e61b1391af099489a927a1a60eab2b2693c38ba8f708eb8a0e7e6887e0d7a13aaa40824d73fcb3875fa0c0dda95eb9ecbd715c5fe46017e3d2f3b3f3d2c99faf4a27c08662949eb81091eec0520601a8c3f7146781b7e32cb09bd2dec205655d05586a07a3f62806a870a466fc3e9cffaaf4080bdad0a6e9cce0dcfec4b79c0d7aeee25ed6a7464a130f1b4fc890aee223f44487fd354a3334c6aa031af351e30f366cee53610387e7476a264f8a296cc0b439023b23d3c954736444ed528b61c938b966b0d1861bf13557be668db291fa8bed60a537355fa2645a9bb3d05f2fe771adac4d3c25384a961b424fb8086291edac3dc3fb1fcbc2c7f5b91e880715bef623cc7079439f8f24de79009efd72356ecdeb65f24fc6fe8988cb80bd0c2504873231c22e18e590069143ad198c7ae545b3052e8af26740f34523f3a7ef348cb00a8d5f94dd3db892b23bf4c96790a17f8a191e73fcfe845a5a32ea5cf617c6bb6ace4c2f6e0d967bebe8050590a24e8392b75b3b297497463e418a79ba8af6af1898ea83aeb9ae3342105aed0a1d528513182c1138c5346f3f7c5732cb0be92e5d764c04d6059452bb0f5035d546a8a0354c0898397a00894461c3ba3b3a713d1b17cc771638e23a7e15b4ff8b529dce4e6eb8d10e9485a399bbe10de375ddae7f9d7d3b51ebb2a3da2dd8b3d78948ace0aefb7cb6dbae464a96faf2b280d16833d355ad70a426c59f10ebb1ebdac95827fdb50e9c83d1295b0181a3a25aba61a41f407dc1c1d53a89bdb570b854def04ba892110794dd3557dd51ba752f47acae29974429b495c0e7c71caf1b75f36234c5ac932bb32663b433f9e4822f8272f0b126b31f9995bcb10db2614d54a952e0c2a53d8be87a20009643f208c012cbf5f70b5b3c0b416d8179442b7f0c06b49a47bfb4d383a0fada0296f5b9592ca44ddca15fa1fd1982e61277dccb7d6de92aceb39878041988da1dbfe7a5911ac4be44679757d71923d3e92c838bc548018afd6828035022487fafbfe0fb6023c2d4067c77222621e8e8450fa36b546071a28d4def58309ce5ef0caa0f586230f05ee9a76a35348fbf18b1b8092b912765fcfbcd5b735fc9b7130b9f84776cbe5d5ac753b337e2a132f7e7b81aff8514becf81128417a6b2fa618c16c58b58163b25c72a9402da1b2ac4ec97ff4924bb392e33cd130ed6f87c53cc9796493a497df3c1bd7e818333c83212f92b6106ce3fcd563a4f00097d5c0131548348810b3dffd4bc545a3106735c9849ea51d4e89684c85912748d653d463e7331c00c429c1528d3381f397a776cb4185e1bd0da327e429e38ac727572b5ffc99d4d14a4c50cd452982d40102a2e7ec569ddb32b06e2e461ba198cf9160f8569b6d7bf886d6c4534a90c8c359b16fb8a5b0b95313c6b3ec754a6d71c3fded2a2a34c3422504cabcaa09646cd38d88856ecb5a4f6bcf0cbbc8af96cc49b9ecf37fdf733852ea52f2270dd774c093da7f1d5638f17360271e82347cce777595923972350c4fa609a666dcad1ab8ff5bd5a6d53728a7d96ad6dfcf6b62e2ed387a6ae846d33f4f41f746bfde5eeb9ab98ddf9901e4eaa19d5e2c7c3bba841a2b6d1ebda30d9e56aa1ce3440578f9123dcae6de9d38ea8b663f720a22ea795fe61d83b525ff0b4e09d1365807c3b342a400a587322e7a2df44f39eea45ec199b219f7e42c1a07b81c818ffda263c6546db434eb16e46ee479ee718a76c70f1a17fd91c50809ba34afb264e2cd3f3b0b67ea3b2e6f8552507ad558587d3f98320fb0d15603a85cab8e84c507a39f6ea6d52cd48017fbba7c6d3979daa97779c64bb5b14eeb1a43ad55c7814db431714c371b9a02217e3046f707da3b5292285aabb9c1681326424dbde4901a1269bdad18270f48521f8d627161790ed92565e55b02ae603dc4d07e844f6df358ea1d4018712c737cf467bf81ebf2ba1c8a0f891d83f2fe236cd8c6825d6cbad69ad64b8a30e6a64daa5596cb7d6164edebc744889e31de316322b2e5bada3e12eb16702e8e058f9f56c0034fd6646094aadbad86dc0f1c676b22ee7ff5cb182932d649c49e674140925fa59b0fa0fe2512ba3173426b62b0e062e54dc82d4de7b18f59ea364a44eea86bead66ea0d4edb8d36bdd72da5a0cce07aff9a1e1c6baa45848391261f294c9de95b90678c40095a0a197af1a49650c4b84d5ff26216fd90bf045aafbd09e21e149ae844745328e38635a1c825caf8b616fa76279363b09b0d4b6b3656dc76df3906c1b2699de32db3e41f234db3f834ed7869ae4cb675a712187605c9077f3c8ad8e96a98cb3c527d610a3ce964f739c205af6f8d52e50f4c66cebc912716b8e37739270f244c74e68a49eab004c3d27ee36fa3a10c084902bbefc7782fd0a94917ab34ed1131240bff2ddabda8d68217547257e39a4806e4cd82f4e158df5c701a79d847b6e931c4ff9837dc6710b929915bdd0c33d2468414ac5d0e84d653bee59b3ccfd9f7618419ff68763153020666a7aae1b6caf11103bbb56abe1995ca62145591e288e74e6b2575eefa46735473a47ae0963581acb042e176021ea84cbc9ae20aa0e5043da79bdd74260b20e4e3723b3778875b7ce126c7bf9e2c515d6aea2a5d0575db23515af83a76d2acc32674b8a0e554727d292c5348996cbcf33c3f1890c3f3f7e06371de462d29d8da90b6891310d2ed5323da0d235fe3518ef135c750e282492a1681da55dce8ab7e8c6595c5ee7dcdcae66e200b93e1c3f0e39861d0f9ab1a464b5e4a352701fea36e854728547420b281b95a52375450a6715d2a8811e698ce910403277c1b19a24cfbe71aa8ea8fd5d41219541bb88eb82bfbe3cb1f16714c82d7e5a6ed8eb16112055bf0d722bdb595672558b4c3b0f8ca8878f1a8365fb554203a7bf62f2cf2873eb642ddd04d15d7ade6aa728a7f5a4344339896ce6e2fac5d8db613f6c469b0a794bd402aa86ebf0a3c3b1cc6d7456a741d2b5082da36a9bcadcbe1f494df4d23820adb0325b80e7134b35946dfd4516f0fa8ea8a511c4bad8af11c656abcb1b7d8677c56f56000f46565c2a392da82c07f09bd702a4c0a165be362b2320ba9060faf2140e6414539e923b6097a79337861534f426b52429698e3757634c09a89e3c44027a27fe08854b634abe7dda607c8a725f1ce5ce61bbb526a1574f2332c2e91e5686d094f06e0ea255282d48566f548ac841a6ed628eae9f30a7f348b5798ec716e1e63e146bbe04ec69a5a92b70691821e4306dc3197fedfdafbf45d60a7d540b7dc06983562a254f91f3d971e0d461838c4f4663e5c48803f7ba934a7feefc92df8f723d771af2881cc0044b5182b1f094692343589c5c3ce6266b719646ec2033452631fb81ddfa735cadb7b5fb06e4c1ac46b238362c2f74b29161092031c1ea93812d64392b95ec841cda9f70e85d9afde7957c8c67c1b7ac622276d091f163e318de860612ace18ac7250a22dcb1ca3a6747a9d6d577eb625cd0d1864e6ac8bd917a17b9211c7e6b8cbe0b1601adbc75e0d37437e1b9f6fea88374cf954b29d057c45c1f599e78788e96debd386871dcf6e3ac77d3d952499c186ef771925e6c145b117b2947dc579b68852680da0cd5d210cc2dd92a535bd98998dccf716d512f41098ad9dfd6bee39c028ad516d4b864a352130fc2a390bc2ce6e28082e1c5d631f544ec6526b86b10a86831662bfaa3f4b6fa8e6a7d078c0c6c615761ad0610615a0ab913901fccebab4575b6dd5cdaaae089ac29779e3e7ec365cb43292bd57b18d4ff63953331587261a9a43628c81633da2c6c1917400293bc1836fad3d25cd36d1e4a6bb00d74134c924aa50e47a0d95557059560ac886bdf7baa6011dbbf4fc52d830dec9b9fa43b49f593d412e885b8e762b7871f856907ee0f5f13fb96566ffef0d718066111d112a813fcf6495e28f86b1b27fab02ad3402f7e94db45fff46e04785068081d15258251248b59ac3b61a8685a457a28015e3a25f3596b2f4591cee02ce02e55994066a2952dc62b0d262d02673170cd3e668e706fd68ea1bd4f550e6883891cc822be931693c924691d1c1e1d4f7d7f41723c1734502a4adee28618fd37187cc9eeeb3769885db90f15077649de0ad8004ebc9c7759ae0b1631e8b4342c45013b258df5ad9a70004c307e4b416c11db374c206c4cf6b138e97b6c8f1ed696881f03a4d929c8be5910997b27fd6dd0abd1c324c8b711eda062958e807290b1232b35591edea0458ecc2930c808f38f337d8b7873d07de16e1926859cf88397d263b74f85dc8fe116f164fbd55c7c9f0648e1efc661a58a182a41000247942f93a333a81d70b46f1dfd4dfaec0fe6e96df77318443d636818233b9a1aafd8a0918124f3968280b5e8db6d68d5fb76d0b757601591861859a30b41f7b864311dd77d64ec09e52b8a6200d5b96483ff1a08c64e1abdb53aa4c189bec174401364027322b1a594c4171c011fd9acbe685d13fafd1155b5d3731348744189c34c5a868ea5034d5ab76124a44453e7ae94e8b716648abd3313f2245fe75a518790ee6bd860d4110b4620ef99096f29bca515ec7a8a7e218efb24bcfe250e557a1b160daa4e839ae821299fba3c346e181ba6ee54ef50f62218191c2e646110c7fb9552613a754b6ef50829eb2c7acd6d7da258b980d6b79c68202992a525964545cac668f22201ccec1875d17c5400f6954336b07f5f6d9448bb4a56032916054331e39ff222329fe615d63d029c43c95b5b776a848f77b552177345d3a70c51132182a70b93ea3a35b5db59d93a874cf153ca06250b83d4e85ac4fd21f48f1d964c003d899cd06e67d868b910092b56856fc4beb8aa1d048058def25e544fcf0ad42edb2390f8d8b386be9ca38572f439313d554e0a644d818e801293250a5752568cf06bdf9d403a9b2581581e2b2620cef6817e2513d9d236062c4c7e71d47a2cdb96e2ae515b6138f6b7eb878da5f8f77bc3a47d40d74fa1870786a6d2d5aec1881e9ccc1b5b5382c61873206b30aa2de3b1cd2946eb9155a11eb75be095605a36fe24beca3f46dbf8200076565936a9bd07318ef951a56840d2760b5d3f06f5390652797e43d1804382304ca9cfdc1a520d2c6d16470406e7b00f5c1bf2ee865e265b57933c07e7ac49333b57ed6d2e987bf0648c3bebd10568f594a54fef63bbdd46ae06bea6c02e1361b26425dd313653747476642519fbafa0ca5c619ecd0d8d30536544bc764662ff785e47da3df2824bf13d3124000d93ac62b01e378b39e44339b14cb3f6f19e8de21e0db5d25fdc9f6b5425f0de23f7b133b1a0c2796081547af54364e5c780fc9b61b3030a368e0f0742a59ddd5ccd2db189427325b4e6108d824132fd0a0b23fa5eed64c0154de9447d8081e891ca74063a0f1c6cba14c6f1d01b72461be709b4225cec100126bb5b8cfeff18490f953011c59332fe5002a225906bd62bec6cc01ba57bb67c947405928ad1d409516e6cc2111a7f4b245ed93e33157d7aac60c29f5ac566a04a28d8ae912095c09e1d8a717195eed3400fa6b2a33857c25430d8e25cbb485a7734f23decfe4cb0136246d696d7bd5a8f7cb27d9e0e9f88e3d38e217f0932f622aabacbef167c12c5c2f45b577e565371c1aea455600e61d7746785dee841877ed4ab20ce73191eb755c71b1b5e87860bf360fe885172148413ed7c284c178886462c6c9ad96c36f9d58a8ddf4e7db5ad1c414036d614ab6706a055bb10b1024ad7b0ba9c09bc16855ff0b6a066a04116da4bee142b273415f387ad5ab2999af931fed38d15a5015c51e52eeac9adc4b1460e10bb53430db97b4c95801a6ee0064f9f4e04cc9348f17849ca2d9bf7fa0e54eaef7573a32c0759844aa6d28ee7c5ef3820b3c29d312e928793d14a8d767fab1c6cf70124da423957d6998b08d8e70fd1e9acd0448d62c4ec4ece6943059b5c311466988aac91a2a6000e0cf33c32c2ed938b24b688a4f47ec8f9ddde2529d0908db7ea33852b9508ee3df6bf4bafd63ca58c212c3b7c9c5dab7ee926103b0ff86755c750d42554a784b67cfab4149af0e84147862ecb33f3c2d4e6cb6d3f193016d57f9647e9f72632fdf109a9a03e6f33102644f2936bfd32c36132e3c732519f94f183439145d9aeff32c6b33f1f6d9ddf2782c7ff7cfe8315a58d583bd1da523b74bc197e425fd347455781657d21a604ea2d1c6a61498e7795011fb7cb9c9a0582e61dc235de60aca23336dd7c3919c8a60e40b2278759087bb27764f8ba442cb286006859b88895afa669777c957970595b0634849a644d3abb20743687f6224aee60217e063a984ff0041d3cd96427aded2c134c177835c94d979c500c7ebbd45c7e298c3024e87f2fae3cf9b387df1aff2debc4c36266a35abfafda06677ee4aed45ea1d162ea4b07ffe0d896b3251f3fd6f8b4ae8326341c22c80f67e96f8b69a2605b85f9c41aebe7c1726168061f9466f741d8dc2c2b9c7419afe0ad1ede1c63589d7ebf3c7367cf0e989410d99b1cb864bb89e530cda1fcf48140603b4e951025008a02d7f3f9fcbddde94c04116ba185ccaea1b612aa3b4e455c6a4313e25d355f1f19a4ebca2e838295b115369c9c29250f19602f14c6b0244e4c3cb24b2ce00c941a8041e75fda9162cb1ede9c952250f2e490f1d9ee8749f6a125c14528a91335c3586361713873f476bc0e95d9c3e63185597be638b303e0dd98410ac0ae2123d103c86f65a063575d65d966a1bb4f3989255a66f416e4c24fa0fb966400406cbdbe6f5c5e0cfcdc27aa29cac46a271ab15ea0edd8082bc2fe04e96a76b8de668367494d6faacd0f599f49a1b663b9b6d788d65b2a5d50806c2b61f14ad00e7109af9ae52f9e1a72baecc97105978cbccfd285039611c331721a1c5b03ceefc1d462466cc4c82b7118388381beaa33698df33dea7705a72313a0a11b1794cfdd34aa5c5193ae19d430e266f5d44b75e90d8687c5df4330b5d85a7fc2333b1f4de42e81f4010680e685460ef1ce6a69059c23cead98e7389fa73de605378ea7be2081e644893be419ada6587a5c49e5429ef3c71f9b5db7274a10e5d6395b5ce7a840fdc46a1dba8809ac298c9ae2fce712afd061268584647a2898d835c9b46a0a12313a1104733787ad0c5d6802643b91ff62acf2c82d77ed5132ca3285625090c1e8dae7eec8c7de3cd1a9fa2bb18e2fef8e027c81c605442e72202d737afaea1c9238d1c50e7a9521401a9adab010825ba62cfceaedfcb5caeb9f21d40698a7d1962e7ce6d4408558f08810790d35b41d08538af3a405f1c74c11c6fabc5a1b7873471fbaff66082cea7f23a77f0ac8b2750613001fa7b996e2506e68ce1342aff3707f7bc4121f1f4836702d2f9c2f72b0a3c31f12815bf6d85abbf801a1e8f0872c3a15949140dcf51aab5161b952f270a767bb4028b4355eb3c5df3ea566b519fae499b336dbdd0034d27e0412cd9bffa2e104e5ac111fc0af6829abe99e0dc69ace021fbde38884de330553da831f514f9620980d53bcc89e6fcb3f7aa069f7274e4d1fc423c3192d0762f3026d8059c93268166a3ed3226d87e8cae95f521d717d476df19c6c32b517928a497981816204b4da97c49a43d0df781361e537597294c62ec21b80fa33f0cf943d490cde9fd8caa75f047cc2846a06e3b0590bc61317cbf74557bcca8c5c1927917fbfe544ab58132483070fed596a803f145812c8451e061a0fd1cec5be1e0f3ea6a4eea431c73fb42b3f6e92cd8e6026e1c9e1d4f63b5eb577cbd1c4caae1abff084adc201354d66aa480b5b5ac09de92bd7453364b4d02e202bdf9414f209319fb9783bdc67dbac2a279d0841840224fc9f36e85ad20ab3ee48c4f727acca6d90c5e3e08e7f1c0d434ac31992067e52589bd70baf8f2bd1bcfb4cd05872ba2b8115cb4261c5d4f8561e99ea37e54f3b5628e0eab2c010a4be4d4e092eab06202e01b5d9fa330b80bebef90a93601529de5716a3117d6c21553cc7831f5d625c930af459030a6c6a6f19cb629730a10141ebb17f079a22695cb13b7eaeca37db1fc789c74e5dabf39d6f3e241bd10366ff7aa30c0adfc24ace38952d022c989cc49f3eae24ddbb76bbd5258308b788d5b514f1f55408c1a082f3228999069891d4ac10c4443dce6bccd78e2c0f922c021837a8fc394fb3d3dd276ca5761ba6992975a0bafe0921e02059bc8af0af858daea96088a5d8b705513da8abe3e195ce4e735d93918cf241bd939dcc29b0405342e14138ed38395ab5b7f11f47c2058611cd78fa78316230a44a318ca97a3c62ce9f51ad3567f5405537983805ed53a43263f8258a5c9a4bf4193aea2100516212dd099a17c8df11034c1c5799c2c3bf58965c0f698f2eaa5f7112e8aa3406fe720e24d32aa87623608bf199bddb26cd1ff61206386447a7ab103aa8533f7e85d82d8774d45b98490c49533b533e4fb07337c233c8b92713d60a399eb8fe2835fbae799ef466705fb509b1685db18a03bf4aeeffb3b8789f41fa07e582b62f09849afcfb38308591b8d039e06199bb7d379da4e00e2ca53a562d68f968b65f34848dd90323ee0b662ff43d96a80ae1836bb5782faa0ca1a85d764cb0b160fb1e52fcf4c9180e9918d0f592390d22d15c02e13b4f479c5d5cc7bbefc54516a0cd42c5b5c321fcd2e4f2342f6c2f23e372e2870049a4a5c34ed31f9681804b87f4a0d9a58382204a7cea0340052b2e04e79ab655b2c33e439aa1eb21440bda954b6299ac24ea2c2acec0e7a25fd946597a417b6ceeb362445101f3c1aca876831b90ab82f7c54f719020c339d4002dcabce40e53a0885c8ddeebf7a6076b20067d441abd189c73ca658d03b0ac75b8eeee3c0058cff9eecba2bb104f2dc58aa28de0b948f70d766c2bdca580fddab47c956f2ee0e7320c0f7240158e0a47740cac8135253114c320f0bcb5dcb0d255622bb829f1d336807c36d80300817fb4bde85e5b8ca934fc86761569d600868172fdc812dc691d05c8771a4af19205d0b2208a39817cbd4f27fd5e39654672c7c3dad964a4ba81997acdaa0da28b09d24e2edfabb076ea51a57db8f62d5856622aac54779df9e772e1950e7760f4c6a92d6097547851bca91341e00083c9f4bdd38ae9c0e35ee66c3a782c57a33ccba9ee290cb6d419028bbe604c94e5b3376c74c8674315f677cc3fdd9c911135be6c851c69a849b412aa9431b2df2c379161043b07958a2504981216c88c4a19958b24f12505ebac44a867e372b25564c8c6dd2bdf4107aeabb013d905aa9d8402e2f240c71843b3338d51bf0fea21c56384eccc21d851265d5b153c629fb42d61a7c44acf4a775cd51cb542092f1a7d277c0a8ed8faaf6ca757907baf79c4d27bc59dccab6b8aa013bb33e935aac0297b7ab84c3ef8424a0483a0514c666d4353269f1f337080255f4f6988711e7ef29540ae26fa8b6ea3e426b7fd1fcbafe8b0b9f8f32df2688fd4e12dadac434da654e79ffcdc7840f941ba79780e1b26eebe4900f90e568eaa00b4190b08137781db84e2f7e054b622d8947fbb61d9110ab1fa869511c3ac8fdef0ab9849e713c3afa2698579f5fe3fb00cdf675d01097db1e5e253c9ecf4b8865f26020b493a808fcba393e7639c1ba8823dd8a2544535ff8f631fe109b6e93e2ab866abb17d2facec2281ef5a8f44d4eaee616cc86e898821961d5c087ff70cb129e21d1ab9cd0bf2aa5f266a7db9773fc56941e7bbd0e2fdab9294b0017607d546ef1f207ad150db4d55bd2b692a6267b60060080f3a744d370d865a551f622f4cd33f30c41e4fb7ec890af5eb34833e2625bb6e6c6cc3731dc9454b6649992891d02b37d9e232518f9be80964a5b5f507d48f004c2572b691494912209bce16c6edc8a72c09384770937090c304a3de453f1068c5de2a46f5911e2e65b263beab8ca3d21eb5f687a182399c6dabcbbb5c7a606f61cb1ad273c12ba3193f6a3555b627e9267b7c8d54d4564357096134831a58b456c2f18759e5c30dd4f27ae12419711f06fed87f5e6373a97371addef54496d8a0b0c96f6ef3dbfd8fcdd996a38b5c28144ea25ab65d120b50164f271481de311bda1f0adacb7099c20b8f1f867ae79e7d3ef0989b95c00200ee8ace2b262f8e8cb24aeaf79236283d16a6046ee47d60910dc6dbc74986157c9dba197942cf88d1a4d67e834ca082254c518b5ace8e699d6a27830a9e4598b4bb8b847e443c9167cdd3d5e215d1fb87694655d02026bffa14c702070a35513ce47185dd84bcb2ccc312c86b138fc017a04047ca3ffa1cc1e04b0471a7df0cecd238f8b61045b5b7b85b2778e44c0400d26bc63e793a5e56dd818035414a8e1d1e9c20448b0285146a5ebcc8b9ff63fbd1eb9a18902861af74c263b495674d326d4f1b5ae24dc04235d6a5871e282cc6c3ca117b0ac0ab3fa9471a8ada79b98f6a7479546846354009887cf5a2b780c46c9e88fdc6f4d260b4f6bbb07055fc12f563ceb821d24a6001bdda50b8514b830dfeee4c0febdd52e3498ccca428447e7596251fda847449031dc08be8b1f11f31136b1f7c892d119ffc901369d78e4775486dbb1f808fa9a90d74f60f35af8b1ea6e30085cf5464162ff287a3cd9037db1309ab7e450ac951da4e144b979e7afdb6eb3c59c3e42c3c4eb4b7c46810138a84dad981f10fd45b2b0cecff61ca374e214391e3651d174f963a3c22edbbc2b4762be553992d823064aaadfdace5e3383e3342f7c28e790621370ad7e19fa8b6514dfb04afa1770fd3f625f37d92b42a0c2ac069fd52cc9ed1a4cc630ebfb903fa144e45fe2f2f269c9e42994e7880b660b6059b2f952316c952d1320cb2e904a6095fc03426c9e33d750fd49af5865802da8fbe05bb61e10e59e64ba7f22e33234c233067a9c902da28e705e8fce2632b2234d762d8427875ae20655a404e5189fd0c32cd198bd1e67cbe65776ec541f75725fdd595c0a38d819f57f0c865bdfef0a123fc932ae652846fb71329e4301403fed976f052fb366908101d1420cb5ab3a2e8a008e5b2e8ab10f7b54a4f157930783e4ee80b3b4e8b4351b7d96b1ca512a52e2777dde069aaaeabae1415234b755bbdf038b4c9c636f1781e0c9d5702619bffed4b1ee09ab492b2c2ae486141478c759ac8fbb8fdd708d88eaa37b93309361e14f149e8751b6e9cf0d21aaec2a4fd22424b030d1b711373378d3f2b108205bc89a0fc22d94a6caf89130e24a4b664e6482aaeab2071d7eb8447991e4998fb0a544ffc4e2236bd7132fdcdda54d5d287473e4d92b0a0f01ca0207ce22b5959845c1a37cf08a7876ca87a073df705bb6f097abfe25f69a3c0d28aa85f587235563171dba4017b05be22407833d8b888ce31ee2c7c49b70dde9330715f074d7fc99f13d2d4517dbfcadbd92d1a08e9de9c09894dcba5afa9a8496fa59c10369d02e1fa85f9cc92ab9a0bb569bb10644932719f5bdcf58f59b038c5f00844a71b212c983244e8e4d2f89992d7efa1e525514f8ac07add484109b0b505bddfa80ef11366ac550f3cfcae6505d398897e6e9774e34889d7e29062651a18dc9049de8fd8f728638bce4c7f4034f87af9fdc8f5276d7c92b95c5965370be9980fe5013f7deb40c3c99156c0140ffc692660e676f346d2fd250e891edec77a20d6ac865af5e16ef8f2d5c29a60122e24ed8ac078ce6a4774a16453e6c3515919a19e9a082cd38a234950bacdb7bb65940f5e49264adc169e6dbd166b9ebde956c105ef3eeeaf18f3db1e9fe6d01c8ef5d021fc6a5327a995ccd897101f80cbeb40403d29ac26c1238757ce5a1a20d53862eb104bd175d6a784d29452619a3df71509de1e6f1cabf1ac30c824358d0ef11de2bd2e1a4f622388de9359690ba68eb3a64ac585a6462100e33a8547e289aaf8dd0caa1f46a5d531b4bcbef302e3b89990e61bda4ecca0e8b21a04a14200b3bedf0bdd84ba6c8b0b555f6409df77d275a220b8b9ec24d6221ff2a41ab7f2a22e794074b32aaf49fbb64fba0d638d9a898bb53cea21a4aa0e9ff84b16a683a09b813d5806d77e0257e3c25e24403e5b9dfdbd085a0848d39bf06488230c2207e14559d14d5aaed34b2c329e2e976e3a89871c6e99454b47dc74bd644319ee318f16086d529ad4a0c43cacba8588dadb42787e7350346c1a756f850427d29d0ffdec9595d5c7781ce1bfb0b162d2316869d3b543797278f1b12fb4008544dde7b50f4037123fcce415959a57069de6ee7798652b2bd880ffe3ef5420a107ebda829520ae1485f39718f1e4c37a76c0f89d5ddb8c0e0151365c55a882af011f68f1ae2e2c234ab47de764e1a4f0e56d9875fc1285374a7c932a148e19d07f2b166100373d7cca9a35e84b853ab5a466883524aafa1ed5658def66d2c47d900958a0999aaf136d0dc2823c844678758319fe0ff8cf83606ce97803e2a8f2e17b91d8a32d578826b569971ceeb4ec02ee42bb33cc0e28dc11c31b0720bef887e1d5fb6ae55f4eb868cb08bf90af4b177cb2b87372d05c8a8e4e36b41272f5db78f588a00c41a03bc91cc2c36f99a34289fa8cf87d79849b02b65f60e86a86f99564ed68387b13dd1bdd03a46182898608e64a184cb5bd6595cde5a7640fdbd1bed3f31429a13b670c2c5cc560094ab5f33d0985d002c2073b4d6708a762866ac31e59cc85688880200f7b96c3ec3253b3ec0d4cb473cf64d086966c43ea795eeb3969a3206e04aa27c26b78608b792d58b28b6a00708f411f2866305c1366ec64073a9279b897130ae54d0c6613659337c18e24f898e5764ad4d0a5969405af3de882a36cb9db293fa708f06bd7e6ef564437495b323a059acbb6475c61ab6c790405c2b73d44b7e36b3817d50c205e683597a635e046dd05c7ab7f5f78af0bb56e20267a61588215a7c0747783b33c163c6826b63d16153a7c69bd85b0a0a5e774840686ee3e16a40c1c8d988141d38fc59961dd4ddbd070d2b6a821d5c2b5399bd5282a254991490794b29885002944bfdc2a5d20771c16e2159a1218245b9dce9fd7cd68e43a68f6adca3335f95d8f4f039110e35570596fa1bb337e5483c07cea00464c0f6340f2b745176a1cc27b1a1e475554e68745c707a7b1ac7d52d53c3a75cf473e373008d059e66a6af6e14efef834deb1e49c8363aea50c3128860a73108b8653051b7b1e92db628c0911205293157aa66742ee260d84aa97da890659795ff8fa3ea354233100f79661c877002a330269667e22abc6f6f402d03820e72b032dffa4176ca95388544e597ff450acb3768a3a6ff07a2ee61c022b280008dc3341cff227e82a92a48b73d4f1d6f94703bb6f6180ad372da8b700cfd304e00c673b00ea4c97d71207c3f715829bd40c52de64a26575c97194d987472c6bb0c0c3df644584bc3b2b150562c93c3e28e7c2994da751cf6c2e24a9a47299ee0e81064a86458fe45153fdc55ec7d0abd71e6041b94c968fb921e379638866031bcb6494e255086180486a00514cf3cbc211ccb7f9edec5c9b3cb00670064e2620fa6f7325ac078a723352b5c9c0aa3ca05bec01c8c0e0e4cc2bdbc084d97d202022022c6da2f0cfd9847b83e42e8efb1caf1bb12f58aff937c8b7071affae6f9770b294916f334f848594f47f1d80cdc5a8aa8066cae49ab879780c32be8dd184955bec8ad84c6314f0224bf62b8c273b4780acb813cfec13e1c2e54f46aae5b88395d0ea6ba0ab48a28fe254591e152981f6bbb7c499156f972a225890122309b26760760df423f1b2ee9a8c257355f6de3106032dfd3402bf5826624b21fc5f2795b8169d430b733828dbf3c9bc5058243247b3fd2c9ff7e3578b1ba42407a8ec77a0a616280ae656e2cb30a5602b9fc8cd0f31f05e81127a1ffd6122378bad9b7be1e5fb6d3add0a036c05d05cc8a7792ba6e393586225161338b0c5e73b1a8a8ae82676c5d90cc69ea8b41a7f8f622a419d523aeeba319ee25c182e84cb0a876f46e38dc927a6607249472599449c43cad37017edd06c44854f32c6a530a2ba1684afb5bb7f990683c25e0af842773ca1dc544664d9ea1a33a9c34d749e350437e28948d25fe8bce22205e9e64779965a90371e83f18070a0be16ca1c52a9e0942389612e78fe49197066b667bff481b5235a034ac3e20ff38397c234c9639b011580640fe2fa70d9d05b07103d48f5db969bb6ee9210cb22b9288894f5a1858c83d1fda6853dd465cd8746e9ae38b76b3ea6b26a12c807852e801755a3912eed950f8e9e6a8b2942811fa52a5694cfe43ba71842108c628c75d8e76d1565917349dab0f5de87d07ada48e63a86d5873d7041e2544c040addc9e4f24547190a1c37ebaa53f1d40f74e070affde7556a8455ab16f110e175c8c012dbceb8bf6c4fe01e6bb653d105c4a0dbbc0077f194fda64173a13b16a16285c322486a4686740b10f6edcc097de6b01b65a96a79e65806f1851588146f64c1147e91697e9d533f67659563ed5f532ef74255f5a3f0fb5d0fbd90c8df91f400f3ce1c0ad5d88b30507b91deaceabd55e2d7829e5cf48eadbcaa6049d675f187d54708400b6e25143cd806ae541d4ea1d75078e2629f8af197102a8704802f8cda3a3bbe9b42e42e42406afec569b68da2011f0b26f270771d1eacd0e1c51864849c35304f3b3675281381949c71af2defcba6573da0332552d5ab10700b10df5c632b44807397e502cd30e4453aaeac10a82bbcdb6d38bf6664d7923d161c5fd6893c1f27fe55ad050a6a85cd2d02b3afb01bc95d3fe53c8364cbce9f999b953b37e37211bf006a221b9d5cba4ef87cf1e7291801cdccce8151331ced351d958fe36157e3198df6f7006c0680c7c543c7444b59f1466620081cd43ea411948803fd2676471a475f185535f742f8e59ca83014c7e29a0b6457819cf97e58e2ee61818caaa0bfb9f91b9408421b3d52bef5e83b5cc09d14a6a882b59338c54387f814ab5b3a05b0350113f5f896e6b45d9a237bcf787512753835e730551328fb8847a3854c05070d8cbc7bb8d010678944c2cae247fa84a0506c6bb94f2b9ab0587092b8a0659a98d7746884568947620299e044056fa3874491c000a8f5565ef4aad64239eebd058661a007b3da4858b3829d328436f4c2ed70d4d34eb049f43134eb139e3721314321e05c38c7e03885225716bde74a31f1c1098520c43c16ce6e26e64b2bdf0473d2424a8189c56e5c775c79c748a0b262e6dca406946198cec722c2657160bfc70f5cf9f0842de350ca281c4a834a00e7d48243e10891d41236c203d409cde66bdbe819b14fe2ee1472a2081da8e12ac5d3649929042f7af67079de41709f5963eaaaf79e9f1594f165fffb4a57d045888440c94d9755307aa21d54f019e27d0c8216e3ab4bf117534fa427c7f1446312cb9c372755e2b66083c850e9d2001cc60aa974793f752a42b4557e4ec03640c22959418c919d3821fa258fc174ce09ae7250109ba504f1de5f7e79a37a52f914bfa5a7e0cefbd7154f5d0889ba72ac6aa4964d5bc9e58f48d3562d72b5297f64ff6750e123ac4e6acd28860023519840909fb43fada223b66311d388d094404322a6d81752ee818253a9475a2fb0b6b2ae3549f32b2811898298450f86ff0cb3fdc48f53bb8230702f67e12ed94b7ad29b8c917adc1306050403c989e093c80bce848b458a84a13f358877bf01f884de93e85512e2c7153e1ad916bf64c1df46668851f33a4bdcde32062c47cffe8a411aa31293889b08094b2ce29617d72e6e04ffcb778e5810608d2775c6788c49f3ccf212632cc670202d8cd64c836584edddbf866d5a0a1bc51401eff4cc7f351687cc147b15661266053ae7f6c8758d154d1f059bcf321eb6727e4ae69830d0b043e9d8f75ea822d4b700d0ba5e5fdab12608d61963078f0078fd33cb595f1300aa5ea9ce52296a2e039553ba9d8991e8f27c20e8816e6c1fb57e3157e301ba114ef298cb44f7fd4bb61d338feb444b042b57e7eedfb53ee0a3ab66f535a028bb72844cef7f5a0b8c22614c858bea2d218984b811260a63091f0aef29d9eeb7a11815f0c2905cf5eadb94e33714d9886953569ac27a6fb49e10f57571d9bafbb59e0a5d5621967e02475a8c2e75bf1ce78830441babba6eac0b78749ee37e7f0d68a7730c56dc53fe8eaa8ac4f48b90f7420ffc94eed65e7298b2d9fcbe137a03422cf1b724d06af5551c167a9f7a53f8a590381853a2d9a2ea00d2d50c025a428b41463159ef5cfe4c7984ba8db0e18d69d9cf0e72f6dfcf9e917b8febe5142629084316c0af9b2eaced12e01d56e8fd3d44f6e52f55936e5d97d6851ca352de91c81493f91fd0e64d93f3d6c7daf0a656f602c4b8081f0528030b13d18456ee6464e448f8c13cd3b331461eff815ad05d282e07149ad290b601d055f8e0111f93049a2954da61346a0fec500c8eadbcdfe0e0526d191cc2ea3be1fe87891c06b944c7b0b125a07fca4756f2baca4f08e4e56030db3349397af129be3fc727ca4bb8595889c6ec668213e8bc1ed7601ec83d3dccb74c98408e2fa004471da85a0006f66f129137092f1cdac0b76ebb385bcb05dd286d28b860576031f4cfa9e88f1048f3fb9cf46ccc22c59943d6d92ce16c059de43c51cef8609baccee8f78cea9af5a1273d3444b197fb00066485f965a7cf34029c64ee9f45c2060eb133ae04852df3418c4ea30864b06a977140c5a1c044fcfea0b6fe884108ebc68f7bccc8bff275ee807813e4de89913b1dee7782cbcf40ea551612d4b79302bacb1caffe4fffeb96de05a8854900b5ba20a5fb6bf1584be07c3bf0d02e5c812ad2d116ae18c23a1089e5affd38d0ac94707b71ef49fac74b0724f1211c6767ed483039a1410930a174526e59327a7f5e2f3ee385cfdf8e2da109c8d2876de7e698397bdf3850b84a6bd0016e7b09068f770f89b05b6a3dbba8e655024d92742890112a7b79d42e3bb80cd87fdf4175f1b579516260fc2e4192c67711a730a0f56db68958fe5d10bca0f12d0f76c9b1073818ccd3d9aee9487a7c5d856fd330c4fde9b739a8fad795cb67c55e2f12437b75fc936224bfea1f595484495d23c3d38511b4d9aa91314dd4db93640c24631901099ec6187349d5eb5a046337edc560176394477350dd4cfe8ddb7522552ec1e7eb27030b5d0eaf75916c871985d8a599455baea984c8509597bd51b0b394997e3ec15d0b8470f6b9c48323805a40d99ea0712ee671de2931f48d1c4ce2f678656c4272f546e417d4bb1ed47aeb9dd636f57e448effbe41ef4872ac6d4188ac656f06620d33684baf83ae163074f9c0b3bf89668a1938eeba77a9617225fa2a48f7d070530ea2b3870c738ca7d9f8d6bbdf50316c2b9feb501a7363c141db6f6f17085974c80a4bb6f113addfdb706abfee03fc750c0e7d5b839e99032044c39c00c6abff8630149cf357ef7e2e911688e86ad65d72623901887a88be3b5e57f352b2dd49f6017998e92d6f2293f96a9424dddac370d836728eeaa65b3dd9e291028da4c372102a4bcd78449a80e8a8065c9e1082af5c9822f7376f4144d2618735d662042b620d952883594c635fd48598c935a64ffae196a05363467158fab00ff2c46f0ed5bcb6c0d7694cbf3603eeaf4df65f57de22899fb2252a56ffd87334ea66c268fe4dee7691ff316bdb3e8f5d2068d03019e46d575624748de53eae6cf657e062f68b285dff153220dfbe8175298e486c8902c34e86a817486ab2b633665da1405b7e8049858838486c0f2bc9980a26dc256ab2b9b23f674edfa2fce7235d4359ea7658298f414f35cbd01640261e685d312c712108b5222968d3c3987024f1b2a13ed8d435b48a84964f13defb8c2d3e3298cdb00214e9256f6695d5e90eb07291830191623f0af066c90ee6d67e442f72d2b595d051eccd5dd13fea3f49bd8e59c8c14e54e07c69a4daf75c65d6a6d2fae2228c1b54becd429455926636a0ace266e5cf4f8858c594513daf01a9cabc4c0564558d66727d3072cceacf30b07f3e41001731226a910b6f8276d68b44a9d65ff07fe6bf78e6161bc560e7030658f74ca8b837e5e83bf40eef8f01580e61c01bc4ff4fb9331bb1afaa942c46aeca2954f37c91e34b09d336d8981d37b9f6f61b022d73c6b97a7974149990735b37f23909c0f09186d4158a94a58b36baf38f31732d504c915688541ac72b56c2c87b1a5fa209d10953532cada4a532da955deb38c9814f23dd2c1453f80c22f3c9c18b3421054ad533db055a0aae0e7aae0d5e951214edada2a811d1851ba1c8b7cabb5563d6056f5769aabe79506acd399fe2c875212435e645d02787b8e7d7fade0b24b4bde5b9e52b71e227e41d4b07f3430fcf261b8b99be508bea32967486ec4396a98e13b64bad948190c46aac272f97caf07ed42c51ec9776bbfcb3c4a699d73c2b80c885eca8e7463523a0b889de55d7185a86e9885e770afb57511084999f110c09b3c63a7f6cd78f01f42b069ca42bc9fa2d11fe1210ae06b41501874b81d31b006bac794b47a1d201387f46ca7e2e1167a5265b7f3e353366f14531bff649b245ebbeded86883ca460ec39f0860a5aa7281f847e09979cfafcf47f8006ad47d16524db1cbf1d310963ae63b1240d5f325aaa5026c4787616ac1a09f81f42c24d07ea2c05980f7c681cac3ac5e847e0414346aed0d876f7cc9c33c2a63c764e58fc93e4f7ae519d9b1974dced44df90761c450b14122b05f36092138d1aeec66293ac44530db8618f03d71ccbcd36c92d20b5e07c41e6253add0700279ef9b2d7cef8d4c3a923611012b10a89b80419e26544ca2fea672cc2c28e163542330a68908587ac90ac57adcc862c432134ef64b084392fb386aad160b4b703844c19d21804f2b98763f552238065ea0b7fd7186d1fe20f7d79f736ff1a05f9c2e06bb41ee331069e9404784803eb505bc46a8f24aa40338824c1fa000b77c9d44240c71d4d7b68b1ea24d264c7da65561c885d65671c103c7e56d801dec5127a3adb15e303839db0c82ee7ecd17ed56f2d0f20e06057ce49c57769103694b1010a433c147bd771e300378834c29198f197d8d0e9ffac14e907e436d1d8ae8624ef204eff905f469d5729333409bcfedacce25d0903d30ce8b54c7e76279adeebdb84cf8f5d66380a53006eea85a178a9cf05e129cc31f756f8893105df9953a6166a3c33351207e60432db7243c1ec41b3b73d601984a5a7f0ee4696610c95f373d4b8aa9caf945ea1791710abe924e452be6fc9dcbdc0b251f924bb820eb7e98833190365658e4293f1a5f6af0ff2f2e15fe9341e8849a4d6b70f2fc15a4824457cac95e7a2d30d39ba5560deccfcd58bd7a50b5c8855b769b5fe6e2c7b72ccef80220646beb053f334f22cf764e10dec45ccb17cd0c0540b2a97f8ea3741ef1db376b805527201b7645ef7faa321831c0b03d98259d82eb724e0cd2b0a138860b8acb35d5d9b9eb09de88b95fbfd7be3c1466e75bedb81a699c2d5889bb2554854abd8c9d1c189e6243dd99cb9d6c8b73ffabb7989c34b63b7887a3ac6928db3dca0fa63c8c56381a3fe0686887c0e47e645506c321425b54040c153e555231a09b9376a81e79de082b82a254f0a6693db3949fcebd7b1dbfc6fd33d321bf5f0d0353bece660bfa19d4fe1175da9f69e559682a219de1df66a5bab7e28a921014a9f8bfe681b583b0d702c90188ac48c1e9ccd5f3307889c4e2105e92fb2a0e018d613836e00e3571c32d4ff8f274cbc8a04c1c0904f06542e9336e08e1dc27a1519f1493dc9e73620b81ba39c593b322c67022931ac76765c0e6dd4a9940b9f59f24295e81dcb8d12e8a5863b7b54cb915579de039814d4c7adaf18099c5d668c724afcfe10b53132a61cc41ac3bc06aaeb1ee2c2c77c87035c1616fd62db4071a3d152df9a0b0d9177a6240975f44f56ab707943e36c17f189b5af8e73504a39d0dda3981f048c9ac48b4e5fc38a8d4176680e6f89069d7f71c789ac227b2de79c4e2efaaf1d1414787fc87ca298095c170fb3aea2f083818f3274d873b111dc7411d6208ead0d47d1d9be8d2b8076ce138704d7f60214f1d1daafebc96461478ed828977aeeb4204bac214d937098be2c02bcdc97bdbe28d6f46d4c23e9135a4a277cd71083b9159341509b3d4de4f0350229ff097076f753f06b1e66f89ca0e039ea6865b32227eb63b76c49ab9057873ff92c391da1ee4eefd8c029c51af368649cfcd8623e08e9fdb05055a838870b0abe6a4bda39a8aed0e5bb24601876032a741fa37852f0ef039bb4d455304f46c9644476b1d00b41c02381a3b9cc992b6ef9aad63473f53756d0537340e8d5642b1fa9e4196606c700fa70146945eacc5571e38c495859754dbc3232553d8f5c0699cfcfd4a5a35dd3511225cf8450642ba9f3321bde972e9351531e9bd9413844da740b8bf309f19e45a1610b4e176226b1169a670e826dc16d676ad84255e50844b413fc7ba54358fea8bb49d00625e6ca0c0ebeb282bb681705f83e8048130d6b18e91ed12b39dba076bc84b58ba4662e3a2e2532e6630ddf0a7acaf3910e9588875f7dda762d42824c8cb5ef7c91c72fc55b3da33dbae9e889d9b93172692ade1f5ce045f148dab01cc73776b06a7d3c3cd96da8234740bf7db378e6102309e6b8f0d86ddbbc4819bad68017438d0db7aec077aef7a0ddfad8014df250ac238a405e462996acc1a43d725d462c88bd1a175d717c1a6cf89966cdf1180b314116431543e5e4d40970fba20b1e48495278d860d9ffb443511023eddf5e048d6aca4a5272f4a6d592e937641c4b4f459df1330c850d078f8c0ce221a9f19b63c5a43c6b6664a141cf9ed8d00f23c0d37329b564aff1dac36a89f2d163327e7f4836759869728bba09862a666a3e05815ffadd58a714b00f158b87dc75ebe3f97282e2917ba40228bed2c9a203c042d40a950698de91388ea1c8a2b9e0d9033d841c033128e3ed30087cbd016357ee214d3e2f9514d6fe078b979ebda8c7bd24d56a2dcd4d6b6965352d3980705d8aae2c062e36b67a0c808b2ca59212cf4e8336e54804f0920662c18faf3065665067cfc5b082176fc9269c74f6030cf63ad2e2eb780a6bcb131f572dd14f16a6aa58862c7561b7c0d5d3025f54e31984535a99d7850359306ed70fc8e0c2e24d475a2552f3543c6b181f77a72b761d57955617905f75c041b9e9ae9db88b65e302844c1a07e888043ab5e2e9a78a0e1cdf373cc917b6b8945e7c931782a30da6f0111a1c1d90c94bcda1a77df52d099bec8402db00b8abb87b2b07808fbd728f9bbc3aff50260b602c5ab2af1324a9ddb96a52ef2eacc93801b4bd9a2700007c1bd444add0a132a0a0a0ba86fc5a05ca2c757a2a23b97eea31a38f80b07913250cb407f33b1baa77a34d92024cb275ee28e75903a3341fabdb9a12ad56308d0efae3ab4801f82816985621dbc7556f0c65aa6cd1586a9e52c5110242d65343baae0145546b39b702c4a1d569adb74e207bb743933f63e9413c512f94c64487e0b142521fea3c761813c05f4ebbe99ef18ca375a5fd5e04452779900d1c7522b8de91ce200fbd0c59faa87a81e548af11c18d2af48ea9c109212f7c679645a01332578b2d2242db7100a5eb8e0417f29f68fc8d164ff316b71aa416d9950cf7a29563f613e3f16672d967d62c24bc3b4c65b21cdef234a916ead7d8c1e9a294061427ceccca4d076e68e48e56ae01e8647b3c1f5ec022de731009d17f2813eefc80f16694a2e40e45b405b2d1fcd6b57296ddde3e18c6170fc189b8bbf3b048928ef7b2c601df936529917932e1e0c52a53ec169527e3a7aabbf1ad5bd99a37f50c9bbd59826c0981a4860e61f9a3b5368c3015b7b2637e451c1144b46997315ada4641ae75c9f17536f00ee9d1990d12db08d629a81c497f4846b3848eef90b9d7b67dd7c27727260e6a435e639d97fd15a07702654a0d1e831e8c451887b89ed8cf13f9dae7ff5566f404be0121650b965f0fb5c65812550484d95520764075359f4ac27497061432a090e94a0fc0ea218750d0bb567d8dd719a0375e0edfe92feaf5b827ba19fa1537951c905798cac56e09c3de108508439417fe50c3c94a08e63bce4dbe5a4d05b69d7accb6ad45ea35319c8b76c4fbe0179d380187c8ba1f838fed08deb2f8b202003743566e3b65c8d33c6288a8374eb0360091f98a642b48737ae2f6420da0ab5a1b1a3a6f19fd241716c56e951bf5ae5276caadfea6c1217dd341ca5646ce42734f97faad047be255d12ad393ea004e35f765c104e334ebb4f58dc8f2bb3bdaa20f2c0fd8e2274a1102785ee0bece23fd287fb7f08de82d8f227447ffc966aa6c79691a4b1cfff6c815fdb2aac31d6822f8d3f741774463953d2183f823b048f2cacc90b8aa3d096ca412cb493a83232d379b687b90c7614c7768022fc51845be31c018c2e0142122e4db06e546280327cb0f54b267516ae8a8bfd0083bb3011e938aaa404e3ae36eceed60cb012231528cde08c23755ab41cadf38dc00f968ff95bc66dc43e34ae366b560ba055b695e5b7f55fd76b38bc1d03583bd4198879a84f9758ee8c00d7414e807c36de7a2f1b0f326a01d41a01cb872e0ccd630c2b74a1f9da7d57b5d262152048d5352f15f535e9a9da88b6fdfc496440b870899a10d4320ead191deed54ea74da287c68e070d5189a4cbed827ebd794a0dcca362ad821a684b729e48bf08e6bf29523122cf60571ba80c3442d91c398fad4cd7263dcbc1cb2800f30a59a0da744a2cfc18c3c3436b94144e4f40b39ed86c524daa63669758c8a37c4e6ce59e6b6365153878b9c52c5d4308f04f761a5a17d3fa8491202d1fb7f9d3ad59695cc1b9cf7e6457fc8d695a8d56a9b7e7e00b48f9bfe7fb6f33c9f7bc9f1680f597543902a72e80fe45cee91102dbbb63d7985be4805a3ca15194736d14819c4e9a5d221acfe25677a54aa0a62235ed0459c7c8054ee379c0e77f7890dc8f5f73ad6b6238bcf4d1d4b6671a872e5c03e0caa50ac2dc316ef302825325d42e8505d842064cc2032889494ed272f680eb0b23fdee6fc00789772ea23c2548567496592a912667c9735e1c095f1f145bf52509e45ac1d8d48fda7ce244df0b6ae12c9563ef6b49c108573af7a268ba901c116fb399801325a5f2d1714746f1f24787e2bc9bfc9f5c5724f457dd8adf441f3afbe24b774d2056f4943caa088f328449b30c808c2d92511f3aec150614012a8ffecc2144eab0afd0d3add672a69dd8cc132451d8e663080753f9ef83222969b14c13c571d3b81b363fef25bb62d7311e8a9f4cb4f761e9c3edd77e076e725752be56b5f314d3d9347b09a9e96c092cd0f4a1ec3ec097d32ce72bd6fb68078730385c5831d5c3b0f8755b61be951e11546802a798a40372b4aef37f8b28d81dd4e3f168ca4f592c5f591ea7e4eeff1eb9e010af1bdfeb61bb6273d82d9557534c3e8a81a6370af7593625c017d34d00edf161f6d2e552c08773d73d1ab09aeee2f356efebd36937d22efdcc07e03f4e1c76d26075c03d72f9999d6940c6a0888b93c88bc4655dc77e164a37ed7f67a815ab1b9c70d976cfc2e031e26982cbd66748c4eab2d3b2cfdf62765b37cde94d7d2bac2e8c2d59bf9c529750cf3e78e7789f1de221757979fd9af9a1213b2933feb0bd25b5562d111f3c380d24f73c0ff63d60cee1508a963bb04b4e4e656780ef2b5b698b827b115f910cfbacd7816de0bcd22e2e6ef56ec7843d76d1e9a6c0f675f5679c6c0ed91eb91d92220d7b56e60c1598e124c34f0fb21301b9a43a5bd514c633e8600b73b57fe5052fb0028f685ed39632f0ee6f5fef163f051889171a1f7b87239c4c70c13c83f7f71adc86016dd486d40deb844d180cc6532bd5c221cd8382cfff4b2b44c002faf299625b408ec24d07a63688fad22bf043ab5c5c187ceaae8193f607f0691ba76d217fdd27fc45a196f82370fe87723ba0e012ddc817ccd51e8f2887ddaf844c49a1b45c0ba17ca7d2d202e2d465af90cf88a2ec4dfa93ddd6e49652a69452f805d8053906b1c2df7e761fabcedfba8f06a9a522ac1a7f9b9d7cad13227decb86e91be7f92ba1dbdea59b559a7b7a6f45864e8d76f63443d41542b465456b7a3554c6a6263530cf4b92e91952eb5022f9d2134dc3eed2c20911c7a71198c3a4352d06f675c53848eba44af9e3aa3ee101a195c38014d0b473c0c490146077e0d2d7183c2217ab9406f567587d254516bea0ea179d58fbe1fc9ea76eafa0158897025f8aadf842043747eb46a278b47ab9af5db25c6440ac25c2102315e2ee8bd2f9aaad3dda3071d4450c30b8a9e6892a676ac478c2d70c801cc13495c5dc65e41030e5ac400cc92277870359adacff2164f09b2bca0c40b8aa32f4ae0da337503301461051193166e08729181802c8e82c8b081872021d718750063ca583942872860f4e06a33b56555a7e1170d660c002d09164874810489255c9814456f28f5170080c4911f236237281c002c216141340350858fa38c1f6668a17ef46316395cf86051a424899433ae9e69508279e081e6af79aee567a5f6d757d1737941ded56fa305fd1dcac1ce258aa1df1a31185442a0c5c56f02878145a356c57ce8c730d210b26ac2cc42b7c2d8a57d0f9207c0d8955a2f45827fe9a2491a97f624c89f9e0a5484f8972e9cbc5cda4b2fb52f7f5d24683b3b3b3819f372695e6abd20f3b55fd7ba3eca0c73fee96cb8a027d4b0c0c884cd046f31cc796b7424b2ff756b2a04f7d61be20569150b09b24be79445d7b66491e2a86e96161ccda89b458a9e7afa22b26d1a8170d2227b5442ab360c2fef6e74ae8456b551152202bf18d60be8d7c00bfd180b6311837efc7a796bd670a5095f93f33e8a7a7ebd58f59b95f95579540dbed01f22f090a9b5208d9df4abcdf78ec725a59c7472a847996c389b5289a462a99a0b4f2655a9526302815193068d86314628e1151a3538ef52f2fd795cdb7492823f9fc7c5ccf3a7553d817808f19fde8e7b3abeeaf9337f3ac7490bb5f6a55b7406edaa9f6bcc1d76a7d47eba260ad440771387e2a4a9f49b348d407209b937837cd55dc3c68c9248ac7131ce19a18c124a19238c304219531cc9247f23994620b9e6901618e4ab8655a257a57acb8593c3130a7f5d906150c32af01b6ecf2a0eabe098a1f2359c3254be264b2610a20d6f1b366cd880bc36aa74643ac6eeeed831c618db3dc6f81d9d061a67ee8e31c68edddddddd104a8fb1bd638cdddd1d638c1dbbbbbb3b7677c7eeeeee8edddd1d638c1dbbbbbb3b76777777c7eeeea884fa73dede1d638c1d3b76cfd8dd7ea236b1db04828c31cad8de9e5624d9f3d998999bb999390061b53d22ecf138731532fe3c33c40d55cef86083c280a642a8f1a86b61882a9950a3d843f937c952c62e624c83cc0b8a000ca1c8c837389df3801a6fbc552e732398829894818f66b1d87db053da10421c14cac708ebf2b19563ccdcc5470a3e7cf8586ed24e384c5118ff8c78757776e7304eeaec66f3731cbc51e3028f2167e8b32dda2b5612a67ac7c12f8c857dea766286710f29ff639fba1ad4e04aef63c94ab497bf0c83cd4ad8a77320967ac33847e8c75aae57fb9095700ff6a9dda15ab53b34024fc29dd4ed04e3b3b807c949ddff8ca09cf83689cf83aadd6824ef650258c75c16f7584e00f770b249d4d9b5475bb55cab3c4042b76791b3ceeeb7a342b82301dc8341804eaa77340e19d5afabc416382861e4a5b2ea2a612465888c583540dda1318ef0a9dba98766d43ebef61fe753fb6f2a7f46b40a1b56293dad5461bf34f990af2d07e31ebdb59ff3c15219a82baa55dc43837888ab7495282c65e7c3bab5aee594700fae3e754dd0bb6e19dc5d3284504a97efd2a5bbfb426f27b60e9a80c4f8907d709a8a02a791df5ecac7d6f66c98f98cc4fa01aefdddff240c6e676766666666e631ccee0e7d32ce3fea067583e3eceeeeeeeeccccccccccecec1edddddd238450fec89470e8eeeeee349a803b2187e26e7748e10d24030251d4c72414369bcd24f3eb3884cf0e5be0fe106846b13973373373944e0859f27a4df430636294504ec8691ace3fea06758333e7e4267cdd50a91ee771d684628e296772f78f30caecbc516a63e333664076e6f7b6332216c528a2929824090e4551c427222c2a89b0088b4a6a9f02e21109da3c0e6a293bdc83a1b08efe662875cf745afff8aaff4bfdd80796d27194563114eec122581d3b700e2678cb5d5d23349f4d24b06b7a3b2bb834af4d2aa022f0540fa0aa11548ded4261d3d4e8c5159c077afcb231150d17e414ca20c182a231313082869e0a9fbebca8f06f503a5e4705e0d2240a3050b850c5071774a1c2d799555285ffc35b3c301c8922c4183060a14516176ca1c21fc242856f81ce8915c65475895e4abc84a81ffd325befcefebb56ce2f68bfeae351bbe1deec4a3eecb85dc98fddae4ad6cfc84e0810c76b9e108437a017c402ed3c6c3bc9d0afb355bb3d28ebe05f6f32e51ecf3af8b9b7fb8cd4dde19b5ef14e3a244647b9553cdc99d1cf4825b24f324580f424efdb87afe3cb35c21a2117f7bedff6b2fef24980af792a680f5f7a2a5011a2bd0af299f0ff9c52beeca8552c6b15ff9cb32be23197c97cd639cb9b93692d60aa54555d2d6060553b42b5e75408fbf3eb7a9f7b31bd2897c665bee2f79904368b1a5fd3d2398c926dc2c1816a20e0e840b5ff6610d26f91635310d2af0984203e84481eca57fc42d0fbf9cdda09c16fc1f7a359a9cb3e2d56b72a50dbd2f18a6da94ded4b6a7fa428e00f5f08842fbd1d085ffb1df752f1d7e59d77b07fb68f35939986d323229fb74951a8d73c227376df13d17eabe67dcc44e273add1143df6a6ce65eba762e0e0496d94a0fc8d9a1409faf563c1a0d48fbeeac76a1b1a40b75f22254eeaf6fb73772757a7cf8681abad1e2a722bcddf6efa76f17d3f7e45b68f1de94b5d693dceb8f9e611d9df4a5de9b7680221caf5844c2f4dd2132ab58f17553301d966073f76f3b90e48fce911d9f7875ed79f915a84abdbcbeebb01425a2f0564a68010716fa7b745b8ba79a9999a0febf4d68b2467aae67d1fbbc951129c571a46a9cd9df1050da3d496fa4a93b1ab8c5dbb602763086ae771efd8169fff87b7e6f3b8a6f647785cf0f763c7e34a5140fbf942b49fde0e152904a6dc9bd45756c0d058c1a17e5f61036d24271e7840bdd5ff3dabf28ecabf759167ac1276ed5a130841a6af7630417fb9b9c190a0c2cecd51347fea3a841036f4eeee7ee81042d8d0bb658f3c227b644f64c51d2c96dcc16a150ed9237b5ef67477b7ec913dcfff3f5fded264bedadff9aafb7c9a42777b8aa89f16abebd928437ffe6c5026f747e7e6d8ff20ded2f15517028c031750af423a876b1573d7da6d15d23929b0f3176f6e0efed9ec697aa2b012ddbb1d3b76dcf7dd85be4b37a7dd4b16f91be10c58773c917b895d0877631a8f3511aa6fee336a5e60bbb87b03e98d8aa1aa55436c8ef663574405c9e087346ccc5fa5f458d334cdfb1badf2879dca48acfbaa56e160175bb1a2f2afc760fbf855df84aaf2be4eb74e2f111219d48f0e21866fd3cb105ff174459bd92a117c48e758c00776d22d1fd240e7ec125ca2d4a39d557e71c1c2a6a025b608d58f7d2ad39c4f25a4739885ca437c4e4afd835609b5c762181615ff0c8a49b614ff8d661893edce00a3a6c90c6b284ae94d1c143317d4df0703d92caa7bdc09c98fecd18b9164189249641b372e8c2a954aa5da36ee628c1eb9771d274428922f3d944ab584721f6afaa38228e3a070a0bc055dfdaf920155c5b648d65386ed0f5ad59bf79550b71fa552c9d3f9a03312abce0f1f12a173dc7b9d1fff46e2f61cf3b6711b7f5f8d44fec9fa2963c03de9bf7eacd80de91c0d85627e9217a455ad692f04be6624d6186448b4808f524571a8520c343ef4a6f6f1db48acdacf19e37b989a0ae18baf793c959ba82da89e584c2ed94acf1b3397f8b7d297a18fe359b105b78352ed87ddce099be4ea37bf033c95fb8faba637bd29c22f6da9e3189f3b147c525aaa1408ba5520fedb973a22fedb6fde7969ebb852a9e4a54e4f84bff427fed2b3e9495fe36dab4c9cf7f97f806be9e3f3d4f9a56ebe4bad4bb90ce813c1c4085146fd58b568f6c0b3b7641a837e1522798be4cd923763f34ba881d5af06b6754382f8b036548c55ea9affbe964effa9aaac79daaafe42e3476d0b1bdbc2c0e26c07a59f04a82d46f6809257c2e67082aeaf50140a1a557bc9ec7dda7b11168e5ef5541979f98963280a055946d860614a4266aea40788014c510c4354940d1224104208a17b00ce70e952fb6f9a883e99e006910f50ed20d0a3040a2d4c00c5a70726b02708d31162d81f03644481c689155cf9a9f2037ba2ccadfc9c190ac312036001818a5203098c4d490a6c985f14955ad004288c930fc030225232d3d2f3f3e344c991941c927c10c68b879f0fbe9011c16085c9074746f5a70ad1922bb40ad64334413e241289442a23ebd59699cdd98bce60a8d9cfcf807ab52c343ed0e03be13413336364466666d6abad1f0a084a8406cd96cacfb1406dea0ea11153673082479a0e103e73fceef627d2120ae5f76f0e635b4839cbec7e6766a960cb82eeeeee6a4177777706babbbbfb023318daefdccc1dc6bd194ddc9bdc446c8cbbee857b052dc8bd68405b8a390e569830a1849929bab0c28b25362f5049400f689a8009fde033830c37498cd062742bac50e0282181e24b305814698aa012861831c89e22a8501c47b9ba8a10439040cc14a1218270c2675d5081bb3b6fd971021b5ef8c122cd0f6438c3e05848ef9b147a65a84851c3141ece60f941c9d60297fe30b59b0ba4be1fb4bb1ba165062a8a78c2ccd0172e7e6146fd761cd1d005bb59e04932d352032c8a0a6430050cee70a1769c0dbd49863ca986d09ae8a250ed356f8205ab436ad91cf2fd87c6d7de59b03d66bcaa7cad9bf1aadec476b05576bffad5afd2ec97fc8e798bf4f2dd49b74853aa5036336233bcf595d4a4bc513df99f63712dd0061a1f76156f7191afe4cf4929eaff53c9a22a532490fef4274f855398f6f2b916d446ea546881f4f477a89722e1f4f4a9a702fdd3af6b87f4d40b42f2a6af98a948c9411cc44127c8643ab3869a50533eb743bfee3ff2e5a4534b95ef5a8adc8b6cd352d272f3aafb1dab32d6393fde5a977c07f2168f4b3ea9e37179907cbf22a7f7a1b41ff8a23eaaba9dcc18b1557e39c60a808864a07941fec94f7108818689e69fcc4c7698eedb8d84320ab2319e3c71f24344191727a9fc373a6706a7c586f338db42082184ed9c9360db1b9b8c428bd81cf03f77225607fc8d39c042bfeea02ef296e9e17b4fb74c9e0a456dde86fa506f7d053d8752e345a9f08aff7490b7784e4a51a87f19940d0d0d0d0d0d0df10ffff0cf0ffffcf0cfe4e816631b9b1cdd58a5f797b738ef9b30420eb050f87e65484b8c74655ea9f0fd05f3168f0bbeffbc4bd90e98abf43ed4ab461e526f28d852a0af6db9bb53ddfb289c246afc1f42ba6563e806961ae329c6d8b74335afa12666eab74ea86afcde9c88a4c6ad5ce7b444c2232cca5bd24b51805d9b2241aa203d572c71c72d5b0a466685f9540eea6a4922ab5b731f9815052d4d19afeadfeef9120a7f738e4915d640e1a34c1458d7f455fcbec65265ae81f2f7936d7f6788a1fbfc6acd905122fefbf9f796ca9559a8eb7dfcaaf0b7fb4007e4c4f3c14f8550aad043e154f7b74b65d56fd3d4cfb7a3f1a2bd807d36a1f0b47a16a2253d75899e48a9457589643041dd4e7b83c78e9d151410f484914bfb15b68b172780b9a810d97e7eff8eeda06bd7fc67246e359d0e8faff9ed759abb8d33bd4eeb6ca78e796c907b1b6a4365cd7bc73d77a7e7d139a7aff993e7a3e66b5c1ce77d089a98ba797f230494558455a727a479ee00e992afc35f034bcde97f83cc3ba7183e0f138c74eb011f0c51fbb7bf8dd5dea13874864bfd760c7f84391f4ef391fae1a8cd1e0f0974c5892b340f94a424b695396c61ce5dcf7ce57fc2ca9c5ff4c7e74bbb827efc83b7560b132e7f2f0523b4d23ffde723a8ee4754ff1a63a0bf66b4b29df16bb25fa9ee4254f72913e63b54772fdc7fbec59bf81c89adb9d2abae7c42bf38ab4143d9134a09f138908252e1f7968cf9ca65cd10a59de6c2e6f03f751a0babc37fc2bca5f5f4ca6bbc8f831070de77533fed0573cda7460bba757a297095316fadc759f5e72f2a19dbe27625e31ebc3af8fd198ce5322b6b17aad78d9a36f788faf10fed1ae24a4e6c9c97ed0153219c2afc53855e0a0857f85ca1f7f1188155e89522815df2d9253d18e78adef4d5d26e81650cf9e3677e67ae7338044a68ff77a3f273b31e1356e66a9755bf412b492f49d7e2a780c085af294b4e22cd15b894f1a76318d943b77c9156d0ef4656217b2415920affa9cd26784bfe7275b78c1dd6d1bf35a494dea3fced0985011b163a9c000a8704f5a1b12ed1096cc04297d070021810941301ddbad862940466eba15a111704b53182238296aca88086418f7c41b9a02aa220c8548884846290a28c0c21e47a7a8011f990438908221f64d8c8104d29d304d1142e484034a54b1744539a989285680a124453ac104da902030a3ad95286d4c29824aa08832a2141081a85aa4b44822395465d221ebec0b2fd0761f0a7ee0d9ea81bb5bbdda33b3b843c81dcddddb51997567507d1b62331d4655a5d6f69335404323263e483ab42a4d7665a6a532fa8ca4d20ae6e46382f308a13080a94d059965ca894444d01ded0ce4831545bf69a93516d6de63259ed97b136d366da8c0619977d34c8b8cc8f220d32dbc19ec29c62b1d39852c9db707aa09fcbe877723ff299f45c165db6196d46d1a3d176b0db985e75257daa6d4c2f004bfdb6a34dd6aa9d920bfa4d2019a3fcd81581409bd10c286a314e206f919e144bcccccbcccb1ce366f49ae647da439fb96c33da8cbc3581269036816ea886c2919bb63b77e7082417c9db8c7cd58fd383cadddd519de4a49809bd09844306edb88d69553f0e994db619010101e11cd1ef143bc93a2716e664741ad3399f36e3228e344b5bf37293864c362b87387b42e7e6f013bc355b77a0ea4e805af5b339bc67be9a00ac0e5f46fd7a754fc3a2ccccabba4fe623daffccafd3903d9fb54a424167da51e7ec7cc140434ed100d8bbe27f260f602c57fcef0449eb80f85b19365dd2d3c2f4cab558ccf7e4458bb991cb9c8c7bb10a10b30bf06f37325941bfcdc8c88d649ca90afa6d469a0cf62079570f12ead25e7e8c69dd098b4580bfec4e2f5805f8c7ee44c52ec0df4f5e3687ffe6469a4c9bb999ea1f37a3cde16fb2827edae65acc0608eadd5de837b5eede65ad9fc650f73cc2a160b8ebdeb7b3fb3aeeee0e7721162cb8c8b62be8e7339fbdaca031df623640d0cf67b2ba7093ad7c017c41d876c0ff82d16634d705b47e1c7b1f945de414b2471e914fba4ce1821ef9a447f6c827f2883c22b9c8232ea0920bfd6637336f0a422943748b0145afd78b0517d1922ad57f3f7652dd7fc781aa3bb797a582b91041599a80c40a5fe8835e39c3aac356c14f0121114995bed43f4e3e20a0d4573c0479dae511db8c59942cb498619bb78b0a305832012c7cdc47782226030b1b7705d68f58263399c08c8111d8aa26db1cdd7e66a3593e46084f336094c5587608bd9772e1890266285280c2fd0766bf71d60bac6e5f1e2c16120a211cb212638cd17405e5871be37a8c4fb950fe58c423d3e03debce5ef507c1f966102a68bb9bbef8f24c81c6779918db16b252118a1362044c04d58f724a68d7257a9243551d795da227383c5992c4b6db9abf4d4fddd264f7d4dae1171f7ad0bb57689ed87e24083aa32ed10d68aa17052b8b940af7460b54f55617cd20abfed07f2e51fdb9ced9aa3fbd41356941f5c7f928d5dd090caa6fa161081e1ee8f49caaff8f2675870154ff2116e81296a8fe1ae81c0daa13d56045f52f72820ed5df48e720a0fa83a0a8faef740edc4a640397ea5c7ea4545fa0ce5922a034d59fa138d10d5daa3f47e99c9aea52ea32b4f23bcc601e2433783283a22d8c0803c89b788d23990251eda1f88c941830b1040c28a63833834d4f13e8f22dba683b60269b437b4df2f0968d5f9cd47fff3cae1a29e805e9413d07cfe3dac04637e9b4f1fd361c05fb01aadad7459f5fe922239c0ee52bed531bc31ed51c745dd4756c7d055d5478832b745da91fe22bed7f878a900dbec6ef50d9a1228483efd71ee5ed501182fa94b7f3c357daa3be86b74345488d47793b3c6a6ce0ed68d95171e075918a870ba5bd8d31e8ba36f875a1bc14003c135aa5bd4946658a1414f1f37ab94ef095f63656141955ada749fd68b5b243dda0e397afb4ef8e4403fdbaa86a2921fd1b7cff061eff6c0eed6fc050edbb48fbf6a27dc7b48730edd7db4803efeb59d56ebccf5f34bccf6133bccf7f6cbccf81a8f779d0c9fb36a6d5789f5fa99ac9fb7ca86a9cf7b996aa6d9a7b21799f1b550d6af204b92c207cc8ae72ef05e0d3045b07707777e1b6480f7f7a949e48d09b2357c2aecbdfb6737fb891c6196c27f046aebca809631956bee882d684d96ee0b20dd19bba444c864a46505a97884995ca440ad1cf955dc7d1b2a6006b8a280616d636537b06b57fd7668aa0b56010ef879721f3090e5289685f8445224540f33e5699aea874ee353531ea14cd8800000000d314000020140a8844229140241e57b6f10314800b76924676541a4b845110e4388a52c81842082000000300103243334327089d468be4be765352a73dd5ed262642eae596a9725c95dca7054125919e68e3a3cc940bc95f5c8f91f97771b40249f677a9e9704ecf67ed24ff31a3d784e96706897c95934c7360d6b90e99f7f7d9ae0cb02eff6d3be1b40078aa9dbc0ce74ba6effca33574d15c33ab308fb3e186b4120c1287f08388d6d210665b805380457b04bc0b0905a8b4127cabe81854421bcf39245a825a188d4f9e4ec79544fb6a8a239f877bb05dec2c5709a30a92853f79cd9cc30953432b1356a17264ed65cba4015c2f4f8954133b6b96d3072df603e9f2d399495755285072e6e1a409f314c8e2b47a50e56b1397a7203ff554151538c5ab50b29444fd23f53d1e73ee33da0631f7c8164db75aa10e4acb4fd5af6acfdc2a19aa6ee639a6cbf897ac9de862103cf57abb70112e47aeee7cd94fc876f49088b019d71b1a7e4fd1aaa92c88fdf77367de7512329aa8f60d60bc049bf96da3dece087041e8357e2c3e25fe6fbc96378406544fc50a4eeda8d5fe5df1bc815af362af772ec70b1cbf24ee92091edc1641fdb788d99ed7e8d3fd894c2ebae832755322153daff39ffe3de63acab2e4938b146e932cd313151bf4f435d08b0f7a5a1c5a56568cd44b702cc62b5801921c7dec94faa3065019fb4878fff5313e8602e027ca77481fdb354d14409322bcd95c582c87c34a4e6ab8075346a6c56b94c5f1f2a29703ab2a3ac0d397d20328be874ea0fac8c07b0c3b8195fa14c78da6577adb8233ab4a6e4c27dd34bbf63629458b4a5c7c540c44c10511813db558e3e3a156ad12d54cd1e73d552fc0e28c31b6f4e53124ef7e51350682611627ab8ac03e2a88846306e6ef1873bf1956434541a516ecc108f914115adb91abc39f88a8a08f8112c5ceb2fdb483c8c68455a9175d2ad11ab8d7ca5aa0c65d96c8a8342919aaa072d09393a986ba297232e42434329867ef7c962d09cc9f12104343c7a33dab3931dcd8d33e1cd4f5d292635a7a534dcdfd6d6331c01fa821e45f9935f1a428b65a58792614e2fd65add6882ad0bcbb590734e5831c672d8e4960832b438a93b933800e458dd8482cae12ea52f94bb8b8c55f49c010c131d7ae1d09f39d1cffdc45e571976ce4f06f1d67701295f0fa093b047949c7017c7e45a68c2906c6303a65ee58765a658719a529e85d843c735b03c12e310ef3c719390d6e2fd8779f0e5b4a29c0701d1ccad155ed83740b476a8f73c970dea7c3a4f7dab3f76923cab0a34d4afe7ef4bf13f371a44b14d655c117e3877516ad9e1b25c6be3f2e782867974b31b13ee26991353b2f4263f01a9c856ee690f05c0405aea9d7b1b325e5cf875ef49615517dc50e828b0d27b28c68c54a73bee3fb129e022508e0e9ec06f1ecd8981d6607fcccd9e41a98dca96049207b527c467f0c71f42850dec2243511683aaaddc22da60d7d04a54da83e6280e1bcd25ad3fd499c966e0813bd2a0479ece3fb115f503c9900b7a1a329e255471b5ea55c29fed3e880c84a9efeb5c33205131c2d457581d6f9a2b12e523f6552d19b68253833bc4e9dd95240a83ac8c387de693e6bddffe03761595868b4e3b2c3b5b7d62fcc22d69591c8d1a08f9db1e396e61ec8a0b77234ea2aec4a8f43118b18b0ad36f6e68e90731f22e694911fcb9a9f675a36f2dfd9f06e4b629aeba8462f26175f1e252c71714ce67e30cb708d5ee94170ddc782c537d1d8fa01dd5e0495a154e45a8cb2ec513f3312c5932370823c4852220a53e4072bca48bf343be65217b7f6fc15d542f82d52f44ee7e47ad0aed11355bea84c924373565adff25ba0945359bc3fc6082641321dc25c42ded3eafc0ea668828760731d2f32b5e4ea95123752321d39a6972bcfdc92a8eb434e2b23090b90a8afa6953ad4b40ff19c11daa36b77e3667210fbc2be744b64d0e24d926ed184607c9b471e83bd0e45027a9650df2bd452bdc24b1064718257c7fd5ff7e3f0ba56a5bce115f0023c270b98891b72b444e5ba82df42e1820c2c0930392d7ea4a8a84362ce5a39c4896f4dbc30210997fc674fed0c25996c5cdca64683600f4fa9634ebe690709aac3c13a3b3afbd7f50a6e7e06ee61c10710cd0f97de0c55b73aa02b2fcc9bdbfabe47debef3e27a1a584f5b65bfec08814de69633117bc3f11ff4b149b24b3d3082d3c6c5262d2b579d4479209d86c01478b47a8575e99d7c8b2563bec376b729cdb46d164f4abdda37dc6ec1071ec5d523d0cbc68e6246945c46ada35c8a763187c899c189c82fa0f8ad01e203f566c73ed7353051e0df45762ab5c8a188b6f67fdb74e4e6d917e0a44959c804b84e3ec19dba0a6e989193e664735b9d1c061443fef0298dad56a0704d5f54a2aa92ac7ce0b8e9dfab15beef972da607f8f0a600d674f325bbed2a4298c376d075a578ec6d0907e66c0f31074a285caeee7f0986beee279a715290f4963d68b8786691fb216f431d29e950a4161402c15aa902d5bd9f82ca739e5d2d11d8011f8e3460cc1ef0e827b13794f40947af72266211d03e3f8c5c002724600cf0430c4270990b5d2940abec8510abe8eb803d9cf33d21a72c883152b48bdbb6ab6c15251bf22d9b79dd9c40887c38303328eb2491158c2df97d2bed738a37cefc71860f62df3bddfa2b5f154bbe8d5fe506d1075987eef2a520b6cee262c363ef5734515ec61da71af9c043273838c64437aa7a321f9fc516b1a1d23bb0f41ecf07445a153a5c11d612b66351087b9b8969df19ac7fdb18611c6cca5a9bbe5f4db9ec05aeee7add44223e077301f6ce9be123c05060a528f6d7c54a160bd6f4a655deb7d0addd87c436deddeb1f9491d836fa1418e5ca9000456318106ffaba28bcfa945b866d22fdea8b21a2e343a465dac29c3fdfffb2a3657339d2b486cd3c490a29f11e225c8d65e1f9c75fd7c291ba7dc45b911c0cf0b8a4bc0820ea2019d0b40d8d0582038acaae9874085eb80fed52ddd30c5b3fed91a7fa1ed5d54974e691edca8c4e37eedf4c0c0e15c6605dad622fcf712ffcdcc98435e4d6bc0b9cb25be4f0680bfb68fc54cd0e61acd3d497565ae87c8dfd9a4ec204af576c1b9843ea6ce86e607e948d5cf434cd307491117748721811238aaa101666b135fc2ecc5179692eedf5b603be39af3ad305e12b8eb51dec118b3cfa84d1b7f06b4d39d160bb0a960e37031b6246fc0c7b880c45e0a4b9a9311f508008e96176a504328e878fba0d20837c4bf2f1e3156fd8d0680cdab23267ff44e4e4e4f5a472c2e684f4948e6469731d5ef8344feeea350ee42297a492d58eaecfcc8c0b142b885cab8050609133ef99a6e33d09c0a2f988a8181807dda500fd86a0127127b4240e643cc623727c0592608ec9e6341a75b04e6c50da29f92d0da2bf70fb8b157ea924f807f9ffa1c1354769d8680d19366cba8f1d2f8ddd855b1d9a9f039189d086de3cc6cb16669e364434a19cb682c620f3209f610ec31b7fd57a284736806f0809bf1072c3c57285654a793c7300425cd96f960c43dbe4d90e0e335de4e26915d408d1af0df3d9e42b6aa76c8993c59345aa8bfa8b46d875870d20eeb6ed6e30da6c547979a46bc61b7e5136391e38811ec43cb51c715ba512f4f251f145a1dcce0807a1e8ff2c58a7ef9686cad3d52068d6950fe22152c1a1ee86bd682c5f140fcbe1825dd6dfe1b99f90aafcd2cd9c663798806bbd563466ea4fcd466753529d35489d9ada72e593f6750ddb48dfb7a4a61c50fb36afdafb9dfb694252e8834bbc3a10e87d258a6f5ea33344583039078d056dd7f0d8a08cb736a9256678b7d0accae65e4b1357520284a2c9caec892eb9a0d980cc938196fd779a4b034596c566b2b47c62fc383da106ec6a738fd0e7f29fc205a352fce1ebbfe698650f0e4a1558c9237af033d6ac195b45dad555db8f62abeddac6c16ab5adec672833a5cd29e529dc903b6c788cd46edada86c90d0b6ab411492185275b2c2ceb48f6462496d558f02d37a444f7faf4e7de9cef057adedb94a79b44a162c3aa59c9190b6fef4b49ee2e24e78fcabf03b62e5633f955d3a0e1b33b38e84a2294ae844fc0bc1d7ae0f9f083b0c1ee8e1aa606e5640ed2d3824ceb14091e277bb60aaf66bfc8d9be00348715c64aa8eb5776ceb8089ea650d875c5e31e83d4834bcaa8a77016d8ef5e354383c96e464d0209a981933aa2b0cb72679aad1180d493c7c9949f83af251ab334545c3a36825071adeda622ad8b2df044a6d4340c944a0b683a16137b9b3f18ea8be3649c267388b8e831433f095e9da76c0312e9324432b84ac7259b23dd90212caf534a8346810e5eeae484b56d76b508161713dde5f1732bf009e17dde607d6fde1b13eb22fc181dcfe7241150dab927d341c1d694ddbe8ab5d47f83183d2556c659c0df1f635f79581ea9c83263f72cbef8f9ef6e0ee9d36b9c68f8f05b95c071555ca7f8c6f01c14d506ead5c368ebf446216883cc3d42da9d131d10ce2a2d4cb7adbe1e039fd1c3c9034ecef011d695cdb43f4310da96aff8d6843ebe1113e57a6e1274131dc56174263a9579017dcb67b58c0092419ba81b0efef6be03d98da4d2431b5698799246325798b3cdf9e57376b335dc8c3be458c46147f46663800aa4e4a237c5fb322644ffd0cc33d297156a967042550a9bc1ff65c7f6c5c0d7fd81b744be7358c253fc79222ee95d6dc1fa6ed875a4cec9f008945d15e558c1366cdd37f5884e3309f0ff38a0bbc793663edb01f2a47b1c7af644a12c6463344a471eea14fc053bc08e6a10534ef5365a635ea0a04c47a62c37299f2c31bd1865cf5ea07a034bbbb83bd884756e7350af0f5fc87da625c47313149fd942e1d0779246264855554586ff74d2c56d0abcb66efe148bd01c9852997e48a181fd0efccd46802749108710fff4de68e8af2d1fc5722a9b4e23d89dd5570bee57b4778ed5038da229fd839190b9be1ef8bda563a8df516e8de8288f9040587b7b342be5f42f4f8e7643eadb5b080f7565a06abf9551ccb888c19e1b8090a836e178e4ef9662a0630f79b9915793fc66f2fc27ff96f27a955f6a79b5cbcfc1fca2f16b86439664b443a4401e1084f7fff1afaa5ee9da7fe080b66c5f4923de68a7ccde4647bab9691c4dfc7c34a7971531a24f994beeb5a34473a45df9491b74ed750a11866543ae205a039a8f54c4f366cfab291e4252e134969b0ad7c99c678ba23172be2afb7cf4962ee73352b5e1074c193212562befa44f635dcd637063e58651b45b91d13e158cdc54987e4e1717e37aba0ca64f8802d837536d60f87fb12510e8859877c9c53ca04b9e7f1e3152040831fb7a1c4e94881e34499c2cc0b8211d7b8a42f3c894213c1608606f983e7b25a11091bd3b215210ed49923be2e0159deba1806eefd0a8b640d6df80f008a83076fdac8a2feb30eb3e624f04b673de1fb8d500e569423a253be543cd3a3f3fe64934c4dc98f6e43be1f1075ec559e54f97bc0014cdffb2e3e7ee166beef294c7df099b6ff4c8a44c76738535279dbc9ba0e593597cfdb20c8618ceac5d118d4cc1568e9b3760e89c7b3495a1bd1fe1bc5684800f97d9ebc742b2ef6ce320057c4027395fdc1d4356e90ec8f00c998039c19df618a879f377f5175eacda8576f6a299d302ed0b26ab58a89491c0130a945c77e8b70ba28f72775ebf08d5045c99958d2840d1a5152a74943d676e5dfccb54781ba9ab180d84817f6733467aab2e2675d0a5e7d881468f6c3af6a2c963d694d55c5a07ca96fba427686315c0c54d661409ebb5b658a621baaa5c6154d87dc7a3fd17f0a8091f77410dff36ce6872fa830fcff5b506a07eb05c684a739d0a0826089b9a71cbef2c288adc1e231bf8a6452e33b1893d4cfc3ff3cc9bf31ad2deff8c219236fd87ac2c25400e8ceb05c5cf52f30aff99db8e70389dd2dd8ddd2874a0d7adcc779ddf65b06296b6a4dd14ce722e5e7a6c95e0bb6846513232522cf9aa242009ab841ccf203502cc1774ce9d864eedcb689f5fa870081c0f8fb588f5fd0c12d97c7a94dee9cbfcdd0e583e43a5e1a8f53430a6057e6de3c5ae56528428dd1d70399f8c02039a6a52863cdddff01224587e16f37152d9a5204be9c0d8b705f7666d8d96c29fa6340d9d284353ae925b04dd92e455d30a17489c8dfb9d9918ea48a0d26431541277f344d6dcf6abdad4c7faa07acb5d51c329aa412122cad1424cc6a7e558c5f1c423bf06b14cfcb947d5a72e4ec07781d4123c17c002152a98d587db1b68dc3f65bae2094c843470546ec93909cb644875d33fab9c7ce442e2e7a5d630bb41342d470ac3ff76fd561008c6880b2b9d7b2eea6b07fc40cb9995363511d9d4cc557ba1210bef0f820a4d1c60fdaadf7206f7fada7aa8dd0243c853059b859a211d7b056ec68e13167876205dda4c79104423045d39998b639c4dfa167a91111c0a5161fbc1180e57d44eec3444ee6151015ebf8b6bfcaf0f51d05e93901854a49754b512031d008f5f846990d4cee1bfe4d42c47b126c41299e4783c992cbd977b96ce54169af2436ff3dd1b31d44ca9264ca42662b33313e1f34406fa6ca76258d441557268f14f1080fbd1ac2a2cbe31d5d2e83eedd4b08c834fc9a3996fa962117f906a4934f913e71f082583e67ce22b396e3e94d66d5e01ba08768ace1ff428c9912682ae49f3b4aabaad61d16f76dccd8f11bba92684ed34e76406d921766571212de25357189e790754414bbd63cb11bc042600472688a27ac436f68dd5d9235c9c1e8a36d2cd20d05b602d4f6745455eec19cc8e7d04ad88f02583719e17d3e19aaadb5025f4887ce8f2112d2f67fd9950e4932433a0915cc8fbffa87c5f2135230174924b9159ccd3b0e1fe68fe43f8183c4ea1f7c300b2145bdad9db0ee04459ce13ae286d2f0d3c006303854e0a8e2b81d2cd647e1abdc5661fef8f4f09c8db663ad1899585ebaac986e4e8e9b245ee3b30df1fe65c97a8246a01b339953b1754e908b1550105f9c35309525aa81a7c979916dd7e53a1128d44bd0594c827069152d27d3f670abb7c9e1a2c7e3bd2ee25fa82e79022a23fd940e015180d09119ff8d6bc650152b6f8e3633e52ca8c8f714a5906d7db9bffee6f4b6f5d374a8868365bce4ec26e7532c385f5c99b17d113ae12a414178d8e7d2624d67f8cfab050ce8c983cf143b9c9784f414b3b5e3c467587f86db44a5a6227c5d92ec1fe2b1e921c46911dfc8606a5fe0c274963fbe8878aa0cf624e131907fd27ab385944ed75992e1eb0c0266f309f89b1b31f9aef24be994d40ce3d3839b25fe65de12fe5c17b6013c0bf9ba72c8429c90b80cf520af7b67c126cc0d2a163b9e327420a7c3873a1487ec4cec3830988e5306279c06b5a9f79b0b47484bcb3c8a8b81284408b079a1901ef285629b89960aff95ec6c1a8329fa75c7b2369704eebc5affdb0418f7ee3fbe319759cd648437e9f3351a6281d1185df1330ad052492923742a231beaeff8df13cbf08a72a055795fcb09b3950aec024503c258133c05276b620ae1cc1eea1e4c226112238a3c4dc352c9ff5a5586b38bea9c9286ab3f973bccddb4c1a9cda6609b730ba69a3fbddaa1ef086e8260a4133f35d130ed69857cc2a93431e08614659205b41205c2f54359bc0d0b0d1294954890f6ab886d022e0d609089ce27db349be210d453524a56e0a75d296b81c2d25fd544f9264eb82f3207a46e6a426a2c083c0ce8ca50da08e482b7fd84a90a21e9c13d8219f88bcb17a8180fd7fad129601b3cb1be4ec9b77fb7fe2734c7e852ee4892f3b1cb4366faa77ddd59e83d3b309d3a81c3835e4270d5e961c17684a455d19cfead64363a03e50c78f9f252184d9013dfa47c07d1687ab808c2867668e0d882390346dd4e4da19f178744b86a8957ca7ebf60c00b6689ec280146b706c86b60fb991b282c21d2422881c1ae605bfa7f0897b6de9993d860ee009eb06a25f3266b8363a710f4a4b9bc3166482e36b5a54b9efa7c13a7785d3d6d89beee61436bee22c1687b50c2da168b10824f86a9e6e93575b782d9597e9f0624f544779818597dc867422b85d5c7b7bf3a8800b14cff05570cdd1e654339fc404943c16dbe5ee1f1d3f45dfd5c1875a5fa94dd6971c30931c2a77be5ac3591cd6beb8446c7f0a452d4aadac2f486c21e482f356a21ca3f30f1621b41ad34250b21f2cb84febd5840a27d56532bf022fa668d7bfafb08b832a8f3a75dbb543c0458281bc3f197eba1b1f7504ba073ebf6eb34a8f7aeff144bdf595c9642a88b52f492d77e9fe9c3ba54592344813e6c0bd80dec7a1ed7a40090170778d0ab7a73c53f3140eff586914f26bc102a92a2ef495dedf582886103c0846e4516ad0090b307e4d4a84da4a102f137e2f357226ae100249e6b85481c3165ce9c1a0b16d2e39a41fc3aeaaf73f48549c49344103e1e6591fc6382f701d6f95fc01cce112aecdea9a36f191b60a824ebf4c76d2b601836a5a23b9b2361d7d1978138eced9c7d22a85389052296b0b08d8f8bd3ba33c415dda683ce0df805bebc85816c40e785b9384913f32053b4afd8827dd2020a60470a3f7da2f23b056662cb6ca6853fb1f3296525fccf321a2c3412a7114dfc7f3c47927f69314e165968e4dad23c1899a603f3c16faf65b608387aff87a96de8b5461cefb854d57323d85dfa49ea2ed62dbe90bcb2bce6449f890e698ef0e050c011d481d659bb9bb7be54365e47a3163e2abb72bf21e0cca328ccbb68037ffd1f023c072cfcffa68eabd1586814fc0eab93b3ed6e96a5eb3b9aa3f4841724e509002ce09a29c5099ad13eb986c24f334b1fa49dd4c8fa2e17c48025c3e7bc3b4a69ee6ddafb508006733769134d14028cf2fb85bcb384add6cfc707b67620b5d7bc252c2468fecb027c295254d732829a8ea9018aac16303719536a3e0ac95c695b965a7da25d8337d9721d2b3a4ab6aaf9a77475177845e786b789c3afe0c0fa02a994925d345f492ff8056bc4ccb4f588fa16b58f2d497e4c3aa5bc2d2246258bf9f534317f5745b879c85b37aa6cb4d90ff01e7b950e0108163cadebe66011da4e50dfbfe02715103124a067870a5acc8e4c721cb1882d2a00ee81888a93c737670f7c9cbd11ce0dc284dfdf23d8e4fc676398598608507889ee357735770748b1656b65da0bdbd9636570cbf4b639df5f926032fd3f6ac04fe1e46c6153020edf0cc1bd1f5534aa3187e0f33d08c1ea7f01e197c60c781717daddd1fb656f3a5ae291e8aebda3deda97dbaca9a16817e4b0f6329d83b114bfd6b9a59ce364b215bff3a7a3957a6d8348c13396280bd5da7c42a18423b361ef5c0debed5eaaedfbccfcb2ce2912eec9cf115b2dbcca61bffe31e79f402caa492b2f39c2433eadd01cf15a601d634d8a2f3308a6596291a2dd5e428b583677c14c0fa5411c2f6228a34a162e3e525b275a68ccf283d1cfdb1c671dab75dc41afc7967c3da7f6f1357335377c61dcfad4ad56d2ed6479787763a7ef7537165858eb3f8f1e994597d5a0647ac14f24c5f1328974a21a53de7894a15926048d58e2dee9491b6a3c07851c556955537ed5e672043032cfa2456b2acfc5f96925abf273d2ba158d8e0e78fbe8d3cdda6ff3787778e309f98229ac8adb608f244cd8dc721fceaa7f678487b904ad98fc03bae7ed439e439838d4f78361e05f500c7cd189f084a4a4df5349291f4702de37105e4d0f2d03ff091ba8a74da3033dff71478ba6999745a35c13bacfe2c7808089e49b82be24dcc7afb193da0012a3b7a9261f318388296d461164e0b53d2296b6252d18cc4860acf58a8389e9d60e9f5065d0a16d3b04f816a07031b82c39179c8b3740eec5ffc5a103500c14e9367d148e323a619c75c24b7e18e630a8ca09101434b392c04f642f3b4c30f563d1205f184c130afda38e2c0a9a14037a634cf061cc2d164eb62992ce5b40a2ad86b15a142a5ca42fe087a9d5d391646127e432ced972ddd23c16236bc52c7e31862bf10ec710f1945c33cf104ca746a1defe9a44d1dab1c20f0bd27ad86e08867f2d37c51854bf743f85be48337576c5fc0389e05574f89780977e0a02eed4e0f4819abaf43de761efeef438bc038cebfbb9d6b99d63e323c97257b200fc35bb791ad7c035c2386cd3a20360e624e0d8b60a8b5d59d5a6d001397ba48df653ccd072612878993d4fdc72b39649c27d7dd02057145e42c78b137d5f7a932b5e145c7a5304a659d90bed42fbf7173beb6a58324cf4daf9f3e514320e756517d45cca23aff9af3e66e45c35de69b71df5db0f50b85590ec4d81e40ee067e5d75badc30a196c48bb4375c6299347d2f06b7db72300c0c03ef9d93eecef89019cbaf9024110ed22527f77b7bb0ec045e2b61ec435239d3fb77d2023e7f1e3c6d3b1cf679342395047ea2d25e064a75590535eae5ea7b105e55221fa4fe612e0752bbf76b42727429d6b0f5bdad01a4b86259c17c4851a958534228af66092a344fb64ad211e699328de8f65fd2591d19d86b0c88d7c003366100dde18d43cc66ac58ed6e3423c59769a891fd2fc46e806cbe749c3c715a03506336d64450ea32677475a86cafca67efc479d4cef6fe308d9ff80d4d5de4ac0e886abba94da86c074b9723d268434d3bdbe72b8429f65313e66e65470678268a1a5b1fb5a2ea6330fc7fc8aec927bcd2d1b9a1ae814551129dc98f410c7b38009d4fc566135fefbe4ea7cd62eca8363eacdf9e386c9959f0fd49ca0c27492c52f4e05d519841610d780a831efba7966d781931d84be7a47cab132a7d18291399952cf2d45c556004a8d8417d1166803d8e9a240810c42be041101c953de5cc43b406c695729a1210c792620afdb8ec25a526b07efda13f9850bc738f6427ee2fd3bc037d6ec49db799d77229e4b114f2be8bcc325c46fde28df6c6ecc341dcef1ac6279656e45b431162bbb806a88117247bcc78aa9b6d0ff6c6a0d8af3f2b43b61ee62fdd6faea09424fbe9bf0f403d429d94d24fd9ecfaf3cb71cd2ca04544a007519ad06f25c6a5e2fedaf07eaccc92aefebd9c45a69a162aae391893db947a6298ef1488f8eef3087e1e7abcdbcc761ca6a62dabb64504dee2ed57e0c272b9b4c30e7d88f69a5d34eec54dc3ee4e2d1adec1a1c374c441ae6307d3097a740c8d340609726b0d950609b6f762fad9048ae93484a2facbd02168d97914a6aecdf40131d268dc5fd2a5a19dee6ebd5fb76db349316603ea187dc4a2f97f77f1e3318dc8f1b13d09973ebb27833ccac3c134e1931a7a9e86b60c50bd880e9ab9586e56e70f373ef5f762a2e13ab10119086e8fc8d9fb592aff4b8b3e2e9edc575ff9b51f160e13ff207b6d5eff1fb790fb6e0c6255a6c028c51d1564523cca4c76f6e9486d99d7b03e126974f2ddbe8d1591d3e2eda566ca7c1214c8e4dfefd5ec3e15fe4838693db4a19a639a84001f6fa08f702b0d9f2691a8003307885f1e51f70337c23ee440c0d91f0f53e9e6046efe9cf610cea878e05a3ca828e3e17d4d59f7a07bf927f62c40b46cec9defe93c5360ea2e2273d0510d8b79d16a39c9d4c7867172cc3d24c0a2c1a76c3af9093f77dae2533b632d3afc1245044fb7ba6197fe7e205d098b68291f39da6410a7d45c4921d2346af9ed1ea57658f6a4283d245af6b056cd0a6bdc71ac3874d629177dc0e80b6f849dfbf3ce1aec3c798740fa1f6da3cab102aa7d1ab1eb539c2dc0d3691a255548c7ba4b103dd09c199485bfc25a45d903e9a81dee701d9eefb2a5b88a7473c5ae8b6fdd66678a45f42e86dc808ef5e7f300e3be5c0a3ad3e9b071490482481b6ee260da3c1eb0caec37f30a892e2fb95ee7b7c284d2244baa78d9dc1ca58932f416993a2c12a73ed89981754408b3edd21c5736682a45c874ba448334a0e97c0a55ee7bd890d595cae60a13cf36e78c0512598522175d6086d3c98119a19eb96046bebfecbf018fe9c488d90b13d72a8c0b9cef543462fd1f7c45d026174ecb58328d2895c14fa5ce7d3df845d30ae43f608313576857834bbd64a2dc63b6cd2566ff35af0853c50d4f8d9999d0d577b3e25461cf5854a053e6ea518b4ba1666847a649db99c0e277a6eaec35f4c9e0b165757bf487425c0de386987b8ec184adfc1936e561b425e951f30ba98d405cdf1f7a15931a0f483e6eef6739b154b6ff70f73567680c0ca52a5c3105bef34a26f2ea287649b6aaf8f789289344893a071eb1a95b9e2b446d647a9fddb6a948a1aea010aca943f381771f4132b75341426723265bd4c659e71af5f50e47004bbf6b1ac45c5069e75ba9e246d44e138615b33731cc26290bf66e760c8f81b714218b3e2a9bf38798fafe4f731329772b4c1c8d9e03d98968644304bc20ce66fbff20eaaeee63b87615cb0598e6474e3c40d5ebd84443d1f3111d390a1df953c8af788b6591590c908e70dd1df12855cf370b24cf9ff068a89688b0e811611fd5ed25c7eea59771412333368c0c54c31827c2098d71cd5d8ce8c1331fbd62f79ffe3091e8e71cec8f3c2755d093e3e3987b92a33196ad12f686d31ec9f1ccd91b19dfe84d18189171a4d2ce65134d86268f95b2c3f86b10ad9c33e7aebc544bdabd15c3fd8471fdd3a1d05b317c98286e25d5065634f690728b502d9fb460636f226847feba1d4de1b0c516ee0233722aef94332e4c707526e8d5e581b956d957877efccbcdfa90d79ae373ca481bacec873b70776cec22a0c78ab59b4c1b6a91a0a68d6d45d0c1a29d6b61be83cda63289ed933a1caec5fcca387c3167cf56de52375ba0f5686eb0f7a0531c1725b6b1b01d922a041b127a7a47e2e8f59b9751476fa3a2ad7083966dcc42c8e9c97d830b8b94492933519af3e0e24b75695e630f30750235179ecf5ecf215c7e8a9d037a2d03fa7543f556b4855c302e0e16b5c0b6c2f9f0d3d4c145a2e4a40c3454023e2eed7834ac55127d765073105518097e12ae00fba16ee71669c6f1b82b03ad6098be244e9280cf2c9d21eda4dec39bc279b764a07ec6c5f786dc6743feb1396c452f8cfb8aa7caa1630a0f980ac66dba1ced129f0291081e9213ce34c08b187505e85158a20259f38bb05241f9a15f612101fb729f499ea646211357b13d09f7206f8b8ac1bee12a76db95c12e4da6f1af1cc85f4689b93dacb23efbf1d79f9d3594120b5fc2c639706f7b951622d693110080ee39bfcaeeac8d9eedd059bbdc489d923a6b5bf65f5801e392e71ffa5838cf0a14d8b57e7a1a4939c9fdb8f89b9eb3f796eb8464055947162a9bae3ed48f58457b197439aff28523e2fc240a10fea6083da94bdbc7e86786d148763fcf4a84599a38adfc9c2a2dca1ca2304277aefc37baf6577b19f76cb87b2107aca6a947f6fc1b10e1ec02fa4bac77cbf9b83db74a47f7c367de1e6be77b41ce5c78d1ef599ad1119de2e13a1c7575792306aecc1ca7b4cb52eb44137ce1d20f371689aaa2b000687f0be373ebee6586515cd262d1507e7943d7ede3deed0c7c545083c8fbc9963ae07d85b2f40aae9c9e800faba05cb144bfd0209dd01f52f541132ca5e1b3b7d4ee4362c666bad2a0c8dc5a87c6a8b87c71930052ecb0d39dbf8c037211ee5bffd1a3d6d15b6015559b67a4acd1e9ce0fb2741cf0a4627838d752674470fdcf5ffb3e8e966782ebbd259b75df8ca5e46d157e5241a3944ca8d59623935884f445576dbd4f971b740647786727a3a504809b739186eea5ca0c12f6c7dd586f2ef70eda801cee5984bca8e4a399c772252dd9092f6618e8ebf44a132bb2e727e9c07fe56dfd093763d6a0c0218adc54e17795d95abdab986a2bca1d5158ae8ba2b04dabecab4fb68ef017ff321315ec635ab145cd0cd71e5706d78a555c8758c401d6affd30de2ac3b2fd70fdc97f06e83cb4ea7d5e547a0bead0e7f83eebe9620895792c6970fd47d8dc3a4141bebdeefaa3c97c02a4f85a823bd6cb183ba1b9b871cd96681a545c23f44733efd38ab8aacee93e7fcfbf2a5042434134d625caea1a87966937424ffbe3a5fbd25f933c293b5d20d3c0833f737577ac1327f0f776e379c19469c12e8d042e91faba6cf2d67ab89dccf1314706b87e1350d5ba344800b9f8480bbaa34567302a490bafe8cbb6d4855ef312c54ccb92b317a4de15a3c45c9dae8083de461643c8091c3bc9633043cf00bad89e76befaa63d217213b3ee8348dcdb9d16e4f9b953f06fe4f8db292cfd38bb08831194058995cb869a230178b364afcc12c88e0f8cd1be36332a7333ad98f12bbd1bf81a04ee63eadb78eb3707329982f9a4842e102bcfe0f394440487a82d4e57e805642c29ec283dcbe2e7ce7abcf7e44226b1e294af8a4281ec68a1d0608e09827449ccf84f5882a7a0711af2512064fefb5d96c09857cc01253b5eda9065de8afc5f4315d917d2ad0bd3af5d392b425dcf9bef2c7443ee3ded224d7b114634c302f2492fc606cecf97e098b651f7e089c12a487064f183d78f0846bf59f5072286a41b5342c46fff63189730e9a73ee43c282aadaf352563bb127e391b2ba311c836782108dcc3324df0bd60e2a69e0d5aa600bf1e8fefad47664e4bbeab7b955ac495d26653357d795747f9afb50a58850cf87ef7f17d39452a27dcd6fc4a94d497beb9b37d12d3895474400caf9bc66fd4cce470655c645e8bb9b84796ae1bae03e8bdc861dcf4d24ddb6838668f13b8ec3f29b56bb8cb337c6d9dc08dc7a37cd390e234e44ee03d9b31896bc13022b03f10ef0317e81d0dad119693aa16496eed55290b4e7228137389fce33c416aed94ab3cf95908f3a92ee2a07dd321d4a72beb7468ecaf738ea32ef6bf820025d5d79d67bd275d58988c0ccef5a409de74216e99786ff36853f3a4784c173bcf8637ad95720c69e54e7aa58180f88d00cb06dbbc66faf7ad915d22ac4b88347fcf487c7f7663dab296cb56e14bccba4921e32dcb69fc7caeba369bf20c5867389d344ee610176c916ddc865cfa332b28d2cfe911e8c1b16045c40ac2d6edb5d766f3a631cc34e23afe158ca0dadfc548c7bdbbbc224e3d101f29d7382a2a11b1076adfc1a1a6ef6164f5d6ec10068a1ef63c5050fe08f66de31a5d4d980379a7066d3832874de19babfb18b46b8f90d58786a58bdb5ab39a6fd9b82f228a36e7fadb696a4041e97a891a204c3e740f224df35796dc12a997ebe60a14f4017b13bf80f21e1b3b8cbfef513de9dfd18023e749dd9a6254a25516000d42b9634db7d12d37e6d47d89157359f4218431dc574147382401c1af2cd8e1445d65d33a1776e093b613a0c7a3c7249cba9405839e8d018b1ca50b720d13cc6a392865e31635b60de9f4f10ec40eea42a1a0dbcb2abdd70df909d2bfc88eb1c8683c78ee789fa33c74be264c1fc015b0da86122daf394162ed9e6e2e39539e4ba017a631d3709662d95b1a251cd2c333858e735db5158b7f4952ad06459712208c316b91a401637f68b88d1926fe1485588d71fea67bf78194c89e4c9c24a4b798015694fe84dccac33a73a6710cf42517b54d424c8a236f174f9dbec5c7ce9db1bd0166ecce8df03d116ccc6183a8935c646a67a704b98a2f98e67130343168c378c933efd6ee3e9a92ece5e6371ebf9ea5a16fb92e87e32541ae8b8ba31202cbeec7821be798d60f496a1d4307bb3a53c9e14006aff2117c498c341ab5466bfde49c46329089677e9d1b7e8e01da2c4439b66e44a119135d5edced3de7f2f4c231f334b04bc0cf6818683dde76ab6234a30bd20cec33f814ae38fab47a35fcecbf1d0d774497ac089dfdaaece168f2ef98ed4c664a2bd8e410724697a0122f38473b49ed66a6745a1ac654678951827d5203e862a10272188fc4e2308a326ce097c9e6c23db6f8f96bd55bda215f21c9c91472f887db5ec9e0471c60a7c4cf3e3775b760b3cb3a71101b180ea9ab5ce4387e5dff2bc14912fc6ac3b9914469efffd98f69cf1f5a9c4220805673dce33cfeb568ed443c92860e512c2f9ee11c189fb261ae09b07a0f742b571d08b6ede5d9f1b3c43f227df798561aa17db5b2dd0c5f4230e6fb6fb2e0c4015a59cba327dcd7f16523149f0cd6784eba4995ef0d42628d3a60a51a646c4741cae6f2bde451db8a33be0245c1a515eb1959de0d794651ee99580ccccc7fdad0b38de275c447ef509a11ec70b9fb09247b1a1e0f16ab605cfc30bdc95a69aeb0cf9f6c0c692ece0db1b66be74dfd99016b63b82c9d6a2a794a225a666275b0a21d07cd607a6d0c61f2901b83b0e8f74b815605db9b6a0d1b53866854ea78666a85f523bc2e8e061cd9fd632172a3e9524d47191c564ce264b9e1f589f58388430e5af8adcafbe2be09b49ca73275eb9d53ee8c5ea321dad47534f48e3f8279607007a679b9064b3dbeefa5da2fbc3ade63ede1d7c44ee414532a7983711aa43e57ffa855265f88793348ec8d2f515d83a16883695def7a05a2008c20a96028d4ec541b064e5ac430023c8bb49d764475058aaeed07da2f7b42be21b1b9fec700e5b2743caa6f75a45591dd92c858e7520b6d19fdbc09b00125e5715e3e96cf01912b786d0635745f28db22ab5f71bb1e20438497a91a92c158078658f09651e68fdd828be44e6157f579082535d64ba565d3b87514bf54ca10638bd0084b6e918df243ec0e86dcb8ed76894a94ea4edbca73ab8178355f7bec6ad86062a865c488b2d4e347a5665e6f25f1b5d8eb513d436d900a459adbc3fae92fb5aabdfff1f25ba50b0cfa24399a2b8708748428f69b4c02fd84131e7edd8c6f2428c0c1bfb79e9c32942d5a82b692d4928769ad34b802efc78463add301124cfdbb3125eec2c5191bfd8ca9e4f0c8cf2a3a7ed0ccb88b6339a25b48a8ba4b2e93464bcd915a8e1d1c5ced98312476c6d4d9d14f234c3144689b86310f2f52a91a9a180edb4f054f8996c6087eec83943d2991112945ecf31cdc41ada670b6e3a960b60b44105bcc57c11a769ba58515634557248faa9c0f2f91c214c0da67b2ed2ba9db0c9eecaccf145f291550d8fcedfd3b8ce8e5bc2820f913651aff08a243095c132933ec5f9d5cbd41f5141d9b85d8ec01c3899ea8c4b6789984bdbed8d11ed995bcac2cdc2e96278b5ea0bbad0a296a0c0adc84b0daea90e38d90c33d11597ed904e6bcaf35439f82247359d80b8c330a42996c726eaf76955d438f6cab109fab17c3d7b89d8398c174e52fa3f24ca1726778866f8d1ed996dc0654e755b3ff15eb12cb90a9ed26ff0f27fc92e22aef8c9756167c52415d23620d6a5e7da33241e81ce3a4bda7e31f33adb016d4cceee615ca0ffd300e5c82a982a01bb36e022fcba32345acf4eaa76c3168695bd3724a2e6d21fc4a6711a828cbbd9e0264092a64a78c85f8216857f53e8ff5c75c5a389334764627ae9e890793b1ea603c3382ab6e9fed04b5139d6f29285c7a5def72df4aed58591b7b8229b0b58780e5043465b59ef0caed0a814d129eabc66c515d227766ee28bec6dc4bf4be57f5b27021b556d48a5eb95cf29fdde9fdfa64363499908bb6ef07d5f0189a5f2d6bf66f3728a5d88d494fe7988532b82b7014819e2a18dff44d2c89b4d39c2042a8a94dc88ed6ef16737a814854225d216e7d720a211a3bc4cd9cc446b3d2d80a01e24b40e65ba9d31d8cdbd942b31de500b492a65f0856c8448805e47c3556509c3f35c1a8cea1d7afbfe1402ddfee41974b3d6e75a41adb360e67fba9d27bf93928ad88b1848a2b2ea136aace5460b8ea52e49c4acdf2c7591d328bb2a200d67b417114cf980b4453ea57380acfa45c72ea23e1443ee9bbdc418ef9524fa308f1f8222ee5efc0111ca92c8022218647c1505f7c3d6ac6f7dca6575ba498cc0849f59d0a7b5f80863c2ad78bf36d21207e8409f7fc13d06eb93052fc5c1973da5f18faeea53639f572bf2153aa19a49bd856446f6d1c7dbf38e4cb60e09711ab52b6aed8d7bef6764f72a6a7c0ba6437e76eff030d7cc0bc8f7c386d1cc191268527332f85adb36c4ece43183a40933e276ef87ec2e398f59ea3f75a57d1736050822df9e1d9186d4ebc7e9a28ceceb8e4f35c40875d12900e05fbbc10f0b2cc758240b4c160673e4567f04c02c603cce81bf8495b010d0efe11c6d36fda7759dfd981ea02225e96250321b6706d7084aa85e6306f398fa17513b72f48518ec4e1c0110c67040c8970c1974897f27ce53b884196eb79510a18210c29dba34befb05295cfd854a2cb131edf78959a05f25837278f92ee45c515828c3105bd1321a71de532051a42dea44c1f74e27e1753863f27122535947ffe5c99a3a10a2ad2e5b014adcdf768f9882c58de56d459445c27b6bcfaa997a77bae50b00c125ecc2055f38b715732b62ed3f7087f49e118224c676244ea600fda38ba018a1812b066ae40931bad1c2da21695a5b869aa7a3787fa4e6e432dc3b8b3ab04b1116fa7629375bfbfdf241fb087cbc3c8e31826ca3beab1070a8819b60efae6b41a28e6b21b05866664197d41a9c138572dea1ddfeb1932eb9a849511c5dccc2afbefa7b18b2912b50d420c219c91ee472830733ea1aeb6de150479b239f5514e15fc1597b6fdaed06dcf31260a7300bfe8b94e450e76ee7e1a596b7c42bc3919d341f33ddc53a8f6132b9b4369944ed19fb05391d62acdb66954671edc873a33b8aa93ebcc4318615c0659100a51703287fe3993420d8fb165e835898b203e215aa5cb1a0059bf95412c18820f13f33f34b8d443b5d307b0e27c6ac0182e55204021213ff0b3e586b227121ea8346ce3c222d7a4c206c90904d04401c9a7f0a39448209153c960d09f8ea8d5d97dfcc10b021c786faeef6b65f17dfc448de6c410f0fc7c68e1fc8e268e73bdc2456d868a31a91608188e8911e3ab8a1ae75cc2bb2e088259561cd4a35e55c28e40fc236fc44fe6da1da41629e6186ab8c89218f42f5a6d50e301c4349069c53ba9865a599ccf67756059350e759dc6b4b6d7546af168c0dd6f1d50d90bd5d0c81cbab9a065d6fb6443a215f59355a8dca27b65b869ce86bd408635287683d5ac8f83120cf5182a4b12d7c5e06676a19b401f953fda10d1d934985b286acb40dcf45f01cf3843669624e19458006ba54c38a9a7ba479e375c5d1a28f9d865c801203fe5fee8e0ea739e1cbf53bb48018d5fa38af8e04cbc909dcabedc796bc8362e645d7f551c46bbf94c571cd859e2b23d80da3aebc0b02bf5a6826a9d269145f142742e500b808ca8302c156d3324c52357ad4b64779983ec905dda34d8417880f1ce4cc4fd19200371bb856af42cc509df3311627ee9e9cf21a9d49f02c70f0b0b4b62073f4526cc14c33557b95485153d52c902607ec428be07ca7bc7123ecf6b684368c6dcaccb8c4f7e8f13aaf5b7025a73c1b9f7750f2013b61126a0f4d1cce1181c27354da901dbf83ffbaf27fe81d85ec93b97188ed8850a6c8303a14e1bbf1c0ee0d1cb4bf7b6b36bb28e0b5f9289c2c788e3a8bc50d50a6c03d0e4c3b75c8678342cf7b671a09dbf7165f8e1e7b063acbfc5bd35960e30221611d9f80bcf3038c0a787225fd3038f080f48031ce7039b86d31eb7aa4a9b701f9d44a3af9d1cf45c6d71b6d8e42b9633c8d1d546b5a486e7f9ae9e24d46f0ffbc6f6c7083889471c85ddf70a03283760eea35a0307f006720525967a16bd9967a1ef8a1fbcb4593b6c9030116fd583635b44ac308128c22ea6fe0f5acb1465124e001bba8191edd183194289f5c52c33ac4967f92b9967a2d202f76c1f2d5b9f978651b0d8dc755b5302d8670865cf3cb69c9e478b4d5bc670e551e0e4119a3781d5128be2546c9e018f0e6e40d8b7f734c2857d4d2190caabcf10df0164d08e3ec8625f73c69176fed57364bbd0d309251c9ccbe1e766cf30861b19829586ca16f36cdbd78f26aabb837607d1dc621140934713460a162eae3999113ed960096c050c9462bf68ee3da9beed52cabf72408eb85ff08b720281aafe234970a8b76cda24cead1605c8b8c8d3349cb41ec9562b6222d7976452995b9782865b86e96312bc8baf9998842a6d7ae2e6712cd9204e6a0eeed08995992c0f0487b648677e1d53ea3515a8fa90f7fb0216de20e8e6e9f57434bc0c818c92ccc2e13dcdafaf4052d66a5c6e48790e521ffa50b24be82d3685b00bd58231fa50a4984a577349d83ec93079bcc7d32c08bddf0e719fbc79895b22558de3a91a7c59bdfad8c4d24e4a5583d9464b30d388cfab0a3183bdf89985f916535cd151e9bcaac6cf31f27cd51b0132845a316845df20ec1b5df0ca2e1ba53f2c43ac40dd304a568f19953a0c1f867b1448f64838c3511820f5e710aa98a2f69afb504cab7fa786bf0bde2f1af52fcb7743632a23a5b66c4c0ce6f1f3c2ccbd6bf08b11cda48e69c154e9d47c15398d234dff854c87972dfbaf4a97e56a5e490020b81432add31d90e9fde15a359217d8745b133b3bf3e10d07697c4c915114e4709626722535fafd76e6081637cc17525681ef8fe6582d2bad4e2b8052c834c41f8e614219c95a33dd688d4b364aa43bb2a8a0623f777a200d4a98a18429a2a5a356cab4b7c3b2241d8058c830a118d0776d875332e855b8d845c9ca85307b4de1d9402411bf1a0e05aacd8fb9c4a8dead1f30e75d648617424e63c44599763aa7035174605344ef88fb06769f4f485fdf3b8d00e6aebae784d4ac8f72c24a036b3b7104cba00bcad7edfb1e4159cdd3d8b10e1efd23563ca6ef9461196a7d5649959fb545a59e297f60d75d00280364a2408229cf177f93f6b8fbab62a082a0c2cc269a1642f68bf11d02f0b264976bcd5528a1bfa4074265ab68b1c575e96cc3ace7a88797aeaf5261b0ba785f4faf9b2f327aa05afea5e7d576a64c9fabe20a3fce15d8ea80c5a4351d35bd2dd0e2a4a43567f1c097390e075c662d968b87a1c3e29aaa74eb9a6163ec92012d51a96bd008a3e16efeb29dcb11c93217305eb00f6ac59a91960535b822edde1e5e7b12ec164f1a65c6ee87a2593da49c6096ead7b50a4c866a9083904f4e94a0d6886b8a00df3466c7b64eb2902da456241c48a237ddeb9364f35201221ba86ca39c9fe4808f5508f1680040a261d128949eccd6a0380d559a7ae170bdd39025e36873ef5cc9a864aa8334bb50d10803fd7f5c63b3fc31d6317cd4681b61e45c2f89e499d37d424344017d77fd0bc1eac4d394f7ae76cb8be61f72c0c4aa2ddc9605910346c676a440d86b9083434c03768119d5a520b61f8081e5858a526ce37ab7f52c1c59aef26779b36416afb3ac36cd1e1478915a372e034cdba610a1c7610affaf3e300876ddb017c1ec01bb0c049bb0ed432b34f54a8fd523d1fea8848969d5b02e23c4b232a8268c74ebc591db4375f516337d8cba9e526a371f300386467d0a51854f997d66e824d5432263d1fdbd2108a1d6a5658229a86f30afca70d9631b56d5ca1a1b29df8b72601675bd659c07ea1312b6e904942a21d14c8abb96b41317702dbee9692143d762057fc888e9bdbc9cc4b5cb3e79c64ee8a0b810938fef5d0b011cdfbd5fbab1d76cfeae85e04f9b887f5ad46758da810a8c503423feefc651824a2bc1fe3060e8055a6192d1bfc74c6899a5daf93fef91d12f50c5420dfd0d10f568ba816532d33648d1476a6cd2dcfbff53b91e541e4f9bbbc0ef42bc0ae82cc9ebd7dea300ee6de1de7318f2b17fb6fed5055ffc430e4f88b50682080caf3c10007c3559e806bad12d0886b786018195166ce9846884600913b035019e3a29025d27f2f319deefcceac033b3431b8f49fa7ee29b6dfa2eced5100e944e9dd1a3060f2f924e73a6e6f23d4e2861a2955adc07bdd9d9f871502fd4435772f94a970b3066b626f5bda72902ad5f0cc6be7ae0b4b295706392109af0c1fe67fe52e2e053f93b6f53d5e8eeb25fc52e24ff97ba71b3c9fa6ae45baf77ea07acf182c6a46b80a4a0a3e1689773f9121c6f32110f8f1650d28a02860a3b066d5b021bddaedf8a524c7b1a116f7b58717ecd5afbd6eaf1ed960de901fe6bfe7b7802182b4b109e248bc80d09313fd3c43c6404f3cedef94fab99bdfe46ea098e4c4168d009cfb838215951f15c475f5d2e6478157bf4e1510e85c98832feac05a6725e8f7864eb2cdf30e00b318cf45668bee41dc7ab5e214294af11355e729e120de2b4b8ba01afbb2d0684d2b8bda823127c2742f51d3cc998ee55e45b60cebd45dff0e0871b5ad3d6f9f71040376143a35a043621cbedbbe92b04155f20c316f3a4846b069cb90c3a2559eded7dc5f6745a7bb467bcefe5b15dedc58eb7e51294995468babe80068aeca0ff922064dd4e95672afe5978d8c71df85742df558e888e2d744d2ffcd01fcc2a9889d91888e08bb0ded039170c3c3f719930578b4cb0a031e9ef0b5f7b594403467d3f0a8271934964c20f0de67be803c17ecd4ca8e846be89ffbd0481ca27d76b2a4ed1d7af79de0d6fc53ff2b9132e159cd0c8b9145d691ecd6f6c037ab49335260ac1f72b0dc49e543c8baaa4805d7061a3398374e8c7b9a00e191e7b7d2d9d97d6021251f193e2f841b03d5cb8385d06afcd76a8d0df43384c5651c59e640296ddb8ac7bc2a57fbfa028aa0739c13fdae4e07689c35582faab9e3935596f37975ca3febb31e92e14700718c3990c225c4f598e72449c2c37ad5f4116a35f0330960f374b2d85fd6ad045af70bdebed2612f139923bb074aaedeac0f6f95b0416dfb34ecfad729fa15bab08248b030a841a7e59409cd1360791e7a8662800b870566342397e40615c999f390da6b31194a703ec42183a8e4f3717c77de90ebfe85a31bef7bea5ed2fb0ef8019e4b3cc50ae006a9be7d2d95d74e500bfa71ab073aae3e56d77f7cade32c99464b707dc07d107afd2a4d9851010e48a8532225cd36b87fef9c87fb8c85724336797992f717e28af1a0911121f096e306005f2a79d7ca1052b5d80105ecf43d20508a3fb6150bb8c46be43769d9d20f6e7952e3eb0dce9211f78dcd979885dace721eba1d1431eb2b534e79c52ded01fec3fda46d2e0976f80dbf7f4827a674781b8d82e5a318586d111b4421baa718fbd0deeb1e7c7b0d7ba1b3c68bf3d96f91b3cf8e001fbec39ee7380e6ecf4b4566a58a008459ef4f61ab6bd564306bf0d4d06771fc03efb106021d07eeb2848c3f991c1bf7d0e503f25cd8f0cee647c80e4b3b7419275377c706723fbadbbc143e6b9cfecdfe0c1070fdb674f42f239401bbb21d9945c619f5596071f36b8cf3c0fd96fcf03f799eff936b6cfde4646c6ec3eb07df621d8ba10643a393b5c47bf0d8a9668090ad6a3e027d21105e747fb06d14f4a10b6a1a2f9d9be33191eb8e1c306f6dadfd83a393bd786d6ddc83aac939e0516570be9f12da4c8349c08e3d005154e66e86bbd7671b4f6cc589925581437350708385a39b13891216eff8f540baa0827c260cd717549b8f2d17da421fd414797df63688882b4857e74c7e5f79652d66aad46c33d457e14140ee75fa3f191384753bcc13f9c010c2a900f14141f89a34fc8651a0a729bc78dc73c613d4fb9fbc8437e0b05db93039b09d31d9ea2f5d4fcccc9856a8a291dab298ee338562d8acccab5cf5dfbb4921644dba1a289b45003a2811acbe5f7eeeeeebf4a7206b326ced7a1a7383ff3f903196876576976f82b12aca77d97b52f43632ac94fa791a6f80bbf0b7194189322d252ca4986cb9fd937bbd3dd457eacf2244376bbf393c87a1ef2d0fcf8113eaa4c849eb83e0a623d3f8dfcd422498a6d759bd212a5b444456a8406690aa4a9e9364ddda630b7e9e9367db9fd945b32fda6d682427d28bf9ea35a98d947281d1c2567b814e4873e812a394acee8928ba4a5f670b7a915540ab7dfa353dca6abdb74e4c2cad9a94eb0b4761b9220ac474b4fbfda69614b127602b4249920126f8f4af3436bb5d60ac17a34bc7d67474b46686907b73dac47bfdb4f6d40697081909e1c482a84fc98064d611cfa5b0cb7db57455c4749e799e1af26ebd1d295265af2509e38c9c51f34c57bdcfe76213414e4760359dd76256ed3944b4bb4c4366c2b6f6e0bb25b4a29533d7be35daa943ce166feae82f5ae544acef0cb57bafc400852ca6eac2fcf6b8b39e75cf9c85b66cc34324717398b875ce5f24f664e7e76b5ed3dfdec2129ced55c59447023a7a23b152d90c5085b22bab23e6b858e56cae5f7165bba5d9c1f17893b64d745cfef41c80f950245a1449e593ea45584cbd6112e5b515c7eeb06f2e3a72fc80f15511839a33541b03eb07670d99ac1657a864bc570f9bba3a88c184ea8cb6fb5582afda12498feb8383b627b482c96cb6fad583bac141a43c58cc95292383f54a4d1745ea5a4cb1a6b5d2211cca76237edb67e6e58d0ef32fae59d0ed31c8691d11d154ba2607dd5b9d89ccc683d2ad20113ae10d2d303e929427e3c9c1d11d3f0208c8317818a42242e4f39a3af48cee0cb926711d9e1e7a21ea13a2e8bf22413c47ad4452aba4a7336a1911b6416b9fc9e6267cce59f5a5cf620978a547411372ae101774d691fb5b7dc6e96522b912d9737d9b57eb02d35b7ab3c6939c5f7c25c8dcc12ac37479e23fb117e6dca98f33a5d637b52fa53552f2f282686f05f42da23a56062c8e54b5c0d41c7f5ae181291299b378d6577e6a539f216b1fd5a8b56113b45d9dd39a6aa8865c934b096e6c89b415da7f65cdcbd5e2e0b097239c875ba5046b84e9925d8d314278c569281ef3ab5c76346c3ed2e461516c695529088dc0190c15a55982f89740f2f1c0ed8870be3f2a614ae24d1b21b38dc4495d8f72cf800035cf9d26bc0952fbdcd95af611a4cc3eababe19ac4a898387c476927b1dda96bce4d8921e8c2b5f566b3d3024a7dff313393b3136afe47a1a18d22300c9e937919c7e18d7d3f4f5b6929737d3c819f2b634e9d01e9212ee68c8eb15200024575e9e172fdfa33fcc9f2afe29680ff7fd27a0df3f02ebfb3320694889c3f5fd25d8800e72867d4f6a21afb84eb8fd62dbbea493b3c3249bcc4600bd006dc38f558e8779269dcbefcd292ebf8b70f0a56da1eaa83aaa0eeb16b1365cb25e56edd86abce36e8af2a4a76a7642791206cb8f79d5ab252e96057cdf446333fc91a07e0410e0f64ba6313db4bb4180911c79677783b09238c8eb790db6eeec480c067ad1ebadee869d9d860189c716d6e3dcbf3616886e2488bd43c1ec88dc8d009ad3cf59c077fb456082fe3809023f08f50f84b89e14adb45c4f0eb9ddefec40d0a80f1bfed4676732c839084ddee0d90ba469922301f6b5bb913df60c03928dfa5977a33930d8fe666e5992f1647025b6a90fba3612c49be638e06f7528a01d73f1da5535adf655350290f2c4fb8b811b9ea383076c9460012875c69875629d1580bde1dffbd5184c2a2ad0c81c452396961913124b2a2230aab95acd18d36b5e525f867679735535adbe87295f7b6ab8fd3e9a9ffee140fa23bb709597dbefa2a96d326003d188c5e3f9e9f6730f6ebb1431bada57eeca4ae6678f82fada7bb576727ac9fc7e1959f5d02646736464dd0e7db394561541a4082235a040a03f299b0b11a58fe4c26585e56675863ca53dcc83dbef9a6f9313803ce1a79fbdd6f1c0bed69e13eb3ce42157c9defa8d07f65a7d0d6458e7dde9a741388ebaba90018d9910b945ac67229aa49ad32f482f46d6aba16b60afb7deab41a4894e2f7e90b2eb3ab5975159dd0bd215ac679232496554262f48a28caa065146558328a33a852c76bd8cbf97d13180913c7941b2c260bd397e477a417225ac67927a4132314999a436224a72054a6c16666ee76ed9c6f9a9d55acd481a4923c9034eb282ad55249550a3b812c5c6c6e0eece52cad56ad5b29a1f0741bb04286a2a2867b40f213fb487ecf46319154ca5c0a82c18b50546512b4cb1a22e4fd090867609d05732fcd0151ace0f5330a4a53074410633f8ca8725ec753d0741db623d47adc295cf1d1a12494818d64c1236150d290d698a12f9d1b4a587dce67e81f1a2c46a188c17d696683456e3703014e69e355c8f8638343f315e6ab6e4058c189dc3404179c1e194fcdb2eece4eca830d5b5a243bbcac5fec10d5442a01b38e4aa085308817c587f03c746c50e4220ed716c50180204f9a8efd9316cfae3b6a540443960120d7b60a58b1138b81e0d2bbf8339c893dee866d62758cdec70ecec88acc6f477e0e7deb91a4c3f733d6fb227a1dc06c33eeb64f0f365eaa1b7505247c3e6d48e8e3a0a5a1b796d12d6a394d3c06ca9c15940c809c116faf4d20e0228145ca121257561fb7a34d480f461275783051ee610de5173421aae7250390ebeac92268c4a42c21f234b29254b9652327b3747231e0a79881261ad6f1087628c34671c6ba86a21f291fb0835a4e5c4129a5e48406ebf8f46da388ea37134ba8b9aea2fafd1383fb5cba4c18edae3612ab75fce089986bf300e51dc4aa1b8fdd2a3449874892a5c4ca53de3fc788f3d4acd8f1f919dfe5410e368dc01ca93d24ba9f472e9888e2a26d2be0cca7a73d421e7e841ccf1ada9a9cccd19bcdc39ceb9aa9a355a96252d29a5e56f6dacafcdb12c4d0aa98e75c442ec0796828db01006622dd887ed60296518862f1d4e51280a45f47a2ea2948e1c8d8bea913a8a44d8113024dc7ecc0767909f6a9a9d4dcee022f8180541b3037b03133603509e68158673b17555c5e6c460dffc741d41d71184d86204f2ea28dc04e0cfeff25347f3f24d0577708d612c54c7e654538d698f57eb8885da93827d2a4c8385587b651460c0c2f5eaad638f8c4315cd4f75919dfe2942295851aa2679d25fc76aaae36d4dada3c692323d489672cac9cc73f2026ef09fd77aba8279e76f97c3c9dddd30ddcdcda0041dd468acd556dc2b07e747823428281c8e051dd5dde027aa40831408471686201f3c3b2ee4877efe83a5a3e434a2a7d9b1f8a9c73cb81206eb51d1faee4a7ba6383ff5fbe96a7ee87747c5f9a9b493c1dd155d832ddc470e360dac47433983f6d31ef243359a92925082c4011cb9ba1df8ad7701bd9d83205f9982f50ec8d0d08006d73b8f8e2cbf3d1e9591017af9e9e58e43397708d9e93fe2f63be88d726114c14519ae23d68b718d56918b0c171926382778f21716d3caa82424c452580a4b6129cd2e614bae87a5ac9b92339af9454dbd80b05e0d61291bbc0aeb3908824bd817d7c35256c68b410d35c7c3520e56f136966a4e6741acb0d929c352b73f1363bdcc74fb335467a86b79d85a4476fab9b8fd476ebf8e2a56f1f6830e3a98adb01e6a18cdcdca42ca6eae9a236a2acfcec839ce51c60ed79d8f5dee7a73cc6cb8b3d348d407b655a3469a59d8694356bbde1c4180814848be172992ef45aa86118c9c915d5a9f609be004190579f229c88f87ae0afd8a392747e37c7d66a89f586818a42f2be4c0a57b73c8de216ef1864272d8447a1c0a1f72797e5c09b2e356480e09892be172d536377078172513487b1c578a04f2d1afd56ad9553464f5b0977f76036da3db867503484178d9307a3dbf8fda43bf0357c743ebae972067e90ecbb89eefd5f90815a2a16e1a6a0f0f2101e90f8a48a53dd28525c8651fad5ca61f1d4d11cb161c4262c41eafc25c2ef13b4b85694f3f7f370db1eac8e5e71f441aa2a1519d56474644ad14a556eafaae1d16910e592a6bbc542cd13272fb294b2965ec905dbaaa2ba65058b75058a629cde168e84ace68cb922b2b75f9405a67901f2f5957901f4dce983508d687bc8aa0d981bdc135038d182e687dc1ea42b582b5de9960adf7bc246787350b85add7a32bba32b2aa2b0b85a5efd115e831b79fc248f1da60a5accf09eb5925ab346bb5d66282f5ac9497da235da0a0c5edb786584498865396e634a54356a9f9b1a0b56a2323d781f9cd3838a54c3c31b252d44add1da2e6a43427d41c95dbcf56ca4a854499294418cadd9da594222a7a612a9a1f2f79898abc242a75f6d87bd8080bd29ca64032f6eb1b79315af20e3b61be327968e468bc2484b52eaf3c6c74a5c93486db4f4dede13f512194312080e122213d3cb011d370184c09f971945f011ba58830bd546a5fcd0f0d820eb13a62d56345451a96b0392d2179f2390a6665870f3ec250dbcae9d49e4e7911d29d22723ab16c8d3ce9fa045b4373633d6f5cc8c9eafc5412054b3b0f7dd49cccd8df83091bf2d1a97be37eb2629c080d0d518d5445746626919cf432c771b43d52cab9cf51cef8b815768eae43ced082fcb8687652ede1c2234528893b3f623d1791f8c0e72673ab102b418d444a174d30854017f01ed673d165ce7f6eb2d4903f62ff75983a346feac77f74a7bf532ab6a175d1fc3813b2d3ff447599e23a29487fca539eb24dc04220787a6131ad8c4a42c21f20283bbe9a9fab7390e47abe3232e7ca411ae2717b76be92c2f24511e15028c2082424d370218cc31140aa843b95b46706353fce457fff0fb71f058277c75cf53ba9b9b81df435feebba2ecbb2b04ccbacccb2fa7a6cd68d9702b99a62c7cccc3ce7b451d89ed7368560fb22d21effc93f55dc0ab84b8a58ab9ba306e678e97cdecc3979724b645d8821b32887012ddbec12566b294f5809fb62a294d2d108ec1df2e4c5a218a6041636e73125dc0a12d3654913568ac2ed77eeb070f45120787848cff571151d310d8f71151dd151bdace78bd900881c08213f34343b4c83ae70d7a3a14f86ae877d5d528524ef418c4f1aa22b211aa22b25ccc41b164a8c1c70a54b12307703bd7a931812812b5d92601925b1a3bbd2a5c7ea6ee37644ceb0be3f0669e3388edb388ee3389fdbc693b36f767a2b42725af256044cf6cd8f53213bfd5e645281917edcc83cc967a50c48b5fedaf870bd75bf5edacd8d1ca0ebad8d97e35a7f5d9d0fd7f3c63baff210baf37598d75fb5762dd98fdb9f85cd8159a934221bce0a8b01690e368e77a3a9b894c5c4395dcef95c12c02f0910d4aaa5d29cee3c4da8393d95b07fbd2d55c3952e3ee0e07af6a6e6e7fa0d7c0e4a0e5e8ceb69a91e7603b5d4ecf4bf771ecaecbc1c4abaf8a2b875a5b7517366a8607b3c8c745358e7d5d47b1aeebc67e1b4dcfe4d4b5deec7edd7b42758d2fc6c5c4af5b65123619dc7edb8cdad6850b0b40c7605bcad34a72f202567c372a1cbccdd16b3c1c8c26e23006861b5980d1c723770035d422157bab4946e01ae74095b6ef6cdcf16c3a5886e3f0e4e5218f149f183172988285176154ec4d285d772cbc2c02a6c4dd521477c1ce8991fe2543851103f951c88f3e46a493bbd34a7c7f450f548b1c7a5dc7e1edf83aee7a75746a1052cae766db695ee30771bd89ce62e83b27cb9100d9eb81ef7dd760957ee36863b6eff16c37d9c4a3777db116e831105eb655f78c78bdb6008b1de067e2f896ce34a7f248804c6cea7fd95ab31b36f7eb020dde917525fec90b6b2eff6675f7bf8ad0d068403d69708b12657bafc0085cb1890e6f4db5081580f9ba20629171be70763e916717e301153690eb60323cd4f5555d1ae34a4fba9b6f1a6b85ceeb6cdc57adb665a6d1bbbc9c698d41360064fa5be1d4ec4873033b36ce6176666beb82d6b9c9f3aa43b0c43e48652f2c48a94944e92cd043393524e620c89d0e8323733333333f36c905b48325cb59ae77cf3f3a22ba9d55abb6934da7ff699fc335dc182982874f9e90f2129286770c54a2e269a1fbe44971f0b61298d7dbdf18fa4fb329dfb0ff273f66f84f1959b4efcd910736de66889bce21e5dbe350182a71716d3caa82424fc0182231ee09c9a4aa2c37a58c8fa15b80229490889240404455812b61f4896924acacca552a9343f3e1a9546a512e9d61f13b0328a5074e95b234ae9eaed74facccccc17bd38775e9b15b05dc2c2b89e8f463ae4a79e2416fe119a216c10f5f443146aada26641562fdceeb6b8fd3466fec7bf39d76b418ecbc13697d501fa562704cb9e97847432eaa9395dc285c6be3a8ea252ad6cb72634510459a61198b9fa56e6386573775b16a7d828ba042330d26da6ddf2a2c4f20b0062c020c97000e862d40ac35a128d0675053b42f5c85e5e0f46b1d1ecfa226c0706b6673ee360917cbfe84a3adb791a922e7344e5baad7367f60bd436be63e3a2946984b20823798ecc37115b8d63f82325a6bbbb9f626188bd60e1fcf86824676428d4fcd45a2b8642b5f4070b61426e63416e63406e877eec90b2b91d321e5d8f85349ec542b71d0b2f4b7b8c1761adaaaa5be082f442d5a2aa54b58b4bdf473e923398623d3026b0275c382c94275868d171e415a7450deaaa050585c3f9d768acadb5566b359a7f0e0705c54925ba23055e4a612e20ec849140587fcd512f97554cda46868dfada6bdd8df0c667418408ba81830405921d011cb3082650fd1c20fa4d61f29110162ad00d1c191a46201ffd377054c004f2613d8e468338ce18af8295cdf932d0b747b74560d667595f2908dd4155a82804424196cb6fc9a65ff70ba97442c9eee6a4c456b01d2addb14cb07c3d47592d28281c0e4943ca24cb2a20a1851308875b710255fe419e30f65961a53ca1ff5d7efacd5a5dec8df7fd19f63a4c19d6f3b51eab9dd5cd113463baf37df388ece858d110fd60e847bf119d991e76748729223f5ababbfb3d0cfda3d49d524aa97f9e12f2904824121961e75b545409f9d79c6efe986229974a324b29f92b4b13b248817064529c403e98375ec5385aa0260adb89f80f47b5b0b7733b9d9d8b98f6901d7e264a46ec90c913feed0aebcd718ea1aec07c0fc3b0c77ed946966859d9bb08b2b81198eeee7e2b6366abb5382872d75d1c633a14a25996dd9075679c6d366b73939f86901feefbb5f723ee679dd6895ce72192acf348e618ace7a653738a7031e66007d188f59c546a4eb684cdb2ec2dcdb2322d47965d9b5dc2721a6f5e09aea5bd6b9de7a6e6f8497bcf4d41b4ce4fdb660064b0d96bbfbd767135b62d7be634c069b859a93d1a4d6a4eca365eca3eebbce4225fc6ac1216dba4e086eb0e22955ca4a2b88db48e81056e9eec4edcf6509bdf4cd184a1c8091aaa717d7d154d020b5709e9f125a46708e34004f984d054a3b0529e58ef39d5f1832a08d510aa504893a23264644193d76048188a3418151758a448912cb2b87a90c54664923249d9f0d9b0c384880da1db6f32c4446532daa062229a18a119554695516554afd18df5d8c686acd6524ad94d231768af1e58e76a4c3ae96b4cb58c4ace689a510dc074fb5126abdb6f926acfc52629132226a209cced3751ddc6b0f6c1d2d76162d8d38dc990e6042b27b455c4ce5516aca769e135ce0ebf268ea22692a85823e205eab66ba076d25e34965ed1465a4913a285da8fdbef607b1c740dbc50de7956fb1312ac066a20bf40f5e50487ba8c89738a1998b16046388361cebecbd9ca656cbc9ca55c6eee97e983e470888afc6b0ee683f43810241d10b6af958f2e206a91aa05c9e1e7310d974f15c882184610fd1c208d6e648480a66a6976b8a2668759e462fbe79c734e0e73d10585f5b0101602356eadfa5409d6c3444c6c8f740143eaf2672a4c03a63fd9b38719b98cc55c7e2f4b611ce65fe3fc641da64376f86be7613f5cbeb0202c36c4e5c742f2845fbc4cd67311263663224f8bdb820c80ca8636b42922f647db164bb2273bc4966c905aadd568fe399c17bf359c9f3986ff359c63a83ef6589d366c8f75d910b361c52cc986cdb16125b11502d6900856ceceace168c316da30dcb6603d3bbafdf57a5b78fbed88a574db86b6a539f687250db19554c3e690d8c0cad9e11028b2a10d6d68435e0540c59db6d9c4756713d543af5830b6855f54898ab93401735dd0596bf21d01f70006b8ddf58dc75c675e4cbb91cc18579670b409cb3f6b48f6e7af55d46de3a6e0992d2c07e14cd647adcf2a5941ac1d4c62d165067219bc4c65778f66e7a5d60b08abf1a4a3f99955f3cfe1cc150feba29d0c1bd70d186313a38f7e1cad43045d9f03a459dddddda26f234193e3917d06653deb63427ee8c8325d7ec2fa2c1539835eb64874343fd657e9e8a33f803db86c89b2979c075cccf8e926bb17107b45613d2fc2e154690e8bbee65c461059dffc30a83bebb3bef648fad8d7d761caa07f599d0cdad11165b1accf4447d6677dd7b2be5e7126f7121f68f2068f8ec01bec0035841316d4ea392fd29c200f86e841b5d51be60266762d5189b0b9b4d260fdd49ee9298ddbb81958e6ae093b6dd57055689e425206da83c5aec88eb09ee790148bf919e9b11282b8871b984ab2a9d0a3082a50db60940610e481020b14e8c60c296248201c5c0e8e08635c7e49335e8eebf971041148561f16e041c408925f9946bb3471bafc020f06973b17ccebf284df7be8e1921cb1389a67125a3599ae7741bdd87b7d2d4d4ac97540fb6debb4b999779a6a0abb70f0e800ba20af8ead0bc88b95ae37b3b719b67941bdd74fd3fccc54ca3453a62b65df6a52f2e422d569f5c856b3344b72069940a669a626cc3ccd97db2f2f66d6a0501a45524754844038780c4288201ff37380bc56310a4aa7ec73967575da079490f9ee6e142a8fe06accc6b81afeb3fed5611b191a0adf0cca9a7adb1a35274fde6c604fd2dd2079ec35924d875d7fb3d33dba8080a32cf3bcb9196f025cb6b92e6a836b930229de4b0552bc2cdef9940a49dc79758d9a256bbd374bb3344b93fa0b1710ac3b64a4b09e8320088a191486612d6eca90b0af39a4f9e1c00c89cb90b80ce9f667bef9e14ab3d35f355e9252343f6e32611ff635478421224ffa839c6a9b325f0fd6c344d7e3655256dae371a5517bbc6dcca4b42763b2fd1b1aac877d5c89992bddff76930913b1c0af878930956de4400e09d9058e082f704548ce08e9e13f03078e1c388954b19ff341c8585d6e19ea126e9b41a6417a58235fb89ae4490d524f990ffb2a262aa59a3328d728a594d2d7e866aa8a88aca504eb49f17635642d89419f7653d59c6601cb1379d28f0202c954b5e9d6f6b047bafc60fe4d8ee626826be101d60907380f05542f743030705ef4b049a2005010a0d68ddb410d0e04003387c89f3a215757c6d86a15b24d76e5a8e0cc96599164365116b240f0f462b198ac9155b28458a1f58344a2244aa22f94dd8a91a16fe42c6125cd8fd76aad46f3cfe14c14140f641f9a1f064921493dee8fdbbe91973a213fd6c80a9370db22494145f2a49f44a5b0403aa261e8ebba916103fb8a7537b2901024108e4b04f9f0cf3a1f6707740119fd88fc786a764639833541d81f525407d89c5eb146cdf12cd002ad517b249802575898065bf447739a020149e0fc78c9024b6029864a22d7297599a24402491678639a63c4022d90c7d09506a013461328a5b4994eabad49329b7a6885ed4ddf306c161d31e59c3d5b4af98282c2e13cc949a5d2a925c8ba28a575353f56f79fd58a595b351aab7a807eb353e95b4fa728766f5a68a29aaaa96f472512aaaa3a622a55ac46b4203f354c7d8fe9b86daa47c2ca4558e4f612f2533f27444900a588c2ed2f59d94f19725353bc2151534537555315aca99ae22aba8ed8405b79c94ba2110fe240dc9482f1d34bc9457e34cc6cc56593924b3d88212e77a292c84b5eead56505e6ee9e1ba719f8589a23b9ab2a2b8acd74dbd9e90eaad2ddddef52a552a924ea2508f9f123dc35b5dc90c6482d06196c7fcae7b9e9b6a7a58b114126a8dfa33bc0ebc5b81efda653e1a9e670483e8545794427d21c517bb87355f3b0aada55842293f659f3b01ff6243cb0cdc37a3eaa7f49fe022c55df867ed7cadef2b07715b7a9f55d40ddd49eec5bcb324bc3dee34f330ba3f5db6db89eab4435341923a5946f55312cae3677c1865687fee6d876335925845cba7357554b29a564d933f8e589ddeaea4f409e504076fa8544f1f32301d9e977f170b8fd33872b6cf3cc81abc2cecf21075a639abbbbbbbbbb9bbbb9bbbbfba59bfdbf49d2a2408a09647d0ed0ec48dc61b779f6f4d5ec5827d8f6808bb3d35fc204ebef62735630cde99829ac874880b072763a1386d54684266fb0645856cf39e79c73ce39dfea3979cee91da248a8248e5407450bd58800004000002315000028100a874402a168442c4b8afb14800c7788448250a10a644990c2300c52ca10631c3100040060448066340a0280c7932054502e9c53bf2005f3f61a83cf1d9a062621cbc7dbb7ef09e3ec809cc1dec87e692b5094c0481f981b0f1c452ef0380461b1dd1ee04993023067948ee0663181101e7b5d9b09e33b55f7e15be30ddaa81759d2713b1dfdbc0f50dc30932582f06cac59ed6205eafdeb8b31ecb2800a526f42d309cb80d0c90fb3db22242d2df4dba7977c9ffdb1a427554cc580b4ce99f244be8fa45e8ac58e5a91d5a6c0cb5b43d9a4042e9749c8d7bef6a2ba5398044c0a28ea75b154eabb8e528487c3c24491a9d9b754aa1b279125286cbdae3e5ed85fa45ec48d630881d3f9afab62744ea6b7b330557dc53a2a5a520d995a812de4b8ec71f1098b80b110435c9e0e6f64832f0ce81e39b4545dfa2a0f3137e6219741c24933fd8a2e4c997186ca730f9bb5003af5bff8ed23746488156ef214a25c74791750ac3459b5d25a247f412ba46ea244305447ec6ec1fa75ee58915a50bc0208ee884dd709a9db262792cc455aa38e1c382a2bdc4ffbd74667bd07573bb928e2e459bf30d49e0e10464ebc074b1e1aa4bb01fef825884c5a8f171fae7ea9bbf88c26426a0bfaeb832166e18babb2bde5013b0a2782e986b98ce37523e8585f362841dff01085944994b14af8e62a4c5ac13945b63076e32b9f84e43a6a1b5be880c63d889f7f1f2022646a7598ebf08361d1381143a3c5e2319a11335c052798c67fd7e5856e62c9e666ff8714900909df056aa33cabc84a1cd53900eeb50f70e8c93fd0f692acdc7f1d2f4735934e8b027defa87aa68abe9bf59c0e886cdf0fa1552527301ef5102a1ad32813c8d6c3969568a91fb1d5db71d4ce6d6607c86771b13f6bf37f79306013a280dc701d7663971ac81e7306247e3a70a833edae80d5f78e9aefbe29d10b7e982e62b1b4761fe1a7f8e04b897e23e59c1c0ceba41b79d65da923eda41a2ecfb69badbcb5844a88e2b1fac6e372a866b4ba848b59b7bc8f9be1a48608a48c860b75a957a1cb5ec8681742b8d4597a50f869d0d3a3e0465b69689a4086d472b283dad138a63ef7dea04204ddfa1bcc87fc8b3076680a93cc31d10f0410643de8d820d15a2c5a70f9044353d9f9a00583003da8d034e81298922bb267f589279aa3b0d2333cb532ce42710035df28370adeb68e0e04303eaea1951e4825be4fdb3440ca47054dbb578ddfb186c31719459dfc9fda806b0e0e55b5a5774411463c4243f2f1eed73c8a77a9451ed794bdede391ca92552c877994eae22a39c7e36a9923711a259ef7b589f80b77128f6576938bb5897bbe68b62f4c54e3381b6b67ea850a94fdb8396c0473df04d66de2e93a8a4ad9e39202daf69a9afc72f974c484c2c09fc8662888006fe37286c2f541cdf436149b62a0756040db5a3e29c8c67603426c8f19a332b971811102d2bef48575959c3d73613d17535fc79b28f6695a3e31162a9dfc1a98f785c7b8d38edd3ad6b5be44c4184c01e174a183f269872d8d25bb8da0d54cd684668c5e34fcb8ed6226c66d4370e7e7f4da31a996d868470c7b26130b62a2183af2b678b719e9c697f6c8a3526060b52dd59108e976e24a9bd128a0dfd4ca3d7819dffe740abd0533102cc988f139261ad049d790d67f28a34c9cc655bc69bb793ce750c87cbe1685bc3085b0a0f71dbf3aed5e4a333c2c74d8fcb969cb10fe84c2ec3452119c5aa6281443268bb3172086b9b4e4e904985572c7b9bf72fadcedb01982fd682c3c531e97f4e848f8c14c8c7a8341a2b050b895d4ede4ea9d2c0f49a36f4d8c5714b1b08ea6d254ee3fa1630a2464c6ff817c3a2b13aa3615d6055a4633502f2789b063e32d3edb21f1cecee3f9c252873d81c3a44ff606d6c6d405df2ef5a277da2d37ee7f044c6ed967dc58663f64d974aa40d47bfea7cc0d1e6f4d79379a362ec9e868b5bfcb9c02a7ab74256a94ec8548f5a4baea3785f0996ff65b9f99c55077b7d11b7f921a1368cd9d3cc82321f9c2ab721f270d93ef0ca8082f859d9748894f040896295cbc148fade996cb808954eeeaead31677f5d78286bb60d152b1ed6412a0888c7011eceffe55363df5084a5a850126439bda71206ea3a96a355200f9dac53650d1f9a5e3e12e238f3f5470b41d6fa2867b46c9f1b2e362a7b0e0a2ff445e7019dd4a9f9e5d1b18aa33487e987be0302148817c29ac65c47da17d0786dafafff0d0eacbc503880f0d432d02b682c5cdfb1dd5118714108ac92ed49762c3670ae95ea8ae9f3050e28369b97daa2832be28a815a165c36427d3a262167fc7069d3a9189bf5696a64d1f21332f0d9dc8b473ff9a83072937645f47291f8169f23ddf142e73a86982213caca7cfef6ab801f91d90b7515603e691c7a086e805fc0bf4e1eb3b162b7e5bc65a95121ded129a941cced0757611b6058282105a682b11116da504a61fd9fe3394eec22df8172091ff40060c162942fc41790d9bbd8f47879b4e0588e6415ecb02beb0f43f22d449791eb8b1e657cf3573d6566ef50b1a43863b95e3ae2e2dcfc1b278c8f56d29c5764c9d5b9b9f0e0944c990842986259e6b876a9752b60de1c4d13316afeb897c0b74ea048eb942356e0d46ea50f53d8b6d46e2021c122648fa365c50e628f82a2d880a565f4cc63317bc49581a156d250c7a65473aa1c05c433df64be1a604fdb772bccf6d85b477666620c998ace9da13e24aa12aacae234e10d2622573dedff0fd600525c6b295137c52450f6dac5670051bece81dfe0f989240481d86d8bf916ef17b4b23ea2b52401cfc2c78fca489d717d24a1e6c3ea20b16216795c16dddd471dba6f2c1c90503f68fe7deb8ba973ff439f138cb92ad68ce1299a5182b577c57499934de90080a623819861d5c140f6148a5f2e13f546e60f6154cf837bb8aa02616f66f5ce6064f4d4a35a9e854eeadba012405cba2bcca72348e2b8e599a691fc73641f8df29d3f8d3f94de6d213773e335ce46efd1781fc061064bcecf4a435d6045a383ce8b0a01e784c258f483bfbaf506f42906c8630e27ba41c229958b483d50cc531ef0237c87a55a9d769a597418e400fe7c81dfe96748cf90d5cdfefc591b5bed321c82dd8f6c94869442e7260849941b52af5e5ac4666625cc8343c87daa2a732c1b50852b48992bd7283254ef9f7dd5a4f0a18a053cb29b08db9d02e584c2c33b99961a400c65060770c2dfc7bc29c382e0ac90be7239c37c83d8fd1e5daae09b77ac622939c57cadf356a4f45153199415326eb9ee26c6e6f51cdb7c701fc5018c7c45b12e12b6ea5ef5741e2fd10c82e1f2774e5fbfa303db9228fc1d928cea3c8c77801ff24c271e15a762054842cf5dd623d60b12b0ac9fc7874fa5256fba58ca398e991cecbc74ce8dffb123798772bd14ea427f009ec59ac33cef4d999dca50aa4bd54e8750f54ede3998108a782958c53e99a983596c1ba753bf419ef110f23bf79f289ba54747dc86c8e14e9f06d38d1dd72b70810e25ff2ce136b50bf2890d290ac7af7469b088a68e51c513d6462b2590624217886a685f14bd36aa4ba11d4d0e06ea6b678c27f68fc9d2002f4b9dcd7db065586e4530408b31f09d131204891c3fde482221f385aae35e908f9f1ee501ae162c8c8d0dfe358f3a39d3d922ea54782a028522b6821a7dc76df48c009ed8332c3f9bb799e922679129d851070dbed3f654ed4ba2f8b8066343a6cb207767d8e02d4a90afa9735885ff4f6952c49fb3876ae6306ca50b1ded14dd89ef58aac8412441e94beaecad23704aab68103d2c4c8ee296e33374822668b892b976e9ac62c8dcaf51b06c7f4c29279546df784f527c22a3dd461792269d5c8f7a17ed6e4fa9ed2af9ec15c81d7e3025a178874b121f1e97a6432a63b1301c33bdbf5f965c09d0aed4c3d56e19f61cadc9f1ba395a7b9e3fdf4e0e53639064a8cc017943e84e6d0ef19b7d2288d0df6f64fbd048f0ed13e4e1e5a13169c6f34c15c9239ed6527a1ad2f4b0d898bd8e503ecfbe3ae6abd18684b679594b075b1bdc44b9c4d8845489d010cc7ff8d60262dc210be76d5a2ed192e04859e30a41d0acb4dc488d4456b16fd06a7591ee15ee862ed9c577a2d2e9ecad9d5c836b69440a484ea556c644ff5bef8175c4f067d6601ae00dfa7e2d36d22626608e841e2f9731cc7616b6cd143add933d793efa8873766757407ec74714ef507e50e82464d8c3332dd699526ea11283165f35c87828c2a7d7b8d515de78a281231138740c300bb7a289dc8ef1573a66166877efaae5bdd5b4e4bd23adc2d3071ba9a9792db486b15b2a3f29eb3e4284272829d24b742cc448aa6b60109fa087cc470d71a8d1fe760b3d5d0158c1176718f4f35826461b5491c5609521d1a6320f6693a7fa60dc37bd99705f00e16bea46b063d73abae6975de91d3d49f57cd50eb9329779fda176e75ee74bb5f4c8bab2a25a1c630019d453b1a5c556552e34283b98c9ab295356304bbe4cb97c0de7281828944f06653fecdbdabb21d7e82cec5501cc3239c20e31e258846d09286195969a71bfe0605e172de10aa4dac9c27fdaba4b1128b6080b39520d04fc12da43a0c49ba22b2b221cee21f1ba2bb417935b9bf1b9e7cf297d4692a91ed633adc46549d06c93959d621cd2c6f9d17b32d124b16042ad079ce27a10de7fee524bb80bd904ed8d24bc015f952299ae5e61714de645573f20763fe08ecad1ced315300a39a4e0f1efe216964347a20792390a31f0d9029019346b68b40fcaa35bea6a82eaa21f6075bab80890cf8d400e4b7f5042b2526b58083a94131758adde0cc658ac8b091c18378d81a4ffc56ca5a040c2df74763b7f3847b5ee69d89291710fed33a0a28378381691d6e51fe4aed0ec5e293731a15141d8bc8a8bfe069c5e248c849a340a7f348814b3f3d8cef33174c6b89c1d01789b825e672033474ef380b9688172e282f70186c1b704b40efba1a588fa684a812d891e83398690c0aa2a2a533c77db44c4678537d77612a1a56421fb7e69898605c51c1170112e2b541d275db11a1ce3af90775c95f0729ea791e23e3259b4ebb81aa876e90755b956f22a78e2e7fe8e6acc275aac7c9c251c0cd4d8057061c8c88c9a03493f5c28e80e91a57b11b77cffcd2d4b89b145cf8ca15752a5a2648388a92cbe2083823825101220815a6a9ce5cdcf15e9dcfccd18010213b228c46c01a72f2cc62a58447b40a5a65b5465a2bd6af3e2fe5427322296874fd6e7aded1210c28c72a505a23c6b11ca1e63e79910c5a86ec8c4258463d61868e758ece0b8d392903455e52821c2eb33a1b26728c6e1dcc0d0751f3ff1fc1585792b159e4f164c7c3724ffe547f24e920917758ae503a1a2535c3c939df55aa2412435cd56a7993ee0f79b0b85e86e9458f331c5a919c48f5efdb7548e2aea6c09a67334fefebde102bcf2e17ab8b8e063201de840dc91f3bc70c9ad166a29e544499fea3229253f44f09af95771001e68aef4456031c031288b46a6dea0310dea586951af28aece5ba70667070256128b219a4417746d550e52a09d125f1220de0fbf14c6b72c31da6bc48662c2089ca193d50feda734239abfbf028f9541c1e392fb516895ec43701401034184dcadf9c972366cbd9f00298dfcd03255103a96f3d769493551082ce5e4ee190b4f1c4fe0fccda07c54cbf0cf4e2fb57191358ddcf09a39e3599db2401e43074cee9cc312db3060c50b65e12bd1558d2fc0459241139cc951d92b4bcf9119c4dd0676bec2f720ba6c7f4dcc586c425250c2149e82528ab2139a4fcb67f09b7e8406a3dda7bf89e28117f486c9381ba640d133190bef62c236a2b212049dc569ecea9a7c18ff600eee857eb637173984c962678c660028035d119349992bfc2fdcad5e6adff068b85230d87875a69220db701b7c70fc9aee8b0454168747c3aee4722c993f62a44a5f81088262c9d1f5d0b88547a43769a5d92c535743d1f9a893b5e85fa649d23edc7227ffe4cc379615cc57fbc041676f8809fe88fe7a69bd86692da91489e80c866a1cafc99eb6724fac5db86ee9f4a6868b58fa9fb09307c63d6267e4586caeddd6bd9fbea9dbf464c4ca7a50f8c83855fef853430b15af87019510c2925464fabe8cbb823a9e9462e30343c44f02247ed064170b59612ab0f9f5b3401b923158fb79a4e72f4cf0f330187fcdc4f099d5f76ca67aa5748140511f0642c4f0c9a8f3457b65bbc7c7c95758cce948fe25f450c4f7ed8b5ad4b130c44445b805a755951d72ef8987879c33222d033231dbe57b9442a723b055cbe8706eaad13b8ae4ea8f2cac5035d5f8d962e4bee97b6b0d4f1dc704ca6a5429b02f68b889e36e78ad57db0679e17e0f9ecce49d6a75f1eaf3de7fd9e0d9cfe2422d1b54eeedd9a323b02218749df3ef5de03c1620f8ff141540ad18640b7a063e06dea00c4fe7b9677e6b78ee8ac0e39eb4cd04aa4c75b115c1bc899bca4cd76b7d2de5a78492045bd8ae4e7f449c2ef464eef27c5a121c11f216ea539f5ab73b253ea70bd38256c2b285bff62d54b1f22e025242f32422ffb8bac209a6fe2b8de523d6e68db5809168453a88bf5c70a63a52db8f95464a7068ec6919c32a2688f48d9b5b091a9cd41e445905362154f8ac50d9543c906757be7968c973a6da85a184740b0a0d598e5295948d1547c303145aa33cd8e0235083e5165bcccfe4faaf55d2902054fcac2580dc58183d5dc80bbd21f7b1cea5d01cded894c0c35f57539713e221c7d37e34ce468a78f0785c41bbd711cf497824868450e1dfaff98a4af9e70b5ad08e446a58f63e1b4e3f510d0ca5a4c9fcf6b0c1a370e641c2a1c8986ad63ac7cc72c8d8114baeb5f1b94af02ca1b7b2289af8bebfb5756fd48186143f0f3ba73908e38995b26c68255086d3b4cc4ddbeefbc0e51c075ac57fb1a4f2d7bc31580f9e3dccc23b9061871ed07a1f3436b775fc826c291cb6fc22a2cb1be8daa52903dc689183f7a4a4148052970498874bf237449d2260688e2f839a4c2e323077cc75d56c2ac0a340d0f49921acf0ea905695dcb44fbac700badf74529ca295dc0f3f18e7688291b3edbe5645213de3dc17263b542b2e807e0acd6a2dc40b5ee2844304f4e9ac71d814c58481999a58a47575de4976d986eac463e0188901a44d4f1769c5983839084fa53c0651c831e8f2871894536ea45081a459e0d92122522e38bcd70453c48bab79fe7137e95e24b6d0c7ba7edf1e2c80f497ee369839eec850574d0aa87ec1c24088d5f7ee6a939fdd94073e6b4bd6b3292ae3c4580fb47ef433c5c6db538d460515b6de41577f5c0690e2027c1f246ae4357a27b7e3f8f0e7b0db4ea3f7c286e9c14849ff13b9273314f494b71b02f9367ed3d72bbec0cbf6d5ec404a554dd323246272e16426db9ae9095c750f6b7a52faec1bd3230190e13575730919837b62640dc27e520cf31eed00080c8d1f4df44c44a84929f0ff94a28d2ad646c642170e617572c6b638e18e9dea2955861ca29dbdc224b6078f60fb393da320d5af75d3764c667fcf8f23c2cb56ff699e751e532e77c5c9a70ddc9ef49f7de620a9e42476bb1b8b47071a128ca442d2a46c258114305d0dd5c9a05dcdbb025df615613ee130af9f615a7741dc6d48a571f982c35b4b2ff45300c2288c91fee834538fcc6331a7d0d8fe0eb48d1ff8910521f3635ef664e72b00ace4d4ae5e7384eb7b84b6ff2fc5a57a2e3a8d196b28c0236520cc84c621a15f4018c8521c4d56a45b30d0836df17ece905a52143155fd872806328da1944f6440273583c0f43cdb1d83a6666dcc73b4842de0916adae873a76a86e2695d3910ffcb16ab58b2b88a98fc35743e479ffee2275c025888bd05a6ab61defdc2e6f68268417a14a4d885340cd198b0cec13e8e869e53301583b7912f5b5c06fea5f3a4cf9e533140a8485b17140c1174301753133da51a86539fe46a1724edd05ce3948385e9b80ecf6eb8e52245958b069161197d5c2a5c6596e3498e55cecc723a9f306ff1d14bbe0c41e1a399d2545ba01548880bfe18309671502671e66c62f1a33c5ab067f650fc9c405c6346636ed89133e03dad7e96330185557e8bce471a871f5ef088ee84b4786157069e284dcbc7a56f6ed4da959737ca4c6e998f11c1212c8ee8b16f5ddfad1170704994a19e64c73def64ae671d3424956814f0192afb7793bb941d867b4bdf4d3f56291b7c29366dfa72d37cd506b4bfff0a984423860ffc87909591ca7fa710def943d891a824170b9802e1b8b4b20f0e658595f8f5f77880e2000923e9a3813b200e0e0d65f5e02fd3ff56adaa0e6e8ca19c7667f2fa546cc6249da1e44fd8a3eeb00682158135abd98c44427112dffc027c8612800b32d95a2f8fa9fa6f072ac7e23b8d270f6533f5e816c0cf0968e77856c4888af9e09634ca0f64fb1d599b63fc4cd9787c62f6863579d642815094dbf24ad9404cdbc339d7cadf6b36988af343def6e9e4f4a00377bdf8228f44d1f00e573fd7eaefe17c12b051a42826d0f5706283b2a93e087567e44a85937a7950c41b02fdddb9954b5c7dedcc48853183f3c7d6ef8a5586e574e2d6791b0d55f420acd2572e0ea96e7a4f7c17529730458665b793a90f6d3d49d0d5b951813ab9a2c359f3c43d7cc3ec1d3157e15825fc26ad6edac6aa499b881637734eba8ce23dc27eed681da6d0c787f89ddfa72b3220228142388eceeff2b7eac9d586dae3b245518bb4b37a14a9e536942718bf29194900ffb3dce973bbebb018c86429840d84556a73504de138500c18414b9f0b1e90bef422f5d11924f846af1b9e89906b1ec10361d68d8b4d6676bb22558ddebc2c87e453ea08967d0d0b5eab812c0d33376bb28ce6780fd1b55bc437efe9019aa22056cfc6ca70021e7b160c344409b2c990aad06850d839098d9e6c759609d90e051dbd895cb1160ffcdb8261925a45088b7a8d6c22580f974573b0c984ab505c697fd8070fa78b536ea65410b9138db98f701d90f6874458e5f97e476194b0680e49a4724f305f013bc1908ba7d7302ed01c3effe395bcb706d2189dfd6ed00fbd2de0dda679032b63bc786b2bcecf12040cb1027c8ff6311b8c5f33025a80b2d9659e032bf2465546aeac3f2fa93ca38093b1b2113b5e1afbc40f0367311cbaafd93847d24d0a00fb431cb854b0a6a7a66e94a6e25b8bfd9eedbac48e2b2e09ef6a94ca33d42b5392953e5d635e2bd952c3d2bfef7757ba011df15f7380cb31b318223b6449006595e23204cb6dd3b16935d272d564df49b2fc4f8ee54596fd06727565ee1570593aa3f9454329d6962e44627fe549bccd296150131d17b7406bff15480ad41acc0d61e9d27b94844c34567a6841a4c7077b9279cc6547591a9b8a3d39a0d69d5872daf280d59fecf9e940d9c7d12e32ec52051046a66e74436b57726fff955e839850024f77c8d193862ca460b74c7688651b873962d00ad3a50d45ce53cdba5f9cabce181de0bb44f574d4a7a99e6ab0771aea3242981f4368d15c131526c9603969a3bb2a777aebe2b05bcde535860fca20835b30079ead7b09d3bf66674fc730f978a40a5461345af20fdb9efb0439302402f16ff7dff49eb69f18e84ea2061fc6b58877a8165a6922a8f6750eee686c618f41facb9a36ac517c84be2f82b36425f80f1a26ffd77d24c109739b63457cd3de2ce89096e04e7e2304e7a3427c5ec841eabf419fdafd22622ae49c832d83a40f27ae7db0485dd6599f6f5c9fcf934fe0871345926f8b614c0cfc6c5e678a2293fb03cfe7416100c81aa56e3a11c9acd5bee81119a3416736f73210e9498031a8db72405f0026c2a09ba4d9e49c9aa8d973aaacd2f4aa0d0b77088d06090a74cef71634f1554269d3157bfda94ff6cfab437e676a2e17576a04e66bf1590cb02a5f0e7f963d7625df4d2a8a7c5a28f5aac40824764c174c5da3205e68d36be0c0afc2b628184f50ffc142952ee56bed54216b16ade1c69d2664d971dc091b993e5ec56beaf17cf0fdb7efb9eb233f8e1e39f1f2a6798400140296ec3c1b4b53b93fa6848c32e9534b0c2d72f91b900679e969d56f396bbbeb2e11d0e7a7217c9b83a86e26d021930ea49d9df907da84380f51cd61801331a55f94fa725f4f906b033865e63674691dec255f8e6ea42bcdc8332c86ce6d5f4c2c2d96e7f8e8e9d2b2335368eb2905e8d4f023b6811321b45905f2339951ed7c2eecd306822e155bd8db9636a8d90af5d82658b2411dbe762a058a767b9b0d21e3ba62761cdb9847e903c7bfc215129a5acffcd5b190f1bae8c245ffbf7318ed3b32fabee93d84055fd59f5d9b604b04339a5eebbb30f308c3a4f2d6653f60a5479a13b2a2f7484381a7bf2848355714c78a370bcbb4c0fc01b622363a66238227b03d0dc408140bb8b6f44149e7527311ae500207dc7b23097adb6d03cc5ee5c7f708140d504bc51438da64cc673731af23470ae7cfc3dbc41a24ccdfcaa43df668a7a1ed68d82b2c48cf68f354ede69978b15895e42dc68d0270e5c20facde2d3104dacbcc051222ffa6b82ec4f29bc299552f2ce322c99ddc788e081880cf94cdab68f0203a5457d5062b0e9112b0cc25b82549f2ab0ff261678005291ebf608b93e83d251fb9e7631074c97b4557f53ca5b1f8d4298cba41cec8099827a6dd5c8f9f1181d90b8e69bd520b462ae6ebfa73e712d4dac070d8211d0be05d6e84ee3e5ab7ada98537a9afd701151e94153134d5f7e76b45431c63a72bfddc84e0c289c2ad1951c400689195cc3a338a4ce901608c0cd8526a5c2973172d715083e896c52df0f6c7419dd4cfff461d6f2cb8d6df9f7423697377df78f84a1ef35c1a01952bac3c1686b36c6041adb74fef5c9ee474d1748ac4d3821eeb33935e3fe3b98a65b42b96561effe8f6e7a7ed8cdd74bdf02faf30a414ebf3c4501a9bf2e375750735ab797e6ca9ce550fcd53eeec930e7c9ded4620c07aeceefd85fce80881677685bceb688bf49bcc61515e6533c8ac534cc616a8734d3f6b572ac1417c0fa0a62fc311592bb143c41f0673ccc6c64a79cc686974e5102bf425212676e85c35e40bec86802ed186fe77b5eeb37a2ab1b87eff8d0e9d7a9d8195006bac7786ba1ec7773f6a90f456f8108499d1d3c0dcf36946314ddec2efde3c248e484fda99cf4b3fa87e87c4493291da8743df52c924c894523b3475855b8b220ac1d1ff3c27e3cec4226f60aa313ae436527c75fad2a1e7dd6f04a121b7c2c681f7c9f70ed7cf19aa413a4e6f02f1f19d9cf972942db5f9aecd56d13f7a6db6648fb35e4f45c6d3c648dfbda35ad6c09ed4db19db578922cfdd08c4126a2ceaac3898546d8b1871182a657f7a42ee86dfb19957b82893e5d14b0946b9d5692ed314e3d53f53f88aa49c793ecd721f0e364b445b88b63ec69af54388e5e56c39a01790c2b39349e0e2fe95d039429db0b0ef5bbe7b11643b61ef887567f5c9caf6d5a5388470900bfb68495016e0ed65c6a0e98a0968a0d65fb95d9d02494db6858eeb7b531464ee5bb8da05624bdc043d00b0dc9bd95f76a2ee68a58d15958ed8a85df73585d96670afd4b7ee23797887b435c736421ea8d6811bfe78bc64ed032fee46fed7c552fb48639a1e1e8eb5dc32e82530911f33d14fd0994b413423443c2d94d7ff13ea78f6f499c01cd6bdbd860090a2bd11334c5e7ce9f8ab35fa560a81256824ef38766796aae0f95c48df135b6fc3572c11faa029546389d5349752304b0c08790764433c24c4e3823d9008dd6468889fa406f01828e81bb4aa6bceb7fc8505b5f7c7520ffc91b08985618fdd816387c431014c950e4448d0de443cd4831502cf2656173bbbb667bc14a037cfd05a88ebd9f31e678e38dda0cdf3838099cd462a9fd17af6be9277c6872f047d07efef66b2ea879b3c989548e0a63e0f7faf3959a39a8ad910b755d2fabb8627a743310a720bf32e37ea4d1d0c8b8609ea7c0fd8e79ed084de7926ce0de3480374de83686439284fd513b84cec232a81754a8f8ea8c1a2f825147213978e5ff3c5ab9fbb725f499c455240900593634c3e421581d2e386738de9d2fdbee9451400feccea51f04275ec6a59a59d73b9336ce8fc61e1c5465dae2e339637ffb6a91641260427b98cde0792e819de2917d9d158904fb3f1769e1858813b2037f5a0cea192deb455ecad19dd65d3e3e6b4f877f1d91fe807aa07b8cb71662bf9bb24f65c6faadacd802f6464549973983637a14fed8a74715e60d9dc3d4d67c778cabf50f0327a2a4bf9e9ae2e5fec6810fead6e9ef4c967352aaf69c76cfaa182177cb89b42549d4d6400a3ad0a89abc51b43f5165e88ce0a04cc62be224d3a408390f14ee3cd0019969c74f30b298b15e146ee81f08477d67d027d6f92802a564297ae6b6484d5d08797776a0aa816927681b2e392b45780f3a5375dec6c493523199081752a54fc973868b8f953d39c6294ee3791ad1d8508fd8b1e31fbd5c32089b9f9561a5602f51ce108c12e5688b4787ab62f094af760bcff2372ee856011eb0651a89ecda4d45c4be221b9bde38d7b49700027bce48c460cb398101b0f47d7139e868cf4243d377b8b4518e62a04d9b7548f9f0f938ada9793687ad7cb66d896b68c0907e128623525a8bd68e7059a136f8d2ec7122e65de0d1ad11ed93ae8f76fc70a351237ebcd3d4df3e055d4bb4c4b52d3db5c891540bbabf8e695ef4eb0e113f10fe2b276d32a6cddf16c70fbedcc860e66010d10faf5c5309eaa92c1643c9e21cdf8aeb750566c2b106b382535e9b4f7236ca06ca20eb1c0c415da7df7ca7c6e2346308fe0573002cade0e7b49faa157d9c271ac76816434d32ba6686e516d1366d11e88f03fab9a8210fe11275080fadb8f30dd44149b1663af3d2931fed191b00bec84c4e0ed4d2cf082f075bac830115e9e8c17f7f88260766fb37b839729be6a277fc3203ca8672543dea7484dcf06f8287bdaf5d7a1aa87eb8e1ebe140eadd8df2e2911cd10186213d3acc5c1692a352323037d2889c882d814b010162e095cdc069661a20a5a297229f715749c60b82c9ddd94d381a281a2a2a1621cc083e829ff2798d9ebcb23d99fe197e59be675f369582130bd7a878202100ac20e6d0a7076e80102d42cddac635f3924d03da009091f96bb27fd0dd19b675731a690f6b9a275228d145cba9bffc3bac6674635e0d9b016b8b062dec647dbc0a8340785b720ad03a435e6b0e25b8d445ff0c8ff5d815d5c7ff7de261ac8bbda01e0d83a837f02e8bb25bca6b7c6bd061d20c208b448474c4addc1983312fafe5c32d10b6696acf51bad3a0c3acfc78b289f5268e5668f35b8b6fb9459b951d2343b3b67276cfa3e2b1baa5304b51713162044deb617be95bbad2fb54465e1857f227efa74f4bd529635c2f590ebe0deb10528870d1267dfcaca2477adeff0b734fc2a139383cfe3ab7e94ab04e54036d11f1c532e09888d73f29c1c46ab20c319823614024d377544cebc075d737540beecfc30f77ead54a5e7c9c833f651934eb24aa9037661418f9c074e5bb803f105c5577dc5db00b22023a57334bba66535dac6016529018ae030b2bd9a72ab5d37982dc6e79653a4b3b82b20a08155c268f307c4a7b0b9e91cdd26d61d242f0a02ae68a953c71d0ae662f1301eda8b05873782b1b6ba8ede59160d2b38cdc74639187449f4ebfd936ca32b11b693b4cdcb0358f29b891c206a52e94f3f18d749dd7c555f4c084c1bb888aaae6e15d7428395b91bb9825f45310a0408a43807e5a040187f1c92954464c6118aa557148c2086f2c23f822172ec8ab852821ff726cd3316db3bf25326d547666ba151fd09e147b15311bd49111233ecc0966a4165db0c46d841f61f40438af241daa80905f42fa7b044d1188e62bb81250445a41e4d880e1f8b077c3537a054ded8f5b09671c1eb88c9ba61fa6df4fe24e63c80e5cb33cc08e923163f66bc7c45ae200636e19e8aec4e1645bfd5b8a7910f2b5610c35896e65b822f93eb79161868077fc2fd3cafbf1415682243e2f8ea905dec1d53e31a300128a1a467768345049c6b0d474d460a2e1ac1474000a9cb2327b3259266f8bb508d5dfee44feb1b285c0858f8bffb703e35d2d2a75f5ad20cffbc952b93c9e8d77ac4ad742215e5263c83a3df0050cd379743a8db93f1c6335e1dc63241e7e7faf1e3b1f10f3a611d43b9958511e29997265565a2b5ebba6a118e71f059978ab4685fe3ee8bd941e5e2b0f65c6764cc2915eba4fbaefab9bec7172414e29673d7293d41e8f94293a90de0a7bb7f0142c4b34cdf7f69b50ef175f65bb0527b356e46daaf18b4239a70d7bb572b3fe60a815ec888a6593a12550f3a8da6c5a6b9504381b220c40e051bdfda7ccca63fd3dc126141315cbb23e5b3990687812dc76e8a682e4ab8600c453e2b4596f0decd92f97ec24ea0a2473eb2e3d29e6e62c734a278682f54c7188cd4d2a4087ddb8c9f1c88677f0dcf5dfd9f1114ab440dab4dbd02a561f511f94324c64206a55ea83ab6e20b05ce66eaae89aa89c2dba92aa1252b2489f022820a948bca04313cbd3b2066b56e3b74991d02a6667620d04fb0a2e8cc3053fb45278d7b155d6d25272ca1e1c048b896391a556a5beb0872ace2ded7ea110acd2415fb372e58a132149c35b472d1af3585f94db518ee8a4211a3dabc3c9d1ebb628ed89165385414d1592219ee00459c83832439425d5c56c67ef744a9e76b96d02fbca4307ecf6dae1f96324d2ab17f4ad9f72bd4289ec623a70073a612b9f1980aa59508ed08bbef9b07a24a744888e47c2c91b89a35f9bc41515a65869eaa9834e7bd02ae173008586d5cb03a29b8687263810af2da3f22a865b729ce42bd8d4eb4a58c0b0f9a3704cded78010898dc3ebb98ae2e9368a4773449b8c4ecd0683b3eb0c841e695aba70019965b8a46dfeba64f401720c1c28b93d032c882ab46d19536c40719f8c2c9966476a46e7e0e081d4ae8a5fbc0c6b088d35c320a6e2a3d5d0b52aa5935c2e77793b4b4326c73609ffc2de7ac9965efbf7321fcd56cd7da12e3af2a3bfe98d1ce7588caa96cd4265c1c9e5a547f94802a24f6f6277b906a364c529ca11d9b4e2e5916f87e6be721750e638a23bf6b0980528ccfa2cf0b0612a59ec3385f6f464d103d91ac8b516531e8eafb262d8946bd58a79af6f36d7d2c62bea11db905fa2470c5e5b0a30661c73d629761b7d2dabb1515c61d00ede0cdfa1efc3ff0ae1976ee23efdacc0f4bebdfea2e6214840a7d90fbd6fc5eacb474f2eb71180a2b3d9c5c8405c62b57c6778ee7497e74cfc514afe82c6a8037123a6cf9ef885c5f6241aceb646a69f3b8685b418228f2382fb580a67f0685ca1179decb1afdf8839f77b56165b385e40c24033312c914a27b365e8eb5299ee86b29262ba154bb51f61cafb06a77fdf6f67d44b9df3d63ef1c16a90598881ec5780de659768df2575b6cf499394e349a7ab6c89c23f91fca7174042f489969436fc7a6a486dcad7d010b2b6926d66798842dbb12ff74985593d04060f65aaa847b3fde62a893651c52bf532bd42bc4bc8586b1f6f57373db4973ec92ac7593612768784eaede420f1d7a10e038352e950f727fbc34df22b3318b69a36ff77b7dff2bfa4bce0f0f8cb70d9bb226acd103ee1ed40607c5f1c2ac2626736347f3e19f2c6f88dcae325b998189b6a3034fdffdeb92fc94c30a41cfe0913b9b4cd223aed55121661887b6f81f75fa03ef6d662e031e7de5952b9bec1d5b54a612cbcc9d30d9ea01878f1a0a1b88d7bccb3416f400b1e16c4f8dd356813664ae0c14a454c6c41697a4349810ba89e0c4f1c16e20b15b229cc5ffced28256471299d43740471be8007801a518969de0156ef0a4b02349bb5428e4d15c8d75c37fca3b37ec636977a52e1b6a9071c9ec611895b748e203b8d04aee3f02e4c8e25e49af60565968d2fef5206b291b46d096ee8b87a7de26410d6c8ef15ab142712246ed47bd0dd16e88944a23aa480b26b6d84c43b5a58e2628b37a8406c24a4928d2528c843edb7f70f306104f36b512bca1f57d56f7416ffb642f80a7e73db0f19c38a9e52d7c349f5012f024b88dd29e1d739d3fcc5fdb85339dc5bc24cbc9f84646ed6e86b8a2b97e7d84ff085ee6ff60e15b5d85f44930fe43f2f9f3f483089ac7d89f8494072962d5f71851ab019bd678eaa1f3760af050c268e510fd152cf9d8168fb0bf9415f84362932f6aa7066eced27535c6aac149c35f1e6a920c6111e64a3ad854ed9f5401190bd9ef29ab6975139e7aa10cdd9d76c9af9bb5077620ba8d1a1a7470c0996f596ac6164004619445e9869b77b485c32188a918cae47177295a717e80ff0c2229713211352d163c08f23014b2a078b149ec3573c05011745dcbbede69ea7af389ee7c6a44763828ac3fafcc8ee2f3862516c0009d33a093881a2ad4698f4c78d6d2230764161e53091fa57cc78ade606802c2417c4befe9821b03e5ae55da657c13f463f200314346ad8f09b3376a821be1f42d6980f3c77d8127d31580c428257c3692a7a20bf0f7b51efdaf0617bd4e260646f7dcd78e4f3610b4110fb529350ac6b807184414029985a95ffc52a78e6014554da8324d0c9e1bad8678a4473ec734eb0e83cc85ab25470084cb46756b0ec3b20bf0920024f8def5cb81b402c17407678215c8cc65de042599bc4f7a428aba6e848f03f29493a81bd9a0000289418c4f61eed48414f2e590b84e9490e75bb139a3720de104fa50e979b7664be282bf97b98b4b450ae608b9beb1dc4084ccb2a45379fbe2a392bb1b2b8e27d24ad196116006a8990fc261835a96e33b4fc0f568ecf391da586e5843d15de7d2a8c46fa5d775ecd179619e68a119aa8ef899b7d4862a30ecee2833921b47a7dbc4d82ac9f5537ebabe4fd97f827aa4a719b9c1eb081bbda1dd2615670651ddcddf805624e9ad21af152a7fac0cf7ca8770ea9be7edc83b2685581bbf42762b82169dad32c25b22f876ed036461acd23ad19a0e44d604fb3dd4c3f9071a219af9d03e7476ac473f89efbf3c6881ac65bfde430d251dae088ce2794932c7512cdc6072a45c0f88be8d65e4f03fd1068aec290b05effa38e12cc23a56322f55e901192851b1f43dd4b1f25498fa80bc121896908082be096145c495027c8d65ab79b920dfb06a50175a6066c660a25460d18f96b4d4e506ab8f83f5030654c1bc3aabf67f46424923aac1a60d19a86ed4ad432e380d21af2aa120223708910b307e92be48d1d150f15dabe3de78bebbc9c92169ee1f4459e77987e8270e4ad90935650c9e18a01eb5b6dee2416415f26cf5a62c3123c4af2589cc6d9ba23907d0265d771b6408c515452e71894ad906e9fc32f702c437374cba687c0aa4526326226e8b783b4f5fb735880a4802c23bcf0e1bf66f2557f12cf9e6edba500b6cf0833c855e8b669052d382b2ced3ce698b53a6476878d5fb5e868f27cbb6a509464da7023699d72c091f80d32ffa475cc6cc7791293d16f9201c57323ebf671d68ae4943cf79921caea7cade607d1a04cff152df2082de7694fd704e2612544f84a5aae3ba5ea43af36b25b6d60f0c9a671fa6d513e0be1a14b12be0488cd2a57dc2181916286dfe93fd641c752b9c9c4b65d10f39065ec3762af099bf1c5e7a27e05c8215a9c95695a1596636b39321fe68128d1635960d354df1f86bc8749287f0a61ac458af7bbdd3f4d03adeefb226dac4ccb0f400065fd8b74ee88715dd0686b89c686ee10f10a6bcb509e6a0f6c8285c23b6bcb166970cd6e707eb988360dd72607b9d15a45ec2a44dd03e28b0db1f1a207e028aa7fc80376920e3c49ca245a07fb1b33552038ed40090ae622a933c60916dfa51f1c7862630b76a29693944839d324c52ec074506ef8288c11211321a0e4614d39edd5dd7e82a568c5b79d59e85e3ad59832abef4e3e46974636ac7098ec49626041d1ee384f0d29a72a5e96e1b3fd8025a02339669ef0357decedf13400a3cd0af3f937aeab230c73a1f2fa409bc87a8caa6dea20259edea81877c350ef0f20661dff4ffc10c4c1379a6210fecdc7b45f1b456ea63720978a0a6062e44a97e66dd850c5a36815bffb083b8a77cbe572cc466f31ffbe6bbbdde8a6403bbf2d261b7802fc5405fdde21b19a3ea60a4b14383e068169653d2d09aabaacf192f259894cc2a797af6b928d8a3a626edf5578cb7f7cc5f6834816643ede862f2ff296794687768edbbc5870381df081f102e65a37f7480300815f06e8685b6fafc188634a88b0019ef572d351f82a655becfd0100da5c4b49f5df9b7d415c2cafc114255219585c8e462014e18342734396642fb6179ac5b0df4be49f2b5def1b502b354ceadbbc4190416c3161e5092787cc84eed4bd894822e74568d092cc9477d802aa206fdf6775263586ac80d553518100df07b6c57e1b241709da65afdcc7f99e7cc9c5ab4482e0123e2e1088ef9bb3b2973d29a16ba0adb70dc65a7de0dd0d735d3c656efacba83ef3006ed108370c499241ea3cdc00c2b93e63e5000767f7bc803a8c5c68068f02eccf16742e5f56b25025332a639e04d0a2048e18cbe146a7535ce9c9fdb48d8034e857be080737e1014a50309b5b85174736a2750c3ab5fe97e64d8009219c134d587df3d77181d6e0dac4d67c7d70dcb5262f9a0d702c002cdb8e698f91e4638d3424a81c625b6b39a5164d487d9758b2ca5075285942205ddf00b93e250d1cfc951b579eb591b3695c2ad7d74a0e80ece92d3db9e8954a393949b4356fb307d02af0f711622ab37b3a09329ad5fb9111fe84ba7cdae104d401a78134af9d5c0995c8182b0ee6692b1278d398259257eeba0758b487376f56fc3ed3b4b19491ccd45f3ca39e79414a0a69965a38b7e0f98ef5f656c69ce92bc800d7dab7b29971adba085c15f80f4eb801851365d601ab8faf2f2be33a2eb6b02d52a632797eceb01a863f335f217849c80964962e2f12cfd400222287a4ba98eb0e2ec919b19a3f4f668282131cadaa2a82f0bac1751a09fbbfb7e83dd940e932b0368e8421c7e4069a4759df359858d5fd5ce0107d331c06c1c3441cd0264073be21cd1f995dd8cf0c190d69f32746fe1a68398a88541ba1de2bc71ab3a2fad5fd3c28f4b4484068bb45f8c7be2f61d1671b9968b2fe03ef195fd219d891f89e51b1c785c3862d568bf19d5e46df0058326f01fe97fc736b639bb1b6a9053857ddab8d0608e7e20c2064452571846827e4a77d3586de17d89876b1976d5d328242967bd110a0b2342b453d64db85253ccca562a603e2ebab1cb781bbde441e1e3d3b23a19148486f94e9cfa786623d0a30c49baf8932d244287d31e125f69f500ae80439562062081bb16e02cffcc9d3c30f766146c22d9f4f106cf50b1297b3271b2a886b4e31e0da8f76d1baa3ce0bd4f1dcbcdc59a81039885398eb9d76e0e677a0021e7df3cd70adf57ca06cfd78b35fe2ccab1becf37c12b5d44ab2b751cc1d0560e7e0812960406529e340884da26d2f8d84ada410c34281c2186ac8a110b603ac42895edae01c3576910459a95b60d4c7b46113041eb3a3e68849eabf75c72ef384ca766a1610603f773368ad5cb19d2a0080c4297209268a24e77d9ae5022fa178036830b57474305f30a70ad854f7eed013743b2430bad7158640dcf8fe625f976b66bae118242ab70fe56cfdfc0513441a144f5fda125419881955bef5e96bf29e6a8e88883eb7c84bbe9c0d29691514afd93213d14aff18363a05c8e46fce73f47cedf174d276bcdf9e343bac213b4ca3738bc01b36054b1dbeed154c46f8580742e3a463d180fe79ac7c36bfbf9264ea7127bda6b319854c0bc6404decc40d7a8079b2fe4491b69dbe75c7a0048295272f18e8c035cbb5a780539f73f214dc07b8afccbb68e89c9648865aee048420bcd9256700a8c0ffa23afef661281caedf7f4244fad1e60618992801d200b222307c02b17116a41882aabc71959ab4178abb4900443dc0c133dfa43c43cee0664612df23d3a54929a780830e0af2c2efae20a097167ac12561c7a3c7a226bfb7d068bfd88c1109384ef83dbdf9fc4f4824f13a68f101f7fd9102a61702bd4ad99224e0c5c397bb5767e891044d76647769b77512e5e28c6c0770ce3eaef4e6ea9c2916d02caf82ff2a6398c327dbbd519ccc1403f75e721266c4ffa14a93d93b6bb064bf53c1f24bb51328f046f1ca3404229a12fbb0210dcb37b374608ede7ce272aa687e71a47991dce23f60e040e1a8e86bb596d40edebb9e7d3d930dcc37c6f5ecab19d82999a2b580ad072c282ee51e4258ec5aaa8b6911e4d1239bcce4ebdc65e56e70703c85749456ab61b02a276db749d907cb5cbf547b8b9df00d1c2f5fdbbd7d1883c1d79297bec550beffed378729c059d783242b118e1b00dbb2c31ca6d1a4e8286efb59b554829c1772b27b1e6335b42175486af92b97b3322460f8ff75d3979ab8ffdb8829bb5fe4a84c1d9f611c3faf4011ad6ed630750489a3cf17dee3643c422075bd8a304775f4486d88e62883f9f7fc740550a13f6fc4597d6de0d2faf040eade66649acb68bd1c24062a45c78821df8759f924fd428f22db95d0d475b6415953939848191ca3d928855a1d3444d9f0fcd4d3b0fe1265565108b7136c91debbc0b8c34fef8cad3bed899485380fc55991adb31f272be06f4556617a032f3a8eb4828b0e86989012ea3002b36c1562822ded8ced4a91eec6c8d1e80b21241e8f6de141b2c7419987e85d5cdeffe4171462ce827e10c84662283fd5e2872fb33d1d967f169d98ea7eb9a0b63199b692d412471e0f9dc0a30b3305ba6e94c5fc01357250ef2bb9427fcb719f6b4c5ab463996540b596504c8ede3899698b32c06f848ae17c7b82da88ba915527d29594767e08442fc25874f9c21296869498330619ffc1d948fc060513a162c46f4238f60ba343342edc608d92473b52569b6ba75e34038c926a92cc46cdef91db8b8bd9e35aaf9945664a9792dfef9bea69011392ebee119c8dede5f4736b83ddc24e8d0fac291bf9bc57a79812edb44f0ed70775be212de2aa2a966e2163296151a0ab5d2f052661ebe846239b8769cd7ed0727af63efb619debb0c5a86d4010dff2a61b11911768c132f7285686bc8dc961946774fe92c9e082cc04353b961592d891194d32ae29e08e6a1293665e85c0f2f719740f54df025d2ab46c346d5d98db846c9e1f262cecfcea2e5138831c42669d4e77a1eb09547045d2da81d4fe48c73b0a565a03e980c5c3477dd8f9f01120c25b611a5fb47f8e81303fc662d4a18c92c5054f64cade6038f82d5d5b4588428443d1264f3b3a9db1991653c2322e6199f241e5fbf1e9e3290c871d16535be3ad3f32ea5e0e4853a7b8abbb0d7718ebd2947503da0c7f3bb6193886cd4cda0c197070aa10bd2221ac68edbfd843c9182e47cb53a48181a4978037935bb7bd656988012de2f6a447f4f993c1c5dae449983dbb3775aa2eff174b5c3cf64fc4745329ed7a13725223ab85df23b136385b1dfb0c3dfb18a7c3e3c9bc73a2e64dd83c88d388fdbf674cfc315dc4a5517dd42d14230d624c759c20f72614eb403f754831c03bd13462698503de338cafff8fb7a0f6994935ef6f78cb16a3b159798cf6540970c9e14a1c110b5b2c4cd49a8b54a700d73a83f00d56f0a92cdd01ae4e6cacc520286a893c0d98e42c8c094eda002b4d5bae3d71200d4e2c1566857e4b031d52d9ab88a5a1abfc738460ac48b6a84a5ed6b8c6845ac47c04da1c03d7f3297c6603824fcaff6cd38d7ca2260438398800705232f211d0e63fdc8bdc08c04c442d7ca65e93044d7d19c4c495d96730cd263c82ad5810c49f7217cf707021b04450445fac44d73f5dabfa1936eba5963d32444e41b09591718834ea810d40460161939941782a004df83ab58537b8cc30a5d25263c6dd49288489874c3466bd3a63b3dacd8325a8feaf08380ff5b5fb91fc69d4e34c87b873479c32405c9e5add7384020ee33ca5d214db9d5d316b85f7f0de99d6dd59f16a83045c5d31ad7505fbc15784da7a946ec3203a46a90c214754d9478e70294756eb8be9d7f43aadaa00f494a0b7c09853796fbae6980e9904cc6b371ead79e09d22f54585150e2e4de9966ce0402a01869aae90a54f5409bac36b5f04e6aa8962d5680257883a5c3f2cb79d980c4c9f646a09c05f2df8160b2468e2ea2c7b1891c0fa11d612ec339615ddf5b1b0a5ff27f17c98051ee75ab19b5210d1deb02db70573f9c4fb21be813767e1538e22288e21dbe5355b92144b0669c260fca5e867ff31d14aaa2f15d9478068cba8a1fb934e82a0f0392ba702a0494977c681ffe0070ae317f9132f5a4d66818d9a60bbed3209fca10a882dc54a6c623c75e33bb7d2f5994a38e782f612c17482dd669c26cd2f3503a94095407e020e771e125796ec07be4c66927f1d4863d542cc9d7cff5f10c3b0e4e20144611a87e15bcaff67fac69ff6d173bf5a7e3da7fee73a0acc87d90927b61a5066f362ae1bc6f4b8ed1fd56111480d5dbb00a89b57edd6f0bf1f82e7996fa4d037e64494d9a170716fa199110050115d8b8ba4002680f6989aadef9c8e4b908b81f4b8f8d27a4647c208119e42873928e75e0828ef878a63accf42b966871281a4c2eacb01567aa8ba2b39e3130a2925514ee40a6dcf659b4e7dea79d4b3f1c73a3830e690424fcc2cbd1274262b569502a8f1db501361a959b8f687cd2587a3f79c072b7af7d70ff8a33e432143cb48e8b4c8cc4564c1822a4f77750f2cdacb0e16d6e32e4370b1a1638575373db44a98670a885cb9fc2279e40a86d89e505036bc950c8577f26bf831eb0854fab988de76d44c221d49101ed946e412a1ebbb166c0a02288bb9e8233d0b232acbfc3253198ee0a9096c4ddb8ec5217b060c7e4b559762815d4222c435e25e4e0d126080593af1229e3493db5112fb44d0352c4869c2524bfe5d2bb77d82b8c3a31e107027870f428c5ad09f88da16baaa6a46837a80313f9fd334d291710a30f5398340db6cf71b949400089b90ad892fa05dd601e6b6901553d341f37c8232982d3c5f1b0727e8c4a72a6d3b5960bc2e35a7c5576e05eae19345a68df29dcafe0747f36e4d6e7fc7ee73043df21da6bacf908fe72681f86e81b9a0bc7878bfcf3de804aac6b5e8959c87f327a46b513ef633d4a5070ca221151ef118019ce03e10767ee2fc385e75a830153adc0b29f685da8688b5244fd09ed6994ddc64be7cf9b9867b0aaa88b88797b2f064a510fb63e983008ff3913636fdeda18adf9be0c8aeb7182cb749b0ed59ae4bac29779f4350fa7c6065ce35fb950afdf334584c1c409bb8abd708f0ab2ee65e6792f182c43cf22fb0044cbe86dece4cc28348bda35cb96098cd135a9217772c11e04f538fffb253f77520d812e753b4d862f2001679e9bac034215dad532be0dab578ae1c29369fb246705b2765133f7d14d9ae82f5e62e45cbacacc22c00447f98b81a73e0802efb96ec31c10d988290a7651c7a912aaa4464ddf75c7e149622e2f61e11b216ffaeb2534ab674f9685880ea3f0b30acb420f31c9378302fc6e13b0912b5d92d6e1a5d46bf7eba01661c3406ff4fa9d631e73df184453c60a5f5d3f42e7b7bbf05ebdf84bf3fb9bba87d2eca34b0a8ed91524c9a44a7a59fd3da59529c23b405bb6bb91c41354740203c3ae0fbb7091090e913686ecb3e12214d9eaaac0a2e2e2a692dd8d1e9a2890d26534f5bfe4ab190c6a818bd7a514323249657b4a5f675c4bbf29cb437c1f34a4d4d008684bbb9f45830305362d05ecb2b3fa56a6b61a8649ae7df05ffab0ef9908cd53d54f33f8ef141880751af10888bb782550e162f9c892c7826b1709b5c8f82b59cddc6a0df89346345aadba4ebf291f61e20a62d326ff22f76de17b08f3a20c9cbe38f7d0d080efee4fc05074601e278db09c3a42273e44e6c458519f386fca2e24279823a40a183ffc12ab61cc91259f5bd7d9111e69d77282b0293e1aedca9e24f2a9dac227e52c49823f2a6874164ab489ef24b3a762e88f9ccf47a59b09737b71e4031092634b2a083f49feeb85d73f9251b6293988a12bec48cc7b912472f9b00628fd40b2f4e2a35ba4406e3958ec6999dbad17740aa918f03ffc922e2d780e4e22631e656672d8008d0d34d14ab5a7db2ca367844c8035f2b856a07e0ffd67ac0ca32e10afe74c6ee1903f511a581f0f9f94f13eb0a9b778ed47ab97362180bcbdcd882a87d30e164308cae82fcfb953e73e3748d9d4622a229e5d8f627790e021cd9d413760a77bf9372a5190410bfe7aebcf43f2c0aa1583359222e8d470e784290e25b75268deb5ceac9d098d46b399f5cfb1c0fdb421bac2d121ddea38a7988500d3dbdbec6f0805ac85b429f51125664d4333ae1f252cae9164438231016e6128e20beaee1e0b780819da8a410ee456526aa3422a3d8ec3c318adaad50882951ea48c5c9afced15a99a50024b8939a34cbe09a674a159dcc3f00157033e09a0a15f786a32fc63a0d3aed53677c2ed2532251a1778df5717a4b2a4a93e74c27379c798fec7d96e3a0194686def323dcdb695199af71bc8d26dfa00d8e16fd6e35d00fc4dde4f255a09a6f6eebd781756b34982d7a2454b1a81972550ab67a89fb7ba804540da22180ef4c13aa650ddea1ccf979df9277aadbbe8903840401e1bb86815a54837888bb847853450d80efa68373e2eaaccbd206c3c83d18c8489ae0748aa406671f4c8633670cf837332fa0fc7b1cb32bfa0298f2472708c2b1da1c83e419042c694e388435a5b6b4719c38da1d084fb2cf66198668fd28ded77b9162c6cef92788ad13f6e7233ca75b0b4ba41fe32750f7f05cd282b8e65cbbc51d5f196cb98cbe88db2ce75c11fe677e198f2132339ab844d1170634bb8fccc4e832c40e36804a78c4ac58cf05e5fd8fa14c85472e744bdfc6529a6c4c495c1e4762b06e72404ff38d0b960e6e1e211febf24994fca75fd5bd448d6a33fa318f1855345eb90f27f3e605ab166d7befbc63e6ceea157ae2e70afd078b5e903e7dcfb52182631d1b069ea255c8403b05f6ebfc0bd2315b5e2551fcab687e8c2c093214f12ee71e7c21ca040445b5e8e3e9556ba1b5ed5d49fff41aa844ce782cfe3ded80bae4abfc70cf2dcf012e9281d785d81802b7f7ce8a1f4f84e866839e96a1b002384c888029fb79fe463d1a4b3bf414b09f76f3fb4c573cf6d7e97d881bd40d791ce3b653ea807da0cae78947e854b2292db984c42bbd00216ce2270a935a6be8bd63d377e71e3c6eb1bd90f996108606c1bf8e07b5d051e0aecddbcfd2c419a5e6e06c2e8aff994aa8cf35d38f28d309c8ff59c2a375ef43570d10c899024ef55c0094bc4e0e7ecaef2b1f8ddb1d256b59806716ec66e95a5c45e3285a25536a0401f159337e12c75e7e542c90e08f6352b53564537ce80139d8f975dcdb3557acf60304e0978b1c49f61596b23f30609dbafe764928559cf914fe1df68bb1e27789bcbca64f2c19128f0897764929e1824aa5ec1dcd6baaab500f3e61bcc723a20f47b53990e9de7dda2d32654fa10cdee710cfcddb96df08e826cebb4f1b6d210ec05089dbcc033579b819b90e777d6efd57d7789860c459b5a95e7971815852fba5222b19c4dbdb326f17023d076c212b2285b0f6889534776c0c9b22bb01370d9378321c08ac082219b7258b3b59a907bce81d54d8c56c6cf67aa32142a3853ca51f4fb95de59031c5db7998e06e68f4bb08d4603009fa3f67209a80cb8ff17a9109fd1bb3cac7f8a10f5506332af402ccab34deda91d773e8a7c1bc0815eb25ce3a786b611787db51829b5eb8b243b037660cb6267fa72a7e0e2cffcb1ed61e4f37ee3129546651f0da97018322b694ccc7f3c48caac14d608badc58bcd5d50e30537c798d864411c69945770d4ca623a403fc455342ea2fd7913b406ce6151572a442dea91505917b6d8aa1477139ba26836876c189f30e7f7a8542e95f9692b723c8c5008f82fb672840cf6f15660d5eac6b652d511b988b75d22bc072c6b662e4e8def5059241d54f90ef114f63c28a4c34620fe1205ea90aff98921899aba0cfc397aa8ab59903720f33f903082cfde8529d5152428f7b0d158ecb5a88a14fb0f9348dc08fb3d5fb8cb68e77906828f59c114c35f32ea132af602f59b807a98a569b4489648ad9ab8d39432ed2c8dd23d179ed18a4ccd7606dfc49b66815bbb44d004cbb108083e9bfc257fa614b4b9bf174b0d66719e466d7db1fcd518ed24a07817175da13b95d61dba7bfe2ae8bc7eb9c676be04cc4323ee582fbaf959b2d3976d33321a8a0de119942c23f5ca882136564a12004596a453af46ff8db315e10d0c0d31f3c438cd61e792287f9a5d872b8d42c81a74c32512f21458bfb2fcc6431e0ab29ce6b96c8dd03d7a767c70484e063744231642803d0479adccc6cb1a8d247d338db605128a9650c0354f6dbe4294c08d61867d6f6d541b5e93e5cf3440df4232d434c94dfc4924dd05b013b06e932a0a5738e3c81c31835b3c7cefc84574efd7f44ccebbef905e946e69d02319b91f912fada3f46df24cce9eb63bda1761fb2ede049731c0f26f256929e9193dc82f3c409c544c5015374193af523694336c1952383d91416579e143786469aaccd060e0390130f9416d5d5e9fefcf35196936d28f82f189e347de54b596ab05e112000c85c4b28a1f005be0ca21a0fff7fcdb00a5aebf7af9d17fdae0d87dda8fbad2092da619a9fc4c1c13c9d5172e82b86608f8e8c8a0c264bc5b6ebac7372cb2082f7bea2c2d9f577bf96978997c25669ba84e578696c93e2e08ed62d3b14883f4e77dca15680dfa5447577a0aae987e5d95334c37fc432a1c196e0cd3e2ca135966c6cd150e2cbf014f6d5980a36a0163e0dd3d8157b155a5722e61066f211eb66d2b6d8ea3fb82c64f0e164c42ec40d945f517a114a8d8acc75d909154aca6b797ec1f7f9c7e8264a0f2cb194fdad5a1fd84a5bf7901a20b656337899af402d33978706593e09832c987892e09472138d46853c910a4e69f08bf0e11fd81c5a3c3271b099c85160168736e27c2612adaa368f8aff23c4487aa65627733042a7fd1c89afd2fb4967618908d7b3e07419ccacaae1765894917a59830a8b6c21a1a7551e0f2b5e29c0d2698ec3aaf3ceabd069573330e7e35d9992ec5578b2d8d0d7430f88dc25923fb0e4b20dbd0adfac0deb62305850fc32b991d107c4cd132c75459798e7803e0231b35193d3b9435b4307025b800b153473c09ba706b9dbc660f1abc42227b24374cd8ee497bb3cb667e68a35e1e130e636a8bd04f74ffc4899c4019af8738681269a4ef7e70f26b7e6c1c0d1b4a92c5b326575bc30bff580943c5ed8a9b249336344a6075995f8584da2a5e0056110ffa596bf1d48431b510160eef825eece201875b9b3e4bcd0fbd3faeda7fbb19dd06293bc8ead05d432c25a8bc1644beb7e8c1fa185f07f8f172b642bc7f3b35773c6422bc721c406d8aebb30b6cdab86f3fe46994b5b258c09eb2d6f441ad7946ee2fa43b20adce6b807031a97941b1f1b76977ea748dbbc0a6cfca7b3c2cd57a29ee8137a0f797120906d68af395b7dd4df0d6d4689f66ae9296b966d9ea1cee4d62227e600bc73629811619889367da81dddd2118effa81b2061a57b8f1539f3fa5134f9ecaf1653444c67200c332f64a124baa85727094de60831289783d998cb60d8aeeea253d705d1ff7cd7bf9f3d9b37db35887359e4079523eef70ad618220b1fb2be97002600d19a899b5921b488d1720717d9a4c2f1ff5b982296a6bff9cfb1248b846e5a38741afea0d9a1334b94c270b1265e8b3392a7c5cf5387014eb3d9a9439ef818180d3cb5cfa32a063851222879b54dad096144d10976f8f53749704f8fc615ad952049b950be11f06466217a2f3035e612dc4fd0333300bee1db01b2bbfb7fb08de55cc37a3c067413264ed61997784ac3844d67c5daec6d8ccbd98c62e5b29164e4ba751c02d62d2ee2b89095d73293e8843d58d2ff6423c909a00a56b9306ac6c58f5226c0607ecca7e736058f4800fa8fb1bcc58661867ca1ff5d897ff00239525eae547704520f0c112fc1c90deca5fd070d74ec22d6c5ef859082f82581a303cea8d3694486d8322193c3921ec4a57d601f260267fb9067e557adbc77526f4202dc5c2e2aad0f0926ecf7ca47ad36122a3713b3e0cb418a8d7f5c57cd62dc9463537ebf32bf9fb4377078a2c7e9b54f4000f42b67ecabcda6ba1b66579126a8e2387ca3878840edd0260363931ce5bcf63a105e4e7ca98969f4672a76a1cc9325c090142b429f8e9b170a1cf0ac1450c99551ed63b29a48953905a9ded680f8c6265c6034de7049bbdffd26137a50eb4e85fc16c5d1e6e07c0f97be7da6e18d2a6ff5475e66feb53e74dcea1fc575ddb8e49f614212ba425fd73a734fc36a669aa1fad223052f232a9f16e81aeb1d4753b658cd85e2e93cd008870cdee912cab174844a44ab98a9321e767b844ca20a2cfac6662660e267e4b1088262bacce3b37db66aaf7f94a0e12971d8eb3635b9f3c03a89a64ce49c903a03c3a1567dd71cb6be4c9b41c11fd9db93e422e303592027f56f6b2e86cb5b7fdd01d3b33cd36c3fccfc79fce947fb05afd25f867c367a04222b7f708023fcdfa6f01cc9a86c0f04e57ce4e23a7821589ba0fbf9f97ec2384a9e4f7f87a454459d4ad1b29dacff28fd7d29c3ed202fbc6799fb99077943220fee02f65f4ea62fc5612fdf51ffd0af367d6a881b14249f8c52df3a343383ffe74d885a6184e1e9f4d772b53a31d884c7d0e9df2f179ad28f5e766b1f010b201dad16399849db7ee080085a492691f8b34fc314a77aa394046f62aabb26e0dbb1147c641b7ff38f0bff47c47ac5ef2847b314ea1cd28107ab046c14a6a6f8172e1ddd3e4e30dd30506d52a4af0a1cf059eab9606739a17794975a3c97d83cdd77508693c485adb8aef239c1a56b26cb6db8caac6f7f37b2d2e3388c8651f6c6c73e8feb1963ec5f116752c90590276c1d0d4479524075796900fa176a633a2b8dbefa1ce2ddd72f6e78b0183fa0832ef631f48e8b8f5e435900fb7fb8f514739998006429df444ed609c2efc576770217be0c3ee1d5a4ef5fa9260f18b5437a58d772fc1f0e673cc5441c4289f26bd4debee1147b4901946bc9e8717e62f2b2333b3c2a5a7270c3688994ec09579a7013b8b1804a442e9ae7b0ed45516fadee5187f8da19636ea731f9c7478b640df28e5b70ffe1aba3d9da4496671c9a3725a5e4c05cb65f36e0869dcf54186555517ed0b8114d8e7c07d092d0038b0af3a3934b5038a685fb05510402939e955bd76b5ae70b2b3f509f747989f603fd14e0e67174a7eba8f6e36bac9e866e3bff7c7eaa71cad5b061e728b14dbdbfd44e2f60e2e318ae082ce19ba73023d72aa73044432a4d608516b8410b2f79632e20ae30a9a0a4b62a408d1209d628ea385e5532c38c6aa4d272ba6e5b36a33c64242424242eac64ba19026174996a5c45a624d41e3d032281d49d3f0bc7ed7631269a5abfbad989a9309ead8f9ee1f072e0162554af2d5c900c936aa947ac28857a5e45229d12b6420aaeea6c4cc502c9fe2e158187587d7b85c2e97cb1546cd18abc6aa856114ab1646cdd0037b59350f2c85fae118cbe34004c135e425b0aca8cdd80e0e92af4e414f224091105563815195dc76a23752f1c776631229ad4a898564e5bd6621495816263ad3c3245e9717d765b9d14e31c4ab5232e286cd1526b8a28857eca61079091d88cb8788c37268198a5bc0319552d4a15c4cb4fdf51ab866208aa1f4022bed8e6df4a94a6e65ccfb35a18e57f188ed237eb76d18e2cf136abb3b69d94ea5f4c27c373e69bbfdc8e49a6c53a52461ec8589d84818334f3ae5326353b22c266aaa64b7589ab5d21d5139d6d138484e1a22e9aa708cbbec8ab0f2dcc832a8479fda59912f493b122fc8443b4304996e4b31c9e93420ce71c78cf2fc05b23ce7afcfed2c73d0e4d7dcb8046621f37c4ac476d844ecfc5421c92d6d24c98df91888137d2ce57f2d276de176851e5be772bd24d327392e8defab55e8aad93b64a7685bfe7b49185572db1d6cd9fe66c1cb7a87ec1c3241851868c0e18723a42d4b636a6ca0da0b0963d523319fecba05baf25a00922f9f3104b310efbbefa084ad93b98691ddaea42d272db8ea279ebecb70850cd8d55f12f6ad40ff8d57da151d81ee93279888df9e93f6c6d972cad91b8b7b576f06c62122f235c442f379c4fb03bd7a4af506a859d4052d67d42b2412c4de97fd40f07bbd8686ac386652f0892e4137369f9393f7c536d442547538d5ec4f1f6c7bb4f57abd5e9ee50701b2f7653dd0e5fab7253c5537cdb4b8a9574fadb2c820f9ea46026af3e29747bb7fb23deb75e3eadbb8117c200df2aa22f690af97cb054ecb483c58c87b136e74b25a200b3dd55e2f19241f44c67a0a7c35524fc9d718622b6481df8aa562791d8bdb286bb264339116d5b1e6db802886f0b10d35444e63e6c8ceefa04a6e79e011e7132b5881135e8fbec2cb3195c646bbb1097df7cd8dc8d6b39b9b1e29c41e5cd7b5ed7aec9eb088b7a5d43d754f4a3d2cb310bd5777687bbba71c33ca773f2bcfb4c8f69824e908d955911f6f4996cf762c9fbaa14f948986b14293f2e28a9ad29634ee40b919c38424add49172bac28b521b0121470623449ad22b2cdf8b12354a430e54d3982c485375d8382d793992465172ce342565b1a3c3130b415ede642866a16f09104bfb345432026d1bab078b8fa912dd92c61d2837639826d2b45247cae90a2f52491aa52107aa694c6769a4291c988d0a2fa0af9b016de6eeee89ee1d944cab6465657799efff580e5fd86c8f4eda3e71c25cd80e5fe86c8f1703962a99a11295a51b774fd67d62e9e994dc746339e9ac0c39b043245d88a49b33f442256d6792ed4e3acf74d279e61684fd49025a7ab6520948596846b5659a659ee3b61791648303529452ba75146906c53aafa3b419c49d688326c2e14497dce8a494524a299d1c06a43a29fe4629a594cadba07d9f9b9e944e96309e21199339ae0383638eb38145ea9bb3674a0a725ba7f2561fc802bf70ced90a9170a72c0639ee36a8702a109be3388ee34419ce194302ee39e59c66a6f783679fe61cc19427231f28f66c44868642568f0d2ace4967d786cea62914a90deda6ef39e99ce2d1846843e57c5f8b0b830b83bb25ed5e205eea799e07522446810a01e84ec11db1cc6a2527a51ca4839dbdd18dc324a0f5c41450a419e3b25061058e81463348b20a40a319f368a09195520a1854b3f08b11231f28f66c44868642568f0d1ae4f512c549f37a74402810412e0cf1321b76b2d7a3b990a8a048ec44916816a6483ea1682344b2dd0041271b5244cfa3ed20821e920d293e06ba4356b2ddcee38f4ee95009e8b6512a670f94522244ba31d19f7d296976ea36594e96f3b652b5ad040307cdc731e2c2cecf3b4c5888caa53c579046761b9b1027978438df89409cb349bb37b1189f8b2cad346f46cfd51864bd41d8fb845aee3f4b5ac972db1c6f107672dce8a465b7f10b65a336b23368caf9ac197376677d721ba536fc206134090b4fbf5556c541c2b6d3d148d8894345b36d8e3f3078978fc1bb1c8110330f84bc378a9e4a9c45b3f631225f2b900ec91711f9a2f7b18578598a9f6c90b01aa5f44ca89c544e7aafcaaa3242bc2c65c38cc9d31944dffd749d0d3824b51719ab4c3d3c597ac45354d2cd035aec35c152914ecd223a3b321c17664e4eb59281bfd38d0de5efbc422a895e920784ea57e438aee366084315dfc671dc6ac5711c37aec083231020f85300f0e143f04c7fdcaf0996db42249c52c771dd83a636679d773a998684cd918e912f7a0547572042414141c917126592b3e6846a63da98a2ea6c671aaabdb0dd92a93b69c628a5928985da1bc522448f858678555bc648d8a552504cb4bd3df178545b24ecdb104554b942bd402229a97b4a26262ad5df682cd467da681c120b3979e1c5c6b43149a5cf0c2a61f75be228c76daf292b4869be6449f3254b4dc304176ea31e1addb2e91a2bbb9b6a6b3abc22de2d694b9a4a9a76e0b0a2baa56e09ca8b6e4c988ea973eae4744ddd155050505050505050524343af175454b7c4715242cd98e789a2cbf5bfeed09c126ac6c44bcf0c134a332082e83c2e609a89b92d45b0b2f51b64e5d82d55db49a8b9a4c35ed9dd755d87c484b41476d8db4169c6136f3fe630f45ef65d3f56189ef52482dd12cfa452ab5bfa74e8584262eaa492845ae26a12d6b158acb358ac8ef52e44d2b1584bbab3ce12c61ab926f992507cc55218daaf5e1922e9e6b0eb464e42754b50dd52b7c48af2f98007ac2c1dd194c6206de13632eae6c237e2a546974d29fbd4a88d8c7afb82529ae4c54e9ddeb2499692627672720ad3484e9fa474a8945419dc78585cc2a9a5ec846218cf7e1cc731333377283e215eeab4596a027a02ce82a90a9892a12dd8b68d632929f9797143c9ca56cbffb45a524a59474a29e55bdcdd341a8d46a379b4a1a1d70b4a8ed18c716ba446f4b3237e69d068348fe6d13c1a929ef116d91e513c73ebd765c5f1f6b7b35aa7ad564f55bd916cf583922fa94475956afca2e40b8a3869494a9f54eb4cad35d2a68fc6443d975e78e618ebe0f7d50fdb57bda78a9559486b4758c17a45578fbb019484c991b1233193a325cd70db26474754d1260f86d58c1b3d9a944793776e28752d3c524a29b9ddcca98bb4eab01f07c54c12f6b364066d1165e7f8338b2c947c45214d0a45c7801e85a24c509e274e28cab4854aa06e06ac93cef6d8b2c11a3383dddd7d069190be304b1b1586d15a5bc1afbe4a9c502faed3102f558d630b6cff02591006ba2cf8ca300ac5af3e08de9bb179f067a2efe0489daa9c2386bfd4692e8961124a5577907c4520b881971594524af02a9554813f22655589508838e83f0f54854ac2835f5531f25f58291b70a44f3ed050bd0b91a8a47ca24e33e6cd566087f25fa77a6c35d22c14e9055050534af6b7a65634f3ab5b22752c2c0c3e6ddbb66ddbb66ddbc6b227c8ec46aeba70cc3b3fdd8d690363e5bb53a619f3c62da91b936c4db254cbd2972ed4686539645285c8e4711cc771dbb6c99944b7cd7b5a196ddbb6b1e8862ed196684b51d3139758e8486d426d524b53cda98dc8d5bed1f56d6c5de9a634fa3344a4eeb03d6cac6c266c481b4dbe64eb48a45c70903c1d2b6b2e3b431a45ab7d627c5f57258c303a36619ca0abd28adaa4b68ded3458e79b0269e096ef0e7824b963b3b111af2737e68db7d619dbad26f9ea4f6ab69a66ec739235db9fd30c97b968522fd3b9f5721937d4cb786ca8b7a148a0dea612817a1b0b04ea6d2d0fa8b7bb38a0de06d3807a3b8a1aea6d3334d4db6918506f63b1807a5b0b05d4db7112506f7381807a9bce01eaed3266a8b7f1c850af8462807a259502d42bb110a05ea925867a659701d42bc108a05e19050cf54a334cea95695ea85762e142bd528b16ea957158a85772b142bd924e00ea95652ca957e251a1de094549bd934a927a271624f54e2d29d43bbba050ef0433ab774661eb9d668ed43bd3847c02edad1364275cde63a21f2e2f32910f26fc8626fcb67a58664209bf384af8d5b183652510fdfa20fafd51594644c22f10127e3d08621909467e858cfc0a1181654662bf4562bf3112581683fd9e00fb058065194c4d915f5eb3846545da10f9e52c6060199137437e19ce0c2c1b3267845fdea206968df08508bf0cc60d2c13618ca15f26c309cb86cc10f2cb6858806542d408e197f34061590852847e7b0a1596091111e4b7af606159102340f8ed23b4b00c84243ef86d2e5d58f6c11241bffd050ccb82c4bc7e1b8a2858f622e3c16f4f6186651e50d1c16fa349c3b20ed400f9ed3558b00c481ba0dfce420b9601bde1e0b7e1c461190773c6dfde820b968d5fd4df06830ecbea18ff6d32ba0c96dd8c1fbf8d46e361d90f3536f8ed3c5058b681141fbf720a1596f920a2c7afbc8285653d8cf8f995476861d94f123c7e25972e2ce3b1c48e5ff9050ccb768871fd4a28a260998b8c8e5f39851996e9a022c7af4493866539d4e0f8956bb060198e363ebf320b2d58e6f3e6c6af8413876537e6d8f8955b70c1321b5ff4fc4a30e8b0ac670cf1579221cb60996846eb57a221f1b0aca506eb57e681c2329694f0774ea1c2b29008f0775ec1c232d088ef771ea185655f12abdfc9a50bcb564ba87ee717302c5389f17e271451b0cc23d3fdce29ccb0aca382fb9d68d2b08cbb9c6ae61a2c58b6b5a1bf330b2d58462fdfccdf09c7ce382c9b7ff29662bc6205de518cd7d5c39b69bce7e10dc5785f3bbc9f18ef9093b798f11ad1e11d66bc5ca3c0db89f1b2530eef26c6cb4f137883192f43e1f05e1a2f4735797f192f4bdd3713e3e5a91bde4b8c97efd8f0f632de3692c05b89f1362d026f108cb79120f0ee32de4e7ac05b69bcade4803797f1f65203de1f186f33d5f04e62bcdd44c37bcb78bbc6803712e36da705bc3d30de7e52c05bcb781b2a01efa4f1761402de478cb7a50ef0eec0787b6a86b711e3ed3b32bcb38c571a19e05dc47825ad006f0e8c572211e08d65bc32298637d278a5d200de57c62b9704f0dec07825130c6f22c62b9b98bcad8c57d65e785719af7472e13dc478e5530b6f2ae395502cbc69e395512bbca78c574a05e02dc478e5d492b794f1ca3b2abc8fc63b8d94bca38c77d292bc3530de8984e40d65bc332985b7d178a7120a2f1aef5c9a3d88f14e26fb0c8c77361d3910e39d35001c03b25fc00223b3d00f9559c887ca2cf4a4029559a8071e2ab3d00e9559c8890e14c801caf6278043931b6c900092ed4720c9f621f08025db7740039a6cbf869aedd3e064fb0c580094ed2b200152b68f8003f41ddb9fc1c8f665a0d9be01906cbf00048861c9f607208026db87a166fb4c9c6cff05175a88b27d165698b2fd00c83bb6bfc4c8f655a0d9be1224db4f9264fb485258b27d14986c7fd664fbb666fb472ab3100064f5845668820e1c25fcf041e401101284081989158901e004126c1fb6464d1adb2f92451b2c6c9f089c375ad8fe902de6c4b1fd11c0f8820bdb17818c31e8d8fe101a669461fb42380fabc1786c3f84295284ae1041c5f6831c610416db07814b125a6cff832f4b74b1fd2028c480b1fdd71464a2b07d0fd05061c6f63b58a3268ded03c9a20d16b60f04e78d16b6cfc11673e2d8fe08c6175cd87e25630c3ab67f34cc28c3f67f749e56a3f1d8fe0653a440b17d1f5788a062fb3d8e30028bedff7049428bedf3f8b24417dbdf01851830b6ef9a824c14b6af030d15666c3fc71a35696c1f47166db0b07d1f386fb4b0fd1b5bcc8963fb36c0f8820bdbef21630c3ab62fa2614619b6df9279a41a128fedb3a6488162fbe11522a8d83e788411586cffe3928416db5f7d59a28bedaba01003c6f6bd29c84461fb1d1a2accd83eb7464d1adbdfb26843e1bcd1c2f6e71643ee9c53e4ce38b6e70a453f04514251532098f8e43ff964bea5644ec96f4b43be0c956c2d93f0e9c842f2df94538e3f49ec9cb365994f12f13c4b29a594a2b764e72513f529a54be6ec46e32c8a3eae1e5ee7796bd0e819b42986145ddc455589d199d7d6f33cef2d7aa3e779694230c77a9ef5c68b03901802371df86eb035817845d1c7d5c3f3bc8e7a51789e774fc23cb0de453cd653c37ae3edb88dba449f28bcb0577c156e2ca709e36483584e13c592f5e6276b4905b641248cbb096017b1df4306cd4fcfe50346bc2f3b5f4333c6cd6614494c4af615c444f2b6ad0c0fd0464646461b730c9f04a51c83bce46bfe96d75ce9396b92098f773c3a1e1d8f8ec7ef6dc7e3f76599d8afca21fef9f17eea156d6bbc380c0d316939f4ca7129608e712864c21b3787a807ba7a6c36bcf8b61f8c8c8ca058fa02e288f3a0d9820c346aa0c61a7966e0a3f44c4ad18cd6cdc0b1fb28e8495813eeabb7eb2c964bbae48e7f0df278e7ca6377fc538d975ad5b472da4eda4e86a763375e15ab88c97e5d1e1b52f14e3c3a3ed911566621d578e5c5775574e29d8726aabbde4475297aa2f7eea2eaaa8baad109f5fed363031fbfe1a3d5dac047ed512fb3b1adffd4cb6d6ccb75b63acea3ba2e9e43256d649985768cd735ca8b52bc0eb1e88ea8ba28feaa2e5e152e5175e7704967a5ca765edffb38442293f05064e5e99d84bf3f3cd96159bf1cb250244727e16f77f09449f8ee54beb3e0188539e876a313d6f8850a7829cff1f03407b30897db5879107c0e6f066d3d4343dcfeedde8ce500738c545c3329360e8e54bc99141c97227290fc8d4bf1b9949e4b192f0efc64c5fbdce73ddfce1ce4ce7f3f2271f854d70c9abf51a5d818815871e942468b11684ea0340b82a196d490e2c68b376b8899f58ce20c2a62b2df98a4c87a6fd526dcc35b64bfd3ea230d91f5ce636ff8ee1dc33ccf76d849b9b1c670fc02826310fc3413f3d59f25945a5a6fdb2712b8453687cef630ad5422efa4f3e459e25939feacd05dbe1b5b78d27635fee0d0d927d34a2624bb411146dc5ee0b8f1963928f282e0bacda7ced79f35cafc36cf560251748b2afd9c639479ae54ca299b76179e846ddb397ca1c9f67dbd711dd771455bb7755c6d22e5462de5b84dde2ba594f45bf76d3bb735d7719be43aaee36a130ee4ba8d485aca711b156aac3ebdfee657dff7afbdd70e5e0f6dfb9fbc6ab552ad56aa2d88e51e843b1dbdc93acff03c41d5bb1d53a5ea542a4ea51a2fbd5e585df65f7fb55a558e7b87dd65a55bb7f23eeffb5ab6c7a9549e4ae5755e5579aa95ca6ba2eaba52ad54aaafeed5262a956ac5712a95d78ddcd86408091aa45183ee3d65fb2b288cec376e755ed2efc6eefaf5b70377fa597be88fd6798f7aa7d41b0a5fa856fec89c54b65a72bc9e77f63e9b27cbc9b4de832499d61b3d16daeed540ecdef60e71ed7ab689ba6f4f8189e437eff78755a9542ad58724acc7c6b71b91b0ed5f4f05e52bbc8d2aca576863a4f215b2eed5db95ed138f93728a95db61b3ad7a55361cc16fa4f2f5bd3b8847c242ee9dfc42ec73f317e26ad5b28f30d1b42da1705d552c54e45527add0f63b597f56904dbccbb3fd3e0a72d88d5dbb55747a57bdab4d3c097a3d4622dbed294858f7cd93e3a5f649db6efc5932f3e4c93325154529a594524ae9134a2fd7eb89243b1fc4c844c2ce3462d2b0735e9f5a10013448c11370ce30c1a6ccacb758f921cecad339a21802519442bc9b9148b98897be40bc34e96e462d2868189b977e42819da71b6dbb9802bbdd47c26ed86dfb6bbb6b4b43c6d207769ef3de344143249b0d28e29d51e29c42ec5943bc52caf6c52b629845e49a702889961ee8256343f4ae1ef47cc50e49a20a1292a8819df791302076ba2c336c8211b99ac8a1113d15885e0ac4cd880323decd88ce8c66cc0bc188e1921866215e0e43644919d923725b7507715ad0c1a11b08c974a19ab27c7a837aad061faad1f8da32edba9847e3c20be1cdbcdfd606ddaf2a94758f79a685c8ef7d1d4c04da78ebaa1b513acfacbbd7a24d353c240d1791b751e71b1e22dfaa5f8d8582cef43c636537f976601987ed2e90d5c1b1d6f93f9888757e084c049e2f844bf8ceeff9e497f05ffdd27a4f9d7038485eac738d370b3f6bb3ab346fd66a1d45e93c33ef42783315eb127c09dfe5aabb3cb7ea64d5095567ad4ea73ab16021f25d3d12e233e621ab515569e2ac3b871dcd9b75236fb5b96603dbd701a77b166d9c87f431d0ccdb6c77b643db6d429bd02574094dd4444d4293d046da48c73ad6b08675912ed2449a480fe9213d428fd022b4083dd4432da48574081d420bb55007e9200d4283d01ff4071dd441fdea577bd01e7407dd410369200dd440cd4173d0638f5dbbf6fbfda37ff406bd41fb681fdda37bf44fff348fe6d13b7a47bbdad53a5a47e7e81c8da371b44ffbf48dbed136da46f7744f8b2d76ab5bcd6a56871d36d8607ffdf5aa57ad6a557bed75d75d73cdf5d65bd3a63dc7369105dedd77fd7f7de8467ee42a30910e14785f86d3c0441378df86ebf01fde466fda1be99dc4441150622208bc99de4d4cd40026aae1fd767a3fbda1de514ca480f7d4fbcea5d125ed12e932e952e972e992e9b2e9b276e974f9c4442f5c465d4a5d4e5ddef934faa47d227d267d2a7d2e7d3231110aefcf26269abd3f6b4c64df47de00787f423191ecfdeeeeeeee86bd8bbc89bc87bc47788bf01e7a0b7987f0167a077983f0fee01df47ebd3d7877f006f2067a73f01edff5fdf78ff7066f1fef1eef9f378ff78eb7ebade39de38de3edf3bef1b6f1ee798befd69bf50edfe0fb7b77777777997ad4d9de8a58a0b6fde691233f32c32397b0233ff8f0273c3033df4eb2ccccb7a12cdf8eb2ccb7ef5866e62b932c335fc96499af74b2cc574e59bef28e65be9366f94e24cbcc77d62cdfe964f9cea7b0cbfcb64eb83a2cfbb0fcc33210cb1e5816b22cc47211cb31cb27580680e518c798db588671112ec244780bcb43180ccb23f0082c028bc0433cc442580887c021b0100b71100ec2203008fc014361998ce5292c5361f9c56a2c7bc01d70070c848130106f61990306c3f2c82357ae7c3effe01fbc016fc03ed807f7e01efcc33fcc8379f00edec12e76b10ed6c1393807e3601cecc33e7c836fb00db6c13ddcc3228bdce216b398c546580e1964903ffe78c5505856b18a3df6588de58e39cec2f2c69b05ce57b1accb9cdfc3b213cedfc13213ceaf2c2be1fc2096119d2f02cb48389f04961939dfb22c76fe1296c1ce87816545ce9f816544ceaf816543cebf8165239cef8465229c6f01960d9d859c43380b9d839c41387f700e3abfce1e9c3b38bfb560199033d09983f378aee79f7f9c3738fb38f738ff9c799c779c5d671de71c671c679ff38db38d73cf593cb7ceac7378fed4c232f0fc9d5767d5d93b7767eebcbdc77cab479de7d2e85c3d6a35de6bbcab475d83771af7ea51e379d3e0aa7ad468bcef7c558fda8cf719ffea51cfe06de7603dea32de3278588f9a8cf7d459f5a8c778c7e0ad7ad462bceb5cac474de71dc67bea5183f196ba8d7ad45fbc61f01bf5a85ff0f6e23ef5a8b97877711cf5a8b778473d473dea396f175c473dea16bce5dc558f3ace9b05df518f1ace1bea3cea51bf79afe03ff5a855f076f31ef5a8b578a7e03eea5167f17efa06f5a8dbbc51f01ff5a84ff066f3d7a3c6e26d82d77ad46bde4e1feb51ab7997e01cd4a3b6e27dc581ea51a779577120f5a8d1bc6befa01e35156f12dc837ad423789ff9ab1eb599b7081e548f7a8a77d33fa84741ffe020d4230ffe7a907a04e41d5ca81e7170a087508feac70ba9473ffe0fd5231fdfe022d4a39ff7f808f568c7797c483dd271d789d4231ccff122f5e8c67d0eab473db7f1583d6a5dbc917a149e7512ead177f044f548f5d54ba847ddbd9b508f363a6287e01c32f17c20f32752bc0251bc07a6f300c57778e24ec45c8730a78013cfa1894f00cc71587a932fbf4cfc86256e83974b40894700048740973f40e90ee0f2067ce03524711ab69c01487c011eb802b43c014947c0113f40073e83119721cb0d50c40bc0811300cb6340fa00ae5c001b380c449c8995bf50e52e0cf116a89c05da5798f20008f12552aec2d1954479120d1c0994a7d04647a1320b157d56998582c80010974647de798e1c79af61df6a58fb4e63f6aec16cf6a6010a6f3c28a0f0be93c21b8d1452789f81e46d0612246f3b49de334892e42d0325ef329428794fa9f026430515de3158f21e63c992779d00bcc5084000de61acf0a6b3c20a6f2916de60b0c0c21b062dbcbf68a185b7172ebc5fe0820bef2e5e7873f1c20bef2826ef2d983079bb0086f71c186078cb11c0bb050210c09b050378c719c000de5031bce1c410c37b050478bf210001de6e0af05641010af04e8101de5a18c000ef2719de59c820c31b0533bcdbcc30c39bcd01de2738c001de2640c01b0b0420e0ed9480f79a0424e05d0205bcd5284001ef2b16f0b662010b7857c180771a0630e05da3e18d86061ade24a8e14d450d35bccf34e03d820634e02d82ca5cc4016f330e70c0bba9321779c07b8a073ce01f40e0411080c05f11b8071188c03b90c08148400207b2e11cd860c3c71b5e6fb8e1bfff71ef3768721f4d9abc070effc10187f398c0774c600277e5701d39e4f01c14380e0a50e03e3afc860e3adc8693f73871727187b776d8e12c1e1ef2c0c3c11efef5d0c35715b8aa0215b8f7e4dd9327457cf85639eb03b53efc3b52efd4028b2347a1daa7506747525178929ac295542457a126f992aae401a82a7c85bae42cd400bc85bac25da82cfc85dac29954170e437de102a84c3e800ac363a8023801ea005e801ac30d500970196a013e4335c00f50653802ea0ccf40c5c081a8177802ea01ae808a802fa026e00ca80a380d7501afa132e00da834dc01b5863fa036e010a80e7804ea032e810a81db5023f01baa047eab0d6f526f380ef57e02b5c973a8389c027502d7a1e670279502dfa1ea701eaa93f7507778052a0f7f527bb80fb5020fa202f1a29a81b7510de20da516bd3550dbe81da53694f7516d0dbca5d48ef216a2f6d17b4a6d296f5a6d21de546a4f790f519bf6ae529bcadb4aed21de44d4aef2de406d2bef2bb5897823d5dec01b4bed2b6f0ed4467a17511bcb3b4b6d0ebc8da85dc4bb03b5b3bc8fa86dc43ba97607de5a6a1ff1f640eda43712b5b5bcb7d4f6c03b89da48bc3f507bcb9b4bed24de4ab53ff0ee529bcb1b04b595de4ad4eef2f6521b04ef256a2bf166a2b697f797da4bbc976a33f10653fbcbbb89da4b6f276a837987a9ddc45b4c6d27de4fd40ef386a2b6983753ed27de51d486e22d456da63799da51dc02f587da656411f913641132b5437000d429abf384cab31f2a5b0bd4b614ce9b22521691f7a15ed5937a7b7accd87386d82118af672b50ef8e1eeaad3cd41bb443bd22d44b820ef5721a0ad4cb58e4502f6b31817a390e0e35f6baac3ccfcde5cd0ad6ec4c8fcba4948add67cf0629adcd20797a6f498a526eecbaaedb3ee946f976aded1c7b4c5043438ee51a0da6a4b024f0d2d49a07e9b65191167d594009934af2352fbdc8a0297fc0b3fd58ad1f0e48c27eba53db7dd54a3228fc1cc3f1878ed725c508efab6016ab6e0553d048affab089f2468e9141f35c954c634c3aa708613733dc797074a39ee442ec3aa674eb10942b7479f2e459c352d03583e6b72f498996d3cc41b268922ca771419375594e3347c97e1204a9e7f5202db7c922fa4297274f9e3c96ca1afda0f8c033d007d630499cff56bfdef779a01b4b6f240519f3948c8c8ca0cc689a336c2ca54f51f60e6d4a67d498c2c97edceafb2ab310f755bd3f30adbe74e76db50a917ce7daf7de40192ae9efa09c3d19645d0c5866a1ef6c3dafe32af3d336676f7d1922e919aac076ced73cfde5e863b367f33190284a97bc7c31b17cb6419af45ff245b73be1f89ee7799e373ae9ce8d972f0f8b2839a43d6e412e8f4eb8dffec6bdebe5f78f4c9e3d3ae9c62ff3dc38241ab9bfaf8d8920403d7c449708413e4c2ce8646e67ab8a420f44d18c7eab17a04ee6ef6aec84e8d9f78f3e0a1041e499d14b299ad1518af76f54051185f3cc683b66dcbbeae40b3752a1dfe848bfb514ea92b28de20c6ad758d4dddde604f71dac6137dbed8b028294d27b65c4db48361e0b6998e2eaaad65dfdbe6c657d1d38437a1b97adabde23fe6bf560c5eb60c573e802dbd6088415c7218f8c781ac6eba9c62bb6c6ebb2977bb0adb767637ced1945c9c4b6c2b3dd5867d528e081289ab16a94f04014cdc21104c177f5c06d030fd6f9d50ee4c1dc23ca17730f285fed7dd543970c6145c27ebcf73d2e810be4d836f2e89221868858a5d55459b1d1c4e65a0a47e8112dd48ecc22e5919d340d8f899a85e4cc42e575dca6f23a6ee3366e3b521323dea6d59ab24c6d63b630148a9fe8c6adb1fafc3eeb8adbb8cd68dea10121d16a4e43947bba91c6c7407753a9542a9514f1b692912d3a7409d4c87c1a6a0926698b122d4899a6eee9d261aa36caa9c4529930536dd464e7e7b72db2871509e4c566b14d5d421926329a9bd7711bf53a6ea374a31b35236eb449698d7545f471f5a0947a513cd125fa8822162b4e3d96def5571009eb869ef8e26c451350525df27881c414cd82125c7102d55f07fab9296ad4882237e002099e30e3ce9d1a9c2d3a4e098628c36d407f05a9c5b1d495a666a62686bd1fe2c6f8a8881748ca095296454c230f0a51fe05615ed0d4815d3391eadba9f77d2a90c71e32625f4e2421f7237282deb9da6db77faaea4407cb2ce4852dd8102ea1efd1c9e98ced17e86d902fae6377d85600b23dd2d056be4e464937f22563205e3965e5edbeba6cd25d757939c544df89bccb7f5e75d25abdab5f6deb852fa8ee39a971b22acfbbeab6b32429f516f9e2a6dc9ab26e916d24f912af8f9ddceb77b9362903dd81c988462b244e4367caf630f9c7ac4d973883e4dc7aba7355b008830b7b452b3f44640e2da16285e3daca197c0cf435a5cc3368e41f913da5837c4929a59452524a39ca518e8e1b6b4972f5e4eb229501d7adbe6fd5715b70ddeafb561d4746092fc65871d0b67a22b9aee3c0745cc7898053718d245ff20c400175f1cb63bbfa54dca6aa9b9d96ab9283b6772bbb6d392c11adf76f82aa2a2d77014b83c82039be7ab85c736b8134c80da28f1b6f7e612d3aaee3622075a8604804372052a739226b0b9bafcc17a74c1565ca38f1217dab8debbaa61903c7aea90b2ba35a085729bf54973eaaa8de367eb5eafa6069f3aba7b7cd6ef6e7c641754d3368f3d264e55d2b292dedcf8d72e3e6492fea8ba96293c23870ec681dcdc9a339755eb7f16b3b5755b4190b3968bbbcf75d6e38ecf6db217dde8ae3d7eac9fc5a0eb1dcc675ddc6417553e98d1d8d45292bf148b26179ae6833a8a3cd8e36c5710176bee9d82cb4c9e6cae24666a1ed1b1de9ea89a3ab21bed0cc102f065f23e594f21e0bf17f885c9879da59fa985655acd2706006ab27c4d5192b17889f186e4455175f1262f7b45a23f6a079126d287186e821b1720254a24c14b48b2162d308b4cb07542a88aaa65ed44694ead5f916e6c73cb30185d149670e49392a7070557c1ed42a74d32d9618737e5cbe1f57135278d4c86e35db30a8a28509c698f17dc6886d025b3482273450a60a0bd8ac51c1ec6e4a631877a6382171c1040b668d0513519bc3cb3651fdaeceddcfcdab7e64aec66d49be7adc94eae66509f131d967e161d8a665d3c262b1865879169494956729cd580e726a543ad0e58b1d373379d69284b553910792d89440a9060225dacce4596bac3cab36639b07a478c1115348c869c14c9e55022bcf7223612c2bcfd2c2304a87ce162bcf4a62a211ac3ccb8a8c51cacac232b2616dc654f040133058811431599a98c9874e12d66aac7cf8346331bc69c11466d2cc19c365261f4249585f61a54bce0698c2f880185ea898c9875212d65658f9704a3eb42361661846cd983963e5c32626fac0ca8761648cd6c2a419a34a61d48c51248a48a34d1d341c5063260f4a49585761e5c1a9192b12e20e0bbcb0d140131318b334563e349ab1a2326a8e88828402178860aa6b563e44920fb348581c86512c148b1c2b0f423151909507d924b9b1f2600d74b23246c41b33ea8051a74a9e993c4893b04663e541a41913d28239456cd1040dc07862269b04561e549a3186928325cf962a63c01c3193079724aca9601a03365db1f2e0990f0fc3261e3c694cc9987887895e961a7961e53fa5192bb2a2f4654b124bac81e68c99fcb724617d86e7542102323cf0e48406accce4bf2609eb1158f9af3663498cb278c102355858d1c54cfe7392b0168195ff9e68dd4cfed3c2b01927ce16183351b5f2ab3b3336a3a23ea3556dc6363a5b8e58a0e58a193833f9959384b5991288a001ad882eea8400895947cd18c389521bc2898a1564916626bf9292b09ec2caafa6244c7e6547c2cc306ca65985598d593531d1adfc6a8b8c4d2719d42b2f56721a130cd18604429cd1812a3379d51d09eb32567e653463322c45c4b1435303c6163332567e857486955f6591b1d54c5e158761b38b8a8dca8d0a8a897e587955d38ccda525556dc968c6188e16567c61461a12ac19c14cf6182bd988096304493580b26606b30ec18c711d19345144194a6d8cbecc5a0a2baf6212c3c3c3b039a1a451c78e84f11d26dac0ca7b5033366993163583b17559794f69c68a8838e3022b456c91c3549b31cd18d7ba68b3e45403830e9899bcd724615e6dc6f84d15a82ba4aea0428b9599f724619e1b2925e51949d998d7c4443a248ce53b3bf249a963c3b98162a21c569e9392b03b12c648302a9b9ab85a13b7d9b9c34438ac3c673463b6042b1043cd192bc8126626cfd124ac9fb0f21cd28c010983052880228618366c662dc6ca734a3306003370e2905933022a8e66f2dc928475182bcf3149983c3746c2ba19934a4a514565c450a38a295d98a9c11a33d94e5816e30452a4d0b860cc0ba6ccba0913c038538416a53388e862d660acfcf68466d3c230094542f1b19246db8c588d140ea4408a285290e1c44cf69265039441c118a42eb8987367d65fa6c8d891b09595a76618d65ad02626fa6caca1644b29edc8c3654d1934a820a366c6849548f2348b84d98075970935d9c8582f2db9e9a66e9a35f96934634557f07c9962c454139e2a66f2932661bd8495564861c419222883036b2c31939f4912d65eacfc549a3119cd0e9ea9139cc942652695b0f29309092b3fc74818aca934953ad2ce1d269a5636529384b19384f1931ba8103603c7d962e56592b4226334cca07e5416db77fa3012483863e5bb36634fb2e8428d242e508caacc6483004a6a4a4a8791316f26df63ba368fccc03015bffaf2aa3a8b84b5ac7c239dd1c5ca211584200d0aa0349569c14c2a59791d666c88121825bec0019344c54c7261010c2e43c0c00c9d28303329caa82943849167032420a2ca4c7ec0ca1384e00b284d8881a2a993b002089ff0a8a44b17094455889899010100000020000316000028140806c3e170602c8b5451f70114800d888c5e7046170844698cc2300821848801060000004144046068664600361bc90fc54ccc6f73f94ded1658190351bd2d5a70dca9c95f32f0333690455aeb2b00490be5b8980e8da8013d086950b11ec2e471a7f66c39fc3c46dbcca0647e3cbf1b1f34b6f6565bd91b3c7f66ecea2d2c8b2f680b11b2eb4337b4f931e0648a0f49b27d26e41aa33848f698a3cdd8a3f57805d99d11401927edf2c8b1d36e40052338c93c0754aae63196a18730b4acd69f31e8b6c8057186fa41b6fec2bbf854408c3382ac28c0a73a9e806d0093add63d7d4e27b82615c27c5136dbfb6d5d8eb74d21b4ecf7fd2a97c95c6258c528f6981c36d8e2af66f2d0f3d67c735cbd2d7ac11bdcbe67cf8dd61dcc8de4e4dd8947d0070bca6ad858f2af22194f5da6ea15e323b94e3643fb46e867f7c75084c5c3cca17248a923221892c814bc74cd5c0ecede8ba6be981d9354e56968dc9284c882aa93c0645def86e496cb88a1002301f954b71561f5e18ed002df49e27bf41782400b86940ce60b6e32999a4eca91a938f6c187973c86160f77af973e52ab90b7d2738b73d60996f5d852dfe60ea0116c90ef9dd15c5ed42781836203f821f20bcdfae753dda56904dd721ea8dac9d15d985be90ce8c54a2bacc3784364d4e17c16e8fda9ca534163bd870e8669861d9d99a717fa022000d57b4258df0ccd5451977943ca696b19d51fe5653a8fc6be837b0cd09cebd543eafdd1f3e3d6aa18359cc4c5967443fe1913aec4b28b6b81ab6cabdf6e6d36f24b563717ac0647b3f01f3dd7f5080318043f990c643a2ddd4df258ee283ebe378581455e0366b100dfbc05e895ed2cb1212996544e900463e0541281b3d781380a000414267fb388ab5aa9201a6aaddc73e8728ca33ff365f57edbd8e71eaccdd72a26848de3cd0e0591240510088006b37ffb5531119dd15bb68e7b760efb5921a6e8e2b4e78e911c1971136015a13be2e380a4e598ba6f0b49278bb89008ca85b9249e54ea3b568a1ea1023b632a6203b040a94d8216f4339f7664b41ae2587f49b0a0f6b5ab942094a1ec49e05260a56103f474b20323f417ddac61582ee55c5d42df8b373afa591a104ed3730a7d5cb4e6fcf8143f7f5e199755b2c3a3dbf4c60eab2017713416033e3e9fe7eac72edfb6f80182c83b089a261ac3b04cb05d602a29b5cd68997a6ca14afefecefac56b876adb73032f341205eb53f62ccf2ee4d0b411e3df5f31d0d7618ce276b693ba387620992fab45dadf370b9541c642ac6e129c4115b10d40789dc232ef233b732e6b1abea3c8721cd6154fedfd8a04c02388ac3fca5a19e307b70984cf008a9ea221a51bd2d57cf44a8339381dccc1b4c7123a0bdb082497dfd74f75ab1b8ec4005def07ea5caf507c755e35e074c5189c5d1d5db3670be19e3743f2894316cb7acae04c605038f180d11f794f5aa18a27ab8bc3670c9f7b8030340584b952945acc4dd0d01f33b99cdc2a213049a07c5eab21246367b806bff7bc7cd457eef6d3105c148dcbd1252827918d207ec0aff7ec9df93420324cd83fad6c20be12bbf2b01b9bb595788ed6861dcc0c8414f0a4f64c408019cd35009ae0ac913248386603a97e3c570c667e1b347c222be962566d9881fecd576b0006098aad58393a044166e15ce0378712d600ce033228da4ac2661279d67222fa0575d71a247ce21a6361d9a5e3c8f5fefcd332e58aee1571b1a52349d2cd20946bea39ae0ea448aaf6b8a321f60af11e1069dfdd4583a8ca68a9b5f4fb6d3032ddd35b641dc9e3a9a65bc783ee481cc06b030e56cb73c176f0511306e529fed41b913db13e11959f9ba75f54e77a04aec7c63fd91ab67587777d0c6483bdc75dd0fff083bba9f51680dc69c2f87d990f229b62670481558746859b24384a3d9a99d7b7daa59deba0bf6649eb6a8296ce95bfec8d539d3634dbeb0b085552b7ec18d14868d248ca46b8afba2af3812a488c8f142349eccb5305eeffd824231230f202d35fad30d24bc64694494e2026422901f9a718d7ece3c7f6fd08157401ce077b0e2c752cb53d15249cb72e654bb1caf3fe6178c235e4450e68f6b0415b69e03a74af88d253b1dd64023f9a03e6b517ae5e90adf489aa04bb82f571097d1401c7a218f692335860981c135cccec562970358710f268c66fae342cb7baf1e8d1194b27bc7429147a366d3123bb556fc0ebfe0887d384083b000a0e2dfe38759638a8102177109117088a0fbd4c6949c13e83c7dc661bd2275490569695c2ef2179f4b8be02a221b12c69eea14f3989c72a7783a1076de9c383b82db80c565677088adbbae745bbe509e7a45104ec6c987edcb16374f1167c1ae657672c9a90c6f780fa1443b616c1b5e81e8b69ca1cb43178954b55e2176ce541db81c1348b115415d300eb8af82402c65f3ff9485cc81cb723bc4c77f7f8b95fbc51675e0b1ede5ced55ef4f0c01e73134ca230a0fae9a5e324fcff84f6b2df8e07e237ae9a9c87817b2da642a6fb4d321a73439a45342d0897821fcb71526700ada0963f0d2e1694349d70be3fb2493cffab09f14547b13b8a72f30d4972bf422884b2cf921efb9bd8151445a0326e8a6f77549cf8fb67418f83acd65ab9bf4eed3007cd32650bb7bf2430a674a7ee34cd9360d3898ed608ad5ccb55ede1a88849f4f69c55888de418ef52c2ca3a0c2532fd41a494705290368b37a5be52aebedcc312ce5baaca8da39bbb9b3e0118b5d5a8dc90321bfa164c5827497822be7116045014a53d01c03442122a0db8006454d4c730aeab1453e776bde500bcd05855045e9f84701d73c34270934a1b8fe262ba08202e638e3080ecf5f9146b20ee02642bb83176152eec5a203f4dfeccded4fe0c47e893ae811f12980b0c750ab772d3414688d8fe67df95d2591d95446e23e79d3b8a261da3a215dea57d69ca8a7b1b997741d001e97727e8c3f4a74d52501ada13684bd3509adceccda86b21f34144b2a415fd8631ef86a0c4d0d32de425637263c48ec9d06fc3441cf36fa642101777b18199e49fa732bc03996acd81402c86fd5761d5ca01530592e4eac0d5d058840a3ee83d57d3d2c1b5fb2385ee9ce7d3f2ef2fb84b41400059c623f84caa6e43b16f25001cb90534c8275ab1ab9f0fda87db940f4a429ddfe05baa88ca24061f427a2e65f652334f5f27eb9a0c2ab0372ff9764ff787be6706c143ee8e143b7e9a05c89d7abeca4531289bb8fdee99b0f3d0a2fe914e61c353228f48634a6194ee78ac2739da4765353fe4daf891070c048fdf0c989d2eee423fa4716cb1408c0ed23c287f7d79208228ec084210ee3887ea85d6e26f043801c0b4b1c413dfb79936e9f1974a85c417df72904b1cdbc3679f104b6e9917eb672478433f143cbd70f6a9cdac6a63cc7be4c19d4503cade1ded0b25fae22fa422194154fe7db51caa829368f01e51f228568bb692d341aaf0400093fbb46033cdcd5fa64fb01984ef7a0f1196b9f0e9ac356d9e2ecab191a653595625f2a412c717f873c9b7f32f4195b3b9fed5718dad1606f50b53e716df61a16fb8576e4a6b906d828c575b251d88d1110f3961b3fb7e74008556ed50233bcae854f78e96837bb9c2777fbe314718d4759463e0a1d136dccc4e054cbb8c889b1c72846e6abb60b69ab3623c60406258b6469cdde28832b060e3f541dc24171a7c2fb9a4eb2f40ef628b79ad5ca6241f16bac76f4c8c6d752b0a3144fcd1b62a0db0fd4fc99147aa72e81650174f4d2ba19542a2ef2e5713874477722ba0fc5ff81cfccf0885b3a015ec400b12b769e2f469bbf5a78314af64f4c1f0460ab7a30e60f1e82bebefad895ae45a931daeeeaf2d0c519b6816c090d1bf1f373df338fdeca5bc567e5575ac8e1e75273afd52adc609b15b0e552fdf1b01ee6ee32f1996453eda38bb0c0c50300ed6866dba9281815000154fab51f248b10bec2b643dc32fc967c6b48fe21bd11f592b3851de809e10034df75cd0538c0ff178be88fcef82908a3fb83a8ae88e82b9b455e44311d9cfc70d0d9c9da2bc65fe53f054e98b8739860b004dce1ac54a952430d3207bc26c653c055b191a633d4dfba733c4e49418d4a29348acdf4bf79bf84e929bbf03b3812533968a3a96d9aa184172e9f8adac2af0a48a59f6dd7fd00b22e24858f36a0d9ae026d9e40afbc46f701a9aead557924ac6ccb5e1b4f5617d9fc9cdc3113ca6950d9068d6763b8feea4a98d39e009cacb1a129c103f951151d05a96c6267cbd8c1b4040a265f428e070a0e059025fa4ee733436441e4c416071c474cae3a839597ac7601da3512b2693905ef8fbfc49372c10d8935702b0829d46806d75d74dc59ed6ab6118f3b1978e79dbebf3a705e7ebed564f48e77f838379e9bd3c7b6f093b2a91d08e1230c88e10fdcd4bf28284091de464d6c09b5578786c1d07ee3e9104ed48bff99fe9e8f69dacbcfdef5f94c783a748be18620c1bf2c29d1d06909c6701c83f5d0d30a0a560762b83bc3bd362d83580ddc8500a622663d11eff243131ff48545fd73cdfdc100876950259222c9bfce8fc28f70bf04e2ec11964148439a2cd064b53c12bee17dcbccc7445466ba9e7ba2e9106673c9898d2e95dee0d645d73e9418e0d7258edbafa079da67a4ef663fb4d1168a977b01b85d67ffe36e52865d430dc2786c378487ba6e846e9bfc0ac8bb6fae5b25dc8a6e2279a3669b92de64609573118b10c051033eaa187a273c6ccc8488641b3119e9434fe17ef719b6a7c2534ae1847a8ceaaaf0e665e5fb3e1902ef303cc28526ccbb86bbd85ff495d5bc149f956be105457c77c879d66760cdd3140efe14bdb00c429822568c74bee0a5985038da6d2f7462a506a090ce637fcaaa940429ed3a2e7bc67fa04e065893954cf0890eff1b9df22f93dd6d1b389cd9d0bd1c9db58323785a586999e4401de03c53b8f9fbca20381aff7b6d5435575a9d6219a8428623460334fc499fc2db46d0c4897ef9e3fe5d13dd43209e6896752f87e846a3642515818d533b848bece6786a6a342b6074e5c23912f9dd4d38912366bf0baa8b085b1cc8b7100f68550c733d2b9b412c8ff9031f29d884fa33529b18859e36e89709392543fa31e035e4dd98b90d1c128059dfa572cbcf897de0daefc91e3beb0422ea402a8ad8324ad8afd9f96fa023e1091ccf58848c3fa1fd98eb0287d40132ab6af31c444aa56a4dd404154c58045fc3ab2100fe398341ffd4447725a2db79be6b5ae8ba4ba265055aa8582a69abf241c5416faf74f537a16bf1ab45e99ec30d8a8f78a4b4b59e6a4c00ae6dc0a3b2181b3dd707b2262b81230acd56b0a6a3a11f734acc6c044e2ad710b180ca40c493beca3b78ea2b3e88503749fa468d7bb89445baa167178c52f69802bf08ad7c0bbb711cbc67242ca8bc8e5e3b22400097af79d7171446daa115138a8acb9c756c4a4a9a0c4c0afc1ef70e7782326d8ee14c1f873f6d9a0e27ef845660f2354340317999aaba7c72353baccc05821c29829af1cf36e13cab2893e7296413c667b4fdb9e247c2de009762c61ba0727692cb0f76f90cecaea812add80aea8d7506c147798938c657347be5a1c8c40a3c7be480e686bbd35110d4209b07fc40a24f5168fdf85382533f27bda9e0f70363380ad823cec60db5efd9448af601c801f9232434ddf261a3677a73ce61d40c27535aae3e4c14eae0ea93386cd20031e3836bc27bffe9acc556972afdc523afca44562d66c1cccd5fae7a71ed8faa3dd3855c527623a934230bedcd390f5f38f03f15fd18c456e5bc9840c72db92d7c331f830fd180b7d5f22849786b9694c414492a87d27365484acb8a0f511cc54a39292628472dac94ab62b9c28632f16994263129313ee2282f82832b9135deacade795b5cae318751710dea6ea23ee61fc5014bbb384cfcfe531e0e67567b152667c1465218642c9b8f08909e357d029a1d200518d5a430d5baac6a68e796e3dd26037197d57e777e499329170d8e56bb119f3dd7dfeb30e9e22b76fb2bfe30e3a3e01dd8c70b3b90cf29a5ee361ac1d438257ae2b81b2f6638d83502d6e3e49534a80d206284501996253e351257c4a568ec617a74730219a69e2f80980d33b407ddba9be169e9ec67c2ad6a7734dfb7c417cb3fa7f1674c51ae3312352a1f390f1c62199a879c8a7371873d7965360e95b76c53a23520d1aa536aa72c18a0bf85dc414c4d2bfdf44815fed07306a410711cbd735383dcc010dff3a78ebffa88f755a5c82c96aed69efec07ff3702190ef6e619f299908b0e54cf68f02e5719fc3656374427b8413fe3ad39df85f5f75e42bde3385486a60213c025c122dfbe20bc65ea228696919c59f69b6feaa95d58fbd290c8f6398670599f40689a450e157096903413a893d41b7b08594ff67725f55bafa2703c64788a72d827b95339c26cf6ce1bf471be074f013b97b49535a94cee7736317de496e7a2a1c3dbf5b70912fed8fdd14cf412f7e9090d440973c744972a4dd9516bd921a57d3896ccb396762c294e484994bf96309476866244cd15c5ee05c1c53975a556573e2fa236a9e3882b91e75e3e777a26fe1b99ed2125559a14840c61a5bde10807d4daa79adb4ff8d08c8483735e3feed1a9f3946aac120f13d63dac04b0ccabc403c03b70ea1bbb3da0188d9159c2c6a5b78647d5e28f1bd0ec47ebefcee6862ef30537ba7d9b9bfcefcb324829319455a173d6fcefcaa52e619efe379808073e8a822be124c66a946c7a33683c447db4cab8783dd31691656c94d56114601f8b5c4b50ada84971737a0419956b5c251e77e9c5cc414170a00cd2a36e64109baef8aac8d39dc9da209766a40c9f646b661c5d9047788ef7a857b40b4f6437d818b5dd7882707de9bb8ff643bd7dfb3756a998442ba1ab438cac53701903f06b8122e8fed93b5404b70b964085f4bb2a5460108481e82d303ae214ee4d01596caebae0445281d4abeff00a527c275ded3579414503c38f7a82189a0d582b2e9f42afe3b84528c62a25a7e418b63c876ef84f3fdb1186baa986b4ceacc63d8226a68de07daa2e7da59086a021387ff4c0c9bf6a4746caf7a2334490cd475df4aa2324455b698095b270ba1dab491751c29899ea85239296e60e70124e274d5c3f7a1ae4aaa158f3c00bf7f6d13a7ece60316b1fc3ccedd87897f69c71cc3599948b322e653546594a926224114ab72fe51ad827df1d22509112903f25f5aff5d21cd58342f44bd775c006f88df50ffcb90ee5f8952c18db9cd39c168f83f0dbcb5000c08d9e1f60a50cf20d22a153b749e5b174adf9bd17fb8411ce078d8c84c22e2b350bef04872a97b49aac80ab134a809495f4bfccce32ef10a83d9fb74765e41c0d6d4b15fa50f15cd23d9557c2384e0f696ec85fe96faf1cbb58fe9c72ee0219999797b7c2992abd30a793ebb20b49b250e7a54732d72d0cfb411500a35ab32260ca0501ee27a04f8b081b6a04da0d583a0f17c6d4f291658dfba3085e022e519a1b17ee31c997d3874e48cbce1566b32174dc64b587eae45031acbc12f5b5be332ae03c93f987570d10dfb30d08ce1a7f2566aac08fab95d7900ac5cd88d0f703aac7342ac5917243485b2421dcd7538d8150bb0abfbff32dd93166fff91deb4b9fa0d7a8cddfa8e4dc9d82892d4c3db4149d87bb11f48705d0628ba9e409e80a15c991acefc05ed90bd6630cc4bf6358416b9e5a872871c8f8e9a37a9dff043dd0bc055e7033ec715b9ccb16dcd9ec190f4213f58467e50865e85ca358cfbe4bcb2c28cb174b5cff0da6de42a73b6d2353a605444e732f8664a81bd5b3571ca5c891e6be6b743b4f5489675c025aa9785e8da4a2d6ebb495d1562b78d0b802239e683c5188510b3f15e98ae99ab843a7fb8d467c85a036044febeb01a40212e9877e99e56cdbfaa6fee4f5593145cdadc8fd64a17904abf963e5168b3e51999510d4a2ae1652e5ad94989b8f3e1bd31a43376c8c9e4e87462fe35d0b51fcb580d38096b349617eaaf3d2bf3b2a09ab434eafe4f56b46869faf2024a493c5d1e0a34acead44b7142eeb7f924e239cd9adc458c15cdceab6b8e595ec4a418e75ce4a532bf54fff27c42518b2cc55a8f42d262a2cf183951e58d741e79c0853ddc63c39aee43a54151a48d1c1f1c270d8fbc0a288ce01a23f3c1aa84934291dd0c53e1a0e259968bd4c9319c30ee3747dd3653d3d5ad4537c38710f152fac83257ddf5ff51b82c018381d65f7cdd1ee1932fc2280e24f72f784d52ff1e577f69f477d48fc4b17fb6d10184386b616bd4f939c05d572511beba4ff5c7ceeac8a515356d22955564a16c21cf0e2a769d775d07c4250fb883fac6a101a04b6c80799253f598ab55738b51b160a0c4653e503c561d388a9bc0081d8fca412e1d018a6cf1482744b0403749aa93e6d0411a2d971bb870400a5c6490f2615295762689da1c9b25303088e598bc50b000aed5d66e92c00c3b45e8764068986860646bad696644a2160f3b34e0b450090be4b0bc42a518cf45325e2b1314c136904e99e0a068814a77dda49224483e17d0f29084a8d103e4c2a56afc410324793e5b7061010721d8b1f489128d00814f11e4556c7d7b5238df96064220644912d5791486811a35e64e7c648baad74e0bac6d1dfefd14a01a9ee42fa328ab4a68e547126e970f7cc52d9094a9354291922b952ea2f4b3cb925eb7497041540e06662fabb645af966aa4e9abede9ad66e9b2aff4d3f474e2b8f4e856ba7bf8fa795b3a7d2af4f0f21bbedfc40b9845059cd504c88285bae2851d0280e7a94e58d94189e14f758ca6a963025604aaa8ac06db1902d1b97d5900f7bf9699f3f6e31e75defc0153af10a6ce7a104542eb706e18410f40b7832debd9d4e6e9fa7ebe8f079b91cdc5e0f97a3ebf7723a3abd1e4e779381f841f806113bc688408584d729b12f9908be4e381a8a31679bcd446a9a8018a899480797a622324ae15efc3b231f9a0fb1032a10f7fef80dfbf05533f6eda04892199977fbc9d908baaf0ec00addbce3117baf2d621f6186b2654122c199008a48fc2c9b6c8e44a461d34449cadc26c46912e1cd954c50f211471ec994f0bbc1f1cc4a56df4ca065c9f354a214e312a62f31e448741113669518d35626fba65d9e4213010688b9d6e4cd83f43bdcc425339634e2a44adce10aa29359ed4e9cf424e751977d7df2ad259b2e409967502cdd1c14321412cd769f4491a1f300218ce2f628c957393724c52e0e873a550a134cb1c67644379b62417c55b5f314be503197aeed432acc985d3e399585565c9e52151488e9759b56716cb0926b56c84c4bbc205b5922b952c52b7fa55bddf02b2e112c14090baf77ab0f8a653d79ab65c882f6fc78d7ca528a9ae59b3fcb6a6f6a98e5dcca5df0f5500c50be429c9986348e0de17b3b5cb13c3cfe0651d20db1568744853e89cdbc13033a281a59f11161db478ab516491e84a41d49641a589161e847869ed0a8b0614992d18d044b4e828f3c9909186538949415e1a92c04adb23c109649305986a16f590f91cb32a62f8361c04c8516b31e77ccd2786626a29c59089e66186b95346358c20564b9eadf720133ce03a32ffd40eaa4007fa7062b9e32d8f62420e05300d84f19a29a4db504f53a701382ba50148c8652f012858251140932a308908d0280825406245208f24941a052aa8074a901064c15e03585c06eaa05ce53118c4f018043a50029aa0e5ea932584ca5204755003055034cac32f0b4aa03fe2a0928ac2050b36a80a05500db5630d05b69a0e9aac1b2ab04e65e09087d15800bd6044758167c62b500164b00842c0044b27ae09795606556e0a56b4f05b42af3a5bd619cf60497b50b34d71e80b33de32cd60454b71430de2ac1069706345c61d7b33d0ae5aa983ff794715a08a47551b0b02b766ab147e54943185911cd7804234dda87970ee24db202545d444aa944d5049b55f0548b1ee682897b6d85b0a3c898ac54560b3b5325a675a16b01e036fafd0d0620b7bed01d8ceca433bcca514fe9cad738fb85dc01298741984be1e27478764b94fc70b1aafca8708fec1c2803174bd20913e2a6b939725e17a5b97432796a51150eb7c37f37952b6554a1ac08fc13f065bdbb5d9e5e5fa7c3dbe7eb76bc7dfe0eb7b7d7c7e9f6f27ddd2e2f9f8fdbe5e949f82cbfd800b28f2764c9585f4d7a5b85a20dc3e0ba7a0b6c03a690746f18d8e6ff216d6e3cd8ce1c036c962db41d9802a4bd63689b9f0fb4bbf3601b660cb15bb6806de00a91f60683edfe3ed0c6cdc3ed9831806df942b6815140fa3b0cb6f1fb503b370f6c63ce10b66516d80e4e0169de30dcceef03dadc3db48d1906d8975b601bb0a140253190af32949b6f035863429e912cf2f45d6997b785981346b1b0cd7ae02a643ca15edfe7974a4ecfb731a1867af9882d805449fe826839efdf8a1c9cdbc9980ccd723c431a5eb93098d852b718ea104527810797a21072a0d8061fa66c32e309bbfae1bb665acba2ddeac65eac90d275499bc0aeabc87b07b6e4155b1b52164c3ff1b349bc1ddb7fb110e376c8fa202784aa0b418d7c802e3edbda70dedb1bfb66177cfb3563ddb91fef9636dc76f7c5bcbd13cf7e6d9877edc67fb305b77dbdb16eee8ebb4f1bb61defb63f304070ddc7e7d53f87c51d8f4a1c6fe29498c48a1f94d4fd5d1d268009f93121bbc96331df65f5fec4c2e2172719a98c4719f50870d497d2d57bed439dc03bf54759529cf5a652c54ef6a14600b6590089384af8a34ca58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20471d6972295faed45a580f7e88d9ae4f1d5931a55bad98b8ac176e88ff2a471d593e21576da87228176ec9fda28e8f74abd082def439148ebf54e25c668ea454defebec498d24a3e98d8a6438ea4ff9aabbec41f10077ea8b2244f8eb4da58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20438ee4369ebb5f4a58ee2abf44c118628eb43114ff5f6a652c263f4464df2f8ea498d2addec45c5603bf44779d2b8ea49f10a6077157703e8960d09a0d11b4e93c399239a68eee74fd4129cc879b59f790434254ad51a278295d689016b75374f74e97f9d3894e44bc4a7347d4cec4bdd17c4a7443e238e4aedfbc5ae04be222ea5e7436256eabf271e4af21171534adf26f625f705e2292d9f11a352f67df17e25eae1a38e58b13213c8fad98c4f40f3794bd2f062d77c3484f6e15afe7328721032e9cb7df1527a6a7a985ad20de9c3371be0f9387ab05185611dc879da7b2028bd5d9e68e49af4c367556286ee33142e817608988a5a8d10a726295ab31430c7de54f6811a6b22d71d54fee78b4fa5524e0810326d93f5991af62eae8fa9ad05e0d824f15806cb652635da6e60d5174bc6000374f1795f98ea65a912bc77df5e3dea0d1adfffc808ab330d878aea1c1d98a12027d183d84a6f121d849e2432a30b022e82395d38aeb6315bb4258126213af38a855a6e8fa5104c2ab13278422ee8d1a80054f120053846e6fee50da72cbedf3644783a25f4c16ae12059bb83710d8670cf342e4ffd105c3581685852104873a32046c140ca9fb60858720e80a22eea06270805391b0a84741cc618d070ffeb21e0ab66e26051b9a16d0b82f0ce06284efaae5f3d00d0d535498b873d5a10a1d420cd488bf3b10f01a022ea07a7c807b98d0b84f51ec63901a89275758e424153263724b68b4b4d5f92aaf9f2dd0e1471b31744f884fcc6f612aec318e1ddc983b5782ff6a777e8f7e4d613349df7ba758bb013ba27fb2694312fb4c639dcb201564363c86b95bf2417629950bac2ec2f897fae30c745b905268e3ce6f93f449daed8d867f666fbed18d620939acdec110ea645cceab8748d48aa3f5bd1f2fbd4b5524884bd5dc7f19f7c902fbc338042798c1f18b476d04e963502d14392834d48e6bab936a8a21560b9c71951e3b916b7167d5b967a1fb9f815a2cbef95a5edd0f138bc32aa4fd1808cafa0299518f58413d3e2e23f29da2391e0e63021a9c3e088789536fb69b877c30bf2099bf46a5f69f77172477b6eb70bd74da74482fbc91ecc7c254a0ed764c22f8f603c2d9d63ebef619ad59e78ada5d2d14e885c5a38fa0001cc380ef4c863e8cccd490037ef79dae9076aa579bfb3bf566d8b53cbb5e376dd8df4ca920cc8981e02f6b3de07079806a8df9e4a4fe4baa16de681a470bab6fd38c14a8c2e51fd211f0b765e04a1dfdc5d32e4dd6bb768d5382582f75e9238e99082f5a41496e606a20956e3db2a60e8f6f163b592489b1c1a89fe780c669f66556d01ae76960e21358f732be9f42e0c13f54bc93524bf6abd48f5101ae29138a478d84060ab2d6d5bfd2a994688c980ad382faeb983eabaa29e5fb1fac29c6bb941524103ce6d11be19e19a47c43ceafa194a670aab581a4f42ec66e4427742ee48e022055b244c90523ae9e88d82c298b810db5dc93dabad90d7f38c2768c1a2ced262a3869f9c01c6ceb08bcfb908ec7585c218b13ae665d00017c04661be2149eaf78c536c1fb11f0f15163e52b91a84a92c8617dc5f1a51617a67e53fc75b7b1a08c89942acc7a2a4855b64b8315d3438d05f46e2f3286583af2cd46c74e907a6e8bdf19e6b652bbebb25e25b52bbc90d9cc1e5bb51cbac50f51d7d873391d40da8d51ae03ec29c73a5e6ed79453d6902507c70627d9cd21c7257d3774f515af834bc95cb397862f285cd6ae45ca75489e0cd8a9c06d19c806b720a560c9c00fa74e2216cc40fd1233f6c9c525477afb997015b3d3fa20a45efd05e4e1f572470abc87b14ff418f974bd6dfad1491fef1fcf79dd07516850fe893dfa930f89d9c0ba6a61fc88b93417f2a5eb81ab79be5fddef779428f1b80e6f1adba3dfb410137c50d54d23738ac93a760030d7914767c851e7a8197a46062860e56a169ad4bc8d3a7414cbefe653701a15024f7e10153255bb097e84fac1a2291b5c8749ed90497d6f6ba2ef1d5b00809c26626cf37fdde48b6fbd5ddabdc28231fa3aab18546b5bffe5fee68ba0574f9fe703857195ce1365a247049531c01ce88bd8773259f0bf3a8e020a1ae6d7ab995fe632edcb6d87cc3e8054375bfd28a79514bdaf9e77c2c3c65501633b82e60e15c8ca691c676248f31d2e2d0be07960255a45b4800d093b2d23c35050259996252a35ad388c8afd3caea1ef8899c262b3185b9c25d2155797f455156ae70ac3552f8b01f4af3c121a0cc672a41aed59b57d02a1745a24b60316ca9dd6f02e5cc80d98ec45cee12fa86a35cfb9468f9f3bb5c3fa245a9b84f4db6ad84402570ad2c03c31c5bd8aabeca94b200cd7c9ec61f12922e29614045b1954e39001a74b202c2124417f04a04aaed8c7c219458f946890f2214f0e55dd73a30fb26d665cd83b496ab3cab83a9e8b4fcc2488b9ccbb66e070700c377d9668ac44e4df1ed689eabb2211c9c050e139d01d7e5db66e4eeeee01a5769165bf69dce06f31b50ea42658d453f2311e751a769232e7ecd68f90e63d2e60f04d395958287586ee37cd7f7a05b0e9e2d67085064005a2a81fac20a0a92036e95bcc1875f3b00d8e11405d1b921ae804d203118c9df4fe495106981f9e49f437d646a8dda1513ca3ad71b7a727a8869ce0d373e13cafa9b180c0a94df546d14dc8a5e062794b5c8857257f6bc035cce915f45a58c2394951a00a43a397f872f59f10f17ca1eec810d185672e26d6c6f3133f4f5e93f8c7355e53631741fa473b411b1a8c448c4b9b66c8ab95945d34b8a26898dbf6d5ae2be0e09030c27f69e9f97e0425083fed83f3ea34e007232d3799364f214cf30fffc455d02fe86b6ac8c5f437e3290e712cd336d2e2415bc0ae8ff492d1dbe98d043f2af4320b98c4182182805a45a669f370c0183321e8631d2b76a5958f144e379e48a955ff8c0533d4c9d54fb8efc8720d58bcec1a8a57aec326ed03d05b2a5f657735a9dbb1422b0032801b7ca82f649dc2b99bbd809a34b94d801f7b0d6c5eab28ebe5472c3a9ff7ac6ec91b2ee6a8affa968bfd1e9348d6fd319f05264fa848942c7966e45b431d796644e1bd7f1f3b721aede7db50c0fe7897c180e161c567e0d99ce26a171f8772669897c25911cfe0d54405c17a43cec60e8fa5f668149880d2ebbd2825e3a58cc6cdda8c6d10dc84c480971cf7d2415a9a9c3fdcc5ab2455ec50335c4115226aeef01154829f7841076863aaa7345a46ba8f2cfa0bb86cdf8b7fedb5af3141797572b8c74eaba3ff5ba3763ee3ec8f623fe10b172301a77dfab931c3f30d6bf2bfd8dc3cde9acc3b64c3f7df54888e3ceab3976a16d214a716afeaad3798797360e423dadba63bafdd586e5d2fd9d1bb011921935b24a0bf2a1835848995ff527bf8e593e01a3b80b09388bf81509589558ea6cd947c5e91517649f39347db76d47da0eb3da51d56c98fd2fe36be3e97a9fd431258e39023c3443851ddde026cb76caf8a780909cff3c556d7392b04e3f5bbf709a7953406b1658d86c3e759372da61e36af940983583504b7d6c9c5aa91842752aafd8d1a0482b44612c4a94162f5918a959baa92bf015bcd1cd4d66c40da0519cf87985041963a8a56472c6d5d966b8a497934ef279f052d420878c789d5700da812aa779d8406044ff068c8762492111fd62b4bdaa4cce6070c1bf979161cd5854655442111435b9d70565da6bdffbeb4fed996da58a46690f4cb336f49f63009f688a8c2ab318a28fefaedc8ee48ad4ea90ec8a36945e3106f8387941d2a8522b69c783d62964dea30cdd183a2df8d122d1c8caabe834cc4a54ed02c549d51d65806f2b25a57701ffe3af6084b3ff998556476f75ac59103558f2831aa73c6f052cd90ebb31252bcd1b5bac82dd16fb526a315d6cf40ed7d8f5d7dcbf178b764ea8aacd4919df54bab883dad176ded024a8a1dab5a7bd2f217806e80ea412a2bc6e8ddc9cb709786cebfe7133fa7417ff40ac8f57209c8083eee720ad6dadd2fac083eeadbbc0c2dc6ffdbe72748b72fc4294f24e0653bf2432ca020450717ce65f2a5f35d95ade716b2d547daa37a5cc3a7cd96b112e3064922fd043d4886f0ebf7f47eaa9904cbbeff230e2c2049b2123a0ddf57caa3afd31c35dd104cdf78db6454d0d4fef1b3d5fd206cea6215135328ff37740c2141be070fb2c5aba35814970b4839a345cbda187555c76c0753cfbd229f4e0b6e2482e125dad262ac51090202305a562a340dd4e5ab450bd72161fc8d61a899f5758ef50f8b5d9d5666b03b86d0ce8e6a0555ab7c157611085eb44ed23c2fa90df5799b7be69d8ef3d782a37e5c68c1f7fb987fa0d529b3e7afff86f1ea908b9a2b8dcc215bca87f03e06a26b01056ed13d04a2cc31192c65ee0e3054203b7c4be84bf0e88e43d874ff46607023ef425d0c60566dd1bfdb362acc3433aa690b8b08ae092aefc1623794498ca4b9d0cfb71d0080d031760e52d5c1d63ac067eff13224ec391dc16a2aba684da81c5f39a2c8c01fd83631f16106516d62a0cd0c9c2e176dc333ac4a81a293c756db166aa5784ccf42fe8f59d999883572993a07039a5c0282626277179a3a01e01effc84204f2ef5b02b26d2fb1a5a902f9e1cc7402f4cbe758465c2c0666d1ac1f6c1cf53cd47d394656854e59ce25881a90348746a2e5cd5346f35170e6b9adf9a0b714d97af39d89e67d2ca5de1c74ad00558dd5682708181add4dc3e9f4a0c04d156fb50ad69c4e078d3d6752473a9e2723ff30cea21741f58d7d8bce03cda24cf90316254a090f5b5ae71e308c78b063a08c299c2553d548975e100884afa9b8a3c7322b8d1d4ad6ce99a8551fb5e80309542840b4f059eb9d115cb3a9efe03a891260dd5b35edb0f8123336d301010bd362f2a5ccf72fda11d6a53b861c9126b40492573e256899949cc12b1fad906cb73880f6b6a16d6641411a5388d8e84a50bf8540734151fc9f8ac909e87233b6475981489892e32052ec5ca16b4c38668ee9eac990809ba0a252854800422166e03ac324429756cc6d73b1321a5a0e3eef8540d8750b57423e9293954b8daaab775fe71b538d850b9ea6ff426de4d45813a5313c621170a1a662964f2520c764b0531d4ea20ebfdbce53c1c4d1cbb352145d70bd51e95bbd9e93620111d121d6825a43e3174a4f4119af4c2a2819c46906d7486a621fe0946559a9847b65c4e6d0a0fa72ad46dab90172bf00d3c6c440c773e04b1fe97a8856eaa5175e8f488610320fe37b7babae768ad899cb9f3d07112d45e10b48b5e2aa37a74b34ae6fad2f11dfd4bed5fe714485c27c44f3f38a5da983df7f005433d494ba8a8cd095ac796154096dfaf1d9206429e9556b11ce1c66233e1f39d85e2363ff4643b772747bc7e33ce93923f2b075d954e5b8ad0d1cc1bc78884d45e0231dcc4c3011ae2c4a45129cf450940b6cab3f9e250f8a70af0ea69e04e85ff395d8f50cc3a53ec229fd3dd2e0add0caee00aad060a2c81d16266c428068df0bdc0a2f6530a6022fb75e46a676ef435123cb6fa3a4aeff571d8d256df8556a98f935d821a16c880fd34dd620006ad985ee7dd1cf7f547c77729e01a20db8e9643f283a5d00a79542d4c465dbad0b2b266aaacd74fa25d23268da5849436a0aaf6cdf456f3f561a8b2b8edf7e9a1936aa771852d7c47768ae88b0bd1ea96c2f8583bad27ade19a7482d763d371d32d4eb6c1ac951cb324d5e76820472ec26b0b86c2fd558e6eb731a1b199cc4dbdbc8bf4093baa52ffe367988734b306f1e72632354db70ebd7a98c9471507b6344e4cae206e1c68796853e022e6432f6bfb6f916537db46968543d6d0796d9220de2f723e0a7169a7bcccf6c63a96f029ba05f3b67fa567e6a98b9199bb23c80622abd2cc0d9234bc2c49cf67e1f922eabe14a46204dd4e5f378191f6f82e0e86bb51a6b71edfe2c449210031f6e4fbbc9cf99f6a8b0a96bdeab57c65d3365d77179d6f93b9dae1b193338a17e4d0a6f86464499646fcd3035075123f867654e6cfdb43c5db9cf4b640a91c94df7e1d6dc3275eb0125b8753633879f43ff6be28ab445b840b5f647218f7bac84f8d8800a220f045a1b7382f1ce1659d8d26dde52704f10f0f3b4442b74f135e07d025e82a8d0a283dc257d9087adf773567054f932bd1b241f54b22ee3b5220e7a1ff7da833184a5150a8148c4a6578d3db732de024b03e7edf77dd038284073416d201cc58dc9476f7b1ddb771cde246012a252cf909ab331de3ed67a6de273eaf81d6b84209ab0a779b7f4a5047603bd5d4a2da10d971a7cb917ba55f3e2bbf4c65ca4ad5f0efdd724cd4a01d9f5737a512fe155366d42d555e6fe297f61ba981fa6d8799529e7446e30b19ffdfe6a3409e584381b4b4d4042286b001ac114053f307fd03666efed038af32e1697786310c2e0e5cd4136a87423c9cce3056928351636f7aa77b10a3ffce918f4c9292b8ecd68cfb2f215594768e212d4e0f52d50a229ccd01d8fc7728acdbb56a2c27d011188a58a5012d685c064a19f32c2ad762e16a33c0f55c09f2f5ab7d30db742a351c0fbd37723a9a007d1e715420f5b577d45d6e7014bd8bb9b115b14c1659ceb6c29e4419b2b127cd3ba61bf12cda19009841c21db53cfaaac52e4f3e15431c64845b98758341e60cfd80bd8d61a50bb5851639cc86cf505ec63154f42a523f74b568422b11d72fbf14708246a9621aaa5255287e9db6f47c40a710df93459d850948ce90cde2f799f6c4a27df21474cf3111904750daf99dbd320f68b83ad02e8991f46465de9774e6cef2ca557a50eba0a97891da70398e309705a0ac2c31bd53e120e7852481b8c83bd8b61e238f5a4f22ecc14288b165e220e44e0f1c06d3421cb32b6e855eea59908c203ba3063b5332b47c3fdc79575ba122d6834bf3f52f4e131d0a7ae0faa90d5fd251e087f003a503bf47a6cb2306f9ed13abe804f558ecfb5606f44bb9cd81e4ffd0e94a7cca5e82c1dbd94eaaa0997e314ea867570a4416f1ed66888df1cb597612bfd4ad0aa3304bc34cb50fbf419393112803497005224a8d3b5fd07ad515b4d09ff23c384a85a8ec8855d8921ec92282ae263b0b3b12263ad343df9f532e2bd7c1048a7915bd39d9ff88172899fe09a3dc6505645ac482e368c8d781a73c4df29e8e0af6b696e2a918d1ce0a6134043f8f5ef8b151c1d856b68f67fa8733715c6a7b1b44decbc45f5feb0922cf8dda125209faae65f887620c63b7aceda27d1c03f56d8e43cbbe3d0486ec6fde318f8a0ff8a7863a19ffb254190f8cda86724a553ef00990ee2aff00e525346f5a96241ac4c8ca4175b3260f3a01293e207f7d5fcfb76474f0aa8266238fc6f4f88c818357490fba72d20bc9baf003587bef4e97bb470d187127882cfe95005389a6cdd77181649ad869f83256604d2712507c353ed04d3c3130a46c88f00adf21cc5d4c9018d0d9a77d05242c9b9f0b0e67012a3017baa6bdff3691ef4bc367e303d9141169f271fc4098222ecdbe5b231fc60ba4c9c4a5e193c67dd7a87da089f75f121949996fa1f991bed10551706e072abb0bb7d4f02ae70156913924a71b95f6f6a188b6006421ab3781bd001219660ad1576cb6ae70ce5ee5968672bdfb5b04926d125e4655924445837d8d171813894e5bf608543e8f1d3853c40bf4dd3f6dbec614383101fed99f5a01ddfb063586fd7ed0b26f40fe54f8e023ecaab8279ac15ea8ed63046382f279d7dce47dd5b8d8e56d9c99c05f427dc326c0b9e5c14c826489e5b6218af154f833de7bed3758f57dca67d5629b05889899225d2883e4510db2db200d9c4effbdd64b7b2771159e5eb40228bb9e37bd2b6e34ee7610f08c6cead879dd0c61420937b117d3dce2c56159333d595b7c2d78f8c199535c9f2126d402251aa5115cce52b3d30e12610624b6e251e7c0e9cdd02bdf137f96c9e1dde78f94cc4f08e3ad092501006d03aa88c27dbbd235a6ac3e94f730f06f8c9d1ee3bb9e1f37ccef4391b7380ebb379d7033033d35a6661110537a0ffd434bef75f05f80ebf89f5f07515111a667df964cb5cab84a402541d3a36330818b4180831f9ce72cfe19c8ef8dedacfc96cd69344b7d5a8c84aacf9db0f224718b56543b2354b80be9f8d9dff9fcd06af2820923967fa59b4f2d7e2a2381fa80e0f46c63c2f8ed2181f64e9e99fcbd836ccca51afdce3df244da96aff7955b0643d29378982dd8a6b3b4568799f70b790e8b54976cc709fb2d21cbf4562d3723a9879efa245709249129e68a2e9778c0501a47dd10205f2b125dea9e4d54385624b481b25a61675bcb32b7bc9ef3b864ed43fb2e8d77f089de1c1978ce72f2eae37e0e4d49d0ba7790bae58d18680b4028c9d28932f73fc685eac7db735e9ac9238291482b9c089b78bae73cb37a93fb2ddbaa8072c37367259ce6f10b492fa87c6dfad183cac987ad0529df118dbcd8821f0e479612eaba49c8ffdd94666b2eb773e1432d929183667d44ba5f80aaa0dc37e0518db51a80b55ece22af2d77f868fcd0a506c20a67eefbdb36b70974b8548376b8cfa5f3c0f13496c3e7a05dd919b952a8bd3cab308e8f0cb29cc9207c37df990619b167951a62a41926e4057432dbecb766650d5fae9004a9ec88d11544bb0064ff07a5665f3faa59fbefb57e610115618960de323f5d3bbc534ccaa97850881003cdbc3d21bd308cbeb1dd1779a5581f63bbff6cd9b9c6f565027615e285797ee6dbdcaee6e733beeeb59f2c43656e8552a8074303d4165a214fa918fdc16efeeef9d950363db441764122c60343c93a31e11b634dab351e35fad2f2d01930bf1bd037d738022a93fd06f15d81b275f79ccdad1555047bfc6cfcfe862e19d181a95c0279ce83e080defe46ac71a3af4855ea4ddfcfb6344a53f3a2e4bfa29648757a1eb9e5c9c52c1f40c7fb2da5a025cecf2a06c023fccea567fe521d8d9978ffbdce122923d63504442a6535f8c86a4b19f5d8c49c27076a145cd9bb1f2f80958fc005666be5751545624d5398b0fad8d191cc89a05396fe37b142c003dc77a076eb0e9ee2002798720ce66336d138d17ce5d6678177c8ad6f52a357f50bcf22c5c071ebdf0b268c7cedd61bf57a2ec5d607dae30efcc619373909684cee288f236a68b77e23c1680ca5047f47912a4dcdd848886f1dd118ddd2c58295a05c81b2a500ce8dbcfce65a6704bfe6a1f9094ae7c074032017ad306dc550960c924d74cf50887deab5c6ea8eef44d99043b3d53142dc42d8adc722263f1d43d1d0e68a233c25b97f38b61b68b6ee715e4874d03e70226de0b6b49c3ecea5fb6210e64295721453538d187b3bbabf2d974d8f7f38abb129d0703b8ff4ed38fec434f3857ce49db3d359030d633b02f219c0cc751f7499904c74185012006adaac4131de844287bc2e7b46c80a4314c5a9f61b41806a2858ed8e665a50d296358c39f727466a82442f37fdd556ae07b615720c0e9e7f4a55241e4941ca346953fd2853b6e8014c9e9e1b78be4a568be8480118cf1fb559c6f0141a54cef4311b878b7b41733ff64be58fe136ab9821b0953a2abab81e1a51df19773bca4930e2d267b9fc9492d257028fb72536e0d61a9f2dc1f5283c27e668e07da533857c9e2130bcadf6b23dabab588abca7bbb35cfe4ee59b768da6e013a2c11c65d2de29532726082339347db743e70a0d7ab17c28d62715e07bc451106c5d6555aa4e2c359b5e057198712ba0a9ed149321f4bc4debde59414ac18240255641069b6367ab9b15349d4f09bc1f6d0a927c6a4607047d45d454c23a4599424c70d3427dea15b496889dd5599b1085ce83b1e99af2613e38a7bb46e879cd35dbde6643535bf2ea61876fb76d72d6755a82b1615370aed8ee6b99fcd36645a4dda77045556b16683be759685af4be6a62a38d156c296f3b6240ad8e34080b739a5674b6eb3ec97ae127a6dcb41f7392392726126716e9010c2115ee8bbf6d0dda79d7d2d2a4f7fc7f45c6382f476f6a45ccdc04d6a1de030a50c4bbf9b67e43d702c3b5226e421e9f35e374c5d909e158ee34870ae37d87359f4be9ff8895039e8d1a147e233edbe537f1393119584b7c5ea40e03af700df603e8e5f54cc09cbae0d97a150ec56719ea421dd292914b9cefe90fdf331ffa20a9f9a7831d1eb667cd035acd5e360f4c6faffad8da3da9b0554ac0b1a3874a69a6e35135cf284dbe95b03d716a08722a1b2643b2ee895d2e8ddea05b92a7da6020d482064206072d175f9fc2d4098e02baff4f0f29bc99ed2b6615cad1ceb265bf55778d623dcf4078fabd22062da3d1944b81f35f40f7c306264648d1bee689f51e8a4fb8f0ff6ba2d92e5d1d20e0ec91c515a13a1fd591dba6041ef77b07c9c363d4006b01f10b8a025d6bb9c5910e0dc2f111f5298705aff0aca5894310fc5c7b19722b78641a7c16cbf2e2b73e0faad6f6a7b0aac997dda79a008f011dccecdf3dd607bae52aa895c74bce32c98b5b70d0c9b241be7d3cb0a0cdbc88b19001ce5d5e17356781b4f7fa3530184f084f3163a2398ada27bd966b8c6e92e46203a06edc8a8adb28fc3f0d70c54a41e3c14cb53b3df28a4b2556fcdae169b12cdc2609516305d5a6743f19955e29684ed910f600e6562700f5db7b4594390067f075714d94665e9ee0b028152108df0bdccad92cb5b74c1cc77e58a662af6f0e56b673926fdf6defc2cc1b2c8fa0fb8e30c1b167e1cd33a512a70ac1e81334006e6481911341c33a2741e59d7ef69d467b982f3017636ed6973b3e1581218cb9013a447b02f62813496a388ffb5c8d477969c867406c1167df8100c7e393a2799c14194d68d6392673536a4c3bd81a15c757cdbb64a4605a8d8a97cd7cca863f1f508451b1a505464f8afb9b53e793a9977e01b22f5a1ebaf1b4779753e315ee145ffe1382155fe760241a9b57dea5ee50c8832b5a4a91f91624ff23b416e96526aaa5f1ae2134e17f269a8dc9ced28e920c2f0de0e048661a5b1a4606e47344b37450e02d782d4780fd188598f12892f9c166809a75f082a6bbe5dd58aa59198d00d2599d84bfc1bca31186ae50c118569049d278cc6e6369f54bcc7216411a89cc942364097f03264b79a366a5302eac2de0e3fb04bc82123709da482912d8ca3661be1e3b4222270b0c742005504d47a8ef873434e5e484b23e21630ea656aea2960d4dc2ab907cd896a60e698aca24c4fa2b8d48bdde92fd93704b043460046c25debfa12e4a7fb0112f0325799c6b37b86c5febcb72acb71b155aa7c5ab582505c446464e524e2bed3f5b209697a0e2a40a835fa017192127a93bee1a2b367721086c60b0d68a86005e037e6aa0732b204bde4ebc4877c6753f47e4a2fcc1386b1d60e8bb6d2bd29329db813ffddd9a4924d3ece011487747904848470988adde7db9a01f98cc811bd23f4d323e1fd2518020079df253d0dfbf2acf39db5ef08bc32795a80862d7ae0d9b2cc66155c76c492b5abbfbcfc517790d5c2830d88206582a5ff711817d85c7356aada9eca9ebed680afbe535ec50ee0290e7d0b3476bf8e046c187c164f3b2eefb15f38b646f9dd4c1042306a765fd0b1ae307d37d152673a88f042403aa9481d14a8f54576cb769434bb24090c913ffa39e0a6d5e0dda80518c479562ff55c313ce4275835057f05d0d21f9770c3b19c00dac08ef2122531888e9d8438e53e017ace408b070b74baca8869eb4225a97bb3ed958d2a0ae3500fdf4531a23d1997bb0fb7923b7bd139fdb3c5a00509c121e5da12c44d1829c1067a42dc3d7abea09b2142d0936457dc4637f8b5bbe31e27b5a919aebf4cdd77e843cd932e2e4d614268b4a0d37d39955dacfab19c605a2764fc758e08b73078da522578b554e7c17c8c83fc45a415987853ad991e2a139eb789fef1fe61cb7d95a99b72429aad52ba1f3abe267645276009f4b54546f04413d0dfe57c4a544bf18021417a8920c355eab53953eaf7ee65a5db3370f194520abd2fb99584156fdae8055dc892e55fd72adac4be9fd457455b66d8c8f371d9b3a46a86f42c061dc5b0541b858b8e31ecb57e761cd1ba01f9aaef345ba33cece53433bb3c8f835242ba834616d06c3b6d75969756624281eb6059fe3c60683ca211358c8d3c8f6399d720588490fc59e3c9178397c4e2cbb7facdb1666f7c6eae04cbb08edbf8b80b86263dc99fd7e0273269a40bb6c44c8fe59e95024799fba17a3720d378103a7a002d68c99eaabb23330b586f5c2a1331ecd5bf799ed55ef49e770d4070884a2f7f28bb7e4720d4ae2b49f747090d4f04a483b137ffe3b9f8339426f68ea39b03b4f71b27fd0e6184c0ba8a99e2c800cfd6a6ac818922c0f8b65aa175826fc317dad0b1e4f03602e1ea331a52e3d6fa3e69154d223b16ed8e95df075fcb6e7b11dfaa8d261a8b75cac765c81139480087d02c6e66ddf58dbc86d2b6072136d7169804500c0f64cec47e84f315e1ed4e15c44b01a7a97773fd9d916738ed06beb897de8e8658e199bf6c3dc3cd97bf767e79a7291b937f22e97cb95b314791e992c9eb325c32c8ebb0a81f5073cb783548755cadf758773fa6eed12fb869ddb4176dbd74c9a71a46c44a88a11bb7f23f279a6e2919ea6dc03325413ced8fff3aa66ef7ed61f64af0a73e2cc1252a7906a7ec29fc755df1d74e8d1ba63dff436cbf53d0f148683da034d88baf31b682c51b9ad5174c1b9603c7f756942ce763ecf557acae10200ded9059d9f2f337bed276055b28a20ae621797bbd57a992db8961e8ac8df332e434583b3fe3f9848a6093d58279348fbab0d6215485e6755cf11c6cff5fd928f30e67f9b908102f7fcf7cec99bee70233a6b3782d58d3cb4b553e73f62ce14a15c3c1e826ecaa61148d3511ba1084db588c10aa385b7b877ac572e0162226b64b11bc4ed455cb33819dde332ad2ea60d26b349fb964ca38d87ebe7d49ca94f1c1057c85cf35f9c6ef31094534a64e24f561ab9fbf706cc4164960c286bcbcac5d4e98d2d19475bd2c7774ae211a01f93de9fb664b5b301a8ebab9f62158138fdc32f3b2374f14ab136a3ba839f7f095942ff74789b7ae0dfdba0b2db177ed7d651ed3b363bc96108cb108921102e2b31a93b1d6452c253188f923431013a283577fa344dc500b3ff0f1740d1022ad282d5a11e86bed58683807c97486f258cac3f8ba08eda568aa3556335a146499bccf78f34d5721963a08f3d000e380d38247a5171cc67030b73b12fd16642fa01cf1e8097f1821ec9a6e0b88757b1df42808287419b862f25aef848c45daca1d03d0e082bca82a1967176045870f008aa64bd119bef934cc987747f608e2077dbe13b7fd8ad6924fb3a5a22b9f5a770883a4521c7184d2e0e0c25bea6ff8d0f74ffd2d6ce29272ce6339db953b3c96d02a5c1d0de81d881ea3bc703c5f12d0f72606104964397818d50376053d220e1e4009c0d3a996d43a20d85a7002c1ca91915101198bd5735e794221267611d59379d5203ba3da6f9b502deed70cc930669ba33141e8914c000e264696886134b63651c33bc30130f8eb92671229ba7cfca9255faa55164f667a1594999ef477366833429fdbb7f4070b6005ee6fc73f3538c4882694f5bac8e7e3d5a5e74f5711e348479e16fb4c00b4bc9083548fa381d4c220f38bb53d0b540fde9b746a7e5419580757c78e6ed40a83385a442ae3c425205213fcc9b62721b4b2749bec6d56993b23c597dd3db0de52b7a6dfa22a39cdfa8713211ff1b98b6d7cde8aa776ba27348a7dcd6218c28046cace6779f284b5d7f352b83537e484b00bb3bde41af46b105fff152a1400f0ccac7ab5a340428b89d4db15f0790de0a5866933abe5564ec7de4a0244991fdb05a2b8006ac4cea019f36e42e8f160c2c084aa8b71ca41f5de42aacbdf921c5be7be8fc4919c4bb7c56a8f8519e3fb08dda2f123c8b9dcc80949b9c7788b503ffb80ce41df866f8516bf8b2ea2722c1632ce0854c4d7af186e40e8e55962dac76a5977aa920de7327aa8fbdc29b31aa2118622e17d5112f1d0937432a9b9aa639afd5441957f76402df3fd0c47b3dd0163e7021ae659c12ca6b21bc018e7b026d1bb406fa75037741976b19ba2bfdd83262a7083341f1469b5e6390604efd157c9b64006cbee9a9f6d11d8f19e896375a8e75f40d6f3e447806119b95d4886d83228caa97359b04de5ad15793802d29eaf5379ca51aa51f5394f8226a34fcb729a61b7fda493146e6786f916e51e08f503ee0e25f76c0676380f0d3cebf4708fc7644c1928fe1b2aca6bfb0bf405b65de3b28f381e4d81d825dc0c661c01c58ebe274f2b36a3212e2ab4d4f7fb70f5877484fd83a1a563cc749916dcbce5890ef6314aca041c88ba1430d9c79bd7ac4362da9e0baa9499684d6b6f370622bdbb65ce879db96898e56de8afe112c75fda7ce797ef0e83cd113d8b663b00763028ccb2a66995e9e205919e46e9923ef2da929938102dcb538aacc1080ed2eb33e62abf2c4eb5e2a0b1cc67b47458a4ee9d20b5578076af8718f96fbcd42c4453c79a6e6818241fadb1bae032bdb9da1b32bfc3aa856edc5d6e13a8e4dec08d1d98fb03df2f711d269f3286ed394ff8ce902edb91435e0d093f01007e00fcf07bfb1868d5cc41b768f06fca5d56ad3c349d082d34923763de7478401152887482b80662ebfa9f6261d64fb4ee8d46a47cea5e5c5ece50320e8ec97793a53e0419756b500d85958cb9b6c93afbd8813a1eebda4fcbc5121a7e5928d0ddb707b4df22fa98f29ccef861398ab41b8e5082a5fd85f0c634cdc28598f4545df39294b3f3764babc6f0232db5c9f0aaf3646be36da3bc453d71ac40a11b87029b380af08dd38b5e8772d4c8a1611f81f5736a8a68aa9cab234b0f428cd8bdb6a5475582d2be6457dd70769092c3c4d7b1a6faa023ef7f8e4d06b8621c4750656abf5552a87c1bf8a1a4aa501b466254e7326e8c6555aaf39693495ff8f391f63ea14d9bfd36d047d72c027f2c611b10f7e3548ef8cc2603a5f21c5feee0ade5048b17235875bc53a50816754bd0340f0064d7ea128ae197e0ee1f2e826f9ec1109810adfb2cc9b60490b0876a67b4e3815d43fbb9d2dc753df9f228e1a0645e900acb66f45de210172890a936975820d8039f5e93f4bc8c3897b2b66e0e683e49e282f37c0b17b5f406b2a368730e26008f6355e9596c764f64e3596dc9b8a30f135db96e24a8e5919cc85803e380f35951404f987876a309829d00d0a56612e27d908b4a6d233ab7d0e84184ffcc4051a52ce45fe7730e480aa17fdbe146cb7c391b8272f41f7a031f96e6502c1ba42655d08f46d3883c6d2a6768a9927079fb8a2cde2346eae4d257a8a1088fbcf7596c9e4cdbb1ac3266885e0c17d4da268e3b22ea3905888ab84fc1d80b244539f1a8f0d3c68dc5481d611ff4f28cd64b961db2e7688f5b73e17a9ea187d019a9d1cafbc84286f65d0f3ac5c6ced68449e6d4e16fec6451c5e706ed6005ce47eaaf23da6bee3f0e85b9f1feb2c560c9a1cb150df69cb8f3d08c6cfe8d060899f1235b2ee95d31ddf2c1409fa2ec2fa67ee65d2df26580a344c133a2bb111252e825401c86a19722001fc800e41d37780828acc73a1375aac2bfc56d02a1b57c02cc01fef234472f397f81704e3e082abcbfa6c6fb106f9a3ff093dd603f086c2b80e987a6b45ed690e2f8640ac2eed2d0a46106b05c16058999bc0153bd64d84c2592e6ec714895a973f6346029414033a5ec2765c40d855a503f9594dbcb836f0f782ddac1138a3a18c1ec762a9708a0254efe4431b48cdca032c42687673731dd80db7da7b8fb08de5cfd0bedbce85a3e316ac65151741f14ca5d3750b7b3d3b3ec941364424d97bcbbda59432c9246545076d076d07eed4e7ec76da0dbbf1a8bbac3bce786473f49ccdd9ee6963a3208a7eec6677a516e76e77977d5dc6c002430861cced22cf095ff017f193ffcd77779f5f37a54bf78fbabbfbe7d58010e2762f62423084104e3b63467d4a39a54b4f3664b9d309e784744e3827d4c25d3a75af743a719f7376d09db8573a7dbcd2e9844ea7d387ce4aa713af743a711f1f77e25ee9f4f14aa7932c7a832b0869a0d6ddd229c417773790efc72bbdbec71871224e0c41ee586154cd3969751c9a0d14c9001ccaa6676f2f19715eb031e0f0102100fe9b17221ecd0d0d45744ca744707062763b9ac873333bef686e349922ff30d20517a95123f2d88fd25247459c488371b8a3121c196188474017fa69129126ea401afd5107421af26550f512102c4ee53b8a5fea134a7ea90183846c73fc1c32ece8d3fcf8341891e3df5079e0845c97c8f5a926536d027890e484cad3499e109e0e800025ac0442c210678169955160310692040653b022891d04f9011640db155260a1891318d1f30397ec4a2015b900d97b8234911d89a4a1a1a1b9514205d995c8fe36c32513cb6b33b22fd1823c82ec5f23069806e49041872afbefe8136422fbd340810a04657f0cf409cbfe19c8aec411b26bd9957092fd7df46906cd136afa24c3c648f68f4222cf91ec4e24e230f143f68f44f80e1345c8fef1489f2015d93faafa047774b0939d07d93fee4087ec1f95f409ae6ca61005b05304d31113c10bb6ea41043ab0524230000b9c22411820a4a3faa1a504100cb022478a20543b3b47e081015704e51d26371b102f1fe4e9ebba749040a2029c65b88384121b20d113041254602d24b4600112449949aa5f9c60c2091dc46f5142933dc31d2776f2f72fbe046c5c82f2a58635e5902e3920840fd31290300859f6cc4ae594db133866393a13824eb7a6bf9fb9bbbb7be6d7357777f71b0f8766edf96b1977b1cb56df7a7066c30524b613f9d18fbde4b0ee87fcd9129b73ce88531fa6e79c73625b0ff0c72201185353639f3ed474603fb18bdb80add4660e755bcf3a60737c538ed1658c5d8bc43410bfe5bb440bd0e05afca4e4f7f603fc79053cf61ca2ba0fe1e3f8d88a04ea5f3f837dacfbd16fffea7e20d9d16fff87fca22ac678d9ca792cca89aa0802d82613441ffc253bc6bd48177716980cd0205dfc2d97e3be7056baf8cf280305fe609107faf4997c441ad75153737dfd1aeced5f1d97f380dbeab5e731322aaf2c306129c8c1dddd8bb8aeebbaec13bc480e16974cdf1294bf7fb13f5c38e79c2f35e6ece67c88b144f5d349e98c10876e497361cb676346e196f6b08fd87d98a694524a695349ffd2c7e85fb652dbdc1605a52b37f4e953f1c00628c556a2fae9afa8401b6e71da9da07f3da3407b9409b18364da20c8346e1163ec9baf712e6907264aa3ada41de0ebfd8340e567d3690f94f4255703c7445f85297d687b7a249c144e1a7bb04ec7c6c2110a888230d2a845a6d18a18844ce943dfd11eb51cfd4a03dd7c80bf48e9d30f864f9f3ee893e9d33e457ffa1006b4319ffe4513a5e5b9b00523811b5b9100fdfe1964fffd19e467df7fefed951b2b3c3ac3bc121f7b18d3dc4afceb614cc6adc4dcb658953a6cb5b556d833b8d77ef633d0a79f753f90ecb8dd4afcfb6325762b3ab2bf9f753f7c2099e107fdec7f20d9413feb56e2cf0712f3c37ef6f777647f3ffebd3f3b1f188c8131f661cc8d9a4cf7e0e18098fd7bc86caf63255a6e256a72e376b4077f5624903dfd19b2f9f77facc4b74f3ffb19eed7eec7ececd39fa1fefcd7fcde8cab924a18733918036364062ab035815b16484bd7812db245b6c816d9225b648b6c912db245b6c816c5872d97077f5eb63c38727609964f866cab9d254f72e3219fd3f81119e19779b2c52245fe5a240bee4aff4a7d9831acdb767dfdf5304dff93f6d3916bc7a388c308638411422881f4f41ebc61f6ce1173d63972b13bab049652ca187470e3c3dcdd57a7bd588772fc89f507d2e001c7d8c187dd156285f5d825f89345f5672872b27583ebcf1503351cfe4bf027575a784c937680e7d38f346a3aeadf8d8579b42948761064b7feeefe96736769cf9f72d3fd371ffcc1a1fc9fdd409f3e161bfa144f51478d7c6c2d4ec44418ee0c81a6a80918ee0065403af80918ee00d5e4fe4c052b77770e86c01a1d13ce7c209356da7d25aae1c84c32b6c0f4617bd6b637bbac3d20b63d6d663ebda1f3ecffe25722b224a5ab22507b92e5d3de11b80912d4a43e4984489fbec892421a15573d59fe27877c9047b64b93e9dff35e5ebec8e2a173ce3929a6efd4622ba555d92b7e7e32dc21c24ffe4c3f3ad92451912732d9a28585504927083d19ee04611559d147f6b4d792c90a509f3ef983aaa9ad9fa1050449548c41d5d81510689e340a45c5a44f70470835b93fb2e894722581fa14a9c8fd72d52b198984cce953aa4fb2a64f387da272c84d118eab3ef1f409eefc0c2d20c72947b0454a295dca77e9b78656ffe272b81ea3f47a88713e80c45c22904077bde468f7d979cd4ec6559fe44fae79fa34bf27fae4f8d36a4f36517b32fde407fc99be6ec59eb8aa0f8556b266b649067d8a45c83093b8191b9e9e51cf903ec52c32cc989bb11972836f88e85314ca308fb8191b22724839407d8a586498376ec60628082588489fe21519668d9bb12182938293a44fd18a0c73c6cdd824d129e928e9530cca305f6ec646c9cac54aa84fb18a0c33c6cdd8080dbd188234609eb161d2a748840cf3c5cdd8b0320c8d47cc33362c4803e69821133228cadf2c923348ce21e937eeb3ce5a5dd2b4d7fdc4ae74daeb4f02a6dd1775644e0df0d743f2a6077fb148a232a12189ca7e660b35ea4ad22e3f1275c59a2fd6c8d6b401b44a90a0f21a470f17f68936ceb57dc2d6a2dcd66f0959da718840ba65eada3ec5f852e3bd5abb6fbeff857176b3b3300688e3d0dd42dd1d21b616356dfdeeee865842d143c9880b03a4d1859e1d3dba30e505694c1c305b48c37d4eef2774df0db685fdb31c2710ee67e9ee0d616b71d3ca72c02844b853600d0a95265e9670af2dda5dba4b6babbb7497ed03d3bf6081ac954e57c97027892664cd1652ac5aa0ca8114383b4811847429bde7a4b0096dcf8d81f6a494d1bd2d36c1873bdedd33a248414a395dbabfb40767b47c52ba944e6d85912e50ca39a3e5a56bf7abca775a650b8b108e6f290cfee1185d802fa5745a91707777ace4561e1c1fd3efebfe152cb998bf95977ce5cf5ed8a71b66eeb730b6ec763967d4cc7a73f59a19f77573df7440739fcc2d65e7ee43e755e9bca4112655a062747a74f7b087eee3fa347907572d355e7899e18de8acf5c2bc5620d7f7899dc554c2d65daeebaad8e5dd75612423346e420fc3deeb3b867d20d7f70eda3aa90b2d299deed5d238804e298227b4c6455a2d33eb2f2f642c926240e8625d489c478343efbad7ed3e0f4078f96031993ab8c230ce192f2fd478e8e2d190b1cf3407d44cf1d6d9eec2302eda2bdbcc5ef6c22e369a257c1b3ff43cd79bd18bc445e8321a594da6e6ed2fe662be5b06bd656f783402d239e906d9757da4117ad7fc805f344e20ba0bf247679f693253dbe2d792fb61a6c9441bda451b21edc5547628bd35ea910e6dc22f5194e0c67fa9e1b3448b5f0189ca400a92d06471850f8d504c1c821424d87c986418608042d9e79c514021cf2676a218c2b4440e0d144d703b501c21cb67e9d3ff00069049963f8042962c27bc541c2cc1081398700fa4b08326a46864d3430644ce260410d7879406031eb0944da6a3c3f5c3d05dc2fa3084f9c0099b9aeab9a2008207561182e08166c70752f86107d50e3ef4a052810f3fdcc8a007213dac1c603c14b5e98994b52513cb8b1bd36572c410121cd1029d236ad08323928826531234785989a5686a2f9ae28c3109bb24071fae14fe4a570f76c9c5c3c5c375dfe1d6b2b21ddc28dfaa03fe60900ced750fb434f8832c1df273f429feecb21a3bdb9e8c4cda9391157ba280e3b74aa8c2c9c5cc390062713d734d66fb0b3515d8441556d8c4f8c0a10e2949713860d6be6a330a21f2448bf438502a5431483810b3cab7d6d7cc224ee9573604ff1783646b3cb0c701f3b57130df1b3b766e4d4546e53be6db19ed7c888a237bc8f5a1e3401a54601833d424460de561fa5a087158913f62c5d4a118d2fb58911f853842958a8142b0620a3d313820b1bf229f1269c5d02439311fce17cb02e63a8330d5ea39c0dfb449f9faf3a64f285fe7d377f1b3e4822bb968751231393fd23c4aeadb205cbf53b753d8d52929b38fb60afc491a2dcb324de67ea6c9647f214ce318ccadeca08f1fd3ce476472c54e0e7e1cea12866290d807121333b78028c731fd474110a3ce5686f1df24ca75163d01513aa4c8750e21d72c72fd89e4bfc944ae1307b94e1be4fa7307386dfa7473fd2904da6817cc14cc207235d518b5d65a697d98aed3a64a2d20ea25aa749fc94180b7c8f521d45e9890aba4b14fe0d8d3e483ac1de8902ef53bd97d266d06fa920673b011f0d51411f0075bddb16fee4e665128d7c749602c7f9fe1bd1ca77de894cb20d7a79da2e29334ac692369644da3f05b8b65181733fd5490fa5e57906b77d306d2a86f99e0942c6a289fc2f940b223e5694a57739055a8420c92c63ad5a751ae9f4ac763a63b7f1c307bedd5f78fc1cd68affefcc1712806b557fff360744038b02efed4875c11dc434850e0bee9547bae835f7cfd8b5d7f43a3f0d7df409fb2afaf43a25e74d346bad477d14169b18b428ad065fe9522dde43a5bbc19b1e78cb153b97a8e8dc2e180f92a42ea6c3e067717e79af62251d3a69ab0ff6c9e3ac09daadf43fa34fafa4d24c2d05fb5975aa7daab3fe27a487b55eb3e9bb32692eb5b205c7fdac8db7d164359df716afdd6220085b2fd6879642bbfa6cb932b93c0f13f8701fba32e94aca1c6eea3f9ebfbc7bf5ccd50bb2010f3d5458ee6a7587e91d9f665880b5b3ed3c7dc36bac12c2f51f07548d415c30b996a38b05cbb8734e85b26d83b1f4876d8bfde07921dfef67d5c9d8f8a8325184113633b1f56bad0f7b8440e4d0c8c41d281993f165adafbf6e86f51c0fd2c7d6a18247352f609ec3f9fa55d647ca1013b684caca27f9309dfd6419202cb2e4707d3de16050cff83aba6c209218c085b20ac075729b2144659a2e788d50c321d3056a4c80aa6d00321787a90cab907362dde8c276e80b8d7bdfdea68bbdbdb9fcb90060eb95b59eb25b6704bcae8044465a52872472625a0f68ae476f7e720aa71a27ce73eefcbe2d792bd947524aab7fbbe56dbf540d7bc05101589e29322727fb437c05f479ce8b0b7ca0dd9e065f931a8bd51965d048a114ab97d386455142e18b3d1e32771f8af8ffcc1a4bf31289348230eff68347a12f745a23c7a38eae28b92d193b627ed585193498f474fda9ef4b7667595f5e417ffb56059d470cc8f99f497c47d1130e93f5366694ffe0af0e75d425e9a48f2ca24920e7e4f3d00772ea4f31b9526b8861b626e826bc07f43cca4574102fe3cccb512ae75da9348c0dd726edded91bacf86489449ff7d2275df9eca73a80a531d686334e262a647d0d15f6c7447a36dfbd1b65d2ac0a4ff5cc77388720ada8030636f53570ab0e3b427df7594f489f4f27d056d6c2fffee901e937efb7b1f73f4459b21fdd66d2e9ef4518b00e95d5cccbd702fb4275d745e7bf431d7819871b7a33de944da93f123a4e63a9086fc8b08fe5aa51344946126fdc5b218351992cc9c23bdc67d9db57722fddbc3f48b776e7ba8911ea69d880be913cca5ab922ef2efe8e5371018bb0e0b2c984c18a7a08bfceae2257e59eab88bfda3e6a2b3c1cb38df51e67d223d894422919e8328d7812ef2494f8a21fd9531b694731b3de662cee48fb84ed29efc9195d7933c0948facf974879fba4cea6242aa5939d0c01c65d0da4c73f92a4c724eec6087776c4c12cbbcd1c66533d3c57d7e9313b9fb1e36a3590917421d476659f10616c1995706b90409c6574efe4c7517c37411ad663126e86329d634b8b0669e0689b1d47a75d191bca0d768c4410aac2c72f0c05f883ab8769408efbee6fb31af2457ad9fd62dcc6797b539b9172f6669cb767b1eba2dde740727b758576387fa51ce5123778dcb87123422b514876743e907c45fa67884ab0010f68fafb070e1d0e7389218cc4c88ea63b1c64bc809412626b51d4be95d259bc7329256c913ff16fb09a49e9000b2515c3300cc32e2edd8744fda45b2c685969036d408b311c9f6b7dece7df4c9399138031d7df58e4faca15b937cbe2e9c6783527c309866199c52c8661d85f8b59ac5e4ca85dfa47ba5c2cbb1986610fd3d9c55c50a4e6c3b5c3a5835d7209b155ece0c216e0071d629411c935611d2fb91fbee4f89dc527eef51b2d16b831eb19324a01e3d070fcccd81b8e1832bc71218dbddd780143f72dca282e11d825b60abbc42eb1555c422e2157cd25e412c155133b06517385a0b5e8337a6619e30f2a593cc950890c77b2d0c9376a38688edf9c0c2778ae20f798993e8134ba9b3eb123c0df4633379a3ec51b33c78f3fee2fffcb70369a1804d322498b6891cb0e4a26d82ae02fcbfae42581832496dc0bdbc32e8b5db6b978efbdf1c61b6fccb218b3786f37c39322fbce3e07b8fee7c1ee8e306b82e5d7bf90c09ff7f13d89b2d6629be95fdbb623c4482ded5d2fd046f6f46fc623b60c90e9bbf680feecafcff4675dcdeebddcccb5f2881d883976182703675d6509b56ba173090ded41a07cfd25674366cafa61a4e4a08c96e57b88ab04a3f855c8a08626a60019fe17e0e98550c2bcd9e992092c8864ba592c9bd483bf2dc36f850cb717212004b164b803049e3c454d863b44e849c97007082d558e9255fe0c5749d4206baadc4264275dcaebd2a59cfe73d659679da52844c621f3c8cd24929b883c6fdaeb160b2c14adb0428f0c193f2c2caa95151d1595a11831724ca6201830582f5e0459b970a12a957e52525a28283d24d20dc639a351d0b6e1689a4e96adee1d823660c61ee6191b16b401f3f5306f43e0cfeaf8734decca32b12c2a447fda6b0a944ba6773b27a63fee348832c18ab027d810d60423c286b02649e0ef0ec18fb6be1b1424747f80220c58939b036d9874746c4ecb23b9adc5d8f4de4ba44974daeb6f31657f539eb3c392f08898122810b5a0d01a72c29c42d29f643417507705b5e7c43dd77ab1dabb7ceecd6e184d91e5cb01333301cb975f69b2ff6de5a629b24f6e72669309a1df0297430b4f80395b784880169ed2f92db4d0420b2fb9d9827b0b2db86743329bf632211609fcd1564ea6ad3e7d9745d4a78f1ec9fdf2863229fab01e9f211963d2278cd5a7ef0ef9441884f4a907da803f9e5b67c50acaad211974f9604732a6b24fae9e9bef0eedfce4641a19ee4c5194e76cb5f864eebf3bd4f2274abdb7df03f8cf2480ff70005a7f2f9b246097d7d13dddf1d32fc000f86b5bd2e56bb4e7ff5f3519972e068fc3a596440da0fb4c02e85a5d005ab9bf8593e104d3b7dfd29203b66476e586771d03a50b8c0400f7c155c77d574deee7b81e9e9ffb6c13cb240bc96e3313a4499f22518699056e264893d61443f9bb433b5304a1e27d32849bfcd92128695464925b447d8a4ec830afc0cd04212aea229e3ec526649865703341787a648f4f9f221332cc2cdc4c109f1fff39d2a7d8ca30af7033418ea8a62a499fe21232cc2adc4c90243a5447a84f510919e618dc4c10a1a13a44449f621232cc266e260811393607a84fb14986190637130428e80a62d2a788840cf30b6e26081316c60aa2a44ff108196617dc4c1025415637c8ea489fa21619e6123763734495a97cfa148732cc29dc8c8dcf8ff6d3a44fd1081966146ec6a6496b6bf104488a28a288228e1c3972e4c89123478e1c3972a488228a28e2060b9b8cf3cdbabb1e6eaf2218b6a7434aef0efa5cff2b80ec28f786a125bae0ffcd6ed8d227fab33fe6e624f4688b53da929bbb628065ce470ee678448b392fc0d1a62927c3099e4fbf7bf69cb355d3c89d7fa1500d1310f6c161624b98e56bb93a38d265e2d34d4997ce9ec9b4719167f526e993567b6137d3b61126a1acf22db97801c31443658545c60a2c3cd765d97fbe2dd90694e7b7f8b437bfd3645a2da256006e0032cac97c53d6ae6ea502feb2562b236a54fdf9770019e53c93b82f6b65445cd692383795b55aadb8a202feb016d6c2885ad086cc1325aee26adbb62dc66fdbb66ddc6fdbb66d307edbb66d63f96ddbb62dfb6ddbb64de5b76ddbb66ddbb6cdf4dbb66d9bffb66ddbf6e2b76ddbb66ddbb68f495cfcb66ddbb66ddb564af98dfeb66ddbb66d1afe6d236d5fd264b66d658518cf828c182e8c70cfc20a3256626c294660acc480b1a11861598901632319c962c0d8326c4425068c2d1b1981b16577336282b1655733e25b763d33f262cbae5f2331bb1e31232eb2ebf132925d2fa55cd9bd7465873ae5b65ec315a8bd799b34a2d848c3b8a64fda4f9b9c5d94213779aea00d8903a75192c5ca61a95ebc7cf9a451d24ef9b2a84f2bbc7cf9d3287719e472c8a54f9f4a2f5f266994bb54e292c725932c5faafa14e3e5cb54a3dcde609c7c4279f9dd84a8f5a4256b86fa04a3a751339562a57e523c7dba2fbf8968d4b447721225597ee3f4c945a3a6b5c1f2e3933e01356a5aa1dc6ad2224a79f951a751d4ae704fa6964826e24896f425f6261b1c6972a3284bbacc37097d32348ab66ce8530f3cea713dae917a31b1e0d297a16aea5ba44abacc1ed9cb178026235759b6242ac32b9f9228acd54ab552ad549e188ba562a95813c31c73ccbd255198b5de4a49d4d56aa55aa9d675cd6b5e73b224eabae635af395b12755df39ad7b4ad56aa956aa5541265592c154bc552b124caaa542c154bc5cad3a6a4cb7c6b53f36b4aa26a4bbaccb716e3562acf7fc1451e954455968c9fb3aa5855a562f9cf84ed7c395a216bc96059e93e93a9fb30ee02b0955aa617ad52ab458bc132bd60955800c85030d58b12a642c154f3bb0b034bbd286129142c85a5f27c0ebbad124aebb6642bcfffcb05ab84c2ba2c399f051b55a64b65e7af5053ae14cabd52f24acd974169abd59af98b3cac186462759695e7afe460cf9f5c59d5b52a6955d4aaf06885e8499e44eda56e4ada14b5a9cb55e836843bd79644612ddb226d314aedcd0da85de66f4279c274654914d6b2b8b2f206c403079adc1dd69a4158cb84b530d6caf34d5a5cb537ff2a82fd31cca74fd8fcac2521bc1ea6b3ce240e66b9ead3b7b164cfec2c79286762613f7f03ead3fdf96d2e378523e79b4c18e3e469b1e9626ec455e8f56f5c8f986fb0b95db8336585e3733652d90267dff7592a4cc01ff6d75f4fbb1eee4300ba5591e77f2f99ba64fa1c446d2c4a23849700b26b24c0dce86b9c8d903c9f729187a54d37ae567165a170537366ad3ce9160544d99f1b15797ee46994ed6a079b499eacf6e6f7f06c4380e54fac8a61838a524a29a594524a29a536a0f429a594524a29a594524a99e0a6f65c47ee8f52daf092e1c796a13d6b313699decbd146ef0ee506587ecb90d90ff2d488e1e5056fc67f2ca51ceda11881539e04fab789258a4f32ac1192e1a908b6d92b8a62d6df296823663e58130c9169d72366235fcb8c79b5c4c89594eb95ebc76ee5fa16e8c119f0e45fff059eecd7a87d7bb1b5eb997495d8a7daa34f9dda10e0da15917f41148cfde1700cbfa1ff9172e7744ad617da853e8c44754abad03799308c91656ce993fd0a6d263519ebb27b21d5b7fed65311861fa08dfaf41b0878ca9e7e0b0151dad3118caf5315bad8cf38093d6bff72f631ce7eed5c6bb00e497d153aa5e5643891f269ad37feea5cb666b6e4c22b8630ccf6b6b438296bcffe37a04910431b0db35be7b2bb645780cdc7cc68796f17efee9632116ab3237d78be3f76ec514af944500dd10aa0a6699aa6699aa6699ae622e51f638c354dd3344dd3344dd3344dd3344dd3344dd3344dd334adf49af6a55249d3fedeac3519cdb314eeebbcbde310d12cd43e8573d17d316f9f524a29a57cd44a2958d3344dd3344d4b49d1344dd3344dd31e6a9aa6695f35194dd35048afa19034ad6a339af6303d1f73fe236edaf6b41f7150bbe11d6c0f4672306b9ccce436f9020558e8c09714420a299554aa2801f747f9f4bb5bfee4788c24572330dfe77b9e1dc88e8023507b30c2ee39b7165c6849105fc6b7a227b764b863051179488619ea7c963f3599197daa5fbb18f451089e4f236bc66a6d700d37c49c99a876a3338434a64a16f8b3de3c6013cb67d97db86b987f43cc157bfbf2bd17a08dab06ec2b02b21cc54cb508d4a79d515a1fa6aff91d8879f6bc50ce95fece315725388ff5c93106e812219c027f70f53954601ad0279f9a0cb576769c8c8c2db0ff0b95e1c47d46b91afac9f4e5b72af7dfe883d8d334402d5e149d39a8842c99aa82d4291a0106800002d315000030100c064422814096c7a922fa0114800c799a42725c1d49a3590ec528ca1963102186004080000000111a9a51003875e8b5b2974b7b89aad7caa94fe08db58213cb46cfc7ded1e1636de8b9d857f45c6c1d3798da8bd15eae562f8561dc1ac203a5ac6cd52632a0caa91f725cbe89c4ec7744e94b9181b89dcf3121fcacdc56d09830fc4f190fcbaddc8ed2f9e9b4cd009e49ea545ab955ff0fb91889b37c9241d725cac10d0c4be9354438779d041e52002c824a42718eb331150059d20175e5a70f22d18118d36670a4f035ab2056f5b1cf604e6d3aa16875fd2c2840868bf74419770abd730b7e70fcea5f6e217a44a4170d1b751ce76c3006be87d6d47eddf4528c88579a0ed4eed84265b24f89117a0c1a89d3c76360e6678813ae4e7caf3d3916889011f5a60a05df64607d21c83b29c31a5869529c9838e0685b0831df40c630a083d64e788afbde61f0713c18939e07f75c48c661fd3e749700579375511680b3b928c0c0bb7c15935a6b76a603c569739eb8072675ca71037782a6a873808c7a91afd7210ab6f7c25d7557d2d28600fa6fa2007703eee346ec0abffcc68191012032e897ef06898a680c74f545dca4cd1595baddfd2042627f3912e5f5fe4f1067f064b1077acb2da7dd3165e100fb2e3d9ea88faa11a038f4f017dda67eee82f807d3487367a6c00723f8386e2a8bae4544deb21fcce77169068f9771f97712e12d166dc38cc76a97488fa15026d2404f8f620dd2e467ee147c58444e66279648de65e55d2cbec7daf758793feb77b35cefd52cac9598215747a64c58790feb77b2fc3eebde63f51dcec2f4dd6b3856480d4170e1ef39d0c9433c1c0b19ae3122560ce047a19bdf69dcb1f252045c2699f83d8f151a38447173cd2575295b63283a4c63d7ac857a1ca08aae320191584f190f8a962935cadc2ce6638f80c2abf8f9e6d87197b125549d05f288fdb8c285ac325592b3cecf12f81182871ce3d0d0eab2386ae48a5c21b37c2c5ffb1ee6b489802ecd60984d5f4092d91079aa256fccbe57215c43d6f75a142430cf47892036302c84a8b2ec14a48a383b180c62a9986c0b528d1813004e441420f785a7468894991715c7efe9d36b5161dc14821a2164307c882822b5e13c8bc8293ab98c5ba75bb88660f50a8588463e654e9111af822ce1bfd8a28a04709c53a4c092f339a576032462b917b6349668ffb8fdbf872ce18c2ec77db9b9dc6328e17a2be74eb63961507c9933e8d75949ddabf2245c6d98e9bec92168ead225edcd3888f16ab99075f6715fbf937053e492bcb56152fb9653d0a9a34abcaf734ad87ab0d0bfcc3168ebd624e5e141f2abdcd12bbd21a8e554ab788fcc0f05ba6c3df8bcafbee03e893c90db80362520e8310190e0b015de98a2a1f17e6f54becefa4e4ce96e79b24b4bbb4cc4952b773ed36a90a458610d60969752135a86fea6947aff89af25892a273e0def14ee419cb9a9ab236d50d93b42523040b69a41f4460c8e88d80d648207934f9e23e2fe0a7fa6b2f02e42ca19a076adaa0d79261dbc86068bb036797921c58bb89599aa1d4039d930a421f6d9a4bc2021330c61c0fb0c2aed42e4bb680d5dcc0aea3e211d929941b099517f32a07271697d76fb07b72c838acb29810f22cd2ab3045c7d496640d1a3b0586741b75905d5a3b7496f1751ef22404d952e02f72cc14fc1e2d8d16807e78221d56d1f91254820e2a90c1213030529c298b76cace6150820c54081c0d0015a8774374151af1b8446f016627082b249b220dce6319f4c896a93fc0acdea7c438cd1cd47ba4a8486847517948422a8870971f2031402812d2042b019cda08d58f137c44ec21de9d8b48fd6d60409efd82c9a2a043202a369264f567ae2d44d0874798e7ae903408f30c5b3492da78ce00b0eae68b0bcc67da377889dd128c625547f60ecab455a24c30044afbc0ce50094c085038ab63a3d0677b5c52e32e392c635346fa5c712e4afbafb4cc1ade4a0141892d9650bebc2428d2a4773b1d7713797e866ac4a353eaa9c17fd54cf2d7f61d8cc85e3c00116972d7829844138073b7c39873958470be472622a9d9b26427d1ac89ced710ad5a2b495eca08be572b7c7ed2445a6f2fabcde2a92e27fc1f9a6219e8a28537af6ef23407876a5bbb93449e833e8f63e2ca4edb565591c0c1e0a0e8505a4b981648510e8eb9f4e471b58c089a84adf2ebc34108697747de3e696dcf7268d1ef5852164884312193af5fc413ddba42bb7d2a59054ec50122470260e703645a4f366ecef40ab6087ccc12a22863c9310824d715523ae57766572c5f5758475336724b9496127301a4515e01c8390b3c50480a048db635b21d6085dae4baaa93a762a511202681128183fea6b1634e589cf3c32a04f22e6da3d88685422cef206d70cf631df2b1d7a926992eb1d6c0436a38a5eb84f6005733584f9c380bf6476e4dc390ab45275c1847452932742c5ba4a08f58676201f04033ad695737d935a1093b012ab1745f5cba4037def88e52ba82b0ab15901bd9ad40ebd2caf64c09d275e953aaa35164e31cdca18cd29fdac35be5246a843b0b837296a95d2b10e04e51ea4bc6cec1657f05e4064f5d14b014b28a89fa5d478f16aebac00ea736b108d08e6941a5f5d3800dd0ab79e3c3277472170012963ce51115e8c63f4993e6e6dc90c9625735a9b4ff0a5f182a2e36b4c9ca42bbba0b5ea7ae2cf3757f53c8ccdd7b1d473aeed93f73a825c794d3bb1a7848a50ef38e2421bb1e7a9c117580e7ce16b0f1a2c0c680fc088456395faa3acb399f9ac3ac15521602a8373d9d820e903536acf2c31cd1121471d35494fce596cbba005becdace5aeec793f2b0b3c7aac556f89505c2b44986ae78eb41b3b8558c8901a44916fd3a9859d25c67648032abffb15379a3bbc5adab3804e0c90d004c4e54d07b90cdabc8253b95c769254f86054d01160b141316ff0709ece641ff18905c70d7d21640b12bc2032666cc588cab191c8bc37a4df83a2f8d734c2cc2ee51d1df8544a08f72028e1e6f93560c90f69c0a08c7db49266a5f431f6722510da77125141fd9b9a41ff7851173e8c7ec3766d7a8f203fa0bed45ef4e14f39c7c3ad93c71ec5a666376058fafb52a62d3a5738f2b84b0ed525b5137752430f18cd2695299300e1dc90c6cc5b6fb9a556ad6ce1859d1d44bddb6c0b0fbd4b217da8c000db9e6f9b65c7690346f66cc10221e4083758b00cbbcc915710bc0e1a2fe3984717279fd2dbf85900cdc6ac06ac8057fdca00ac44ef86a2bd5bfe2f53a251f7b6ba0bbe27a6c55fabbc306516f595fb754015907f37dbbbd28ade57f71c6be54a26a59b360b66adda8490e3a8af70f06b71a914c1cc6ec43b3d838bb40995f41ec44d42876fc42bed1e13f9df11f786b6f88f7e870b3ae356729ea7aa6c656c9f8e498a82b62d05567db27e5a20b39e740a0e55a019e793cab698be2dcf72e7cc105c0b22d907033df67a46c46981fc0ccba3d6cb7d16ce470b24d96b083c6d12ec72504ea205b22d825fbc082a5e4c14f277501f6ed91467c1b2d4662d91ffdcc82ebb2b994ae061f04c0c5e335381369822ce6070b265cda044ad1aa425a6d8d2559135593cbb2acf1a0d4284688e6293c34135fb0a12539b8d23d111cf0eefc7840eb8f5d47deb8bf7fb00f82958345fd89e203f907420b5924b92a21fd7ea7f4b8971b7bd853bf10e1dda2d06c4ff979617c17431c84a072391221de90b82563ae28557562148a2544370100e0f17635dd980b36f6e7f64c7f9770328488afe0e4f297fd3bd3aaa93a88039913c1e375ed6749d6ef3a5e72f1ebf2f16130e9160ed60265830f2b2cbde5b02b6ce628ca0cb262785205c2f00a242f3b517ef9caba4ac75673d10d6d94baa640c9fc69d6975d4f1c5efdc7b37afbff91bedbe1d6da5c49a1d5713e252a65ff867847b02bf0d80b1b495e783cf7a3ae0e0a1e736e0493602663ae257ed24340f03a5854b1be4a3c2033a9c891a56f1a3e4cf1ad5e3f4e7335f1732cc1ad20307208538bcb8f5e223488f4d20030065ca79bdb2f8db7bd6c0d523c282f34ed61bc14268d3cd74a0487836560a4b70d34f8c03ee9a5d7c656ec76dace14e6bb3a5f10830863cda5cf6bc84df634b0a544a1ab92d86a577ee4f1ee7ac7b2dfe4bcb2f99731e595a420ceeb66e7f1c21709610af928b2c8ed957d9d3e82b8867fb98cd985d5a7c4d0a6b688897c6397aa5f3d2a348836eb12211d77d755f43fb2cca819d5983d03d83fd6d5ad54c3724fc0fb896ad3c48e0d6088457d837a3d10d50b3f243849bc807575da6747e8b8d0e53f7b51904fe79e364efce4336a8e23317bb07d94f4e651419db5e8db2c3e46c6a698cd9af97430756abc43d0d55e734015fd2c8717df232db19821010019cba4a1f2c4d2d7b72c5c05bc5482b0f427cccc902deb475d1605be639ff9c629cae0afdfa8d4cfedbd4d2fd7e076d4549ea2ff67f64d617a8232e36d6a9bfca18ccc8fa0a7b05a0bada8931cebd16361cbcd626131df56c02ff6c23277b2140cc2981da1d7eb87ac0a9693e8de4f414cce08b88d4af5428d649df1ab71543a1cd5c58bc4a0c0e1e15c6ae0eb49676301ca965c872a5f49051e2170a71008aef87a977bce10697e35ba55397b6bedff7c2bbf1756d5e72f82dd79ac96651fc2e20c02ce8bc36fd7da6853141755a88469d9de9f9abc0a66b237722cb1af929d756b1c91d19aa19efd49df1b590415548aaee022257651fbd080c21d59b9943b57979d6c471832da50d708463882495c19ef7160f8272ec8f9f32f9e9a55c08f9ce88d5f00e923b3d945b7d2de91f042620c11a14e16861a50c733111b2be5bd67425a7efe46bdf8751ea16a0bbab0604f73c0206375c00549981c74b46de4d23a87ca16925ae9beccd84c35d60721e5490949d2c1e3c845c8616dbe029290bdabc13be3ec12257f21b7f18ab4d52ed69b402259db5b02bb1ac6fd982c5fc25f7a724a5f16d52f4438d5f004c573a6472146e77ee02ca3b129db922dcd0f458bcb91d9c9d6920ed79bce2dee71ae997381c6d2de70e5c9bf727c402d236c8fa61b4d92350017fb09e11d6e92086ced57cd7aebb6f492845c60b8a32734d65e140643511a754c8c1b15fa1a80f429b5081546cdbed54fdec2c5aafed643b744b0998dd87f8519b2f7b10ae3573100454fbadc8a4fbb7ed95c28340e01e60147a9719a65477878ca1241deee04f77916a83b52370305ce4b3876290268211b57a01a005595deaaeda07e2193c9beda4c280adccd224a407dd0211d253e8001a973fa4f6228d9fc0559d4231dc8af50ef01ed4b273c04b374f0b0fc7923684f740534b9735b06558039db9b83d7b7ce463a2826b3a79c98412fa8e000940f5f95351c01de81ab25a263378ee93271c350b90a0bf5d52db93ba78e0e21c64f5780a052e01485021c115f4abf86702b6cb15a1d0213da3b2bcfb019776ab1b01eb32d3837002c873e28d10e26ccaaac26369899f0a80c21da782fa452c12203c1af3a63d9f3100bad2949fd361c69ea5784c351b63029cd0f5f2369d49710719b9e2ec0206efd580020b63368000c093cd4e1307426d69262d84ca2e5e2a20b4d9009f9a695f3fe76125cda0b2a61d8b7fdd8083a98443f3e63272fa4a4b9a953cfdb7717cdc5713f4f172837b79b8b479087550222a05b255c856c94ef1b1a05ca62578b9cf7f083e8ec8fb9a3696228f2da4f624dbc55449675e7cdb4c43cc6f4ec8515d14a44a58a3ab03b87a04ede05de15abb1cfb9d409a130fb0ca321dd67954a8f89e08eb3efe418552f9bbb50147fdfd76efcff9e10b069298747bc1bfcd74462b69a3007ae92489cb6fc97482e8332a37e0631ea007d2f958b4865a6b66438c834aec9bede07de13cdcb1a14e72f67c6a3e497ff6f08d2b8e493412edd15083e6dbde28cb7bc86acc8ffd6700f948b7cef31bdcab0045bcf6f38d0ab826c0d906ce7acd450a69af131d064afbc6ef56d4e64d99f861ecb946492a57ba93a75688b3c020af5d81a2490976197831221843e416998235e2a723b327db8534bc659ffda1c3c7b786da4e25406891bf905c317f6cb6a47f06564b9beaa1b1b474203f54d7938b96dd67b641484444f13981d1cf003e890e2a4028c2f5b1f34f5307c064de18020baa5fdacc5aac3a4ac36e3d4a468b725c79443d9f94b777574523af3f0f9fc8e3719863cec627044f95a401c858bd9187d4499b79930c0b684e8c8d18a043b43a6be97719de5d4f81f314984e74eb78872d0b4a9cd03de5aa77faadde10111f43873afc026d31ab54aa0e20beb16c28c91bdac953134f94878ed737b00799816da71f05130ce285e9f258cfe58ab05d5c9d91126954244deb3c5d0ae3c8bc61057afd97fca7e4fd08b0c407577215e1d88e3ea5accae7933bf100fd711a9e37879cd8ce180583aab93f26e10af65fcf1d8cdb716682138aca457d78c4be525a891702dfb0113b95476963d9ea1445e859f5e02e0b5b3d3dbba0498176dd401755d40b0156017914239d6af6c7d05e4b2250bfb7fef593b9b8d69179c0ad3f7111ec0dea9bece9f2148862166ce702f9334118f7c4583d34fee60e26c08f1f01aed7dc21d56b74dbe906afcd81bbaf08ee00221a93fe23df212a018d18d78c2582ed376d5099e4b7a80824563ca18b723d520288dd7470c9222a8535530cdc7294e6818344b950086ef8c3a7208ebc53dd88c04d7bd8d9b47c0c6923b95a5775a59f55fcfcd39d9fe3ec2a30a0e3a64e610c935f2aa03a051f6a51b2db6b32cfa74ba2d48c002774ab977c6928fc930388094a96a6b10092149e95b6672ff3d9396331e9d6cf6f91809422f2be931a31eb13172a60dd2409aa4c6cc9786bc8bbf33d38892907ad4d69305b957087629e7e811a589132ed99220a2c912cdab8dc58a61e93e4400bb43e062625734f44007293cefcd87133d2219c944d295b888a646a19d27a1a8fe6b0fe98fa2c28e04060c3c2a460b0d7d0e4cca8b56eefb7841b4dc57c828c52d827c29f710ec0f0b00af78bc5c9db54f0deaf2dafbed2750e5433f36348feb8cadb1730613e1b7c0eca577e39b4869c7fc00e141f3acd97f12ff4e1765ff8966fbc04ac2d33a34d994057b17005ef1d9fc6e51637e623feef253c37a1112bcf105653e766e14660168b70356e2ccca2b10b644ce66771b4ea09eec5f1f96f09a20d08bcb4cd27abd7b442a933a0c2c2177621e6dc1f3c52552d5aa54d8add2b2902618571e023779df1d22ffa81026c9e6c70eb6298ae13703f81339d4e188ae2e71a85e7577aea2ab8be3f8fecbcb74e1425ca8cfce472d9a465bcacbe9ce2604a048a831af1740fa9dc7129cea8704b5a7f10ada12b9d9214ab0459a7e1caad30611644c16ed9a901c81682f1ebb92caa09f56bc75b1233b05cb0628ce97645bbc82587f161724816bb0940c19d83d497a8ff0b77921343e430034f07c2b223b60777a5d86bbe82924d5803afecebdb451e2307499990772f37f099d4e977a2324d0f04eab584c051fd8d07d2f04c9ce55218529a6f6bf04a187c2b8fa984217d6fdb7a56dea41919613ce43d7afd499c78349772fc00174be9ec7bbdcde6dd27d57a218a719dedfc892cc5745742e20de7a8d7397c6cc13c739cd6b11e360956178329527d9c70379b81056eb85180f5e8afc7922c70c929d55b051010732309a808325cf2a3b696ad3eced396cd5dc8a9764be5db58e71c0408c3d492aa31447e0e76eaf1bc2b49b0e1e080a89074d6ab915898c03cd65f6ab2a78c38b30fcae9ad15ed27a070716e5c13404d92a41c6cf956e42c8d20c39e30b221da15259a6081a28b9faa71dbfbf1803bef12c4256fae6a5c3c3f28520b34887da1e1648e8a6fa0cb54273760c09d8a2cc234966f760c1ecf002a95e7f290b5995ed99802f3a6a2a6bf64cf546b876eb191693a0bacea08344435ce13d516b9002386080b239230e385ffe36c7afe470086d92418618205b6681f65e71e61a76c4f83b289ee98656f5fc903d914dd686c16242d49498fd679a803fc88e0cb4ed0a8e54f86a9d9b25c1be26f4d6cf15ea8b253c5d9cf6b0e3b75c437e3943b1cc484ab72d37763cd724aa7ab84a3403d6e80c47d87b9715df80a488b68588c6ae01c0f9ba5578e441c192914eb6c1989a2c14699ce0de770142be3d5b1eb6e9399b1ba35782250162fb7abc3531e850104d9c94fef3253cf35b364813ab248b090b1b62220af5b18e3fc945f89cd482bc1e133b18fc4aed842c0a69489c919320cd70949d2d1b5e1e7f901fe65303e4bc7aa7fce219a8ec318931132a0059b1c6db649a5367bfa3a1a42c21d5064b5e18630de7f56b331783d74fe774252a6ed1daa18339563e114e8235e044b01b778072d3ff1b0773cdf18c122d39ffd515d572e998581935b320a0f059a89c57cac9226311cf949c8daf9825e58b941abdae3e28dfc958ded8d786769e64047971582d73fec64f6d31e294eccddabd3eac505deebac6de650919c67bfeea4f73f4a255722bcb529c795648413ffeac1f676850a70e07b2f4a230f729775ca7b6aeaf7686903f2886ab9f79b21c87d581b2416b1054e43d34c2e46c992a221ac71d3938343f6f65b316bd14bd2258cd14a7abdb01fadb6cf647a1dda352e13274a28f90c9c58c8102514b0bbdf8bd7abe6cd328a1f0f1f4eff2f06d87f79db7e939963e3bad19b6cda314ebb833264f2eed3443429ccd19854ae11849aacd1e94d3f853bea4fdc26a5ce67db4d3a961555071fe67acb462428f2492448d0923b47a6e860b06338cadd10373754e0de18bb016f33dd8bd788b54a1f1b6de8fb82db350680a954234a0d51bb8817ad28ea53d294b444f3e44d6e9d65a1153949225c5918505d3e3c427368631383243ddeb958cd87f679c280ab747c51359951685cc6571dd35dacb09ec46ab5cfd02a0d291df8e92f9d48b8039f769331fb8bab898766374218a458e329ac5181e5aaab9ea478064393e297bc48da25208f1735a4544ad31bb6507f98c7aae00106575be7865747d0f3ce8ed9a95cb27db298f66c7e0721a9566beb48026a90b4a4588e83bb50839c62bf88f5bba0329b7b6fc30b70a0159f4fd585f170e07ba4cbeaee74f2b8bcb531339bed6bcab3e599b955b907fcf2e7e1dabc556e0109f5d34c6fdb39ed956eabe29a1253817764fcbbf33d8324381a33552820a36c4ae909415006978089b999258f6260656db2a468bd631b67a815a457993ce7e158faa018a20d18f42db5512b4304e3c39b7c9dbc3ba816373b459a3062b5d51ae36fb10625041738aed873d4aa6a506162aa0be670e15721552b191f9194c26554316cd9512386addae77899839a1049674605877f38a68d40eec3cb36851aa4e4e6bb8308d316bed512f4d8136f345951e6bb91fbd65f0761b2208b537d01c71c1145773360bd1033a3cd21aa3dad2bec46a4afe9eb15c552bc7f64b0d47fbce7f0f3fa161158b8ba145c9c2737f21eac133ff230c8324da9d3b59ee3ba336b1170fb4e2793aa022484dfa41b75bb4cabd0bb0de6b53ef3f895e9c305df2e64249f7ef04387e34a20c116716ebd3947e029b3bffaae6ce28fbba7f8544284fc7a472508237e8330072c103eb65c0b4ff678eec8b6b849b64ab6c349bf1258057384d25e72fab8111496c46a002bcb06c900ca1db34d8f6cf983f8b20fc0860362c8ee3ab7299ff79b529961a7ecb4c6907dd22b1ecfa4a5f84405c0f1981af07663f7aa8930747b00311c731127bb83a91e00fdf5c96b773df0cbaf1d724b8c7d163e0af701ad35e52a711c718cc318f2ac0c7299a7e98ce368b29306dfc113630de2d0049f0dbeb2c7d98dcc4984150e9f7b67508e868790fcd1416fe634d9f13845d6e0c12be044e8411984e0df836ed6f1ee237882b0fee166ef8c0ca43004011bc455c3b955485019a93904fc77a6ba91e852d079ad28f915758ee6b5b8216603b5fb3945add080041b86cd2848c1ce09131108ab9f7448d21922eff4899cceb00c1b760742a7b2a9f71a41908854908bb05eedf1995735ed7813e4d88929ec6b62e0de29377683a28a72799514c5035418506dafd33d9966515223a8a76aef1bac1128a9934d1949f7f23b57906fb000520539b0b00f1e8588f94f94d4c1f55c9a2d92316731ee2d087c0e833520c7342782b283f0f694f7b6097e75bf8c267600f5cb575ee2c435c007f98256c4f882c4229c2589c686ca58eb0a844c6323758b9fc35479c738d006efae84de0a2345c72ce01092c5268b721d3b1e45299cc41e6887f7374eadb26d610b62eca056f5310a23d7529f6302d1c031bb45830fd2e4a0b1f179d07a67c6a3f38b4281ee089565b4694172bcf9e3611a7b037c00ea4e91e0792b7ab539da0582e8bfe410df66f10f1383d6415a3f71b7fba45363b008529336f01a252777932928d39b60d7d5185c5c190049307fcc81821275865288bde7cd2dfef52dfb4726252d604554fd82a9fc0b4cdf641e8d0001b2164111b4b47ee322f0b51dc68d0aa2f010c5b4452d8bc014bd338e82d8c80ac3cd51d825b7974560786d9ebb2e0c21a74ed498ea64e4d9f8dfda4eefa38510b0d0a8e5355d158cadb292f5ea467fb4192076521645ca24aed9b30a70e7cec7edb954f66ec3de65671712479d398c386ba02b0bfb4e59984e856a6db6a649f62880e8ce3c09252cf8317a39fffd69977d5ed01b526fbfddfa7fc7eb886e35f6252652dab31a909fe8a303585521b1c7cf5ff4ac76597d301131ff67fefe15a63832e513b05010cfa352c734064d9d68b6e0cd26ccdb2e5a0e76143829f1999781bf4a736c3b7466814ae64e00ed7e3b8e121b1da0983ec4893b6fad39a5f0b459cfb379da3f364902969a163f50db1a90dca915020c1904ce9d8f78a34929109fd8cc126fe322bf005c5fe49fdf63dde5bb9378a8906063aeb8f79e9f9aa5d440faf3a63f34339ff4786274b9f5f40d1e223358f5c8531d424447c418020f419e0fffd08e1daf07c66008e6b2c097126ed6510388f43cda197b1192cf60c8873e269f4d0b17fec3ecdb19bd14f322e569341830bdc7d5d311b1741a276b4c6782e96946ac4caf4bc46915c132ed7d4e0b427420519e6b0f6554d9a484ae389465c69592a4b228af2913a594c1a13c876d94aa8690725d6ba75de15d5b052e24a00546afc26ae3872dd9e5ca2c8a412c1deb1ed35ace47559f865dbbe5dd5c0a839d0facdfef56e9aec2a9cefa92d9d52c1ff7ec336337facab46241f6ef8ae1702fb9942ecac0db2c291fe2e5a1eee708bc0821ae408476217841bfa82729adcc3f9a83598c200ec5c4ac9c0206113d3b244796d10a7ca019abed7c02e3a03331e0104d9defd934cb60206738108b642e0dcc8b36cfd656f78d08e25a1968fdf55b5dd6db78e7d345436263e65be2b28223afc79acb0968bab1a85c5ba68ed7a9800fd6bdbb8b3f602f82aa8fd98e6419e4c86290042f7a23c32b2832f0b2dc9f2005f66af0504169d331ec9d195a8206fc7c85e99146d845ec79cb279c5c8c0981e3f8bd76ed6b98ba01c4adce425336a888d4663b6508c09a6861b8012b368123e16b26966b8852a73d6ec26f9964ba10e0795cd50323e0b79ae83ad40958a21f0f552d07791c1157ff315c0c5e04617f3e1d7ed6b0025a1b5ffaa7fb35aa4bcc012179fdb6df006a89142c668e093fc98c95b0021e81fe2075794906769d43fa097e36a484f0c0244569d33dd308732090dd8cae7a158e17829caa29da62f12f1e1126d29720597112fb511e285169beda042542d507e282c46f49889cf89152b0a3c4bfe5147f1b2133c62d6b26c128ec3a5554bd9d0183182a01e715f9374c584e66204e7b965127c03f9ef284b5098b2b2a1ff866d4bf37f260b955cb868dfb653824f72b0a96256c877f50c8c019d37ec7a958443ecd02d239173cb1c9acc45a72f30d628eb5b8202a11776e2d9e8a4e95d6048410e3b8b6287f1e23c131c0229b7871dacb9e982884407e49ad09b1a3c1ef15b7bf2c96c1fe55773a0c2eb54b4e8ffa81cc416bc7fbe6429e329a0a470938e657f7181873397329fe5b4b5d06f0d14c6c3939209b325489c24a37181a53c1109cd1202c449650d2de506f74574a3ba1866628b86a726c12ebf6259d699ec749d0eede4bbf19f67deddd5802dba006aba138ad3c25cca227e871b69dc4eab5483159a32d3fe51485f5e6ff9bb660e62f67528974e01bf3ce3ab9894ad24627848a804c4eb54de8b965509a706394da0c885e188a198028134ef27879a413ceb8dc21591fe3e0664d595ff1bf34a360f407d1c695f44fd74d38799d124835ee8526a0e4765d68d368317efea2ec568b198029ab42a85bbbc5ac2adaa74a0c97d00b4796d534c4227a7cc71924a730a523e981545e401a938da0ffb5232407eddab0bd283caa4ddad0aebf6a917b910473eb9d14d163c69d1bc7c7986c9c945af4eea62a965c640148b4c8d30129c6ab85f39e2a326d84bb295ffb85bba4adf2db17024784cb5e6eb5ef7e3178b1544b2f7fd05bd366705258ab378630f7eda5f0a246c0467d2c4b5d278932fcd824c0703c6ccdd67701ce923217b71ae9bbcfd2447289690fac045a57f4b906a04d279b34783266295e9ecdbc3992dc14e248eb84bc80ba8f6ea19dd0db83188330fe52b1f082ad4e4c001658ae03ee0c09c927da102acb9f5b51230fc48c58f7ab85bb2b170039fc9ba55c3959cdc7af8698c6adad6bfd5d796380200b6cd946c9be325a8d611e2e890c8dd5a2c6f6c6648dbdbe5cd52d62f62bd7aebdbab0ad7ac095993192c5623bc5f751a10138c90dd7b57f0b298e1c70786a390b6c67f210d92c941bef6635acbcfe490287fa717dc259218dfc18856d98a450deb9e63425e8f001875f6c4c47a2c04398e20bbc58da12844e65e9414289cb61c202abe9eded57a89661c69c26b2ecbb5192f3c80849918a71ac9f2fde82c319565d632262f4fabaf88e60dca3bffcad93783bab1b03c84adb814f94c55fb7a4f82d49f2878053c84788465a8c0dd58be9b3fbf6b53f58f695a986eb9e33754adf2bc4920d3bf6fc76527b77e49576a4ae02d186c491f3c1e000e20d257a1c79b255b22e4f9b061e34ad2706d5e3e728161a0b822ae1a2323f30ab6698681f77854a39ebc8797a40b4a4d15e1eba63eb7d49432943b3cf33bd3a9c8f3347b1404ce52480b339ade2270802805f5bca80eb0ab8fc3b1e3bccc3c20038c148c7e0270ae73151d078936ffbf092522f10a98abb89487b79b1291b88722bb10f4bd2cd80d94fe75af0279483fc910e23defb27c636826b9aa191abd14c69e04aae3998b7ff95c728f41e1205212d001ea05611200f030a1de11e60ebefdb83521203f5af31f1418cfe4389d9590522856e52a58099c19fd65360a7a4e01ef631c9ef3b1197d1fd973009f55a41477605bc42f41928a3b8a1e2f885478eba85b6c0b4116a5659d4d47f0a22c0fd21d507ccd76132b1f4e3ec90722876f5edf4050650cf288d31ade7fbef0933e3a530006addc6d82bd76c17763871cb188836e55f90f953ce010e30538f011606f5ab1f0252901eb90d2180d5e7f9553ee551eb4cfe8ef5307071118c87e0aa3894a82d894051e2b5e10dece4a3bb69cceea908cd5b169d35efb67e8fe4d64fc20b216b31da4b8df9df529589868e3dc8d68d698d1a6ff214deb8a9fb35116e34dc1ef249ef47a1ef19475d48a16eff2d73c0966550712a5fbb20b6d23effe869965855d90ffb0bd84f445907377b245b821081491e28a6b9571d407c5f2f45d8583f155d94a6fa6a34342940428a85a739c3e07314fb34c4c660db8028f0c50c3686699adbaa7d251c1a536b44e9f9ae2b9f983ed65cb27cac4757f0095571ddec284e37cfb441d2be2c0f7a489efdeccd271fa10db6b9c1d31adbf65dc2769c3a159950fc67b751fe330877f10b91127bb1755563d352162695d7a1494724fde4e2ba5708f133cdd3b0866986f9e63425cd20048e2a8736a930c6f2ad0de4fd705d7cf97c9a02493a44ced2734b8352ca6846943f6fe5546b7287bcd5a8547916832c228368c476036040279437ac4cef2e56a6e990eb906b25f1ba3898e09644df5bd79363076c571ff98df33240fbc4f5e672511312c14a9d7edb861a5cb2756f235f9075031a6c417b2c092364a49091c331b519252bfbfc0e14cdfa21d7aff5bd69c99182583279f15abffdeb030ffb68ee2553bad4eec1aa6f4eb18e3a978503b438c0bb79d22bbb4101423fb30af8ccb0a14aa1a4c7b33ac3ccba055ec310defb2e20c5280510f66a9caaad541d6da318b477239fd679cbb80ebb4b551f0d02cbb7e414e089779bd47d9887763805105cd3076bd46c4e39a107b075ee98bf8807305510c771f1319bf1c77417c4b430379087fec2f872a21e333fd2278c33798bba846bf1984da88a94bd533f227c4ce1f6b089b51ed370f633240c17818a507b705ed7155badc722c2e35661910cc1bc616ab07e9ff2050ad5ea3b0508537617f83836ac15cba8156de15b0a6b55aa19b964d3be159912263dab3e8f9d4f16473c5c4900f5e8a73a332785a9edef217b3196df8a05b75e6615edfb905d0ce3b7d2c02def5945fb3d0453bad3442d0b0547fd9fada8d7648866124aabbe6e07fe9838d1e97b3b7b268048bc0a3ec24c747ab58dca2c82952aef6d809f512716f2deee46a6cd55d1688b4b5b018c4eb3b63b7fc422deafaaa910a6f405c7a447fc952b3806e7f1d24b4126565660a09be3600d85619b1f61011d1493c06d6d2e012507f62121b2481f4145fe3f88422445a36cbe2e698301508c56e265d0276c4a6a7f7f456bc89b9bd04565a8704e6bbe1069c19c35426c76d505a9bb800a09bbb9491bb255c02e0050ce78f3e855860c1686c1dbe1e66f2de55dcd3c49556c827a245888ac97c531d76c180fb9a6868263e2c013f3e347ad8ff80a8c10b5bf78d01436cb9356a07ad258776de09c67fa57297fcec20d71951e5f331b93d4a56327ac350a80cb599b7fc579eaf17622dbb1589e35e5b2b1851697f59228b256861e9bfb41bb5ad963b0c5e58e150afddc476ec2e81fcef15dc6d47d86f4316a6f1e7123cecf542d3ccd082e4c4e6d2b212450e493975ddb89a29cd96693e5322da19d218c66cd54ba9ab2d28125d21cc644b78c05458231e2354cda7b9b48264a23656725f8cafcb2c3fca34f99d9221d25466fccdab1d14f311d2b4954b9db7fd42f921dd789b44a23b98bc24d950f15fe5105fb2ec2f098e9fb13804047249056cef2776ca7464d94ca4d43f11df3d35164c2282e0d8b2ff1a76cc2bcb5c59f0354ae280c1f7210ad1517efba2ec5719534156c9d0b0224f04833db4710049202bcd2896da80103dc2153c15e719644263e0794d89ff72c2b3b82a4b014fa4026d6e1ba260e37977620c74ffc864c319af1c04682b3d1219e80ae8d6c37b122cc6e6986e2bb75cfa0fd674e97b2dd8ab9600f50eb46e41f131d774b8de03101f7c8ea3ef7e652773df37299701c23804a5419ac188837415c0854ed3f0d5b9f50a710d7f0e55563128dbf9f3291591195a938c77bd0f91c9a311845e3169ea8876936e811b7fa672c510a29a3e04a24be0b09f823513fa48cd091062ee43ba6ab004a3dcc89cdab8fe22efbafc7bbd6b9f929b6992f246bbe9b91970c06495730863ec176a45b0bb0eb3f86fb11cc37b75d109e9f8c9d87be3a156ace227c711961e4d8a9b22bd2894652c6d1d7e4ef53c798b2f062521fcdb1e128f46f5d097ef1037e3890a148fd78de95105b54505729425158e4cc2525ada19f140035abddfb7cfe21731e35b6f8a13ecc215521d33e7b8c08f6c805722c046eee62f4a3f6958ea7c1691185ab6ea1a4600919ac2f08aadbe2796054353124027a8b5d899aa25168c8d7a1a26b3025332f13c04f5a8925b74278b337fdc852b4a8f0c22783d8745c12a3552693098ddaaf20e8b1a18b58159493914a5396828d9b061a59b004c6f01a9c7e5edcf56b7a2be8ce1da1e524a340cf789c2c27c80211b9b446d5c64f6f05054ac8edc0dde5008013bb22500a4258551959a2450442c0a2b71294a02c4d9d44305d566cbe90d34a1cda8ae7475634215d08742927fe7460836c66cba4aba249e581eaaea098dfa6aac0779f9250a27bd2f7270c2e343c7508873259f84c28d046d728286d1c97c25dfe0b9a80f45b69fdc50e4151febe9b459abe536a4198b58a1aad70261af924be7c3895698b4bf86aa1b6c6ad77ac7068c63cfb03736c41330370ede7a1f907ce0f7023ab49ed522cae580309cae92461d6cbd0e415a95009eae266bffb6e09c406e19a21c4e37ed32475245e1df2a9a7e883d5542d6b1271836dcbed50078202618c05f41ac48fc8e3eaf911b9180101d5fcb40a0c8c8b479257ffbff715ad22e68925b41ec301753c87044ed47fca7ffa74bcdbc40bfd989f8d75ed28f7794d0f45db7d34a9ebd54796942433bb40e488b813680f92a5a27136ba0c4c7a6a4821e50593e0e5b6780554ec2a548a0faa6297ca19bd846fbaf63ce9ac576013c22b3493810a7444164c54cbf5cef03d4b1d72f0d9025e8ff4c445bae1531d3efbdf2f3f1065d82d1fc16763c38bab5a8507e5d6007fbaf2fef33aac7fc22744fd012ec318d0adf87379bc74067d07b1e23070d047fdda82d471a26c395b9f63ac1203458377c4d74efc0aa48a158c586411992c67ad81dc7b3b10b0c2390a59ad5f4a45cac782e885049373be84e14c1d4e08ec237ae717793e13304047aec0a1e111e7194ec147edf14c12c12f4b5455696bc44f7122cfac12ac12d77b06ba92b69db9f96930911bd2846b39d427507c789c7692aa38beabfa828b4caa73360a42f6570c813bd609950d8bf73051b451b97eb4f988185adfc28931b3fbc51ed893a4ede7c77f291ac13a22aae28f5cf6050da3bc67a38aac63c3a1e56a933e228fcebcec44ca4ee92c6e777878389d8d42876069244729955dc15741568357f30bc700ac96f76eb4a11d40e5c882e22e6ed157fe5310ebbe53e439c2a4a9283718bb29bcb647e630c54de26358803895c6b1aa89016c14169bc11b2d0315745766ef75709a9fa1196830e445a5023e0652241d409934cf0ce6827639e2359a494cff156d2853817ea1d576bdfaffedac3aed08b5051c9dec746026ddd0b51564c5584fea1e4b820a5721f4ab6eb52119aca67cce3683793a25cbbd30e9670a17071eb81c09e419293dd1ae0581ee1e34b96128f1adac46f391ae35330d3c241f7b5c7374a0da8c85894d144d2767c49f140f04e6cc0fe968b87d28fc49001009b1d157dd41c362c9af2a2dde0d538e3b8089301d0321f87467249e2810b4358cd70681d62e59a47614719754de4eec593f05af4fd83031c5bf5c53b9d293d2bd59503d7b26a0ce4eac2ce2b821f4b022d8b2fdeb9ca361962995f8a6b1bf6993139b41cdfb75a5e38f6a145521feb7849e57dc0b9d3ec5a2310f4e1755540e6d0b1a0202314b6f408cd1ebc9074e0e0c85f978808b1eee0815a9b10f88c8347d070abb6089f7bb1636dfeca6e57acd95b63bd6ebc8f053560250c2a88cc8ae96da1afa9a90f2eccea482cb8c506eae8d92cace4a047f72aeb3c31dbcb0d2b47d454b286c8978305c93f44c968a298a6ff0c61586fe8defa6541eb64739dcb7df5d04769ab86edb4c005cf0eddd5ed6582ad551115b80319c5d41218aa68f57a1dddcaa302919f9ef9336b3873465e25450c1df1e4b91f45ae8b96e6c26028afaeeed0d4a3bb474e53c2b4f02b026bcb48a23ea0591da1dd00f0e0f812d2169be9541b87b6655448c2c0f321e44775d38ab5068b9b51de9f92a91909be8a2622d78f0a28566be2a437b528f253ea61411bfc3b05ce8170f8535ed4e8bfd26d059da2717c30819b9e5374fb630a0143b5850b8904ec6f1275cecd6b1f4fbd89dab8e63515c3fdeb68f494ba8486c9a72d94d07456080a9b6a53acc37bf444dec6afaaf20de0e4a12cb875816c0cb8fa7ea83b4f24d06b5520e8311121cf29cbf9585008a5665deeaa5bdcf5a58eecf7cadaba2a92c62d8fb9757f4221058b41df7c47aae0039e1aec2d7aa54989c250ca62a038e3f5ef60b48806e3a23e7943e92442449137649f87ce99133a809604b8288de67e1bfe7a9d92844318bec8ed31c5b4d999249a2d8db19b414dce408541dbb2a2499e249d2397b97a4e13ccb7e2e02ec66f094f6269ef84a741652c3af0c6baecb94e4cdaa49e510d342ec3436198ea0f7e8c376cf8d3f9cd4ddc498d1e35ae85b8c21db70c5a70f6ba30dd383682fbb4392b4fac7bb8e0c5591356c57648ebc09dfeaa88932f309b199963cfd4bf3944db74048d1819f19ea264c48ab5c4795085f6bf00e019a7bc5daaf61ea6c3a6a00faaa5639173839f4805175f6473a5ba97448bb26c596f5363580d8172d36ac7335a4471d4b0055097aef591f09c48984b81d7fd0fd33279dab6827ddc5d80a7023fab7ad26b8c3dab86f0cc0879b883858f72f664389c7e1b57951bfa63f0d4d1498fdd346530408ad758af8516a8a572e91633a0dcd716b08499b7442e0de97131ac2156a7a3671e185d48ab1f22130e8cb5665bf66655a10b1afd6d5f318394e8d84768bef4f64ffa8932d53486ab571f81868f073b164946267b97d465fd4bc89f10b0914f7191fd057ffb83b2796582c7b2ff4fa883ae1cc13b2d5c6e1c30480a93e6b95cf9574dcc238eba8b65481837cb08bcbcf9a219fbe5b1f65fee63e7a141be0de047d804d4c274882608f421bca37bdea909f1e31892a9deeba4a500f1cc8176d727685898c185c38e13ffb987323d63d47ec9555d873a73b82302e3e12b6b291701e5b4f8ed524da791c9ae9b9a0649a008708d37c4a4e14ac078316c5b357968ffa6cc7657d0ee7bc7bdfc829402013429013ab8495610794c88869d91d35038c1518cd1d50cfe2e5c98e696586920340eb7a9de3b4a12a46e92da5983431584a0ba42e043f70e6cb19586d778b717b432acd1f3f663dd611c1bbcaba199f995b282389cfee63fe80ba276018c4a52b1e88aa9eca544612eda6fb347978d872e420fba1862039b69c3247956cf60b905d259b6b960d07aa96cb9d59ce110ae728da9c1c5b26866e10e22cfe112b4850c1965cc000b42a0b52daa7bc341602d707034c898cddb755f017a994e1a33dc6b4796a8360817c042ea1b0c557d944fecba66a4bd9ca07f682ffc0aca618970399029b65b6324deab1e5bacc90f10ad0bed90514cda481da16ddd95d9f3b982c38c90022fb4b873b13a5956c8768aa56c17afa4bfe91258a0762c21fe6f4c58762496e6aba168c0490a947dee009601b4f627ed48aaee0195fb5f5520d36174c41332d2364bee2c738244b8e5a563c43dfccbd1de620250e9bb8fa1d13da5fd4307a049769a3da8368ebfaf3feef5d94796f288fae9c080f280241cd8932ceb4e6216efa22e896f151bcf0291c8ddde81d0587c959377d54981cd3c8c78d0ee4ba8c4f7a9ebfa98c184829b838e3a3505b1c4dd8238d71a846b225cbea8a2e3e904b251f6d3558ba408b534971e404839597c8d258cf9bcd9e53855a38d18070ec61c3495b3c4c86c4db3eb8c7f46f03b1d0f0d3e05ff24926f4d761390d7919bb799dd8bbf46325ece63e2b0718fdebdb96995294a69e877e777b5e4dc0388f0a806e8f0f4c7e05ec46f4b93d6377f2c2aef7ba517113219099a839e97523f311d0795beb2fd804d6a34747a57367d94dba901e92b96178472503991773735a1dfff33d956e3ab09ef0c66d0fc189d9b2e4db319117f86028bfa2e1c90d789b8d2d72ce16c8f9dad8689ca2fabaaf1a41711e8997fa29cff8984f592066dbd1cc8310164eff1bec7114b3c2f0efc51fd6793627371bb0e7fd282c6ac8bfc18fbdf0f6b42bac8cc4834bc5b1ca47890176ecfe01980d443adc0f57b882701a38ff065ce1b0d7c2151bfd4a9ef0f6a106a049fedf1211f00c0579208fffcd1127dc668fb14880fc02223feec403292676a06e746c9e8ddb53929d77acf585944eac7ab6cd8c7d2a24ce44a7a76d4d99225859e5b9bd3e53542b4f9eb72fb4ab0ac59958f5683b2f930856843cb74f58cbe7abbef32ead78be5d1f004b34a2e227977434c5fb7d48ea7d68818644c644d2454f8e7ca72e394322052c218763a89423c918086e0e1299fda825dc1c0408c65190758e372f8a8e31474157ab438ac6863ba2d17281c007639f39eee998ed49c719be8223ed71f90aa92eb2fc39393c5d1036704053f0978506c08b855880cc862940151f174ab2b60689c7dee7bce5349698026010fbc080b24c34bf3cdd4478c0ac08fac758bc2b106ab9fb26a9c998a69d15af84f61ae87bec1e8b9bb749e788eedc62a15df9e05c32fbf96da6e2fbf6586ca4232b5041445c1e5c4de2d77c6b14a0884e487481247b96bbea488e1805d5554389f8702169f39136020768251b6df481bba944594e6d6ff108764bc6ba2997bce48e301bd20389627309600f55e099395160162cb0b38226215392bc91fd8969350fb2d2c76b1f41821bda2e91d4c33a8c796634a9c96d7857e5f69ab5023db4c15e92979f7ee27a79979beb6299ee6e52eb4c6b8973e2c377c1f6bfe4fcc7de6ee94edd4e1175b691814d1da0d641d97e7560decc04b7f455bbf122b38e698ae0da89cc74d1a278251e57cfff494143b59998152caa795c7f3002879e6b1b4c522b01684a2028cffecc478fb8bf1d4640fa112b50d8729f7749b71fc357c7d85b4266ab51986f394edc65c40bc46b500dc407128d1903f8c5a6005a9321e3dc6f0632d00e435348ddfe1157d2a310e712a1d9fca90623c8e5f6a7a3ac1147c594e418b645ae5d1d3c1e326ce67c5921fabe9b1443faba441302c49bb93389c59b5ce7d328f72a0d8019e95312996ada084caea59347e6e1b625e616c1fcbb5d69125d1e4c679fb87b5bd38ab6b61c76ab89cb243ccc89a2ea8d22effa0e875d74ab2cd79f9b4653f4c58eb7e7854ae5759b8cf47c60e5345a98914cb151c7508e0630662346db2fe8ed083e982dda421e62d5b3d78f1fc718da91ae0bbc60bfaccd92e94ba0fbc9c4d006512add2c14ab4881118d014ddd0ac428d9aa225c5b28b77852f4ef14929102264ad60ff6566641c74390eceab590f993e76ae2fd111ced8be203023e6d4ec6fd7592ba08ee008340405db3a7e159117e28fb7215d2461e0ca47e61ea59ba0e9f54ae5f5d4fb137f8e89eeba8d66d438f27b00321c18f94f932195d2332d2410fce72b4f538c930247d2ce53b0a77db6c7ca284f3cae0f4651e3d6e7670d6c7b2b7c37994a5ec4672e07f1773dd9b49936cc62ed94428b4417319f5ab9407a78188b4720c4357dfd910ff8882175d73cd1d9460236da97b8e2107ce96c28ca6ed250ddee897547096e3c49dad9d84953a40643499af8e99c71ed89604459b5c8ae72dcc6f10899ab486cbc95da258c313b690dea3d3737c48d9548ccccd4a689c56c35a66004c2a6cbe89482a15bd438e351f2ad4ff21f85956f9d89241ebf3f0e06f53a091e9861f17b559d09c610aa0a4e896156f43c60d04ca539b2530c360e47f0392df0ddf971865bd0e1c7bc19316cca9e0e8de14ca239aa1ace175a8778c12595053065aeafbef499e9369bb21f0769986d0eb27bfc9f64023878bb8c33decee8919bc7cbf5a49253c4d9839179a4bb8a2da791c5c37e5979e1261f8ad04f00e4079c2b4ce1f76d2b3a9dafaf613680baa60594eb0c6110c62aa65decde9528c2d6f1e60527cf8cd3cbdc125b8d0f9265d984862b5b2bc565f7326b512828326219a453193fec1bc47500a5e788e4861439bdae1e87cfffeba9684cab09bcfbd921c8851729ce0aa15ce36257f0fa6ee02eec83ee8f3da877019af2198ebf8f085c6b9190f4cd5a076e3841991aa385e3128fb6aa2d6e38001094eee9a87ed1a7169148193ee121fddbb9990c3475ecda5000611061cac99669c8095cace984dd3cd9c7f19cbe913db010354e90ed5620cff1374bd78ce2439a65a77cb60b565ef5d64d87847119c4dd0e0a9a52d90775f48da932e11516306ef866bf1b142200da74d18b2259621e5fcf3acab4603ce61a3bd718816f33b0532270a0e3a0cda258e2764e2501da92e4fbf7cc7f1cc1e3c07319a161e471389c12365a685ba51141191f2b0f07ddda158db3d114b47383b3996eee3c4e246718e9271524038af52ceb05a049d44f4f76ea5a049c45bad1685ee1ba50e17ea566bdb91be0577fde0e9226b008ed099a37b2b4ce0d9ad26a142297f1d582734ffd9e63d96c7460f86a014570be4ba68244a7a92ca0484ee52be550a4f985dc460810d555b5df228ce8b8a8c25321ca9928259ca96dd829f31882f4ac2270a7ae0b7d445bd6e8430200c9ca57d28dfd3087f76c8fff0a5abc399663f7990afa37a5b7295bd4141b4e4bffced78e98751b642c3b7f1b85d1139676039c6c13a4a3795e086bd4b4f3cd79d6384cf421714bd3d97762f9e4a90422f12b4893d45f9f56e2ce78120a3fdd298e76c10ee36c99353a23579044b01f958ffd27e3b640f4289829f7b9680ba3da1aa2be7e156393542a3f3a006cd5cccd49e418f1b25779c1daca3c681910c4bdd55fb696b6980b9f14684ff7b6442ee264a62d5dfab72beda94eb00caff16888141e4c6202de5652c574fabdd698430e1f0a50338d61d341b5b23933c48966e81b7eced292e76c38da7ce4f940bb29190888ef27798c6ffd2e6a51774cc2b429226e0f845c2dba12612bc8140b6226eb8138e136e16b9918f13509bdd7a3c11e96750c391c4d504054552d66dab88581434d92631ea89aa83e7bac07baa6cbe07f9b703c9a91157f40561220903e61357e9a29ce11f7b2f80e270e39216a59cdda6f80a5d3ffa7fe8f191439bb87b4f97784aedc697685f2a41e3a897e47e1587877e25db50e951b7cf700568221227a7d01ff3001312d21b8e80caf70d5e99524c99a3105beac641d95b28c4e47380f2201b06b0c9415258ee94390035e206919600751a999afe1383d5eff9f5630bfe90b09491af8e01a1ac00472165294619a7db903616fc1c0463e21a5409a7edaa15511dc2d0b777fd37a0b40d7505a447c94869d4ba1972950691034aea6c539ed080344abc923a495827570601c44b64dc24e13f934d9838aa30f804435395e4fdb65bc911f4c3a43ca891cd4c33abb0630605866e8313c8ad88129b2ca7ed46ee027edb9508ef084e190466c2de11869cd9701b89a7a47d0a99181b601f8a636bf3bd948c9c24173737e3ddf3e8db25eaf855c93b033026cf8f00817e1439104fd114dae352132d0fba1cc3b9762918e4b42c59c1b615cece5338591450de8b5f77c92e765f1ced225c3205b0bdb9171babe3a606c539034eaa70a9a2221cbb3afa74fd5ba77e798b897d1bc524ecb2b55dca0c94bde51c96d53f630e280adeb7a300ee973c883bc5ddff5e8fc5f0f88aa720a454bb55e5cafaba6285b0a8ae2fb341b8b69906c26f8b1e624a1933d5b901a5365d4fcee7456517932448284bd3506f7ca58e97cda26d97e69d243ae09570f04d34bcea1349cff5ef12da7e728fbe69b3c1a96db2954eef79874893cecca13195af035a091c66efdaa386089983363e748ea6fd3a35b44f41f2eab35b308c87dfb152837f4ec3c0a9bda5134f9cdd6266aa3b3432382d79393efffeec16d96c6d412d40d9ec016a1ee1eb3fdae36c7b2556f4fba2d5fbfbe094db0475eedc4bafb5eed072788ade31689c9819049cfa6ed39edb548e90f183af1c16271aa7b547547578bea11a80149c7c2dd906987aed19fe33ea2d047b9e81c54c6995aac2a5483b46771c9d91505b2089c04b1cd65951b978230cb525ba41e204b267979aaf993754388c429b4278c96330288178531fd78b1b8f75d317e2b812ae4956c877b602344f753e88de0bf19b078b12a2b7d06b4a11d104ffb798b4b5c11263a34aba03e581f650885eec7f24835fac10d3ffdf132b7aade77addaf2228e1a2710bb56778d4f80f1aef1b90ef374553d95eb9d293dc6c021aee319a72bb20ba782819bc43ae1426e5ab79f02bd7a847da10e3656813ea6514cc9b355f25f4858f0e6f1606863761401517b7822a89c747cfebf148c7d9ad6642f2f77db3550bce82f4ede12c3cfea27578bc4bda2e997469a54c4c8bd360fd5f05b135ff286546dfdd977ee8fef6856f439a80190990545e5c72ec6d5456ce7034de229d6c47f682e6a8a50e555f28e8a43c6b6da29ca36aa8651fdbb840c5117f86953b89f9e47551a8d8811d97968ed51cbd9405df88e9049c17607aec5d1476957d23622fb361c4efe3a85f6b053552d6aba5137a65f8bd7fb69e1d3de5f424cf87ec1466dcbd84fb90dfb32e2291fa932f9b7c610005301d34cec92e09e1c0cec95e12cd4ab10da43ff86502f383074e3ef041396be4f77e6aa41ae11ba1f2f99cb7e8ba71ec0f1c0a854fb0c4c24d2a398e5340c399461649423a7ea7d2cb804d86aeb120bc6e2421a669a6dade65cb2c7eff0044999212b64e018c8a2a7f76ebd073428f2b0240425cf363fb7331ef79ce3b98dff307e559388443e252ea4e45b0d3127d04b5f24ec193b3fc181651dae6c693ea9daaa7112d1108fc2ec05fb21345ba9552e56cd0fd186ca96e9a5fc313b494025afef56359405a554d07c8bbbc99b976be40a95760b662685c32a1767ee038b887004852f0556d59798b989dc4fe17c36ec47bfa87aad6711bfdcaafa4b16b6a2df769f94d6f2596b064be974a70df5ef3f1ef55b37bef2df7de52a624657e06fd05f10551878d404d9ad1ca7e68e34f175fbe88df4041b88bea247dd08159c650491e7e8c0e3b1e48a03562925c52105eda9e9baace4297ebb71c70dbee5ab4146ec48db811f872fde65cb4d209dc36b7c80ec2977855ae875876d107be5c2f1ac7785d97ec78f9753d29cb6a1d8d26e94563ed4af8223f5a89a995389bff1dc3699e89102cd4e04c8a134e38a154d9d124f8fe432effa670c40c6510c2c15088d00f2ce136618c106758d881a110a116ee2e42a8e1f8e198c2a27164e1250a5de47bdfd96553549959b47816410891cd2bdd26672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276707424a6750a1102886301402c58ac80a02b984a69f951f7a89006882d98fb4b185e5111c1f5bedc0524c25b02ecc13c61a038e9f1be339519934025faead81250545c5c9906bad8df84a1c2b4f35b0d420c4d293828262234ef11e282d15272736621541273a4dc3f2893e8e40558b15d94ade307c13493339c4091cdfa320554f481f74e0eca1740caff4913f6089c5073e4b1c0f7c963c1db8e1fb650ea0c987213ecb1dc09987252038f0599e36f059d668e0b344d9ef773240930d213efb14b8df5b70e6c2521119f8ec4218f8ec452ef0d98da83ac686284053a409e2b34b2108ceaca46029d658e0b3f754e0b3ff50e0b30f617953c49940d7f0fd6e034b5147029fbd47043efb0f087c761cacf2fdae04344520203e3b0d9c1995e290199fbbf580cfbee387cf7e8a41d10234c5223e7c6e2eb0e04c0a102cc521199f3bc8019f9b488ccf2d448313d0d4343d7cee277ce08cc90d2c750d8ccfadf3e273a778e8ef1f1d73f2a6c669c0e7f6019c51f1fdcd03965a87019f9b6687cf6d8377744c8919a0a98174f81ccf7004ced4152cf590057c8e2c057c8e430978ef4d5dc4c5e74805159cf982c0520f993e479f99cf1108011f53910968729a08e3329f230f9ce160c96b4a9fa38f98cff1268798ee5b7c8e3330390e0e58f2027c86470c7080cf9106b3e8170134395084a929c2069cc1603e4316013ec3d50b10b0e443dcc5577c864e30799108e3eff219fa08e0b38b017c6e81fb5740a7affdf5a4cf01c001f8fca3daf2384093ac89307006963268923611868597b00f78e076e0fa104d189108e33f04101cb839f30ddc5c35706d4413a6120216c15219b839c3c0bd001ca289262c28889bdb3194056ece2a5043811a9c68c2782680a3e3a5ab25019d08e8404007289a301b20802ed58c210f18f2439168ba8cf8708b60bf321937670eb83168a2e90aea81a6c64b170ac6cdd98b1a1e6a70a2e9e269000ef6d96280ce0e3a5807289a2e1b1d80b04f95bb2c6088028624e01689a6e9a28b60ff1ef2d24cb94b344d2f4dc789a669ba333757045c191a5caa89c9a1a6058e6cb90b50344d9b0833c48b4493341261fc0fa063009d02e8b00082b9794480fb7257dcdc9eaa89261994fdb84d34499e08e303b82e80eb72493737002e0eb7e5daac3022d1e443d80a5b612b1fc288dcf0ff36e21bfedfdf87feffffb3834105876fc1a1e562aa51ad59a6b2d75e1bb1b5d65a6badbd2a2d7f43cb0d37fb916b1bbf6dbc61a9a0540a4b05d9b0b2b26223b66165656565656545c5fedbbfd955180ae3c150180a43613c2c35b0d46023666161616161616161b92aff36bc0d373b4f0db6f14a0bb369b55a988dca6834b211ab8c46a3d168345261f91596959bbd466544a5521941494149b111a3a0a0a0a0a0a0a0a05c9595575951b9b98ba4d8c623db78bb5241a9d495ba8268303131b111d360626262626262a282f22394d1cdfd83238a0775f19ca8385161233e3939393939393939b92aa3a76144c3cdfd43856d6cd2ba6c5aadd66553526bc425b5d65a6b5539799313939b7b87ca884aa532e27dde6723f63ccff33ccff3ae8ac997989434de662a28959aa92011c7452ce2388ee3384ec5fbead59b636aa226cf444dd4e4e948ba88bbaeebbaaeebbaab525f54ef8b8e8db956abd59a361b866118866118865d95eeb98ebb190ea98ca8542a2354a394524a29a5f4aa70bf71f74537c65241a9542ae892f292524a29257d8cde178d493fee124dd8cabdfdb76c66d98f97b276c92284c9deb3ef2c832f59673f2e329f9cfd04b9fb8a1ca0095b4518ffec073bd5a9fdd82afb59390cf28c5d017b0b38d309a04e3ce1e6169848d6f9a003cb57c530d48b847620c61a30c1fac1ed9f6d5dc49f22511ddf80e1cd36e2e9468e37aa86b0841086000408102040800001020408901c9c0b97d9c6d4de8867c02588ddc71b51aeb54f93e00b4af4117b74cf10b0f7209064ffe3be91b8cd764f93b0ae7d4a3e7ffd3c127536a2fc26097e33b2a934d979e43e82b196a2fb52bc69172cf718ba318433d9e73642f26eee225f72730b8d2a26c2bca7373750c9639f899e7eae4f3f4bef8eba18f5e688b8e4e67eed450dede9f700b8ed2191235135002eb34eda6eb49176f3c265d6f1cda5b3836f3ae651ba19f2fbc67174469d0c7b936ddd135551d53d70464a16c6be85b4100c978deabfcc567b732d6a5a7f0eb9bd66557433b4ef6e0e4de52a954a2557703c18fb15384dc2220dc620bc34e00bd63e2bb8ce4a6b03b26ac017ec4300613059b3dff8cd0a9621abce798330e962c83b8410ae1355dd63850b9d077b932ec67573444c6f7669671dcf9f9a168968128639cb57ddd3249f6b1d8dde5518c3d9ad803128b24c3f760f24b99af6f19e7431e8cdd4a49b315f8b249608e72c12bf0310f92452f69b2bd47e18fd35e29d5776282da766bfd15472487c230ef9fb8dc41886611886612a954a9559e01ee04c0d4f77b36874ba05ceb4fb07b1dd9bfb876812e6afc2be76312e0ac391bcd43dee823de97f84f55021354794350247c5df7bbfd91bd187e873e401aedd8ced5b24ea646cdfb9e469d45a47a312b743649f8d54802fd87b364e01c2603f2d89ed9eeee99e9e6dde20eae5ba187d73fc96d921ac1014557354d1802fd847159ce91e7bd8d9de81b18f538847bab8c2988cefd158bf62d17017cc6fda05fbcc65267565d4f22b52ac503354ddb84f935eeba13df5fae841c0b6c7fe51503caf219ce9ae4a0e89b7bf21c2db6b9f6def7533e8953922ee6eeecf6274dfb7467687d8ae100d5541083144cfcf10d54a4814405800180a89c207f60e86f654b3d1078e88456d451a0d129bd9cee61c5c68229be1173066a349d867191a2cd85ad981e5fec1d8b74fc77432be46261feb60f4ad416ff4d124ec7144dcddd823050aecb18fa88ed91efbd8a3637c744cbcd9b69b0dc3a1d102f763994f051a05c51b2f71d9ca6805f61b013869bbe739cb03887c247e87a8ea1cb0d72c8e88653c9edfef38ed820d01c2980fc63ec39e2018fb2c83311e8c7dca176af6d7ae11d271308c7631fcf69536629518164f0c832dd8ad21756a0aa28e298960c208491081085310415e1faff8fd91a5c2fe14899a5760f99bcc3a1e369a3dc4fa479322f48a50513423c903cb9691d87217f959d00116a0a97b4418f95956518002a9f9e59f5d0b583ed7fdc0755d8cf8975f1ee36f7fb9bbfb8a2679f41574914fe567cf5bb053588ed41afd8f21ceede3f60decbe991235fb101fd231415de2563837ac226d04ce6cf1bbfbdc52907cd7bd6633c9edae96e33bca87f770ce3a4ebbc847a5260cc79df22cabd547fe4ff2234652db8a7b1dda575ee26e77affc49beaa89d8699ad466c87e5a653fb9100dcb59233ff909d658d94158deddcd6aa10e026a1f1c644bdcdf1da449b28960d929f8221f06b586bf0f91ef371d83d3313c513a13767bedb279bb397a3723fe85ea62f4c7f71eee83a766f98e92abec5a70a10ed2d7c74ec54ec54ee5166ae934dfd2bee2fa473f6d9de6e918196dac8ff5950bc117195b45b07ce9588030f2a5943c6ab0949f5b7e0bcb2cc017f9b975e0859a7b958233d8cbef23d4e89e88f5c718b11c11fb8d36978d3ee4536c84c4f2860a8c23d6e015be922f49ffa39a92fef1a30c0267a047d9283076714793ba0cbe4879b38d1ffafd5e7fd92f0835ab71a3860bec5ef0a7df6bec0ab6130c3b0caf942b600d9ca2e63a7f7a3d82338d2f17d6876d8bd0f6d0a4eb61375f879ef7c57c7f9f0fa5f7d0311005420b5d6026b196ee4e428757454209a1aa6b015fe284f32291af4343082184f22ff872098982e6afefa16372f561e45926b19a42862adfb121178f1fde9dc119f9fe5ee5dce616594608658bc7203f7ecc0cc60e4663ad070c3ffa95d1860ceeb62390c1f0d6884f7f8b36cbe0d837cbc4da24ef21841042cf8a60bcb94f2bb95e1b3238de9f339e7a0067e2cfbf80101d93a30f9e3fb3c49b94579c1368d224fd8f46b7f6a8f183b0f361845bc6219ee01861e20f8499a72ebeccb89b6dc8e0d1142adc525a35c79f4363f8be0ffb1fb0ffb0ef7bd16f9fa8c4c4e4137dff5dd8a4922b7a1d5a45fef5f23dab22dffbefb74dda29330307fc25009668f8f9322ee08cfcd9c2a2e2f389cca4812ff33f3b4f4da2e14e25a0cb7c1527f33494e7a9a505b8e4f3f7f4374f0555e6a046fcbd0e5d628da85ff29b5b93a7b666dae069f2d29adc796a520b2eb1378ac0dfd71e799ef0fc799a349ff797c521717d179ef7592743bee779ffbd0e7d79b606c9e3885845460beebe7bed256bbea3a6644d583f7b1a3a18fe5996d53aafcf01c01bfc5e5aef3f9be5671fbb1752087b37b76029ad8d968aab15e1287bc097ec45b85a921609aeb60bea70b59c0e87abdd9c66c3d56a2c0d574b7d28ae366b1f19ae163b82e16a2fd585ab9d3c13572b638dc4d5ba0df892bd0edd838b6e0b7cc95e462cba2f544622209a3a08d33fe714614c1bcb26f56f2a5c5f574d7512f4600921e8d4744c2c12051168848c34f1d4a448c33397d915e50542e4c1f2b3ab65c7c479b2d12e72a7ce2b89930cb09438d826d2748c0e9a788a34dacb9025af8799376a929c71c6ef9aec081d3a383ec4b7c6f6a44ffb1bd86713cc7cf706ccd17edff77ddf7d585323867083db16b5ed33d5ee0decb7d7727cfa3a78f4d5bcdf65f2f5494c7eabd5e4b337b0cfde7fdf1d0ff2250f40f865813f0a74ecf0e2ea7880f085850c55f426304a5ef49b892dc938e05872ff06f6f9fb1c8e817002ef80f0eb7e8fe85e7eaffd67e97b19079caba8e3ee096507ff4d6bb9915d20f84dc2ff88b77e87709766413cc30e402e1aeed24e24c35512a31d8ea0e125e9fef2083fe288ea2e5e8497e4ad3a18de80a5a075c42962c1124d34b184b851d7b828e5f51cf79da669de57e9514e8bdfc5e7342d7b4dd3342d6e525e4eb5af7a4d504a29a55dc6695fedbc8ceb5ecbb8d7b48e8b9b949753ad2b69826a99573f8d769b4697a05d4729a5947ed5ebb2fa79dc77da679a5bf9979d9146ea24a7ce451aa9ab384efbfe94b8c5e8947b4da34d50aa518e524a29a5dd129da6691ac7957cf5b392ac7e9ec6699ac6d1cf2817b5295ff328a71238aed3344dd3bce4f344748926344dd338ae2bf9bcef4535fbec7df67995d2cf344ea323ca754ffb689a1228a59c4639fa1cd5a8c74de396d08926adebb2ab1d6bbe846794feb5627124dd3b47b9f7eee68898e466936e467cae9fd208315da252eea2d7755dd7755dd7755dd7755d97a6719cd6c1a0b4aed3b44e139188ba9e2c48057a52d791681a1755947baa048ea39a96691cc7699aa66954a39fd18c769c46359a699c0d9d0cedfb674629a594669ca6659ca6699a46356e5a20528b5e0aa20e293970848c59d682a3971a937dc986b2493e553efcf7121011c6a5cc70025eb76963c7ac03cfb9433ee1737ecf0b6a4648c7810da009cef4631f691c85723f39993fa84ff51bc0991cd551d1441f7bec461158bed6cdd8de9f6eef99cd810358ca321f8c86005930867dc7d69119f69687e83e508eba4e92fecc220f9cd1fe4ccaf939e299699aa4f3ca0b7f6cdb748d13f5e6c7a4dd8cf92d7fc89bac9331a7a3dafd1ada6cb061150205552250e649a40e9232bccde4a84ac0d0d42ff10623b510432336a4bcaeae7b5abf44f42dfaaafd25a5fcd6beebf9f4e76bbfbd5f42aea0c2f43728582a275adbb7cf0fb6c1fa4df69b4ce495d41e47d5e4eec9b04786e47317c15813e90ee2fce692dc7b6f0d1d0f7d43bbdf3ef76f37a2b2cbd2c5e8ef7efbbba292327a12cae84445f7c8745fbfe4bd875efa27f1d25fed66920d17b64b564390ca72b7d744d9df10e1ec7be56679923bbca572b30fe1940b516e96c1d96f4697869bab77efc9bd26b7bbdff5ea779f4bbe23a1df5d961c7dac7433ba17ddbc3d7d15c8653662ad7de08b8bec69a0279c80301809fbc748b547f5ef98c2d8efc87ba35a4d1555c74c22ab944e86dcbedf6fb24cd3ecec5a486c8d3c55ec311eae058b0d61ac881069a57ad2c86f7ca43d6ced6a4d60edb32ef98dbb60af691fa1a97b220cf699f6392416fd0d1116414cd2185bb990dce12d1f7228b25be1ebf6bee4e9e7f6f96e4a17a3e4e688d8f371837df7c48a5bbabbbbbbbbbb471d0f2db234743344df77c3c1710010a5f6e12ed35f351a527f3a188d69e85cd5042bc0526c792b3843f2d34796f363cb4bd715fd77453550f4dbcd5d033c5f23113d89c8bb24f73bdacdf0aef4cf647ad5a4d6e3d812b5ba94286af6d56ae5590ac7d9883feb73a393f21c4098f9d5b6d00e7ae0495a795d688173af5c89378314bd821d7f9c484b3c5bb4ea8f8c8c542fe22a1c5722d1ddba19a27755c7c0950cd195a26c9565243a4574786c2c4444ecc15508a0cbfc58238524864415fc90e10b8e4bec4f1cfa812ff33d3a81091006a8898c6688ba17f3bac837918b44ed23bba93aa3d4ebe88874747474b4d7a13faeb60e0f7c893f4cfcfc34918ec213464e2001cf7f51a3594d9a42b7572dd43ade369b27fec41f1d1d1d9d1e327f43e1361b71f5523716a04b579dda854c8ada66c0f3e711783e8d1470af5a08becc1428eafc1c5bb8c6f5f4b75b43f438223e125ba2dbab12ebd608d17bb7165ac8e698c251b1e85ba7079e3f79463878fe8ff9221ce0f91e6d80e74b4744bbcce73223bd3a8267af268d4a7b842a93648826cde71a471f38a3dd17f4e288f3331b312b650f493f003584a7fb753d142cd56f9a3cc2414897a8928711383258b3651273ccdd5dbabb4fd6759a2cd67cd61658d1d43f2f9eec3a5d3424dd8cebe577d74bec7a497f7201966018e61478badf489b796c27f1cf761c69d97242f5ffc9c2ec6c9aabeb93d7386a66b70176ecbbe6dda6938161d864cdbe9efe45b1c6b00cc3b20bcbb06b88440c4c5862094c58428cb11d93355e3548c0087d154651a84f804ec860170980a52c86e39c020c4f92932d62b20e96248b99b16e300c8642b2a0c21be5289d0f5710ca547f7799924158f00b36e649a652344a4c463c227da2469c65648874ffa8a68f2a48c6f538e1ccd3294b2132d5a4994ab1583e75d654cf10d1e71984b32248542781005132e52829aff2d083f094c192c5557a69694ebd68240bbab05a13aa56190b4f2028f353656458c84097f999f4a954ed9280a6c923c2e48983e7d3a8f4f2eca6b20ae1842d4f652aa72d56866522969347344939925284bd94dfd9efdd6699c23278e64a8242a1ee94ac08339fc747378f6abd19aba5badaf53c47495634394f84999fe249354bd5ad542aa552b55a1be57c62e080fbd434f27b1a5e6a958c97bae5a89ab55027479d5037e219b4dfa4f4bc0feb3aeff37e823449665f7f7e117046f4f3a70b9a078e012c45d60be03c4553f38830f37700a1b5033cc4039224119024dfb30d80241a3d4017f971c7a83594ad462a5593b4fbd91648927f91785ade62d1ead1a87a76f1fc705ddee7615df779988a57ad8af7f2bfdfbcfedaeb138ca68133decf6f25604b61ce39e97bf43def3f918501b1e8b7130d1b228834f10868062952dfc322be9fdd0fded3df3e6bc48ce13dbdb4d6dfbe2abadee469d27cfaa29f4f230470a6067def331caa3662ef6678ff79ff7d6f632a0ab93148ca166a8a172ac4f36d744c068778ba9b11bffb41ec4d25a00b8e147e3024073f34e8f9e8df2802d7cfa2ef7eeb44df3c05e1c7700949e0c11bfca650a530c43a300b15c511fc3d3685ea331519df7bdd6f94eb8e074db3df6f1a27fa29faeeb5df362e7630bef73eac93e1b58844572546e3ef7380400786f8bb39624f64bdffba96ee85f7dd3c6dbc3b4fb547f53eab76e338918dd8c32131fda6f15e7a2fffea64782fbd97de4b7b4384650974e098fa1e47cc3125b30e9c6193e48d3ff246f99fcd3c99c872d13c66d008a84656098939371209a110a110128b796a9789a56290a6e1f17e3707e0c526e2e81315c6d49c4880a5085d681a4f222851f09e90a7139367c7fc31a78d37bd875ef634e2842c1b15fb2c7399a2d49250db51cbe96cd46ad4526a336a316a2f6a27a536a8c9eaa7308242650214f25809ca94742fb613eee404f6c907cf27320af239b990c9e664c19407f14fa6be4c6590264d9962a466f7201d935bd52a38537fbea7b269535be611929f6f832b431870b722ccfc4cb998b3fadd5c47a3ff2cfc60128642b2e0036fb0218c9284fad4789a9f912a8b914ccf4f64c29341e69c382b21d24573f13862a4888af4f35086c5361a753170c0dd6f3d324d9aef02be4cf9d0c620cd7d76d234699e7c525e9ab30849e8898c82f07ca01489f43f1ad5536a6ef4a7c6204d9a1f534eccf9f3656abeec9142f0fc4c025892ac1a904634392ac2cc9f33982fa8842c587541f154cd084000002315000038140c0644a3c178288b535dcd0114800c81884672663a92474192a3200e0308110000000400030000080464860c00f15574c39282b5f117c87c884521baef4cd67316a23120203acc43381a1707cd4ebdff2ec356b11f98f8bb54870108f72e45faa5756116341a717da3c9d55f27fc7a2f2aceaf0df9b692974f426938c16ca663cd5f4ca4c56468759f92fb7abb801c47d1e8b4a43e76da9a72cd70ff5a9359fcbf7066ca3d845788994ef45a9b877cc2946109507e67876f59599423f3056b9490243415d456f44296e75faac4c4ba7dffa1816bd722ce29a58ecf9eae4391eb8d9e350d4e45348a915d86e9d1fd7d825f3ea9059a2508fbfb4ec901015443765a1ab8307b276dda42a338db62b9eb72f43c84b216790af1caacad850e8623b7ca5a146553aec69809828cc9e4770b857573223298304f2b1e600d12ab9a367c9254b1be39ced81a0e04225e6e0fdfe826ff4fc1b0efc84deaa3e6d6816b28b8d3880ab41f47d049b5367d03ab74ea5cf767cf05aecbb3f8cdfd0e4c2c85970729d663c06750bd946ea1d114f0e4ecc169a8c3a12bce618de48336a3624b188b9cb35bbb1ded9dcc7c0bfe23061eae79b3f4a3d294004b686243a9def891f9bb771a42c847f4edaf1d12b59675f156b87fc59bc0f575756c6054c8b837b5759da4ec37e7e2de5db361ba3fbf047bec875e96f20b9ad80e8e7f25f4ee6cec6816a1bf835c2ee5457167c0f7b2285b3428885444639aa1f4893c705058339ffefeb7a79b3e56b027b703459203b52683a83a0f75e9eb78e65c5bfd7d763f8f157618075428364bf79b1289a990db9daba20d3f2a0508272f78a5f2913f7784b3da612f4de8d2da67b8bb763738909e44417c523814736483e6c3c0083a3f469a494b57a0e88625844d5b2537ce115c309c7cf88ded6da10b53d0475686f48ac76194320d9adfdcf3f4a960c06f4db75c7fe1d0d17d81a2a168fdc799fb91ed22617d2b6833c947395aac1ddd6718fafc77673e2e5d5ba48cc57223569eadaec40dac37d075047a2abc4fc8c9d74d40c24102c3677dd5335533460c720517ccd61ae6490fb20de8cbe56bc01e4e84af591e3002f50532de8e34a8e4918d74a19e0f21d03352b60d24cd5fa36ef510a4fef2a629fbe4f4b4085466222212b7ce817bdbee963ed7b8fbb35c26f2afaf3aa02c7acba0517f1a811535e843f79a76d7c682e61d44219142c2420047b7885d429cd2fed3bd144f0e63163a33787e2954a373248afc0885e6c86f3ef8a1e16b7cf276119b81aedc842665ee1944418adb295f67b3a157e5542673d6ad0db6416fd0ea450a635798e37670c75e181ca342984a664e0ae883f14cbdb67951e6a473180acb8d2110316b89963683741b4f0cd10d1eae58ee3a34a55afd3eb85ba8625f2939743f496ad8b69fb4c61c12dbed15c13f1ee17bbc2f258ac69a24e77eeeeb7c1a6145729f8a157851a25bdead6186d0d855ac26852756910439de2241d3ff47c6fabffeefdcd59a2ca19a3041f7cfd6a7550077f487979d6c56987804987ac7067bb7965844b57c97d10266e0d6c98c406a98a538dd54c7b4678fe4ca176f939fcf027d38d86a2f99ee458988e23ba27ce11ba9eaaf02ba0dab4f621feb274cd7b61bf60ea510f4567a078dd9c517be2f2aee163f8c5f0fc2a24a0f3ab7f698a407c10895b36b01a5317cd4a1f44440e8844dac8ae1b92d7484dc387aa3ac0c664c9a6713652cbd799ae84b6307fdd33d854c37ece5a621b66901af377c3855c1fd109141a192bef12571297dd11b7393a5b7ca9c895ef746044c379cb468d92cbdbfc2505ca33b9d87111ee51da3b1fc42e857032d939e6073d973209f0163fee8c5e6b52657e4eeea9eea0539a88e6ee612ba73cc6061043cf72e125db9d123833d95686c229a596f2f80c06c71109e28cfb54de7fbe19dd205f697a9c0cf9133619d3313c38cd442051d05730533a16d174e0008563b4b84a9fdc6dd04422f5b0606b05896a142a63506cdb4eefe1bc55a61c087bea2bf01e4ec06f72bec2db940214c19db2fda092c6c8cf88a78837ca71eb483e2b33ffc5ef3ed2ab0bc0251b943a85ec18af93077a65455c4d05a19f1e916d4dc1d67302a8b1b7b7ca322afe4b4ff16edcac5e0aae3bdf3c36fa5dc93a4ee9fb4b9bf842d8cac7967ac702ccc59c9f27cef29ac1fa63a87c220893f90c4c2408425786b6812a21e32571b1f9298a74535a7b18761e054ef524ff2ede3ce4610ef34ee3cf529bfd97ec88d6514e1010861d643a3d937e15de87d6734b79200fe63716b64200de9a30d4e3bbeb9c8f5bb8a33efa876a4b00033824f5bc1f5f4dc8539160c8ed7850633d8ea346e43724675581fc0b9e66df1fa79b5e4d211672664f9c5ed49d383c15c2f30da6995a75d78f196dac1f2067dd73c84510f15b24301071a2ea9da0fd9b0937ab7e864faceb467b9ac13709d5b25086ff70b9886e46546ba96439161ce6b962ea74115960cafa01baf856c7abc03fde711141cb77a464209d8095313b4a1b52d5d06572b1dd95395d2514ba29f2525252f18b6baebb2ae77367ed75055af6c8e1d1422613e80be3bba82ad95fede01bff96ac4363001b980f5dc2fc097a266f64956638a5620cd0ce64f89eb2a5c768d99cc6c033b984540eef0ecf1f166adb0eae6fe094cdd6a56f25a1941ffedbf40c6967f0d56615f4191904974a1fa19a275855fcd2cadc306b50a82566867232444155d64cf1c9811e91f3118bc153fe50f8da3c73866c5cdde285eaeb674c72b588018e42ece0a2589db63862d71aab912e7786e6d46b1b5b18a1ea98ca40937a6812f050e74a81a0ee48a51c8b7cf1c4051f85373616427a307f23b7b892bd14f28c73778dc2801a8c97c2ab851b6f68253dd3c5b54367f21344e528f247b76846161ab81896570a57be2f9c0bbf7c3bddb0ec68701d78b573622d6df09a8e9e6265142994e285a9f94fe54479096ec302a05022903674e00bc557b6d2957f75edd734f82c020fbd7dbb9cacf967996c2f02ff98c8684aa45504fa3fb95589546c3095cb26c9251f11d82897c3c84b09dde6ad1ff43ef65619d9246d1c4e1aa8f58d3f0ef6c2cba0721fb5fa9a0109b179e988b6fedd1366da724f99f0f45df55f5878cfa4e39c52422be250485c636c12b9c6b8b4d140dbbabeae0583ddba0e7fe939a9c6345135f798bfbc675a97cc4fdd490cacadbb790a54a62db0f866c4b58fc2f950e00aa71c62e1a39d6d3b1d3fda1aef7e7dbf841a2a26c72b227e831c6988829b3bfc2df03be788d5183009510a01da47d123dd1e2762de0a22a3f399e400dc39e6da837d0e0afb94172aba35c7a16cdb9327d29d7f00b220fa6aa33eddf9a7bed9ff319fa9518cad20eeffdfedda82ff4f498877f4134ba4dafcf505e90b69c84bb78f7ee22f599e1382556fac8fd9f5f7ecd1e1ed39fc78228d79734f352f303500b3f29d2b028fe43a709ce96332928aa51ff7ba1dcd3ae1bd722f918a49f2965d94a67738a917dfb9db517b00fc4686ba7ac9b34fcb7182835925c26a03b6948d556568cda2d2badf8241b055015b5befa7bec815879a71d3edb348c26ee9ef659c5c65edef46f597f04962f8a74f31a64bec72fbd15f317f56fac8ea6799c72c744a992cf1e71f5855445516942a0417e136c0623b98e93f7a1ccaeec13a98ea3c873240272c97b12d14103437463d731abf0883fe71751f6368a5ab79f1f8011f33a6c9a4f6ea7fe4a65a0b13c7f450012657e75b0c29d23ca6ea182cf4ea94d2c07cb285c6b5eb667ea8e0cfac72077fd5cb351cf6c71f7c5909325c04a6e1f709c5c0c63451f120e0c45671f3e6f2160961e94ace87c18eec93633003ba2befac7a762d8282bdeb93774a49abd4761f28971fb2cab14bba48acd72b26acbcb5a2ec65db7a37507530f9ad5edf7a4516d8b42a832a0a507ad88b44afc08cddafb5fdd40a85e9ede0d9ac84e45fb33299b54c41aa94e9160e34051bdfd9bbd2670f17f622cbee8a6ee5738b5f165498232d2766da020bb07ee90d6fdbd21fd2a97080ad741bbcb80b64f29f418f60c62a6e7559e6448ab4df93a2ca045eb8c6ba75ce4a8e71755a0eecd4731c088d32ef89cc8e842cc8e615ccc04ed8e51310be083a52231d89637a121918503c3e8554bbd590843139c2e521de80d8c3da09b5eda2bf2cd25bb382b7acc3525823df6e971894dd33201b6a1e32a22d7235b2e529d743db841e98e7bf7edf2c4c429b5adf666c986ac2373e4d0b1f22a383c165aedc8b777327ceb26ac91b81728956ea783a538e040738414691550bbc9d5c250fe02d337ec6f32ee9a5c31866016969a6dad665d109be622704a2cfb362f2036feb59f0fb515e3466ce66d67eb6aaf658173e71cbe05a1f4fc73f90b02faeeebea1ced5d284019b2398ca1bcbfc4c067ea1c53f2f8eb34ba05da9f09c65ec139afacfd76d59083916229c84a276eea7e18e74c4a9e8ce43efb60543c4affcbaaa0d681b442bc809526282f79c956e68b5d5a009f557f6db5fc5593cbd124d0fbeec4dd7a530ebeecae98e7d82f7b744963018d394f366e38f3fa2b84457a74c911fce17f31471a9b3784ee91862a41c5cd09a558a1d186258c06bf7938705687a33024d93159c0b6f4555bb69806aed278eab7f6841292712dbe9edefdce870e66200a8c360b69858c7a4bd9896f401fd506ee45b553546ec89ea376992a44d5073af4c261c05a5111f7db4a847b95f77cbc3bcfa6a62a00b42121e6dc959ce32cd6c1e92e403e4dd1d9ab055dfd520c095189be2b2215bfce3cd6e8f0e576ebfec4e0ccb5035970c7988faff832b42b48faf936e3ad39ac12157b6c7adc6fd5e9b61079c9c91f14319c2b88e1aec790edb2cadec2530d16c31a4b6036a0040826bb06bbb0719f1a95152a5101e8312ba6eddb4e6c56403195b5ee817bf9551ef7cc1bb34e2a284b335ab025715b84076eb97c07ed7de576452ac51f06ed23649ae0f82372cd09f3bb056d71519a763be286bda420b43de0a8c51980ca7882388a846742d7e41d28a8fe8e152505fec7a8a723a8c3a8ea0f2eaa173e0100b58e3a147b608f8392713e60ceca22acce80454257295f9910a51618e3ae40f80d43e4b8c32f61bb3f89d7833e1816205a85c2b430dddd4cd38a46cf09a08b12a8864a18cae7cf8ab643bda57c31a71f6f9795a4cc0e8db3f2cdce80ca3b634039099cfe0daaebd5561c33c74698f36b3d8eb65d5317ad4ac958b354f5456c56f37ac3bb5f5457850a5c5668c6253122273c66f9713178683622e2566e185fdd88712a7a8a31d90b19839a8824edb57c90838c93ea930cd6444819ce346a19a3b58b19c42d573396de5c353983dcaa672c3c8ccc355c130d6ba4e17eb54a22151be417c23980882669be2f624609868903ab09011213eb0b3ac807512a0e32005fdb72e829438cb583ccc37b93402ec4fa0c0037bce6c4047644f4f5927f304a9e63145d4358d0a0848d2fcbfa54029355b885f4ff14068fdbb1b50f1311278836e8695b482fa64852d26e6a7116b3256d138ad986d34ba680b67a6b5ea9247c466a563c86f4bb0b535a323fdba89f3820d92fe06bf70c39d20aa079d074022fef1af042381df2936d2f8ceee67c1f36ee5dc7e2e7467044a273717ac78128dc6b0f45ff761620bb045de5ce14c022a75bb11d2db01ef710eeca04e05eba1562a0ac7f54e8c7c25ba27ea00482d4f1c0cefa0a8a930b6fd9886796717feff002e5635dd81602c9899f82b97cb05e87fb0ee8ceb52e75126a07f4fd4625dadb21cbff17f8c9d19702206c7057a82f47c502aefc85db4bfed1738ad0e79a3d145f031c67c0d19137aa52a690d0972e0c81b9aac918f89f84c246128cc0347d0851435312755b954367bedeb2a47c1122f196a55e4598fb628da19c5caac755e3987a1a9fed6672a90ecccfe8f39ee02b76d5c35334f0e2d7db30365a5feea4b85762eaef96672daa6ad137c4b047938b743d5336798984c4eee56e50e4759ba12e5815bb36df1672e083321fa00bf2f02e4cde9385f186abaa1a2724ca607aefc46b6af853c41f5d504c563999f3ed6015f0a260676ec381d999ef01b21c337ad76cd64681c0b36b6ae88830d1587c80441a899bb71aa9d783e66697927ada2950807b2013090340340c2096d309cbb7ed7f34d9f99a742415ca93e7463472f1fc4eac1e701bb5287f758ea6695d25b46fb44d840f2ab8db7accc145da5ff2eee7ee1730779d47b0de739f5270b8db1073b895a236a83c4b857b94ed39d813788fcb82486ed4d163bbd198cf4c3f1172fbfe2bb0c678729aab0994b53ec749d008d77ea1c9153dc71d7b4c61911ddd624b33bcb2f4897a82c7d6fbf76aa4843e25ae9dd239fcad4c451446eadf066504e7ff136fc77fef01bdc259a937637fe53ab632efcd3bd662e5d008da1e2ceb6015ea1606d004ae49089b3585c47f758a4bc6d5ef6240915dbcd6b288c64931cd3c2192e9e69617164fec8c812d4bdf22212867c04aea13e610edad3d316a58f7be73863ac1c9a7bdb545974443c01e67d492cccf66b1d71073aa78d9539d2059d8ea6b6fd8446693978227fa808940cd1e94eb67027444b02ca6f2e071983fa4e6cbb587ae0b8f9c52a49aa22ac4c1696d91e3684cf26fd32c1903d4a9e7439c8868748bb0ea29aa858995f3194698e6dad3e244bf7522ede5f8f69ea0f10984f2d9130bb22ac8f33228b6cb7256466f7b6b7fa6ec9dd74ef841f8582514cdc4ba51c6be2a788ad48fe4b1cbb033cb851f4b83e3d4382be8aa8d0e0e4be0dd5420d86a30d3a5e7575beaf8da06ee1d2465dc4e39e6a1df59ab078c0a9676ac189c589aec6cc7beee4036350a8ba37162adbe8dc431dc033cfa27b9fc5d4332d65cd59d63fe05d0e3c56d4c01f42a4ac586174f4a83402f3710e6807ce9a551873e9d255636318e5de5ef56cfd78e0192ae5f77e50f887333042112e9bd71f738c29c9507f83e25b3604a91fcbe31701c789e4fc544c0878646e16be31c909b316c152cb4fe5a6521493fa79af62d053965c32d464ec590d74532686a29b3687292623a25df38c4c8350c008223c2cf9a8a52a4b6e5baf3b2c56c9d8075fefd2d9da2262d0a629b02cd943d71a6be97e9579325d37b0b27b48413396da17f9e0a73b3149369be21cbc9f68e25b45a95b053b5ec29f9d94c42be943bd973c0a472a27d6725471e720ca8cba4a603accb9d2fa6dc58f8b52473510d99ee2a297e598d7b2751f27c3a1633004c1dda161493a616d224d3c994d136fbada6b4253bac3dd60e6809d149e332819e69526920190ddd801d032882a28e3f28efb9115a94371e0bb454fe4f6ad50671c84610d0069421aa3790689db7bdd3ec4c0cba8b1f3335e4fe285bccbb428d0eb6372bba73f36704dc25342dc6f07bbe7b314fb0bdd5257c9194ff2178a27790ea5a4f1a484902afce31217677b8940fecec37897d5cc32407f35fa3bb4ea148400338aafdbde323ac4c61d5608f8d88b4f108ae6deada15cc1f4791b4f5531a48926cb02bba4daa64281efd0173a0cfbe595a369ff51c2a4fec65ebf7b951d48279162af4d8889d66b81d0f2328e0c94b804e2c7362360ffc1ea4d95c2c7fd526a6697306f412b702df6ba47f5a210e0a9ee73dddbc49fd1446064516defa0e96fac6d2e5bd955d2cec0a7acb532fcc9f4c948be2d245e8a14853e05422437484137b8eef3dac68291ab9eb35e8973f42439f3b0034c9fae498f187a1e1966f34b3724b036c1b59eeb0f6a6bd806e4510186ecfee30d75bdbfb4abe33cfd4fdcfea1ebaf6f0cc8a90f726981d7e5a4b5df386fced8e422fcfd70af7ce11c88063c900f1be3ed01dfe8521a2a7003c10ee2cc5b221ab6a14404cade73e77bbe5cc81aa95778c4125e90eeb84b62c0fb8f7809cddc42a112cf04c955ab2af6a63d569b341fa5e437f61a993bb78c0c904b5ac2233286e2fd5b342567b87d1558195ac9e3e324eb40401a950bae283f3ac7e4699fde24b16ca38be938c731da8e4687b53d0fa318da4ba202bf44f5ec4f14ca96166f4b18e9160c3234a532fa3444558fcf39766ca170360fb1417626b4213762bc15fe53bbb3d464b77367bb79b977db313309e8a7f25083b767a44e7d45ec595e0e9751c460102b1081eebec6adc19ac8a18138eb066a8b1337aae87080defc44628ca70d6753575b96a3e7234999369f82286902a3c0526b3e725f6fab0ee4e147a10139df3f3dd45799b5cef0a187f7eb312ae9164e1d0c08cf37f0840370e334ae1bbf21627359217885b298a04631282e3a60910abfd0409452ca85aba2c835280548b9a3dfff84a1632f399af96cf914e6d5207ba21bf70187c8fd7395dba36c951577eec6559cbc49500042ebaad12a2b8f1d15da14bde7e29573e20a6e22a32dbb7abd084c8cb59f02a912e37c28f3cb46cf48f40d667810c6bae553a963279b9a917d545e28b55d32aa69bb32c7f2142a4bafd58e6a2e338d6b928d01334f78bd2c02959e31feac74b9da5a44f42605abf24ba647c117335bb3452d62b75e52770cb751d1ad2a19fbaf787d94ed3f94db31d693f04555ed3afbf0bcf85594c44df674040781a5865e04e8bbf9f4de16c27c062b299b130b80ea3a89c2e51914441432f76177702f95458f90f74193ce1ca69d5993938d17f39332e0745a1ad6778a081c754071fcdbc7e76dc7cd37489875ccbdb2964734f2c41ff0e6fed4277afe31c927ca140cd41a484a4e1866c7d7ea0ccfc31bd8df3eb64abd9d2575827b2414076c4f497d0a8829a57fae97b806913dd12105a27803a1b0a8b927d840f83994cee873e971ca699a8799a4619327f96c1f362b9b56c3d8547ba92459069390efdfdab9a647953ff04a096858f5ad19ad772fd0caf23ed6f8b683a3b14bd213752daae8c4b81b3adfe8345bf1d67bf3ac50016ae1cadfe9816f77a7da3f578fe0c2415ef6bf019b302cb97686dabfb9554225dab6f6b7bfd74bce05a84dbd49d962afe306505a07b434e999631d8e2ff8c15d8ca2ba86848095ca9a0885e3c7a169f1ddc10b0f4678369817eb0bfe1bf7f297fa0756690e2a1d9713d8d1db0d25212f85638aa742a2c5c2daed48a42d47a36d804207bd38e4259372a0275491c53816a4a70df953e9ae7f09314889290fb40a9e1930e21b00136551499c6aa53a6000535fb6de3138db560b855bfc5854211976db5e9ca1e6c92c1dd564bc4db09cc597037b4a49fafdc7ee6e6afda63b12b18a3bd63a0739947091021d7fa11d9ee0cf9f2ca9c6c3c069b8dde0611d9943572ff37a7daf2d812d59dfadf9cd25e1c5bb61e3268f54214b445693bddcfcad4610b9fabd6f14894c01e1d1da3fee20d36d1471c058b103d51a93538a93f42f9164c2458f1f4d9da519226ac4acc5d3e8e2211a41add6ee86eb33d0eeac80377c203d7ac1bac48ac56272bcec40fdb60218b74a49c799c6752b40af944840ce53b78d89628a92ace322214ab4187fca0745043d45849d73dc81ac9402e0c1c84a91c628a76096d65a82bdcba05b94a2cfab8cb89627ade6a3c3daf5d130bc1284acaec4fafb84345b41089180775ac9f61b909d30a842ef5e6179977bef020785365db17aebc2eb6f942165b3b374d092f552a3e72771a1257ca4d80e2717d2a491be1ec63fd623fd45a8c827027d1d29173e20812c1ef54ed075c2d42160155a26d565539069d4caca77987de3d369488fcf8e61d0c4c306c666754453e3256aa1aaca40930a2b454f5040931405280deaf11475dd14e6c5c6b7f42f9e72250472e52245415ea4ed78be3997555d0138c68d754a8ae9935cc4281d21b44524388d9cc8a654f1e88106f5fb7c3228b5e9f08bdfbe7ff934ca4b57be7b8e50bf3696cd00ff80a7b1390b9f685ed81ae97d7f2c192d49059026c2d31f55a26ec672a005855edea4cfe7728f271f3603a20cf188d64e772a9a60f489ba8b93f4152798289643e6bd41893c9816d5a4abfa4811cdb536a238a2a563f3145a39e328454a3a6caa85d164b7bfe6096d05740367701e2cc0a087799d8298ee97f7534bba15935cf5cf73adfc97a86c780f77736cf89a9a0cc62da5387457cd860bcebe58846af5a724c591583911e8e310298fb90948abed17c6b9101b576896aba07161187194fcdb7658756704429bbcec8724a108cd2124da64ddb392ffc09ea84b698d3bc597ad1d5f3f0e40a1d150339fd5e58e57717deaa7feaa646099e374ac5b8306be4bd2981c63e8e01661833cf7963f9ed18bd65b279965fac8abcbdf59d05330ae0f80e60621c5357292e47625226445d1d1aa31361acf5caa413b0635b675ac60c6fe2caf56f5432b9909e1b1c6ec67508c47621718f186dd42531b317ed27cd1b51298e3ee7cf4ac5008f6f937a8673e35cf3e73b7fce4c85e81a5491d1be85aa863d159147b0c2b0458f3c7d79e44954fc4ee4703e57744ef685b7349e3d654a25f45631de496dbe1d46860cf45220410a15f0b6ee12d4769740c8d8df9c1927414d2da171f84a0d6157b1d1fa59e4b4699f3651ff5645b521066f43010de5c90477e0394328cef650376a3fd99d69592d19ed60ae5e69b0fd2c1057ac1efe9e5ebc8a5f19ed6f31e1dd751f08ec3617a1f8762625fd41c5e33fba4f805c9109a2f8d72513a44667d9c4472343af20f896f223c5bd2989d27880366f5bf565588972f54197d239f546d7a595ab8890cb728c79fa274260d59a6ee7515a5cc8816eacb208401192990f2fd7f8c93fe6a11a89ecd0c5289298231282e610de805483da9a1cf819301e5a6f32c4a0604cb0bca5caf091d1b75537b7425e6b7468059a7ce3628bd0fd97b7fd628743af6ad13a2cbbc3b0679c2c8964696fd7200415eb59f25caaf4dd2e6baaf102a3486a243082f627ce82f083aa9c841324cd5add0c04c25260dea10b33649d77688ca47b795d219bdca171529d82f503262d210e509723f76686c04a965966d92629582829c240aeea0c05f3c124a362cbdaccef1b5351322ec4b92d59647179c790fc236168be90b36afebb3ce0fe65947a2bdcb4d4c0ce89a4408a67120a97218d20c91c8c969785f2c9674d468db8a68e7eaa0faff20559f74faaf7eb4e0950147ead0f407ea9b57edfe5b58ddc721d6df4c15b719efe2ee2bcd10adf0f07a3d911454354621f4132bd14e68d42c7767494a0e7786094e77555932db49ec0b043647e10fc665ee75a6a8b3f10c88335ce30c7224870000306e01dcb03522913273be1d750f56dcc384506c3034c6f9d461b65fff35778f09f3784769848972b952f605c7f4cf8bb317e12997267f190b77801ba54e8d113ac4b79ea8d714f846f6730c8e28924e50a32b9b8123289046204df779453341c9a05e05813c494b23998a228dc9aa498cb098b912449b3234aa307af70d7f9005afba312a4fa0512a69cabf305b554ec6e48fd497fe9edf872037e9a59b4414e1394741f8054bbbd4641f9642dca08049d14e7247e93f24012b9da9148bf3551f6d0200063c63b7d83ae04763085454e8a237431412d3c3929b028e28b668f1bb281d7376b21f6bd4181c7ca674fc4e59ca5ab200d1287300e88d0a816b47fc08f22d2a262215fae07649c92fe1ed383b92b310ffa1ed77c42b2b68e073a88545d7d245787fa55989f54bb416de462455d10f411a98a6a7cf24f96ff49b6d06eee9a7374964852ac1c9cce4d307affcf6252adf069035b6af568cd448f44d8aa7a5954d8807343f412a61f84359b67231de282fd8f2bc738bde6743fc8800741da92961da0104df4cb576723d4ee1a5ef241e27a349739d595188425f480c2ac9573716c606966fda62b81e6c2168655a3cead19675ce6099952facbbd70dc1757b8bfaf3a894a11fce0b9d9899065720f7c4c79223fececb3cd086cd934427564ba8c269f8d3a31eee14629d4bd70471ad80ab18f1421c50324ee97c9cbd8375ab1f1899e74db4fcda824e090ec6489b0a7540131895b3ca11461b2dbdd7bc0d7d8f039326871ae66fe4074bde6bf41a0e06367e25c604bd2603cb6b8234228188f9a71d488a7a50a74d0eae48a90e15f5ad968f517888265f16a450a64ae684b9229efcbfd3bc6b9d68ea91859fcd6e309223f889c71bdea373da2550dcb9a69215ddee73dcb0b38a2ba878959e603211f140d03431e01e4586877c832647260c22f639d34c75b3d7572d472ec7a2846a0a69aaa1437ee76e88502947b71e0b97109a2bd75c4619c7fc2d557a2882b17e9455f80a160bbf32e0acb3c22d6fe9ee88efbf3836d1c246b5c9731d94a196880f4e4c09c916b5a40a3897895b7c7c4830532b035fa5479ca6193c9213fb8f529795f309f4078d476207f33d201fdbd832f2020063bc631ecc00d2051fb1c729debc398c75578576e0934cb63e67f182d43a1cf19520bc4bbcff0f524f25151a39465acbc87d458a8aaff218b463b925c892852fef597866c2086bdf4a36b7a8fa05d23f38f40a5642b96bb97f8c88388a0d638f9c6133979b937955f22dc7582261d92eb1ef40389ed4f2c6bf818ee5c60118d0a179c17e2dad7bba8e685f7d3549df6e729433efa240156624c34f71016f2b7e5479036b3209e4d4e0f03207f35a1fcb16b8a67410855a1579533d6f35575dcb19444fd1e20a2dfa927424641df175c8a29cf695826202685a3c53b8346e3449f894c9fa6252bcdba92285064012652be64e3219ab991db436ef4c8b72a616da81942a5cc4933b1290dbf112383ca5a3666fe0785a2ed96d2318d27981ad2e01d6d9206016315cf08e04a9afcc5a2c9bfb020472e1a98bca5017410c65579da2019aae52f78cdd0cfe5dc3e66458617c46f9767588657e19804506c28d51045efaa90686146e599e02dae1abbfab0e087147244348631e4230cff24753e24828600a3149947111079831d4d78b18edf47bad25bf44d8bae2534c01dbe7d39845435d69cb7acc480ce3ad017a9d36f784ddf898ee3364d1c56c499313cc1b26fde218291c0ab0a0c581024d8483f585af7b8e853aa3dd488cd5db814452faadcaef1c19273887069b7f19aafbdb2446ff15b0872483deef982c0b69085d598a59d574fc7ebad6f7736095f0fe0c4126639259baf8a122d4f0f170025f0796c00c9a4541c48dbba94b6f3b80b2a4160daffd3cea21edf5455c4f098f76c1b90905a1e6f06c0ba36e22f3dfc70a21804027ea825065df2be8fe0f4eefdcc313dbde9ee467344b17dcc04315ed3c50990a9879b440cb8a7bd000d885e5f499da2440c308b5180f1f6a3049c3cf4c63fdcaa0658cae59cfe4c6fd8b5f28a39988517e0a13245f2563aadaedf9bb213ff563c425f5784744054cfd020a38849f261794abc30c5fa0ca84c21541437135506f8071906138d3d2abc2fbb6c7ecde8a26423d5a4250d1afc01ed81b7515c4c75825a84ed1737346360f3f2daa1adae99bc23d3bd38f1a45e346a6a388f9fd25a14a237f14709d79ec8f0c5894cb268bcf90896b8f2dc520cb2e9437bd00fa6f767cc8cceb50275a9eeb399dc35aa1c78c1eb1e4ef5f72a1b56e358b14465bf583a1befd8d37605e29355008118b7f18d4f3954290dc67416f39557580ef42fb9e35f24d1d469cde6b17061e286c5137099a82f3818a544d92619413e8f9cc15cd741199f3633a82d8977a5b52574f65c90acc8d65763505a0b943289958e2a8a708632ac415c2a9d9deaca7f2983ee1ca23ddb79bcfe74b11f8b3bcaf729c0c19f732920e6b864a76d82865ef5d1506796b518f0e2c15ada58eb606e56b5d133e5d5c31447087d01704b32ce0d66da1215a9747df1c4aabb29c2bb50fa2128b004df8b96dc96958ae85d3dd52743d6036b897da4160d67303ebebf58dfdbd32f0155e18a5d490ed81370bfb5dfaf9fc5c45ac40e1dfbfe6ed60acfab164c760e26328c68738ed7c5812ce9498ded59dbdd64f425cdec827e009fc15c77325001035f05c7b8fe0f9c74a62f005e59808cb3cfcfed242e843a4fb5b83153f016d05b7b9363a58505dfbf0e013ea9da9d2e448d8cf4b4e3fa9f6db018f22979a09671c4091690b62ee3e3da0a36a969ea1ad77f3291186b5347a308229c2ebaa609548b071653bb58ea2f5218480d57edada859dc3c3e6f092003610ed1e9ea2ac49537541fac198424c7dfd95b9c153f329045421c7ba24e86d37c19bd4b1589ad778e2e29b46e0615763aba4f81032e29bffa9674a26af8f172130bba438f526b8470b27b0866d1955a561b95b6012188de32aa42cc956c9d5f50a14e6f7613c376827174e9ce7424ff6f80be46dd7fb85723bd66f20b54b1c54044559454b0154f25fef75993264effa23d6ecf65dbd19f23db0f3997974c4298822c241efef7462d393e40d64b83286e44d65e9242cea185ab7ffd17e2361ee08cf09593f875a14f51159246040df2a6567c60d00b02d661c3d928fd859ea59f1b7ce5fd9a587e139aad58ec6ac220d5c9d8ad7b0a97ff8095d98b8328683393f7948a716dcb9090b847239baacf70659d113d4fd6a482dd97b2aef3eea4e31d71c4fde1f1831370b67061ec94ab8c1dd8ec0478ea090a4e4be01309c149012cc521107058e2a594ab4672ca250987402692f05255483b920204f0fa3c4c7e965b01d20c0382286ce3c6a9de21c14e94a484a18ed6091ccc7d43c58602b2a184a3f189f7470a15614528d20276d8202b45122d1404fbdc9a3c80e696abd84702ec54cb7024e5b32d159c98e26ac8f9c46b41588fe5498042a49734a95ed558d121e53400e0662999b0a1c93627f541eb4a81429d40091e24a9db45df10881e3d3c10c1a424296ff0e3c4e246273e0797dd31fb2164082af8ae4f416b13503c912b738747c1e83c40c4a42114dfb55de2e58884e50069e0eb1440d7de7d625d8f974488d34fc16cef8bc9dd01eed01fc447dfa378148cc4e23202c5774872cf67834c0132398f4d54b4c8fb76d17a46e32fc50fe891938afc26406aca3ef41c5060ad8ab9afa817ce9039e81471bf404bd5853302602192782fe27533b1228c94beea393cd10008217ed18fe6420ca0cb38b0f867a80fde3ca08bf018426f57a7a175feea45b4d6cfeca7296195e3017e9751ad6ac53aa0a0785356aa093c81b65a35aa06fb6e09f9725e0ecdffca03bf2088ac5bd952659db96cd577b8a6c52e0e6c8e06cf2bc07f4d0b620b9adffdb411ec2fb527b84677c22c3b1152328ac7ee4ddb51ac4771a39ec1920f71b2ebbc73a69fbea37e208e6507fc656a52f1f8beb0213189dacaec9ab779cbc411fb70d63f7dbcbdc906502a136e8aa0324e4b48abb3627a6a087e118777c822fa562aacdccd9f98349ce713490bb5cfea577cc10e5ae633a010f7d30437a089e486224be9bd3dc8e0b0a0baa60fcb85d81427a55322a996ebfad86bca9d145ca92a749c8abeb5ce75f20472f6e3cfc995e3248b6682a99c1ec95393e7ecae5baa430e9a6c41207932df9e60a9ef964af9590d13f9c9dcb34f40b7956f8f3685069c6c4c22d1a65087fcde6b6cf3b5216f0a5d707cbd8219a2e77b5075f380e50d03a261bf7ba0fa4ef3ce36a23ea2a2e8e2202f401fd0d4d896c2f95f29dd384f11d61c00c23290909d45324a4e92602e50c06b3b253e33c571bb1d6f101b6cee388c991585813d2b50ac5c45d3b11b1529353091ebf27b18f973673a099e25544b878a822ddcdbcd25b6697fbdaa0d4aa88706c23a38b0ce6493c37063d98585b78ab90dcec9db55b4938cb67608b946356e8c8589e4230766c999e2136811b96fed8b46bd8cc367be81fd0918d41549951a0a2a7941685e0e04a3b485218e77009a63d2160dd102c32209163795c27a297b517dcf5295b251164c1838d4b41b827a6ea558abaad1011ddb51d1a06e061dbc42c401b74768a61978db5b7d0a33ec2aa5e178a9dce0a948d1ce0b5670f9adb23afe554c0b0d1102257f30fa149204b449a8ebad40c88cfed556e6316753df439ec24aa14184ada382eed8875625edf034d0dc0dac76a22167b8ff62713250606cc27021a7fb6e7f84483d1ad0a19c8d48d089ebd8feef0a39ba045fb5ff97262068ae27c13131293d68f8d4ae5a9b64d0ea68833681ce0c8ddeb415d4a985a276d1a4d368c9681bcb029b5984d311da69dca15700342d9a0e9926d06402921972637ed5ba21cb4cc50ee25660191247d25574a27f1234818c534ba543a2c559b5e29eea0b399453a5dd17720dad0dfe3af7e10ce839d86b111721dae0b50f22791f965952a49793a71706221fb331a0a55e611df0d796efc5bce2dda8684419bf441a2c23405efe798a02f5d0c3f1672195225f7d8b012356585c6ac0ad69c64eb9712cbdfecf20a7b5c8756f04c2128066218d8a86a96045084566bd278a06bd0085f88d037dd4df371ea79930bc8f5ebbc5c365756a886e562bddbf8e867dff9f7e1725b06de63567ce786a284205d2b2864d1a922c77b2d7694a6e1ffc7279027c3188448b7509754e1a61dcde6263c74aa05c608e0989a4088b9348ec73282705fae615c4a1d8dde603b6996711dbfa6b3af5fe25d29dada993d9cd437a845f4bc00c6c15b7381a624c76f2a67a0b860dc8496a557c5c86b795e1f38f9474e239029269d6e5e2c8c9d143b51cac8df4b8d54e1fbc0d876bcc1b0503eb29b2b5835ee3a0217b8d1617992934a005ecfb4548a50ac02ebad1401b38809fd50b454c713d6864380cf33dc3822300a18711d538041c91a3f244cca3c076b74970088335d5034192e25c76f50ce81f1f8f685f4e5f1746d0e0b9ad7ccd115ccdbf1a98e1f03227a196b3a8ca5fca32171d5f0d4bb73ce9422da35e035401d9eec1b77a73cd6b8b379b87640cbb1ff4b907f2cebff9f19442f33877e858f11b815a602dd1d345f94501f5c8f22ea08963f1cf0fe6901a97a3cb333fd2022915011abd02e00be9423d80681251cfe9ad600d1fed5da7601ad4d7e7c8d9760b028d883f1f88e0a04222083c7d68d63d6727db25ffd2620d7295e0dd51b934d53d9f8010324c3569cec8f06403d06269eb9cf00c67f55b07b12409bda4476e747265a5f669ea7c7c29bcac658a6775cb8f41b6a065a29cb2d7c9729f1333f03c44b5549d269cbf1042519ee8126bae30597160d9cb260fac29f05e85b09a6cf7e771fedaeb1a31aa88e4abc216df535e6686c07a86a2e0bae76d80725a93b02e6931a7a5c34a912268c477da2818f0ff7966b4e6c8a49c229c2cb9907ce2bbb16c630af0677335a7a9c84eeb59a91e89e3cf2b192512f6b9b3f858516d7fc00a06dc239b009fe3e7a5e4ee7ce8912ef29398efba8ac4df4982337ed38c4f69be20a02ff95db2ebf999586e733c9b577c11998481ac64585243556cbc722d8091282efd1caa19e355d2eed1842ac99d8305b4870e781842731b8f688c87e26805680dac6a3504000e025b350d2401cac23c34824906c6c2e1f94523ec7160717240e46825f98e6aaa4c0ee8e229a4f5d0e0be1bc01c2acb387f4d631ff72b90d9c68783f8ec1abd4d769adc1688315572fd12960f31d60561a9dec5299b750bbd45376730b04a1a31b85d1a1eba9993247a243447fa804a125da0704497d024e8241447fa014d127da0714497d048d027348e740145129d4071442fa148d025748ef4015d2aa87d1a1eba9d93247a263447ba804a127da07244975049d02514477a014d12fd4073449f5048d025748ef4014d12bd4073443fa149d025f48d7401dd31fa187a70775166f4b22e1032fb0a8e5c5619ceca74068200460444b3da334382f14692dae483901dccabe3eae0bd31ddaa9af93596f8b5fb7493a0cd99362728251fb46d235d6c6871808b4910b162fb48ed666de3232c24508f918d6f8cd4de2c3179117fc0c958d60743b04e0c8e64f83887884a23404b2dae7f9177f05e322114363a216622c210e488d399d348988691394a2bc737a3db871a564e89865bfd40593a645023e475ff2edcbfc5ebca98b020a54aa958b9e2ba28e9cd01d73430772ce9c529992967820559f592d8b962bb29261c24eaa5628d247d949b24f581da2309df0c6543d443aa5d43ae6b2dd7876a97c9c0e711f18abf4da0bf1022aa4506431e40eb239a593059e6d993c7c06e371b21b17371c6b3e37da0c4895cbad783f19cac014c86f04b78ef075490e73d47633f084d38b4b381e899a8df1ab9d2f0750d50a81819cbc20a6de9c248ee7ea02650e8f2a9d5ccc9b0928db2f51dfe84a6ba19762ca1a2a17eaf014224ca715c40a564423000e5ac80f4b185c0abfcc0c4b771afb717149dd73057a42ecde5a82df8a9622294e3e923cd1fc7e6a6d7575947b8103492ad547d2c7047dec24f142e6365997330b278fc312cd599f1036e826834d075eaf1a052aa45d28ce381b275aed73f5e1168b06b518213858c38754080c3dfbdf34735c746d5ce0969c71624ba694e1db5507991367724a3e5adbfb5d0ff1c5f5802c7602268f7ab0454684b2f9dea80cabd65f758ae3ea27674cdd6874b4a9c241d5a82db6d16756e8ecb5c58950bbc5c8f9503779e414c78b0d81c6f9188ac79d68a05c78c3a496418a21ebda9d00a91da9b3d5b868c15a0c6fea2b303648d8dc2b5e7284ca01695c07d9d7e71c7158ef8755a945732f87558b545685078a3092c4344adfa66d4d035de30a0b8ad15e8ac869bf18fb18ed668bc49654286538c77b3f035909f6b348d75f4082028ef4c233e64d32b2e623d54d3fb17620704d0e316c16798cde9a4a4d8cee6a6e45ae239046a018497cedc6ba931c228b0272498ac7f10f0c85b5e3a335813f951aa48a7970c60eaf820573813a8e671cfb35445063f08c05ce3560f47ea0094d3354d80296bf2059c09e2719a6db3ce316ee0aafcf98c65c0bbbe32d4956ba23f20df2089784c5f9dc7f400c4cbc0d41648ea23768956adac880fd228a8e6379d2278863ea3ad7c008f2f4f6bbb553c8f153805b36b0d9a202071dddd3ad86d89411bdc5b2b1d0f327ed38bcd84d8f16c83a435113a98a9f61ab32de88036c078a53ac959e44d4786afc3eb9d8646cb05c59ae9a15c5ab4a67037a39f2ea484cbce7c000c3b3308ef51ca0fc8aae72904c8ed312344da1a025a61cc6f9fe3ee7df98473389531c0a7ad4c0227416fd30f9ba47a28d1d85e4b10a017e1389b9ef1c0dd66e0ca8f27ce38e0fbdc29b28ebb5d20ae6823be8d908d977f860dd369d1351a59b5e36932acd4cc5c0ab4f2780be91caa94e2301ee68d994e4a8e56332c3a40d9d4965e9e4b2506c7b492fd4c09d5877548692e56a0e6ae2b75c2b7e29bbc753bd3d146c5db5b6f00d45056ed8f823ef4b3335ea09f8543ec244431ac8f6d08e266b69333a269482285221033a8bec1e37feb9a6d1bcc0a74dd0103324462082d5d49e08c57119472df01bd1a394484057a32f95a7b5e0ab2f3faddbc35ecc31df755420c96e4144d9d2a84db012f309676b36562a870417d5b61c777d8180b2b31492367cab3bc8afcb83a3449a31fd587e5496249a3da2ba7cd939f4e169e78cac5f450a6b02022eebe8337afeb4e1831e1329369724a3dccabc0f3dba526156ea270f1c91e8e719d1246c2244e6ac6999a1c1df95861d9329b27861217ae27d3bc5d396ec8c0924ca5a91391695e22f9897c3900948b58510797610e70801cc4f3d35df952025b9ab5b774ec3efc73b6ec44250e290b728305f170e96bdc79bbf0120515bc750f0dfd70b6e4761d2f09ab9f4a9522a4441237ac7ddb8435cea3023904a9294d39554b57be7ec5ea5b544f11169a1ddfd52983182a5c54df5af8f13b6edcb19f1ee6e3e2bc861ac8075e8b5e2a7d016bea1f85697fd7c8500defaedc42a423f3fb93463f1c5a38539da7943c0ee6fa6b3b4b28f1689412018c83040222e3eec3b87375f5ae028cce2102a2bb2cbb8628655f16bf1c529f531d715cf37509ebf817a7cda8b07f5093af9913c5c153583be62d12b49d796dcae1e2c7339a656270e5f32ebc719ce38cf38f2bef028a7725658867502026eb691d165da29fc17002cb454387baae42d0af6d79220ed6c3e019712e5283edc4c1ff610e06aea4b2573e97dd0561cc9be8b019c416a0e5c1ac95cb8e2a11580ce6e3633d9a3d18f4b7415d31f4bbf5b29596c87cf3a9259327e1bd718eb43d34429d965b260c3871623f5f22b7426adb8c88bf803c5428903f7a5d9033795d6466fb89125a59bcdc16817f1687d540049c329e08093f819ef1a732598c490e960529ed3d327c580451e329230e34ca1e03b133bca0345230b41401f61d60912d6ac062ae71926df895a496eb7ee25c5ac8841685b4870992d50309c246284eb4fe681dcafb5f97a1aee85f672bc2f14f94c0463690c9c77749491a814980d6db5a1c6b039466347cdf249eb002578c4cd9ed26a840f59db547a699218fc3028577cc3bc5631bb2695a82612f4acf72c3e6951f040d8d839eba7bdf94936ab1813b149a5cce6022d5b5cbf09bf149558a04487c8f81008f8f1a4a334de9a3e188ff9aa0f3a38ba37d4d47a9d4b16d30e454b5969a74fbe7ae54c3a3137750d45feb377f31ff832a0ffedd36d45a4ab367751c60bf86e6bd9daf72966427b848113b8df0379987b1f78eca3d416ed70f5ce9eb47bed4e523afd4fa90577afdb095323012fccc031a10539656309c11b5c509d9130914c7b78e9b62e31c5596cdb934b3b85d8a94c5d7b95d3a37789af12d83a8e80f031033dd470009c70841d24d340cbf28e0769466a8914ffc568edc4b7dd034eca3511309b5c8761391c8eede01bc09da0880085d18220a90f201bc940743444182173e1fbc4b708895284c39903c1bd219218b9f9c735373ce20a8385ad9916777612301f7d4931a322587710e98438a39e65f9279b3326fa49cf147a4927d41842df306aa44988305b06545063b2ab10273f85037f551cf464f7ca9be903bf145ee4048c5e1f4aabffa24178f45d279a378e9095d041132042787880e4f8fcf8fb401723304278788ce0e129f9f6803e426480f12b8037520911c1904df84825cc868c80acecefb193d842920a31b5f098d9698629e7a474920f866a96649470749179145928e44961d4aa9a5d28d14648b47251d69477a827444dae2e5905e783ec02d1e0b7c232aed483a0f07dc11890e7da1b9933c32a89c704f338e5e268ac23814fa47234944fe50f8060f8ac23814f2c1793e3870483c4561dc3364f60c993d4366cf102a240689a7288c85f008813c4278280ae350e81f8de88a742381c816e9e6e6e6267443511888a40344d20122e9c0a0ce4c6d297792c88ea7b9934178368c50fe4c3c31e24871889c3dd4670a993991522412da48373bd26cc1007758ca9da45355d7d436d2a4f18439e77b46706771f0fcf9f1c1398d53c4fba097f4688708cb87744bd7bc44dd8d7436d49d19b0c5994b364e6489395e4c2216278e2c0e8d22b8a3904c247bf25463c02973c23f2dc6f0623f2dc6d8c1965904b50f9b65e310a4e14404bbca1e72577789314012879f0d354ddc3da6bd811904cb845da9955993c216517f3a22f0c2a62eb3883ab7a7d7c9ca6cad615397797a7dd42455cfba7a601b3ed3dc1df3d311c118fbf1d042fa1012783b6fa7879587a3c707f05a90802af3136577cf2714750745f09eeeacbd52e9a86189ddd93d794868c0a338a2f9f90c111f0e1e707e6e34f880708a28b9d9d3e238f17e6e98983869c0c1ee60147bca881359ba949cc8d28d884496ae075b45647945acd89301bbb346f64c892cf01807ceeb444551d484b1140ad17f8e462149e39725e08ea22c051370e34614648b09fe3255a2b4829c3ab88336ddf3993611fa002f6fc19787472b1535fdf43ac61879aa2f70076fa04d9cb480bbe7c383266e1fe803fc0fa9064aec83fae07bf0c1f7a02449f230f790f1e7d9d8c00b44204e2c1147b40a0c3f9b4051894ea79fd59c3d4e84e2a801510441438e0f91dde103a1d241f5d153fe2a831030d10226625013821b1bbc20470c57d8e0e06546110616610821348327d4208061051880e1058b83ef7e45c020436502a6fb1501430c9f1c93fd8a9841087bee57e40c61084315fb4664818739d8508b3044b1e17b48c08687a18fe2e14d7040cda46cfde61458ee57240c2a7617da46c071bf22614cb1573e23b4b2b2e3a978fc831dcf85644b07747a7eb490061468810811073b8621c58e3fc4996798dce06e148a61e840da905211548905f8fd4d55fbc1338e322560686dc0f0d93d13f65a7bad33515955f5fb775c2d6bfd5e67a25ef7d55e4b7f6f7f5fe70d9000a92255a8fc4b2aa549527a792aa994306aa1be94ee3ee04d165af0f3f2638a81cfcbbcd43e20174ae022e7e50715061b1105e8756af003212f3f261d9e178985289e40f2f2636201901ea2955a4481294fb588029a8a28305dfaa47df898fa07b6f332ff4382c2e7455ed23e7c50fd63ea7999fac503fc90aa8807e8ecfcd43e9ef6f1b28042163ef2352fa1788029a550e1211658fe3d092504824d09e58c17bdbf0d9f6da69e0d79ad8a9622601ed287cb34fab47fb1bedcf18800dc3e36d5433c22e0c3d0a65f89a377896a30d49722658cf70778f9ee03deb671e41263159c40c4eaec7429371e6502e2685e078d379e8df9996829253411714427d4507b4189a7325fc4cd401c4d1f1f48f1c0cb910295088243f8c91b0f87dcf3a31e228ba454ca04009d520e91141b471294a474490a3d23e2487a1c4977891d25c54bf2d26110192bcc68e0e52002fa205d7a061e0eead2b1241dfeecf844f8ac304178897e0a2901f6648b09ea99b0aa25bd526762a2a6e9b53a13544559d4ab3d1395adafac6ac9faea2b457a7a76a5e2e899953acb38e98c324629e35443233502154638811b86e0063758d6ed2d7bab161187c41ebc16fce29018840d0bb0e1bb78c4b21a2e7968a831c663b96629574508425df885ee833c4d440c859ed61d656922e2c83ad5d106fec4d161ae401255de8657f044cb3ef9f36c34813b99c39343af439dd9839363e4e1c86616db35ed37779ba6e7906c0e79d7c4f9be641b9e0d388758dafaa1288c6548fea31f9d5a11013f49439ec9233371e2084a114790da483987c89c21524c1c4a79201d892d92865ec02371042d4bcb9f6703cad8d3c09933adc8e199604c336ced59ee81edec2f775aa6eddd11ad757963ac24e0b6af57fe9e3212105a3a2d89232889c4117cccd28a6f8a44acb20d6e802d93a79b22984db040c6c1664ff3084f053e5a3d7f66ce121c733a89237320754288754bf7907bca892cd62191c862e111b9244e7f4a680617ed3e12e125844b7ee06565891359a014d10b1d259105ca20038e7a87bda5938032514729340ddcf630486481021ac9c9d18a3882531c1271e2a887c9a6b9f476897108140f87dd367c2cc18e9610d66db46c9ce8f52c11ab9f17d3fafcdb32682cc15db5e7e1185bd2883384663dc451f66b0f0f8fc01d982376017d808f38356c9e9ee521e2e8fd6608c4d1e3614f0fed09ef38244af170dcc34f1ed92221056748771436d15dc8e21c26afa4b0eda99b3c286c7b50b6e7b23dcef6988d6d5f6b6c7ba9235beae1a63b0a675aa5e62bbf0667db577a298f60882dfd6dabe64592a448c4b6bafe6d6b04f53e6a5eea69ee6ab27dcd4cd47725a0a5c76c754759b9fb80cdb6ee2225090712744bf68fde485aa9c8603e528f88227c449647df211027e0cde3cec4c66dd8b99b203b1338c3db3913686722d3b2ec9c094067420371d7b673db14f6dcb773d7fe560cb09f7cf2492fc48fc16777295cde322555e0b57ca9026ff3757b982f6bef755d6b0f6fa5b5effe502dfbc3a43bdc85b60c85a4d4d46f9ccea0c5112db438a2c5112db4000214a090050563d3197b7eb050cc172f391f8c5707827d84110a53bcbd7b3c3bef5eef1e110c4bfa2affaa94550970079fcd72c4c97257c9ce39afcbebf2baac56bd844f90197699a51735c350150e85ec1876895d561007062809d49148e04ef60e72b175aebb03fbd4892cd9cec3f182c03e5fabee64ea69e0c69f975d905b78396e279750f8072e893654c4f2c46a8ebbe224a87dfd0a9468454c8d3d7bc8f745185e0e79fafb705c3650077b7d56b39a7f98c72e19189d93461ce905676b864140c2c516458e304346c4c1c1b9aeeceeb82e83b8ae6b06cc1890bb9ed820118c27228fd4912a546eec1f852e91481c7164d4c15a86a223351d88a4833cf08b4d0f2f29df03db52bf5f77070ecf68848138e22c16d99824f2f0749127f2481da923039f6e45f8f7d931ec7a17da1826c23ae66aab3b23f674ec3a8581ba2cd3978e6919d0ed675236f62977999e49d9a0184d3f144d23b7c9437a9e681ab9b9d3cf2b042784c9f4cae5ee47c572866176ba9e1de3a653ecfe503f4d99d51d9d303a4d739aa6c9be5ec9bb57eee0be8e7367c4c6af2fcee042f85ac67670346fd732762eff4ad9f49426c0451e031d8838cab479f95008e3d89265592633d04ccaae7f57cbd4db0ce76e26e5cacf25debbc4ecef66d63ebb745763c44ef9c6bee98c4d8f8f717f9125b4e510b7e941d82905e9ed5cc65363aa9dfab55d2d93dddaec1604ca31dc3bdcdb6fee8cd8f43acdf75bc638c77d73a7699be5ce7e03359bfe629d113bfbcd3197c64e7307e9f15d6496bb99149cbb1f98b67f33299bfe7535f52e32c327ba9a1c235ecacb1420d0925fb93b625fc7b4acded2d6b15b6fbd47b85cb7f2abecefdfb3b4a6b37395c572cdbef269e8a42e0f92cf5eab94b2ea2ef42704e8326e97da4f2e75677221b2eaf7d52f73bdf79b94070581fdbeca568bac8bac5fbf14f5de115b6469acbb238e9036775295d6e5abee7a7c2721636fa0665bcfdd77b5b5beba7cad8ee5ce828076ecf40201b7f64ad31003bf4ef04600eeea95b255c66eeeee314d430c7cb5575a463ba665b6dfcbdc594d43b7a6e71604fc7dbc319ba6911bf4faabbb13a93b930ad2d2da7bad4b37666ef9eaf657ba31d25696eeea69e4ad32cacf2e60f9ead40e6b5bbf993a96bb233666dfa3b610a635cb55e62bcbf538eb11b582bde6b86fc63dbebea7419bd67417baf7ea8e864a6d6919ea550ca5bb1a1789659b65eeabfb776f55fd5addd57447ecaa830e39e44083c68c1922910c192828a1d0c989890908c471dba669598631865dd7bdd6d66a59d5aed596589d76a5b6cc28dd49bb5efb96dfb3a1e94edaf25796d97b362eddcd5d8fe55dff1e0bf62a6beeaed35bccd232f755755fbd7bec367747ecabb16c59dda5a59bbbaadeaaf7661a6dc0f0eaa8b77791140db5b9fbb12b1abaabee7e745dcdae2014e272847c529332c68834dba7b59be6a12dcf38ea1e45edf99a8df1676c8c1125c6508c49e8603745d150140dcd8c9db133162514638c31d298b0dcd02df790499e71445133d6d2ecfbed4a1a6ac6ce581a6ac652d48c9db146648026461ec8bffbc3be4c61b2ed00eb786cee75cea91dd31dd61d8f3d7587fdba8bb4f6da9f39197c38adfd8bf6d665eeb15b989d5c7efbea6ab61225fb25c0c89eaf60a862cf676f80c74ba2d8f8274fecf94c8c25f67cb5ee0f15d5f1d83472cb649f577722ea0a51a7c9657cea0ef4174732f831d6a7c58e75d703ef24441bffe60e77d4be5a04c4db568bb8cb68b7e7b4bd66e7e7ef5d24cef856eeecdf1f6012013a8ff316c4764c8bb8cf631117b588d340bc2dba2e639dfb659dbba5397d7ced36773c3636ed2520e036e9b06f9a861818d33b4c8eb58cc9352d73723c7387699ab94df43d09021e9fde9813fd449a46eefa7bac3b3d419a46eeecf7335e21aaee60861d8337466e8c81aded987b0ad1d977347267ba030165b3fb43f5b943ee794c4fade9ee9e46ee29f79d73ce49c11b6355d772c7636bafd8b153b125740c02d767c69e652e77297bd35dcdde8e758777a432ee19a7b95f7ffdbb31b2a336f7507eb185bb689bdfe6af9e97ee686eb58c75632aed22b5dcd14c4a880a1fde624392aa692c7798470b4a4be8f7dc51f28b2a9ceea88dfdc5630fe51755b00e74e9268f37266eab65f0ad5b7f3706df02e2a4da72c7639b68bfd77ecfddfe24cb687ac611f77bdd2467c7f296e5b8b7dc81f48473677d03355bbbadef46e06d11f7ebdc6dde7e33768dcbd8efb1df6fdafeca3298c63ae4ae686696bb1fdbbac7f7f857cf38c28eb14b773fb6f55bffaaae2e2195bb21f6fb94bb23f6fbecf1928031a00d4172bb011b80ace1670b60bf224ac2d8f11415638cb9fbb1a7ec66ec443bb8239e660b04fa00638c6d02fa204f0f03afdc00ccdb13e66da92728a7986f9a12ce19d1dbd4eee69e3f2b9061041ca4804314fbbd3308d9efeda82f523cd567f5392d94940a159ad1c986e6e0b5c02451253ec61fec481fdc100c890438fe559208e4a142a8109b4af374934d9238c236324a39271b0d79e228eb200f9038bd9b4cb0ab4f9bc8b2446401f270bc202a2a4f9a8a238a2707d51ac1934f3e09678806e8522ac96803e60190bf48388ee2ef0658c40d50ecaaa25edd7a8cd986d586f207f8fa666657561e8eb8a9138181c8224f7d008fa2a89e0e01b848f7b6d8d4a79438a20eb37e1c512bd45724758ab2288bb2e285f9ae5ee1ab2a285515a5659e0f1582942def49dd419b1b0496c4dc53f778f23dbefd06c0454b8b74e9723acd4b00a15e32106a22c18d97394d9388d243ccbf4d047ea11435691ed04767d6ce20a784f20b778929d18a08638442ad94c4f7946078e9105373ce19319f2d1fa6f3f3e35355f3d527b2c4fae3859436d5278ea44f5db2e56914c12b41b6942bd51830c502dc551fb944f54282bf4c01a788ef70a4f086271b52a10d639431db0db50d61164dd18cd9da10e6f9688067433e1fe0d9908ff96ea8835706f06cc816026c31c222e340792b766505aeac502b2b06386226b66c4412b0537d8edcd841928448ad3f4aea12ca623e71d6799302ec225ba87479295357fc0fc7ceafe505aac84b2cdc98c296ef06b0e5df73c296ef549ecbb3211f10e922437124a7684e177907c8f3f0115b3421af881a866c29a3942ff3b29b91227bd832346f661830fb06fc4e51f31d1ecef72015a74cd46f9fe051f9a894543eaa8592b189075160489ec4f9de7b99daefb5502929276d93466515b6b07ad97bed55310b5719a54d9bc451d03491ef9dc4f7a09412e5bd88129271c9786da11f182a155964506418b21fdc15a3228b0c941dda2792c906a9ccbb01eac6505be2f6b66b95ed5aabb53263bb5ed7ae9795f9ee8a556c65aebb6675b353b5eb56392bf3b42bc8ca2ced7a524faccc73d7909559ee8a6267a088645c7b7e60c7c3d1f4b1638435344a2ed4f7f26695f2bd37df9bd204f3cdf96484efcd48e3881ea955ca7864d3c42d4572ca8ec8a6891b3e1b9ad22ad9183f19c1f0f15d4e31d4f9a81d60783a299d53c6285d4658136442c2eb8953ce291fa501140e0e121387239afe424f05fe1d85250f45e79ca45b3a4e800bf928f5a8f7e8ebe113c628d497f2b9236a99296df07c8cfac5d19334cd738a7b3e781a8804bc28c336dc6ce9f83f292bd2674892f42d496fc722f82b9145fa230bdcd253546c3c1cd525eac796ba1b94ee01f785af6bc7ebb02bcce139e4b0e319b06bec5cb6c8fadb325964e92016b0a9235163b32b2d8a59c002767ccd12b64847dcd345937e7b6eb85d229114c0fd9a208632ec501cbd07611745c2a0024218631131928460646cb9136db694e87b3670090b56d410eb3ce2ad436bd344967bcb5ad7b2a2bd4b9cde7bef5959c9cf9687b0aa3e1d52aa7ad411c61861ece6b4a635ad39e39caf7c7680bb077d78289104f6d0602003d1c632428cf0bdf734bcf548c117df8b2fbe0769841042f828b57ea664f9544aa03e2267e0f160208eaa30e0eef1c024903a815ed772376331dd68f64a2f973b586fefed8ad05ef3cb7ecd5fec4fb6745b965dd755b3b5dc71dc86bf280bc213534a08d0a9c69c09a5713dcd17c330cdb2d7dccdecfa6e0cd5a2ebf4dbafe8baf65abb992dbaf486dd7ebaafd4d29c840e7b0335dbd64aa30d98aacf72674d9e9d567d2f5d39bb726692d5aa654c9e6919ee98c52e13eeef32a25c3d4ff02f3ea5186358c570c5300a630a5b0c9b79c8e4f8d564fbcd9ac968dfb8bb103edc214c03694e77185f8d6118762fdeaebb6d17fef44cc3b6cc5ebfd95ecb59c5b02bdf77dcbe10bb95da5737c371201d5010973bb8398aab34d3dc69be9452a8e1c360c7dcd67e43165475f7bed59b1d06d3d9bd87a91794bb9a0d3acd16a4bb90bdae9fd89095113a4131b1d82fee945edaafdfec6637cbb4c3604dd7ec4c8b62b46787d174a66bf675fa7b9dcb5df677edda2ee9f457aeaf15db57f6ab9dbbb88b1361ee30204ed76cac4531dcf161388db54d7f6557d534c4c0d7a565b68b72f73a9111fafd8562626dc8da7a59ecbab4cbd24cbbb22c5bdfb26685a81859b0eb0e6efcdf7b0f39d061b28334b7b9d76c1779f3769ce1c6d7c9c9c9af8b60328d5fb32f2d8ac17e1de6e4fdbad996bb194eabd5b256ad377733fb1e6bf74e8cb54fcde4d3af2dabf627d643a0cc85ac139b63b40b6f1904ea4cf40c57bf819a2dd22ec2e75eb3352d025d59fbcd57360373c55c1a468bd1f47bdb9ae13611a61de6d274cdc634ccc5d775401133744a9010e83d86d5ed945a78755c1abf5e099d4ddfd1f4bc4cbb1aa699a6b926e76a1cbd462d4ab5d310dd7e727a6ba5d929d63becebf1af4cc758fd4a7f7575bbbdf8ba747a9c31acf3216407d5227c7a2bc217611d437f9fdddb5a3f6d186b99ed7686e6ee6e7a6a4ebf90c9899e20ed573ba5af1abd2e4c31adbf8e35fa6b9dd2ab5e8a29b52ca5942a79f6375bcf32b9fd827e3512ee26af5cbeaff5d9a871f93aa6e92eee20dbc4c26d02ba9bd616d6d6ab95e56e46f25cb55ad6aaf517e7eec299861818e3cefaf4ccd65aafeb196671ceee223b4b53b5dedb9bfdcaf6183fcb31f6bac76e7edbaaffb12f6d75f7a39b913cfbc26d592e112aa104111f42a8e4799942fa703f600d94380db26e734eddc9dcebd667b6ba9a7d35f67a8476ecfae3084f8cb74b77355aeef03cd9b2ed84da3eadee649c6428a14d62b5cebba3defab55a74e9986ae9f779eb5aeeeadf1fc0599875ab7dce5bb7c7eab15bb5a56fb538cdb2b40c77ac6297b31996c938b93d8612da6eb7133d5fb779efb42aa6375b5d6d55dd59ccd6eaf7f2a84eded96d6df6ed35e3348b5dcbddb7bdf62f5aee8fa30d74b96d07e51955b6bfc872a2b90dab5aa6ba55593433cb60b72cac629835b906d2ae9b5cd61e64b156b50c6671bf793b9763b6f76bb57a2d5fb7195f59ad37d763b9e31153affd65b1cbba96f55d559f32d668329342d342efb63d9fbd1c0ffa304d3eb94fd0a7454d6de50bcfd768ed9cdbb6d5b9dd1e66b314c3aa4f8cabf5f3301584ed27beae1cb795e1a6b48c06734c6ce6ecf9306f9267287be53228e36763d6f9ea75dee27e72abe27ef213ce823e2f8a017d1e06a4f1fbbc37c3282dcf3cc36ded2e3294bbb8a3465140f3fe30e7047dcef8bb42a044eea24fddc9b8df7e8ffde6895daff8f5efeed87e61b88d6118d63a6a8e699aa669d6abc358afb26cc651566f4d8d9f8d3ae7df8500773c8f9dce09a2f6e6aafa767877542d9aafb78e7dcba279edd2a2a975d458fb9a737ec264530413bac96bf6bbf76ab7d6eff69012bbfedd395f3f7d4c2d8ab19f87b17a6aafd9170858717789db7cddc17d6a19ee58cb9c7c723b7756cf70bb1e3b8939d133348ddc28af9fba7b7aca805708d0e7df1502457770834018db6937ecf816a43b10ecb9e9aeda4a59baa22e51eab3aa71325e6f234be8f5f8e13879053dfbeb6faea08c61331b7b8dd5565ba909877d33b9897e7114b2f6f530f604c3afd8b3d7ecb841196e5086dbc21cb5e6ecf990c9c82f8e6a7694ec35944fb2ad15c3b0cbda7aee56d7834247f9bb18d7fc36e8dee4387494a3dc874e4e5e0f73f27ab5d7c368d724777353d583a8b6f567e55a5f71ad87b92a4c76edd6e2aa453ab6edf530db5571ad16572abf2458dbdccd70bb5e97ad75c3b84fc73909b8b58a7aa5038e61bfcde0dc511b7fcb1db5b7579b453ab2db3f1b1626d32fc63ae8ef5ed7b61de7cb3ae8a0ed96d5221dd7ed4531d7ed612e8d67b8cddac3607a666fba9be1ec6b76cd7dcdf81ab6e5b871ee383dc3edea52cdc6aff5e58ec259a4e33afeb381f5757c984b635db3e5dfb5d7b7dcc12d0a425fd7815f2f8ac1af87c11a3f1bd7abaed95a1483bd1e06bb6e9de16a2afc9c29627218450bf9cd5bee8cd81b07d2f4f54ab30c7ddcb54ec77297b2b1d768fb4bb5ee6a723686e5ed76073e10717465f4baaeeb9aa66bd34193e6b0119bd23f9ab7dca5ecee7d2665c36759a237a1e730ecda746eba09757fa8d344b953149353d043a7ba3be14eaf67bf4eb74ff8d38e7bfb0ba318c52846b1ab9f7e9fae8c7dcbddf5f707806e1f01ecf4d2f42b8377c7a445383fc01309a669f2624f3388c29e24499224c932811ab210c448167040c5a8a212c513555e0fe58391f013555e126ca28a64b9400a5f245183185b8cb1c4132f533cc29eb05042135555555535954092a42bc2b0a5699aa66942810fc610853158a0862a9e98424e16f8ed4495e700387414963ccf72c2081cc060640d4024133749783f2bd0c7c6c64605f0fdec87850c8efcec945f2300031a3a2a060ae042073837325043183b30021435f8e8297f55c30c8a3003249216b219e0116480061c1c0745c842054cc8c1633c01a88a22e010e630a656f0a2862a0871c20ee0d0f38648042e88015f6ea1bae05d410842728ad0040daa708358851324c801a4020ac902054ed838d03651b6502f73ce39a10a6255821eb614021250010b5458158d5fdc4895b729b5aaa989699aa698c489699a9840862eb0a0820abe427f10a7143c306a9086244a78820a2986c42134d1041c5010f3f3042cc030053604b98942b80289a4021d4350029227aef0c5156010042ca008d2840fa80842922445515f4ab7524dd234a53c8e6c0a02508630d83c818a230cc10a384e00810977092eb050640c2a7cf4944f2e3e7aca2f8de02131c2d304164780f0d1538e3f8120052d9e20831b98810652885498218b13a0e1ff0a9cb024612eb6cc17e9972449a2a6c7b5200d516ca1041a6091c58b04842d499244351561a033a51b1b1b9b18bc4ca7b8c8627d9aa669fa0475f663421750ec4967bbc42a73388e68133b40c282306e50248c28c429c8c0041e9ee3380a7981a577589a58aa4c694e4f4cd3b4c49eb09841177bc2020e3a7b92e89cf34f7faee058926fea420b6b0082900925317c72a818c7e0020e950be8c21a7e5ea4f86c508799d23aa6431fd27f4036b420bbc8d7e13d51cf2b171121f978b2e6c5455279c9a6e00eb93b7a9ad9436e4af7783541bad723e5e318638c31f37ae8a56ee6f5dc1fa8b6b7047573980398ca40ad5317547c7a8a9876262a68931636adb1c3a1a63eb2a5867e5165da41478ada0733eda45415dc29f5bde9daa54f3b9392e987fa5014f5a14a66a63e294f39f5a14a262e5ecbbc99b0b0e9e4854da7316cfa97f2144d95c428e6cd1373881353486449f97bad962a8923ea431de7d2631471f4a3840d946ecaebce64b9d0a7b1aaf4bb6ceb7728bb9b76262529efa69f69c9a64296d8d4c8747fd03edd1fa6a7e414fd0af3acb40ef84f178807754a1ce917293ded4c5dd4005bd7d6544464e9a29068c444a4e9b7a91805c614471c1c1c8baa2c3ded88727811304775fa0a58e0b1e81db61a1bb56dd7155563076d551235ed58afa60ea75e6bacc2469c69a767f2997e262fe004c6a464e29992d82186b8346648b18a2ae2441ce97556184ed9210583734e1d262f269ec832934c547fe69987c094bc6696fac4910dae0f1d05006fa971faa8135976220b8a1591e5864ec4080070c48938b18a98436386d6dd8ca5de03db94ceefa61d1d4e51941ee2d51337d5129125e5f41510d9b2c341d444326f2add51738959311a339e0e1de24aa80f8dd3ceb433753121d994c68cea2959ee90e592a8627224eae468248e6814a2a310ea7333bda33ea2e70c441cd13fd3c0ad8386c0b423fab433ed3c1c4a7ea625459c9c9c9c501acf21c72a228d2c9aa1bfeb8e6c2902091224221d7142efa61d94771167c2c2d44564813b91e54e3bf69685331741d3ce344d99c640606a55230a6f58e1c01ca88a082211d8835dc653299d883739d35de20473e2c88a9823cc1145ad237eea629e391a45a12465232903b2c5e4a05f930cca9434bd2974f24c8b37b02756f12e8600b621349d6849ba74e956866552ed0172443c228ea8b5a83ab3a80214e6162e23d7352190c802248ee8e98fa82a49ca7044e168430b0a0ccf5dfa133d63782df0e68928240e914e21fe067b1e0e2d65d308c5a6516caa67ac62534dc4cd1ab6f4a8d8f482374c6ce957dfc081a2b4744c7731041702356f47e99914238cb18838a2938e4906ea23a236e2ba30db0306263d8b4e4416098b5a04a326228ee893f2c47f45de7044e67461052462846620e44464e19080f197eea8d14a11b28522a20242b650fa4515498a44f6dbe1c7acb13f608d9c34c07815b35e6d4a4759cfe5e188db3a0668228bbcf5fd5a30b41e187b3ebcc5b9b01eef12df60c57e60ec57c40d3bbbc6a7044e7082503e295d9625fd15718315bb5bb10c1059acdf70f9ad6a67168a6559704667a34b6499521c1059a2b67ecbfa4bb1b40cb491c4b05ea925ace0a874198583430e617b127838d4d24e54e11ee1ac2419873afbc91d932e0716fd2e4a22d226c283a670789052533834743a8a087c4f12912dd28e2489549208a56aa89dc8226ae1419f075d4dad8f8cb0916d45aeb18b0d0377759758493b5217334b3bd5ab39458779ee485d44967c08ed0ed3060a37595c21fab4912d5348c8daba235b54aec3437fdc55327c2af0a35c5dbf5676da84de611b7c43b6846e3c2eb608bd22a1d973a3278e6e5822e470c59c73f64c30de0b71ba43c0a673d05da8d23a84b47d48bcb8b6a75bb9eeac55cd0267b1c5f4c2c4029e3d130c23189b9367f2c4113ded60b5666559eb2344880fade026b76dcbfa0db80bf984e2e8068490082cfa34048597c5a6576c7a51a62084a2d3cf882cf9740d1bfe065d41c8041b3e135d44a15002753793b24549cc0ddf03db507fee18a0bad649c0adffae0ead5f1c8974b7a2279238a25d60988c2fb045025c330ba768fefe30f53cf26094933ee9cab9833bcfb7fdbdedb3eaf0aef43c1247147339fc15818315f3c8cecf92c8d2cd6e26d93449749139bf9d43e6e268876fd366d3eba03b4adae1f491c8428447b6483b3b3c7a87cbc727331c474a36e5818787878787670708af89634efdae127d3e25b2e4cff7802355e88cc3fb038d87600e7d7a190f073cbde8b1e4536a83f006bd077ad6551e651ef2cc59942d12fc36d452a5e31b5216de1fa628d7989762a7fc71c0d939bc7abd281c690707675eda99b38767be9390cc6f58c90a82e18de01790078e21f54031241e78060909fc4215a92454105e0be4a15eec9e1eea0854116a8b4d5f419eea565ff6600926d19007f2ec9a694284682d446bad355543080e748d1ad73beca0c139e7d44940ca0a2291651aa1b29402278ef2679eb06a5bdea377283ca8a8e8e923557468a47978d04faaec401fde1bd5989e4a8d1aa7355ea3468d77df2952a2c21b4957787307e69076a43300f96253a90b9b4e614e61d3b8447c027ae1b548359ef22e3ab169102463e041c3a6126c43ca6bbc937600709708808da330094cdc5977337643fd7714ce8e1c5ec1ab035ea6d2322f8e74145a0618709524b2ec70faaa47b6f0f093579f36f99a077a00645923cb9c38a24fc9d28a797548970106dc491ed97349cb484ae2887eda48153a370ae7e1989b9eaa821e4639e1a397fe0e590e09bdbbb197c01fa824c324d306663d29f7197f963a641ab873d032898cdcc12de3d2a5704480e167d4790a87ea8242125966782155e8512894099364285d88235b42149e7a063d8563a923e044960baf20aee3505550390fc70be23afcb42e12e5b765e4b75132127077144e677717a23fa8348cb7b5454d15d58c000000b314000028140a07c482e16840ca2259f60d14800f8ba04a6e4c99c8c22487619432c618630001000000080080d0d0300020920a5694c3a3df35811a3266c07df9a64927ad46db93ba48650db7d00b97d9251a065bc4d39f0b9bc78751861155ee7172885b89267b1aed20da221d12422fcbc1f7ebd2dfa891fe21342c1a06150d62fefc68d6442c0d35346cc626ada7c341854b0b4dec8323bc66e620764598da3092af118ac061ac31970929d1bd82dd0f86096064f6d521332b114b69afed33b330d2bacf489e9cfd4289bf2ead9bc58d29230bb9fef87fc094c7eaba5d585e46e97d14bb594f4e55d4821bbc270e0efbbdadeb9848343024aea0bbb051b290ae3a375a71edbe65f481810f5f8ba3ed019760b3635dced0110b439b0466e99f9bd638dae9b61c8cddd5629303feb992f63c32ee93461353b9a1f14f890f35e713bab36088302a27adc00c62169c82519a9fae4e169ef07f4e4c33ca4bc57b05a33092e60b524662783db3cbb12408589af2e8b5befdeae0a827f07f3fb4d351b1399f845b1965e31abc854ee4b6c1f9160d441cdb18e55563b90423d4b0f61e0e3fa0c55ec646340bea621571fb5e7791e17e6d970c2daeaac587b5f2378020e52ac14c26b800f7fc450682aada486d5bbbf30c4d48ab8c5a64bdbc947606a76a69307b8ee283dc81b49c42e2e60bf19b1125dcbc3c8816825452d1acb6705436d4c39361939690ea07e0054c939f9df0de4adbe7d7fbdc7ee05a2a858aa1a0a18a6100d0c8fbfd892c85cdbee36b7ba85455b181f96a2d1ff548040181268462a4fb560aec65e0c490217d1b35f8180dbac248d3f0d76bf403b8493ea5d5b8cb884c708a48d88a66f94eba0c84a989f69c05c175d5cad1afc1161f3ae06b838d4289b0a3dcdaf3c4294102834de374b035c93e324879c43e26e9455283d3f3933e54dcb0ca53abe43c5f19862b18bd0d1905b3ea8732c7afbb46fa5a42fcd1d58d8e672c11c9bbe99e9e57b397cc20a41935d33feb61346f86170513ea996cbbfe3a20ef1176c5a8555d98335c2b55e10cc797cfd5cedf0631be9dbca84c06b6745a3ba75bd0625851e428e3a25f0165ad43b44d50a3f138d9025d3a65de0b26ac10a49321a73da809d7a0cd91efe27468042d74a3561837e68ba878f5a8f5184e056484268d2404eacf80c181304f874c7ad9b84fc078d10cc951bf70abede43d7d94a5b3cb2bb1ca02d56e7a32aa4cb06ab5d50abe77dd890d5fc3b11b97e477a97eab0208c6f9e10d5c2d004d2e253394b83f4c27dc2f974c12929b8952ce3ee6aa95f68f5024666ae53e1f7189a5692945ec0986d04bca0709f0c734d1b2fedcaaa3c4a728abd956fff45d7e6961efddbe42051c0e9718c8fe0ce34fdb4165cae2954ad10276ce7fff9528d78b2a70838544b39e3bb665212ffb10cd222ee5cd81515eb98ab386fce9109fa41e36db731ce8e7ab14f5b045adb3ca673c214ad0990f154a1cc9c14fb69f9613ba828284dc5c070b185c610522c9e18ff67669518fbfdcac1bc789f3da9643707b8766c9786dd6b57fe161e5dea173293280aef45733101a54f79d1aa34aa97fa81aed9eda5cfbabebfd374a652d07a3407069d28ae3f8ffaaace3b3a8c1f88a03ef66dbb63604a56e0825e64b4a53e10340d149b84bfbdd6a63efec352e08d71c54740249e42c6b23c85fd934a18c500a659f3bc121e8e68400857c905dd7ce0eab0461306fa70ccf6085873296371291883ef97eb01a2cd49057720298b19e6a1dc60c6b8baadb108722d9e0582cda27c5b021ebfe8607b7865cc10b1f63a01990235243a55ff87c00968f92130a29caaf260cd6375f83a9e37f62b4a1e55d6aaf9efa0db30a0d1f1b45e3f6063e7a6a2b68b7016086a12d947c04a344a079242068089caf36a4bbe93b1effe9e9da94b5182e5938478c2b31529967e6f615003b9462cf9328edc8c6f472d2620ae52dc4eeae38902a196f2637d0d8cca94e265575bbf7e106dc9e7f4351ac20ba27d55b9afd0f0b37f1e690a1298cbab094793bb8e01a9b637c294fcc264add20f7832dcd518b0ab64a96dab9df31efa5c2f079530bd04667ae3002995c33fc55a5e2c62164367b7756652edf00789885998719ce3f3f9c8443a486a4dd9668531d9ec1e54d35044819cc66f61cf6759e0b23e41f038c115f864ab3142bf7c00c2ccfac8978b38793436908d9ab881415d0fdeef6bc409197dbde424729fda602015c69600a97f73d38e83aaf4a3772dd06513f129e441a515e0160e127bd6e5a42aefc783d2a4e7aa222fd492f93edcfb62d569957352ac25ca0cef54b8423e2393dfc809e0f4e64075bb19c697afbef065c88e7a31e133ffb533510126d18ccb353f98841e16efb25aa87bd74ff7f0280b7f5898336bdced43a3351bd25710310a4291c40972e6d50f445e419f77e687c0e9f10203b259804a77c0c1aa3a018e48de56311dd2c373100adc6516428f55fd012748b605f5c44cef2c0126845ff4163b9839c3a5b3be58a78d47b6c9270fab941cf8050fa99d5d8b23339f6fabdf576202f96b8671f4ca4368f71942d476e98fbfd04068f43d9ad235ebf97fb2120691e15a426875a8cc0af1424e5bd4232115a24c7078e9eac15559e2f35219a714c2ae44d72a4f5d7622ab41e9bd88c1fb1cd1d3f6e99cafe47abbfed2ab917230ec642828f329509b96bdd37a07e240285c35957143e71fc7bd68b5294f346c5f93306f224163c0ed05ab53a55bafcf7fbc700977762b7a3e3310b433c48afdfca237b741beb1f0c2a30b8e556a373c3e63101cbd1601cdeabf3306f341a0f9a162fa7808daf4c435836ddcbd8edf17e2277c167e315e819c11b7f9dff5ff7f625caa1ec3b98a8f55feb9979522b600b67ccbd1c9f3791d9c7eb49b3421c992473f48e01e1c7efdf813c8a96b04f0de2dbc7629cc66c9f5120df7a8bb0534370c173417dec3e02f2abbe3012dbbc6a3ed3aeccf154acef74fdb276f9e890f9ffa5911fa3c310de3c653f87670e90f6d36cb4ed4085e20b6d66819f7569e3eb621cdf0ad170a22ac946db667f2f48fc46727409150fbbc4c39f169bc5f1bf8c353be22c337f254bcaf8a5bfcc58982de5112f665d392edbc63e74839fad6404990053294d1ab1112c820c3d0d574272bf7a70109f13dd0b346ab80f5fc20dce968c31097104e12d37021156627ef862b959ef0c153643bfc2227cce898f970fb86184cf2d3f10ac99f8feb14db3cf7f0169e7ba65bd6f109f5b6908dcbef609ea01785345c912058a436d5afa6d6a6f3524de829b96a7f655b2ea494e3e5ade2dae4da0ec3ddacc2dcefe6b7e78bc2deec026afb4072651e3227b3058537359f93d4abda60f5901c8dc04d0bfdd42a845eb495c0203b8789eb762ad8c8ff30378d99742c6c70efaebcbe30260b73246dc7e0b4dfbba830023020af617a1524177f79109fc9c3fb342230dce8431eb402650ad9593f31d969c6402bf9e2ace952601a75b6e10b7b25f4d5b99ca6f32e42efda58971f793d6d808f291d01e670c458df55b595cd81774a820449d94ef1984ba427385076b6563d491b100604b4a7bd67ef725147e0753646646b58d588b9389ddc0a55f2a131bf3ec82f5201d3d2b016c3d1381765504d9e0000aab408036a3a50a504ba906f07e33da343f0819405f742f111f2b75f7085784e60011aeedad6762f5b6e8364264d7dc485a48332fda5774bac54155fe47f647b40a91a914d2e83b81cdce7aa404cad8c954dd4897424ee9d4953ab01c53086b67d4d1a836033024b062a01b4f451d89bfeee1fd8ab9bc82d2cac6fc93adfb29cc3a812448625707b1c12981ee272c4c598ee611636075b97509178a686e845d39c65a2bec1ea0a2a34aa3d56ae30e19e82613c2f90a20ff6c4d3b24f61bb153f82c97a4eaa94e2d846e0556aafcd7cbb364393bf82067d8a69f9ca20c4e9892f1d744a5cf882a8101ec6aff062c5d688e43dc38a0b67f56342380ff98441c5855a6f547985cf87b0e5519b96ec9ff36df807a222a852f2a8f0771f3cf55d7042862176cf9da2cfb860b3e461784855fb7cba045ecb35af2cbc764e6edb55a31d7fd56bb0c3d8eae05cbb2de18f1d3ff5716491aabb23ae7f6dc87c0491662003c3a60ec22e24902a2bd93c701a70a89595a9baccee05a0c9020a84a1f8b8a45bb9a8cb05a24bfc0f0c948fa9b01aa6e3f2de4fd2cc122ded37b2cc191dfd5fcfd74031451f27a2e03f4769d021e407880426729bfcc66ae39eb22b03d9d7d73590dc6dd508132957db78412c5c6ba0dc259ddc5f6e7b210927fb3e069240c6af3eed610de34944ba0d400af8842dba19414b755c52a7a57aad8b7e05148421b16f80f792f9cc7c8216aee864c1cc43ce5fa1e6acfddb8f418b579d86af4dc06131e90c74874b786d87ea29bb462beecd95dddf61226f8d66752bd7f73bbfb215b494676351afcccfbbda75dbd8262fdb09d16ccb89201cbe0126f0bb44c6e96287b00848cfac648fd5c21a2f2532a2f65373fd1ab44a62db6120f66e87f75e5c2406c364092536b652509a8140434b1d016fca18317ee34dbeb09798b510876e4a5ee8e87777d6e55735c5c1585a064408a71ace37bcdb5d13a03ca5c9a897818825ecec936bf85adca365c6b0c0577f60efb218dfb3b2eca5b6cab639cf815b63534443a31fb0a4cb21379d1a22d66f3876db500dcff96c9011408405fac559e477199e1bba9ed368ee13f4a421912a1025a91a83d78c78e1e01856f54513ee1fe56332b8741b6572929368a1d7631a9cc63357efb70edea66e3b7a8a362b73495e723e4c7196eb2039455c8d4c9a934dd13fd374d00a3ad298b5d9a3a1ebefeb7cf48b43714c8e430419c082ba32fe947cee5a17a86703496aa4cbe2e855bf17e3a652c7a7df7c09997becedc3d8a423c2bb889cd63e2fe0cd031053f673652d7d69c0343685f744bf4d07bd6dacdd11faa2b9196aa4f2fc4d2a1541bdcae5d81564b79fbc499aa2256517bf6b40062479f1647448872e00b4b6ac2e0592190df582baa70930d1bee0d6fc3c1027e6a0e25d8e695f9b4ef57dd3c3272a6b6483212a6d8fad039b6208b8b2e3eb2d7c5cacd54aab74221def02f481c49a03925ef402404317338052b24a032e998cf3771db1484c32b961d04776c8c6a07b9cd5f868fd15f204f64778fd2e7f4f98376cb2c2dad16e9b8b7a95119de18ee3bda617787da3ed27c0bd0d78e3a829c00c39fc4f2797f3fa24541bf659995bd9c39501e51aa9c3058e6dfdc3df33e5ffdda0c752ad09274a9a52f0cd8a9005fffbf4022e8b53d2846851c8712bee422101546c267bd3cc763a8ea66c8c14ef3bb93a8650b640b7220736ae9061f87c907b4c4498107102f68889c3844f55dce74f2b758ea60b0129a696ec522f6b2a079328507d5f7bbed03c9a0a5aa9f6875f5b7caf7fdadb0a1698e3fd866eb506388bae8ea2af4963bfe42aa0c35bcf0d1d5e958f0b9b5d95076ef2f4e730a622c06adb93027ea67a67d68a50f42b71451a5b285acc3a577505e9f2f98c97e44e4d5840574ae0d7069a68d92d4f9b16733995e30a8fd4580871b9af5ae166d3a53962ad5304c288e151194ae352682ee7293ad1a88cbe3ee5799cdb44e571a53a4bf4a47bce41656e15719258797f36d02efa6e3551936158291e625ffa0813f14f06aa11d5636e4ac150d0e92d22ad978aec4aad20185570e6a006faf20da9d807baf2f8a7dbbe465d4f03d6059f115fd0790c756cf04b421a2da7d9bad04a2e07dbed8800fb754a6a18ef38aeec82f4f4b8bfb61a7ce2b78abc8f8194800af27d72ea4012803fc6d9129e3113b8bc19b85dbb26835f34d0ab80702b60dee16df9dc40fce30e65733f417e1154489a7582a6428eb787ec85e81e82d42e970649991e3464750c675c3f09e37abd8cd743c42fdd0720187cc051523ca294bf993dc54a9af491717901607c6be1480ce904123766aa2d865aca3737d2ef23eb7ed81a8cd21e0decd3a4a071274ba84a1c248cdedc74cc909569cbf6df039008320fe907102ea671b889af2c5c85aa0a1010f9d96cf960c132234b7843065a0600a55185ea0b9e6debca01b996a361ec5e907f7fee2e080de0fcf2d8c94611a6434a2533932c6b9135e29b088ae541faeec55a3af0ddb3ebc7f87e77656b7048d11e15bdb97fcee02c1e6289fb8eaef470320ff3cff4c40611114309aa0d3b60dd6124a490765bef5ee8235cabca83fdab3d7b72e76061e6dd6cea0ebe037fe53e6e89d14c803ce4d131ce4356ff5fcd2cecb8d208f4f0e6b3512e09fa016382ca1da9f2221bf8f759d8f88600124c6209f0862eb3cfe93c0a911152c9bf41efa87246ba209c7a2e416ac41ac6edd493155c7f49da7595aeeefde903c63507824ac2c1a47452b70a24cac17d8fef0116c7b95b5470730301417364103327b8234aac8cd1443c71c03a9d16ef50aecee4998db2ae5181c05b11c71e360a1affaa0ed0f6c8b43c192bf047d7aecb81248bf5ff87508a06f8f5c542feda21a672881595860c68664ad24752b680812243f0b3c5130c8e655d294dc8e3ba8dd426fa61d6297fb506f7f17c30e5796d80b3ad2a9d1630b9e8954402abb23f5cd96ab12767f935301f5144c76d0afa90ff879c13347cf2acaba2a058dcb585ec22e0299dcd0184b1a3cf7e4221562a2494921bc726978f60c435d728c5e5371b23b447976f57b3bbc1aee474981fbe712c3917a82b724afd27a13ff47190a23514a9dd48cf86415093ba0f08551ced409505a11a3dc416a12e2232151eb67e5f01a70e94897f483d4a6a098e007c73830850fa428ccd87943134400340c9e480cab0029a0f981b8c86d75a41df4b95c536ed68596830a96ac9aaf85e785169e868bfdc5167155e5bb5a147c8071bfa17dc99b6ab02b0a1e3684d5b8ca11e14b44cb117b1a713ff8cd2373a1e6d53e64870081b612acc03eb32056ab28b5a26da4ed8985cb3af51c0b6f7951d482adff584b6296947c74838a1065c4696bf0efdad4f31b75fa0c51ed73ceefd5391dd9a9bdca06be520f12ae3015f5d427a43e84a8de6303100b381aa7cb72beea74523eef111d3f33c0c1a88b631c995e540f9ba6a1189ed0693b8359e7b65a42bb52c02023c97caf64ee96afb83992064987737aae553544e84376c5130df32a2803b70a92287dba1a5e4bfbdcf59685367c913aabdb7fee148080d83ff5880079d013c8cec2e3f3a831de10883e160b2261627370789dc8b657aa43f1e10dcc4d4374c0081c8a4225e3e849265ab4c824ff8ab41080e2b8bf2e32940aaf411daf4d5b30343dc048e92e93cc48dc123cdb455220be644a1aa6f541d9829aad75a1d6e6cc41171a2fa209a3be2814069d05cbedde23ba19ef669761b6bc061af86d26f75a3b273dddf7365a908cda5b0ba97bdc2c612d47d8631c54875593ae5cca13b08f80619280fd410c818d09bd9b0bb8b24052c65c1f6429073852bde5d4d7cfc971906f2ef03b4160742a9a40ce71a1387812d44ccb4b58121a9d6541400e85c07c02c03742e3c7738572c1abcd5108a3c9dc7382339ef5ea6962941ca1e708cca6bb1a08162639ac5180ca4878fc4c7af7461bb05ea87ca17a36f06927fab9980672f2a73056566040616fa082ebcf8522e76cb9261c4cf5df89a4fa59bbc3b1082347ffd55c80fea1e1223f8d861251cad9450efc63d3254bd8234769cf7aa650a558f2ef8b6ab726aa5a66cb5d33756c1192048f305be0d19789a8806cc7ae39ca4a15a1036ad3a13412a5923cd73df0963cb89e9cedfc849041a838fc1199738db0e9323224a05de1d45fe4c230d30a0a7ec764e99551cffb24c62609ca8e778e926b518e53a78282fc5104bdde88f84ab28705705eb2600c9185a1fc2d8431cab96859e686c62476297c3f8b09ae58a0dcdb5362b018903ad26200ae76a685c49c2e281a7c085c6cedb2fab92f20b36e69388ee3adcffe32258db6bf1155a60024b7d9fb473937100fe3e1cebcb85ce86580e24cc259703fc9bac7b13e471af70344f8c35ccc02f410dfacf8c0c7e05154a35182998f693b48f2302564d67be83e045e0e3575e2970b3b03ab16e5d80c9900e2d18207f4e5a3b0066222e0c18c8c60e6f05d6d089e11cc800d0fbecf378d096267c348f7c4604e877700dd211614a70c351207be7e75e86b8c9e1ca604d7e1388d8190cdcf1f965b0dd9efea6516aa1c91bae347e8861126ece4cc5fbba1ccb3452fea09917ef829b809dc2536e04b05e74c3ba901ca2f83a420fa2e194a62068a008587d182e0d9649ce0462c3509365f4a6e98e32b4caa7dc13bc6836e2b707b4eb869ff698bec12e35211820f971f80bf42b9878384824df4c5b324fbf4edb48f52f26bc04a41b74c0a3d2c716edd08a821d40613560aa5fc2cdce3ccc4fae560c416ea9d95d080e83f326def8c9d5821a729f06c981320dc1dc6fc4c07a0c90572f3ac2c6cc1fbc2a9487eb91b8414b6fc473a816aa3c30c8753c87a23227521e4cdbe9df98e2366d67d72684712bf928cec970e89f99719e66d52426813df655a9625d935ca644abf974e690958ce834b2d0ff9c209d4545c91fcf31496bfb1bb89d0d3ef5ec81e5a148a9d94d92ca2d83eda6532fb33786b6bc838657884ab7a7d3bbc2b7fef6214707392bd5950ea2000d392bad4d170f7fdf12f0e00feb95a854d1e0bd822f1b08c62eaccaf59c785508b75db03858db4c34c2a39e83db654cd478c3e5cabb0e7c73d4a9a8208a04ac0d0d6dc7e6f871810f1a445f16e02e763d22b7a1d7e4142f7c362ee60e183820efe01fd0a6243a7d310ee819dc1d244b3cb79712e866692503466623e0c9820d1ba31d759be0010d4bc8e732b905af195a8706ece40dabfc5e85f2347596a03cc0d1be1a092373a2e5801e90c93371abdec861e3df4f3ae35c5e56ec3b46aa6882c9360076742129155bb19b584711951efda47b0281d58945e7c6b3f74b9b5483b2e0ec339375996190c6cfdb9d56dcaba0f5409649521278fcec896f154d45bebf5df3d8769c79452f200316a5f8c0b0cfc0046eec4c15f5bb90945e6a0e733ea49c6a7d94224e703a1a73e4f68526b158cafdc3ea21457a70b3c449cad3df8a07b2ff998179522ce6a6e0e83c1622a40c541f60f403e88e4d658f40581797a6116999a37d6c57b5783443b7f4c9f1b4ba1c4d85424e30cc7f4d88b6361efbcb9413f83d6ecee174549f0d1ddf95e7e48dcfe8449dcb9f8c3b07d50230355ff9dfe4c5d66e9a03bb669df19c7ce3cf9b3b87cbd33c655ba67b2e2f2929421a8afc8387d8f1bb4da114e4bb21b94699b6363c800e49a3d084608a84a227c21c891fd21c067420ab908605ead1c7e5514111d31c6802b336ff7353dabd52e0de5163ddd60ec0dd511befb7f494d3894456741e43ba55db5eefde71493dc177a00aec08cad8d20385cb3a1d49c19715614bd6ba1f9abb5d880ad04996bf20226d2c25b944f16642ad756a01d54bef4ce8259e532dedd0fab772911bcd0fa6191344beaa8e2c5a811b87025d96a18c9332d32c290c12fb832b6298ffd0b1b8b9968774dc3539ae9ca66cd36396e558d71a86f56e369a65fc6dc624fc6629a56d5dc1f286345b98cd033a7ea5b326c1b5d1a95c69bb51bdd1c7b4efffcca3ec7bc741ac9f91f65d3ec8fe001904ac0060e1158d08495bec70cdb6c11dd126673404ed2e752a4998034100452c4a662a46f5424305c1e7a5069f8d061fe6b962941dc3ee0901c6ae60233dc2b4434236f9426a5b5e21164effc0484379ae9324afa2eeec38f4201a53fbf50922b16c686de1ab2b2e2f25895b5992e605d8a299803b25b7d1555bfe98223fbe47532a212c3d9b7269e98261eec614114472cfdda39bf23eb67200f03572fce11534e2ca68ba9d2e1da1a59470c03daee802d630988d10e36d280031a3cd69f3ae1ff12b9675da2d3d2b1359dad3c9d9f30355aa870d43b2f3ecaf70c32fb1dd480cc7f2c974b3131d9fb71069ec75a47424e90e92c662b5503c8ca4e109ca7afb77115a81ee683c89249122385186e8345f2bb6825c0f515ca77d5c8ff2489294ce1f5bc8091039303a14c5bc4f067203a180464acf2be2919fb4003f36845d2c855ab605843ac77492ed6cd240cca26828f50b8ae7b9e9c2387498bd01499d12172acf5567271dd639937d408ceb3f6e9fd858a519479f73788e71c8001e0482b32afc397691001db4046bbdf7b3241b3dbfb4a9d3dfdb63079f2993caa9e188f593399e76d3f1b382b5a3b9b79265e2b8606725634e7ca18d89c4baead8c7aa769bd76681b06fa5bd823a6bd6843d8dd3af49e3c7ed537141e5b7006d10e066d26e562095b3116e6a0d36f4b147888ce13cfd66f433ed45a1ff83851462795700fd707adbb9b99b802579ec7d55f02279781411ddd188c91d36a81146f4574da6346dca06a15aa4334358c19096a01a8b6a994948b03289a405787c3e79f230e6abe716e79de25f6e834c3bf427e4d8d1763399364fd80092d8c7ff2d1879461c58ae08086795e24030b01c34d4c8ce2f18b4f28b6bdb8e2ebc30018309105bf2160f4e318f9f40928b7f9d4320f4ec471988eb53bf17ef6b254b523d94fcc12124ed3602b7720e99901d5c9941a86b57a8169b017d50c1fc3be03e5748aa32cb1639f35b8ce6e2442885b67973198172bc3aef85d11531a85ae2ca6deb7975e6d8de1fdc2651ac3a45c3d2a2e4246213dd61abd343f015d05fe8fecc4f7a592e69a041abf698bd98462268a79a008ade3918495cc8fd6cbcca49bd7ea10afc81d9b1e016e4321f4601ee422106e2405c3d6ea6dc18eb944df77707c830250d9c0e871630184763070907ebd624ba0518720764f6f999828b5c0c83b513e31d16a4103258a82c74ee0e15e3d8182bd1e2ecb593d3097d9d52d0c5ce2e6bfaaa061c17455784470922fd9c1df3aa8e37e98e671603064dcfb269a164d5e78bf6be97cb73339145ae6fa17892e5aa96b85c8758dd42a23cd199b11975277b5730a5cfa4f7e9b103f3bac22735578207a88024f60910576fed52f5ec394b5919c917fe7fa245538e926d2d6d4342195c0dc867a08ad0497d91fd4a0017fc30e7b992e282e25620fc861730edae9104610df6eeffb3d120895a1f755d0e350b09f74d79e9c8ae2e78b0cfc3961a9ef25c62b214136a656f3c9b058eecefda873b522399d750071514a5c4da1e4933f91b2ee14e473d0886db2e37328d094329dbf8fd606d3d6938a827cff5cd232e1d6d148048267ba7090e49c37832c631067829d10cb9c9e3087a9e281e82c533fb0c39c9f8865eb427b6301054cb511e688450cdf622b6d9a90d9257f8202235f68556f30ca98e5b71fab4870b68b9069ca3c3a446a9e67b240122cacccca92403931952b691c4592ecd23314a404627e424e52cb7ced7eaa636d3fa7f63aafc7bf65bf062d463fa22427a1011389371123e4abdaf4f09d698eb90e6b262ccd75d2f0ec680d502e7099b6a3f12aaa4389cf75aac3c961a1e7432374b4d84a6fc4085048ee2c55023856c3bd3793e9abd812d7e47595d66620aea3dd0c6e2195b0756e411ed1d1e2e8f456b44b7be31b847ea6f24d50d551238ac722ff574cd08019133c8e7c4aab3904e23004fec37bbfaafba289e23ef67663a0d1de1028739138217910c21f99f804f607cf8a4fedf3f09a01866ce7370b9def3d5ea618762f7084a12406429162590c56e7d1aec90484e518c2bbb53c61e64a472ddae02ed622c99468e80f9e666a310cc6cd9b28386537f317f933b8701c2ebdf7601624b4f6df79c4e06b1414615faca754659cf97223e0327d6191d48f486a5ad2cc24f5c6e0f89cdd1fc00b288be987443c932c745e5c245af448d6a36899d0cd60cf03f3107f7bceed4f160e3b8db1d0b4e15c1940f1058146c4611928e56ac3f01eec005feaa953393ae348918ea3cbe46d8c6a24f291d1c7aa90c5df32a3dbe9c4787458eb0620a411fcd9235524ba7d4f6682fad06e48a540c2e7bdff635976cca3cf90de85f6d877d5eabf94a63657b6a615e2f455835eb78b5766b22baa85e305243b50f654b70bae68a068dfbb2421fc96cc306cf72eaa2362122d3e125db542d977089c21c66ea35be3848e875fc36b10e3164f523854f38fe89dbf8232b291712e66fa44d9e27916db1611f822d1b3d5207a4fe2588ac1b2f187ee1da14f8c2f7ee106e40edb62600f70fe90a6083c1450947162e0a44f6296b9e84c0a03238be42b09e33db996cd02d6de896d16c9959c27c71192f748c90a8ff9f08961ee2b119e9e663c54434d0aeb170972e4edfced661fd3a27096b968b246b694c8c4e847df94043010df28037293012a1890dfea734d14179185899697d07c164f3df509827ec6714e4996c25b1da418294704e4b11353b2e2a328a614157c3642b4939b837ee0b6f64a5cfa1498a542222a3c3c9c4a5d9946c114660fe31959d5a21d1f812baeefa9ef20f015817345eac7d9b82077436424d7952d2b90bc031b2f6be67ad26940616ce68ea70b4bcd48aed597420d76514aae96286a2e0ffe9f0bca8bdf2d99f8a431f8706930c219f5b34c1a326be9609a38a4e736ee41923e1f3202eee17fc472e8729e234140f24f7751fa43ccd92ffca960e15024188d0390e34b5522f124586b3e0ed1b6648292d55d3e63be05cc38650a0de6ee462e16e04f499fce04f63439f1d04d48a9f36856d418325a1fa22bd4fd496394677988c675f4154799c9a2850f2e5288995106b24f649b80ae9b10b40c67e4ec2263ad35374c912a154325717c41a7820796b38299c1e43a02121f48acf3326f99031190b65eeb623b8bdfaadcaac8ec0ad974fc7189ae49a07b25831ab2f8bb3cb43145fc72badbf77fac217d4d55cc12e807d8e6d4af0fee45518489d594ec22bb76d7a321b897cd43a65b223c5f9436abeeda099b90d81555a1c42662b7f2b632b9d5587b7947203932caceab8c7a434e7b29276dfe55cfa17fb2e0f744983880454b85ab5c32bd14683f7a496c4c5bfbaa2d803c533d1a6b695fb367955fed964c01c9af8772b1b56444f7ddac201b348e8a30cac8f0cd06c92b258e52b47dd7e5a251f636c21af25f0f0cce80661b32bfcd020b5b3610438ad9b4f457905bfc13a7880832a07130ebb23e6cde5aeec5cd345da94b18be456ea5a128ea9b38609062dda05ebe2df9d25fdca442bb980a2219528ffc7919ec755813927ba61b9816e266ce4a85bb71e6675acd2899a5d2d3153107faa96fd7f760cc7617db80ce6c625e28ec080af0270139c2e0768c99ea484438f3525c8cf9c3911c64bfc235756b989dd1e4db5fdecf2be2c229f94591f0b7c6bc7408cd6c6e8f8117c9a0180e4325c1e0ba08dbb3a9958e628d3078b46da148a857731b2be7b06014007d79b7b702201aa277aa8d37c8f6aec9252f9f6667da52f8d2d813383f13604963a8b13e10f34def24fb2b7dbb612214f6fc96d12ec8c2654c0932277e20e39b7b7d441d2d421f6911c164cb4821c949fdd328cb9968300ac342d9074953fe61f119c4df7db8092247da7e42510fa258b4ad6be26d2f8e3eaea7fe1e6d195b9f16bf6d2429573fb874e85fa242a6bd0e8e064d35c16ad5739a91a4ccdfc3366619a8df80357d36b45cc6fe7251362cab354ab5b9b3278165dd9938f60648114b7ab0ac142bb01a43b2375f25b77f4993e951acdeefe7a2963faa1509534c3e2793d4865821f52314049c23134e554b2ae4589b3f75c075d3259eb9d3ced8baf811766e40fe5984ac1306da55190a99b3a0adaf2c25895ac5f897b4d859211e4693dedb3d9524981cc0cba6e96d8f179ddf1e9f57721a585eb65080a55969d1a22a3c0d61e0e46843ccf8b20249d341c67b8b596bbd0bfce8fd6eb921ae1f46e0128e905eac4beb8fcd675395bdc4d01522af95f075ac7e2b8e85502d1138c766f4fb5008f8db51b4e451520bd0f3f36fba7b0ef43d4a73d98d6d7c30b9819cbcbc9584bb574beea53eb9eb8b9980c65b8629abab9dd373c1b16299df106ff42d681a8534fa04de806d06f6ce694491b98f1e8bbc15c26b6c7022188e058e1897ed659c7e54392f6d5329031ddfabe912954645dc477932714acf8be2ded944bfe7a03f084214e2982460a6c9dd07eb7925a1c5d40e2b4ddc98acca63f8e0ab14cb1823ec56e51b811fafe9beb94eb8a15f75d4caa2080b8263754e21281ba91ee952c6ac7996828a70208d0c742dda9142e9c7120f61d5e2714e4ed5c862787217a571ad8631c24b29a8010405e82d587d3b0bf127065a8c39bbcd068a14f702b5adc7e2a767417a692841400bacc8bf520c95d3bbd44808c634fcced027a06838d7808088a50a9cd68f1a16b1a1a2bcfd6ce3c1dc4d179e4a3e27f6004d0b649a35325d2a5f4e95d7d2f6f67ad4b4606f8940a8b8e41d33789959e53fc3341ad36115a25ab943edda2beffcf4c13f83055069acc8b7afae750f3289b986f8436f3fa61b1cff73731cecdc8465d7f789f7622e10bc99b08f5a990ba8a4b870283db66c357f061a8dc6315c1c9b211739ed482a9fa15e4407938cca5b17a43f439af359aca317af6837f359a64f45637dbcf3bad9c1ca189c650783aa0693e7345368906407fb57bac86496423e64017e777ff301a26d28e4eca5f0e27831a7d0cf7c015f6e5612f87d7b329961c46aa2c70d1a55e46e05163c416e0db3947fccae8052c9a272f8435a10d3433318f34f4c2e3f061a5a858033f36bb60f622f064c2c12e9dabc6e050cbb1444652560ebbc84d32434200ef7ab8a5706ca6d6aa52ef2c462a90ec6336a5477cca9d64a0d6bc3d954cff06a0586a3b09806798085ce567af0351e58974174028b66c73ae727f5148998d014c7879dc806647faf5d159f45ccb88a54d435ae16834cbf5de97cb17fa72d85b0b34f8fd7b2e1c08ecc6c8b7a7cd176de4e76095ea9842b9240c7411811cbe824b0c5d205227fd69acd8834d053315b706b2cb0debc12457481cb75cb25300b0a1a311f50624eddaad7f2b8733160f97385e12bfc9a900e13965c675005c05698fcfcff0d1a97f485e66a3a7d19f810f11576d130f8b6b5a2094a70830e622fbc43b46ae9fdc672b8e95144ebb374c4263cf5251eccfc3a92c1b4bd21db2267bca6efb68dc212386029e7f7cb8ba110f5b385126010a32d0b22a9e15a3d727829cfe04bfdadb6de92209904017d969d4f96c07b900942134093f69a3147102ee824688baf64032d5f45ace92890cb8e7e40a022db35952647ae17ce88b36b71110613ad180951dd3b79c7c9fb84b561c2f22cd03436380897ff15d7e6d9dd4a9ceea60d6ba5e2e09b6e66b3acf93371ca830929240a8f772c9641c85235a377a51b3d6028d077d559a449e403940ed9795a54d8d38e9dd2422b1130c920229c3e731874335ba0b51d152aa6401d7107d81e39c9c88cefa40df024fe30fc2d89595fdce6ea1af1b3126a33c97168fc220497eb479b829dfdd0f2bb6bc9690be1d14683ce95cbc115b3a2a09d49dc4398eadc5f3caec085cd1958814a4bf4e9ace923ee9ceb21bcfbd1428fa33b44bdc5ef225bb909c9b11c0cffd2fcbddcac0c7a5eabfef6386a8a325c5eabdcb6046a25e5784d735148d91a0ffb18e030acab7aaa806d03e9109856647f9540a9af6a878dacc2f68789a347e3da5b892add4b802c2ddc4fc0ebd7a0e22c1a8e7587dcfa35b99f5d8165b44c26ed984f60d014fea2a5d9521ee29c81f699ff66f4c1e2e939e0728b142abd2a82aea114abd43cbcd57346cb458392d8acb208c010a8d31c74fdd1c1fa3ffe153b43d22c43334f2347f7f3e49c34ac3b5566333fd779463b16f7eca5975726895900b194256afc825ad61f9ea69e8387ec666b1ae3a6735069f3a9ccc110742a38c24962be7ac40b4321620d1890b248084ea264ce60882d49924fb2bfb99f4424cdfb2fcc46298985f5c77928983b1f53f74c5e6f70650b41f7928f41854bd5102ba8639a033f7530636862025e9a4147a16502a814078d40830150e9063196160660a41b741c0d66804935d838341a00916270636933011a947c51774560d62d39483d1ea86eabb744c6ab2132c088206af153f2fe3a4130dc71e95354478e745b0b02a8eaae439b11d16b2f146f3aae4316f208f12b61b139baa8972016e5c91604408c82ac7b726bd19e9675398b86d39c20752151c48cf2f7ae61dba23bf1885a5deab8e2cd40c370a473d59c60e39ae6c4f612cb3f9abb082bd91f3d9446fd59cec76e43e5fb30e7806616227838bf33fafd38986314d469184b6ac06bd46ced486f2ee9a82ea3bb1095ae6f9a46030f9986563ce3da45ea533a2b5106cb5090c85e0d6d84252a6eefe0bc1a15b492dc37ad07145a51df64597769806b84e54131fb1d4560791118201072e6dad4db0b0611cdccef7455122d1c899868e8b032278d995c982f0357c12a94c926d030fb82bfb743836011c1b756af696a9b4f6be5310b025140a09946176a18a4f803d6e25c348973e33813924c9881349dcec523094304ad34abd2f7a2d92180b6dc219c59b1232518b4c6626d651272eeec13f4c54a99589fb92826ff438a596d70140d8061f6223b34cdcaf72ed66f65a5b52247801e6817d029ff64aea0361edbd9589e307c59f1b2e541d661b0e0819421a334b30686001fd32b30ec89dd2d9c6c42b3e22d4bbf8cef0f84055e2738b13bdad6d389155bf316b9f80a4eb06a48661b0a469fd6e292661d4516c9ef6cc988700c0f9054f17cd6f1ac39c09a4b82c9106c329c52feaead4d80000a21a303a62602b5097edfb2f24ea2bf4ddb9cad8f48913ee0078d2eb28a13ea7bc7d1cf940c9d8728bf92fd9b6479779abb1f5a89e875fb2c7ed2af699cf265c8d41822b341780c27e83710192ce1a982e1d23ba47fc84bf3509471bb929ccab794ebd530448310f3933c0a77f0188d019baed0638a9876b324978c34d426b0234f3050febe941c163493863c759387221bc76d94a376404ac9240d0a18babbcf072fc10e76a7ad0082237f0abf5284196e7058061aff7c0f7b632c786bdabe68e6652b1017b62465e9c4f4e18870b63275dd902243929c65b7b7c738cd580b872d002cdc486903e2780ad865daedf76ebf621d45c3738fb643b52a2d995d45665568d7b0a21af2a83049613da86a254c44f15abad62ca174e41847d143ee797641a03ec4f85f1ac79d6d9bbd8cc0bed6866ae30279609ef0bbd2216651177fcbffb6f136e6037ac49c402800960a1a46d89c99b349e7a6582ab39003395a5f09d4023a99dc4426d0373ab825a1df78b19be206358a20ec18176c2816416c82865e6e395654ce88f15f3a1d6798d1e299890ca1bb901e0fb1c7f7118d05b1e5ffb55d380ad1fc87edd00eed728b5704ed0ba23aab1b501bab02ec3a71bf92ee50018f2dac78e8ca7fa003526924d175ab947af6ecca4dc5d2fd2af587e2b6f3afcb85543c6d9ebfd2413b043605d4406cef7bb92534bd3e2496394aad1b69356f36e6f6df83c367d1a88b213257ff8b06a70e3c7104a9b911980b0acbdf6c32d10174d663d77a97c70e70bb9a79d99f5be2c59a502b57944a4da8c4b10396aefd3ffa5b9055ecbf1a94f30a3ddb0ec1bfbe0202f1779d1e0213d2c31d727e43343beaaf0981fd5404449f7bb3ac3ced9250910cf0d5418f4f7e83772e4740d4b61a5965c85546571d01bae97201ca1c1e8b244e0936bfe374369f18abccdae0fc25a061789556963b852f5cad31dfc2072a572dcb8100e4bfb0833f73aa8ce9456282110764899be5a6c18302f0e931bbb4ea274f9adcc5637f7fc259e80d63375f5fee307e6705d7e45288c1b1643648391b4862fe03f165afd6489d013521869c797745ad75aea64e1e9859098c8e7fc46bf83453d21e200732004a5d937865bc183f80c3aa6aa061fe7138f66e3794629a0171c765a63ddae13980afb746e5c9d8d2df47f5cd0734fc045aafe1679d53f7a992024127bcafd1ddccd112c0bea3d7e03ef50ea71f6025a0a4b594dd83e405211cdffa97bd134e407253aa66df9490d76b2e844c04c45d7dc4b7c95d70532f50f432c4b7c6ec0047f708c863f4c538c73c47a46716afac09d5814b3c3726dfce788cfcc62ed09b01a29b8a620f2b338db21c01a207d6ebbd10b03472426ccfd9aa3983b1998078cae17bcd38386cd291206a637bfb9ffeacffde949464c91df15b6ea21ecb7d99e7fe47f0274374efe092dda2870727093d3fd6de405ad1c367f555b125a387ab72d7b7c441d54c595c4ab8c0057664713db2fbfaa8bbd18cd3e686bce993a66bb931b89e9e4edeae687d557f265a76964d1a65576508951bfcbc453b43287308f5db17580336d1c2bffb2bea1f8dd930e11c31b2c472fc3afde0e5a691e338be346ace794b344663cfe58b029bf6e5f929fbea221dd50a8362885d120fafaaa0b3a595ef5d9e454509564ef707a899bae4ad63e23d98c7d702c4385afd890193f67386f6a2c16d293ad0d93bfae6eac401afcc2eeea2144fe67a0aee3ca8e4d6c5d99f02e067a60e291bc64059e5f92ade00ebb86d319215400fd6812010684da1607e4562649306953b8036f210a8006e1019bad049d6c8e32cea469b3ba33bd9b39030c8ca9aff1e9b36763eedfdc3029afcbf2a1690c73b7bf492c3143377997165426aa44da207f1f2eb54ac21e8c37c020a1eaf515b9e6fd2fdee74506089366aae7d32335afada6a29c6c259d2bb73aaed2397fc19acfef998f20a5d361052baf363b7a67b466f43982bc134d1d795753fb6244fcfb43991500d84f68104fe77d99ed11bff8f7762674147e7c078b51a81580d5de685133ca4ae90c6a0e2658cadae2d3d4363e5e384696c2f4853fa0bc0786a6d2f62bdf45972a629025d731184ff32014c4e8df21dc5565999c9c472fb26fd637a12b9ddf05c627c8209117bf861b62ed67ae1ddcb29709d1042f529cae024c8ff1dfa56750449f7e173990fe838b3d3defa80c4fba2a85110e0975047efb1be6869eb459e8be8b49d215ff4d88a5b69eaef87f396ea45d7ee44f89a171d4ff8360bfb481d0e77d149cf9d319c1eb65754c78b0eadede220683a6cf8db1c256806ada5bceffe34f446ff0c8a2ad989765d53a83bd2890eaffbe411b49bd602534d363c4b8ea4052ed80ec448ddeef519900018efa043453f0dbacacb6fdff10bd373ffc0f47e16c7dfd61de1769c87736d386671e294db3fb44c51a1b0205285101454a119215a1f7a4267f496086e590fd23f718dc89b25cdd5634d6cea43615e4212de4f02d2fa01ab29b13ea2d54e00e7d9aae1ebb9bd2098062ace70ede86d3176b8ce78464123d2b6b6d233805e5a8bf6a58f8c84d86dabf3c7ecb782eb0e580c0a8187817580e455428b95926d6d250a92b6d5d7c64b5a46da5f892a7d82de41c15399c7a5392e7059214ae9c26fabc2c55ea6b290301b3224b7b6faa5c27b374bb24878eb8755dfe656bdb4fee324e70ca2544f89cd59116f26501cc2b994ca19c9815efb28cc5b8cac36913ffc62d05ede34e44556ec9697367d5a6662ccabd1a8a9c07af1dfaf272cb26a22f4730c8143c7accaf693cbba07e594d2adaf4f0a0f1dd170a21090d0509e601e2c767988fe5102a14a1fcc897f2ff4a8fb63b96cf6e8e6d7a09fa86f044f2820cfeef57876317b0d67da909bff7e80389f3fce385d2e0f2a2a25397465710278685f1d9c438e70940f9430b4e386be4ecd6f06a24cb49b7450d409c2e287a8ca90c9d8ad8aa23d29e0c8642671e2e2340b57df6028d25118863927d08fdcc1cc0ad07afaaf1a9ccac118ea99832ffae9abadd17676a7f2f0ec91d832dfc21caf2f4f94157cf2d07991d9c9766268c96d26fe249c2bb7df044d7443bed73c3f7a1c1766ab562ac921889980106f7e89ff4b55e2bc4937da4f621f2b0ad4e6033d7b47a280e6ecb1b5c46a2c013df9d7aeef11c07efe437cde5310d3a792d467e87b865ed093069b1ab8506d95e7a1fa0d24b74dd1b17ef8d243168857ad5cc6cb559fa44239e6fa097cd4edc3e20e3dbad52957d8faa89165f2b35504cbeb37f73f215d76c274858f234ef4f130bb8aecaa6121ab807ee270df145e5f008646eb8fd605cb399ba8a453d08a0ccbb4bce83f692a769f081c3e48927bcb76cf598ebca80892cc69c9743150b7925877ce1c6c76d8ae28c642d91772c21da09b4ea6f70c85353096f3e4597295158fc2b691d871690552b3a89068e366cde9e089019527710385943b2b9ee01cfe114741f2814dac82c91726e10a262f18ca28407e6009af207b81a53c05e90393710ba2070cc229805e3084154b40bc8a9279f306dcb5c6d4094fd7fc64083b18070656c0af692778125976667548f38c3caabadbdfd077c31eb512e4a67f8ad765744dde1907f185e8b6bfc7058a26509d243c4128726931291ce14355c436e8010b585c683ebb572414d89819247d1b22896e8904960312f1a05f30c1447eef358cc66f78f04657ad1e8250cb866cc14b933a2499b938fcb325a42137c699780e0ddd9afb86b20e82b79f07b823fafeac01674b03001ba30434ed8e7f18555f0835413b6b63c74374e602aaa102de5895ef832936c508aaafa069cdefd819c983e13532f371d6aa145c87e34ab9eb37e90712b931fe268c3cf129a58eade43f3b323e77def45e885314c937b9fef9d6c72ee3156b0ee833d13f52a434d3f8c03f94562dd9cbf59361b4f318cad3a91bd92be336878e55a906202596371b08c17b8462d2c7e553f5c56e6c556531bf079a20001268ab77ea5aae020cbdfdc2100c3f39faae4d6df8cffd18382dfb24caa59a288b370785fb54107e5405b0d5982bab7ad7e0592900835c23b59e960e2f4b54a6db9a01483cff57d0f47b92eeb6458b7100d00196e20021ce7f45a159777d4cf021280562d2b24356d913c7252a165cefd3a81192c5fb3f57e3e72d39cee7309bdf13e64f4e5622eb3859b850b0838e63da483f481a68f3c85ea3205f5c67fc42f0eef0e1933b7810c9f0e20058a566a5afa2dd7356f7b7b0eb9b8f7a17cbe04cd821749c76b0e8647f55aa370cebfcc64d38803c19f9055d36dfdce46e1cb4958bfc2bce9b81ab9ba045776dbc4101385dbdd99eaa6800cf14b021e42e71dc49d20da3a4c5f49c569efd6cf0d5823e236efcbae768fd0129c8b422e72d30cbbd84855eac84280dcfcf90577ebd6100b25600bd0323b113fabdaf382203f561592ad71d01da2bb08c8681085de230b456709a721a0f0189dc004952932fe86e9dbafeeb55f6ed9b1981f1fd63bff16fde0e689dbe24f241f0e1a20839de1d583daa8c56f26299c6cc1f7e981a02a61e89df640c507685acf14a179abc0fbc7df4453f00cfc62d9b684fa0e1338a320af9e305562c112d6a0b3f3e49e0a04294e8ea1fa1b91cb05b9c9cb323c43c380555854ffa7f6e683037aed8968e41a3640494ddff34cc9f38a1511a3d1a6cbae863c3b1f43789dffd6fe45f5480b71bfa25c9f76cfe02932fcdea38a0d167886583d9ba3c87edbea42c2c25e0e0492d8be527e4c475f5ae6445bc66eb7fc42f03d8ff5b468560050bc62da4abe5eda5227686c07d65ce818d756407b72fb898f2f0f90e73f1bcc04ba494b9b085fb4b24f082ea656b545194e4e8c0162a07e2d5f5edd978e84d579c98f038f1f809f148d101fb808beb361318c6fd89b61861afe44354daab991907bf41199799fff9024ef5c053b9b3140641e13d1b94c731e8e5811c792c52adcf0c8e761abb1c2fffd78267c1e31742eb99c644d3d2c514664029834cc8442632939530b2990632c8ccb2b8f8c334106a8d36d8e560237f506481b05e9aa49197fc7681028fb8f813c5368a94de4ea0fef29c68fc1552d360b169a6fe108b0cebb19275648fe2cf398bf7eac10b5035804235e6ef72e3afef9687308c838b89a2c40e099830ded4b968df01b4a7fc72f774323549147861720e9b1ef40b7f4aaa9c939c94fdd96d4d2a208009193f840b953032f5dd46e93b9f10d6bc48c66253a65152d92c93c14338c5787a2c699e5805fe020e0cfb9a3f8800c723492adb9cf455af7461d489d5d4ec57562595ed1066e4ad90db773ff97485c56bb95eae0ebecc831a2cd7e976f189470aa2c821c3e8f4001dda46bd6a47c4689f2220e71e4f230ff0f8e48b86906bcf4e0737a14dbec02b8b0113921cb20fec2203a535ca522e9997ec80fa50ecb53f41c2b4c03941723ef172f3e7793ea3c7ccd9c2a536f6b9d492eb084280e4967b76ef521126f1042f9ff6e8f8e6f1383904cc0b7c8adddb89bddc5de71f7ba006afaf8c2e3e9f1dc7749115a215aa0c79016f47e76387a8c032245f171b2d8274dc699d28ca4cf3a420d689f5e472cbd1a79eb275630e8d414194cc17bd1e73962a5f6996dc32851b4341923bfd7ba2ae8559715aeeecad94e7967b6a25ff6dcbcdb09be4ecd2114c68614bda6ac96fe5a82d644fbe8acbf50cae16744268482d122028503598fd18c6ea7ccf6eff6006485cd816080bf41efcee097a33672e5caffc874496f37436c91f59ddefa1d1d7e4bfe2852069c5d1b8040ee6c6c0c8056eda7162e0c1b77a001e57a54e1533128fa85199cc6ff6a906fc802400d15efcf872df2676e769547f805e50006bdbeb0d98512a2585abc67b56971229bfd3218e4cff9bee3e0df859083b8c5929b695dc4638371855ffe90b3c18685c772335fa062bcf916fdef6541a8d56b90c20184282be13df15a3ecedb1c62560b8945723bb95e7c1c3baa73a51a64b60364778a9cfd72a84dcb45aec05c68806eae7aac47b2e4029492d29e192d62736124ed451b2e80d867af56a9f74cc4da55927dde5fcda818edcf3d350aaaad603a60ba21f2a875a48a717ec88bd77871f7c41503f9471430d9f899f3fa25082fee6879330562372e082723b673f1be3e3a3225f306b1f8f8482a71389c77946489c0ce6330baa080c6bd6dcce48721ac7d06f19e6047fd78143602f7782458bcca449547f14ae01b7bfc393535950f5047dd049c1ddc5c337094d2ab6be6d9fcc381170ba78ccc19847fdc662db8f35d1e8abeef6a64d90d5c333d9431bf8039304d10a329b3268623a720fe8eaa28a2c8f0ba6e95cf9832dfd884e473bacbcef192b37ad012475728d4bdee82c32298e77687829a60a1235785de445fc2819175e2ff0066b7386b18a830d4faa13d203ed023e873b665b8ea1ace3cb90228aa7bf92591158aa974dd2ce83355333fcfe4da09f6df628340b47f0da85c04c70a6c3d6b2b5bc8893417b2e28c9890ec8473405dbe198eae208485d7e78d91ccf56647c30c32f03a6bee7868ffd20fe8e222221688810049a28d3b8d5e43aa45acbd337f66a8fdb41da3e24bb5544087fd4516abc1742c8fb1ab817222db5f808779b78e739c45277e1bbc0a3e5d7dfcc71fc96b294659b994410c03bf1a4e0a981c96182c8c4d80dbe862c8548944c9f6a770524792007d2c6a88463790b0752cf53420a0ca470b61d8bfc00847a21332ca8cf76fa124ada93933c2d54814d348056a9af2cca2754714357c9d195a31feddee3d9abb344ecc4dad2a65d7aa738d3e3acda45cc187f56d21b1e6c57264ac95c6e605277ecdf5e40cdec56a8140af8299e44bca8fde84063b343489935b21d99dd17b78962a9a45ac3e3fd46cffebe2c162bf1aefead779494cfa3b8fc35e414ecd1d1d4f67ee43431ca84545896de472c5b24e8b7c40155dbf7f6921555f454c923fb2fce14e2712acfcccea6cf6891f24bc0eb281bcbe5bae17211e38fa2935a87cd04463aa177d11b270912eb03efa615712b9bda797cbebcc4e1b4d23e0f158e7b94ddc4a3a572acf320f66360cf8614a2385d55117ba538a5e19be307a98e6206cec407404d441fbc0d330c4e8696b842b8653922152f222ac8cbb9f2864be58542daa02874e8db448f9daece7abc674059ae57a4dffeae30094f458d985cff558c5d0dbb45f2cbf986411872c868f1269c19b7d2ffdbdb843f4b06d387737b4ad6c93d184088c9afd16577d80c301bb582d79c140aad9c965ce8b62eef0b8cad900a43b5cb3f843b422a056361a1abd3acd0d64b7df644c6cfef632e9e0b86089f40773b42794b347d27773196d39e83a2a2904669aaa460465db41c354172491048a39caa70d188223dab6bdb2586043511258ff7c04badfe908517f977eaa835238ab3a1e5737100321aa3cb047a28245436e89b032ffdcffd8a75023c425197ee7cdb4763f11b13de513aa2f4b390271097e994b9fa47aadc96bc77200d2bd06799a0a4d2fe30fd66ca0e7ddcb57042480cab26040f6e849217140d9d7d71104495101746c754307016b0c30ea5a4f1a83447a7aeb87dbdc68b98eed9ad4ace74873a53a2f82f8ba3664045bea119ef457d1bdff5b8bf55d00a0b919311374fdca44bf2abca042b6f753530519bca1e83b65e2ca5d8852e0bd6b3ca73737f579d16910b40982d4b061052b8d59de564546728f1cbc77375d3b362adea7c4f1f83c62c5d9c0d4ddd57255638332e98ee8965b47e90f58cdaf03b9438081e62fbb73ca0a6bd164b4ff35e94d061252360a1b63a3f58cd785826b3d4fcc84023ccf57f62b3cf61e485c3b0a2bc741c09e42cddbf0f2bec85b4765ece041f563035b41adbfecca3c888caf6a5108671a26cb320242af1e9ccba8c21a9f4aadc97b0de7e5d0a8c3153a7c0a654c69db04893580dc00bc8dfae4e2761697c5379511e1d13425888270b466b8db0f44d92d4075c505651079f18af5b7573182d7f5642a88a32130e8531a5c1aae12d6c5a3e142d3ec24cbe4cbe44511403a37ddf937d5765daf4a85db34d598ba2dd3520216b0b19499f644fd2eb557a0b9a038fbd032ff121057d76f2ccfdd9e491169faab107f0b2ae5fd5889fd2bbae0cc5fbdfc5f734b3a7d5b5a6c6329d634a9919fde1815c601bcf2ec6590879550d5eec20a41e88bea3ffb7d46f68942231587aacd90f0e2efe9d0a5414144d681b90da30f27e5f3255167d0a09328d66be590a7d1f69c1ab086a7e451ee7ffba814402ad97002d42a87ea3859d1c58f23bfc66c1efc4fdd3dd98fbb074c32205c9a6dbd630bed5e1f3e50660c39d15df1dea191f5409669618ce4d20954ec5bbc2c0d0a81c12bafa71d10ea881118fdebb10949475ca01b5eb14bf67ff47a21170188b82bb90db29f29e8b9e976789d0a07fc6b2674186bedcee515f76828bd8fcca2326d19037afdadef6f2b0ed49d9849f21ac7d2c6e8d1f824bcb81b2e94d06c5f3f6ef5441f245f75326309382ad3c2f9ee655f0aa1081d02a2c0b3858f83083fe06a2fb376b106cb1590087aa1bcada0367f305282baa43acc36fee341b63b522eed1a27e438852b9bd8acba91084b3064a81b5f06e625d964e2f56047dd9874c2d565002c6933573917d0d2bfc0331acd8b8623228f5c10e857ac93fa927dbd3968169d12cce40745eede48d88b7fd5d5be1ec6ace220690f9514c7ac4c610141d790f6635ca61a83b6c6a900f12b604537d5a94620ea52615824799d3da22751baca2bcaa3fa17ec34ae3f89fec0fab5aa2dfa3ed553ea05bc8ae7672b991d4ada6d9b2c1a96ea5aafaeec39fd5b71617f0fa9b9ba435f03648e626b94d2ff7468353a52ef9115cbed71dbc1d0c3eb9f8a0237caa3de0fd18deae24d997b5818b210222230444ff5fe563d5a4f47df62495961a932585a2e1f01a626a536d935d4af49d9b862ec81a0281abc9c3d6b05548d534be8a6a1fcc933c1283c9e9b9a9e11fab7acc0a9c24db1e06dee52e23ef9db947ac7d0c6c915e01f2796324eadc218162ad124308d96fa96f18facfc959ccf34422e0f4c7ba0c0b4f521376f4a8f3fe5915a0263e3d34d733028d831f7eaba9b652d1b20bfd66325015190da2751f31f82938b48d856821c749595cdfcc064643eb90b41b9d6c067dfa47fa6c96a3ba14fa9591ba2a5db2466e328b745c45214807dde0890a8063264158a8aed8e50344afe501f7404e397c3efeffa3c21ba5877a1a0472b39d3d79e54d50921fcee9c87417b961454edabc0e9cc6573399bbfab05b2614036d6a0343693e622bd613f638a03d7a19c69347956378b8513fc1aa2a7285564602a6a4d2af0d70cf530e451855690b1d33fc18794d33231d6328eae3d9c583992594b438ba2147c7689f56009f4133c25cd41603da9a93e9e55cec95eba50b57c35212536c4002754bd9c6b4310adecd0d77252ce130d6a56c299eafe27a49faf0277721d1304823d9ed904d4c697fb86bdc6361cf38b503577fd50426d525c3a5eccd27dcc0987c362c415d9fd3cd6fac5752f28b203ef7e48b467e637a51b6f88ee193e0f770d207727fba5b4f9322a893b6e2e3dd4a21c55cee233ecbe7f60e0829c5669e95f57dd4d80bc49b594891f222a26b772336402171ae90c3574f7f85bac7709e98c60bdb54a81996ae217ce60d3a86da1583c9e0f72d38c0630cbe73223cd000f716cba5555505c846a1c719b8da09aebbd0751e013bccc1ac47b5330dff49aaa985a91ee480d887c88ed2dab7bb29289638c59761603cedbad646f64ef314f1d56d886a095c360089eb6ff81c4220c019902a2f5669bd1377a18254401ce0aa4edc3d4dc93bfeb743ff7595374c9769de505322a80136d3b390067e2033196bb98d77ae8d4c578d9ef8a2e11447977812c21ac339a85b2070909f3fd76b68c7aec54301093569b8d6069e6351a619a8c15afb4fb94d8f13cd294723aa5d4270b6e1f5413f27111d5408aeff05357ad81476029efc44bc0e644731b9a6f56297ea52cee83d76ed2e56d2b639da124269f7a5dd33f808150ce708ff5b08ae51ac0579d91c7d1cd13fc7400a9325d8324e7a4a5c4eceb115b13aa23607f62f743c24d4f349a3e380c7c12e3cf5f14c22173c4cbf987f210d5bf408492ad386b091836106abdc907946373e1c30105bcdf027aa1207ccc24beb1e4d9fb341be01b8d922bd3d03c6c857072674654f268364ec0fd23e3c78035c2715e7baa1096096451e049eeec904fc4970b41ff3899584cd91a82eb1f035e2cfe03c83e7461fa3c059e45a8d810d3c1706df5a2d4e609a800889f30c01b3cf8e3fa3a36b53eb2e4783b33c18c0ef39675e0379c4b2a58e77cec8dd04f5c9e6ed97b67765f6a2060d44fd4a87c82317335ce4ce6b353c2442d1987da5139f550053613331aca8dca6b0e79b93a7638085b55002624bf7f26046593b3d2a43ccf223a5d062de016137cc52e78d030927519b1f2ffc9831dc4b52cdaf1c3be91b95192317198152094c8413a2bd4687654f0548b43ed71d0667995a802db5d5b02f7204864ea2beb71eaa53c4a168e89adf7ed4e286d2fa5a51682f3520d6f3c0eeffdd05777fb3ba717d84442b2ecdefa9a1e97603648d27c236f6684f800b23444c8f6db8f312c7ed6dfb4934329d430eb79690a34f7beb001b1f226463ff98f4bbf221848286cc69f87d2d4f6eb5a54093b6b5b90f94952d1ee8ebc7d1bc3607b05172c6f8d7f18630a7485236d87357dd1f8eacaab692ee03a2a4bb1cfa9141267b0d72ce82f7a4e1eb98c4908fb93697f1c889ded4a7504ca77324176f6daeff72c6afea9e7d4771db053fa01fef9ff5e41d63df31e7e60cb6cff1bfcc66f16762dfac4ce85c1515692915a85c48e84b2a795b14252099de34ce9b978d1e32905de7cd12339185a54b1a74b2429bc9532b8ee4d2446aae10db333163f35b0886652ca52e94613cf1a280e3b908c79885c9f49d9690ea38de3d04733d0243ccd1b998680eb1666761f82036a5659fb3c7366fe281fade80ef78b9ee0c431ec84c5d48cc46f2d98a41c78e816c313ce4953f257b877f5fa2c3f7cfdf1aa6182567d41387ec5ddcbdc1212aac2502278ca6464d3f415706cd565c9e5886521898504178ca5105c80894732ceff3d0bf2cf351e23d902207208aabec434832b56d75dcb864fa8f1c02171d37205d1f7b254565f3c0aab954795ac24742d9f569d4a0df1e2476ff7473819f2271759cd02b8a139c484bb78f02ea8d0f84fd90695aca143431280142155a859267b5c71c6846d57ee83f9d2a051ed15f62ab1027ee1a46965a8141372b1202597114d1b05b64e8fdbc42a4914d6f61bd4634749ef8d72102759840288728e210f1876cf3b1dc8e1bc28f581befb79351a0d94b1bb5080cbedf3eae33750897d15e458cae073e3cbd5b2870f423601e09b955bdd65345c5d4dc1d80dabdccf77ad0cdbd8a3df074a0178d311cb26b6d47fdb9e574e8e51c59603e00e483a15a9290a730798558db5b0444dd0092788ef86617b279042218990ddaba4d87c7ac5d0a7704cb867ddc93c804e530c93b4e68daabd3d0821cf5b4a45578c9767e627647ee8c2d5ba34fa2bd71f0a7db9d78aba5da0dc474f01dd83cb5d48d3d7e2ae104152bd1843575dbbc2d29eb59ddae1153d00a08bbb6da2b896c4a8640064e14900fc3a4c79d59a2fdb86ad18621b03a11311d04587a1c4a92c3a413b4c8b5ac69656a9f4a8d203d5e828874a70b08a99eeee874d0ac03213040c2be180f1ac5b5cd2b847f1900606e41fc16983b6d77ae8ba2be0cfc278d7a886ddb7ce168b3e024e2dcea09a8122d89f5d0e80cc897b49ebcd5ac053edf7cf233582018384b780acefd7e1e03662dc88c7e8143fd74929921eddd3a7655435ba6555bed9ec754aac4e34a06e7a14375cb78ad55cc61ae00bb68c1d458e466c68a10f710f0956b75616b0605ece83da2f2214dfcbe8ae7ad5ec0c517877ced107f39e2e73bef4b2c7e99f95a447edb954e689ecf66f2b4913879c1caab883814222ea744a36afc0648102260e3859fd040ea2764f15f91231f3af9db4fc533d2b30913ffb072e8e318106880378ae6961134548dc28f3d788007f35ec4f36a519f3fac893f87c9cc4b25d4fe21fe7f833041e2966978c34acc4c7561e74f67d02dfa7365f582c2e22d31341784f255917fee069826fb751fa3ee1f8b6354cc2092613eb6b1e1cc42497d39e11a0d9807524f785a9a53222533a2ee302cf54aee11f966bd9118129beed07010bdcdbaa1ab0a15c51ea70c28ac3ebc957959326dd3c29f951bf96cb32d8d912360f0585900ac2580daddd83b737000a96cd9c0e42f18474423dbbdef3fef52fb3e8ac949b80f674fdb1e11216c76830ed706c1b036a9a6d75752fd0cbbbed274ed6829cd4fb4c11d846201162c03438260821501bc064a0f4b3ccbf63a413b1dacab5ffe1127600dc4aa02424b935074b0f399023e37575984019ff95319e1ea11940a6f2b8b7bab0b949c6262407f61949c16a4ea3d71c75aac42ca3e41cd1bbfa192577a5ad29fe7b1635224b98d730df869c849f34d2ccd2275ed69a4aa5c40f363e45eda892df7fb11b0c95f25ff9c46b3faeb29c275876e645ba0a6e65107e4fef97034605fb3d98c9d1d799060c89f37bda31a010642dc22a3cdf6bdada1ce8bbcede7ca85ac58c11c0d92e6544eefbad59c9e42c947138dc864ba873bb13e09e4ec242c8764c83cdc80a31bc76fb361925cbe987db68220383e3bf8cc439be83c84784ef23170be0ce92363562dc4dd240128251f8cd2c5809f7787d2110181f7694fa71aeed7b3e18a0180cb7d1f03026f3766420a46df839ddca64e5129428c6a315076130bb525502c967a5456a18514687c0b037b2a3321ff6d2320c4d876a4c28ccad81de4d6c86428e89f3dba6500eab9745880a3a2f76ca7aa6daa9cdc11abde75ea33b9cbb4583123f65dad98894b1f17097758d9ca13a195af8428c639c2e376b624f538a170709329172515e85973c01a7852a19531291532ddbd7143f85167e722ba9dcd65bd563db281b92f519e5c2a1185b9f4ecbaf3406eb63d4f4c6b180b4263186cc6382672131f0d4ba6177ff71d6f96b191c2007fe4e8feb59f2a3820b97a6d747e9a24e28fc9634af0ab74f583c0d3c09f6a93f81b4a8e46958eb9a7828c120b7b7682b0c56dc62ab0d29c0d1c98c80450999e87eed87e9c4b86fdb270ce5a0060fee3b952c11d8e5f6b40224bc19e3fd973c3664557209e539c84c797003e7c00f0052c89da95ac0250f79967f3ff1766edbe67a3d10a6188aac53a197118daeb9677dd0e974c054f068efc3a38a202a435011ad9cc2e54800e2d75a69300d6c428a4363a71d38041ec339a0c0cadf8943a1340024d0808d2b0a5005cfd4b8445dbbd354cc7309873149b336e97c568361364859baf5f43cd7ccdd0bd322289284849be0ed93b25b9b7dc3be902c802e1023b83fbffff3a2a5887bed4e40d9d9d8dd7985bcee9611d0ae4c809dede7fee29f43cb038b229e311e2b0e126803c80485e005d3d870f5183e7004a06ee7861e81ea5400a648213c0ea54eb4193c0a0a7ae10345f31cbab3543cc790001bc12177dd336add9103486b1a12f11b16488309c44e2eeeebec45475a8bbbb7b0adc1165fc901094431f294ab27e66b00b22924c2b58cfdebaeeee7e345475289b6194bc62b0c40053567ce012247e5ea4f6b76bfe151058501c99203e56702a616a5627ab9db62e3807f42c18a377aa56b9bb679d611dfaf6806dc78a60dbaace73774fb6a8719dc5c366cf9c72ebcb4aeb629d4c80be9d088b9a74a3e905a0e402102542a6931a21ad169a3c34f5e89bb6691d800fcf8850a22f864112693b694454aba020030c02969529473052480c9626b120d6b3bbbbfb86b7ddd06b3700db0dc176833027000a06c99a34b42c991e15923021605c5083bbc5fd0932f6c20f8bcb43b8e148a4932d9ad71089b1731bb7b7c67177777717d6b3bbbbbb6f3039dbd6dddd1dc56ef3fa63cc3fcafcc3dcf869def6ffbbbbbb6ff0aeffffffa05fc1d48093e6fc8e28732c7730d174ab81098608c0ffff4f08f703f02dfd903f667f550c7bdf97652dbae891aaa4e8665e3a1543270631ffccd25cd44a1e2d4df883aa686a6c35bf97d51054ab4409d9534406bdf8682c92599d1e78498f80473a99b408093833b357ac339bd6376dd35ad51baf22009cb80ad7b78e41fa90fda429cfb6d794b572c2be3bb7717b7f071849ae15967e69451a7c447256a2429b5ce9f953fa62f4e803a6efce4da74d672c6993a324948ade7825a9fd8b71cceaff7f074086d8ce6ddcdebcffa9d423efd4a68129ac0ca108c97418d61c8d4e889ca96e01d37cb560741137be28d9b2d4376dd3dae31f02b0644ab2250643ab288d052f888948609ca1f0aafa30f369f21a2ad64a5c70e0091815876508872fa2112522f6ce77f61b6d1ae76a2c3e901157392c63236758c4115292be699bd68e041c5151f4541dca66a809ac9169d357faa66d5a3b929aec69e6bdcb2c4820a694f9b9333d7cb2a2c82a66afe6042b6085876b66577bff36ffffdf30b10e6d668e1be7edc3d0fcbeff29d6a768e2d18438c39d4cc7f55d7bff36ffff2f39b10eed587ab25adfb44deb90ff4fa3dc77eaadc6c07a7677f77625cc75cfc109cc50ba964368214c6cf8134d124953c2cadd5da706eb500e9d1d56bbbbbb6f750d21b950d13c77ccf77d7de9d3458f4fe2ce6ddcde3fffffff424321a25051c828a4f45c6edbb66ddbbdc319995b4947007d43254c81b5501213e3039ad3773db10e0debe83a7b3bbc7aaabb7b075504b3174c19b01666364dfaa66d5aabab8d564fd876beeffb43c35c14f973bafff9ffdf84e9fe1a82b6583691264f7ae3d564b71a09719b256b6b561f2e1ed533f084392f487cdf9706075d34f996045dd42899e13dfc5350228c8c6b85b2175e1bcf44e24362148044d87e0c2b666a988cf07204637624666cb154d54c566115d0d513bcc1bb5588e2d7459337409c5be59b55447832fe953ff7d39214744628f5708a604c318d9c76b5f7ffff7fa451d5a16ced48432b009e060eeeef1dce39eeee4841ac438543e20652d14308081a69b1adbb3b8a2ea2bbbba325b10e455bb2684efa86e63cfbff577a621ddaa114c66aecb1731bb7b74a9241dcdddd31fb71f312b175e7366eef2f669168f82ae2eaa4c147ce9a4c8dcf05fe9a5159c166852d302caa70f3cecdc8d0927073dbb66ddbb66ddb5665a9e2a422a582a5d2a5328675be63dddd3d86eb3759835eb1654f7c222baeddfd667377f71243588726d9a576ba496dac5c17d63d4789310b8c6e06b8a61143cb3a9beeeeeeaa8b012ee2255b29afc9c173b636a4c7d2ce6ddcde2130385013c809f4040afbf4476f958a2b8d49e9d5de5f63188475e870881d26f56de4254adfb44d6bbdf1fa536bc99ddbb8bd7b1d58d130e9e0bc28655e281211b27799b74b71bbb9731bb7778df7a166d3ffa2144f5587b2ee03b6731bb7f7ffac90b1209887000d9209ca96488c4ce91cc99e205e90d87714c1a2c945774f77aa0b4e490c53dcdeb98ddbbb2541857c48af8b55c4cb8bdb1a40380831a5c365f204b3b5f12b5260a762eaea017559395b64ad3dde891325b8963ac7142a965f3e1d52fe570502563582092ba5056be7366e6fde8801269c230994c0e84189b20f4242ae9c2c0c038ac7f62d25d6a15b4c76aba9b79cb73da2e234719c384f9cb026ebd9ddddbded6074dd45925a8c2dc82b9813c4607262ce663e70e1ab9311365ec35c7fac677777676a3b98b4bbbb4fd58e4fa95d4af5b69e7b26a4a950430c4a39d1650574ffcb7d7777f7ffffff9e047088262fda4c89effb92a4685227e8fe375d8d2af7f54ddbb466657c8c6898bb678008621d2adc0031bca9383fb8aff91e45479b8c9c0fbf60aa01485383afb86b10f930024d7e9408d72767ee84effbb6fcffd7982e9a1461baff4c3739b5d50fb13e2900c521051a3a7a541134c404a4414c7cdf37054d832e8a7479d3a087307f6ce02180ac11a6039009b99e3d58f34a6d569e745e462f2e64e6bad4376dd3ba4a8196a8a227d5cbf3c0cfcc7cdf97277dba2812c6cbf36be7366e6fdf8e14ef97d65c7671a0b2c26d4e1ad2a2000a0d4c51cc4c0b67464d78eaa4b9d6dcc9545cf73585e6e30cc41717d20dd0ce6ddcde05ec34703b24f5c86d26221215898c444a2266fb39e7dce6d6ddddfdffff7fefbe8cb99130674c9b6e573c904b8f981f8b2c291a2b9a2dbd5794086492c029549902dff71571776f952e7a6c61cc7577feffffce6ddcde1e5613cd8c3466df072d5c44cd88ad78e049b14cda99d9b3697dd336addddd7b9eaa0e655777e7da4bf29424831e4047271b8e51b82e258151da02104d98852e7a1c3b13ba2d4fca7fcefcafc2fdbdc3eceb6b912529c0d79425200b151b11a66454889ddbb8bd0be0a5648ca4e0e1aa0398d7d61146a9b9845209aa3a94f59f916a08c3a6ec664608e5f1e5317656fb97136356faa66d5aef4b9f250821fdaa8d940d964d571b5596af8457c32be255f1ca68034b871c8e2ecdaebd7f9b73732737839a43faa60ed7a921ab05d40a6a09b5865ac49c734e1a4a4a262d939c92a492b05cbbde2b54eddbcfbef6b00e05068543cfe5b66ddbb6dd3b9cb75288d9e0a55534f195c2859886321d169f14392385cf8cabbbbb94ebffff4ba5aa43d9ffff8f9a61a9f1a8f0bcf0d4a8380ab29e5da74b674c07ad6d55dcdd89caba766b1411b733e8ecdcc6edfdff3ddbdb8c6ff24dbec937f926e7dcffeb9bb669edffff8fd71e20d75e85bdd09aeb8622d68b75680f186c3bb0843995f702e3eb4902433660c154c613238b61a985082305c2d2a01615dafcff4f74c23a548a8388956b2d4f29dd31ee287798b790ffa34cf306ef70ecb09edddd9db7c43ad4496a8387d5eea6c8ca12840298934543bbdafbffff071573903148a98398b76de5eeeefeffffcf02da72f6c333684830204d444d162e6fd26564d7b267dbce39e70f25d6a1cca6f3b9f111f6bb8c11257dd336ad599430f7414e60a820a821a824d412ca094aea77bbddedea2e5ea4514577577bee9e1e812829748f516ae75b3b5b417a0010b212c51f15cb09221e06db1adac242932c869e1a6bb20125a30b1727558b07fe4249a24af6c53a5b7e840131a30ad99ddbb8bdd51d9f3b033b9f7ae236eb823e50ec8583fc8873e58453458f49af93ed016a90509bee9e41fd79481608139062cfe7b54c85c3fdff5f233ab9fffaa66d5a9ba12f88aa0e55dddd05f0154f9eb8bd731bb77786d8faff9fb6d367e6786a9bd6376dd33ad81eb9882488ab98b2f6f2dfa51adbfc33dbb98ddb5be97eaba2495539ab75a8e0e444a5c3d2b2e889cb28009ea1ba74b68abc99d7737d001f934911db3d0994fb3bb7717b6b0089284e9c59ad003e01f196d9f1e5b547a9cffdb6be4f0e8ad4fb553d7618b3691ca41f0b684840421ead3118eaffffffffffff46a5c26cfaff6befffff1f8ebba8542c5faac8041800431a38040d8481284e049761031480091d4c50485e4c0c141a321c044443610000040380603018100000c180701810060693f3311a1b60225d48bb007f460bbc8c335c6466b4154565b464471169eb99a12bbd2cb476ff31f63d89cd9d90c7319c1a91d85a3a11d00273a1ca6ef73834a51f1efa1da1e2a2a0cb5bf19a0c946208c4df0f9221f7e786b92fc0e805b5d35295e8a11a7e55dbcb13aeb361c9f6af8106f7a1144990ffac9357fc5487352972b5d53590fb34b9c9741fa1ad9e83686747cc768ee45e386a7b2617adf0e2cdb27c5e7886a8bc6e75b20d57395644280e120d470460c33594433983f7648b9575cfb147bd3b5a4256bab73dd4ec2378da9d6a73931ab2143124770163b69888c11543795ba2a7fdce8513927fe36ca73beef4d32d4cbf941fcbc10e4b078a29b5deaf1baac2ed5fd83470ae53ebc8ad968968209f29f6410d2548dddf37346964bda5487db96fcf5bad3410210e23fc1aaf541f339463ffc2e785c1a6e8c4989e5afe0abda5c2590e8d40a043be1ae35b44445b9a8410071dbb5cb7adcbeab9e84659a07ebf69c68a9699916f9c0a6a5b2073dfd8c3ccf3821b03ab57a2356a30e84b1d98063b172034662565f6056790c48027fb7c9cb1095efc1322352da156436fc07d571e11197ce3ee2ac2e8fa40c3503957d4b7b4aa691a8f45184b3ece6e0447661b21b05a7b5d55330b9eddf5bbd87684078ec8fe280d72f6306661e77f1bef30a6a7232f704c8ca62569cfedd45c25faf6ed512a8240df29f28c9d581c20dad6fd3e54f1c5cabf1df810e0dc414fb709e3327ce28edcce4b3a97d0a9048c838e15028c67dc4e6f3b44fabf6844895c98c4f19b683a1968d6855b302461c6606a3c57d3105321fe022e643868cdbeac51d001df690e6473839c6d65adba51676bfd08641cac2ea6a02cdaba485ba0136b9c65f8b260f4834e3c2c9e980fc09305f7f950f0782c5206dceff97c61ec4d8db865e7c938d2f4e7d8dcaa3104ef37c9adb341e474c0072c1a780728b1d0a51e3fc1bcac09019b70f35e2b52c408b561a81060a45cac722e4d31448ed64385180702da6e457ebb6d98b00d09c15ba19e4eafcbe1bfb251b8372b4ba8f1b19858d189bc808260495151f86df2bc49b1c69fc5327e528518ae71c1c00ee0a24ac7ec84e2fe1810627091c1848e7e8edd1fbd7c93b76dda3bd54175f2a3ab3f7eda2d58285a3b4e5c4f0d19d4949bd1ec2230f8081c864b251924a820f1a007ad83748fee0b7ec70a5a0fec408083ee0e2f201f99d405ae16cd192273aee038427891b72d34ed28a892029b541ab456f716d8e4d4df95bd39e056e2e172e19c47a83b71ad8d9468ef882e2cc3e784d912e22c123d3404c7d31e8427f16bb6773c09d511544a9e6e90de15395ecafd027a7c12f9324971a5c8f99deb260004942950c8f441292e6d57124fe9d311b00650a816085b5272ce85497889899fe35bd0269a8f81b5f5a58b4638ac0a0bc3c5e987bc0e8be7ee0298a2c1ce0b7a3af960a8f831cf4192fae7470a53517a636787b4c45d81e5c04e29ca9ac031b2f1a63b7c7a3d22feb114679ef441d46bcbf906efb8fc4b33df68958868fef1c828dd64da2bdceabac5e4c0a7fe3c1897d2b72b074dd1ac2e8802a4d321a474276327c4cc02a0a1c709eb1a2d768b15fa3924ec5511b2b2efd06204c7e74b5e335389ef1146028e7d4799b16ef1c7e0cf1acb0519885dc7fc3d2a9c34235a18d5c22e1cd0f5f124810d7b1a5b7968e19bc14c422d6828eb2280a3d20de2cd6b9a5954a98dd268c7f624b20bb4a0f2d7f4378026c4c5f09d8262ecf184282a89836ddaca1605e9c5c7e9b2a2464de2f01ae6467ed088b5a77630a5bc36aa30b9495aa9a45af13e4d70c242278995ba59728a846eb3517cf8709eb0c5f082e007181ce3023290298b8c31dc75760796d3c3c6352e34ad4d0d4a9bd06add15aeb1cc1d050d3c28fced3808f1746a8ddf57ef64bd2a7cf47dc1034c5af05fc8589e3ea3a53064527de354170623cc8a25e50b2875c7ee08ddec50655393d6046ebb2e9cfa5551cc0421fda8fc11e1378ebeae28e39f53b86bf3439c4c69f1bf6b1bd77590f2fe915c900aceafc4e177c2c51d103ece852aa05f8023c211b242f7f575311291384648a79e2ff80bc630c9b3da6cc0b716f04145bea9406422a8b8058f91fed0e680e308250f4c13d79047675f031a530724c999516e6e887904341353af413a4f7aae7f4c6c8ec8c59ac5ef227368f663dfa4f938bf3fa58d3a59dfd626958f160fc6cf098a80712536e3db70254e63cd46f100c1cb44cf64e81f2935913aa87f4340e234535b1d0cda23ec008e68bf1d5981c96133f3885dbef64a69083f6611a686ed20da7ce9f9a100f1ec925021a8ac569876486113ea0064c60443c24a77d08fcd2097425410ac99f0e5881b6da292b8767e5396dcefa2cb1ad6502ea3af407c76d8521618b0039ca842b2836a0b1ad6033a81d3390757a1da34cdea03f9ae71052a4f301db0af967e289d79099b410af4448096b5aad58af48e736b67c321847760669ecaa4839a28217b2e00875ccedec490207f1b63ed8ed99ae0aaad9e4ac727a4f1d7da471cb6a5b194587ca25803b6358fe2d5520ce961aeecb4855f3becebe04ba121047da6d8e728993fa566fb870bcbcf0c149270c1ad6431bf569d31414a45c6d3baaa4f4da248329b4cb53dd885ed51dfe674a8fa316e3073ebbd22a3b8f4b0003cc3e3d2dd9bce1d17df3c17c812452d9ea412149d7f01db8395c5eb952b0624af1cc145f206b761ffcd312adb4dc3f767202fb0edb414b4f2fa04bcb72136ccdfbcbb91ab7ac39442717049309b3d6d6a2c0c1e9842f22892b1af2884c4848cb46111965c61110ae246e0762c06730b0ef04f9edeb30a9f64e082f76a4b14fbe3fbc87327a2eccc49444fd23964659a314e500ee08a23924d53087bd390424230093652251d7702503c1e6cc61554a168c39c3833d5ff7e9527ae6ef73a07108eaef325c35cb680927783e396cbacac6940192b93a0e3ec2fc4d63cf8163f49346a2d092f64ef9ce4a75a2c06f1c0aa933cfb46da64036acd92029d10e05a19a0f406eae8c4d176b613ffff071df56646223357257b90ac16ff051ea700fc66b5ced6619bd73c1b1fca9f4c700fc04788f3f5b805b3bf8ff6e0dad63c61044523374f0b44f247fa411095892dfe8b6d1af6325e7c4173a8e8ac86ed947783f8fb54df503a6bae6d3a5deb74fb408747aaa52e01b07b739f147c264993b97e44f6c59e1dc466c9a7cdd4a9b560dcb84698e19fc1a3420f078c4b1204e3463e7906edc2a41c5aeed839ccafb4fb98434684482f8374e6a76f9e92adb7b65ec52e02b382edf96dc0c46ec97258c5a3417210a37f9c48dabd2dc1b313f00c65f8c8f6bbaa1dc17f79ef28714e726a1a3c855c8c3d2fa87f3b73ce4b39bcc138bcea9177a98a7c8bf9a753fe4d14e52bb7cd872b6aa6f910e91075632e77485249fce0e56393fc19dd2f6a6541953b3e6a34d1e00c413a99a9e224fee0da6c3a014d36722f15f666395b8267f4192eb20e15d6431a2f245438fa5b548718f4a685c90c2b00bd737ad562c7f2559ed27259559a56be59bba61d5a68a00dc57a0fe93b6d26bba24c796b0dd422e8d528f2287065644e7eecbbbeb40b5ae4049a005943121a7124ae37026a08eafc11881417daae480f538d5bce51aef037c361bfac653c62b6274aa78656261880d6d3c6cc76ab5fc2561d268752b1b162500c7fc1b58ecc824c28ea9943a5aa0f3a324752ea9d11ce8b62a8e3e2b46cb6f7153cbe3356fce1a4860317102d315b0ee69f5798c694ff4a3c08266eb44244fe6b9f956b57bb47364eba976415112254b084ad24f7c15709357c35bb052d3d28ff231b79dee77f41c5cd02fdbbe6f5635b2c92497a57483268ab7c6fd9ff9e46da8a3e2f01569d9d6377ce2437b01a0ad61928432245fb5471407fbe9c72b9ba6744b4a2f205278335f39d3b06897d710d5fc5570fde0c50e3d81ba530648492054eaa9106665576469210b956187655546ef9c96088930c074a619f109fbee26663e39916d04a08c44684f68f23e8d2adeeb810a7a4406c668d5cc02207ba6cf853d792132f025e7e0b962c592b90bad91e2c03ec0a703373f534c6060c7702dc569fb5486f8c93d499aeae5d5b139899319b28b689f4e002ad7a197c70552d6162e09829aec9c23d63e54d1c46162ca542d5acd671c6c43a8d36f27ca6625b65d24774bb598722ee9e9730ebbe446ea9419422c4eae17e4412397f184c922fc1591bcaf0731ac29177b44dd1b8d805dd5061363d35a24693c71af798da75887e23dfbd7e5f66116089b92f2c21665eb26c6a072a3c3923c6fd873692cca612013bbdd9f568d168c441d645e21391f765c4145303b14764801b71b56a993183423b4f2c3ad308521fb9a5e510431e8df5e0990bf25171dc95cf08dcc8ece1c5e268aedf92c76562e847bf994ec6e3952d052d82445d5036cdd2a9c9e8a4ef5c55d79ed759a1aa4d5d8fe6297c8d91d6d85d899c0c8cacdaf19f2ae1ad8b2c40d4cb89903f249e792d25ac54126dedc8b08237eaae067f381442eba1af18b27f125dd8b44682ca8f604cda13d830fffbc203dda5dae0158b8afb94e15cefbef32c1db52a4e07657914995491ac3bff1151ebfc81e162f1f6765f047e31ab866bc060882ed7a07f263e6aba08c86ab09036775e5df9882dbe3b771eb93756b6fc8e0c70a85fee556ea63dfcd7df260834780ae3747f6c358ed097ca2b50f320fa686a46419c296a2e0c68d9d800858e2a822c283b7c55ee7d78ace683666ae6651f5269a27b11c494a040e7db027c7e12179c86355dea436e25ae475c4e3f4d5789e7006ce084668511f1fb74af68e1aab6afb6a8f00d70eccad0ac494b53775bdba1cd2e2a323234f37f82278c21b0893c993ce1248b6ec99979431558155986e0ae828f26f4784a6868d4fd32d1a10ca30f779e2c2d73f9a82de54752696f99b3363788f3bbc9d9e679f293cb03a0369011d1ad101a75a9810f76465225b81ce584712873f81a74faa91415919e4b5299fd51a87c9014e5ec7ecea8dc164522bedccb6d5513e1d518f6ec2017183d8834b22e308b10d29d67fe41f4a0619a759c654d4bf23642fb2de11b33e6d782dac356a49b0c6b057eca70a12884fa851913dbc29b5905c5d27e34c41b42014a3fe9c201240e8e249fb56f80cdd23ceb63b5a1aa69cca15b3a44620731b926a717d1355c84724378832b93c687a9614275a2ed0290de6901317a0164f9d60b934c2b80ad871f315cefd954066b73f0fec33b4ded139788f4a3c7f07cde01aa7a44542c7ded8b12d98bb5714719a186d1431ba07a2ed4da1777f784f193c57e087e12c480739f8f4274b5d6c29a6cf9f5063ea69550b741c3bf71082ca7b7b43a77a82e4b552e3808680835ed8c5e909b4abd9a18d9cdb79bc74c566f49ff6f4d206679ee1d43b8547f5cdc3fa266c4c341bca265857b1929a1ad99b75688926cc8658f5ae6bd0d103605244ba67aff3c8189840281ed3622d14c6bcc418d44942f25ba8b2e744779b28625148e1d1e7ee6c3040277f65194ed41b9a5de05bb0de663a3332863ca96ebc2fa6eaeb776114a2eeee86cc50a242fc0840c87564d92b10a96036fd48497ca0ed2b29b0a19eea2bff6c324c03f5f7dd7405f935c654d5d8c094e5ac757ab9ab850ce2e33ab5cb8ba9bfd59427f3a00ce67e7894ccccaa6621480b763ad29cae2a2423026e548e93077d51767ec716a935b580e5dc1485c5567024346c9fe7942a7b9339925b5b6dec6cd784c41a82cf921cb58c7a8cfa1e33108f20fb5eee47db41e90c14cbdbc0f6f9f01617b8b65f31669a92d047d1a68861096c2c3de95cce055971f7f33c4208c953ff9cc56fce5ac32628f8bc06c660ac3bc129e7e138865c0f17a3165697d8cc0594a3606f65022037fbcd3fef494e63dcdfd4049673d5f056ba02a323439efa343103e70ef7a1e1d6d80ea2544e6b06201efeb631cdaf9616b25be1d868d86293725fd29b9cc8cc7fc1a56d29af3b52ee129a7cd2ec3ccab9fa1c2582a3a4f77ad9c47e782729856fda4ea24ecc51440377222218875201c85acfbca75bd259af9ccebacf3ed51014758d29f8a306a098304ac528a43a90544ff396bfc8f4d3c3b8d52487887631900c269dd86496974f33c84d2cbbe23ee358b906232035933108303ed9ee5b8a48a5b76d0450f4631d6fcda3ee994cb5f757cb809381018954ad118b4bd8d44f647c9d29d453981f7bcb6d6d06d08adc163e82ebe9a75c239d5cb29463bbfa3a3b1491049e03bb0f97c6066e025678af232bdd3f46c7814e6b22be1e62380351d63f395f5dac4b789513c075e0bb6bda20a855505c323807e03b849ec5ab48e9690244d3cf7bf79915eb3dfd65c97fb1d623fb9bfc3e59a14d30c435cce00fcdce8517f6896f3fc66d68aedad7b3c0e81173eb8c5f4505d51c6dda72700dd4962e1c71502396f8384159ac4838d857f77ddd5254ae5c40034272bea5c11cf2261b50c99c5467a71f024d86591d47fe08b0a9a2ebdf413c4610b6bb652c8eff5331c004943dd2212656bb2127ef1306f28b1bfd92ca17f69cb1f39b124632d0cc708556674bd2127af2633f8e377c2e9364d4de0a2e9cbbc21d52c2101b22513bbcda5f04c3cdd17497be586c65c27108b0caa7400b370dfa13b87ca9733491967000914c7b21e2767dd2e57691065e4717ad9bcb80e1dc13e78fd03cc2b82e17fa50f9816b32b1c03afa737633d95348a27671de4686369303d12a44998f168986d4a51935c7342e2f06d4741dce067f4a6942fc6511bc4c927453214344beb4f24e4282fb231b40a45600a32f67ec9478c3223d9b45041f998302838d91f87c8463029a140be38ecd024548b41ccc4eef0914a7349a11943518fc71d85ee4293f8497114aaeda982922eca5a4fc904f40c74f5f68951a06537373774cb907e0618f6fa21ad7aca2b7a5b5ca77fc37da56e68a9b9a5e04ea66739c4361031705c9f79f5048c836b803412c50a5cff696ef324b41dcd9cfa1e1079a09edadbe1f2b5fa3b22d6f74943473c250686c1a6f4ca970b9401614494443b4112fa6a88256d42e53ad1addd3bfb70b808fc062eeaaac22fd3f07d68dafd329e6c9ab876226a10ffa78f1e8a89ad546b84162ea172faff5e0607d4addfd943cb38a00b695761a8c9534916f10430d158555eccccc05fcb02289f32f36040e7dd13699d95520bdb9d356661b3db0c363deab0bac017441f3ab010215bda966b3cd0db158b75df585de6fa6b0d1d62953262b60923d66744ab6dda12210434fde85c4a16df99e5d22064d1b16140874e67474cd22256a17ea4743b7007965b86893d2060213f5dd231f77eaf7f97143bd335baa05b14d04a354f17d334411c823a4a461ab9dd979d6630b8ef4ce32eacb88e585c51dbd2d3e623022b0755103c0a27042ce24a18b64c847664bc15fab1467262d7f82da92a63fd60f52e3e978dd58ce4072a5dd2da636edeb67aa6648728e0e40fb6306783cde4377b37d354ed4cd692315ea159ffe7c9d1ebf803c64469e6d2da100463e094571eda2e33813572f7fe8404891e6c0dace225e4d7fce36549a71237fc1b0361a992be2603006eb721c7b2a74fb32c5138ca83c9a29f6005b8477dd3c5e35139a3afd2384d01b1201c2d0cf6bd07ee4849c84c6c4050f947798758f115ea5ccf62b10274cdb5f01e55e2fd004e79f36aac8f102a612c744529b9171b0b4c330c3b1d07c3198112d178086375961be363d82ae3d41ac9c5b6c3574bab1b7154fe18c39cd0d3a4c31c468eae45f24a13652f8bc66192d9cc078dab9e017acd8e6743344c936a2bf172da47ff99c63ec4779455d6a7f551be6d84d4d7287df3f365ce2d7171e354e1f4facce89b272f693951394003be555eb83a8badfdf7684ee0b7f647bba157a89116b42292c391959460d32c858de06a94de3dfe180d6d7716dc7db3456fa889682333c758cb364c4888dca54e4705ad8128c43254bb7457af7c4117a6b69de626a83b0d735435485f018cbf8ec547ca9792aa86e6f6c9261587a419dccf908a1f3de6a664b338308c580cc1cce58a3fcdb068dc4bcd822a8fb294240f30a3e17b176b3aaa5309094545194a30bdbacabcd7f34e1ebb27fd54a58e8c561c9dd0f54d25823c81516321eb4b2c4dc2a3e72fdab4ed49f6d170a7eb805be699fc40f8dd638ee254bfa358ae105ffb0f5a344a67fedcbe4b3d7e8273547c99f4ca255b0f75bbc6749137e97e250e94938fe812d21541d7923bc99e9931111269b43a61b531a0157beeb6b5a610e7427d4d2010e35a0f0886f12d8897042f68bde487d3f82f006086e569b033ce7c7c0869b07f44cf34da36686e393c16f02ca58ebb814dc5369702584af2e47641fcd20ac2cfa81c1da3c44df0e2462f68d9b3d88cfadad330e75dc2a5e67a3b200d4bf9cb6d40b125368106a9b273c12302c9a2eea39abb8da85603eb9614d933b814882341b21263ce2c14712256a9c88a2136d48d42a886c6f95ad4ce2b769e8e296f0ba9a8dc69e5cf9b158bb04eae415ba4379f53d960886eaf4fbca618c327fd740e02d9078c20f1667f88912aecf5dc26718fa4276802f128b8c0a812bb22368be9463d1702b689fe46fa33582104c32ce792a1d7c7027c72e89adc68f6e79613588c5b21de3ec3890652e76bd1195339d17fd2c7f55931ca6d6f4cf36a6da12732766413f343b825b7eaebbe7e944e166752c5642cd731e5c765622954df9086139440efbc14a1c1a4ca5b6a8074949eaeb9921c14d8a3e66a424fbd8ae7d5641567970097e941bc6fb52c854fd3043ab3f137bce27694d34e3725c8f2f3d28656b62e68aae35f838e4262f48bdaccc5602a9f408742722e8962d1a60c432cccbeaaf9b28d422e93f159331ce47b4d3a48ccce3f50e7003ef9404a999e52c0b8837c0246d01744b85b47eb4bacf532a2eb68f6e333d4146d3e2135519c354e44a115b941eaa57322f5495e626b3494e53bd7bca43de753f4959fa7caa20716536c44eb4c1dbdb76517df03d457f347a5bd0b2d3dd1f1338a254da1477dda7dab4a67689ad181e4fdb51d843ca2a42880d4aa3eeaf48f90ce6d8e8182915f035a26908bb561508aece85f182d1abd584bb13c858af8c1c32fa14dd0d4fee7a5a8703ddfd7a672b95651aa70134d623338fccdbd3f51a5eb6f764991128191c90746524f7eeb56f1d695453026e20e2c60b2c8bf7f0b11bd8b42309d131267ecc7a975f55d9ec430dc721510a38cbb2a00b94a3af705c097f26e7c4304c70dbdbb8b9087b6259427ae47b1fb205c4e3e4932e9bdb9a3dbad2617646a82ba8af39a3a184206d1cd88833eb9ef4ee34a68f2edaf6782511e017638c32187faf93492e7b6e01b3063e70c3e1f50de7c8bba0f6a15ce904431b080968f69e10c5e9315738ae030a7e974303b99787d1863fea97c732373ca51b4b1c36fc5503403a5f5e5542a2342e097fe7fd8fced48b2b8402798ee2b48001ccbda8bcebaad5585669aed4b498e6a6490da28bddaaded2b588294c30e5d27874d6959c1f6813f2abbed091ac1812a9c78e40eb5178692155b5c08a149133c4d03ea48fe74592054ba4a070d9fea5354d55a7d86fa9d6e743ec04eecca6b062288e01bdd6810363e1d75ada643f41258c7eb45bfe3cb01c0404c003010683a4a34b68b4bf5d1ee61258feab8b578df351da9497513b17b6fb2e5de52a624536b0716071b0749add3dddd110acfa46e0fe7184e6932f56cead837da4b688c68bb8202c11584134dcb05e5e582e27a7224b53961547a0e67da43bae585601fee0c08a2093c84d06f14bfae2753bea9d4302625c526bc3f06c5b0c0203f41e2392a81b16d8ef48db121e4e0a85a9575a9e1aa480927994828520a6da9d4353869dfe6c067c33a5c2bf5b831320b1ef6effe662f44be83a12ae73d0c4b4adf6521f15b763f7271ec8e6efa42e437281d5c1c3c74b6670251a7bd974975836f300477ec4e3bcd96caf4eddc764776a279b40959cf7c81e8a3a209d13f6d77a2f4dda5339b3ba767eceb65fe9bed66ce9bb1532f4883363822d435b239c71851bf35c71ae5ddc92437b1df320edb28976d1a47fb3714a76d1b87e2b8ad53a17d511acd36e24081bbb34e5b67ae87285f94371de5024acbbc497ba4dcd6d14137333333373703b1ad6743536d6a646c8c7bce293d7f8dc6f88573ce89c9754cdafcb099dc2d846577638c2da758a5c531250d176ce6fcf53c30e9eab0dbece27840c639b1c9c36a972636a5e61a1960b08c0193c4874e050c13e90273e4a5fc40a2d6d1362d5f5e28d717a7a226077fbe34e580365c505e5ebe500c0b15642193831aa8503a9ad23118c0045ab69812250b235e3674cb0693368694524aed88173b78a9491db8ca0d5fe4804d97920c99745111f3f4d745e50b174694846e20a34910cabc645006004a5a4a29a9bc94524a69e5d3240e3d4cf1e249b3416af306894d8d0a10369a5f972b063f7f5d2e25ad0bab088c295e8cd1c310af222440c96a5555ee39a08d9803dad8c088a9a16abfae265e966affba9a68f1a1c750e7afab49175410ae26574c9903da20a189d24bb751491a9ad480f31cd5d1734a3ef415b6c4084f95254934f460c316621081daa870401e569c9452caf052d6b061c50f4c689aa66935316c112386a120235f14b1650745ba68eac264acc061c98a18603307b461238a2c2a1a5168f995e728f124fcbaa230fad0579226a5bcdc5005cc114ab872184201948c39aa81115b8c94896285100650c69532420082176348312508043022a524619d681882a18099a4605b2f4518020c92e081d11141f0e2a9c8c88ad017a22fa880c1cd8e2b4e961842073165e80084295e34b1610865305164a90b4bfe00a7071b18c5e084183192680289c53e78f6aa62e7294c32d87278c2889452da38e1c18992976ec37f5d4d86f0a85f57133278a09152cf8641579827ee4bad62b8a81b0e5c61a8708549728599011357981d362aae30457eb0e150bb2e3620d411ac4025551abfae2d9eb052bb5fd71646bc742501866b8b27dfbfae2d9c7c589d896d73c2ac6aa9fdaba5ceaaa5c6aaa572d5522507eec71cda258d25e2fb53233bfc8c30a8cef30b7dba1e36ba1fd04bf51f7a423bee82c4a6c141edfe429f6730fb328120026f7cc8cd6bf74c47513aa5a3b676944b6fba07846699461980494fc1943cb2d9d90119470f77a763b3654b1878cc8a8cbaae208e3e540551f42155e1809aefa3bc62d41332e2c3d23ee9439485fa683e73cd1bf2615147794246288bfa900f4bf36dc8bb6ca79e0ca2fa19c4900a07b491bd09528f791624fbf9b95079f0fb39b9994e64955829684f8194ae812e53867d7abcd9cf87f4f9616059f2eb06635b1e6e1ed92c7f85c4e71e5ba6cc6f7c666620ee1181df8f088e9a6ff7605e7be6f1c0bcb5cec1ed39d13eb9e190c77c9dba00c48f7d2ff4afd7bce491cd3262182624be740cc3b0e901f13b91fdf94c525f755d4c9edec5e4e8d9f75fbb02b7582e26452e26442ea3a79bccfb26fb5460f537e4c3ab06a5b31afb1d52b1da31efdfa1aa42f6fbbdd09a017e3f272968cfc1b2cb94e1cdc11a8800abbf6d9d65703b8b2b4ae69b966d5176fb349a124c1d0d0518b7ad20b52fee0973051be0becd37b00e0022d420fb447dc57c102b88c5d23f21cdabd0e6db3a28000ca106d9a707eac77c837eaa10b4a124d6f560c063edb38bf202633dbb5b7633f47b81833a93738a9b385d2e31b7c7a5255298b999dbb7ae80d89a48f4028985f9742391158503994fff6e12f0621149c08b456996aa776b1ffee05c4b983cf8eb02828c0b08307e5d5c20d9f975fd8083af8b23fe2aa9880829784862cb1856fb0fee235724755d3f5cf1d297a328d9b67ba260eefb2bc813a45c21b65aad16fde2ea48898267fa1d454e29bd28b39b52ca0d0c4509e2f32e801fc4a29a07896584a81b8912c4e7815a015e18a403634d6f5f7a21c330bb1e353f2dd0df8e75d78e512fca0b9c75379d33d9f702ffc4b04f622d7fd8a86f95a49f4c397313e2174aa6df2ed85980889c3c5830bd99aa1c7d7bd077a723e8dbfb0bf99b66bed18c7a8645efae02f38b3650d99679640cd265c8b43e4897291377674ef656ebb32f2e3857f002f390add6c74f08e640f48500d59f1ed784c91ebfbd5dca17300ecb3cfb82f407619197baa42b495c92b4480a53830fda0e8c6ca81edbb58485942fa80ccbb439bb286a9da54d029151abd5720125fab592840c11c526866118a6b95a4a1ec360b0648474583246107ef032e6b130ec544488c716104674f9f003158a4d8c5e216a9da523f40f0d4fdec41619142d2886a02082a2687a966559e6c36755556d6ac5b0225602927972949c9ee5d10d9670f9d0b30c9bd273401b4252a86855559b5a2546b76aa3fdba948e7c587d32d1aa3ce84147460d6dba57d7eac6e8c690cd5f74b126482675fa9c52dbb32a757ee13649e92c6677a4cbf6a49192ca2eb32cc3329ad18c6659967db2481acd5c514359248bba47b2e40d27e5d14b8c683ed96088b2fe45faa2e2c451c54c5b54887e3ddca5c89dc3addba876b9653f81e5e71756f0b7f2c78a1dbbd90929d81727a0d0ac8b7339d1456c8ebd2f06236fef6eef723bf3e4c99399f9db8edbbbeb13a6ae2351d7afa87c54d7bb1eea0d8d0ea66e4e0c8113ad8f31726143816dd9294cebd9b50328cf1f10ff09540fa4fae842949416474c61a9ebdbeca2464f5da9de6da0bf1b7679b302911bd6fc6ef8f3c10a6205b1b28f2936f1935214d31a22523a424a526252b50e7f345c28b5640f58f7c365ec0e7bd864ac095cc473f7d2a825a6546575d8b9a908cc0766d43afc335e6a288ddc08fc10337237525569443f7ebd3e266a7b8811f19cc14165f6e8430d31277e550619fb22199b81165f31f29ccc2846318ab9f9a35a9dc1a2fa1711e3671775fb38df3c88d579102bfaaa5bed4ef4f88a4fdc8ad1e8082949e9233b7d64311f5ffc34f4b12895a5ce5c5143fa9b97a2a26edf0df71131a18b95166bf32056108b3df6e6754054160aa926ab150a1f35d4a6793ab647f95639c286df4ec7f637d3d997698a57398391e7874393e555c489ef2ffacc0d2af37480f4e992729579b45903893ae75785500f0243eb51ae494f08507dd9fdccd9edc83c1396c11a4b35945f51ccf560db9c1b3e37506072f4b17932cfc993b9e5469b366ddacdcd5e7f91c90785cc9829495390a2d1bcb29286070d5c7e997890f2f30b57ef62a20926a4f4512da3ae6b09321f765112a22e629e752d91e4a3b792d8470d6506358c46dd03763e542140f59b8718ac09d143b009264d289932254ac1d8c3302ccb7444dad15a77c13082dde9e074b4f41c3cdb658d2eb5bfe9399abd7dcc67f743bf9b1ed3d9d9e7c731e8dde998cef3c3e12fa757333ac068780c91e97aa899cf80a972d63067c7d7f3367d8381e8dbd90be3ab8b76277aa7a486d1a8a8a57934ba40b3b46f570cf6f723be4a18e26d343c8e2861d0d5c4ebc368f4b18b22528cae269844291fbd8b28f6eacca9cf30e89ffeb0671ee605f13228fb03c2e086ab8fad84c155f7c41f5627ba104b7c5c4526a336ea19a71a067dec78a8db4836483057220953a2a8462a2941c50c91126350aee2c4cf9ad8dbbb5b81bfd609877cd77c0c22808f2b10f31d0e41fa1f59d326e697b65a343c507bfced7aa8bebf2f768c9bbd88588adb2a94f04102c060c660ce8f8f22a93265ca1481654394d44d1caa33283787411aa2229ca26fd7433e7dba5833ed0ee6ce60671485cc4e0d683e3f164cd7be1c7c036c1de972be740921f4d2e3d06cadeb28cc4b9f709d7ebf0871530e124988264f33cc73304f9803fa609ef0060acc13810f77e9a5d03fe0439c0f7d5e625efbf4d83d07bc8123dda8064bf4ee67e348ab2cf7761329c9cc719275e456a95c655c62b72ccbb2e99d61986318867d2186c5cc0b390c5b220aca5833229e7cb76f29246a749b248a7c1be0db51dd4f53e6498199190521869620a1450ea434c1457806330d4b9e9999190928df2e291257bedd86072d2e295ed4f876dafd34187568015143123dd021072dc39125d911413cbb9623c6f83c3bb6557434e820ca98c508323a443cbbac5cf70c56bea5777777b7cb08a26767d4d014323830b2238e304d31e254e50609e46094650709103db990b840228116bc6c543892064c5413a38db8a8210c09450d4d6c488cc678150d946c5438ae20c478f9eb4a020ca7a6a1295953cea6458dddfb448479427008838b433abbcef6ece0063c7b7966a32a7f7fa46077d877748f0aa20e3be7e0a586e78e32f01852326477587e405a6090999999a5f8528deafcf93173a5621e356fe721e612b2136b3197a616bc2cec8b5f0b3df400db433f46f229f9f610c767ede102bebd1ad57e21f2431efafe6961775a4c0c26d30ea9c4201383d3677373734f2f1229112d2561b0bd88884125a5b8d4c2163b4ac4adb43b2d250989c154911a4622249ec66ca881176098660ba78cd41d2d84477dcce5e723f3b8c4dd4ee3458d4c0cb6cb2f2a31d81ef250546ad7b6272ea5ffe57700b2b71e984708ca39a76ec45951fa4b87f9a4efbce6bcb82644df3c57f52d3a207e2fd0afdc03287ee63f3a4dd3344d437d1a55c50ee2ee1c6c9b6382b9ed4ebbb626344bf909910e445fdb9dfe613781f702bf34417c1eb2d5d2166c6f9f3dfa650cd22f3fba3b7dc363bef4f93fbf190b5711423af6a56f0e33f8c3607bbbb4c1b6399a5cb994524620361ad4c80282b5ecee55eafe646b4ed6267da338d29756a9a1bf6b58d4964d3de594435aa77d2275ad1ac62f4dbb63440d572947d434a21ac6a6a421dd13370e3d1119a20de15239259a6153d20c9b72ca293328358c4d2fc43d7129065d180113850f2d3247599a06d5abd56ad160448c6eae6a38786e6a3d3b3539dd7c53195a54a1e5390bd79627af7ad6b2e4d987468d235962b65268f1edd85661636487387db230f976496f08e207658cc4f8608cab8d2c938f0f668ebfda37b05cf976aeb3ecf0ddbe452a9aa5c148ea091554ba5cd1210057a4d800cb0ddb2bd5d0c8b104adfd5595332d5176d560c9f36b8a17fc17cfee39ccb3cf5314e19977c6a015a50492ac889206450ed811e58264fec4c0947de941166152104106fd33c3d364dac14818362a19907e6448629dfd9056a61e92fc083119f1829f22435e9c6c543834609aa9e1862447434009338413ae21aef8d07f552486dff670b56a5ef1184a9243ed7ab41766ca20f3159cb10f611e21eed92cbeb0af40f4fc92a2685d521409e0c3659191595720ba00665c01c960e661fcec8b99f496b2c3989c988872d0b1c3a44fcf85b91d8fe8f443e1e7e4326cb2185e7289ed62125b892373a48d94986c0ecb322c6e1832d32486a293fac47c17fb309b4afb892dd5458d55c69591e59c2d838d8dcde2e0b7e13caaa2474f79a90b4edfe9b139599b2e387f027d63b18b907229875df2527b7ab7d7d4baa02eb8db1cb5a0bdbb91599873c608343f7adcdde5311bbba02e09a9dd9aaaadd3d505b55d82deac9648e49c3e59a0fe32cbbe70cea640b3bb2511765725bb720c52398bb86ec3d2f9b679646ddd9639d76d996318e5b62c433986722b4f508a4279e8b35a9f2aaf658e510cc3be0582c61912b193ce3f925be89ecdd781740fe7280f7d2adb705f88f35d7316874639c039ea83e146039185f2c8427d431c8bf321c91242b911ca8aab00ea9b1759dcad2059dc67a4488a85726651cc23eadb5500e5aff29a5b79e231aff29917997dbac7c767b502417795aab7cad3202a8fade4b81d67a59c0db11181210abb9434547d644a575d597e41c60d5a2c9641518bd545557da4dfc473290aa21ffae840b1b5a552f0a464e6f639e7ccbc54179a9939f3ad665f08e43117da65e6409e7b4a6f7a0331183f20f9d837040852bde9c1ee57aaf75b4568ccb7db50c30502c43c4388ac28ad2a953b08ae56ab21622aed1ea0d7ab22098178d917cd13e62fac7163e2a6ed18d536c9c9c53cce40a5437612f96e23b6df95524a29a56c669eec5106e59c524a3228215c495b2af6eb721df161e5a6700d31e5ba9e44179118b1a394c2c767716464ec4ef45893626f652f1b1df8e4e81ddbb462f6b54fb115877ca2513c8a483149a9c949aa16a1d2b8cfc7cee3e298711acfc1130a1a9fb129f9ac4f3bdbd0f090fefa0ca7e1d978ebb3ab5f5f9d755943e3eba57c464dcd07843d8d73a783c669bc983d3118535ef6f20c1083ba23049aef64c859ecebd1516008f0ba1b206e06b8598f344dece1b04e9c410d9969780c85f1ecc53cdd27c730189d260772bada31f96d5bcbe9a9e9c52446e94b4b6988a9c849c999767d3c2f744a6bdd2dae8705e9a74104d0a930bf50f3cdb7efc6515e90761d8d01614f3f27fb65af6c0cebc4f8345464af3fb2c4a7fbcd9ae24421c9476f01887b56cb97149044a1f80589c96f4d607c949dbd9827b4c9c6304fcff0f1667d7c80cc0cfd3a4b43e2b09aa2ede50f5555716ca4af16872dfa6fbbdb1b9d73301106dbc7af7e3273d0ef8f1511065bc7b639987dfafc825ef3ad8428342ba1881ac697538faf9e73cbba9f49998b502a3be5ba1f27db763f32eb32b0accd87a8dddcbe183bf6e8c525069b881aee13a651afc72742b19113917c0b7d5715e8abf985a0fc92be9d7d861009a232a97b139dbe0d83219591dbc1b639dbeefad649a9eb5a22b302f3b80fda9479e63e59e6e00acb321b996fbb9b7959c6be3b99774fb2ce5204121be1f889eed43ad3297f4fddddddfd45290caa544f4fdd138d589de973faf41a1045a4dd99461051a7d3117b189fe2537c7a8a43d1697a08fed1d4be2cf384448a7df16977a66b55d41947d490b21185b24d1b0cce39e7d640677526b83bd3a5b3f00304b135c6c70a4d54e560f77ca00b70b2b03bd3e3ffb26943355280f32637e79c4d89a8ddbe69393da7e654db77b80fe6f1b183418c8bda4e0106311fcc83b90f0631e76ed5a0df1ded8379760705ba1fce786c7cc59cc8ed689d88247671f322120631df4131251f9fd52a0441fa85eed917aa5418e639dcb32ccc55388eb94ff72ccbc663a1ca732d91798e796a6cd284b06d0e73390c4e27282f01cbc0b25011f5c59ce9bd4abf01e6992b28fd7420334c8e1418dcd9dbd3e70453bbf8e9d9e76377a63fa9ec2d198653aa42fac1a044428a48dd2382a49731306d33a04491483212750f0bab135d0c7d3d11818079a44b6741aba27ec15cdbe648a9f3ab23b51d7c62cfb2e4929897ee433aed171a7443b8969c5eba7743d430475b9aad91d33d393ad3e12f3fda1da5bcc160af186cffa14adf2f9f02f36c1460a07c3b0bddb3ace5f2ed2558a9eca14b2868ddf2dd735c21beada842a68b152bba40f104fc4ec08bceb0526ad2497bc71d32cfdc4c0244709a5966962c3166995966962c185df29931a3c6866d80e08dd5aaa6c686461c1ac18810b0905824162cdd58241689058b9c554a508212d01063cea6d9d441c042629158b07463915824162c5129525444c2e21131861149caee34143a183644a31fc684c4269629b1c0229689833a513e3366d4d8b00d10bcb15ad5d4d8d088382a159649022c134b1c01896d73426e6751c76db1a8757e9c44a2a3d6895c1546f3884c8d9e8323d23cda388dc89027a1562b22e9e210d77940ddccb62c73cbd2b5b062287dea54a81f91acac0eea05ade3417bf4d32feecee414971634d9b03db368ce17bc36a40d6947f4b538a6b3d4868aa6124a863eadd0542bcd8c59c43c9a43cc8d48514a44a200d28e19dc760f4645eb797474d469515155f8cc985163c33640f0c66a5553634323e2a85439ee364c44a5a144445a1d7624b6873e4df9795459a85cc4be8964c84a0db5a1210d09f74c28f36804f3a8765bd7714d349ed8babb6777cb962d656f9518bd65efea88d213ee5df10e713b1e59486597d270a0bcb954126473727163772867d9a1bcfba2721dcaeb8692d29f5948f7a339ed50de955119cb32546f43ceeabc2609f7749db775eced9930e8b34d725cc665bbbb7277e52ee79917fee0382f3eaaa6552354a3715e4d8b41a21a21d661a29a560d370ae5e940755f541fd46bca8bbfa166bcc63011b56bd570339add663463cc8c578d109fc09ea21fd6b46a5a3544ad67af51c23c9913d524611eced96b8a6ad634e335e3a579f2eb8c373db3e66d5f3d27a9548d66437fa3c1655f3d94173d8975950446692a2e7ef59c6c9eaa297af699ae26099fc0de753ff2ab212253c3cda8868809f3600ea5763a502fbb326ab819a980f3f2db8cc294d177b619a9105f3ac79bc669f1f726dbc5a66c8d6e1c2bce4ce61ef72500e0a9665a5e48e6389f7dbb3bedd1eb293faa65349898d154a6629a369f1aa58452437c42d7aaa9969612c2b0d41083a9d68c31668c81a130f619632c0ea3eec95c1a15b50ecf9b18b26c358dd28cc3bc88426998f4f5288739d9bc3d9a31e1138ef80476b26d5d336190a56c97de8fac293bca8c184cb5362223e6214ac23c982b49b516c74e89d9a8bad9df9e93cda927b332354cb5b8eec7c996d10d531cd7fda076b50e5bcc0f39443b0cb4976ab553c68475f8cb8c1864c751aa1b11a33477c23ceca3978551b1ae5517f5481ff6abbff07c7d7bfb1b51aab565a9d6971926a2fe885a1bd146d47198a7cd7098477f7a290ef3b29f9e879a584635d4363343002ed84af0cdc9e15c73f6341cd77ed850d636e7405f52fda67afb082e696a4c4d39a1720b24aff3ebd2c197df683890eea9b13aebebaa75badba97c34a5998a92a0a224acd7f0548dd5320dc3b039b12cfb280935bc1b2b06a5d3f0c21f287cf42dc16b23eacd322869eb484ff98cd32c49faa93cf3526050aadca609db2ca99541cc298318095e3dfe08de0d093e82d3f06df332d73c1ace79e12ab9c0cedecca2da2c3d331106a503910be4867a83411630df5cfa063ac03c9c97f972d69d6fdd77a3a3db3ce8352f94210b5a0ddf4ec78f0f39e8d9fbf1280f687e8d6f01395ee591e009f9a9de6304a73163e3d578a12a8b495e3aaddea6d8673c05de56ddb302eb4897f206f72c8be68baaa15e50c37d819f4f51c37dc524ae7d7128741d34fd72f9758121f3dbb66dd7835d73ce738181743f9b77ae79dce61df785ec2fc4e77cdd79d3985dd334cd993d2006e510c99cec7e2a0f15257d0811f6d88b490cb26b5e07c93ec33222e60983f8260342bf9fcca503310fe612937304a611c605060ca63a9d37e9ddddddbe5e9095eb3b1aacbd5d60d6581b60ae7d21a5fc852a30663456ea0df529a5d43cc99ced609ed960f7f0581df62a9ec180ddb32cb963771864f2f2f20b7d9e5bdd548b5086b2c1d6017576a70fb0009a2d4d50dcd0758ef36ef3056d70f754665ad2714b688c48d668183a5854ffbef285ab88491ec418b360669ad16c4ac6264b2925c693b9fb6129254bc9bccb2d999953cccbbc748b8dbd1bfbd9ffecb5528dce547a573567942ca594734ed93342d41871a87be577c6914f57831abd2586459459763d90858afc214a6e777168a836a4be9cc58734c2c8c4c4e013d54822416bad5425552a5ff9aca28f8c947b683333ab987906183c33333373f9f6eece810fdf517cbbab6cd0ec0c5c84581c3868f2ed5200b4c6911a02804502b468fa7600302961063016074eeca2051009f8ce828a6fbfe97eba7a42634ab041162d40e10634f8f61a95060d64bcf876a9ea7e9a32df8067985986309e9999892495470009dd4f6344d840079d6766661fa1fbe14e480b0dd0498c6fb7e97e5a55e48a9a053821e100a718be7d46f7d3aa2d90fca0ca1128925899c286eab4a4a68eba14b185a6fb61ec490d2916313c008b27545d7678769cea0898e28a1fb608f13a92a5069aa1279b9ae20a259e7d2648480a27a7262172e892c391118ae0b05ced6c704510339ebddaa8703c07b4b1bac1e5cab3733e1c704268074c18d1011153865243aedd14b0a58c2cacc86205971f10f0bcc5cab3a3ba1f5e059e3ea8c48d36653d0a11d10000008002c314000020100c08842291402c20cd4171fb0114800b779242765a381287d31c876118c518640c2180184000200688313544c441005698e0c6b33aa5cb3dc42b0d2e9319bf9412f582b028ae05add4b65f46f1dcd741ba7500912cfee1b48f2d60f5e83360c5e7cb9e68c169390e586549073e5f21dc83043ad8bd2ee6a5176725a5153c8d378dba9231fe284fe409715195308128a6cf96924b2be48fa9470c7a87915e34ea3ee4753d3eb0aed907bfa131d6537ad18b78d5a02b59e347c9048f105a9438fb9b528a09ef15642e82d1485620027a574a03063aaa87e6688d6a34e5a2602fc4b30c080f1ab0bf205e218a123203942223b1930a3aa1d8c44802264dce1e9e0d8a3d3b5c4297509f2ec43e1e2cb8732d0e324a898a877db6cd819fa4515a22ed37b3dafffc972937452bae41ae0a9d72c62ad0310ade9a29153dbf8a54faca692c2d8f5902b2d70a8de91ad2b29c5b43a977031b71dfd2b522f6a3343c4bc0d5e26b5825df4bbe68515a6715b4d581f307d1982e0af42718e02c5908d58ad6a10664499a293cf3ee3f56b1b2f4cc52381560c5922e9cfe07a60a54287e3deb07829e6d9d714fe723e9a297631cd787892b334e94e40696c1139597406a50b80b9cd47bc83a958480d073c51c862a2c4a45c97cd9e2706f4fc6d380f73a169b362523724eecc48a38a111f8588c4b4abe605cf6c24fd94eb3c130029fc50011b6734bf853935979254c8e4bfbf4fb345287e9b8a0711fcd7e8d7eb1219d81f00b0c1eaad288f409c56731489d680745329ead0553efb7cc72b52eaf06f65d4473b821c5ca9bf4afa23a839fb2320e35a91e2f354273dc833795954476a8cc24e5cc9c3541df169b6c9429cd93d5d6bf85ebe7f07ee4b3f5721d79c2b1b28a614073e5de1fce7316922f36e89b51dfda17880617a953d36351fc4211eef837fe54c560b33d0b78670e57e143bfe8b13dec949b1b53e9311610289059babf6536294d5d0d4c65af6694074561129612575e8fd8356479051859c963e785c1293e020b16c6f0b6a23455c0b9d08f886b123c230803d5cb1d51d7e926c0954dd47b81ad86ef383b5a2a86a0d326f03031870f10778fc20d0d880c9a5fd17ff4b1309388bc8b8c29f164b07865cf847f613b940d4c227752514648c4052bca7af36d5c9a3735d3aa1d8a664aed3f2da4e959c056855f0315fd5eeca1b5693d5bd02ae1d74237a35d5a0497e28f0eaebfca4eeab72d41fd1378fc9a683c0f243be1de9d7fc17f0e9793e64cd86322288149a552b98d34ed2b2441b9af7a9199cd39042e3b98932d37aaf004f7a3b4c7f57421dcb32ae6596ac84a6f83bce91768ac6ff98ed351a0616d9aed2d2027c1b37eeaee1a186a34ed04802b117bc8beeb6cf5d00306b344174299c3bac90cff12e5b7ea80616ac9412d91050e2a1626c8ca50fd254cf6344f03b072750d7350e5cc46a474739263243d17c7e64a556debbc9875ab8e79f265a4109f21711c2c23561175aa5dbe55204b60c22cc722d720308b9ddcf67162b1bbecda5e64ea354176dbd18a25358f76fde2c3af50957b4122014534d1a23a4b4df20b7e36155eaf337df7d99c5dd0900343a9e5631c668f26b2566fe67c4d630e646b3e3389158c768835c08f733d034c9d7c30d4c04a6d088f1820f2f5930f2853e3f8710f7ab23bb7da8713b60a7936454c8985a766dc4b67ac4c064a0c3307bee7528d31c2ad37117ef470b54ac4e4a4a29239d5b47a2e52132ca2d65755d4917700f6d038b6e9cdacc136ed7283bb15762c21944a2d0e6fd8d62582457d152eed950c51e319032fdbfc708a13d54f340ac87a0504e7575864390ea752cf5d9e0eef0cda79473ae70cc9199e9aa0ff1be854003f0efd3aeeab92baddd6d84b4cb7ebfb63e9a5d5a057456d3ea11900b3d6126420bcc1b1b233c49714584d7fc42a6835a3a17872cac20e0966972722d5bb57e0f5b6f7555cf28f5ba79b718819d9e075b3532b23796da420416e6925a49b9eb11868069439afa97fdb679943e071d8e3662a922b4292738181db779aeb4702276ef77f9387a3cf7843ca3595f472cb14703132c904a85d24c83e8daf41438685881f87c60661c54623e69b54c89f336e00205b93431a15337a2110d09e8d25f485d8040139837d1b975a87b76ecb64f291ebec039ba3d01da00cd3b06fd55fcdbaf8def5c41b7a5f31335b682a25cbb647d92022a6973a73d01fc5fe11a1faaaf6dbfc35c390561823225f4a884fd732782732ab29e45afdad647ab3b9479fca70cf21fe326a2e1222c9232558c2f60991f460a04d9906d369b2199698f09fc701c9d4744b379304192faa60d7c52c68b5e131f73a3ffee16ec7d18d1ec94fccd76ebf72abee30a64b5744a0d55b320f0bbfd4f3667f7fd85636e236f5bf9f4d02521399b41b6a2a54b9c670cca72410147e8fe90a8a9d7e89e7b43c4ded644a6e2e03415a54040d8283be5252a45127b0ef4fb7a95a4d2d38d1b03982711e4b510b97e22c238a68bbfd25d0a85153fad251bb7ba76b4b0c7b3377535066d5ebc612853c618367f3b28c1bfe26f334fd30d96feacd75a8266ca9fc1444269ee9565f10696eb9119c1fa4190cd72c3299f052189c9dff2f7735720c48992a173dff4cc3d77fa9fa2f20732f711b31d37108c3c4ce4434a9dac8c95dd4c26aa5ee905457f64882b300846be113412ee46b85205eddc8ba08976caabf703d3ce8290495c7541474772c2da76014756640c45face25631d16f1311334dac102a9c9561a799be91f80e244bec9bada064efa309a2ff208beb956bf2ec423a433acff14aa74efa22293ce3dad979504d031e5fe2a9ea84be1caeba4467cc67ff8641afa963fd097de19cf64d5480fe462ae9443334e42a4d08f73252833bbfb9da8afa2f2a6b86868e6d3c2dc65e0834b0d5b9a0d52450b6bedf28b0329ef9f1c36d085afdb03a33a3fb424a3630bda050fbaa942e7fc8601a3d1f24f85ebc000120db80887aa6cca2a3f5ddbee2aaec431f48ad26afb29351273f068dec1a80e153b8c80301dc2cd9a1f5ab92491ac6aebc7a459e68b8f91250be6e42df3a978830c0ed90871425f79a879ccea0b501634229cb21a985ae00f656db127d41fa291cac9423ef86d1da25004f4d632eb8c688b7398b492dca06cf0e65692c79636bd41b593dcafd80a52f20aad6ae69dae1c32db6f3c6f215d6d418e3d82c10c6f7176a47004078fbf8382d6691c8188eedaf7560eb2a97223477d02afe33e9da6969fce571ecebaf860256684368f4f236759bd91f755cafa1bfce1e633327a8533b624854cd55af1dcbe953ece624fba5de3168e6f0f10e36e13b380d3c77cca6e589c8a2f51ca0e6ea70148984fb637a4b1b7d66f065d7f139b5736ef53eab444f9dd7699b6b90ddc7aef141d7a5ad61c2663e68ba3f21ccf4c6443d59af9cccb2c69b4d0cf595910d9782d1ef2bd144e1f632ef606b4766eda86f768eb6f6b7e857548d6d9c48ec2851cb2cf09ea28e9bed262addf63c170dbbc0ac57241c31b72b36b2121f4ffb5c1a5d7ad6b2026837c731a77d72951bbd8ae0db776fcd5022b2557ed22b8112b4cc5631df0037f5eebd235b1efe56709d8f369eff715560e4b2a1ee7624b64cc1bbb9b487e523ada1ab2e4ef2c92e627631d32aa4af5dc46ea14227ee92902fc61470290f3bac6e0d4c25f74c523e86ef77cbe8fd0c28b1d64cb3fb4103ec1ca02b3e76e87fcdaf228cdead443823d89e6c9405c23fae75c0a3c7ef4ef10544c1cfd64a11a2f8c348b95c95bc49e929825c6979d33f10bfb627d9e6c1d47fd2197aaa53567c2e28efa9970683902b82bb31788ce830cf0ddefb38941edd5a57c1f04313b1e95e6074883c9292df6dd9b846fa962f4060d03095bddbe3fb1c7b18ef29930bedae2f0f956715fde037f0b9e2628dceec73e77569a8a1fbc6f20d75d6506ede4832e86754a95d6721165927901366cf35205b1b407d0a648a2e16a214183ea4ce2f5ad8bb1c33a8066eef3d2fa0e72e019a9e5f282c269cc1c4327a959c48dcb1512e8dc2d73cee99ad81d9cfc28c6884a76fc80458b5a5bfa8a3f50fcea49479baf5b4465ad6b48fa57b9fd3dab8169e28e4c42b24bbc7857096520e69348a6be8e984afd2d6cf7ab439ace9f77a8886262dc6fa5ba3f5532aa230c21e7ed83a3c91c2f7342eeb14c68782b6040fa6128690c005f5290e5aeed1a1427c423bccc2dcb3a8c8091c12babda9404b7c84904c9d15dd86201deb246a0f3abac6421545d839752c294c3f7cf2e7fb1fdb45bf34cee68bb136bc50c94f2e3c8019e8456d05e54b5722b51f52f75ce5e6994dcb98d4e996494ce5fcf3a98b87ccf696dc204ae1fffd5350818f71aacfc8b13792ea9fc568603ba0a6a7573c59a12a35630d8a1ebec439109d02d4b6863225461e53cda6ae8a3cef435b1018da31f4fc593d1bf30cc626d49b4493ac8f4e8049628001f044fe9ce26e3a8ade88bd5283c5357c00324bec0c3984d18f662ca8cf77380b931c55a0cc5cc975ae19e4dc7621c836ba72b3862f7435b46a301cf53dd22fc1204f773df9690b6418c10dfdbc202c4a73da8adadbe9c00b7cffd40bec32b4ad4e70fdcedcf159a9855603176174f9a788754cf7a90a217bb70e90c79407c32f121d3c380c39d34998bc9f75548ca2e23cad8f7fa64273a0d21c83ff4470d20384ab53e1b4e04c6bb596c95e8e3061863268519c952a67c55d0ffd4a776004dafe6d75b48be477eb11984820696655cda5d5b0a35fd4808230da14bfc67666aaf44de97192570004b243ed5c87943ef050711fd3269b7df390758167f90277c4a6925ed95b63d5e894f1042482c615a4b49b68a4779db233c6b5f4a1786b511cc91b21dfc8d506566a3045bedf7de0790ad31ce49ff8850f8fcd7719b04c890e3c832fad91eeaf16b304dc56a35fbb7da24c192aebdbb6854df704442530168dd836cda519556109c3205124e0a2566cbcc356b29b999f58d2f83d689ca80567fd675495e64142bfe500585ccd006f5f0b37a582736d1951f87fc97926c678504a3c120d82963e80956ac685b4ae3b9c16253700844efcf70492964a797905eddbadfed870a39490df2fb41b6c1aae7bc879726f765398f158b7893577efb9640554d35ef5d4d0d2c6697e18656c4f2972766a64ca39d8ea7f873de91a82bfdaad8f99821ab881aab4326c3aef86f948e9cc9f223c0e18d5a108d65cb311a3a261b5ea06a0ff2a2b2b8658b752ac5d96baa8235e1a07a673a79820eb353073624bb7da6a7227c213fb0c3da51f1d2015abf3ca600a367635ddb904ceed4369b87a65412f5f3c9f6cb6595931e01515d01fd749d6d48e03cb02178d30c6656717d86476b3c747b7ccdca7fb1a0f2cdd961653a1f9516fa54f4174429d9fd9b353466ef1413b5d8614618d392da881065cc120d2d6966af6291f6770ef2a243ec97c73694bfac19a014759c5b6dbbf45dc21bb5d1eec5f3b8746f53f9224412997ffbcbe3082e6fd023d8064a88dbb199464ba5eb33b2f60326772cdf104a5188a0b164a036f5f3fc8ab1e8d14019537cfa3fd5d3d420e1fb8aeabe8a123bb092f9bd1ca8462c2cd9b00b11ec1934093a74c094e4f86fa1795125d2ebd9570fb7196030963d1b91787d61084d8e486150ac8c6e724899464b50be22d664f541dfe983149fb450424e62beb2ef138ed5233d8b5987cde37203155482f5bd16c68c29204b3e33cf8748a97054bc0160be961233655b11b49edc3beb86115c81bb2e9802c1032769a76bc2eb9f736efcf8e212a0f2f8954142cf086e716506a5854d0c8627e312490bc27e9100929a47719091e2e0a279b876923e1e339fc2c3c7af0aa864d312431f643b9b5605ebc6344213c3b13d0bd5c336853503d7704356b5a5890f0381e372c180e86a2d5ac814a5ac19a50c9a23029b8fbd34ec80440c6ab4d8258b3c1c739202dddf8d585b29b187f6b4ce8910fafa5a6cd558b84145ec63d2c80eeb68d046442a2d93d35e844c23d5244d99d264ab2c6d80d7f8302ae16905ac5a93260d9c6b5521d130917adbcaa883c068f6e64dc0af7cbd89d2a762309eaa025c94baef6dc5bb5f2a490dc7e4b2919e412c930b08f613289350c4053e4582ea79d5b7d2e34086d670a982b1f0aaf97be0e126de8965c2c70500af628778cd37de65bc125532177c78886a4d3a533a66376380b2f4eed778b65e6bd009c6377f0972d2b86aea947b754c8ab3be5cdda6524d5df71dc28e2ba230c9b0284750e5806450eb782a58e86aba2da446dbb51807d2f4bdb89a41c2077b3349a0a949ae5fd5ed4464aba7ca855bef53f02810b8137ebbedbfd815873a0a75ff811cac5c46fcbc0e3a2bedb65d583eff5657525d0f636db4b435ec0d7906bac067075c3dd55c1de8b351a0a7b42b4ccc9897eeb56ccb724a5320228f0a1f25c7122a5317e85edf05ca6e6423f6a7c8674e4c78609cb35ad41d2957a22328e6af3332c06c935bc06498835d8218768f9414e1a6f743226dbef8e3d78fa58b930990b50dadf9852936c899853f75a52e75ebdb31224b765b986b8801e97607a13bba229086daa1b5fae264a16ac9f2e9f9bc25343b9b35ae3983c97f89a481821a3051a3170b53e8cf9249a9c1a0bbbd101da5cda591c033604204222395b6f294ab90a884aa274b814dd1c1ae48606c74804dc59ce885522295aaff4512d3084cf02c9f12e423656fb81efcdf52c55416797a705d2f1b1e370e142073303e509764e95f35477d499d56b40dc59fba9d2471812a2e2931d3d39255f83d7c27529938b7c35de342006600514af6bda777c1136e261c1b51101055eca559c9e7a65b3bc52820249c721b00ffd5533b9a25adb83f4e23b808aec7cc2fa01a0b07acd0edc93b253e145edc9789c6834f3c2a79803b1ac45645f1d15ceb3539f60e7543999bc6e2e7950e38e04026731e300ef2b6efa91ea67527c4657c7cc299bae972e80931706782aca42267681acca41a5023de17f52963a9ab45b29bb51c9c58b064b8a80e00434e7291d05459bd0af3f5fee0200c17c9798128c9d97ec58ad3f1390ddbc1a4bc318a7c81406103639e31133e33dc8643256ab571dd858452581ad08d25c79ac5f0a6a54a860be0118829d87b14ad838323ad9760e0db91680adf55ef890cf053a2b2993ba4b4dab1223bc808f758183aa8daebc1202b204b55118e5cdb004f6ab3ec8f306527ef59ea0a1477de5e7d91f111e3339ae8abf212eebd3cd56c64538568f6009744fd2fab377ee50854314ec53659f44adb4bdfc8759e9be4e7593d142d1e2e971abb24baa56da1ec09399655f83a3f022a9a5e28927272fc099141921a819bcb70a0164fe8de2a2639ce3b5b1adcde900fc1316367c463034311663920e20ac275eea534d6e7c0cf9b0d225a1a09b6bd4300b502eedf8211506d5b9167a7976f486f374bc698e2b961ba043a62b7f536aec0d080ba67510077ea7b8f6cd585555b063e7a8526e23fbd36c8afe18bea869ea15a597749d50b5223589923ba6be0e6ec086576c34267b44befa27b4733edb37b8b686cad3efaf284df6b6e0016688f9f0cc6e48160d33db2fdc0e1a0d62a19bd681ffd2f53a7e3c36db306a5e04c9a3541b3e46a6021b975b92f5465bc767176be711cd09be540cad36efede24633cdf194369d457991d0daa57ab7b827d37de796d0dc7e7c33640cf5389a6874ea0a0e4024d70148ebded2e00e763a2007f1a8a50b1f32ac30e7f4edd3e00462ad1dd59d4641a160caec19aced3792839720456678d640b586fe0a54e26fd6446a3d98e6c91fc0dd40677bec04ca65f5e1262374d4919cfd5ec49d2125d06c169fa348fb0272645de60267c57e9750660e1fbda2f2508c94aac41879f27d9ec1126f647344a082fb28ff41672b54a9e1711da109322a0a4d40a37f08094fced5b6cf026f524ba8242a2c55e2c4f7224b7f9ab12a845facbe9f3cb5aceec0ad46c1f20c9cc177d9f108f7a1a7497312a2913a4cfdecd7aa90ac63586c217fbe084bf9184909c138e0d34e44bf782b3a1bd4ea75e05945da8404d0dc2a45b3b644341237f4385e5da940662257784f37344faf26027e02e64661efd94a8990e1fe6f93e2333a59cc69f2ee3a7b2fcb846a0cdac1a1b46e65a97e2be0e215f52b9325eccdc3da940280e700d09dd948a5c24731e2a924abbe95d51c9bf227291dea5d3d7b515b5e45605ddb5f2326d3bf35952f47bf5937ecb04c27940cdf01d4a737ed4b2419a323797265b148630a4c03e5145e37a8f17bb7406d8472d1debd5c99a8aa4278d27c46a885591dff8a89baef31319fb1e6e6cd2deb0b9e8659b0fd0e128c7c2e469e874fcbf8034af3f023dd0b8288604834f2b8b4dfb913b827c636a10970339414df97df99539089d16468144effe83c2deada7ed052b3ddf7ebe91c7080ea93eac2c376ba5f85aa3125cc7a9771890fbeb5976999df5f4e3feaed098e501a1ec0f19d4c0af262f77e60793e7d47990900ce5d22c63339e4febdc240c218c887c3c26fd9ff6c4930b967f4e3b488029f16b28280da5fd5bb81c683973f79fb06c8fc3c5e200acce4e2aab81a8e7ba909eb77bc33e9007758acbc2a6dcbb404d1a3ca05cd82bcadad1196377391b4d90664411cad309bc463af7f68745a2c24f683fbfae9e9d145b2ff1ea7322d84b55955f558ba19c56e3285f94dd81a0eb433f4aa877cfe8da4e6eb4f6e9e77ee45c318100affc37b4c4fb8bd54ca90c7acaa618a756151e22360e54fbef451f38132f22541fe0116f0a7f791e3c41d70a41240ca6ea7f1bd9ff0ebfeb3b976311744b12d1fbca5fbc252922761f48a6bbfbbeb7d8782eeb8fdf71272273e912a5ac098d07dc0f0b3d23eb289771f47adbcabfb9108039324f90b64a0553ed8079168482bfe99f3545e4d05e1dc5f1c22a52253023324b59deac3ff058a3e31115278e00b3b2bfffb0d53ebdf3c4a28870b9fd63b442c8031cd89d90a0d2cf76cb037a1deac99d75efc2f96bc332451256df30be07f4c5cac10b790e250472b4ade3823a4ee0c63034efa5b10ee0508284b7cfc2d2d7fbb1df10d93941552ec7e3429b79bf9aa941293262a11275eb22a95f472124237e266bd3ee11c81c646aa956fa704bfb3385a921706fcb6b139bcf312e0f465020c1d735a7cd6833e661ee83752ca6c81aa10e0e1f8ee842b916db99a7a1eee1b9a2ff53430ffdcfb097df25bf46e792884752ae8f8fbf887b6427ba117173ff62e10c4b4b8c85b8f1f173abc9acb89f22ae1e558d326925e92ff818f3f13cf7d70bfb8701bb3ea05dc63e7d44c1e75a854adbda6e836dde30d8aad80d078757762f55b22914907fde37c02d93f6c85614a5c6ba13608f46c08f0daa5d5db5c9b6562ed88da4377f8e918b12522a8752921bbbce06d974614aa837b603717450f19b1ce72449809f0d8925d14aedddcf3ec6bbe9abc2464f5b63b1b064ca660c984271600de0f499dd449955c087a8fd5fdea13ffeb8c1799fef56d426d17bed8bcdd8734c70a68ec616a4701164d959983f49141cec7a41d6968a6f9cd26f9bfe1875d38347a3c4cc0cd4efb8e119d63c0b1438d38de57b896680df65feb0094068fce554f741e449a871a4f86eed838ca486c32c36761e0b0005149aa8d4383ed8e8b8635a47b2ce4d0604bde3ca29e3e23aac4c4c7757924723c23429aec53d5238f607516ed62d3086a527889c56ea6aecb138fa0b9fa64a5f83825b8eca4a379acb1ade2386194803dc05681ff6aa397fdf9c0c646a666f252cd0bda0b8093c3dbb0d3e1cc8487ebf6ce10faad1c345abf88715437e50ac6e59ae3569ec6e9ad9d6f257cbcb02da5404e751be6e2b1f13ca2ca5c88c888f45d32fcf2522d0f607284151ae745540df86c081adce6305107893d96ae6e85af9c85674857794b47e4bc689358d7ff11590d178175a3b866bbece98649e865a735c191e3fa52b83ebb62a275b9902a093943da53f33bb0a6c39ed7e46d8f2a4abd66b676491119ee676456bd635f76ab184209adb6dc268c1b6708ceb4c8d79bf9574e56720da20da5d43e7238925b10bdd2ff0c2edadf0733355f139a94452f9aa789b3df7d454cfa5d31aa3288fcea1e8dfce527f81182fc77e3f52cb09332303a56ff89f5e832c9db9ab03fe8dda02dbecd5f723069e8aa07627afafe0bfa4e6a1909af3d1621f2193ea213dd88dd66a4b3cf459d12072836ba7fc8d704522ee7ed3cb1601ed54173c6e00e25eca7581b7c7cd7e17afd1b4ad36014cf4c3711fb349ee933e80ca75614201c1b890525ca2fa78e5d493a41a94ebd04a0dcd21318044ce650dbc7568914fa45e840c8cf8c801860f32f7e3430521533a07bf609eabeab99b01a4cb61cfd7b18db09e6c7bf9bb97b1d19686e253144a07de514b45af695cf0f4488f09ac138ce202bf0c1f0a5f5d57db717872992052216f98fd61c5910869ed36127d312e0d89b29772356074e450531440d415dd33dae8b1308ef1a73fe675e2bc1722c4409786f3c72ba63968c2da5b4bc868d0c3b7876ddc9c2b9542670706643125d6c560f7322ca1607b40e22840593bf02ab250f4cac7f769be025314b326b8992fa8550faa9cbc5035062c386f08ee4bab82b7eb13f9f3d9e4b31fa655b51f1d07444a820321f6b290e4cdf06f1728e206782af0c93de51c96198ea75244a77d828f3c0025b2c9f0fcc700c1e704193d8a9002c8567edebdb828780586bd4c29d142348bc33aedc3218bebfbc0524f2a566e87ada9872f0dea7060e0e404d9ccb32c29f4ce50ba44cbe70d1cb0cb763f65679c93b7a9b2292e17542fc028734eea7defd438a41101e413c5cfd7b1bb5b22f27813783976d3e507575b1c77499e0dc5a86e3a158f813f990b58adfa3d497b3de41dd13a1245be8e2952db660f511e513e10e7a62044d109e9fb5cc81a12e24f062c169a41face3110639c955c9374a130b1017c5542d5ebe9ef58a6964bc2c6958fb121fd534df230288ac1cfbf436f0694185475c4724ac04009588360f258e0b6ab67dd4950d15983919d7e33c1bc53dbfa7e59e1de258a5766f930c56f27dfb8bcd325807fc491205e5032de576593f9014c3dbf27d35912a63b27dc3b5fa3a78204df24194f0db9c84ba3fe5c62d9b4e35826a1898de814d5e8342658d8e1c889860f54c7fbb3470e720bbfda7a30f902cda0b52489d4e3f33a0bc7533fccb6e0cdaaffc0d6754858eea665233fea1ef3652c2d4e8d6560b516be7352e311f80803edb22e636f40382281334b90cd90af1da07e2cd4509bf0ac981d917b0373d393de87db9614eb786d00c71c52c8c53d77c3bc1ef8a9bde6fed6bb8a327c21623900c25e08760b05727cb03bcc6f0370e1701c27b5e8e6c96c46252057883605c58e473c1ab366cac6b8641d1949301033a36345c0ccbd29fba6e751c1b40d1819c282f9cabd3d25c9c95a662dd3ad4c73bab19eca7f1553642010f44227c23dc9600e62e76509b0564d9a2f851ac3e18c846986c7f1053089c4c5a2a2bcc29fc22cdda20ea47ecf3ad9d04d4815af97a96124a07ac128e0b25fdb6b6026f2d64321a7a8ce0c42be7c92c8c113a847b7d87b6b590bb9047252c400637d12ad8dfb5b8896acf86bed06957ae9aa53dc8d97a946769cc59f84e33fd417580ee9c4e8f55a8d3af754a985cfd4497af501a3b2874fe6af37a2d9cc880f1f94a80315c6cca3d16d7ef7781c5d8491946761f94c64e2ca4cb8a2fbdbb8880d238c97561348b7adaf839268fb9ebe1a635137ce08767d20e43e63ef63910c20a14bd5198070690f5d9f92ab6d9fc6583f04b313a370e98e7d6dd6d1a6712fff4f175085af614f5ced42e0457d4edc295c279b971d8522a50bf246f45102f0c6f171966bb31ab8503c6c181d6243f47e7f637d79ddb87f15fc9305d1d2b029aa66c58f0ad298b3b9d51382c1e45e3c42b821a92366cf4a46920726d30e035b998364f441ab0f404174f2afb845c8631cc99c32fe470cb260de33464c7293f60d86999de5bb6f4fa6760f14853d25f798759f88e4d0a9c3709565c54b87f05c38e0539fe399a62807d48cb73f7898bf56f21e120e9d2194a955e3b13f281bb1e1c6e5f15e4a8f87232271ae95725d181e078012660061a93394b40d24411e2b8c64c13bdce0e7a8d60487d7ff786bf19ab287da4887fe0426fffb37d3a5c0f29f589e8d25a691c4209597316c3f8e01a4383c6d6f1a196cd457157fece3a81acea6bb98e263c02293dfbaef49a9a5caea0bcafe146a08d7d5463e6d5940bbe20986b2cd83d9df32d9e2837ef2e0aa729f2001249daf924f8784a74dc2db955c81305a80f03506ec2dfea9fe8b928dbbc851980406c7c57482708d757551aa5279ad527f68231757688371af5482f90af33dae7f8a22048eed5dea5013cf3196a4a0a7bf9aeb103b1ac09c0df5f9879c81e8ce0a1c786a12840249864b1bb07e98bf3275a3a5471f708c461cce6e8299f4196f18e81e4bc4c81a9c140e8ff623031deecf037795cc5d86f719020c562875f6b3e53be2b1efc96574230c7ff0632e71b808897b9e4a4452fc4d739f65da69a233f08773483f82cdfd58d4e983d8efc57770eab510848b99fd3375115c8377e6fcf665353ffb0fae2ee1739a65c20a4438608d7a8a8691032daeaef82f628f68b3236f9d4036b61cedd569816b2311ef022683e2f0452393722bf43f026f592523a0cd056bda47dd70f0deb2511ad6e628ac666049ac384e6f7bd832e29a406cd56a67a3d407cf39231a8c45d39f8c56debae37446b720649c696612bc4522f446be4d4f9ed9f74aed7d882c29327ba70ef5e86e82acea22a0f7c3f3dc8c8891ad53be3d4e539316dfb9791d074604cac094c26103968eccb67d1e06ed947299bf55be1195a6cf5952843ea525d3fec49cb8b0fd44dba07ee0af7a8547067a39cd8cfa8c5b5dd11e5c2baa16989d22692f5fe728bf864e49a294b0d1a85eefc3661677d5b225f9eb1b94eb48d9de05198f1adc06e71b113860c30020d662c53b7697b39b15ca25545d4a60e5a9d87378c6f015e3d70a1ffa4e643c8e852dca007dc2c060250a0890cb0aa291f49e97bb74e59a0a3c42e4ce8884495cd6cf7a379012668db531155d3a84e706dbf33e5ed5221cdd1ec12be8c9a51e48451b3690a625eca7c55b77750d331df13ff7074542134bfc581d47a68d58d156e425edeaef011c65908aeb9af58d4fee7f717e29091376fe1a8fd3638cff02a8600d0feec95dc16a6f758df6ebf2454d3c72985a17174b868a218b168b52c36fe7f1f0a992483d886b4c9304de0231df356c6c9fa9a353acb455443b26833ca4f978428b6db0c0790f61abc5941c8dbe2a6394d3774dc6fe1d07388ef4b67fceefce2832cb5975305af0ea0e8dd3ad3836cd2385260d4aeb8211f349b52589bcc108656a6d3e337314c6f1e204ebf12e0adacce0d707387d6beeb4e3855810567a395d30c1791af92b49322f9c1c9d3ce1365b689b3e250f2fa6667d11600847515333abfa1238e956af046a9b85d11f575614451d055ce012714c7ca7a1e575d23d30cdfb4e7d67a60fc8c85552c7d64325dd048e0180fbdf50661e43f0eddc124db337f13b252e49545f1bac18480209614d3b10839766e0df6b60f15831e0049bfc3b1e6a4f87a36c0c224a95e1599c9c1b2ed91ccba5e0505e953c867eb098c57f2613d1fb594a85e08ad41fbdcc9fd39bb7fdbac31336680e914aaad7c79fff90b573c648ef282539fcd275d1d0f1927089062fd11e122da96f6bf6458ccf2f5424af20ee6164cf960a03e775313a29b02277a94571aab5bc01ca1cc62c88394e6c032ae8cf5e8cbe856a3d92088d50f45ce4e1f0c02305f14d2b59ce3387271ac28a03a49da1af1fbb4ce90c30b45ed85da61db1679c83a26df00c9491b683e184411b0d8b1a7ce1d859f1bf4673cd61575d4a75957e873d3a057561b3212a51bbc30aefa5933b9b36572e2ff66e30e007b92e9bb1ae93f4cd7f53c9035d454262a42051e8c031fed6c6a64ab599b5b233a29573efdf44eda844906c97b3e42a1c4dadf669c95b3be739ec938813ed183e902143eb66d39d3eb470acc4bfb12a607b626ce65356cc2a8f5fcaa382bbe1501fecb084bf3411a0b5e5b1768e47352155746bc21c360b356164b29e5e8ab61894fb39d02a63d53edfa05952c110ce3b18a6ba1d21efb41e62ccab407df86919fbddb939ebcacdc9e1ccb6dd520256f8f9075661e3b086c55550a168618c7527524e9375eb90283e40dd33b41512a6a49f4f8128286a558025eafaabb817f8361f73c3cab45d99cec08cbfd4384f08a7a9ed8356fb9a539b4081789935cf1cfe5eb2a84de36a0158c1333ba465fd4e0ec2dd0afe1b9d20c329d4188f072b58c546598730d2fc734003dac1d1426be39dc1b98fa113b87fde7ed24037166a116de0fb050b71b42d764e66ca6b85f94ac8b3e866f1c0a82e5292793d8ad4f5495997f5a12cb3d25ec6fb4e264f6629156117ad6fd81023c175a40c12e22927ef303d9dcb94d9dbeba388b3fa84e7d7a04ccad28b6a250f656cf4484967271544b2bf0c80a0a244c75b216224306f06a7a121ab2436d472483be67b460e466eb680aba05aada28099d431d776bac0ee22ba6f66ca14627ee6ecd22c6f3fc2d227f0374b59617d01d5ee7a72ba0cfa82190b03896319fba673822286145dae33bf6c82820b557ba0ca348362c28670ec28dbad559bee89013a9797816646618c72c142433f992e1ea091474fb34613d09e0bcf55566861f17ba4d16f020c1739b393afe71887c8b728e71124e88c1694cfbb046f339ee0b349327dae9cb8f694144fc0986bde1aadd92679c967f51b0a0403eca694f8c414ffc0afa88a3aab1b2a32a132297f427d3a8411fd0614c1d3a4781b2b583f4beec088205a1a6c8374fb4f637bc8702dbbe4d6a065aa9dcd5bb1b3fbe500519be8dd1fa9876d72ab0ca5f287a8cee695e89364b9a24ea883081ccd0709ff4646e61102b07412a241824fdc681c9998fe74085db512e1d4084a5d029fe025bf994c1d5873e1ebfd3677367c801b6761bc8161e3d3becafe0f435367da1483333bb803f67485b3496e0ac71c44455a51d85f54601715bacf95c9ed71aaf36b5ddd45c95e86dacddb9f41597d3d36f3cf6dc42a2c1001e33d06e9b8e3ac623dfe2ade676cccdc68f0928a36519716f2b694d26c7f14d149cb7453db35480439a2a53bea4a21318532edab20f52b9e13edca8398a620470fb8e3c9c5bd737bc5098926738c3250d89f984f0088ac6c4ce61c657c94594efdae3b6a3c8ac02b60eff847ed8c4ec99fe2a927e65605f05b5496237952a1d81960690789ec7de7ccc07d19f136a34a055245df5ddee97650d898f2ab3c2e9ce8bd38355c9439ecaa66e7ba35d0ce846b171081b74f78c73f3f0dc6f13063a3aca4581189601a127c733865d7089905a183210f771c1aa8fe804038057598e448da810400576dc75c140f40fcc7075442b511e78fc4b6afcf297d7b08e0f9d3f1a3faf3931315817a3742af5a8abf78218a4617ba9f8ad7303ba82051c055e9ea77aede02703c94f8d8fe8bb67586126f0795364ce4b77ad6decf390329c712d2f3117f5f59eda354dfacdaafd7369ca9a5ef054614e7f19589d4dc8a77f153f1d521f77e6cb251eacb7830ec7f374e9bd2736f8568be36591417d82b6ed1de3b6bd3ed8f8e247e191a3b9dd6dd32e30335e908dcc33ea34f193947a4b0da279e6dfcc0b74a1462783e4e602aba55da0f3c1ced86c8f20b1fd952647f12acf0b72806e32d40f8746c9cf9cc582c5ddf48955a803887328708e6096a43f55e44b0081b54dd9ceff58fbb74b334eee9ec601e0dd5871363e9554edcf73f5ea05f03dac65c8c051d2d65a28ba9e3b39453910682f0796fee3c691f63b6ba3587696c8c4936ed7583d9ba878b5fab4806027373e69d35dd1c3d6d986d54968ba10d2f2af6208c8279b9b0b0df1d9868ea9869f327fb598066d9d3da49a9933e45c2354466373f03ca77343ae403bb68676968f9f223ae5d93731b6d0d05441ddb6342facb349d2d077b1c362d45d66354b1c3a6b8fb02a8642a591d7719842e5659960a9e2c24ad468f627cee9054402e537ec49830bed83868e09593ea34160d285a275cbb9dd80e7b56fc936f517dc8f19274767314b390bec440c925fa0ddbe2ea143871a8c8b7b2c971d2e438ece11cd3c9515b23e2a7a8b7f24a42d7d875ae8c7a3ed17047c702284e45436ef181890e440e6b46a952f400715c5699915f5994a37f15e65abc20ad2a0ff46cefc06aa95e2154d8a322cf4f156ab47b6b9e850f7c3a16b38095d705fdb2056bf8e49e0d1dc2f5c7df9b1616120fed21d032c5a945449e9af294ff1426db42d2e7939545cdd1dec56d86129a82f0cd7e08c97e76b87b044abb3e8e9933e69fc39e603de0d1a0f135a693d6df900aa188fc1648823b5efe00c41241a26204c9be3639d2830eac732445043f533887c7971798b9acdfffd5a77cd8994d6efbeb0d31698df85d1226076e1b115839cbc927b2d77d4ff6cf9f5bcc37427dbaf5adba3d89a516ebd0afe09384187171672c2886b571caf8fae8cf18000d75a984835c037cbec110d00ca5f0587394bb24d3780f1a618052ac29ae132e6367031bfa7facf22e1019f78a8d4a80ca043f0ed2a0a62e5444dd6f184ca4adc81d8f5f369bf2c2785465149f0b8614c9099de1d879ae487c677c775546e5b337d5eff3cd8caba598c3a2be9be8e8b7d479f6138de94d5394473038601b601be8dcdeba3f6419dc2ea19fb522319b519404761a12ea8b447ec83e6fce0a17b5d1213314ede26217c59db0650fdb1593ea61cd6c39da15ad9275d977a7e8a26566b08f47255d24a59cd3dd0fec2857cf5d6e510660033177dd40e5f124ef849c137467191ea0e8bc60b308087f634eff261d9c0c198be68f26c5c1073e05bfb926d91e8c54b2b2f88587ff85debbfeb66955e115c9b1972bab2e0c27eebba0de07fcc31c565542274602051b7a63270a3a95579a3e3fcc0e9b3fdc7742ec3ffd6e903b0ae269565e465decf7cc509e862382cd224b596d4fd99138f9d542e41940a9f77a83192b5ae9a98fd8b1ecbf97872a4feac4167fcc2fddb85b835e2de05255d1d4333ccad2802214bf66544847e5e511f8a5c336458656aabee41c555d78b5559076311a16ab4d9408950bc106964909e485b5f56313c55a036f1294d6163fc7a113df7aef7fd5335bc058901c63995844ff3eb1d19173861aff782edb57f710960dfdea85e36739e3ed577340f57ae22f63cfc52e765455eee96bed8db70b5f0086d1f4e98aefe6a34b39c914eedb597ff65244ed01bc5ce137330655262452a9bec8fd7cb2482069e950e0c1d977c23c4ff52bb6edc593399333f47774e3129281829878991ab8d273e3bf74e63d64d18b1e8572975b29e08f30d3aa39ef8b457c10e277110894895934f5210856312f65e0d2b524365934d1f8c93d64ef16f260cc1d6bb9588fb38fe8222db84b12e167bb39d3b8f0680e74bfd64d87afa5136857b19a3db7889445ebd9107b81b1118016f3f6ce905c2646bdd9c2cd656f95c92d5119d0c04e09b4baf568257726e07536363ae198a6d85af0475adeb20190512321cf9a2194754784334ae420ece1ce21b42240f5945dd8311d3d0b15c6ca06e0064eb5d6b9ceecb1ab2d93a8e367b733362e31f7a51eb99ba024d00dd63385038499a5691653e2f3b7e61ced6c8356b3511617cb6a34686051140d139c98dff7aa8ed4b3fc8e5e194d300bb0a0195b7ab61e154b742af6e2f31eff3e383e104e2ecc6f54278bc8b37c1218c65b56c07c620f3ff6c352b52de3c396e4acbdb814f663ccf11417fd94ab7b9b6e8153039dceb56ad850caaf99efcaa1936234a2654f37de936a8ba62df22f10a8ecdb54db27536c4a3f55cbdd35ff282b1d7c385b4db36349fe66bca7cb9108ec7e602260a9c63c87f42213cde4f532466cae048fb6c06d5a8e3d6fc6585d47970a5b937549bbbffee5a77498c029a36e37de83a6c2189a0bc2c23f43187a71da475a854c9461a2beac4f228148b9220209d9b4e4f556d69ece8e69f1d331531414fba3c5bd11a4cc5eef7669a4ff8b5bebd545c55b44f5e1ffc5de951cc5d3cc14ea1acb355f538561dde127a5188c12fa7c65ad109a1130d8925d09f0f81e33ce0e83d184b51fec7dcbefd7767a500fb47c3d0023ebf3b1e36a2b96000446ad4ae48eb33e7bbb9c49886d0739587853d0a91548220ee032eb6185c325a215ab2b84edcffe46f280e199417d9baee47b55d49752f0b4574f4f53a5332b27d9198211fef8b1967901d65de7e468f98d7fc6580fb82024e189b220af85d2066fcba3513fef00b8b067c690147dae67b786f58fc25c400c5d1c0c2520ddda91185d7c33a39febbb984169c5e8c1b836a9846f991e42172614e832532087a8493970261602b19ca521c145933413c0dbc99b6e74b5dca38e46ded63226814ec815c795056ae2572c2d06cc143aafaecc6dea3dac84ba1c793101744b0e5ad59bec14c7f58dc44ad8bc197cb477f2a682e311d9c355b2eea3bcfb0f33ac5b87767908f31d208aa96f76e28ac7bf7576306560fbe1508b5d62eaa2b99dd97145aed65b0b6b8cfa37fbc9dc34a4d020243628f7747ea5b0fa85c936b44918aeac077a8f6b392a88eef88f0fb960ee0a4e0ff9a68182c67f5f2fcc7c45cf054735f1691380fb3f8ff6ce65db1313781a20cc5ca475eaad2401ef343c90888ff0297641dd82dd35aa1b25475d4c48e4263a34ffb9c2595555f4e795e9c2e8c74660af84e6e8f669256b40f9f8721f50875ad014880f325a03964cfd99b6225982bf96eb51160470d04ae65f51c9c036333f1440b06e7d3da0a96a65472e68fae3c94d411d2df3d047accadb6a2b237b15a6f6da859fb8083f32ea2283c95541fb82e139ce43c07febdba8637411969c264b124a67cecc0474f927fe8224c2d5bcc1b28a93ac0d6c251341a3d53572a1dfeeccc4a69c483bac847f27a0d67ebaaeaad3db0a3fa1ce6374713c80120a645ac77d157e7f9dfd16a1c27870094a4574e81c6aaadc196e31c5ec494eb452d45ecc9d34e6f7bfda3414acea42c04026266b269a6f17ae0926f8af06910edf73162d99e9502fd81064d5bd318a5567a2b10389d3eb69ed907eb6edbc71d8106b3ddeb9eb67c147bc0b77d3b24bed39f9f384b7a9b2ca607f23e0fd49a791b11f3c83c7da97c9092704b3255a5f73420e461446dd44917a95d45b54702b1547791f2834eaab4902ed2cca159b78c391c141c657e1ad70a84bca15a31eb4c052d9eab2f5ff0f336d1fd58ba903b0a5eba9ff03e90845319258830f6362ca0e0d68eb2118c9ac8dabd3f8666bea29d8d501a58758406c727189db3cb418f343532ce1604e486d5593e91e7b6b7cecdfea00514a72f3bf23e1578c73c405471735e9da9c697b56a8eea6f239586a19c7090939e4abf0ac9d52126241cf6ab2a3c230886cfac5f0479893a2201c2e427b2290fc11a08190f057078d4bbbde9e246f20148c753facf197250a51cc3b133d369f2587fba9fac4c84b0cc802bbb95e62ddc0554f22ea4e12527a97820d2fced949cf6f7d051004456c562f18cb7e41b550648fc8715fc212c1f51b2764c4b285a12f8a6091c85353bb6ea1422b1c3b307c9a5fbec6c749c07413b37ff96d7a28aa67622f51b0dcd730ed68738b3810d6fb4c157762b1a6d403ba5d7095ef8086d0043920b4b68b836aa8582809d1767e2d6ac6e92db5aae7c32dde51ec476170c424ceacffce30570034dc10185af1d6ed7446bab546ce4be2cc0ca6a570df373383fbf843847403ba9e87c29a0667e74296be61a12802eb12ea5a4f502bf5b3310415a93ec7efc0a277b061454626d6d4174cd5273cdbbc67eb74f53a601f535370f605d601bb8e106813b65a7a2cb3a058e261e485c3fb47c217c7c50f7fd94039cdabd943bb10a08286a2182fb3a08168c694b461b1c58b2537acbc2643d6f4e8026cc5fb073361e3d8062abb9eb9c22541336df217122a5254375742e30230d60892a05130c0c789875b3ea182e054fe415e9769f45a55a06b807fdaa382c73eea2aac55e9e128ea7282a5b06ea867c3d446313910182baa8671d89c9f6364e93f64427f88e6e297ef25ca15306040974086cca602a7942f6105493afe943b32c72ad2a87899e10e23a3f7d60f41f7588f38ab6122ac5dcb154bca32add1e340129fe0fca8a022676b6fbdffc6a20ebb43c7b1938215b14af31c1e5c671754bd2f0700588837d87a1404aa53400f5745f0bf15d03cbc46bd56e20bdd3d16f78252ce53e5e2ba339155ce81170842585665747f587abe8d0a97c72041bc4d93b4ed7304e5f64dcdcd960be4311b95f6c1a44378548f156a6d4770ce2d04f7d56b6edf8b007adae472212e9d2029d88cb617683b953164c1ae31126bcd3d9dd7668579824a30b8a431510f035d4d65151224c83ef63c5b9bf494fd762e401c95c490f4ac3687bd09f6b2b50bdc7938238edaafa729610f46c12c2d0020090780e3a955c00a74f76e9e991e5d5ae4828af7b124ea4c4817639e77251fe5765ae584e674b1ae12f7e83147a69c61c659ac6abe1a520d3bc6509674e147cd7b965bd7eba2a11366c1531301dd019ad87bc51d39ce7154c3f94629c9abc174fbbb6aba6b0098fa1ac8d1139044a87da492cc7f7e381fb0369824568bf3af57f89ae743c4c91abd5916bd25863c47b7f21d0617117cfc115c00eca01ec8b6f6028cabb5f715adfbab26e89042a500b24358c603f1e4a1c4e4e20598c8c3eeffea8bd0f8d62c891ba7740b8bf7e4476764ab973ce66b0c32be241f48f27a95bca3d1527ce142d8878c0bcd6442119f1cc7b3b6057cc9c125defb2b747a39f0c7194ddc5f03890adc82c6e913333a0adf1a9d0d283aec91c746b2af76137bb740661b22e159ec59ffe7b667ae719be7062de8a06223060dd3b554500835a07a16ce4a478e5380c88e28cc0ad2774a085d6c884a6433322004663a221d1d861e4d1c84e546feb62342d660dd0d4c4597b08aa9140850dedd9461e8e49f6c5d6072ed137e26a88de4ceb5e35e034c8c3e30b91b578c4d47e87c690452385a7c1453c21f2d011680d6ef5f37ca91b1791f2e9cd0563a4a6c8531ac784268cd741c326e47b71e47f30b0c0412209442c6fd84dc7165428ee30d5246c17c8ffaf2efe1f9a0df552bb3ae95abcce6cecb784c4e81cac7715c9d4ec3b2e8565b9b20899440f42bb95798d4a70408c8c5bedb918317eb03402b5ba35e5163a28e9985feb71115a1003ef1069394228d14d70618a649ed120b08fdb4fa9649de556c2c2c4941e232806fef7ad0151d0c9fa0c6074927550a21ea10cdb44401ac400211d98ddebe7ff5617c334227183a9c2a5dda03fb4c4fc4b21a05aeb038ffa028cd11d380681968063c223f82fac6399199a7fb072fa41d0db12ee99dc9f1723eb4b61a0867eecb1d4bc3d589536ea2aeb548a242fca8d912e2a8443f06279a806df39f4755109e3513a72e8b0d1c22d8b76d426bec434d0bdc284958f9eeff0c45d1b9136eb28a1b789dbb3aab5550fad0a68c27b98845709283673f1462dbbbae324830b6e4db38d8f916c50b1d697630dc6af4298e26b025ef88c56b2caa806c5c8256609f8ace0e07f18e35a36dabc53a006033628d278deb58946b28a54c1b90e61e12781169c27fc6348ca74b074c814e868e73218b702d6784776ad663c3dbb777ceebff3724f6e95077703e30ffc479c22cf0f297fe3c5bbfe285a99741dceb72f62ed926c541edbf1dcf674ceebb011d6357fe29a034d6e456f92e99c5de59d66aa319234ab2023c404c7f3c5b82617866fd2be8da834051404b9feb5bf95b81c8caaf552673f41c6206170b61eb69cfc8453d6cb7360734486c2621f17257ea4cb72b0552d8067eaa35ace7cf0160d8874191b8c5deae470e5f33fded98e5c017ec817ed36aa7545ef1e5739517303fb9628b87136b9e602df81860716582e1421d27a3fea94285a4bcec9e841a8d9513cf7d181b8fa71c032aebc82e58be3b24da3df573ab31024d4e0cddf8c870514844615218af1a4dab2873189b77c6eefefb4faf83821b2e19763b51ceb03709a4b94c1a715ba7c0655fb8b5f0eeffbc0edf59a39290c64cdb4339add5d0dfee39441acab5d82162cd8c2b44aa2f7f1d61cd056ea1dd12e2a14edceb1cc2cb0a01ba49304abdf02a3f0ef091a2d55119a12c46c30b9940efe6565a360746216793668c042e961d8d18e211ef190a766b6fbbd3e34f28bf5ac457b427d82e2e06a2ca7ef202877b032c528c0b072fccf9d47814003c17f11a6fb605dee1223bb9326a424b46c20e2941ee3e5fb0229f0d2adb1d7cd5fed0d1ef517f13f14aa8fc0a5eada639b41ed11ece506ec7f2cdc1f01bb5043b6d848e1c6d4ab90263666e115017eef34dd2e9a5f2220e6eeaf6e0e036c85fabbfa1cd7f2b0dfd20e2ffad06ff38f5e18905e9a540cf95316aa69e4ead59ce9268f19647b053ea9d8c70d184aff7a2991af53d80f6bd9c7d9ee5a808a2ff07eb06d4a387cd4f376b08c24fb0b78c2e2494e3d095ced0ed552a423eed35e66c10f74cf2659d132cbfe09538b4c4b6085bc56c1318a5500a9efbe89defe6b4618700cbbba96f5884adf51323f104b44adbe39ba9974028d472aa8962a9a47fa410cd7157537c11676105838f61347d1ae518ac7a431f110bd28860026de997fd5c626b56169df06396ea86958ed4fa30c56ee7656c88d98ad541355e1c485aca0334ac833f0f37784ea596aeefa58568518423fc3de9fd6fad2b7e8e1efd1bc89278ab3ccb122013653467dca6dc9ef4a5e43b3e0f4618b5f745aa18e9f162e4e4ef62d14c27fc7f443725f9ae00d15f91c11a3860f7219471fda33c12adc0447ded50662ee53c57a631c2312f9095de63692cae441024a4cef2414376b623e783cd30b5a63308f6dce5c6991303099a52ca5a4d2e0f2c46cea1063b9466d80b408bb873685e0e77961788952492473c227fbcf777fe9173a4e9366c272d256848588ff12aad3fff64ca50e45d5053d4c60227cc5f4d672792d6e8d7379da051484b83937b820f44e704fa4efaf2a023d4e1d679b82633203e1c9679cae0ffaf3509203b6b4e248937c0868caee391828de0b7f7091781eee4785310df7ebe6c2507b3a3731768cdb147a91dcdfeb0d77ed77f349e99a0c619513f2cc13315052d2b90abd9c8127910a0676f6dc736ca437c3b5af3142d8ce3f7f121ba186fbc56c62129ea81992b23f20dee7cf3e60e9630b9f2eb24abe2a6323262a7186528a288e241034121479328e684fa4176a27e7d873676f66ce466938e0737e166a776f230527ecbcbb825dc69f29d124e39b3b1f14b587b4dcb20c6d354f2c60b06901a5daac173192c0ba1cfa3dda8d5480688dd16e1355eb059287628aa8dcfd8fd0ec831905a91eda0643ba535c519e83a1471643c422ac1088f79b40d653c5d4aa22e0c447eeaa104021abe62ecea694560dae4e4d2027ccdd510a79e375a0c444bfcf05ae68c3efd6452921190a7fb9c695b60c6104bc61bdfb08fe9af0039c5af9265695f1697cf5028b3d12f23a65dcebd13dfb3a9b81744490ba163b139ff8794f83decdb357decf40130c8050edf5750c8a4100f3630e9b3a88138c41352ee4cb4d1a15525354fb4ce377443beacc7b0a1d510af29a6a856f30a5253356cccc0e2ee9fd685e37acf04d003f572082ad8e53329caa832bc047c02f8c2cf841b6ae3b95034a41ee468c6b1fea845b25079ea0b72581e70d7b2ca25d8b4e2783696e7faae82428e2b531cf69457f189b390df400cd1dffb7fad403854a1235198c26f2e9673b2c6b9906fbe38642b7d21b6ed8d48c38dfd9df5a6630b5c83e6485691783363bda965d9eed71707407079d34cf4466e6520911d91a0af3f99ce1e9568052985cf16733976662539c65eb4671a2f9850bb9cd6bb81c19542c60c60a38f929dce2e48a364283b876201d91106305502e9e02cc73d2114f7c4ae475f793887a01c3f54f27baf09e5353128b11c4681da57a4c09071104446ce84bbbe4298dea19a8fcb28a17e1ab3954498c80b4959aeb2e9c2e442e4636e4eb141cd50f95dee9a020845d3856a028efd1034f2b8c06e8ebdae92c62abbecba908d1ed0cd0d4b5de5993563e28a77859e8a2e5f99dfd4bc64f7a4c9dd5fab8dbd865bc549ea04a21807b19af9cff45ef11599b5be4fc99ab4a5458bdf62babe710dfa7f8d07acf3b54508b8278cec39fc7d3500bca0f5357a51881014d5dc9ce1d55e2fd2625ef195c9d10c0997a5a9e5003fbd6cc681577c55333b91de98f761bcc4f5fef12a2548008c4d956344b1f59b15e02aa8d6ea55772e916d47a016b804be5c3fa8e9bd37d75cd80316db53468cd1b02c613bd4c85289357667bfb2a77060bddc0087192afc13cbadf4a76e725392b3c809bd9a4922cbfbcd5b494945a2ee68b31659a62a3d48a195111ac4868e7039f075cbe77275a566aee028e73fa007a4f56cccf5dfac577c4a84076e884a56ec18155c3dc8e57395504160e2cbd86d27763709d7084d181bfbe2765c9451d64bc7c10fabb8a1e326c542bcbb1903ccedb39c63d0355fd10ea173e939d2989c2d0c45c23562d6e59ace68a70132ae1d9ae499c328a964c28837565c4551e1480942ee989dc1c11ea57c2cbb528309d74b93e689cf42e3b1ed40cc14f3f38b1cad0972105b32bc0ffff0cd52e3b5bee5c24a0cdd852f81eebf22f0de6d9b80fea8bf9d19528a7d6f9719810cc5bd1d5765aa9e57e87c34621ec33d42976310943ec4b2c4a666233e12d8836373431c8eafbe91a365c4420cfd822e45fcc39ce0b11484807d58780c5822c307c0302a2540daed86602d82f0938d45a6bc4f019aba492861cefa1c247b412d49c9048190309673d1036719ba1211d9ab2aa11c72d9525f9046cae48804c5ee7b8d6a2ed82bb77c657a1af2476b08fd67c9b66c28eb6fafa076a5b29299559d2ba8716b19f661367af23556a11788e90bd448456c84be1f8990f5d1a3ae9615e7c632bfb78342a06f59ebaf622e38f393e6d24429e18dabc156dea0c86ad716cd58cd0d22f2517917b5c419344ed24855668b9fea9e23ae89dc2aa2e6d2d09167b3caf989098bd1fa49b057700ccae3d783f9619eea3534d23cdaef486d14017017d3dda2794af736d869c2f34b9a1e6833209ed0b28ea4aaa802fc3c6d26f6a082b1604abe694b151474cbb15fb5a7a2074e3fad35bdcc8e3d9f0521596d4309f3082a8ce82c858fb6f9c11526a369ccfa266165ce1d026a1d8be0aab1bd452530b9de3fa7ca8e22e58b672c4bca72b04a1c75ce317cadb7b29a083002a73570828c84aefd424b8160bfa5a564de306547a21454d1ff46869208335d1f499aaa400d926b98628e134d6f97c6fee5246a5c3f261f613d33c4d4f05df4aed6275c9cf2bffccb8689d49c173d145ab3274dba315cd0c98a5e36d09afb29fafc54b07fa9a61f2f010d77fcf945da7e737895c15f595b848177316c13ff6ae1c3980b929ada4eb81a6f54808b0a691f4c239d5b510e27245c56470ad39e7596ee402d0d1d8265ddf894c9052521cc17920e6d858836a27fbd3d8a55725a4075b5fa8e64e5f5a1621ecb0b6da8feacbe0125df55d8e3547c366a83c0bf681d8d0f3284d834cc09fedcb2b3231cb644b037fb018c11c2a6558bf67e99b6f74763fe070981c88eb7eb096e7e834a81cfb90570c478482b4e9770d14891a30d494ef260c3f51707c7ed300d7212b78da16ab956fb9e1357fe8bb89435db63f42957ff05e40dcb691cc2e6a079cf50bbcfb89c812b5dd172bd8ae02dbc2bd108da4a1c62681b17a0780b33543b1a013b0e3f2626b08c6035bd5ab442284111a8899fd4f8c58bfb629cdc7d3862a681658703e5f43baeab754416123e79fe5065e0b592c44cefbbbf94c742ad13482e95e594268cc3726b00874f1b0f1a7eb63182c77b5d9658b36b14eae2827c7ed2de5ec21b42dfd9885bc08cd98a667ef6fd5f16a59ec829a23973c8dcca04cad40bdbff90e1a5d3ff2b9d8302b2adf318cefb1e9d5d947a04ff321ac835848a3bc299f042e82515698356e1fd57aa9a51f0caf04d01fe1bee01c61dd369ff3c482233648224bff9524d6d33df8157a0ef9a7bc39cb55b538d6b4120965d209d3eb542a0f6a7d4b4f347735d74c471eb99ae2ebfc347d595ddfba0b98df35ce39f8215e0f3eb0ca3601f929808a90a43c9c255bc0d5fe3c3269cb8cee7ea7c675a697869bc4d4ac048753f7c3eeaed6085c82715905115224678baee9c39de99a0fa62f5ab3adec262ed32bef06b26c30190bd8ac68bab2619e976f4402db2888b63178608d438fcf51e4c9f3f7d2bf211b7c53499fe22e9567b81646c984a682d24a565cfa882071bf4c19e9d907c77db57e5b3f351ba6e602a87d03c8578e75d022243b14d50b3765cf920da0326c542b082c03ada40b172237ac14ea05fcf91e9abdf3bc7a9158234b41d839653ba8d2048cc457f822cebbda45124c7cf9c00e162d117f4d8d6e9190e89fe4f2b9750243bba4af66c24ac6c72f02f12c07348fc99f88e4e409ec94ad42db8112f84a241e77c3f4ba655712fd8c5f7b0cd1d5b7a45b5a2e5a490d1088202298163b4e6963cc2a3ce420c5a2c2dd6329c24ad7074fe2c176aafc1e3ddd48146c3d432d40de45c1c8e9a3ab376f42fbf2e7bc516b7c9a55e54f5f75be5677508bdc3402db1ae00f235227c17ab536cd239c8ed354d0a2dcba4f8f4f9fd7010493a6db5534f5441ec3a9a49cad89e682553ec00be925236d81db80ab060da24aa6d0cb7a22b9c50d3802ed15be8d3f2b6542b87dc752e4964d4998de3dcdc95c00479f03542d3e15b276fa36101282d85fef76096aa9d662de5b1edb568861daf33ff41ada7ae7761b37bd4089140f1acb13b71a1523df4acc2050dc379317d2b96c20ee2e4bd005b6bd615d079d19de0053eeeaac643baccc0accc147f85368c3f45bb8a7023517571c9f666c7c8f7066d63426ee5408b80a95a169505d49d93013220dd18eb56f25ed121f59a50329c64043bf2085759cba1fb65722163468cd90c648cd695e6207915730b5499e4ebb1b37fd779d90fc0ffa05bb0044763199a06601e25dd9b3e9084b733ff78e2910b788fe56d7e4be1c73a859ad0411938f1143e6857f1e249a37061d68cbea2f323af6bcd4b774aad346715aad414376dd22b68227f4b9f25da29038a5ab4b35007f37bd81c15118e3d082b50d53119786afa15a3153255bacd6af860bbf940906e1140ca8234001645c034a50267359309c55a5038d3c5fa222d40987dbf50913abed0841f29446750a566eeaadbfa7ea238f5d3831089170b6418d701004910d868d701b7f4f58c3d425bdb7fef4d347cdbc5b06e4d25b908d408d104224d97b6fb2a59452a69464bc06e106420724894d38992117f921b79603763396d7470cc6947689ff22840edd6a0f210d7cfaf3bb0c52ed55ed9259fa9166b6e369a9d31f494d46eedc2bca0b21fc3ba1635eb790c5ac08a4ef498f550ef5e8570ed53a99633d1a8d6c9aa3d12229c68edf4d22bd0fae81fdec6c48b6ebab4d0deb38314bd3afbdfc0e93764ac99fc998f5dcceb1ef71e5cba27d5dc6733b1bef6cfe6dba01f1b18fe9965c97ed5c97d26236d3e5b434f1b197dfd56418bb0ef131395d4ed8f215d8006dd664f04eabd29edf5bc75f204f66752e94f165a6c33564b623e5ce4e863d299e3e7e57f31d8c59fceea153fec9421f18e5679abc1af76ec72bb97865d4302b9d8b7109e48149b44bf41ec8e32fd0272b712a4b2ab7ee9cf427cfe93fa9d53219adcdbc5afc66cdd2c49f9a6466d6b9dc1c65f7f8f80b85f033f9f3f27736f36abf699f516d56ee419bc93af34732a318638c31f3c136480a4b8ca2849f9bddd3cbd7b905b8ef481641f74816432ec6449a1cd5eb25db5e7257c6452efe88e3df4adaf618e6a3d1c8a69da3a1f24d2fe7bb7c9fa393e9a76cd49f2c6ab6c9f44ee34fbf6dd776e2dcf4905bc7e3f6b3fd1897ddf6364d63fa1eb7b9ceefe831ac93cf45b7b3694da6e33beafa9a9e37cca6ad4d5fd95dd36e69e49bbe6d67e3b6db74906f327d73fe94ed66bb1c246b3cc8f9dcb73b9bee98a86a364edf96a6dff4a453eddf4cbe83973b1bdf341bf269a6ed5893739ad80edeedb17ed476ba3f2ee6dc6bbfcd45f94c9b0edb30fffa8d931fe353ca9fff206f14eb6ab2c953beffb4ddf4c1353af97734b29db4dde8d9b28ddfcdd2581e75cfb6f12b5ffee4ac8afee8dbdf5f209cdf35355907ef68dbb1c14fb3d98e351eb2cbcfb23ddcacb6e2777eb3ed328073e7639647ffa02633bae2a5f2d24e0357fe06ae7c29ffd21cb03bfbeac13812b5842c7c8a96dc2417c67d47b4883e3009efe91f9675b8c6bbf16374bc83bd3fc36bd3ddb4367de773d4e2e70ae0be235af45c4c66acd960089fbf6cfeb27d6fdceb15dad564d9a576646bb20bbfabc9a06b3668e463b6e3182a4b6a4de6836b5c96663e7cf7cb43bc32eeb00fb6813f6be80419e974861eef7c520e4927c61184a387238841e897c34c2ba294b9371a5d1763178d5042d873f93b87b9fee959462f1963942d8830ca8f178d50621af52b492d528b94d32fd3b2679a26b3c4f5f49a17d534190c8e4654464aa3bb53888db4a22a5d687425b7c4f5d329fd4b93a17123e29ad7c5dc75a98cccd14b999b97729323b1989357724bf8478aa4be25fe822df1d6edaf3caf069e337c2147e0a3440742081fdba1cb44a624f51dc122e8a61a04d893d112bdb0e9558c9fe14073e2099ec1fb62a4e38e381befa27eab18ebf449f70c9ecbe8e39f6845c0e9637ac5e4e33f93ef7a858b7c6af794f4103719c7d15e618f01eca30d1b0cf42adef42a6e231d7f7927d68e84e013031182399b08d32b13c7d2d2abf818186287773328aa535aabb34e85dddd3a153ef6de0d2e98e6e229dac3b44b248d4630fe1d4b8b85e95551acdbc8f20fc74560f7df2ef29528d35ce42f71b35866b1778b3ddb8e455b0036ca8868322817b31ca457f19f9603ca75cb8cf1f38d81f42a7e092a74aded255451ee3b8205910b71b8b005cab83005c63fc07d05b8af06ad53b9ef01003290cd0229ca2c177d110b8c9b9aa8ddfbb9b143bf23582871e3eb88ef875911d52f08888f6220fe422b9da96a8b807092a8f58038ec275ec09e8c8e427805e12fd7c36725ef067ef8ac85f7d23dfc850b9b880b3b041736111ba383437a3c15bbc844af1c0e893dbee23cfc8dd0a7933e439c352512b5833ed2a721f4814a00e18153e014a924a8feef1941c1c714952ffda2314629b3f854be94111a8135057c341ad9eefad7fd75c137a5f5c8d9c4fbde6b2d30a614c21863b4d0a9cf688132deca7bfadebb9ebe17f9d13e5f81d51d1261517e37e79cb2abc9a0f580bbc7f7de83f0bd07df839c09de7b0fbef7de7bf0bdf7de7bef3df81e8431079b01c3485a4b6b692dada56da161416b655f684a6c8185d7ab27e1bf7b83c3c220e42294e9215a165a4b53426b694a645f645f6845d9175a165a11db1338c1094ec8ae10238cf1bd54139ad0842d60cc1c238430527ed90f4e428d1913baf7de93344229af18e57cefbdf84388be36cd26e01a42f0b589d8755d578c16c2499de5d684072184451fb7ac0ee1bd1763ac813a32c608a1bfd2bf4a218430c6d8a54ab54d25c64e995b51f9a14993791f21845a768ad155ba78427c42c4a8c4b226c15a6b94252f9512c00d3f4a6b8aff4877cbeecdb29396c5cd1fc6e8ee5dc55030144de6c5f85e15a5ecc4543aa1321413d4094a96d26452190a06237b314608638c30b40c86bf5b3725b901efc8164b5cefde0206b7bb572b3a25a7fa05b71f15b9149b4412b1077f7178192d7d75dbff11852c4e80840a44c861350b6e7fb51db5352c77d52bb642c66a46fbd8e28816c11648a06a95d147b628c1650984fd6b17c7febbebe96393d29fd4d2eb3bffd1e8aff7318e4de73aecdfe8ba14fb1127319bf56ac63bffe28af88b8e454a5ff7758dae6b74494ae5a4f4a76b32944a3929a553363fdf3a5e38e2a944119f5f54fe15f6e47bf21ad9ee1a8db0f7eee8d91df33eec7afa9099601be0536efea4d7755186ceed23864444315d0411918f1a940fa21f47802c2104b8b9e07bd5cda5527af51a658b4145b9fdef3a0a8459af1a087b32beb97e7ebdd9b7f86f45655a8ca8f051f735e73f9ebff8f0aeba14972686445023a3691411c5900d307ec8c96fc9bd20b05b72af05dac4396daf4c50fd9959f13108656cf85da368faae8c5ef5ffa6939ac1d2f26e4a5c5d4ba7a8abd50d6ab21fb8742ba05be342d77f6549119b6b46ab5771075dcd23024291e844923804843be69ddf6347b6e46172eb8086160d2d1a5a2b63a0a1756918b2e2c5ca92953154e112ba84ae2a2ea13bd2b9947055c13b3b3b3e762e17d1f1d1dddd3cb7bb8bc0828970134ce4721133c14d683c1a8fc6a315a1f15ced47dbd18ac022dbc97676b26ce76645329d97f9c06286ce0c9d193a333ec03644f9908b3374ee0c22337266b4667ca00afec37fd0f01fd78db0d0b80263bee0ec71258c7e052bee00ee3b5205255a0ede9caa9f896effb831edf0658cfb601b283716d37dfad3b7019f5a9ceb8e232d0d9cc81cc59b939952fa36dea5967770eee4baf98f732367e3175af6e14018f6b2d309aa9c4ef4742a3d0bd730f9d29b7c7c1a5cc38462258e7e89a3a512a5a5a7316ec2a9a89c4a4f836bbc5b7ad6644aa7120ba5414bf474a2416987c3a5ae0365aa4f839ee8a39ca45c46205009f7e924f8c69e2b59a2f51f2394e78f271fbf1b7d94291f553160d8aef4a7ef6a8ad5a1b2312c0cfb52d7eb48d9ef67311ca809d7997cfcf737d1373dca7629fa27ce26de93c95eafd9f43d7d8742ad76b234257bba5aae3cb136dd8d68d0e01a271d4e6c626dfa62d99768649106db10e324cdbfef1a4ded33ed5f74a0ec8fc996ec50ea66cfdc7c1d7ec9b8f2754829252f407b99fd831ce5b2ca92babea271e2a724625c02b9e04a3ac98df14a2ba56522269a2fa9b4d134fa877d499a4c26abbd69c524ad9b6c973dfc371a914a9c4a1715b3367e47a487b6441fde91a521d9d1fbd2b54373fd6834db763897a5a1d49aa4644ec61823954f29757901d48d9686fee86f887ce0fc9c724ed33391c9fa60661f44edc2d30733d1641d1f443ca70f78a58ff9a3bfaef7c76c87bab4fa8a937ca8bfd9ead7d315965c975d4a69579ffe131111f920f2116b105c7a16a780406ea4255f5ae4caa7d8531bb505f08dccb6ab6feade8fbe6aef1b655a7a7afde9f4f4df753dbf8953e9a2565b935d13b41dcbc87699651b34fcf09a2c4db526feadfe663b16ccdaf4adf2b989fa261d4cf3646dfa966c87532d0d7fbc7ed198a6111bc9c99199d9426ec7fb22a39945448a4a524a66826b989e76367d3a9978908f514e522a257d19e326ae546a8252229009d944d1a5dc8331c2d8726913314a8b4d6ef417f76e6d1759df5f48ef1ce925b73da671a4afdc5535fa92a3924a29997eadff6aa5cfdc8ef7c51231cd9a0dfa1b2471f32b773dc69974ed5993e9aa67931bfdfc2a537bc5931b71d7d3a73672449a903272a3688a02db385031148c31c60919c2676e87cf0b6437daec8fa88ec5ec065e31b2434d866164f115d77818d9f8d8e4628c5326c6b8e43a9c391febc0e71dc8dcb3109b198c96c55fa87d9681d1be1f51bddb6f6e7cc859c93ed806f830c623ce1df5b01bf11f17aaba1418717465df8e79c6fd4bce1403464a3f868de69c7394c5388a3f9ae1794e151a5c237b9e32a8c860bbbe934a4c4a1d99ca4f154b335f85716e9cc5dde776fd364da33259b2700def58e5fd69700dfea6df5d56fbf7a44b972ffd25b536adf2f2bbcbfeb8ed503a948ec395b66b159577cdda74cb658a7da5c136f00c56c5aab447fdf31316f61fdec9f0edacf2244631393d0dae21bf3beeed0cce32e8801463f99ced5a9e7bbd9a81860c9a8c6373cea96269b00dcdd29cc2759d7aa88a517a18b64ba56c8cafc02fa1d82e9532b128fb7ce5644dbe914a3abc6d2571cf57304abd69b4b4c4683b9b18af166d628f5eb6e7302d0db6c13b9b761deedac7581ab1e57636b1e58ea0a643d3346d2eb1691a34a0ffa0114733750489995f4abbb49452be941c3b8b367dd9d2f0670f69c38a4a5d8f3de6ae7f23089fc2a71472cfcdbec7850fa39467c73c4d314b333fab0d61d75dd3f9d97735990e19db0e721dbcf2470de01cf821eb5809a3d4341ba48796067ef6194956d8411ba41ff5c8c20fa6a7ff43357de93721b09ff4f54d9ce94bff43b5aa7ed43f16e94b6fb2aa36fd0ff54fff83e951f6e606063f92b458a63f591e424c5fed8d101cf34df626fefc1bd9ab2ed9e72b95dba29c1487207a7c747894e888811982f9e11e5492807ea2505f07ea2c2215b9fca422ede242bd622ba250bbd47d56f5e0140c821ddc9e41eda25a80dfcb3f85862e1371ae6405da9667519d4b2ecf22d28f0bc94967f8ef6a4a86ef49e19ef7f35cfc1938f9327027afc2913e853bbd8a3341fd738f85ddf0e79ed210eae8b1df822acfe0bda4b8a75d5cf05eb2772770709d8138c807665d8fdd9869cb3d303ea619c02fd27212ed04979355c03ddc93d2fecab05724276c94cf00a76090be9ff624d1b3495139c53d56ca5f585410fe4481f06f4e2c24d91cbee22fed0d132e085ff1477143f88affe9a259c5806058369619923f3d42edf83beed9d9fe0736e33772f8cb7c7fff21fc057b579231eb86bf3c5690d050919216c93e16dcc12748887f18e8fa1026c23d33377a75f585d3d41484417803c23ff90ee6fda870f453b8eb555cfd189ce96170d8a7b8d1a370da9f70d93f0d7502218410b265f941f543faf37fb85e5a1ef2af9ff6ba28fdc782cc3d0a21c3d6664e2eca975540afc087d6b245d1e010c2ada6562c30ef0765f219e01b4f6c4e4e7dfa39a6bfa2899596d2faf432fd85e2dec52e4ed59453b53d3d0e0b33519998a03e46014317be9c0c4152849015774238c4082bdc2c08090f076ef7b870a109aa53edf290182174e1c9de947e7e5b1cf22f7b437ac983f4f42bc743080e527dfa3c4a2452b5cf579ec43d16c6d96361dc636d8f359393a37d0e16e18d4cc3380a872084dd63c369b8c9a0f97d806eccf84b0af7b068cf3a2a5cfc146ebe8adb3e0647fa140c0d05857b2c8da7e786af385b18965203cdf972cee72181261010d00cca9c7607201a3c875783f769ca9476a8de877742b13939dbc7cf216d5254fe13f75852568b23be9c2f5fda1b92891302597ad5d2a3cb521ff38c856bb44ed45433f27d782c6955fd835b7105137c81c90c52f9f471c8a7dbcb6f8bc374437ad3e3b0a2e92b176f6b3b74e05b7a1f1e2b7e6b3331857f7ccaa4f6a0f6ed52dd83fcf83f987e3e2bc1a9dace3c56498bca40d8e7e43bf699c979be5252cda03e7edb696faaafa09e3e0eab72f0527f898f42fd0967c265bdea61cefa37a7477db53862b4b087f8f27f882fe7f338d9e72bd1fe30df6479d06763daaf666774942c192a12ba0134c47b344ef7c0705ad6211a45f5dfe1065480db182328b9fd949f60221cc56d46c2ed26c06d8a0adf816817fa8d53733d26e9b72623c47cfa98742961075a4a98903032112fd2cf45fc011f36c285db2d749bb768e2070b4d345016825ce88cc9dee4c7b86cf740f4aa26a54585b62a913e97fd9b1f8820fc855945e08ef785cb4cc4650ec1e5572423447cf840a9223154bca80fe8ba7dd4a7a5f0dd9cb3a3b4dde468abfe7df7e9e8a87cfed7edaa5755541605b48b3f118bf373243e46d01fc41f6bd9a6a89d44cc0d7f91c157ba9af25d4ae5bb8ff1dd4af51d4b07f3dd4f7c1938f92adcc9a770a88fc1a9a08a53b1529c0ac2e054aca7691fd333708f2503f7582adc63a5708fa5e21e2b06f75830b8c74a718f85a59ce7afb785616161ed9feafd107f52cb83befc495f5ad59b8f557a427d1d315cb803246ef77e6652905fe4bfef3296d13e7681f6d1604ad1597a37662382b603bea6a9faff69289c101f1e2b657372e29f7c8e7cd4639ca1708f856d52544dd576665a55ff7c1cd6bb38a855b555f5107f3e8ef8d3de0831f99b136b6271c81b94c561993821f11fab722a48e25470e372b2cf197d0e7df939d8e75c9f339fa571efc2941bbee25c8b0e05c57ceafda446381c71b807c5699a0d79af993529c8560a887882044fa0207aa0025cf820073a28c1149c80c2054f80e0899d931f4c1081144ea4200a413e50e01770122609600ba86002841042cc8b2b9899afbf2e1d2eaee0819f287e8c20a3c91650c42088b0051e58d193c516a6e02dd86208d97d47b668e262f71dd9a2063eba4cb763dc6e5ee97faf86c7eff5eb870369e6b03bf63fd8b2b9bdbdbddb8790f0fadf6b8e8ba0a85dea3227b9dcd1b0526150221beceeeece291f72251cc054fc323a968cdf7b0f8893fb4cf235c947d90ddb0584dbd9cbdf5927ea15cb707d50b9db0160453579c356bfff75b067b88d52faaed6279148241289f44fe357033f89f321edbafc590946df9129c6e567a91c8b7a07be67379640e3f9717f3f9a87484abb340a2e211c70cb619320db19f2026911444c14a4b3b92ecf8cd60c9d0e40589399203a13813508e26e55baa8424f83806ee42d05b583b7cba8fcc8915f8bbeb2a457ed435c8f34b47a15774c1ce8d007b13513a4c34410e5d6413bec6666d8318b1981c3957b10b79f631ad6a46ef734024624a29c0922523bd609520297c829bf10433120d06b262806b5631dec5d5b87135b2a55604f468411c612aa5f54bb38aa5dbad76edb0a57b40fb0289c18c1c006981352e8415683273020b40fb221a03841834ec929e94b18e3d54da8f006f0be2018485989acd042176c104208b72c84dcee57d11411463806122290b8fd19929691db0f4393e9540a09263a4ae014155f68e1f6a3d4e08b242e7cf82729f6e99acac1065578210b3e8e104317acee7d89dbad30d8ddddddcd25a8ef42134dc6b5b8308a30e800006110baf0533ec88548f0420c06b8f0595a60c4d0c4858f434c08a87847c660c585bf43bb68327004821d9c08008622b7df14a476758911ab0b9f664b7870e1854bc670e1a7b44bcb85fff065acbe90830b7f06fc82186e022efc922603619e167460fc80c21852df85b70b2a70b8fd5548173c48494128a1078ca0c938145ee8c2edd77ee53a80187b4106a914349971c54411ace006bb5ff6c68aa9ed689596056fc4c8442fb46e07e0f64f4da62b075210d48521b73fca256a576314d08522ae852610c2874a11800ba9545751eed08f16471811c4470d5e20830991f818c113ba82a563d9d161e9586e4baff861f876cce2303154bc602ec8e08654bdd85691aa35455b3b9175842173c708e8233b2e903081b38a002472618315741091a09f20a05e7917a6b820c211f04712f50817581851d42bcf084a7ae5dd8ed625a8540a920f083926f4c415bcf8c1086650b3fb8e24e9b9dd6341922871832437c8742abdef48122446ea76df912446187d51e57d479258f1823abaef48922b16f08120d47d47b0f002241fe88015b02703875e5149e90e41fc078912daa54b3111b76f38a5b57a4baf7a09689dad10e4c0b5022d1ab2407e2b7ff694afbc2a1972f43dc81d89b6a0e43e243b4566dc77640b462e4662953fbcfe2aef686a553f75c1d097fa5ed887e5bd786be6bdf0cf8db7fce53db743f48a67b8dcb2e2766f49bb8eb77a6581165cf83998aeb8b0ffdd1c3980c008126affeb098df40a7ffc429dd45bde7a37f013af06ee874a1806437c440b565cfe16d06556f7ab96cb82dede32a203c433450f127c9200848a214a20c2c5e3c265eeb8e316b4e0ddd0cf0e839deb3f526ee72d258278ab889129627095b89d5bd1add5edbcd5798b7d18880f90219c8222f9917d0891d60fb786682d192203ef064fa2aa667e567e5433f1e7d5d0721de7e9f156ebc781822e336ce95c6620975ffef80abfed9ce7328e1cfc3f58f00fd601075454f5a17f5aadab82ff62402e95d2ab540fef0647a2aa5ec6efd02eaad50c6e154b8b02da45058343dbae7aeb3afc711978b0f79c5222ba70dd629a0de6276c55bca220da85ad8aee782f3bbc95fed4900aa4bbbb9fc0c37b49c1acee7b265c87e9afe9f9018f8d15b7ff75c793c4ed7f53c6ee4df1887680c1ed17dc4ec67df639e03de1f6f56e1062017caf5783ab7ef0c73e65803deeeeae9101dfabc121a352290e3519523f46225151fb796cf1c748b285a5571dcbfb793fb51eae6edba5dcb74151bbcafcddfccd1b141b145714341dbcc7457404b93c240ec5cb0f044fbff08f9f1a252effb8fcbcb8fcb11fe4de0d62e4be7e43ed2e85a79a9132b4a445ed7f5647af80e815f7f773eb75da055a869052cb3adc62eee7d6fb08d906d12bd6d12b6e6ee574f3c48e3c95e945e28303fc727c70f93d9eeaf761ee9a4cd42a4fd5747840525cfabc3d7ced33bead71292337026ddda2764f284704a015193b15efa5ae663c29ffcd39bba7b69313f294990d57305d0b7f2311c10a6e97722bd46c3b40a16474c7afa3a52840757df641083726d487cfbeba5551df3d82a0776016202c3e294230846208a108a584de4f0a275fc5c58fc1d187c1cdcb84c39ec507080c0b4c8e991b4240da4d09274a160a43faf893f4716ba1d4a784522d2464d2342270430bf90372089d4c5192b64a7af81aea336032b13939f465b7c0db6de21e8b512429e9cb78e284c0d7b8d347cef4a509f8e7785fd082e6f24f8f43fec9646f48af9ad92ce9b5e8e0e969e9e48061e9150b0ff790922405f408f48a4936a4e79c768121942328f52c52e7e44d9cc9d32aa7aa63dac43d56cd112434946348670892c5808e9298a3a4e3b797dbf3306d5eb91bbef2862aca1621c02f9be59d2b9e161c021d7f9e82f97942a03ef5aced207dca3e6d07caaa5ac8c9eef0e1b172724e3e7e8ec9979e64b71702bfbea358491f477cfa28a577fb60ea16549904af53334039ca2f897530cf6a0faa5f2109bc170ec15bf1f78fc0bba1dfdddf17d759e7d5e04f91d4f8a57faf86d39bbe3eca35d5ccf63e3cd6666f84e030f9ed6fe49ffc666fb63779d50cb53742502c8ed2cfbf39b12af8f4da1b135bfa98469dea6fcfc3447ab97dc9f220d96753787e808610f101d2a3f3d3239ca6252afc700ae32f0c43a79532f96ef596c487c1d14f71f35138f926272813eeb150dc6369eece3c30546e13068583431837000c0c899a3613cae6e4c854ca7bdb4cdbe388bfcded377b234b42269722e3fabf544ad543fced7fa06ffa611ada608a7a785eaf60af5a9bc939bde95b53f5b06da5bf39fdf6258b83f4d2de989e44a29c4952cbc314a364a82848080806e682da901f14294ad3a99670f873917661a9bcbf219837340463e80d696fe8fdc8c0c93f811123b53d9606036488ebc831836dd474aa946230303191c77c2cee57ff86521fd351dec02fd10221a190c227a0e3d5e028529414e6fd00056d2824f9279f13df848442a53c313d8d4f7a92bd31b13c4c382c1ea6277d89e3210487c9aa9ef43c4e369fcfa8146ef66439eb100d0000000000e314000028100c078442d17030cb533d133f14000c88943e785a9a08b328486114838c418420620c21c0004360680a46ab200058a94c6615efff580384dabe2369e1b2f1f9793833fc1ce482b9fd9fbf693cae090b8e2bdcca7b8da570da1cc8910c942d6b96a3c8ebf3f12e1b9756310770a95f49881fbd48f4de0fbea466f076015ff961e44a74f62a3b6ff82abf5d6316edec222f6921385655e72653e354d987a4e85127e7c064a2519e33eaf90a97d795e6099861ac23dc964b4b6e63bb269c1d104f9aed8bc7b104bfe4d92c82638cdfa9515285cb9a266c27e170af4fd73f6e765e10334c2eddf90b2b0c9758f992b80c0f40d5fef28acd44531b79e52cff7ebf3805600c2b307405b21afb09657e31f157b5683589bc2f285ad043192a7c3f6154f2120aa240945cd06c14831a153b5594b56bf01c79a3fad2610a45621f78f3d8c5d71d6312eaae31a9e3c09901011a88b3f0dbef8cc0491d546a95cddeca5b2a42192c49fabcc42c65788a205785411ea7b4a8e6c02556bbc850e093980dc7a4a38515eaed460588be19a819aa3d108f4bc7456cbcb5551a6569505d3979d4849a0dd048fb193f37a33f9d549f8841ac4439f2123ea2a704a642b2ce180b8ace6874db99981e220691210145fc53efa76ea1dbc5ab0b4577bd1686d147ec4f70bd8c11e5223dde268d7e0fb2b77f44fa064794b75347b423ff3c431cb4cd058d3101d4d21cae95f562d8a8cfc4634266a70b91c240b9b838f2f9c8fbc839b2518da640e7ba2d28533685f2d072380b8be37b26e54a6957234d40aa1d156519e798d050b6d883f8c745ba3e8e94e51ef6c42ec1d952900cf2dfd53c684c399231fa60269bc86cd3581da3d568ceccaef62ad608530f98829d35bd7593699ee7cd9639ae74e9619536f2e16dcea9a86e791bb06be03032e82a28e07ead6b58190fc6f3efbc1b5cae9d654bf8c6c3900ca60c32d8df4c2ca889676abe67f81222b3765d42c7aa686f93a80130f2f34eba06fcc850a876cda36322386bc7a4e6d6e22c1f65cdee4addad071a6f9c7a4c7f7c07c37caf795693a53841a842a1be57dc8b82a7f3c45f3ad95e3e02b77cd4f842e87bb0abf1c44b61b240cd563942868183dc3b84983d2f69e6dc5a5602b9ba6ac245efce4c722717f64c6e96de12fa4897258dbd6c14bc1a1f3b52446d0f374b2d7ce79d5bb66f97ce1b1087847a1f1bd01598de42fc3dfd9b0dff75ac7552a252c2865cbe59d443625ffc0de7c0c515c980293cc93c3bdc3d9c11bf3caf71ba131665eb72a40a18bfa9fe1cddb56306843a493fd6d7a86f202b58dc0b31dca21e4f6561e06b3f5152d364ca4ad80248af4336af98594cdf8b026082e888f2574755f922a767926f86271011d129ad52d84833aa453752e8edcbc25a2b4924c75524bec891ffb18a2ff7c0da88e2c60c8bf7415f96d4bb8f73ba09f6b0c7405fc7d5de49223bad30c8739cd8cb4438ac7aba1f421cf6db29edc8c211cb88e33741af8ed9941652637b59414439907dadb17b5e7621c7ab276738f7e4e00d5912e9397056adcbe7f3bfc905ef365a0c5fbd4deb640c25a8875babfc266867c9dc776a3ecb540ee0b3027250ccfc59af037f7a86534c0e1339ebf0d2a3e2466f599397ac30488d1f49b17b3018ba7c1f5dce32222f21997e6703d56a80bce48ca3970c97f15ae3f337dabe0ce630804dfbb6234a1d900725ae99c77349c7cc8a0295c142dbbbfc6877d3ec0a1eba25831fa03a202ab3cfbbd4c13dcbec270d0410b02601b80d9130084ed5c5ebc8882ea0e211e760f05d3a2496e8ad7ccb2f6315280efb00b2d3113288ab5f8b5f3deb7205434fd05d834bcfea3062f41baed06acbbb747aced3fc8aaae3116e75699800a0a4080cf3bb642045d4c48a6ad77eb50c09f93e19249c086a187c4b059d0734f92f13a3bd65f8965cdc902e34ca716e7ed19352b2ad0cd1ff23756ea52be58cf51734aa1d7c005575f0be275497bd04163032244fc2e6697c3f438551455067d01843e1ba5d3cd6aaa5e002aa3ebf57ec65334c89c34cfc2f9e86b96dc0d3c0e0c41f365fce4962e28f436f1b7dd1d70ec1b8e157c79198594631807fc5b142d983d7ea8bda2e927c7e8d74bd402052d7eed0b1fd7824e026c30e49506f5dc217e5ce4a424326cfa7af2694e20c0e694e04102e8b49de14f947e7823a5de895084e589fcf50ba02a7786a69b843104a1a10ec4a2724d2fae2a41042ff493f539b2c0743889d4b5ddf8823ece20379c7c31ccd3a5e4683091c03889560195d9d92c68c704a426675ad9fdbdcc583fdab534c3455c5ada471d3ca8f465315d1b39e653679d6e3089bd62355348161d1a2387485a511d7588db67b7952edcca1e5782be21fbd1d13f5311a5e50de59d1f8e7a430dd2664e87ebafe228b4fc50dc27ea21d7b7b90de3e1c3151794d5dcd2f17ac97bbd03eb2bb4d6d2ea72860cf66875ac9b004d7752fbceb6efd7f3b926cf50024dc9003e971bf9749813fa23fc9261e8c34ce9e79bf8a7162c8fc1a52bb008cfc8bbba8728430bb6db3d43ee9492e5c69ee24c513f90cfb387153830f99127679ea76898f635487c82a84008c4ddcc7001372a5201108d6e36c4491151b133329c28083926930ee9a4b994d44a3529bd99b93bc098a48749b8bf805ebca66b83566b2436e553452b43e14198a609f30e47b0e5b901f25d447b3f7e069878485b385ec8e55f0b523cb3c76f28b36ebde6bcf7ef8c57cf35fe421dab6307aea233e9c020b22a02a5e90176e6e725a78b0d85b72348b6419161684e035068c2bb0c09b2f5d9461ce1ea33dcfc897de3e57b2846b66a7eb6d87dbdaf77090c81b38849d2bea403de2a8e0786d83f791bb01391ee310b7c68ee220f054342b15d92c2e374a0a7184c1f9299763e906c326afe2fa405f27d47be3e2aa813cd69fc0c1bcc641140872a5d4196db40609313ecc1c8085c4b0df65a4a12d64f36f270e96137b1d2bd17562a9ed4ee4f125a444fa38b15976d11668a3f2d0fb6d94b67b3d15009bb5018ee3d3df03dbae7db052f3458dacfaba2e213e5129109709137e042b90913cbd30e6a70bb753c118e00266458efe8e0c10d365cec09e83e7f675756b3b3215a77a4d25d748aed06fc32f8906b35c6da6114e794d0990a50540d7a53521349dd7b3359279c13dae4aa4c75308f451606cbf53c21be7dc6eddcf665bfb2837c5642dff9d7d91268613e30b32a3dbc5e2e6b47ed45eb9c7a0045a93a32a6a4553211493f6085dcf8f9ca702368d32bbda871f8a4b29c52301db0e6d494d1848f27531afc5b5b7843b57f351caa7a6482acfa3b50aa8c72a4106d0f916acfcf4990e93e6782b5469073d4b00a9adfaf1a765760202f2f7a47f060ee63b208a8b67ccf35cb302b344e14e545218cc42fdb89a0814e76f9de20650f13ee67fe3bd7be0a967b808ce0f8b3d962a0ec91ae79b1f887c4e676f3c00a221ce749f9514fe21c5f708f16fd0b0dbcced8214097657862be86678be569ac13e3cc4379fd1194394ac0234c15dd415b5727a5b4c17451f739a6b3c04f95aa324ba33bd0177a3bc6b11a258c59e7024bbc3dc5b28028722676861671e85381154a6885371ebd84ed0c35b62159e86bd89440d64eac39e83282694155c87c4012e0ea89e66e7972272740de11a0811bc8a1a83de7ab4bc6a533d9d833ff1faa6cd55df89141992e480be7dda1ce658f966eaffcf8bbaeb253d2462c13ad0944bd353a61afcca21155eacb85053da036a75d59181a05f21027e228a166f3034a8334f1d35cdaca74fa83d16c40c44b528adfd0ae1ae63f31446ad6e0a832f3aacc2e04250c672dd951131637423b0b2fe645e9d1ad704bb3c31704fe2cce19465e78d294f4ef23caa4c635710342c757273da01b7d3ae92447d7ebc0ea56ec381f71af563cf034e6bc1269ea53769e0a0764f7915ac6c08907c419edce569c5f0e5fcb40757f9d22f4a8aae23317dcd6414b21ff7c29a268c1d76c56b59b8ab7ea50f03ee1009f3eba53d3e11a255ca26c11e06caff4b3188d25e33eb21ab38ddfc11c8ca85fe5791148a483daf0b6b9508265a39e8e179b2084c4de499d7c0732df7646b534361bb9f4746c502335c268ad1c981ea4951bc8f244855fd92625834a9bafc0673d2637eb82e761661bfd83679b0478f115ec8e6d7cd4ba7de483be3e53ed11fc54409a3553dcd4b08cf8193882d51dee7528273a3243ee6d4b1bc3cadccac9284126f811d2f033c8bdcbd3d6b137f2bf4f0e29be28a971ed268f03d35e62a0773de442c3696b1e09e5e3394d87108e8625fba125ee2e51a7a85f25c4820d33769b4dad948c0bfbcb359ee34a6dcaea99c5a6b407c74db29e2fdee281866f8ffd12e725f73df4f61ded2849d15e3a9c05ac435730e83faa7141c75232e8a909042f9bd101a55c613ded7da971826d0ffd41a24e5469cf04e0714e3b998adee3bdd4102d15e4c3eeeb4284d6b4ebc8958b81ee9af9af3da8925d632f772da5f8c7253b5c7bdc692f1d7a9c9e4f67b888421a4712d49e843b3e42ee8082592f8f032e73822c06689d6fff4a843cef62585a1741621d0487d23fd90b144521908f3c0270a7cdeec4024f989dd150d6f3438e88b3f7a5c819af40a2be098999253862023151ebdc872e419f98dace0e76ae4493192f3b4e087202b5d3266f073b4f8bbf41b7d535d5e6020705ddd30f915ce78c8050a64c184226bf93c3ec8d8b0ae026734b2a802d413b53006d24d80ba4e7829f8998417cf606fa161e066008a6862e72cfa74efe55be8674a99409029b8fdced6c8f8aea84c7fd07655e86b3f566bcf771aed5fa18162f098e101ed8d0640d7b72a4b7c6a0de4d7fc7edddf78f62010ab1a19f0890c9c10a94fc11983bc44c143a2dee7e51de43d609383799b8395e22878b1605e9b9dc3f0d5279b9463e9fd6f5f2b73c2bb62c61033c8203436b07266e5b52f61c63529a80be87b9bd151918319a63c38089af684331ceacc08aad79586861a3dd39c894bf499c75300e71f37b8aa3ebd575b398d1d13dfd6e634e9c7eda8aa0c4fba4f21dc201710d61aba387a719a39e63f770ad90d1fcce0018a0d96a5a3177a84a08339e7115d4b1185d1bfcb1eacd82bee100c51c63734fc05ffb9699e073b3dac35f885f93a72d14baab08ea700bc025c5a1cf72ab8f99b99f5fb47103d6b1a82d86ecf89e64ef0044c033261e15b86bbf090ffa0a253df6cca0fe4075dcab6334ce586133af109978a27606c37c5074c44e6f3bec842183b6fdeeb4af970b9db335f631443926b61031be2559a09952552047a12ca8a4d5d48a1f65765677a93261f346921c935cc0542b31faca90e113bf2fb3e3bcb2fce30cb97f553cbd1c9237a4d6480eae8f132de54f8c33b85f456f8e0facf57493b712fdcaef292c8eb5567f0d383ca1a2abeaf56fafd0d088090edd4fb26e7fa0207fb03c05c3fb00ae2df58c54b638647cf21b6ef02217cb83bbbc82362d2e4542500bc1588700563a61f226135232a39844e7b0104739a2535a5a3b783e70b3006acf3bf1a9686ac75f6e2af6de374b2a399adba4cf0ad25e633784634ebea22ad3ccd0ed2b7319a0d44494498f789dc13b0ee07e95d15e91f71308a02b6c947491c9fd2ff1973622bffdcb1ec246fc2c701e9108b2259e359b9c9b1f7bc4954a340cb27c3b9ee079603feca15013b2008809bc96ed71f9243d5c10637b0729320dba6f09c505f6553244b39cceea296481a155567390d8448e8fb398d808b36ac0bc3d78b396724299abb27e92fb153889ef2e0f6db4cd9d672b87af9ae5d7bc7414f493737f1a699c588d6fc2908d8b18604e9a37d15e8bfef3050df21ccfa4a70b6f2656d62f717a391ae3de27c07120a3712ef01026d5612666fb15de203e90c192dfab65c77ce65201f1cc3625de490c7d2253d9ab7a7b5a13cd81f4c013058e1d2ff85d41b08671a81aa59292a66df5cc4f70b78363c656fa1ba8808f4be9570da94992677103c0390568813acfc70c4bb6eb58d3a7c8e46d45cf8d10481bca766aeb60ad3715351b42b566492f77f7ef491225b0f3dc220c56ce341cd82be4e786aec65d4cab81abfa6fd2b4239f115986473dddd14b7a1e6c052a0bf76dc79fb4c92496bbc476244ac91d7e91460c796ea8241f06c762e726fa072fdb07179832d39e37b14aee3d51de1cd0ff99603ff3b1a9a16a516fca19b7de8a883f73b3b91314d9fc4b84de45e0a894c9a382a79b65c9effbe3151870cb5c65dc0d038fd6127f643fd43ec533d8361ae3e0ca0b5f9d1b5149297447b6a812db9de51b94d95c924b46d29c93d5a20127d6e1d2534d899bd19e5816835e01c5cd7f01e0278554535f7215fc54a3fb6c15757b3f178d1fa50b0f08531c65fea8195bf8d0552034cac996ff8ad59c31f6a8873a0fd1f92c166a0550ddc376283fbb78cf01822c9a304d8b519a9730fdf058e3670bcb1a25cdc43513e41826cdb431b084a94713a19e65a3f5c7054192b47a430cca16edaceb5ca3ff69b7e8a0de27bd9802767bef135c6276ab35039136325cc9f601c4cb9d2ffc3618974b863f9dd40fa168597519aee1f8d6f427f03d0e2ec25bfffea39d09252f5751b5f5a0f0e160a4e67767a8ce1495028ef0b755ec914c8b7ab00d904d4d28a81ee1326d7b3cb52d16273e77bb3c1afc28b4248835f81f8be241bb5b3e2c5105f284c0da0b7ac24d2b6fb5963193cf99b8af601d04626d989fe0f3b1887fdb8383114e8e7cda770e16b20c62b33fd626a51fb74d233b17ec21d08a2f010f5bd41f18bce88b754125e6ff139abad2c08c059f2e79406326d62700a9da8d2d7673e42f07880e43bf84319e6ac74cf39f7e48b8593826780cc2a4ed20e389e3df4b0c0d6fd3c9b18ad2b271b4f9e620fcca152cb9bd2137255376cd3efab07b1159aae35ae066e1df466b01cb29dc4824ba865cc9fe0d268c5a7e52d97b65693215b244f3ce6f9ab2b33872f8162afac74ec3acb9fae550de179c7ce3e1e005b1444954262b012ee85981f44f4b26f7f6a74e5d884791c77e4af1894009da4bd7ee15ae13870c465a953b6ad2c4acf144bc9ca9028a5e78a085d4566454a06740a653010b6408fba1b24bec52ea1bfc0976faa2ec3481806d026ee0ee5137a6c624b6cf64fb7345ab90f5c466dcd5c4e630aeaa8e59efcb33d9c8b369cf08983d94799e8dcd44ccb4cab7877157cb0dfd9455cd4d707321efb4d0fcb376c229f6e5994aabae7e4b1a80c3c29a305e62affd4a14c1f109a862953f924b413d9e1256c5f3e8704c483cb92b92a832f33d2949ac9a69067b38fed433cd33345172f708484f2a106fdc22e7971026a59bddf900f33aeed3e0f21ba7d61c4b1412c78c911982264123c1410a51c34401be71ae56141b5fe3053f63cba098743c9f99947df70ed6f597beb54e9929321a93dedb3aa32691ac132bc49cba816c4662a87a56447d552c831faf3b29386078537ad17850d1f78defc6c21cb241cb01baa284a75b40ef7b8de061c72999a3cd3d49a8c6c79a29bf29445d3f196f831df2d844f7b40e0b1f05c0865c2b3dded0fd5010839b4cf99068eda27e16cf2501d1e1080dc106af4404f19164979fd575f9c48893fc01c1b12cc9b176e6ec03680e58ff8a7777cd558544905e17ef57297ef2c9bbe3a634a06ac14483b17530b4c0486fd0151e4985feeff420982fd29957037cc9920081ec1265c0b50dd53b76082cd679a5d2610908d963130ba3a02c26a68035aeafef27a88d072e268618049fd90c45c9cdf111954689b433967d85094a4be261143ae9a44bfa16ba3ce6255f470c5f819b102cc1ae1a4d810652279bbdae97dccb6e6b81a969205940c06eb451d28bb12c0a165f12512af9d7ba211fdfa4e7e806f1b079097fc20792f63eb6f34c9b30979687d2b1a227d46de925fa229c0689f111ebb108302f38e8ec5ee012b33ed7d32feceffc722abb9a0a9ec22a485c1a205e38806c6017d77b926eb7f2971ab9f44b079b676edcc6ce252fcfa51b236cd790baa405413e66e5c72741705bc2674206b9aa004357ce71874ead70d9512bb3072545a138a79430914355da8ec7636119654f9de0e905c0c5e5d67d22c1c8421cf9d695e619f44277a46ba3f2b54d5c53993355fa559c122068eccfdc2f610aef7c800851b7ee9c51eacf7f943131b6a4b974f6a9fbc21a85f386cfdd627badc57881e278813ab100d276312ae24b7d48fb61717339d42fd6bbf87d2580ddc77334b53d8cf65b4c5060e1262e846b46432fdbdc5dc449a4070bd5cf8c4ac1d1b4218f47964df4465230f25c8cf54c80297228d6b0eda2a9a36fb4b1391cb72d3356f4823f22343491ebc35570d0fd4f3830b4d441adb886db418768aff443d185c80d3d9fbadb5cdd03fe1447c3a867de6b341bd6c7c120d0166b1a6f7347f795f52aaf5273e6cd0616007159bc0935a2bbc0c6b6e8be400c581f31436d0c0ac803de55b7a0a1b3f2c68f8950271ebaee887e758fabdebb0d78384dad2c4937440fa810103e331c72c9bbbb42f2cc519b3b83e8ee83812039e340ccf23a53ad06942e30107fdb3f7cfb71da168cdf9484898e005aa92fe8bfe0df243ec92d792151d52ead5fc10c9daa3c6c4c0834b095a2458b3f1635c80fa55cc0c5b532cc0e00db4565ed330b7ef89aba3e634705b62da68252020241e769e99be36391f82466e92673552cf2412749e290904ab9851efa6f814b0bcc39c62535f4a72ce9f993dc882ab51516a44e405bff2ef65636ed8bd5091080a596ee205399e83e637cbc56af07d0ecbed4c0c8a0f2cfae91c90d6a12ab117584fbc4f44e4751d510c0aa0df09da42b0b957cd1a0830f3469c2d8d3c1dd2b5870b3f051d63b33f707359b9f6f0b2c56a4955872f651d4038c7b495189cdfd38221f0b528a39ab2b8c1c2e0a28fc9b46089822a0552bcced5d3e2c343d7c7f1ac8eb9540565144e4f891649144183e8b86a282e318129a0a28652ead76c6ac6344828805648ff5cf4367118f1eccd5d81d2ada8c2e011d02177b5d975a34e3b2a1705e4c9e060076b350c9e9ba7401bad57aeed391fbe9437fa74ff946440918a49866cbb4bd9d8fe148c9c3716a937bf1b446c1a7326491c9deb8f9d4b6dbb61eb5d056e6abf76eda2178cc5bfd85c72e4fe71233e63b62ef5a3e9299a46cb8c0981cd82c8b2f4dfd65e59ccce54b8ccd43457007c601f20d64dccd28b46572495d7a8026d0100794400940e202085d639cec0d61e6f98a1f078dcd5ad77bdbb98b46aef7de92a6c84fca34889d50bedf1ea751db9803252e0c57c097bc4dd6617f4ce7311e5b7ce01033499f25eaf8bc85f1694766db53b4ec9886157634df4806b53afd40dedee22f4ae4bd3a44115c156e79e743cf08c12d12428cf37fba37facc673305beb4322bc0370e740c7a02436246fc9076a4a76f8f4dfb08c0f69077aba97d8a549c0721472ec2f5665ae4e83c88cfcd19789490c8af21ddb5722eb2ce21d957612857cadb6b2dee878da19a371e84440e8d4c5cc36f0c0a33d5c719a205bac5d8defdd693d62c9bc4e8160ca40b95e206408b1f918cc900cbffb8198cacb92e568747890c017206ca4370ada2b197ddf4e843c1438f5f7d4996b4bf4f4df24f3dc2849a0c021719fdd9996ae87fc9560a817d0adae360fdeba1d81231fd4047c907982a30383b30ebcb3bf37f12096fcbf114a616faf4f83435040c1d017af3e8f5e5d8e11ff8787d5365e8f62bfd8301da3491964ebdf4e2badcb466bbf751e7204c60ba918ba533387ad5526e86738c941c427ef4fb5e7cfb401cc90107987cd1dcff077903cea60d642bdcbc0b268263ab58f386dbf5ad1abff328ba5996cac8bd38b6aa81387e3b285031f5826fb2b6b2a98e86fbd581040548af97425eb45fedacb3c08216994044a33c9ecea129838ae57a025ef2049748f284ba9fb039c9a9382735c213915b6edc3c96364cabe5b0fbecc5710dae181f357157fce3e2dbc10a0359bd7e04d0983416c3aa01e85b88b887d8687eb7d4d198ba711896017c0799ee2c83486b32458cf33dc9828351c5264975e9978f12cbb0999c3118da6bf590dc27aabb6ab1ed721948f653204b5b05713095fbd531d241ac7df16a358d1bcab85519e6035d1f846cc005f224d53aa4107a087d596bf291df8753143944737eb8ca258ba4d20910ef20d6bd2197e8bd1d164e1de2d7c50b0b0ce108c9ca64ac98c59d1943685e766923946943397a3ca4314ef70531fdacdb8afe89930e8be54d2481f924ae2709131026143b2143b1c1bee00a2deca44ff42b1db5030ccc4742ca6519cc881e21f699379a0d5f14aa480003dc3c0923da3556036e53a3e93b1664e4cc906cf0c4c43a45adf2cb717a94ed4337df6aed8e270c689cc32cc65aba6c2f228280918fa2f108f6b36af0c986fce05fd3075657fbbd174c9b0ce58bc75224e26990561d44ffabd839e594c9bc8c5a340d0ed96d0ecc61781cc164e3891e6cc2cea1b191b387c6600e7129a2a16e0c3636076ae8179fef1b1c7e46912f66126ed8bea43980f53dd24b98caccb3ea4d79e63e40c57b4b0dbdb20a30394a53fba358e212dc39ccfd2dd96653026e4b99c05c99a7278562746c3e5c90c104673a1778df455a66ed6a9b6da230b98509f901933916055b4b09612e6e01c58e5e5d25fa4ffc8ffd23f7bb54af56d688d2fd07f48551959c11ca7e64fa0cd2231af9a1610660e5a8af0bb68699c01aa534626841a7ffe462ced74cbd5f77fa2786665459c4be725045fb2479440685031d7f45011c5148bed003bc37e891eb1bab3c4d6a980e4324bed881d73c35e2462117bdbcdd0620878a164c5bab0bdb779bfe2e818f3d540d229f70990867da3792cb12940b1062841ad1d0b0bf5958d66a51fa645f54aa0fbe57e1480b9214aa4924724318665d0b379537c5768b2eb076ebc89610b2a8a37609e9fd5933b0076f38a8f602d536e94a96f1f87c09fb2053f989b1dcbe706a920301cab438b7c72907a9a0082d36bcf80d85f68314f54f91331e51d89cfdf5b1aff4edd1019f7164f2460c3ec16f5bfe6487752a613857f53a2aae4b28f89bfd16b568066d5242005c5df99f39b9a0c7effd2e6ac27eec6849cb69ae726402a882e6379cfa761fcb2e12437aa281c6f50ef326919db05cee753479f6e7561366c542262b185b6a0d5b149a751f85aa321a14fea16776321d598df5b40c471def14468c4532542152f0d37ea6c9fda0c4d399697ea740dd94fbad975675fa44403853865df013fd26452699b8fca2174c5d089ebac8281754eaaba475f3d8f3f42ef9789f076e3d29eca7ef30385ec617bbff7d8f4d6ddf05845829986bafb72bef278be1c644cfd0db6fd9b9f3d18ed16aef3855c3bc35c8362e4529d625cab141b7402f0ac141a4d4a81605930b813807183aa51c0981bf92662bd83fd6fb99911f1acdb9485160b00735f8ee7769557b668ea3b53fdb260d6ea68195fcfa2a6b5b7996d5fe856335bf8d8455e6cc00cfa929f445d59b449b5a38d27a5f389133163ff7fcfc70771b79dcc07c002666c63173a2fd1fe233f7b71d1ac80f47896017f1c777f341d9908b8aca2bf61ebd56f4f19688e246c93148c5dd00e20be2530713d3ef74cb34c63ad4bf8ba5824d7602edbb227bf59c73cb36fee3114d736f7410fe39a5cf3e02261178152f12219e4e05705ed14c4a57f5f5010e2501640a0f959c8e1a1a47b857ee91ef7a6bf1f9ec63011ba1882b464c89861aef7925b5fad7dcfce7d20498deadfe2591d4a8f24438bf495720d1973f321d144a3313e1f22ce484188292d4c58200674ab0bfa549003d2834efd22b8cb6a4233846505dfbff877d7df63bc5593119d99371bd8d8a094c5879a93f64acd2c28596e7c9e6cc161e9c9d978afacc5cba940f78eb095d38dddc5498a0a869b9726e08820c2d1c629651ddc9b80e0654d992c4bfc420367eb79b7770bb0157e2d41c76885a85170d6f487069038488b51665de1fcc463663340c6722a55e96e3d5c1b0dc1cb1a993caa1b42df3719c53b828ee54a96766f5c53063864765143577bb428bc1e2e8d44f0ba466e87c2842ced83fbfc5e80c6b052c7e0479f92aa501bb3601b427471d449595f1a073c3a5bac877be313785d2bb787744248fb4427bf07a061583126eb4cb25a15630ad7d00240436339e2f8e6b499ac837b23772dd766724e0dcf9eb46632ef3d681c578a403babebba450cbb2c60c8a4db191dbebb2261ad346dd7b8b331d101f9dd048dd14a30228ec4987d70f68dba8e6b1135179f9369beecea0f47c64fdf09c19409f7131cbdd455d0e3b5503c3fb18f48087a5a3601ef9ea0810fb90e14cae0b50a927fc6b4f20cb47136b063fc1e6e479877a60aece116e4553d19f7c6ddb19c4541aaf7553e52412e8854c295a11da78666f545619d1d77d751fd798d7c97d71fdb940ca8378c8912e7c9a57f0bbab79d8db63cbdfd1a04c26e3fcdc17429cbdaf4d099ec19c871cf1e4b07f46b9fb13a961e391c02e51d62c8b7cb6d7f5f3d0c961cb8968fb2784b719beb8da01ac590c7d5588d62619da50d8bebef22cb23a3ae0f65312abe9c8f5778570d0bbd2318a7e8100654f8686b5e1bcddb005e33637669c330b513fbd834d286393129e49295a8c11210a2c7accd1b8f25f583c38e54ea128542e5a65b00b48295d7a28a55b2016d6273b41cad2592a77801b86d6a85de5b8eb515eccab64444714e71289386999a943b1eda6805b530da328b9893b6ae0ef7a8a71d6828990e86cc59c01081ace9bee530e7d4e8cdd42acfe5aa456f1e1517f7965c1c4c68ef20d724b81e6ead753318b9e922908a11e44ba97fb7aa1ea722d0d28d5e7bf431df3bdf38ca22cf5f6db46f757cad655ea0d39a1bf2a8c4214135a666df1e6d869c298349c8ab1b40eeeb8f7dc2b1b9500fe28992af92e7fd2e4b6a9991072789f1ba75450b1c24be3563a1b7d3fff935cd12a29f7e9f0d05092824d657689b09229a6cb7622812cdd8d6a2ebf8f2eb5734d7e1c80e4a3c0146db36eb87b916e3aa9c7b9e680d4bd048e01fcf366e02b94a600f1318faa267e878ada0d724be87e92bd0035042f656638fe45ecca489cdf32ea6a64d2ff397d39f1c7829b6f20690d8c35c7a6b2b24d0687af63081454f082471ef55f480047a95be36ad8656b0f70a7a94ec5542af470f65d758bf8cbd58e613e9b1cfd6010e7e562732b94f092025aa6702b3b1c0bce806ceb55bc6d155f32946e1ecd9f66dd59414eb420ff066e2f63935ca7c8459e76175065dbe18b07d2eb0afe11169f39cf28adde70c656c2f1c772c094583d464af9983ccfd4168dd67d11d0914ed3e62f541efe90627b5a71a51583baab6ea6cf3d59511e07dda7325641b12bcddacd95347f8eb993e5dfc6e33f5d46cacea898b7e2f3e17e48fcb7ab50c99c9fb893edb00b42ed7b53fac5d719cac4fb1f05b6df67e90614f9801a45ddaf8e6ed6e21d40c7baeda87fbba0c56e7340c5c8774e5cbb027f5937671151d954b0b0fd88c57e40098e27a4a3a71989c903e0867d87344bcc0a4d81870f42762c211889eb1c81021e24d8f83d6b28f726adc694c0691d4508a9f176962293f33cbaa6a06d1f749badc63771223d41580b7d8c1b20cbc05cb97e9e397466ef0977af0d523a7129e4afb2039904f2b1ab50765bad2dc24869c315db3594a8abb041ff341d8ee2671b4e1931fa0d78cfdf01718aaf0c780b98df91b8ded5ba73a13fb23d91b501dc13eabab800883d4b08ac83a4b6b1d1356c450c3274597780aa7395c56797e434c5c9b49c10a15460e7a291c138004b39bf659ab9266fdd910a345fd7f19412292dc3ed3099458f093c857f2297a22878a2a9cc36686a6649cad48ed77c97cf600a947a7980691e284488b3b632ad625ef547e2c3ca0b7cc37352ad24f78efd83dab4deb6bd4836db5e44f545ff77f5dc16591964358f7204896895395c36f349e245a8fbf485b003bcc8d47730924fb4966e726617b867fabc304797518bcd8a7182d2754252b255982e287e60f4c757ba99d020a743fcaace752c9409ced5266bb89c6b60cfaacc9fa75361f677a232bec74a28a3e0aba25b6b8a8edcb8e7e290f94d834cd4e5a9991aad3ffc741b80c23b58d65d7a39012631f692cba3c9675eeaa49e7a0add0c5c08a9b9c37fecf5e95783dd8cfd576abcf586856ac053dd717c514b959bc748421d8d407a46b030eeacbe4dce12d0f49dde04faf2caa7eef6c58c7dc62a7186a60c59ada310bcc09068c5075354f88e9e2141ce74de466201663c43ebcd7bfaed2a22cec67e7eb8be55fcde240896c58c1da614faf3cbca328243cfb1565af9c20c60f766f91e98439c1b5bdccbc40f16b0b2864dd2d6c4a6d121329d7cad65919a12c75a39d7b3417b9dba360fa3e94a3420c3899387bcd5a8bd958b4e6a2012c3f793a07d72b22610fb7b931bb017cc5a3a3a11ba952e29ff0e58afc19853ed15b1ca3e8f07f5cfd43a51ca7a9d2865a8a4a5b732b3f6f9131151892a3a56c7064b23c09f0f0c3131f45958e39a29aa2cb2dd1f5a5764d80e8d28fe76f2800eef5f43b9ad87d29423cc6fce3b4d80040253bffdd87ffe55a0217312147965d1e9982b465c31be81c32796f04ab9857e06140470d8f669f312a0b9fdf71251abdb6c51aa4def3e402ebfb809f1bf246651b3e3bfa555f3318589e6d5e9921fa8c967a1e0f2f662d4f121cd2deee62f511dbfc41049bbfe1cf75950fed989dac5e2d926fcf507da855bbbf38435697f6c167d3446bccbcd663ec18e355e018a9444d4a22f670a15fd7aa08954a146825b0fc9448e803b65475f06081d3e0d5ee35c29b95c3055dcdc5ece25acaca2a59ee52dc9ddfd22aa00dc81d45b92e9cb816a5bba4cb41d13508e9e2c220f2a170a9b8b46d953f48a0071a1f1af06ca991d7a4e656340566d7da1123bd0181ee643485e56356102f7558d81705082276205e2ef102559474acba29c35b4c8f4d55f16305015c3a8a59bdef11c0a9168a659fae6b42794a96701a2b6a845dca0aa142659ca2ce1e86c36b3bf29da6b9bccdd3c3feebed10a01a8b4eef5c0db07720c5d944b3f3f195a98e7a2ea91265e825400b2aca234956c08eb1913d7af2f264f08380cb61c952c62bbc0edefe697b987f1fd57b43996ae83901458bfbbf470155fae318ebf23962b015d6775819d3b519a8328b525e83a9f2c0425794b5040904ae7265323e3c6696ee5a1dbf7a5dcbccad40ec6f9d1fc254eccf0968b4b0a3018a52853a38e3d42308206abbf4111f0c421586e1290e94403c4b5bb2b9b45585a45c2b75c471842f4bd6afa73c0f79dd5811a971444c88f0fd24e5434a1d779e0f3a3b6cb6ff742d53dfd9636d37828ebb5d875944a0d16b31a2f7832a14466bf307f4bd3366073330d7916fc4a103ca9d5ce606a3a2505789cc78e63a7dc10895aa53f47bd0e8263ffaa39a1052945eefe81ef474cb4ffd214d64a4160da5c43b09e6b4cf54d9d89929e9da76dcc35b6bfa00b61b4c815255806e0f0a50365ac91fbe77ca986abd12d2d0f85b4b33eb41110a5d9dd840e0cfda20cab6ee62a82641a5d47795c9f4833e9488b74eaed9f8eaa101bbed67a8672701d0a2e4dbbe67f6410dcaf8a1253ce7d9dcb0a6470318487b4aa7669f1dec280b5f090e13b911ccfd08cb57ea802215b87f7c605a16feae3cd507d95197afd4966088105c44d25553dd5dea00cf4930c3c85e20577b270b717f77f0f06a12b3ea22997d28f3505ed77c03e7eb2945ca77c07ae53fbc73885711bcf5ef92bf26db071ce34917bba36e491d357307d3c5324d7568c734b852af42fd569b763a13e00146a4c3d13920ba981d104a0ee74575eae16f57b6b60e28b2c9079e1b3f4c1b2c2a4c75740e6ae47b11282746d4781508985683054b139ad1ae5c05730cccb40d163b2a593e2b561f1234ac45896c12ff3fb3595847d60da4025fd1ef680882f7514d08627296b4ef943f433ae67d188706a8b71e501650e358f2fb4f975b8b106ba5de4fe1e049d545ed8941910101d07b3e886af0f493d91ca2022818bb6c0baf4c6d7513dee7e66c33a13bd66973aa69e846ac3fe72e3d8df12faf19a804d05b41774d6b4f52cf6866087f81c603507aad24dc147342dcdd818610d410de9351f5f1a8b38b7da63a530286ada80795bdf00e49184363d617679c37668d1c8a12f0e00ba7466e3cfb326907ebedd767459589ab7ddd7f9c8a59796437b8329e40225f70b6df13a3261f768a39f6f9571dd8b4b6df4bb5039b903ac214d20a1abfe69c324f67eed39c3753bc948475e04d7a27a15cf2a48f59bbd521b0d058afda5102914a63c55a8b44e329dda3227da0ffe252640d327e30d25b62773b8616062363d59a26cb3193494858ddbc89471e21eef9caeb5c9ab844223e5a89703165350f3b21505ad79ad09a304afc1fb5329de49c13e865727be49c3de54ccdc905c0a9b1ec19abe634cf4d21590bca40a01751b4c5e508589a0c4290e58d371fd32239a4ac41b1f1dc1b14241a21ca26e13bd1f89a193e2e2b06565ee75f7209d3bda5d26c1df98f81acf849954bc6f55cdae38a30c3283c6583acd24397636b460b0847e7bce99943177788fc3fe1bf53c163194c92716c3bf9f17036183d01208fd106d361ac08d10391f34114fc2b8d80058748496b58c2a6d497354864dcb81ca4631aa65729cf8f6db5043f225c98c5eea672d4ad51cf632d84127ec9bead032a774c2865b9fb3385cc03f113f0dc457050cb02493c1fbea785c8c8f16d418ed75e088be8f7313e68bc1b88c4a35fc39e503797d14803a01ac9d37870e952a90dc4522f63576a015844a99cf74741704e8749d945229cb357dd4e3ef3878a68f46a6bf51ca529d77c19971ea94d7e9d1fab14c031402cabf07aca65ea57b9d59b91acf91d7f18b7685781fc6238a626b731d13237d63666773955a1dd41571f4276ced6142beb74bcc15c57a0615c0b3b3e7ef3b3edc511d9da98836dc086b8e3077e2306ce37c8d3f8b8ce369a4f4505d2500557a1013ff431282ea858725fe1fa6f3eed49d52db8e72bd58bb16221c24957ce2c1b550d52647ed0f758d69dbcfd02c64b559924ef31bb34459dab6a42bebdaad3d1cea54d94725478f955493f53a9709e2a411c4ad2498c073cb14a426d76c3aad6f08459e22a856df1b6205ed613739d44059f9218c36b765c5991819811bea11aaef1ba95d879432f929d7b03762d106f5bbf9c4abab2c18d73ce8ac87fd40d7121b844a4d72ed2bcb2230013bdff42aa1fbba7c887407d2fd44244c178b01cb4c262313e86ff6ff27c53dc071d51ef96ee50360eef0631e31da2e024ad96c80337fd1b2f27ab847942befa32b191491a51d8144c4b86b324ac121275796827685d954382f662f95b39c0da7643b31396a6b9cb7181f232ad9e7283f7b24ca139cd3e35c4da865ba8a74c39a66668f6a56e4c0a4b75fd688e246fba48d9bda0ce41ad79d5d03cc2491b6015628445b6b9b2cd0acdc96bb0bd9de7d72d2e4273089c6029134b6f77fa5213749105456ed713218c144743b1aabc43950e4e03c087dadafd67fcacc0cf6022f639bf0eef14988bccbd125fed4bcea1a62a096a69e462a4a940f5e993e0ff7c82cad95c020aa67ac5dabf5d2761cdd313d2e6f4847ad6edbd383850cb853ecae5db125600c7313726a34fb7fe4fe2d9aa3be282729847a4bfc79dcf1cde6f23c323a64d134c5ad92c252a2f552baf014cca39a8ff6faac19c9b48b798f1c9c73650a3647bbfd596537a1bd9ae8163e10d83ffaa127df605e00e3fdc62b79863fa8e393d4f4b4ac281facb1fa587dd55c54466880cd459801b8addf0f205300ff31a8d9c3df5ca4d55040153dd1a25d1e734b51d9f446731e5bb541825e3a19af5a23a87d6a8c0c3ae55bb411ee5a5ce96b47a6c7eb7197dc184468035a9fbab1d6283012e6255594b45e56bb6227462bb5c7c4090a37702027267200d81ecad1c8ea5f3c47d9982851f86096070398ef503a69070654dbb82693b46372924730d74900f2c7fcf3763e13fcf645055fae30ba3e815bbd5e4897ad6e45c309576a6faacddd2163e9d10d0df06d21606c2df12f61a2e2b3f7bd29018e395d0a692c3b8540d3b142b847a30f96d0f319e820dd1acc98580abe8509a7ed409e467e753bdb69dcbc9e684a09ee2732f10a541212d1efa1d4208c17a42ad623f4eaf6abfe45c901015f97332d2a878a68c60095a6481d6ba3c7123bab0b1822be7ba1685d0c2bc1fdc1cb2be451c5a99d7476c67b6b129a600933e6e8851388fc5b06027b80a9d8949d4855cc5d250f832c9e01f66592a91af40403e79a326eba3c3810799e438a1b66c1fed61248a2444155b69996134059f4deacd0dbac108de722c1d6e1a50d741584077a12834c0eb76f4111f8d3ae85540539485271157d410245e6bda8cf483809106603ecbc633b4ac827b5588932fef68a4270c285e4d9b1c19e73455e5edb3895c2e090db2b1699e79d0320b1eee0be02bce4983a72a593ec7fba45bf1e74138b4ee4e3dbce35d5c131267b14d4ca490e2ff92dcb3f50c0190b18e0d96616ae710d31a073970231913c546c04047b38d08b0d0b393aeffc750b8970582106c749d7c021a7fe096585d2eb4e0ca28f77b12910fdb030963f7b18405ff20be2ec76e75269fcce4e458c93dbec1500e22a8361e9cf10f22f91171f0c7ba7e215b139ae4640cb405e8bcb2cc4fd9f65d80f3b7004b4e1a52490389c5f19681eab8012b81dba2ade793a8904af18d5f9ba6163550ab0d80cb3751dface1561faf717a8c113cc14f465b3c6f08075fe6eb4b41b6c8911a3c93d93dbf8d5df54dcfe6a9cd17550461f3d0a49923390dec98db6381bb31f5bb58607db3c404b809dd7cc349a2efdb0fbb752853a98741a4f33f92f30f20386547c841b9b9381e06eb002a4e5194cb92934d6349c15385adb5549ea298b564828bdc708a9fb0c263927dedc4de47dd0ef8d6752d1e53b2971fd3623afeb66fee73a0d1a666238701d1e746e1f9bd95ca5c7520c8694370073dc483d12955f767d5bc58c23f1151611528eea82c3d50277b205835016e2229c8616ac8d37feee01e4aacce959a21998141429b9027b088545473e1be1a0fe004815882a1a929857eb63937c839166e9a444919242aa1ff9487882c58a4a1c6058c92745d9bf4ddecf8ea1b40897afaa492c2ae7b72d618fa083017ed2523a07cb2a89a229f458a57586a4c0d9ef04cbb16f0a12a93dec5d525a5d52375f683e9305fc04b6e1e384d9c9e48363ba8dcab8ace1a89c69264b8a4905c786498d1f69f12c21c3b73a93b86a9c9f1d21a5d8ab420f7b42788978dddbb6e8407de23172d0b23ca99f2ef25755f82bb70f3501aaf6cf775bb6c34eeec5b88a20d3a28e613aec85f4ab6313d5f2238087f1f1c93d49c4e59bdc82b50262c05a75210c4fa88fa28599baefa3e1f14dfb05f4479c0b0870f5ab9b8a988c0c88f230855f822fd6a3a70a65c225269b37f185517fcd9da1a6993ab9810ab2f4e70ed3f0fa63232102a5e7a36906332715a729c5a9c18788a9c8a3b32e5322ba792ad05d2322b5efbc3e3f96bdcb14d61fadd32f74dbd4812bf5783ce0cd8b0f85e771c0914ef60da064c66122910f435d5ccdabd24a8f74085a3a90e950ef68ef8624ad063fbdaed262c029615a386e0f85554186ed149a13dc90bae864006ddb845f234f082fb36edc80db1d91b665936fc066a375990b0ae338cd9109f7c255decefdc6eb43b34de4149a23574d678fac01c0d57a673148c84403aede4e6d36643100ab90edd499b7eda42cfb8c16703c89d55a6d3a74992cb307a50b941ec9dcfe46d5ac96e8962911173c7e35e0bdd7e20d70d9254386741c246e31959e4917177e0fe26e0ec3a358e4f4fdaeb7a5d80498b7aa52aa16025ea553cc0470e759fd98cb3b439a9d33dd009d0949e88f6d38f80305b7a2a125145bf07fd43233312018aeabc9afe923713c985deb577c8e8201a128b2ceaebaa86497de491d8f9216fa957faa946741226e34062a0e809ba2206077dddb422acb36aa7597f05072cee1d54abaf7bba47a123c6c261a3d4fadab4c51143329c565d4871dc4d1c97c436b2ee80405f434cc1044a377e06e9272f7f3b84c7494b984b1ef3d0dcc38b1e1ea43e1a699e89a88d66be2223b80fb2d9df2e757bd2f329c719aaa4ab0fad47e1cabb8b030928bda52ad56dc478b1c4e281ad1ed306ec1a1537d68de8c720e5793392521cc28a009ba2a1a1294794fa213ffeea27118ba1ce92cea9d382354d89446f168b88948685b58e90902b736795eb9eea5b8b25d12db3604dd1fa69be195cda27b84ed51f0b49e7171885346ae2e184aa195d97130e71c9dfee70ffd6af293a9ad378b2e8ac6d44f38ff886d8dbceb83884e4ac4f4e6414286f90d24c75f810c97a778bcaba8887336370d030debfb443b12eea31ef3e796229c26514044c9efc8ba215f8eaa150bb83561087e0cdec5721b339942ab971d5a6b9538186c4f042b10ddd6e0233d63b4841cae560ec74c0a0dca4de251c567412ae3453d166d2f637cdff9ec2701d9d0f48baa0a6081c61ac0ed60c16cc8261f03ca11b7424eccad0f36d3662ca6e64970c2d63935b1aac8bdafe4743932b45a4aa7428f277335cb4d043475364c6642f091add0716ed37c4addff9644cfe1d919794eeda1acff0c4d0f42af5fe923404dba1f46b5e0dbd1f660ed0f1ba294c5ce4634c2486915efc4c13c3a458a221a38f915550974609418ac9a1f11e0b7a8f607462528a890cf9df3c978f3d95037742976c97bab2a1a6588c8d45c43fc538441248c7dc11e9ba0738427f962048be456c594c112079772d6dec4057cf3f18ac90bd5d2b8f260c3e2080f095d2e2fb01618192ecf86537ecc58e0cee204cf6167a33de1e0f9b220e5022fc618ae4ef57f0ee72a85e031cb67b7d31edf2e26a1ef57f93074e6c09e69673ee13680ef9896dbe496878796357789b6601d030de44dc6b95cd70bcca1962f6f5caf7a871624795d3945ebf7243a7f961936d3636186e265ebc8635279979f28c4a56b2f0707aae1ee7469417557740f55590bd49100e4f87bdadf54d8bb51512f05db42e8dad3e8e5a9ad4e1805b997b65df625a29b77719a06fbb05de559e2c7e8cd4be8dda79b491088eb7f56d6d845dc9f6a90d5c036c5ba2e46d00c1bbba98e57a9d3d45c7534cd3b9e18a00d8201003b66daa1f454d77b062f68da5448c0489cca7465469370a891681d3bbd3ad259c4a8f62a78fd7f00dc9cd4c04c4273997ca352cea3ec7827491c1886111642a94568d1a7f4cbae9be3531ab83e137dce3787967cec7fd6f2980da7adbdb888b1dba7f85fc440b1f4529b497188701887e7d07b6ff641602fdcbb50c9c916cc41c980ff5ab23a5b7214f4d7a1bf82580ad0f9db7adf19823f702143da8e9cada1290ac467d72d4dc86eb860747039c2dca0a6ca2b5b5f32dd43eb9e04e6c59c1b03958690f1773036a9f5728de58e515ca786bc1aa76343ad8cb0ccdeb9aae9f7694779f7051d4e015bee13107e36fc7eec298573402e223220536e3a9929ce584211e1a967d8c6d84b8b72f5d86ff8506b79c4c44cc64378e04718b2b532e8f3a00bacc8ee4e25963dd914fea107f57720c7ca89c90c9f141e3fe9b7554a72f545a892bce72a50c4f3522cd0749e25428003420c6c1db6bd162dea40ad516a7a883a14bd1e4a1c63df147058e1105f902f557807f57d15302c4c681c9ad9c646173324c7ce25caf50a1c1e9e1bac27e5c39198602029a45b3ae0368b6514169789b92fea2e08111256f96b26996aa95b62709df74fdef130441ce0c9fa86d1e683daac925ad62ff126129c4053353173581fd5d87e62769652d689b7478502b080b0e06401cf5c43f588627d1fff42789c3a33235187cd4d743b69551e7591038c17dfc8eb22243dd3a1818c82c1228a548e0b075d3614c41f56c453c5a706068adc44063342c8ac7d167785a24ceeb68621a4f68c1a290ba1a0ded9055e08bcb822aab7e1a6e52a8eb57cb2b698e2f44bd9f1f819c7aa1fa9f7e436231b69c8d0fb9c972482f475a569c08d210d339fc8ab4fe80f265b9dc5932f6ecb40649884f8ac8c50cc0599470a883f30edfdfba9f11cbd98daa113a603fb7d70357b1390e055a9236f907eb026bdc6f4631dfe129aec14c9d69488ac03513c5112ca5d42acfa210dd2c0e5e83b52f09e4efddc01f53695599f7bad5b9a8fb2d193526322ffffe2c70e0fc5c5c3c6d32d9cf40f01d00d30264d5168125ada8efdc0107b6259a65447c1ae53838c04ac5bc0c1bb3b02ef0964460b470de4230da456c81c4731908762b42f50c3693c3e6d65e79566576a48cfa381eec267781052d65c2fd5863cf18fc6d9038691fbe2e721c06543cf4555b00df5dfdc7d790145c1c344a565207bb0d4f57cb0a7ba2681f235b412b595e6328ec29e03bb55055ce753876b94c03a9b706ccf4f6c9a57b4d402b97d1fa606f3b0636007bec6f06f967bdcbf8bb92db69f73129f0c5ce19bc350851f4d62a87f4982d77285f86cd134e0047b05ac6ad9ece32b5aaca6a687cbd9bedba659199c12ceaab28b37f5f3b0b353e2b816e2d6ad0ef0a0832ca5c10871128ede41e486fa168e84797c5040ce9aa0698a9e5c12b35b76c27d722ac20895b3654ba039f91411f9337552bffbe3ee1f2df241c49bf481a3c5c7010862af380342d6bc8d65dfdec77bd90d01ef8067144b21caa7b0bd2ff931a10657a79235136a2a8cffa60b1de1d21efa19ea20ac7e30be43fd1243cc5b156252564179245711a9fb34478368a031396d2850d8868ee483ffc945799b686d51574fcb32c9782d3c15d585623383bdfea9549c958cdca53698f6410677291d525cb6480141ff1de03cad8c502c05db84ccfff1327527f7f77687bb1a503657877e37e5e1ad4f492813c760584bc88ab8e35b83216bdda280b4f3ffd5b416afcaae531ecbf68d54a2f78b0829a87114a54a69129cfab053653c1d42c9f4a23e8f869f6040fd4987ad00037d756de340d73e9fee30a8113953d515120875c6e3444372d0885be939454cf9aa93c49e93f227d74e1b124b6aca84a2e84140ffaacc833616930a4c1593d98d41c5ff3ae8817c9cb442cac52245bc4f021deaa8b5d1077b94baa0edd7baaaae6d15df935c8ca4f9d779fa3506abea693be21ba1422d309ad08a5e2ed4db2d67065bea67ae907240eae4eb9f40c19383b6d6c0c93ada661eb5c34910a50fa273179032fe9f035a4d328a05edfe515e4b730577a4f30bee8578a6d050e3d346add7901f7eeb345a55fd035c785026cd8786799f82a0892e0aa3f6e3a432347998c1e3ae791e5e8a0e5bfd048f5a43f57f81ad31485fd06fc19ed73bac8d9b8847b5969e1bb4c6ad0ace222aa03b5b963361bef3ed2ac4d714665597e6aff8d87573b73407b8908998a410700cdcd594a367cc51d1f449ae9d8bb2d7c39a007d3fcac4f5cd0aac262e17316016c7ad334e4bc17bf9bf540e8ff1364060c8145f88259d9134a8f98113a0d1860bce19d92113a52526c714de46ac09682e8d7766cee86c7162c7cb2bc42e58f3cb484c159f84a721866c9a14807ae69332026b5e0d620072b9ced2e1fde8d74d5bc8625e17b58a8227f3109d632ba07375e0606a08665e770a0dc8cb29cf17b938d71d205d8f17546208e4f65ef771dcc2483df9b46dae4f81295d97181427e3fe83fe0f7c27662776514379b23bd99e949ec0f8b142fd913bfe77cbc2efa9ea5c6be1953fd39d0f54a8bef8920befef2df5f50f2bf2039566e2e35323ecc8ad068e50021210774c1e318937b527b147d9b97e755bda925000753f6ce6e93b28f9fac963cc9e06d602ebe9641ba01336aa80c71f8ace4b0bd40ab6bef7a9f0a9496d0933fb186e9e6fc30401992873c5828cb687d10585ddd06b47551968daadeb55af2746ccd3281410adb0664b4bc4330f3b3609f725b6cdabd610509907c5c9ecae789d322c9e3e29e0d43008642ad2325823ca198ae0e5de17458aa258893e898756dce7dbba463270cc3bbc4bac557cc32e32bb760655e297f716862250855a91cda9194d08a864b4632286b450ea107f3916532986e3c80bc6b23390846884880c03e644f1959d3a21a9c9dc48d4bc8dba4f2ed35f14db3258496870c5cdb198e20ce440c7a7dce589a945601aa2885a513dc8c1e535f795fb55fbc21ee18332989013a30f686c8693e41a97c1640a1b0990caa0050868610094e6d11a86617f63b3674eebabac1301a6e5abc2f972a86f91a9bac1da9774055ed3b81d86b98c51a7a3e4395648b6bfe09e57038cc8057c6ddde8b94aef282bfc4e28f8d306162123d266a00de11e43fa9cc6b830ff592a71520c4b522c517e380bb7ddefa6bbce4028b63ab0f687f2f9be0a9895950932a7dd29032a2ca5932c08a76ef5412173bbc30d1a9298d5700288cbf87cba32c6c682eb7e72c592e3b05063c98c36f00e55b989eb2f68c99de50b869a7700d459ec2c201ee5c4c2b4abc8d3894f9979585d5786cb2491d508d54dd89d8a9263d2075368dc22752266d9883397963f82f35ad74ed316d8dabc19e52a4fe3c2cfec96edc0200ac9977c3f2d2740d9bdd9f26c22bc2ce6f12955e295d9db57e698bbf2c7117b2a5a1f513b5ab0f21cd4dc05e3b7b8233a16d336b2898df1002ec4a660544bf356236781052df20350194c2c36d534b66f9d03792098c030c97e4c341437c26a79fc4ab8101cd2612b8baa5b9200bc571afd60d414628b48fd48b5d6a6106855f4832762df3c390465feaab675891becea58952aa44573a1dfe522362e4da160d6ed8680a226ff443bd57a49c5885813d91463e8f6bda4da1d2444c444c9fa34e6ac9a3067e2023841bee124b9c50a9a44ba96fbbd7d3a817510b96d1dbe75d30dc7b887f43704377cbbc1e37d2a0ec7c988ad222a2ef6f5ea672c354b8c9be09c40c264a218a3633b2e17b809aee1fd158a2671b56b51e0cb4ca0a7684fa8b521850777b1a03087ef332bb9fcf9b7f33957ce24c25dd22b939c34db9519a098fe09e051c39269ba4ba2991b3d6666f4fb2073244b98599a51efe25b8ad896f6807d592b6a9d9b2c7c3b29198e01062a72dd821f24cea2abc039a347ccc0176f7678bd0cb1959e4b8c631a0abadb2a2a4b74290f7918bc50a57e4f65fc9ea3dc0360c256dd77fc96b2105dc20c811c2db941b8ba4843765509eab35b783060604b50a3b9d44193296ab7dec2c3443d0ce68c7dec6a21c768a472766b1c68251bcf058c4bbd1a42da5c9a0615f3a8f1e37eedbde08513f6971bbfc644237ea6bbc1f4f99209fa73f573c53b6d060c8423383ab088a06d1c8826361fdb16ece5cee32351f56ca1335c7e1404d7ddb54309ce291fc7671a90c65ee5bee939c11db1a846f0907547089d7a62b8b636b800f5e1bbc063d02724a8cef5db3ddd3eb10134edc649def795114a78f46944b25625a12048ed57d64f03305d157218fc556f2b844cc5ace5165efcc33ce5e592503d47d69ce6bd749791a7384f9d080155a8191cde34b1d297628373ef93f4de3a1a06c5554babc8a1c32e7f587749c11544099034abfcca898270e8536aaca94610460b28d52cf01272f7ca12201f844a7091ad2b1285acf009cc3930a76c8b82e2e43176bfa394f13a82d70707cd51638b2bf960b01ca598f6d4d012b217ec9247621fa9d75894aa8e856f6ce9c30c9e1f8cc85dd383178853d84678ef5563a5d12d547213507a2c3bea3dccc5d377f5b630834abf1306c380445107f1af497c04fce0bff060f4049f7c585543dff5677c4099c7e71ae715b17828649d13686bc47614aaa1109cd9835f2c8a2c1cf2722e0718b54a427ecf15f07d65640f7c96ec3e43181e484b206212530c3ae1c62f37b36d25461f6d57a19662da52a25d41b31e2248c347eeb98e4cf3168b2bb52cecd132aa7c21e9e454ab12f920c1dd3a2e746ebcb08b5f881afc97b32664a3ca969e02e78aaedaab92c5308331e03bf7822a29db0f4be66b75da2ce863f9c48956818a9a316dea1736994a0a101383d8bfa21f6163150919dcbe41dc30dadd2f9b0ee4c0a32c6c2e53c7d4e0cddc11ed7f365a60a223113330303b44b4bcf9024e2f91949ac4dea18727b1ebe4ce3de1f67d263c5b292b1b8dac8494ec5aac36f0d0681a1b9ae59c7fabcb498b0aa76a082f072fcf12811dc01b8af83676a00df07a1407891b37ad365b3d171d0bbc8dab7a42aad54dedc173d5731a784143ff6ee6cfa449c65e14ac2081e2f0406ac43ee40dec8a596b27bd4de1dcf542f21f4c7de9f7a0874b792c253494f0e0a00e1efb8918a17d4b1e8d8f9af826fbb656a71ec637541cfdd779d9385758922366692355f5d1a7f8979d6eb2a75c0bf00481d7478852f35dc3740190511e76ae7ca208f6a15f5328276eab0aa57d0b4e7f1c4c2cf7a82286e36695797f300dd687fd4e782bce2070bd73fbf9ce9093351f4002ea07b0547a835a55ff11164701d66f349169eba69b0e09f1a7c76af54d591037d83f68e1d893d8e139be80423711fc59a2b1f6b746fff4518ffb5c0c359343c37998215d8f08a334869c25d4d8a15ece72699321071c46e807bf0b944140d509b7ea76a265e5c33d88126a5991a7d78e002876093963ee76faa6616a2273fcf77391364eca86fb586f020d0f3d917b27643ac42bfc5d8e5a0076c6e357f9e0dba994b3fb0cd3c59592c1f17065c32917a67dfd942022554a5756874e811761d77043c0909a204e775563f89efddfabba8a1403aee9f67244053d98f91898b7833746d99a572423d6cb1b1129b4ff87dab854f0628f5d9ef43c269359cf2a18b6ddaf91dd7aa940f9d9b154dec92921b3c6ceb6d09746fb4e8a13bcd1d929af3f892a38993ecae71778d01e49f0b5ed1f9ac3cef7324f88a384b0f2a578585f321b9e5d2eeb84b5d7995b0fbb513ea377334e3155901d209181b41942ed8df7d3fcb144adb5ac8d64f8c824da1e27076d1a2c908620726c77475243d50b6c1ab26d785df9f2677e649e1ecc1ce7a96954ddbd3b8e6c24a8db15bee7f788d31197ea3587daf3906d38e7deb16ebdff4574af0bc36efbcaa270d3b57bb0a424df436c4101846f342b4abe1ad8de337199f20c31d98e79bcb6e2534b7ac8c1759586b31008dabacb7a7fd56ca8b11431c836415ec9d4fe49593e34cd6e06d565d0be96736398728f77051e936839e335208b9c6d7434859e9f8cdda145ac08ede05b5a922ae182a78a47a282247d1dd24a894fc90023a9b9bc5e94d21c7df0d633915f73b14f36815acd92557902b81f90afa98af661fdd085c5372a41907d4cda9e150aa5262ab03cbc195ae64305909dc70865b7a842943cb7468c365d11ba97b10289d207c8815e6d929436449a99853327391aead437905588811d3b7d75fb4c74e4eb0ffce43f96155041e1bc204e899050ad03613a5bffc678a6dbad5139ef51448c7c648bd748aee17a4d7131557b0632f5f8292b471c69e139f5788f8785a2b12836d0d6076d068725557bc5bd174e153437603c96baa4f912a8b904879cfbc87d829cc759711d02fb3ce7d7b09a4a734ceba2cd85da9dc275665a7dd19b4aa94a5c03e38d3afa803ced96bdfa34eeaf691c236f80d16ea409b30d4550d36bd56daaeb28163be792e77dc5e53b151464c8f0d88e85e593c4b4637231b921043f01784dfbc3a0d394d0041582108ec8da12b683690591d368fa976aace2dd36196e24c29d0d0d0538cf5c77ed6ec1ec6e28c5009a73145e6193431f060515615b61429bbead88e009926abb5ce0dc1cb948d61ab06444904338e218b36999c3411d726ac556e65a8254a5d13b7bd11221844be4fc9e7dbb1ad137f9aaabad6d8c622d1b03fd2ce64445633752a2a8c30c23d7c56b7d1d9b1f94f53707d23074ba887f093ca9da867ba9486b6cb9c8eed2b5e69f7d670c006c53dc487b27d152b3aec4b5d1aeb8d1316d388db5c568ac4dbff707ef0521a14b8d55c09ca3189debb1d2b1f8fd7fb2577e2c4d65badef7a65441eeff65c9015eccc3265455728a7cf5ccfc89e9fc75fd5c4de38474551947f19af4e04ee2c2b6c48796983273a1b7994fd68d90e8c32b4296d477399c8fac724f24198d2fee581e7e36032a4859bfa6fb88bbcaa78526ef937460aac5e03fa71ba7e5c301616a9037a5025507ef2ea23665adbfe6908923c526b7e0e6535da22ed7718f614db3eeabfce623b152a8f6f51a79b0af0f81ae6ec38c6d27c3da1a139ebb12f89228c88856b17a9bd04015a5843f94d08d9bbc9967b4b99929401a607d907c4076088086b9b4c2bdc566baddbea0e82d4bf0ffcbabb6d6db7ee21d847708f2528128d461f88473bc02548514a7ca31f30fdaaeac72edeee207cdf488bf932f201d3b723c0a5df3c4a8f72c093d672ac05943ef5a7eeee943aa594babbbfc0bbf3b8c0f47d94a1554dad0c569ca1556ddbced02e3bde8b7f2c397106195a5593a10233d8fe19dc855a05da45a717f485788e6d8b44088e6c914b6cabab7e0d15309fdc116cd236e02ac0dddf52965b07abd3afe1e62e85e4fa958e73f678e7ea3acafdd218a05f2259a995ed8358a5c40a72a9c3e4f506120d483608f92489dd6b395b695a56f83817517289493dc06560fa05b05dd7756fefbd5cf7f7bfeedafadcb5b7b39cadaa92c6c9fdfe4e0bffa28aa9fa6fdda80f24022842e06244442e716dfdcbbd5305c5dd69e1606fe8a0a19476dfa150d7f47e214a2fbd1ffa20de7f546cfa7d437f437fdf47e86f2814facffb2f44bf344dd847434f81c0337428e4ddaee36c15b1e5018d149a8640ab5c033d41203f2c305934ed6aef41af431ee007f1c0af2215638040930e7a1f04f4bcf7017a1e08820bf81e656895ff0fd83ef7fd27ea68d2ff8686e6090d1936c6b59da27bf906e9082e80640620b3a65216d0216e984f9863f878fe2ffd027fe547faa10fb2f2dfdb770f9cd346e7cb02b3675809f2fdcadb0fbd8f95ff3ef433d3b1c7ca88ea8185e83c0c1c71c09fb0ef6dba14fd0672f28cf701779eaff254fcd133def218fde84ba816484f1f7500d2d3e7417a5aa294e2d28cb16cfa9e8a28fa163d49cc009d221adfa60dd026274daed872d2f46ec28f7b84784e576f113c9f7e024260888a48c1ee744649fe74f6b3f66af2698b780b6a4fa3e39b2108babe2f140a7d5fd27cafe38340bbbc226fba77ce2f3f7f2357ea66f66efedf9fbee7af82b4f484c66928ed502804e6649bf69edeefc423ee971a5f510736d1dc4953ab1d94eec8ed8ab4cac9c0f7bba7e188193cfe9ac1638ae189f99a73081fcc9afa0ece1ad7410ee814d995c88e64ce785f017f74c6973e88caaf7c90195f7afb313860be68109e0d5b08055979950f52fa196f1fd5df63e555be47e9673c0c2baff23e56461c243d54481fa5d18511a76b02073488c1544613bd81123d3d7affa0ff7d87441a27609abfef75b4ca0f40ff13fb47e20ffafdd4661ab640f3e83f1ab6909379803ffad1381a512d887ef4281ea21f8d2f73451a8d9ec7cca3f1cb9a7bf4a1cfc958fc9e7e2f1243a73cfea2c149ff7b31a6a15de0386bd899359512f1dcf3ffbe102d4279280fe5a9f90b91aec0776ca9a27056355777d4a10dbaaee338b7550a8d2cdfb889a15d1aa0b4092626cb5fd48926fde94fcfa0186aa0410ae67e6678c44783bfbe918686864728c7e003a631b8e0f4c70a1c04498fd07b1fe4d69d4c803c81749a641a76ffdd1ce02048827c7fbfbfefc3fb100a86fbdffbb8ff8d38487a7cefbd8f50134e282206fb469726e009f3121c61069b30245d48b45102642ac9f46d6878e86895d3a7d1d1af1a5a5a4a359fbac2fc6dda35d2f00473634b252203d3af34db1d16dfc7852a154363f939f46e32cd39c9d0f7d80afdcc27d6605b3ada45c723dc7168e8de346b42d9bd1fcb23badb420c70cdf443ef893f3ce441a7e40cd029dff398f91bdb1b4bfa1ca0d97b2e24dea7ddd8d2a46b81ed88af480998da276aaa1bf567ad94ab1dd785375d73ad56a95aa5e3851e31d07722a5a4a30d8d8d116ead88afa3652a12754b4451606ab34dbac2a44d5d93aa6afea45dfd940655a1221a129fc584af373ea1289c326d02f797150499d61b746a0e99be7fd14518b3c6366b46ef4fc8f47d8c4c7d4aa6ce844c7d0999521723d3dbcca3b7699148246a95e8673845a2d7e637579e783bae432af9d4d1ba147cb55f1376a9756b6bad96eb1cbc5fbd5a02696e863cdf5226a6f9d3da5aad73b7db759ad3dad92a5badad0e1ee1fbe60c65c955afb5863cdfa758968098f27ceecbdafd5c9bb25b6b476ae39d58860700c5b27ed9dffd57bbee6b37de12c40098ed0804ccf3c59203bbecaa5b0ebce14d67ceaf577ab9c5727a9e9d5b2c2f0dda63e215d75ac7daaab68b00bea152598e9b007ef9e73acbe456265ea825c084d2914e55b5dfe9e06b4f07cdf4ee9fe9b0556d5703bea1b21cd701fcf2cf75b6c5d4dd5ac2def5c0b5b9b199d9c73955b4e2d4ebcdb9aa4fbb31ff72806f9e40398811c2010ef304cae1c937060ee50994c31640395cb1c3a89a85aec0a33c81729805619c27500e3e59958311275f5437fe2587582ebf657130e7a7307dfaf4c962f2aead2c26effaf5f69eb3a67d4ef790404b1312309d7e8ba86e9d21dbad9f46e9ef1813727f0f699d767ddfdf44fa7ba75db59f06f9eb27a7091f173c6189308c3cf101d6fe8212e4ee723f35d2230619fa6768d74aeea72188dcfd1ec0b92c1d96d82181143818b20258bb0b723fede9c27573bfa8ca10430b31be18c10b6244602dc8fd364ce47e039832f002db11536460451753606dc40630f79020729d4043a460d283154037f8a025cfb9c2ccdfdff0e6a3b79b183914fa2ebc09f51491690fc9ad13a3b723b8a4b7d38dbe0d4764ef3d1aa55d657d2f0abd512851ca4aa7927ce774a9d472575b21e021dbe04a60e0f26ff4a68ac5622198c56230fa559cfefabf22dbafed9ab9898680cbcff46f47a338495f5547d5979f6f4ed2131d4dd194ce59c779c7952aa6b70a68a53cfee8be9f1b5108680ef4e8fe33b471b1945d9c403bcc728b3494f27c2134a7773efbf5736039b0926c364322491151cb0de80723d8ee1334d0e78925b3d91345f099d12008081bde9a40020a26ae48c2c3fda2882783e28b1d24a0f86249121d2f566357f8849124766bcf0d9c0645134320c3f280ade83b188b28f60684c5ed4682da039405122eba271d0da807273e403d34e1eb012ac108785057b329580006adf37c6430b00149b6439acd6444642e00633399144a84cae049215686acf6947145282b438cf945685034b1d337289c88d5a05862c909f27c7056b3a26fb320d86ab320dc389f991070c8f3473116d03c66c4909b0a7450e2062f1c824d797e0b913c5fa6d9145f0c99c934a60af2fcd2bcdc146fe04dadadb37a0f152328307deb95ae9d9ddd82bb5f3ab5eeb6549a61ab9b46eadd71959bd5ad7badfe396dffcab9dbea2d15757f6955fdea5e3d95128c80307ddade95f30a4eced6aed60af6c096ea4b7593833ba8d5625bbf7b7e59bbcce5cfb35f77f7ba312a7530080cba6010a6f3d6f75abb7b345bf585d76aed8de2de7b6f28079f10e0eddc72dd15e27a4dbcd00c85beae3a570252fa3e0b5e1a08da0fbbea1cc7518eda2b44d874d62a0a45ee391085c224dd3636527c5f2772397ffd39d8899e3f0b7662e77abb5027f25973bb02cc970c55c810f2429cf74eeae06f4d5f2f544d2dff122a012995461ab8f1bfd539376127b1705f7253c1a622edfe0b81dcfd7e865842e21c2bfd4876b40902d39fb58ae85cd9cf9409180a85ba06cb60c2840913264c2865e26f278db6d73ad36ae9e89086a65ace5ffe6fa8545cd752dbe561d5410d47adcfe9a0cfe9d5a7bbbbadd3badb5a337d4e6fd508a800434abb26156028e9176dd7a4e20b2bb2dbd9aca920982b7f777beb77efe3396eecd1ef8d38383934cc5e90e146b3a9d526adc77deffbfba43184e2dee37cf47b6310effb47141704c585df02c31107ff1cdffb0ef793bcf771df1b8384cad603c2079f84228d9e88225d118fa8cf8c5869c4a1b21e1f596c468f9d599ae8c54ada33a2b8cf81adc8ee88e2c61786d078d3e7c06afc84e12fa98fcad39b93fe8f43ffbeca884343a11187d2c61b0e0e9d39edf328bd599ad8224af416251a5130f4d7ef416b5c1c8142464f2c061bbdca23e981bffbaefbd1f7e87e14cb4e1abb1bbb47d6b1aec763b55bac763389766669882be27492bbb5be793f63a5efc7dff9eb1000a6f2a31107498fd197469cd28ff08f469cd2d8b81b71da07070a53e9d957b6cf37a2489f03ebd04f58684491c617864c27457666694dcb8ef24161dd535887a4c7e843281842ff7d8f90e871fc433e3d428f471c97b9fb8cc69e99d76aa5cbee1804490faff49e26c08278234af4e0877f479468f431e22041bd709f011376471f5c14132061882196c462309f39e98fa3d3b0ef85841e1c513e3ad40bde5ff7c9fe2e64e00923dd891d9460c2e4492c069bb06f0c222434c6c21b921dd0a00959f7a5d3b2ff8a12f08e21b33cabc8a5d76aacea38e96e67b944bd101be519d6989dd558f6b733bbc4d2fcb928fed3ad2dbb73b1ec9c4e764e96ddceb27346b2733ed9b99fecdc6c4950e69c5c8182272c04a3b9f45b8ee5090021ddad1154c324c512401039010f38d0927447945827497431250820f0c0032328c1ed6044f757ce91b46a403902143a2c11842b909044b8832c9cc2faa046173d70420721ccca10e23603bbc30e4c5031e4e3de6d0410bc1d42d03742348aab7246cc1bacd005e3075caa54a616ac6ad788934d61018913cc8e48c20f4020051254d619c132f103ca12426881830c7820850cae0e40589942092540a243061547b0c1c76ed13c981a891a0baac1141cec000832f8028b18f8f073854bf7678d773f2109b38a1a5a5f45a23470d5d90c42c187224c21031290412b0306a1eb33d332995a70cbce76a8b13222a28b984ac89125c10230c0c0a107260c41628bbccc7ef79a0828068204b12060f013021ed8915c9a5e757be7360b68a99a99b72a014fd8c5a6b781560374a53a0089004a7f09ce7eaa059dd5e79cd3a953a77449a6ddac083c9fb6d3e944a67fe7f8a3c3d3fb814cc55bbf1aba304b4b2746e2a6b1e4c69ba9297b1eb57b8ea5fd43bbec585e7b6ba6de97f443e3a49452dad9daa2acfa34bcb196526b29b53473dc674aa79db6565b3fcad99cb05f494f6899a179b92b56b1fcb8f73cb14559b6b3ef2de05aeb71dc5bcb79997274baa8abd77441ec2fd91251e7fb8fc952045cd63c7f8b911005985354066d17be22d305da03154bad128fe01efb8b1bdfc96efba26a171d9f76f7a52bbb37e1ee47f75f7aa3eae9abbaf9b3edfcf9d56bcf8d56cd1fa3847ff4f8fb5fea83ee71c0e61f21076cfef06778130affc51ff8492a6ffa9268fa9cc2bb7c795f28903e051105714e92c6bb88739235e6a39e45fc311ff5df6c6141892d2c2c2c335ac672b2fc0925b2fc6419af492c3f976a8ce5bd78652c4db9344922fe92887f8658cec7b8069bf1f8ad6ad34bfdfa2f690bcc8df89a4ca63a8642684e68af0af03b0f7852a05604db340b807630a26798a6351202cfbeb767940b9218b89fd2bfd786d2ea73ce49a977d581534aa93b7577a794fa53a74ee90bb8ee47cff3ba11974c5d770b1078761794de3a0ac225c889a2c0a32bae37da62d4035c964641a2282c773ba765e006622d17de74a696735cd775375a2a105f10dfefbb91e77fb3bbf77a5e28f48537fff2228c7b04c39b6adbbbdbbbadbfedecb5ee95ab2d5cfa40300c455654e6e4502a2e67804ec9a4cf5ca59a8430348c34e2a4ffe866bab5cbb3bfe9461ae9ec52132d814bd36df5e3afeebf99a098a2b4abc6dad543dac57a7f161d1659bb5aefcfb2d32e199e22ed2aa25d3246da15f3fe2c4758926817aac7d4939c8a1153b55450abfc5b62ca49abfc5962aa498ae6f203dc4f533401fc5804ea4ba9fce0f224abc94e3b7e7b8c65fff246ee87f95ebd445b93feb46ce3ffe7770f23928c38b9126b39650f46ff1b4dc1f4734181822459bbb8d5b3b0bce9e6afd548d69af417850cf06030630a084cdfc69727198988b9f25f892423b7c68aa9c43243e54442b5b8a09082ad236f4a63b688483d73e54fbbf1de6cd6543132b571e30d5103540062796d882526450d549558de0088a5d75410cb159eec9f124bd24ff67f11cb959eec0f00b14c6991fd47512c5976b2ff8b650aa2ad4c39c9fe2e628b587a0d25965ecb25592b2f0b4956924464ff1a62e9371aa22dfbafb8d4b27f89ac9145647f95934c0395ac69a0e6d2742b7198a2954e2bbbdbdd29af4ed753763f993e6957d9414eda65dfd6ae59bf24f564b74fea6997cdfea42266d99f442339e9570dd291764da0217ab27b33520fc9c82cfb09a2c8256949f61330c925a9497692adde121a2d28a85d6557cb334f49bb1c08cca537f39a649f5a78b3ecab9b4848e7d8a874c78a6fbe7c1d386b66a61fce1a064c98f5012e6fb6dfb5fd20c635256e95fddb2a9bed7553cbbfa8fcd599fcd58d2d32824d2a9adc7223db1618023b7320f784b3200882604eee7e2ef4365d83678fe3de34c90e193061fe330c6d1d43082541516cd497b9aa7594cd7931aeb5d61e6774bccc52f54612848c0a2354cc269d2c14a901174230e207082aa6f8747aa82fb3659e11a480f822f75393028cfc2c81032448e8e20757f20dd101228bdcb966618258ce9127900964f508ee438004083cc9d9b6448540619c0c30007b680b01f6b4734df09a836ab1b09c165caddbe92e0870497dae678417a285be243dfef3813e788884cf6bb6e571db9343ef76deed44b52568115b44bb8a5cb7a2910ea6d1cc0d1556bd40356bb4273bed9935f6fd65a86190de784eac4093fe54948104ca30575b609e769557555fe56fc56953f8f966bb38c0e51f134f007c3d5f5fcb8f6628f2d774967fb4edb694ce48554c2b07cd8c00b5566f9faf561e337bf4d6eadece556be79cd3154ed5ac3e57eeddf59c7d29cd7789fbe52de5d24443d0f2958b7f4588eec7254a99b04b1081942638dc0a032078235aabb3dc4bd7755dd73d7d3a84e3387b39ae765dd7d9207e3c28ea0a5010537c4732982750103d950302e8072279023921ab224fa01f8a64d25c810337cf1a0e98722d996679020141c9b5f4402c16cb35986a52c825187635775fbbff3ab1ac23f7271729d8c71ffe9d67eebe3e37fef0af7ec7f2be11ddb71746537069ea4fa508f69f43e052f572c39db3e30dce0041f3058686b9cdc9aa936f5d147fdd5719a2ff76230a705973ad95b3b5becd5f0de386f8aa0d8a53971812c6129890d00d33e8c1a1439810050f4cc8d442466b2d7268d2036b1b644c88c1be0ab6d84fcc800735d867c1163bd683430fece3c016e7942c663218bde5a0841becbb3ec4c007f679608b738a2634198cc688111d188e10308b1f62302414a7633b42d0603842ba16cc601e111d536e1187862146184b6042463411d822ad82074a7a60df086c7186f1441536d8874798d4448ed468b01c2aa4db4dd0fdfd1eab55486713d21a62c80f0c09ea0034273b136ab62a8455860f4660b37194e09d619040093db0ea220e92eeb9c711e23121fe41848c31fb762c09a19ff6d3feeeeeeeeeeeee6e1cf4bf3973cc0a223b4a5c266013b0e0c6c4d3324be446cc49ee1a973da806af653774b2e8ae4d99abb5044a88c0dfe275efdc20c04ec01c57c71ec82836c0e505e241f902612346ab11d6d63999989a62aab24ee9280126b5457bce169369daa6258c5d7e3fbcd5bb97f6f1c3d9b37acf39a927f21a86eda775bdf18aa41a0af148e5a78a2844402877dd83ffcd2ebca1ffa2fabe8dc055c812afac658b3ad1fa4972c12492fc805f60faf32529c1dcddeb3d4d4257c8746c23702bb772d724497eb818f090e0a7bc798ec692e6127cd257efc3bf57349634444028df90c70d6f385c6a95bf29f4e10d47b92c0ac59212c916142ba5f4ade805a6449cea70bdefec87e1023e310c6f3c17aec8e5ce8e28d7034c05a64bf2fcd9edddfdc4d5d55adb4d96a6dd5ec7ee2faad7cad95a395b6bf531878fb3f6b9aed556f746f2957372d6ba6ff1dd4984afa35d296d253e0f0aa695560ac637db45bbbb85744e6dfa840e7ca803d83c9fcb73a473552715b9fc8db8fc4d6af39c739c5ccea914e79bb366d61c4ba90b3e1e33cf39e79c13680456985af544707fb24e70d70b7e5796727322edfe8a654ebe2038a27884ff037c7ff0fdc3b79f93a9588235e4d07f6248bf9c1c128180d91ba90ef4d6596fe7c009efb9ef4bcfe33c8fbba1e7aabbbbcf27d37598f3dde7fc2b76f33bfac4ddddbd4eb74c8c9a8cb2681b44518cb4f8685a453fbc99e30f94c82dc2e88726598cb018fd204514457884ef1bfd30d262a4c58836d2e2f230c262449b5448b18218ccd61e513dfaef1348f003ebff969d618e5404fcb9c4f9099c04af00cf6f317402d34a97409282270eb6dcf6e98f6618e5ef24a54da7982d99cd327d03f48bd226fd4d3f6c62d6aa0d9ffd46f5b07f41d2f44183c0a603eda024cf9087ffe046d401722320380a8e02a3627961eeb3f6d08bf952ae6ed9df3ec1250dcafea455cefd87654efa9f3249c6834b52cf9c1e66e07be23625d7d04f73870830e51e493d73d52ee33af1c8c8e0b031c02c012e2c89a9332d96141997cce3a0a11173b45aaf57cdfb7f35e2ccbfc499636a4c8d38f38b469c5945e5593c84819e644bc0a54b2da6c6d499168bd562b172b4ea4c4c4a462419211d79f9d2a546836266646aeb63aa8c58b6c69866b5582d1c2e19968b25c362c9e0687dff420f1a04826266aa0539d1e6af93cca5e6a28991f9ca7ad789e72493f92e5932ef4af180ce578a36499f00f8390190a291ac6f962d0525152525c535a3828e0a4454d811a388524428e24df442b4a164a8408a960a2279c85a090839c3b4cdc4e480d22e1cadd7fbf330e008b85f6439c94e474eb2d3cec9e7f4739a9d949cace81749762ae224fb9f7a4c3793946a0baa273a2a03b717e2ad5d5162de5f9432c6469d76a1627ee61cef3f126957cb76da55a4a75d38de7f2c623cd22e54eb35e2089a11a9cd4523a3c2734e52b5d1142cfa8f5e3a5dd48537a9a054939493148dacb9b4ac288ce9e634d3cda595b02a2b0aaa6d0c69978c0e111b3bed92b1c163a34811ed42d5f1d4733a1539f19c764e2e647992a1a80e254292ab15287487ca604493cdc900d8b0640fe953a326dab2e9e77489b6a9f237919fa2a582fc356143607e557fc71bf117aa8e281858f81def8385df310641d263f53b3e08ccb330fad8f12c3c0b6390d5ef183b23301a8485dff13ce274d2fb0197291a0b23cac78e877998df31763d4ec2882e35279b559bc5ea8fa2c0075056e4c87823428755dba5468570a9f90b660533ae6618c36aec8266ed3a65fa5fb792494642dc174a35a932c0291aa5618a667ff0ea61fe043132acff5a64bd0b172d1df332a2cb93b2b66246971a586b95cb935639abd6ca1a5d6a2eb656b9ed018b38739974016da110cf4e11db6c34faf9a9f96bf5f43d8fc895a568fe226b385dcd49fa302b91fa38590b6fc8da48b2c09c1a719224c9efb1bc55277f23d0658b1dbffaf2ee1861305e8db3bf49b2eff17f86379d13fcf7cb14cd5f2c3ccc97379f4ecf82986ad2a4cf2651789811852fafca8c9c3c5d50601acf12d4ae6eb175f2081495dc884b46e2287c417479e26253fd0c5d6a270a5bf171d205f0a54bad24495f9224591e4d59324f1965830054402cc4c80718557ab2a6123e160297c21646f9246b5514291d0de503e677fc8e31088aa5f62c303f61abb1a3754e6096209b8fd5c38ca6db938cc2e3ef1768b8dfa58e544e2c52f6276b79e545ab2ae9711d5982589cf48bc656b6769da2acbc68172ad62acf55d6ae51f6afe249d62a16607ec7d3a834768c2e35afa24fe15d6aa43a7ea5d797c29b155eaf1ca2ad569aaf6fd3a39e1a299a2c9335951f7f996e4ebae924136d346fd3b6099eb955c63c8be64b201ded6389a666028ef9cea5e9c6123bb7c4b23ecdc7d4114847cb35ef3f67cd74bd5c2b7c3f385d39be43b956d40e98f5df7591b5ab66ff0f05024c236b386056f8295af8e549b61a5334940eb8146dafaf2290aa9373bc4dbb78d12e54eb499e71a9b98b4d34d26a92453a9ee6a6009734333333332927a9a0144db4a5682f1c3968441d22298956f9d788a49f56b9fc6b851c2b2be10d4d8e1747dac89b9334723c8df08626c7b3c4b2e673fc0c6f5e6fd3a3293870fc688ceed6d79a61cdd46e36623322796b95abcebc3f09858cd2ae19f2898c487a31339236991609858c42d66cb84cd16c3c46ccf138c49a9ad7db740e9a170d1a34421e3493624452123f4eac9cec0d78f5304f3f4573b7f136dec697a64c73b24678e39a79168eb7e98fc6cccff0c6d55debf8a35fe63fea3232dfa3e916c3fa94173131a21a14276258d5742300eb6dba8aa61bab767777d7feebc2f25f0567be431c2f239633acb1fc4014d311b068aba4fa658ad68af99417ed2ac95a6d8d2d746ea568a9262bd93f754b45f15721a6c2107f1588f40b4c39a965ff54ad15534999ad5da568cb4fda4580ec4f7ad1ae0985d87f9289362930fd9ec1f1363de3c26162d55a59312ca01d0246b15ca4b4cb5528d6d84267964bcde54911d9dfc586420c051d7f0db13e35c8fe28c8dab5d3af21a32553bac8fe2814e95795b978d1aeb964ca4ef677b9b1aaab5cd9b2bf2fc9ee54645fd9da55a66807d06127a85d1447cb4c8b4c4b4b8b098cf919deb4a8073919f3a22d26e671c4fc4ccccbc4c4c4bcc7bc490a9098f78f69c5d4004fa71d56ad56a7b2582c11035527f7f8a33eeb3f96782a820a6f5a1fc3faeeee66354e0f6b2c717862c41248b543f0572a88c4e3af54edc433c39999af228e77e1028fc6e8fe6244d7b70c4b86f5acb7e9d10da76aa99b8c98aab5ca534d82524f52b676c97c931b993115d41267ae9d63c49959a24b4cd952b428987e49ae7e5a5fbe29b37eba6873d21ff541646d358a367fd56f8de547c9f563c6d274cbf559e3ac38c6539176b1c67266045275aaabf5fe279e76d527154132d2aa23adc23cb8f4b0bf503d560ff330230eccaf46dc63f53023ceeabf95e82d71d25722cc5bf101ab875975340ff81c41978481abb71227ac7b0339b947cf8a56cd49ebafc409bbc10d46f2bc810db73c803c6f3044083994b1b0fc67ba91467af496b07aff1696a096c912d4f2d35f2c414efab7bc684bd1da3580f7ff5cc0d194d11858646981010d83f99548612b25ab2573359babd50ff984b49d7e8664edc7c90188fd302285b104cde8193da367f40c295232e94b975a8f2226b00823368c65a755ce12e4f7626c32a158829a64fc0310c95aab7c35ae7e9c74d2c75fe28f9346fc3561e2ec273b9944abc89f0e9ef0a804ee75453d0a15d108040000003315002020100a86c562916828cd34598b3d14000d7090447658381408b328c7711c848c3186004200200610440819a29a6d10004073909c42480e7050358d50263a604c452821075c940437322dd99952a46a7484522e6e3200d29b0df7a963090655e0e05740e366b5289af79631aaf07468595ac7927e4b575a12971cde8a969a13f1d21a0a153f9e6f7cf10d6ed03662e64c26c2412e4bde605ae0ea2e2cad416fdba6b2ca8ad934a71c7754ca6505392dc5a8830aed8bee6440e08364dcdbb69903b22a042fa578e4521a25465894c88b1e98c5840b85f713f3b9a2f42d2efeb5f9a956b46934f10ec496c742584c8682b408e455de00a20edbde87ca3d622ed839f1b550f250b06a30fc805d5e2e55c3c6619425a9a0bfa3e0cb0464add7110763111e76e6f3a0a7f2b7ef4dfbc959a6d061ea396fda68c4041eaf06bd9912627441458a157fdccd57ec44cc83f3d925bd57df69f2535c3f349240947e5ea4338fbb9f2fa832b9277bdacb5e1e412a4fe9f54370ac8e6a794a8b12fd002dc5782f04b1c82895e57d18b8b9f92853f44fa33e137edfc685ac1dae082e9e9dfa1c84897d9f9614e645742e0f5285acc4323248baab2a2c3c5958f555f0d6835ccaa8f90aa42633d000a7c1fbf0b09a31418a82e37fb6ee8d6428acee2e4b9ed5046288514858cf3b2c26b07a8d06d197ca44c917609d4d5fd6d1f771708bcfceb3747395965a6078290fd94871133cfdb062b512ab28470bec4868610a839cc3b02ea15ed6079b4b8b61bb50ead3d666f765bdac3dc849c2b3fa9537d6b4400fabd86a568d1929a365b9c442fce702ff629d1015e782f6a559658dbd968f054c71fc31e9c46fd8933dc0a298fa1079181b466b3e47c6bbea82ec288fe1b5c076d586fdeac96be81e31e6377410118c3190c20b56835b1ccfc42e6d2183b3087494c1068610883142fab6352a8bb0fa48c9c92e2696e93dcfa8000f837418589994793f0a52cdd9570a3343f9c82a19b110b653e0d0359e00056483f341c98319d6daaeb6612c6326968b9b1407aff42c47f5f000bddbf13a8193cd5b1984a4950eecac403f6658c730639145b1272283b8ca1023c82e5622c34f2782160d8cbc30e96daf07dc79c10bd44681308b2a0b0007356d58ea1d47eeda68d1015b1986348a481a59d0a9dc18c1a1cbc9de4ee6624b32be0495519a15a471c3a42f045deca40ac0a53b629611b0e1f4437e058bca247fb32cc817fcc9a0b1dc6d7af41b22952f04c40bf9e84e476ddf7e9974957e64b0c3d32722a2f6b1f77e0c9b07c61664ccfbe1e7542515179e133cf954dee11c75ce261a3045f3a56736400e8a1cbcd7e64c1375298eab8f5459e85d4145550d97ec5b16c697eb103f44dc35f361003f665d62daef24f93929bbd99d7f9ee682b894effe52f7f1ab90c5e630c2e6fe00c3c7a8b4cc41e3ce49c0db3bbd9b1c59c62c48346ac07bbe9e0f2d228978d4754b5ee11d2218877ebbba08ed3c4719f78769a4b3039b0fcda94fd3678ee544060df31de564d82ffc53180915c0a1632c8230067ba70f874d897bc249749614effabeae8ed9d459af309617e31d49ba26639cc14468cc00c9e0da437b85a9c4d7709fc9a72084697c8fd411a9ffae66d9f5c192f906e329f46cb88d7482526b704185f22b5208771f86b6069129548dda23eab522fbca092d0a6bcac4908656449685f105b0e302e859000624e45b865eaf22cb744216b86b34778b8323a042933dea804b969c4b0aec4ab28235d083236f647b394960bb92698ec8ad05eb079eb29d2064eca3b54ed825af95a8fc55c1cb31324c72794880ea7fef1e64160d9c89b577e19254720655a0df6502896edb0f94eeb1c085bedb45664b438ae86a2aa89123219d8cdc28e1174aba6a16cb513936f73a014b8f2eb534ee3a0b2a2ae825b6a22a1bba40cac6beb5a0678bae520fa37331632957f9378082f19edbb35ac2e9f2adceb54b0a1e6040134c5f4819d4d0d708250b7d460a623492782ee6dc5d60e1be6561075ee963217badaaaec0f6b429de902347e94ffe035cd36b293402dc115d011c444a4bc83dbf129a6aecde7d89acfb6f72e7f8bf5d7a6be461bce49120ccafc7856a470e823b581f805ba8a515bb309892dce55197bfa4a99e44adb4528d98fce830ea4ade08bbe0f4dc295b2f9db8a9d9850a084d4d548cb9c35ae2e7143fac1de9f1cda5b7f561a78ba86f9357d43552d685a119defe8f4a5c8a99749b85a0a7029411e8cad61f117c2f7aca5676c8c64be5eba3c5225f9510b8522476d720eaa48175f05f175137cf327d890c9a33435c97e9f108a9a3e003001f9d4fd19c89a1df2479d2abd1253c18e529f4e0d011758d0ed125ff1b3006201f61f01fd64db4511b50be6674d45270e1987e703926333a83bb7f510ca2f485176b2d1ae4602c3c0ddfcd6d7607af623ed96c2bbe2e4f90dddb8b092114e874194bd919b2fa5e40f9ec9644770b0e000e2bbf5c2d12edb288c8022f56ce168a650e4f4ff9bdf1e32c292186771f8c0d5dad02dd9eb3895ae7075558760e9a9bbd8b4dade4f9ad8a693edb3a19061812ecc4d0355d6686d2c7e0f6610dd3399f13c8395fbe229d0d7246981319c478563cc79d6751e9926ffeea3dc40e4ba88bb9c0cc84d7e2873fe014db2576fa0fe9b2cec44e5da2a31b2d0c7f620f6b0f60840a0b4b20c03f28a767d04b918ccc8fc42370c2532bf20576d09d772fd02670e454934174d1a8bd2052b0edbfdeed38a8499498a41c65a6b5e1fd1ed11eebb1e8b676e10de1afa77428ecaf5bae40bf783f0e4b40cb53ca0a61de0540e68b98298a51319c7f12df8a54665ff6b5e98ec99d4466450c00df699fd340d7440bcb21827a042f488208b7bb2ac0829aac46fc9ca7daf93d21420a20b7884b83dc4222a25cd1db4c0df2c81df681febd2dfccb278331deffa0eb34f61abb1cc50af3e9a98cc76ded2d7190f0cd9606a266b6d72b39875f0f0c90b64d9123f68f7c1761dc3531a7bd1c4242d34bb296d4d72067abdfa6bf55eb48a92643561ac15ec9d9635b3000e2fea34744c1be592044ecabe84776f87fc69ac80317205419a6572618e20f47d9d243009572083e374368c0a8aabc6b356d24476dfe9a72446f4b22d08bd1e3c8415d600dc3f5ce32a0330e75c712d165524725f7df22c7c5ae1939b8fe565966e28e26ec3208f041ca06e7d193cb4fc93806e8830ad3b124b6d43b1e2316e994da3c116fac25aaf3d213dd5156e46cd5d0482d8f9b6fe0b0cd9f733a0614ae3b211a704151bec7b4adadf2b28e353096ec68b810f5ff77f4869e707e44149fba50c44fd14022370a35b7bcff292abfc596d4c0c4d1b0c9995b715b541eec2ae87a2f0208b7b6dcd15cb3df0c2a1d3dc123fd8fa8511cd915310da6467317a98d366ac30c7802c9f9ca4802fa1ff73302d60435211f5ddf2f9b2c4f1f858e95a02a722cdb6060bac65084e13a24846d5d52cda797b8228b4983934e64c4a618fb27d8f765104ec78652936ca9b65a9cd490af37483006907d92c2bebb3746615ad654a47b8361426f9cfb66de600a94f04953cb3f880edfaddc123d97128760170e4430a8bf84a58ff67058263755a44ba97f985446cccf18c644c04e41079672f00333cd4d5b9e99b4e9452d708c9a7f8849bb289129e916d4d784e42b3bb96f632476b96088ba7f78b61e0b9d81dbb7c5a23ba54e14ccfcbf2ca49cd20787b2fd7f43a7e6cc16e37e60eb740b88c4a8a8714979272bb9529b85342132d971a34a50f44c3a081cbce304adef5439d6845bceb99e7a250356cc24850b8ca91195213fd651d94342e24d67466c1533000e160719c43133c9816533a416aca3cc0af53559077beff520b32742e7eb8c2c71311e9fb0d02236dc03c13ea11591282c8fc04654fb6799395ee70bcb7d0292a1a8fb58a7f529cc8bb29e4133169e8fd8562ea622fa94d5bd3e1bfd045a819a010b331c2ad4e80f399fb8c328c988058db70d4e0bb62ea60ce8251fcad69c6acf3fa31a78f052638a66c90a3c09d568306a6b74f1db6861be2dca50b1421e1b79a0f3f118604fdd3b695441c344065bfb1d83352c0e1812f1abf18544bbd829119cda894ada195c12708de21ff26ab61b91895217ae1fd6d03d45acfcb8e26d8e4580921153c15a3d9c1664d59142706941e1a654fed72f7c0e8c7c82109852feb68e291ba19b3a6224ed77cc41e1cac0e011124857ab6e0b8c1703c588d898573d064c93a859ea2cc492a86f227274452031b066be11a58b2c6e9fd2ff7d5563eeee6f9d120b2624824ec3e269d5e7875ddf53244222f7ad07cded2535789b54db7842030d19436df1a141947db93aa6df76e0a19f3248aec946e3fd6fa217d6dce50564c35a1a4cb70c1c94c31a1898009a0a7698f5d099e20b37e957ff578a316d9fe798b20200132725b5eb72cc1678670c5408e5a73069fdfe0ebe72136736cc35ed2b72639780ff5e606789f622fa821390144584627cae9e5881e6fe059ae176785847215f1a8660c68a1058daacfd1c10c8429595039f13284ab64adb27796259fccca76d246ecfccd6ed3d7e91623e0d3941fb5ad34182ce9d415ddea6513fe5ba09fb75419f005e0ede853e360b9c0a1c7ce01aa8d13d633a955ce63386043ad73f11c170c2b188cbb722cbddf75b2031817a73087245441a4e784492d6c3cc70438e66ca38167ce29563796a7313e48fa3ff87168d8eef320a226af199b47c61839f94aa6c610694b33fe165831721cb65c900f342c7b383fd4a34565ee617037ae4483547279642a9177985695b7c992cb1b45e3781ddbb8703055879e5784b6c249e6255a0362b727b51b6cd1ee446c2032bffd70e73c913cd87fc572e7c087440470292f404643d0ef225de91d892dde0a53c3b872f57144835b5d6d26916c142024784afd64d3856d6136f30923eaeccd00b457e999cb2d960e516b51b16d3806eb0cc5842bc591db8fff717414bd64e83e8250bea75c4967b36c2fd92bfb1026b18fea7ae6aae5a9f899953968d682eb5f49618116aff151232e55a3664f61d95a4b7aa1e9eefe754568fba65b785fa9f7a47a28c44b85fa7b54f52b387fffff1a379b2fbdca6f80cb62157fe9eff175fda5d99bf6997d9598b97bb13754b486e8a4f8d498fb6ef571e5d104cdc7965cef444eed8b4ad316a79c17196b3c9fa7271d90a671dd661085994737d1385550b4360b211a30478a77b68897e083a3b139f2504d25ff1f655510614c4e6d465a695de5ece8c4330d77ec89d71d6349a8c2ddd74d00d8ebb4092d79c38cc5f2c0704c51423f608650dbc7c115af9b7ace8e718f81f9283d9e1c00dc13b9452de8fe290e153bd4900c5819d752c7f8da1efa27d7983f95bcdfbf433ccf55d3719df6875e47cb7d90c6d6d9a2490f0c5747818c8c5a62b9cf70543e824b52378f444066712daf8e1278ab272c6efb08fb7d7ff4d8589d7ea52fb2523092afea96d24fb642f234bcdb22bf5a728987b02ad58e781b5c8bb6b560df8dc71caf792bc08ea6ed186a876aeb2fdda5d200f75caebbc2b40133119959fd20fac1555dccbacfdc05ad69b2865916de46e7018cb7e633bb2a032a8a06d1166872d77c86b73954d1f79ad939e29dfa6cfbf8199fecb263b056301fccf7801f75be6e7ec44b001f370a073a46c3b1a579185e068b2a097def1866324f48ada1a415392a3dba08f7b965b52e87a51b00e5515c1ff50c466d3ff5406c937fa6f33d268e7e6c751219ded92485ace895d61d3d0c186ebdf7e1e926a068d8ec70903bd8fc25016db6e67a9d63754a9e797c187c761d0248626da4f946b3076a50d4672bd69f8c582873165dfbafc1eee9b3d508c0a52cfc9eb30634db788785020b80e7ed580c75064f9cedd6010e39e02105fef8531050bc4763a15e75c32c030ada15b8a14b4b9b374a922b2a79b66f7163d5447e6acffa37999df8115a083e54a4b0af09d06181b3c9b02266fd17427a96c724599caff13d4ea34b4e344b0576b23422a1f35bf081b378c0b1a38d20c1a00b5bac1790f4d6f5e4d5417aead3594dc3224dac1610c0ab0f691353bd733a215c685ddaa6a41a686a3210e8a48ab38c2671a7e47d2e1bf2a961426c7921c7a89755755f6aa671ccc9bb38ad2f2544fbd2ef5040443eb40c8bdf4ca371a649205ec8d44970562b2dc34bec1597adf268da01329c7515a5a9bd2d9a5281c52e461c51dd2a0f11bb8c6c974fe843e57f954a90fa10d13cf129002cfeface06c99a04b99144ebdd4bf73b96e5cf8945e5faea2860875185f7e3a824ee6a4bbdfd938d3b8a392fa5bced4c12d1e5a9249df1dcd710fcfcec34c168feba3764b76ef2113f151bd2f313458335c2e09a10b37a952c30319ca50ca2d7ca8002df4e632be9fb2460ff3472993d2da63d0f3ecf36ea92f3b6e834bab4ee1d10af9ddd1e40b90958219054e681470fbb690dde969399472e97b464c226687b58a6ff942f2fa1563ec63b4994e031ab822b6c81bb279be1c064b29d0e3769c957583ce8ba301a839cb1ade68d0723b5d436fde6e2e27a41f62a3612ed0293e99fbc32ca746a4f46e453cf9099b840f4b3dcfb608551f78b5552dc8c7a2fdf9304033eb4cc012cbd53b11e5c1fdc63ca86b3608c80b4990e2379d7ed5df36e3379c2c6815ae91e7a483044183e9b5eff18e4445b46a300238838d0aabef355ec183ff76c7fedb742226f0c0bf4b345f22a417c112e268e1d6fb19b9cbb75a6d13ef580108afe137d674f76b0752fca7bf9efc2031a297b1f788c9b521fc2896733c01d05659a9f34ef4c638c79ee545ce76b24ea03ad644ca1ab9259b38112578029057d3b966f03e5c5fb432795c6025f254de749ce5503e41b03330597423d8fb79fee7d672f6b7556c119cddf6aadf3a736ac60d6edaaa8d6a828d978a3d27630fd9513b34fd697d8d561c1ee39a7046e353ba2b14654c7dc0b942217345344d5487ebf8ef141e2adaea080bcc58868baab41c966e77ad4ca0623ea22e00c119687932dc471dde84af7e43b06400c091d905ac1af8db92f92e44101f028edb0684dc5263ff3d53884b8e92bd235d051e880a7e8fc97412b18341320bdffb759d124b02191b8df0bdc84e932a699164495f8a4d3fb5ced905ad1ca08b5cea9df995d775730c59dc44a92a4704ed1a37524a071c5d139c7f34fe0e9eb84a8b31452ea145ac6ab82c5e40e20dcbbc0749bddd1bebd44972afc434a3b01945ab4aad4f6a6b3df616559eaa5d124cd4ff1b1a8aafeceab7d9f6bcda397ccca7416267fe56220dae93e11561426846069887624ebb201623bf10dc1466f909ef8d13519f2b45d985375a4c096ad1c8a2a705915e00e62561c8707aded80fd94378d7a40e8803cc0d719805a8dff68da3bd4d07aa0a5e23ebd393c36fcc9446fa5d30e1d9ef4f12ba423042a6a9f41135300b2654cc50427556e9d65ddf8b3d65db2e6c8114be263274c3aac7f43b7e8c03bbe47421995be5200fa031f22ae414cf2b4e99d6d7cb08368a030d70a42c16ec37b1c5ddc150c138523cc224fa08ed9c5cd2221d64b2a2c7a68dc836ab2a1cb6f241e70f64a28f23471d5e4addc6e95be603355957c55203c031af0d7d6488d62116986237874813ad1401c52322cb7e46623f8cfda906253e526b1c0b16077bdac8229cd4cae958aed40e9b7beb03810476186d27fbbbacb8e9f73be0c29242f9a73d941528bff127a839e1ed30e48640cc063e924cd7e80457faa7319f8f3a2710d339d5a3df04fe04ad25d9c112b6f2244dd2626fc8c3783712a43d5b44a60af1b273251c8b27113dd85b713c5df0eaafd4cc84dbebea96e4f2308e147173c4a08fbdf5ba51b447d68f7d6d41476a841b22c71ebd61275a3964ad75c4150868b365a08bae31fa48acaf59044649af449f115400df1414947aaf0552e6896f1b673f0e5db2dcfde7a860aa57922296ccfdd0640eabb1c1d146c35e1ef4e21193257376c2e21d2ee5f27614abcfa6fea5671705d26ef224203f78da8a1edac6297e6b3f51231068660c3ab51e16198e02a38cb90529867e9af334a1f59649fbfbe348bb0611c0826df3a197df280742d8f0ee2c38e359c02da806011d61e4a1a508246df9a079d7b7db0dd4c74a3786145763d48368df5e4323d6894ca5fe1e06910c1171eef5ca954fcb4e9bc2fed495029185d1cfda86ec6794633d41df568c7dfc90e1d87c439368d850a7b74d3bb26042bff3909f0198b460df50ea8b96a14ea2ad8bfbc242c0b205e3ba68b0b35b62b4f44c13290e78850f32a17c60949a61566810b5cb322c192352d94d9eb7fcf395b8d9484c7d6e2e2020d11e14b1ff7b54ec559192975a5691fef489adfae4bff62e619b0b55b6fe635cbf5d82131e98f1e052fb14dfabc4a12625728e9443e6a6887ab3b5c06b7ae4e9183271b2e7bac3c68f4f1cb933e99543f4ad74ef85437a5b661a2b7d5c82183393031c1661b63a718d1ef3b216f461ce408f02603ccc77e590492564f138640a133584942f7d2d20a3b7e7f2f94bee67173dd5e3f9b5978d5a4a6c742bcd9dd2a56d57d26af630ba37128d73d7fba39decbffe94a9d998a988a81cbad609595215f6d5fb23b2cab43e6ae3e438633bbb8b39e09e0a05f071c7d579eff5db2a5ec1b7972893d0c87a35c482da94924f201c401131ee6be54b4c693ad835c3e414b563f3fa16080d71f2cb0a56a533be67bce6c81dd56c55e0b628e7f0e1a02c26c4fd293eea94760d041b0fb162c1c0d5befb878ee43dc7a583729c265b0eeec2467ed0f5122093e44e721aba0b4b2b79c3fe8ed2ad0da8f890b85b76b03fd7b5938c568230735b9a80ec06334af580e0221f09d74775ff335fbf881db434bd0ba5a53ab55dcd9d0a6e6f8f0b538e00fedcd3398fcaf05229e67e2d75de8da03fe15a1b08c55ec32fccfb1e05259e96852280eebbd2e74d2d997103a7a104808de6306879321d3c7cea5a5cab82b5a8ea53da65c769b6acbeb9c60aa290aab6481751d14e56e47e5814c0cd4c2dd78b9667090669595eb298b421154b25325a8a4495b9538538fc4c0d0032208f1e08c19c8a0902630ee14cab9c43012f0cc7ee453f69954cc6a3c56250b31756654d7765eca21cca66ce6f17380d2821fcd4f0e15fded2148da36011394d81fd4896f8d9e923a8e4df2bbbda253e0c59d70ea389ed5a8b7909a5e144baef00699daa1b5958f4f8362b11bcf21e8baf4390dd1d3529f86baa030a8a7d7bac3d44d919c4ddda6b89604eeca56018f003c1435e0b24df985e693d78e19c2977df667cc6b1aecf234bdc142c9f9e35306e603b3de2ce2ecb4334901aa6801bcfc1c5591eb107507533ecc51431d65fecd8c218f0b59bbbd9e44ac3506a7fdd1ce7203e6d956189283cb4a4f73f80c7572f148e6c5376b0202b70229e25d988cfa6a681b6c255273efcb33597f842bca0eb5404a7b66a091cce2592d068614627a2f2b521737a7a8c3b8008ceae9b494f9efa17d957fc3297ffcaf42b7e53620969aa6ea02d631cd3c2c423439ad7194bb3a86b604c69e58ed55da8a4e39434fc404fefa2641dd86965128b5e7b29ef383c2012e3c820268e2c4a7ffbdbc03d734039ef18534bbfdba8d80c4f11683cdf2e69f6469f3321c607c2954e44c6779072caaee60a9364535ae40637bc4136b92d2179ddb1c95fbe84c2d1fedd8e201cd51c07574d0ed042219299326f913f34645159488d45a04b36b04682f55d04a386745edcd15213d7f35be7c26ca6fc447ac3aeaa37b8564267208251c00af5f77d7f91a2a72a51bee3e23497efc387fd6298857178026962cc1c0411eba11d8cf692ac789e6d9a62906afad386cb79ed679e5df52f00f9d7530c051510fee5b8030ad871936c64cde71d41586ba9fc3a4bb6ac8692065e0e4944b89f9d540ff311600a536f53e45e08c87815cbd7b876e0cb4da4a183643dc9e492d1212c0a899debd028c783ac5bd4d110f618788e4d423d4955e5240b5d6547143a675fc1f4132445e0aaf0b07fce3e9324199b645abec9945c310c270ad72d5dbafd63eda583155e0f3d445bd56ba2efbd5112fee19d160f2655ba070c5847d3a191d121d0772df27f37c175a1977dacdd85ed9909779748ec33e1450658633c50ed265cf342f93b7d95dafe95a28452b3bb9a1535869e49e4a6280115288caa8b04d4670675f7fe1f92bd94403c08fbd5d7d2ada20c8398813b3223828b15235638abc28bc992e5094580de36786463b02fb7753580bcc9e62360621c384c93704d70c0622426660002e318d8c9c7be4d772b62d4a10f46504f345d1b189e46c9368d715f31cfb8de231c6a1907f6488dd6e75764d761f51409d2872e875e3539f22b1959a7c37d2a81f42702daf0ea9d4cbb19f50421c3f3c1b526d8eec89ce52d3e645f966ee06e8b986522f0531d6dd5b844ae45e3118d9df0ea1f214d4ce3c554fb7308ff72e33866035ec9a8217ee7c7343be5b25c694f3e9ddce704cd811139fbbe370dee8f32bcf6ac04f4ff37b22ab5b0e35b5aea9e6162214b3b619834f208693dfa0d8cd6dd630a3cb35ba4c0b50d551ac332929448665d04827f732830ea1023852901f2774383c3630c40a1c17690b748c0cf4a5cfb7693a20036c8a47826a9edf3744b107e07d420cc56447198d191072acca2405e5fbca7ff2a7454cc8506596da322a8489b4572f5563822c331880e5db4dfdf17eef23b767cebde091b480567ecaa69d09e6ee0c3c73ee706c97578cb6da3f88724e87767eb52f8d0f13cc526ab7a515d8261a724cf621ab7b4ea0dcd90121861c7c4d22c6563b8961ac724c5c7f7a40ff09e62c0697dc5ba805a6f85706a752896645d3bb8c0457cf160a773505743eceffbbcc4c1701bff752fbe933ea82dfbf498184b38f1456cd91e3f42e6116a18d00b414a7b4742b6e33edf48c6398c626202d4594fb2fbeedb0be113a22c128570e1dc732f4131b7e99887be2068559c8efb4a9af38da85a8db1540881a21d0fdd2bea0e26226f8a94defeb92ea61b2289503fd38715a3354be288e2103efd0658681a2bd6f1abcb8c0156c39d25a1ba96ae86944474418d8bffe9b33c1a89adb32ea009ab2e5af3f848680a87bc5fe38195bff8ecab903347505773964651de7d9a51d0035d270c50a8810695fc1a5379d0165bd68dbe0ce579aad864585774b0675172e805ee4535d2071205d609573df91558f6b2e7d07c0a60a2911a43efae6e4bfb5000c3e1316f09b7e300c3089668f0f2f8abd7533cee57ec64eddd807972f87604f3c205a0e031db9de6a124be1bcd3461259b6b8da41247c87ab73a70a7f6927ef2cd738647d3a9f81c983caa4a4fb376234f60a8d098bd25e843141adaadf7450b2a346a60da445b8ea8b782c0de0ec7ee0e774854dba29330d9181a0809b765f946dafd344f0c7f591bd37ffd1d636858821092841f8a57c21a0316b2e0062f30868670f25362686767fcf3985868bc7ed0e5e24a89488c2a495de7b190849cd832fc9241c4222a398e7d00e496f41cfc83893be7ba276eef46ec2fbb86fb7174f0e62909e2f6c48fde9a521f47190be2ec1c91bc09eff088955f4d7ea05e5439932bfa8fb85c46ca9f861ef420717f07a7038c0bd26df691f5ac564471556af3b3912b05487484f086592893358998e0cba259db0a7de0bd048ac1d09b25a88dd6f216e5e7fa5504ede726911a0a8a6def3c4e8b31b3e0666ea5636b8b6c9200e974aaf36610942241f635277b8a50a2ec854cb285d98652971b1439f8fd7ff6c9f1d5ff6ffe17f500c1d44fe5e13c62a45013c7330de333559985baac0525cb96f7e93a464243b42274f4d92298a5b08357def17e445c89cb1802031fa4b8aa66117ed6f505d5498c1fc8b20577c96768ca732b3a976fb86bd7075de85444d8c72d0ced2a04fa2580f8c0290418ff3090c26cf1130b53f083956d12213b472e892aca5ce29617861637c74e192f8c05983729c61f5bf115eb990475fe89c629fb59953d836a1cba2f086489d619a2b67945bd5466bf26ac87cf50d71361633efb2c7eaf2c9070544d7ad64c1d376423f45f5d3eab0df48b0c14d09bb9589ba29a2ca00069bb91fcb93f8d389755cf8d69313e583eb3891eb3fe5df45b60e84876fc86bd6ba62ef03a8e83b0a7a116f4689ad217edb901247d68141d1d6784a92cc76482b43b94b4a06736f5b404d864c0b18cc610b343ddee0733b4c08aec432c947150157155697206e90044de9a024910fb2005753cea7d096c69e41a5ae9e1f608715e263a52fafe8b148018e0708763e7319d86150f326a7dcfdcb94374b180a337864e2eebb400c0daa07f9547b2fd729abb465f9b01f655bb96535041ba142852fa78e5b8d3f95242aadc3f047c02a8f139ae1488bb9267a5cd01c03547309628e6f43650af34138ccf3a79b937618ca71a365bdaff4801148bd1f3a226e76915d0fc55d28abbdbed32bacb3c846a85e0aff43be98b4d77b33d6bd9613616d53ed45cb8b0a095b613c30434fab03ee6356f1a22081c9d7ba00ffe79e4d06d4b12470514d0c086d3bf0344f1a36bb72a4c4f7ce3d567ab6f2801406caa2dfb7f90e04100552d91bb1efcadc7038cfa750aaa4df2af972845ae750472c01eb71a32c82f5308f6cc7a1ab41523a3f50133579f941b761620c14afbf0163df16ef7a0a733660027d66d2c2fa3b079c0d610621f99ddae9d1fe1c91169faf9cd511d42b88e1732627066128e84187845656d5011e4a358f06d48be741016e0facde6f2e80e95d24564b716588f21e58a340c934b27be442479d70d7ad1d082a2f4d00724561028b634dcdfc5f195e2c190aacb61a3900d1bfb53fefbd8b2a11530bd28ae838a42cca09d645e941fdfd64cc9e2c170ed3e12308855bee598ebdc411233363201fde284631c221984572d3bc689894eae4024ac19da97c303e744114ab66e46b8b6766d8d3e22a46d5b12b9a79bb1ad1e144b1d9bf71fed9b448ecbcab7a5722e08032f550eacba884af3339121ff0dfec0f08e74eeff251ba2accff1e2397f09065c9d52cada3a4ffe9a75a6985115a304d47b21307795428cb8bac3cea5e8d45bcb98cbdda4818d17f6d8c90dae554e6ed38f5464287965aaff2b309611ae39b5867d53edcd30d39a762bcffa59e6909e3f42e78f5a1cae3ad010c2af504d2bc59c90ed8cf7b30a6395aeac92572ffd279ae1d92ec8e55dd4a68c461f1d926b20d354369283c8e170d09898286d464fc76191570a0f85ba43a9db64072a9e085691acf8fee165889d33154fed87fc9fb1ec3e5bf37c4714804c704b3264003b865ad1bf58a0656048d7e679b33e7cb4c57704e2f87d96f9526f0418bb24a9519dc522c1af940daeeb9f9575985849077f33556730f18e601b66414ea6c6985179423198f4ed01b5be4a50195f09e20e329b1ab817540a019b371b5f7fb060d17dc0055e687714593825425650c041dc351511e37b0c3a377243a8d121d09db5491c0fa0f1ceacee61e4451bba722396252ff310c66bd54f1a4326e316799b9b8a5bb9d76137096bc10b36bbee8a62144531bd769b7f3b81ad67de498f1e31a7e9a7a2c1d37e948b5572e8c109b1e2f6143482d07bb60cdda2aea3500dbd3aa40d2640bb0f97e094e1c164653b02760b0c6485a56c845c98a81a73d7efba5b5d2c6498ea97b3693527f8a3e33ecdb55324a9034f95e4917e8b4d2bba5c85494edb0bc6fdf34382ecc86a4c5d4aee8d1d390418f0a84a7203b2b018f10cbaf1ab47bed374184819b880f16a84689ee08fee0e081efc8dd44a1b7f7245c2d25bfe9639f91475b5421b39517f72a41557e7914b661692a3304afff1161ca735164eca72c22748eadd2023bda93685e4dd954fe96c968d1a3e48e019e44c8aedbea7133be7b184081dd3299af35f472ecebf4154116ac2d3a241bbbebb04ab4d71d1e0c96bbd4a06817392deb76a2e702cca2f3f222b8015388964b988e63dec3879ad67b01b4cc7b7e7e430c9ac8628eb0d1d609a93be69b967035161068e33723c55df6d974631ddaffb806f374de9d18dfba03ad9a7e479d194f679fa12d5e327e22ca71f02e9e18e382cd5557f9ff363dae8ffde1c09a834803d655234a225e16ebb5b46a3ea5c650c78c2f8bff30e6210c1ce91b6a9a6bf1d779b1d5aa95e709c2bc0c84a783571136b7b465fc9e0bf1ffc88a27e40f35cdeb0bd3320e13c58814174d913763d3f1fc0c9539821e130e8e3190fd614499eab795e03af46aa969bc8c9327049f0f14814c7435c0332421447e8d9126fa63ebbb4636d20423a8c5c2b8c94c2b1ff3f202c8ae68dd18c3e7f58aa42f1dcb2854157bcc4d2b639a950550fecfd75195a343d6aa3351c695df3753628225da46074e5c581239c230d09c1665015cac65c63aec61c86070add6622e82e0fa9c41b74c4824a75608e0b5fd3bd1898763899e8878224800a97c0151a1459a9d11ad8d8405542f4baa151d1d5670aacb20634bdd27a2db4ac96520667e356180a8d138d6826b7145063f45ecc741d828e8c5247e88c588b0df1b24a51ba2f0da5aa2b7d14c6e7cdf6e171fb5c53d82c9564eb135d278976c8d9afad5d92fe01e493f5833cd4b7f85d57cac16ebb31e23988a4ad358a7959ddd5f7a6d84a41ded0a247a0a4360effd77a1e3714bc4c64c94daa6bc4db6f88d608f59bc2d312580e6b390b2b78c71f1c5c7f529afb999b60741091a1282af4b091dc2a2759d6689b8c9263ea5e29bb986bf430bf720c00e4285cfbc57a2695bec4b675c86f7b22a0b87ce9bec3100b907758f44ba0c1162926d19782f393aa95518ae781f17f06617aa4fbaad710124d1f50ee847e978362def2ac339505fd0034a484062899a499d726fe38aeab0f4f98fc10049aaf299ef8aa88d0294ec4fc27df94d43f2aebefed2a20b9b2f246cb57409e97c1828139de4c3c90f92bcff8f6f2d16aa454102b311f889682547b55863c75b12277ae5cbf232c085b5b3543272dd3ae2a9e590256cf92ad4a14253842a265328a9e943804ea3a9851e00b94023d8086956f07b1db35efd187a5359acd940e2a34d2530e4dd39c6b73029c22def05b38508173b7bb3748542e91dc083c87825378e594325142942875091774ece691608c70dd89be55c4b69509e310334d38a8043ae26942b017b5a258c17be01763e90a848ac47c0a9abad890978c7f2a441fa30d51f795c370eb23a6f2be9499c38480eb1fbbc19e4ff59402354e2b77a552ba21dbef0fe56cf486a59cf351d2b47cf1c8717b439861eec22af05aba902df4996400852904c15549bb3d0c8366be6a3cd524d9981e132a9a42278656c3daff375a2ee045af3477af5521315b688611044a1c703bd0871af8c3cc10885e851a046f0151a50c415f553e0288d4121cfb840e4d2de6a1f849352010fdef91eb364e74be78cd8998322f07b54e9c8a0d4ae78304b7f83738dae4a6beb8ff134016bb5f85d802b45122e4cb3b4e657a0b944d16dd908a9af7f76d7894b861e91a25940901d809397b431c26cdaea90f625253f4a13f730e3a2f35c2749474181e66a56fd6227b1ae931bc8d9a4147f9004de831f6e2c75d88b731dc5050c50461b33276ae56ca202e41c00bd29f913b0770a5be90dea1116b0d3e3f7d01f4593d66f114ec51998f3b84892c2655915b5e87b60e61fe1dfc33592fbcfb0f4402ba36be5a32a21eb34c97c53574e9e1a6588d4c28f5f507d574dbddb05be9318b7eb8e8a590646addc2802bb6b91e6df4648f15169cbf98ee57e3a17245c407cf2ffa33c14cf006dc5ec9afe343dea7bbf50c3db047056a9b37eec6cd1b02364707b679591033010b006a547b64750cbd529f63dbdc1288e6869dcc26da66e1c8ce49930f9e9e165095c0d1a088fbe59b74516611c5ba66381de2eb9ae29632c9ff81d5c41ab19838bce6b1da513d6bbeb0f0350cafc154ab86e785ea1f07b22f842fda91379eeb4f5e90763e0c1a0e4be23081256965f2d7d745fe66198db4536bcb2ba8019454453e409a1c40e70174e053d36a3510ce479760fbd4dd046498ae998d6e6587af26535d420bd96882e270d3acfaeff8b9d2f1d430918dcdeb252985bc3f314c554c64463ad992f68de20ab0b48b67770484039a87110fb4b9c6d1926a88212caf281d00edf6c16239e55e675ffaf0db4e536012224387a675195eb1291919f06dd7f620b8b6f3b52881d1375f2df1538c4a7d32d4759895a2f4754c6d10e4c581bfdbd5b7148e34da03f0c1fdc32c379fd1a361314e37925249210a5b27af8940bf1ed39ae84b380d39e432359487a9e43edc9d566e3cf8896f51b037badab19a1ebcd4d29440ac64378601fe7c6879d23436c0dfdf5fc07ba0ebc2a2e237da33dd33217750a2827a25d59ba95e6f558b2455ccfbbfea1671b1db145c9eeffca3c9bf1158deb9f9d8e91bb8cc0cef6ebecbfdf958128250f3d13b7dc4e50cd330b1c95499c6a6b71a6ba716e45c032589ed61ae099c8464a2a50ca695fe984cb0eaf294c8e2b96691e1b0d96d595387d7be1547a0c571da7b1172cf3a75839856b262640ec73974a5d99a5488ede4f1880d641a07acbc5613cb5d783aaffe86716a4cf0fb632e432416f7896470e4f6f87f3633e3b4bbf6bfaa8f44054d966fae13ada011d710912a2224561d7ee4d336ba082bf0e69bea0d305fa15912fd2a4ed7cf27292f17423149af4d000b43bfead2246e4246493c85d6b0032112ac16a652de04dbae02c1a54e3ab58a4b9428e5caf742ef770123f1476ac0e785c345eba3f8d17eacef4c54dd17767be09d34d37898f6ee9809ddc07c4ba24fe51a86b9a7690723403fcb00ac7979a72e1c48112dca911dbe6cdd3e73b640481169d1077557e8d79033af1dc2f70b791f9a115f15a49102bc95ae01048b3be07c189e038d57274f05f44dd79aebeaf1d2324c54dbddb75c7f0f8190d9b6ed5ac56d1dbd38bc38118f9ec4e77d4615d58c12acbcaf50f19e4df0f904669b2df509b4fe2a31a6135dee7909708b9f3aa2d49ef0f61873be29c0f2122ee1476f32ac3ab6e19c4b6976ef3e1fac3d7df84f9c6d3720d0364338c1a778d9c2d2c879a515a5cfaa91470805148a28680d912facd7facf193a704d6cd8e89644f68f121021da47a73e20df14dbbc07059a43cca642338051b429e8b59d23eeb59a22ae346e7306beaac18aa97c8e0ec2933450fc9fd82345b91368a5a75fff06ce5c6cf269402c53c99dcd9bf60dfa57c14435d719c7fd3ab721c80697225e22c47d5ecdf0f6c2bb13d2b03856484a876f240d0ff01ad984670e54b4555b43491894336f4d53615912bfc0559935f5385781b47395a31cf05f36b3e89b615f7b8096acb415ecba89bf3cda2f2f16e66bd53f7b3af73cf435872cb166b4373a6cf0f08cfe31995d5ca5fe5e367905df533834a36191676516e8b5fb43330c1cf0a08ea9006e67d17a6391ab6c084756cc04a9acaa5cbdad9188e68da673279569208394669159cb76b1f34d435dfbab3f18f901cb3806e7cc645005207915f4bdab12189943a6332f26374f8525aaba4b64aef2f3e4cf0d77608c129aa8209ff34a1e2fb68415be3c2b82dfb774134932d796e9093698fe6374fe567e2302f29629598a0897e955726427f52c8605ec80f8a63493792b5ce65814904395ae63d04a8901c5197be45de6158622338b419561ce8f4a135d6ee296198315517de0649ebc3d4044d9f88c9d34fc509a8e15ace0f6ca2089f746f942c89e9624c77f42152e8523db8b482d6fc8d9929ce7f5e4e68ab6ad1ec6d3c4722b9bd296d43baa8fd91691d1c0803e3ebb18e3e4af0c7aab568a652b21b8fd5309a59036140436d5a4c73269d374aed2c2352fb2120fd3413354c706f49e23aa47c755ff36b8974af6aadad20f229c889d2e55b367f1951511aaedd76c585ac7b660bc6f113528078b057fb0723c0328534388c98c70f3676126573f386a19afdc35deb21910c567cd182d4beacf0c8503371a74ba9b4ab33c21b0c6132eea1c4c505312661555e97f630ac1b6103b857d9de70ba38185af39e76c73baffb22018790ce0a440c599bf8b982cd165800a7182d6b27f2e91de7a02b24d2fcb63c43b273ff41a8abb55c67d6816b230f2635e14d952ea84568fc9d5bb47f4951416db3d02b57344fdf1753ee629c413c34a66ffbb2e1bdc7cab0bff167eadd912c4c133f0db9410c4254fc422818a2f828b4d9884f654bf0b241bb4dd439b110e4e8c0e2a075152ec887a3a472a5d4b87797f3ee666b4d77d31ff6bd2aeec7a6e81df581952a56365085fce0288c9b9852bf167f7f668e60fe36d6e0f53a44824b304331d9380958da38f1c25161f0136faa9fe09561443001f6c76be6de9e28504926958cba2418b063457506b516c910794a1530674b718007a9219043cb9d8cd222804cf9ebefe1d0070ff7a05acd435d6078ca510b1b09941dfd1de267b8bfc7d8bab2ccb528eb6d864d3570b3804d2c6501290776512dff1ac5e78f843d6deb472e845b98458caf43a58e4a01bebc8a31822a519f24d5bf48acbc559e041198f1985082205a9ba23b46a3d833a1b82cb26c9c3e0e6ed35dd9daef704f9e21e00b5d5fa9822bd0252c636ce30bd368ada58d33facf8521e2c41c3b621864f55837e037856d9d0553db643863a180a710bb27095f82e92f464d351598948d76e2af268ace5ec194a7f5dda82479dd5cf39a764e372536aac96cd24997b526fe62c26887f456e9ef3672f8060ad4fefa69a250c5ab452520492169001c9b10a4082ff6deb9a8b60a965111e913b4371bac49daec591446b9af1023e0c299d96ee84d8f7c7e865f2e5ed0d7169f2fa49e15f158d13af616214c527e55c6c8b15c3a7a7692ad2fe5f6fe3f546b29389de3da31b5db06a8ac868389aae1d20c63dcd564cf33bb0fb9b9d8e700ea9a94b59e7c0897f3451b14e3c7f870102110fd02acb07947c2ed38109848128acf085b0f98331160f974896113310d4f02503615592f15528f165dff16a8f4b705e6664abc6b9cf6618d0e3ab7d5f00745b717ebe30085c2eeea6f5ee1500e8b3b8bec03cebc5815a1ec3701bae34f805395dd60ffeda0d22c433117b64ffe24d97688f188eeecabdc2ba10fafdc3fca56d69d0e16d95371bdba22a208906b361bdeb333813d6ecbcbc107744cece1cb29ca8fb51ca38bbb267e247b40fbc387d2e64a1ac6b37a0965dc441f26a6415581541e97867a38a581fe7c58bb02b32063dfcac5922439220f95937b60edd46d9dc393faeccaf0ba9cd4a2994a1e41b7e0894bbe0fe657c88916e60e87664a7dea4276302e448b8381bd09a9cc7f8294d8c872e9a7c43c32a438d311c9b8df729db41b6cab1a5b76aa3c6d5bab384df71ee0ce7d38db19496896e50c8b33d288c67125cab9284d11683d5cec0d2297bd2a1bc92d2ec3541093003004daa0f72f38b1a8c47276d2b88e0fda5f5706b1af0c6f93ed8c92b5c8d69979613a6cbba17ef335e0db6e4053e8932d3538a1d245c1af2264672f4c2a5441851ecf4cea07bbbe2d6d955f40aa0e1d164d88562b146eb09a3f3ebebd53718b2d030ae8a07acff115b21b68fce8308ad0c155a8c701951020975a38e8deda630ce13e231982b2aebbf62b8108bf7823f36119fb36757ba358e13302152e3a5360451da0155c9fff84c0345fe004284df2b669001856eac0865c82ce6d27c067808ade1e2606542ccb15f0a17c4faca777f45b3ed4718176f7e1786ec4d3d74629bdfdc3e12b390416ee9b85c24c80ed84b09ec3bcfe15e1b62e735a4c622fd0914919cefd22aa53f404b88b655735cbcbe6444717d43c2199b14222e1736169a227906c19b7e382dfb11d2eaec292b3360c098c63bda8436368f79598c1da17b8cb5a4b8cd9a91d22d8b4cfc87d69f76b33d10532395bb280a352e07381230378565d7161b23870853537a1158dc3e85d6da56dadb0b52d3199e59ab8089bed941b2cd06174406649a6a607b477855b22f70832205f3074b0e7eb70e61ac1e9ee4c6eca2fc3a020dc0ad215ed1eb7ebafaaba61df20e3cc10df39d8edf4f03814af84b07f2102ea0cfd54d8f2d618d5529ebd05ee7f3ecadc47f015feb0d44765af2a8848568e74060f9d51bbc663e4efb089f2d743a773d1e6df84af24534fcba89ae8f10750ea710f43bff882cf11520350438b8f030ec0246951d4c6b7206df5d5203c8506f0919246c92a92b7aee0bdde4c859840f54ae530cf73f7abf042c99b913fd8b084e0d02f34507fe327ef9d124b338259ab3a09429c8b97179656c927d972940be11c2160883905b4127978be1679b8b6eb4ac07168b5f3da129d077c6f930883ca7b9b6e8d7c80113644008691b458c884625d20663e8665a31de85369adb2ebdcd1556cb1e963c8e767445dedad4a5d78d9ecd7430735a6a6495489421a11ed94f713644ee6d4f4ee76585c906932600c28de680521eff20713cdc703a5b28d40d876b8053b8b92cba96fe8371133cca03af66f9e5618d9ea6ec5cd08c5518eeabb12aec65fd40fbb3b1a7b87270db43fe4ff8309a492408cbbbf6923a597d92739b51292feed5cd66fab2a6c44da38e8c707b972ae6b6744faff3e3e976f54d35c3a31f9d7d2cf045844355132711af4b0da892416c82b8314d3b57871413470e8efb6da99094c65e59b20849b253ec845c92110619f9a6cfa1ccd510a3a750fbed6a2c64f3d7ff63d99496b4e0d3105d84d3cfa9464c66d5d045c8b46bc8eb2b816d459d97a18564124f8aabfe5567d83f919a17971fb7c296d0edcd0618822b1902fbcb628bae0e3d5ef6c912c47ad1de134c88b894413f239a09b7b60d46cfe220c45b158d55ae66628d3a28df4c11c006c9898d405fb4bea36b3d0c2c0a3d9b5a2d40a721fcef176b29dc5ac869843959f168ba7d4709f97e3442e85485736368002cb6c7ad18f297e61bd3a492cc22adc59016bdfef687eb39120dd511db1a1cb8ff66df52f71c695b08a8c7f69d2b95d582937d1869aed7fda4bd33249206dafe150e00f594232e7d44f125500efad69a7892f6cf6ff00e6c400353630fb5b04531b92ade1f15f019efdae71f850a92a96becb142458b005d8d18af359bfd35f4524f2c336e28015df4e8cb78b28b5a1080c3d1b629635bc4dd0c7d446d6a551a50ab58ee647e59a8658f9b9bc222dd2707b394b1b69ab7cb586d54c92253a3d73c7551d88441d8e359975c31378418fef7d31ecf4200584944ff2324e7fc68ed800606bfd6778c043125d2e3af6011092da4c91948ee0267807bd9c619111d23f8b5a7b3e67b355b759783ecc29f5536cd0d747b91087763de961a9a151582f7a83dad5de5f244b0f5fd0f5a062efd70b6c22efeac744fd3a90ba15c856cf03c8dcc17007ba15ad4fba7a43651041f141d58e4fa1ed3b84aadfbf18d8f080161f15c9efcdc35b03222a5ae26bc23a889254b209e9752e47cb9a0479bb694e4f1a9214dac04e80ac112d12bbd10d9bc3bab61a5e88775342153e9273b84462b1849a2246adcf231b927a3450d6a3dad8aff40ef59ea467a716e26f3ff80fc53731237666d3439105d37c4a53c57cd84aadc90c3dc5504b683f6fbe8cc3906571b4c2b952a455d564c19af8d265d42bf906b9d46fc1729613160234bbc50465681c92793266b57ea3d131b0d05bd130bb1781782add9990e08f758c19939f4b3cf250e1736e59b2b07dd2af953dbcf2aff26db22313439b8a11653e235e06eb1becf72d3d16a328620d8a339aefb929f2fb4c93bd7d077f6a23daaf8e2f621a42fab2a29073ce05df22e29f5c84afd0c025d3020d27a198a112884071cebdcfc2d8318fadbdad4983745873a557b0321bcb7383901ef6e078d71efad65a1231d1c08129079f2d97029f8050dda7ceb689c663ed2201cafe0b46a9010d630996fcd2ae6b56b407a1c615b2fd2529a40609bc0aa048df2320b44e13f552aa64991c3090d8f8d2b71b5df7c8a8925598903d5af72283cfaa2d3efad6a3e2c5dd1ea289293189a509e3940a60ee8de0e0f43400eef90037539e0ce65cd7e50e386b053fa8db9db67c79939de77f6ce40202c56444ca16f0f4f97dc22403fa7e51c4d76a06735a4da167084125e3aa585451b2b2e20590001606352f8d10be680998f51f28299078473ef399233e5f3bea9f32502891f892977eaab311b3edb016200f774a39246bb45e8e9623678024e7c0e2a569ef1b65ed66f3fb685c33e1d781b5adf60690c890b3f8e48f470e063238cfe4e3ca932b7a83f906ea1ef1cb94ecc75e96d3f906e5adf65e92f0a9110855a0ea8e8c76f6d8082b73b89fc841ff4fb84c4ffdba3033d84a841fb80892ad661ff1c0f2d1fe9ef6043dc9c16a4721128c01fe78c26ab0d672641eaaacb24379ca94cfa0a02b72a2b407b4068822942e7b3c34f3a55b033b1bd118c9f98a39c11516a455f7487466b8663b5f37e3814c3934297f00ff43f620b837b4a98d03dd9e90cf0b35d944ae887d259c81af86fd0313186daa59859d4afe9a8d0ac7b57e3a49325ec7f6d9fad7ca555066b8e41579ac0baeb139255aec8c3b9c79e933dca824729bb83210eaab9420843cee1650320c7542290c2f0931098ae86ca864c002f8cb2bfc60c721fc6356455b6aa9f0b038519088ed4cc158f61133c0e3c9a31636c188806807098e21b4526e68e7e6f7570b9731eac1386829332b2e598e58b2d2445460702d7f21463ac026c3ddef92e0d7c236322eda9ea015a2fb06e16f4d1baa828a68bc9c7e6e873638ffc442084036320cd1c42a4806f94b024ff4eb67dff0acfed085cbdbe3f748b43eae9c4a1d8bc4d9ba7bf85b71c8bd169ed002a3466cff33f430792fc05d84702bf26df77c6a26bc9cb6e58b4de1c1c071c4850d837c173dbda0e2c62682d5062406cbe18ac397243c76da40dce2e036ffbfb83b30302b68b11209872dc75eac7c7d950cc3421bd7abb9e8b19032f0979aa889a703f52cd1c7908171ec50cb51b81dff3a4e8546daadc1c2229e823172de89d80f119f211d33e6499d1319d4207fd164e9abb4da04adb0160848d223a93359722d1f4acd8664965386c3e0a8e1349ebdfd5959ae25164d3bf15caf50bd11a93e090f80b54adfafc2036dd056c883160bff0b8023aca6e8e165c49b0aefd36086e97ef469c286ee45b11b104af5d1db4190392e557b7575073c672b97fc7400881d0940431a10e164e00a8a1d5fe1b41e0e278e9d436e7f5146a047871c0d34c6c3078a6c8f2a69f36857e1873095a4fac6aadb12685fb9fc0ef79cd819722f19895465434f3b401163467db1e0b6dddf4d06cd5e79cf4ca4d9409967b8e64ab12212d29fa5a1f88d623928cc98d28e6062856f643e732a94c1afd9289cd5f6ec5953e9230882f06488412e40479125f396826a13fdb01c38acc580e5e929328414d13222f3af2e3e34c4c51265411573849a865e88eb1af386a343b3fa8d5384ee38b4013beb462822108d87008bbd5d75384456411db3fe410ea92162d3cc11f46d5381c56b788352af83a5160c27b7b106542246e11a26432602714d1fe01f191bb2f54ae1309582f2481791077a246e94165cc733eea24b4e1de4ed412b6a3a625bdaf0fc49daf90b5ca18b90c405da020868e99b64cffd983ee11c0a7cac4853778b69e21a73341e32610b5b56221a0e12c3be4b0c7926aada337321980e86d13fb33a992a1c4bc89e38b24892b3f1b019b358cafca4d2374ff8130cc6cc6a68aac7b3e1b06266e80265c4513cad126564f4c782e3af7d44064d6d75035bd5e361480fcf7a63d0203e9197736fc431c27cc61ebfacc20a251f4f95f33dfe64e889b6bb789bee8e5f30909de52aa2e88bd6028e5b84add62b7e0f82627e556c6a6f8e2b8408d5430e4681d9cfdf79402a0feaaf720c074268b7c384a03b4fabbdb1afd3a1390aae3f37e88214c25a5bbede631581365f6c6b5802591e84449f05cb5b5ab7f0df4494ee4e7fc6b70ce5ae59d09b38c30d07159683515f5817e7fc12d68a4c8186b7e3fb5a6e61d6b2183523d7a1d08f9105d6fbac34dd403f50a5845ed0c3b343469c0ab23c00f80a0f458d51b67333afca2b0efada0eadcf77d3f26889b61d0fe514626a507e741643198854fd6560054082238dd1d17b029cc0b55d50a50cd585b7dac431785503207873db0ba66cdc01dc4ea3dab5acaaf0625ca8d41417e5470eceb397fa3d17a506db22700ec07eb0da3157e01f092c38127cead19a2bf0937f6a6df241c74e01e64e21f360550403a5da87515d46b9e4bec51a0ac8b7335fc9b45c6dbcf90eea6970ccf5f8054a10ab76f9b88f54087e7967cdfd29e0c85f30068549d00b8175c8acd6145731ab7808b571fa80e40eff0ca1d20772289ae4804764b2ed04159a6e46fd34edf28cbb60af8a346a0b3bcc826a2621fc5a60e5e8eb57615b1b204178dfc60197685d997da6a1e80d3fd6d768934bcd7f464669e585938ca68d64dea0e2b6be8ff2699738631aaa802c272e5f652321cd9e287cbd86a96179526876659a1a3ec714692c7d553969d8585cc2671fc5c6a1233f142f50c5bbda6704b51b53bb9c91c61aec6bc6f2609803ea48a169c4d7b711e89b415f3c2cffaed0c55e660732567c238c677406263bacd47722f7792544cdb95b1b977b34f9715e60162d0d87fc3bcf67df51a7c1264d593bc7cd62eff9b4a1856a5a7976b1571397574185f33abefca9ed6ac03537fadb5f2d74d7414e29a0e01ec52058bd7964ebd642ece8e38d71a539097c020ccea2b4464341a12fb250143e0a638028651e0af30f43b4d56668184cae3bcb2fe7c7f4f8b262c067b98418ffbee00ec3a8fb0f58a3a8955e29656c7ef720998db9d2fa09b3de71e944a6f32b3330f83259bc1f3d746147a5bfa19a638e95e81844fb09bcca391fe385936c360b8030a807a1e9697f9245a3ad76dad85c10ff091fd1a950d5f705f9b708f6b7c4086c8ca096c832ec94c03616d6e5f2a029103165f37333507fa9b5ff829efd2b9e62fb826fae7d5d71e967659fca3e7f691d570a2a0052243452fdd0ce097ed2dc83fd553eef79b67aa19b8bccd908787a0ad69f4049028cd208329b169d4b48f4b098879265b3a672297a5b13e6e7cac89b1e5986f1f831b693b7aa033fcc1ce59066890059d2af5ecd11b4317c895c6d9ce752176cf6413a4e2903912ae044418a309971e809e6c09439354da8a29121769f64f9c7384b55ca4c6bc691c3e7093e1cc1623a43e2a46dd172f95fee511db2d2fc84f7e3572826d5187cb7121a42df2f142e8f07d76f7b7a17f2297990f7701542374e00ef67aeea3294d0293adb1ad83a898de1ddc86d2c163c02f571b6d580d052161070764609bca58a65ba76386a9c769a18e4dd0092bfd375149f785b4f196a4b36161eeb85d5aec93a204479b072c93e436e4bba3195f694d4141fd10a2ded3f0b5dc1127e4738b193161da1f02bc4db056cc0268c420d67289a62f68e882c1478706b748e130465247aa0b359fd055e61e5ab5fe8b24d5fc1b457ae803c890e778cc0e8e2eddd2954298480cda781e82d1e54fcb15cf5b6887f36ec4bb39773258c75b0b4da199c2f0dbea3ca99a39458e80f832a8d74b886e4ad25fa5f61f8ada19df7786677593b7ddd6b19c40e44063c19030253abe9ca6535407f569c08557abd1350c5137db3f1c7c38394f49065f317c12a073b6e9bcc5b484d8856bec08a4ddc7b005ce3ae1c4f78b000c68aeeb1d18af7cdefa031bf7faf5050d4691350e8430c9003195b165713fcc8fda707d696eab22cb044036ff0004f9fe18bd2ba0f2a1679d60a49ca5a1b01e37e248654dc4df0b2286e0c424b90457dd256205c296b5243c10686b506c6c456c5df704844ed1bfdbfa45e6da646a04c0624a41180c25d8b5309ebd39b03e48d1af3a7d19318e30a1486f2663ec0af6ce7280c3b26685188285bb52dd243e3a57249d849010e1aa109a1e0f401a03cf679f52d5051e908ac08ff48c6927180ba09d47bb8df74271e1a6c5c4476006afb0b0da1838adf203f696f4e47ceea324e5bcaa35fb4eaad8bf03135064ca38f7debf6ead8768dc442e7d188040fa316b380d4ac204f15bb8217e2b1cb73e9bff5958aed53b3cb7eeec0287a708c08028070c1c87ef6ad544d66fed881da23d04103e35bb21c6f12922b0a0ccf680408e9458681ac2fdf7b8ba7e7c8868236bd6558e01786a46fc153133af0c34b548e25032a8e3a62d34b3777879002b1d0ae05a3e41b24444e788ab82b3700be9c542da8cb31091f75b389025903807b435958ebc102a48bcc741ae972098044b4bb8e24cc889cf9b1e760a2337bbd59181431bd1727f9259cf86b39ec5ea062177211b7bc94ed3a67e53653272525aa8fae66d1c2dd39c4c9ffd2d5e4345d00378276e80c3a5daa4d538467a9df95324a669b9a09899f55ad30cfdf1106c2ed4f1d02c9253c290f2461ecc9e87682b4951529172317313a4784151200ba4626a8d43ea3e3c8f08422b88d0707e70e146ebada575ea958edeb5728786d62a4e6032196910c869be28327654230bb71efe0af79709e50b1d2067d8cad42de94d108da355e2534a63461c8a9c61604421574f35d1ca314c86064ecf46515c8d6865370cd566117abdbc915a527ffc0491c2f6c176a231873a80cac9100fee0180b06030a960535810545f4685c15f0f4bcb3800d55500e490e608fd517e54f1a41f893048460f7d548f483f0427b6fffcb871bd58f083b602b7a7494226cea5a1ab354368c4897bcac7b88f58be38497c82db9b1d93713841e7aa8e73dde1fee7f9c26a7c933ce7a2eb27b28cc8545904029796c87174abbfb141ad6a3bdcace19a1c9deb3d99152bbf40cc7870a19cb9d6bfb46189cdf6bfe3d2e1a58c1f52a81e5e9c81f63f0dd02b935a77640e9df09088db85d54d10780d89a60e2339d44a5bbb09f28bb60225b517462c7a311c9d031ec28b0158ecb7ef26f900b47e2dc6a231845be00af0e6924211a9bb59cb52ba23a8e287de1dbda08b0512cb426c49d2a7d841f47c83df20f24516672cfdd6b92c1d52a5f138850378b354dc0609fed98f2e0457d8619006cef528952431dce4fd5be8a0b7db27c12a3aa302382cc390ab9665a898b9398acff823e09fb4f0eba4d0fae1af51018b15ae90e9e6295a52eedac22b6d9ce0ada48d3ca159f10ab590e2a3f442cbfe54dc3950788d3d0902e230a52611bb2cdbc70d927ebfabad9fc348e8afc3c84384b24404bc042f74690b16b992e71d667153cac471c72ceb1a76be90de09934e083639b584065cfc024af1ad615c40d619a7032ee93f588bc2b951c6019761daa4c6e0369ba7ad6100fde2a2001070906be43076a3b6bee9e30d1ab047d7e6959f273ad2d0bdfafa4534e64ba91bc3b29933d00b1d665bd877dc80dee28bffd2dade7b6f29a59429c9143806f705fe0591e40348882837becf1037c86e5419818120840d4c77b4844d25b9dd1fb79ba641fba474f0dadd1dc38322288106545442c06926bd759f000ab7bbbb8b60b1c2fd2a01ee67a38f275c638502b8fd35882b6ebf66493e4588dc862288276ef715d5d6fa3d13536bfd010a0e309660c1fce084167049582f400041a5d0040a061044707881e4870302891b5c9ae84901082784909c68bd00628a15b42441b90021041d5868d02201d1041d569058794b25f2c33eb16221821a3242925a21828447b46259224e72d894001a1129420eda133a22225aa0322774b615f080ad863419e070c5aac48c801216890e7589210c0738502484ae2a56306990aa506e904be45025a02036013465f08414f8133f53065d04a9b5564e052e80b7d65a2b1343fed55a8390c1ad2db0a94f2ad12454962b225a92fcb99f7d02acec8cacb16f9474523ab51c2c8ccb3e2cc02205f6058e1636dbc1b3ef830d9be52c892be2a30890e934ffb6c8a5da9b4c42a084e0c986b09a133be89083fbfd434a7d74a8e2d22036f3b21cc9e3525343816d21c2155a643fb65ef6d1a10b8c0896da80c46a41b426ac6c410f3d0cb1f1b28f901f341e4b2ffb0809828896cbf0954c840f1f227eec604104cef5f383939e1ca41040c3ffa58c96ee5eff9c0fe3fd0d8dc8606c781f8c7c86f1672645ce92aac6d96ae11159ffecba6f3bc9663f77cdcdccb5b9bb1d3ec3ede7eed3e4fb77b4d3a1ddeac5a64af85b24feec68f0cb77f6faa5cbe87d6c222b423e84b08b37cba447bb7a33dc7926c1fa920b9fd4f057b06ddd3a17993f97be991d34f8fad3e0db0f6bdfef39fad65c4c106b7a1c321af1fda78c9ed1ebf79c87890f6f7c124c746844c6a520d65fb60f710eff22f46707338bc4f7ae08ed607ac2fb597e861ca9b09c67454eb02c7bc5fe71085bdb042f8410da20ac3fdc5ce82b3dcb311cbb222e2cdc02073e495450fa627aaeac355766b54f302e474ce544f2a4b807282a52b8990fab49638e8947b5622a525424d194b449925857be922557be8c26adda24935cd28ad473e51320a4b423218170724a3a2377aaaeece15a7dca48296ea5e44a8e45e269932472e5cfae2fec7ac61895cf10251e67d0900b8e1497c9fd48545c7cb8470aea534b90ffcb6d11bab2eb640f4e25e145af2b83d1d17969bfe8509f3e8b23d427d8824ba21279ae0c48aefcd4950f434d62e373aa6e75e5cf1c6be33ee2bbca69fce5732ba7891e90b7a80004fb71249e2b3fc6047c2205714c8ed3b08d555df9a4568ad4e2b99284041f3706e7ca2f46e7ca18d4952421559f78e5fd5b5a4e5382d18b5e4e683f3e0cf6a35782232558f1d86d0bd0950f4374afb2f7b5fc5cc9a93895d38c3c1818441f3fbec86b69b94cec481cc72191cf0149e1922cb9925bb5ae7cfeb89f2b9f3f0eca84a4966c394d7cf9a49ce8c1c0105ff422af044ecaf148382e23bff2dc2fea64aed53e7197e326f40311396356a894ca75c0d30327481cc6e86540d990d3b08d779990cb64da9039e77cd869288d47fb6c68761a9194913ef135d226b9693c7d620da50dd17858afa95c463ea79a1dc76a138c0568e07abc0cc865e4f3b0919caa4d726ad96b4bfaf49184a6a6adfaf4d2fa813212f261e8cad77ab46c9284faf4712a52167df21c5cb9f371aa2b5f53554df5654b8688b486729a6a233f03f24ce5346c6344e309ca5a9eadbec883f5a173a5b6d595fd666030b98cfc1ca7a99e14b2fd5453f5495ee9f382d495af0169529ae6c2d192f4897d78845c293f6d75a5d6ba52fbb9528372a5d673e5d379fa6a52514844399191c89551e74a8fe9292589c10f74ef20d39c3edfe767b3fbdcfbdacbd133ba0b902174e71e3d04b1502c232f60ffbdea8a85c1353343e13e4e39a7ecc186b6dcf4e9018727953be794d17296e4038322c0e0c9fdecc71b64dc27a9c1cf606ec877fad5b5b9d5cfa41699051b03a00fb71ba519f2bdbb186f946477b767a3679779175f76d12bdd2c6a33e358afa7b2e38fa5cb9b0b03b8d373ec61273ffb20ec3e18b719cdddd42ed3e971e92b9c113d0b039b037ebb13768a9d62a7d829768a9d62a7d829768a9d62a7d82993893d823dc2a88a1d42bdac148b04fb91ec116c9451151bc546b1519cd828360a0c0e10c6ae59b4db98f705cddaca32c8a1c819698531ff1c47b230e2944ca6ff18ced942efd34655ac0baa8caab4b4b4b4c000c20e7dce52ba941e5972dcddd99da5a4ee524ae9d5dd99ddd9dd3577cfa4f0677fd2b57649d9adabdd1633c7c487d78d9663b8bb4b0959524063c4202d020f7ef4e087949107b28994b1073236f9914d66f99169b289b6450d34711b348f99d00f1d020acab9fd798b06b966a7b09431caaaa9899456a6f7056f590568b4e3a6b51658c164ba308a65f372e409a2413428d364ab564ddbe2cf0b2f6c2eb29a96a97090c2a40708d2408809caa587079dcb3fb8dcb34312b76b0093237afe5ad80078f9610f963fc2c4e8cc8491cb8cb598092297817a94b81f073161c5fd388be890adcbecc03dd8af421da1956a09eb090096a0e2e30325977d7cd0c49dd1f45eb7a301ef0e588527e34881f68ac8df72b0f10447e0cb18d9bb49a589956a15e2c0326b3527bbb0fa55ee1982aaa0e6f9719d49eb45ebc73d435005839aa77f26adb30e41150c6a1e39a9a4b3fbb86708aa82e6c7af0e4155942e87fc5950cddd1c7b5850ddddcddd5c45976a099614434b7812a0c48f14523c21f574104bf1518158215c875cdae2548d899fe32a136ccee73b7ab9692d85fd3ac7db5db469cf3bb05fe74020a894d5bc9721363ecc6c1643197c20cd8dcd6ef4d2838dded7421a48e7b449bea86b9d36b18e3072bf0eea13b38e20d2437d625611496e53b9d26b210c5bee2da569d8a6b3b8f2abfc9eca921067c69a462fe2362d9b1db15ef17038f7789c8b161358513a88fbff4c1d74e52711741b70d92789212efd8a83bd3a95e3341068e6a773feb23a47f33edb3d99f7cdc8ff4c6de44a08e4fdd5391d0e8e7143df9d5a283ae7a6dc7f66fe39ce6f4ad77b600b928c4b5feb5cc951200e6601babfd6f5d0febab68e061e369aa669da43da7d25c0b954fb7eadb1ccfb3679292788c746c8f509d287a192ca8bc28743f23ba7befc2089957432207c1df9e31d6bd3c7216977587758774bda545215b6b0ee53645c7a29a2e3534a6b866159c5bc1e9847af8b561a3d5523e491c59723b1848359902f6bd7a35e577dbeb3d65abbcbfbea9cb5ce6f856f93bc997074a3c762028acb9b8dd18df1868c4bb606f6b3d76d5f209b9f75edeeda1ffd58a594f12b918b80cb5138218bda7d3a90f030cb15967d90e85c1f243917be021a6e37b1934cb0f06514ecf5bc61e07a3964371bb555f6b35dbd0b6ef539ea20410863f47ee6e31e0803fbd52be32422631b8e4840694991237344163ad0d1810a9b693a299d198e5db9ec73448f2a6c0a52aab02e3ef0c16a526048ecf64410ac0a3e3461c48e0a8cc88962592efba8b4d842450416d8ebb28fca0a2558ecb28faa6552b1be54c4cffd7e466e91c518678dd1b386588cf2090b4b377a8cee750854cee81ee710dcdddda7cf4be36d4e9692e7cb8f33c638658cd13d466f0cc6e859f4185d13f58b1c32b619904f94ee9ca316f936a7d4643684c56b4e592fba9285853fe59cb2d37e64b669bcb9738c7506f9a59829e59c730679e7943fa79c536e1e277655ecaa34ba8b341a9d46ef39a594524e59e78457a551c239e58552b329008199994b52426f9fdef1bcd2a7e672def851c3649cd97623218dac6da2915d19d9159616927db1c2c2cc2d24ef7a74af85f4e2bab4b05c49d25cb61bf94e7a713d05935685bb7bee234e83e12577f717cd9d2ab1f0e58d0d63575a7e24099a90a009845a40a805845a504ab9a094724129e5a2499338251667cf9cb14762b3024d68133ac50ccb45eb552994d05f3699ef229b10b1f0659315ee898c4b1f9c742503315c58541b02fbc2858d449b569150e537d08383827542cde04adb4234b2975da92b2c9ae93b1840178e0e300d5cb94c3f0ab82add9e0efce118433676129031811a76bba92b2ef17a8c8ba9198e1a0005ddb887a38536f58f9890620cc7b27d9b3a966d6686c5855fb87cf1752bb0b31418b6c849db0d74c1e11cc7fc385c361b9f820bac7f578d59b61bbbb202e43cdcb926d868a1d0cd46fc5c6d149704bb68c101df037d6221f4642ee4627b20ab4f2e171e61c285a30b1ffec027303bf2e3664b6e76648a9bbdd6a7b79714351ae05223395cfa73bba1f32bd3b04decd300ae9cc10fa457b92d7433389560dff2d0e10951aeb0a2c8931358e14d72a20cc10401375f3feb4a4eb37926affe57ef8684fd6aeefb774d9f4a26d204faf47d0d53e9495ccc4b1036b6a9be7f5fff4284bd3cc6300ccbba529bb0dfba1edb8f44a28c061e36db6bdd7775a2df36afc7f65727daba2cdbb6abd33cec65f4b7092bb509f36aabc085f57e6e492232f61e6c6c130c95b1fb74cd1ae05cf67102c82dc0659f2440b7f6a908f6fe5ad4e8261f6ab3ab0f6bbd2952036773440777e35f7773615e39ebedf89dfcab93b77fd239e7c729a5bcb4a30d4e76266bf93c6af0dcdeddbde38bfe9f8c2b9f07c7901e8c8d075c7707c00300001068914814809b653cbfab5cd9c9ed463ec31cfcfd371e70dbab72b3d8dccc7d353169bd24e6360a5fcda2286e0e83005ceaed0840b6cdb07707149af1770704c2a08cb44d40a7a6519a65d0bba001abd46d86df6bbb219ff246019a790f3ff3c79e7a1f8f76e2625d8efa7caf2e87ec0b814bbd1d10b814c6f6280a415f11cc1bf25a42364f6029c03426ae61834fd200573e64d52800d3d424e0cadfa0b035a03771ecc75df9f283782e6b770cc35c83879c2b7f04d047d3c4ec3074e5262554f1b073a95cf9709a6ae4afe01b0566109edb37905e4572fed966859691dff3e195bf62042b93f0c16d1fcb3e4f38b9f3bf19e6ed8773358a317bd8c595df3caef655d68fdb8df9b00b9cfbd560822b9fbf1aaee67db07ef0aff7edc6fcac4a952bc33bc8c56a97837a3037e0e581c1c621631d108e7c60f96538ec20902ce3748c78084ab9dc4f80829cbca0845b2dd4ac305373b94b709b41d2eaa783bbf065c481e54222c169dcfb4050dfa3ac9e83e07e1eb30c7f23b81f7fdbdb1fe50ffff93fe2435e007fa48113c01fbb2f7acc07e0871b0d786de20d789b86f8feb2ba0c3ce232d2085a651ca44879f264c99224498c186181e2e3c4902b9fbf7657f9818c4b0f33d127fa391a59db7d3c7638b79783bf191bb2fff2597e71be3c1d1a3f7bf7d18757c43e5edd77c5177539e4777f5d1e86c58b7e845786d72ec70e1a6e7c1ddacdd1cfa28ec2d8a8da14fdd6b197833f7ebbc0d775d1af6e1ebc74b3d194fef65dddd77fb9c07fc9cfa2f7f5431deee5e067a9b197e38b0f67b8adc36df433cc8de718f34c876cf4ecee33620dcea31b42e1bed1f0867176cefd1bb041168b51153b8575810d1a55c182db42b12eb053d8292c11ec14168a25c2ea9d0197bf035c96b9b0ecbf4be4b1bb4c562b66ad7bef32cc02fc9ed238bdcb3db63d193e72707abcbda18eec782463be2e266aadb57e35d51905e418a00130870dd0ffc55001c8e5faebfbb2f7e9a831d51f587e1a2f439606e401733aba317b3378068f186ab5d699b14e852decf5145e32c85a63b3fa31d4effaf5eb021cc0513093ee2744410671cfe2d618bc7ed7faf5237cf6bea8c421cb9653f4dd4b12ec176f658f39467d39822d92536d5c462ba04f2bb4893f0613ff54feb93ec47ef4e1c7900166818b50ea719b8af8c72ee76dbc7940d75ee0f384108c262a14f11285aeaf0956ae902763e1c142161e602c626767676767676767676767676767676767676767676767676767676767676767676767c787f8f991710942202ab7df873a7ae7b48f180481dc95dc7ed9d373093472c5ebf2865715c1d49c35e79aa11fcb66d0a2a67943ad8a4080615aabb716188806bc34e06da14d5d33d2b61b19e20ad72c2d25d24603dee8125d5cbca14b15710d0ba5209015f66b179f15d34401f8fad3401d2434e438dccf38ca793ce52a5ff1d329a3d7d4d4d4d4d4d430c3c83416124c81c0d6d4d4d45420db415c0bfd900967ca542a954aa5baa6a6a66685a4bde0a6d050e3748e909050a75ad5abee6956b7f8654ca552a9540a042cc4422f52d060c048555dd91e8ef52dd34f0b020d551c9bc3e93c8a6726050453a9144c090d354ee7e8cca062abd56ab55adedd40a9542a954aa55e6054d0a28de3c01c863c178542a15028aed55a8e7b20b8823d90055bf00702c146a15028140a42a0570100da8c89b39555ab7d136aa606b65aad56eb51d7434d94444594a302a0592bec6bdd32dd19e71f06ea56e5388f7a9ef45a9e535feb34d7b196e3fe4da6999919d7f51c8eb183e7d40b14e1907555d8c2565b85b76e905974778fdea2c2c29f974be9312b42ac08319f4b73658819b18f1df61c7327e9cef9991096db24f21982916b1bb68b440f451e738cf995dbbc8fb39ae759378136f99b38ae46fd61e37fcceafa729f34981bf6d2b797de2814877acee81db3f83ab89b18a3f434b8456c1a1ff46d781bea1d91ef9d3ff46a9ba27c1ddc9d2fa79411bbc1ea90654341babba11051f65982e40c0d0d3573b70e6f9618502a82750642104249d2af69c1df03ee84c8f56777772992cef4c91f9aa0a6e6460376ce7e137c97734e034439df67bb9c73b6f4da2b12dfbd18af461cc9f20e720cb657d8affab8f8db6f91cb83610f86becd111960d3e7ae7a5fe97166b867afbf7f0d3877868ae37aa9fb080df7dd7d50a8f3e9f12efbf80cb932ea0b7e4d423ed3ecaccb7855ab61e5352081dca28fc7ad41f5d5a07363ba041b006fcb8134fc22ec325458f8e4c687397d8250e8ba57b3b07cd9728c1e16d6232ce1238921444164f5847a1fdc584a64719985e4e7d65c662961e4b252ab5b80cbac22436e144256d69bd95e88581f767ee571fdb4a9eea0f7aa372f32b07ceb853dc4300f0e69533fcf0b11cb32c49eb88592213cbd82cb3e370012858f164771d9474992abc4081cbd24613bc6f85da94dd775714b8bf3e53c922d5d8f9627b1b0b43c935ade5a966f69f17ab4bc772c5e4bc7dc22bfc5b32b8673fffa5ccaaeebbaaeecb7ebb3cd03be3d773ab81f89362048458985377a6dda5e90b0ad62e92c888631c60845f682048410d239e9f47a4cafdb3b42870d636c27d90b9297232c63ee43b6471d5c9b7cb489ff6565fb3f48e5e248c82463ffc17db031cbb8f435907d96e29a8ca422faadeb24dda3a44d70f58daa161bd244db4d7cd17623a2d77643afad06c31b6327a9df28972b52ae3cf57ac531e47f6f52524a690dbe9b0753bffe25ca44bf19b176b4aaacab6a90d5a8ebbd4675f0422316eb48a3ff2ce416d597d159ede0854152245fc8174ab7692fc3471d4bb7d2c900af49e260af57a311e98e7456149ad824819520ecd72809b449dacebe0d6f63ff45fa4ddc6e6aad32da3e0d34d86bd3be5e6a3b1fb517402b1793b5767926ef4b375828010b57b4fb4cab3e5d2faa2fc39d5932449304fac4ec411da7e94e22a5903e0d8110c28717ec607061b117fde821aa42213ada853a45f48a33390dcc01937fc9af50671bc27603b58b92ec4509cbf2244695f58fd15f0525cd62cf25aad1a71ba514fb09d0af4129a54f3f66ebba1795edc76aad15ebaeaec45b26dab6abcbb06ec3bacdd3baebd234ecca2a56af4a5997f665af6dcfbf75a5365daf75dfa6ebabd3883c93cb5c3ff290b0713481ebbaaeeb495ccca8eb5e8cb0f1356d7b51d743341a899e6f26faadd3bad18b4422d16bdd487b912612699b56babc1cdc5a12059218634cc246588a26809f753db2d7bacfb2ac83de573be30eca8d1f57504a5983efcb11db7c2f140a859228160ad52cc85a25596533ccc2065728d47cd8737d9497077b56ab4a39f873bb81b06705678cb00e594bfaf4d327faf161507c0214b34d835eab4f166539c2b220cb4296758b8a3ab6a2ae8e8140a02b3d272dc86a537c185c58f928d68d90ddb1c11229238c52ca28a594524a295f4a29a594f237958d2f656441c61e83249265c4ea32956be4d2aeed26fb6bbb710ca39c6570bba9b5668f751ce83c30da701461e15fbd69da76d3dd35f8560fa63f078c2103dbcde55980b7ed067a37d8f8429ff88536c50e7b199e75d7d7380dc61d6b568ab4d0343eaad8686fc3db681fbfa64fd856832f06b5ff3c703fec75705886410cf3664c264d0135c32a7683fd2c8e8c031cbbb05fcd8db76fac0f3b1999d7428d5f849d9ef470b023cc171dec679db7c8c4c63611c1f5697efcebad5f735e33e288717651ced95d75d63a699c317a560c71f8107a1cc7f0df8cd0e07e88824cc6b4ec8611421e64dc34d1da0048675acb6c1b1136bec7e89a111bfb47846d2b9d9eec68a188df922753eef85198c00584cd31a243b7a287ca659f24aa99cb3e3580121fba7b1fc7299b399301deaf063a0d0358267e8c31be6f46ac7fafd0a61958d30ab2fa9aed9328e37b89ba4ff417079d37a8146ed705b1746a06000820007315002020100c0804227140208b535d157e14000d78923c74549cca8349920439885188188308010010030c10304363322500f82043d765e8920cba2c639764d855197421f3ae64d6b52cc3d3a58cba90597740fff714deb8ab2a2e935dc8a82b997749665dc9b86b9975a18c5d91a9cb32ea9a0c5d7e32bd2ec87c17024b07f48f85033adc28146b1d6de489383c88c993bb80b27c4d2ce70504171a77cee98380b0e67af1c9f5325e3f1ae49c52d542725fe0eff8ab5ab60e8166cf5c3a40b119a552ded9f65ea2d0f6628325ce62f6405307451ff7c447d5de0caccd649849f1a41c557bd23ed14670cae9064af6e8cec6250fa488e7195144186b6e29dba106a1cd4a5d44e48d68668affb2dd1fb036643e12f430d9ae4544d9189993de02ee82227b9c1b18ce1cea5a6625da8f95d6fcd7a0c13c15b5addb89481bb429ced2cc4d848b0677a7d0fc1235c070415c58d00860baf7db2614e597bf15f1de5958b142c15d8adc8e4aa3146a0956f2c4e9cffdcd8d4ef693e3a4b1d8072337681d1997569404c94574ad9c7e48110463a34e9ac4e590fdf17e85d2304b5586720f3c62257c6f07afc8cc995ec592d052929d6d7b28941a6a7f613fbfbc5f7c57631f9de13c8a23ede9bf13ff578742fa4a1ebe5ebb18531b0e6791e04c4f7d3cdc18e565498e2e06adc75bb372b1d72c7be1564fb4c3fb27e72523fa7f39aa78cac8caecfa5f6db863eadcd68215b22fa7122663fa637b4442c4bceeff10f82375d0ac8d2eb18ec7d127d1a55a523eb5a3c9b3e6d1d1f4166f508953c09298cd65825c56e7e9e6cc3de5ad2de2effd1db9ed7c18ce099826117aa2f39ac7c33ee20c876689c1304e17ea169ea650b9b9fc45d35fae3d82407a7ff03414819c117db6f23febbd7041135761bb74c3d41841a0650aba9a7d226007468876388ae8bee26c55e0683df9025706c4ac0481c747992adab0a5c6cac5cce733d9e82616f3cc7c3d8fabec8ee3e6355b95686de5b369ad759a6e2aeb3dd5c54217e6ff8f8ecc44cc1ae82f1728469bb26365225eb556f4b6d60150e12378856a6895936ca9f88e8360ca442c43c1cb065b569b49b8f9a948e2a0816de22d79811b156d2f7bfa6b5f61a838e331a9c0924c6e50aab6390704d1cdca06b6857a2def07b08d51f4793322c60f2b000165d195655c6504eba71b6e10d6ba01b2e37178a44478b4a448dc8eb5c1e758f87c8b0ef750c8b06e3b9f20fe0bd73b16405a6da4916343d3c729aac7822929cb0cc459eb6923be3f45664f456e19824bbe4bb5d18305b4f7ace884f8660b37d53eb577be91e8d304ae91ba4f906834bf4f4a536a5b780d0657daec3704a692c7fb6f9afa927ec05af25346e5bf450377cb37a391e5c02d4c0ce251b2c87a76e484188b1697e017ec9bb97f6e57d56f157eebef3056512d455687d484391902f1b929234cb453617ca2dfe24a5760a51a01b4e204885cfebace24f7d99a008816f12c05e8631f700c359b2a1e1a087a652ba6378d9fc0866e732d67408c80837dae638214de6c8ec5ff914be5e400d693b84391ad59c8d2ec3283ad0df0009d8d8a2ee51fd79589081a7ef782aa012785e96f2b5a0881aa77b68505774046c92ae5bedd43b1d204949ef21199b6234b16c359546bf72b6d18a40f28ef90878ea449f2bd1d87ba40c3630edad4ae36b1ac69792cba883b513bec4b6bdb9c708061fd1a1c5fec699bc193b62cfb99eeca7d96399a046fc0b9b2064452d59c50898564a7ab03ecc0da9c1f21dd4c6debf604990d51ca90f5f460ced2d98338f3390a777c441187b98f84b10f80b4be5c10c92439d22222b49a03b8e60ba10e0c13fa95b9223180c63e2aa122de0cf82c46b7dfecae4890eabe21fb624083dc5a68430b1facc00eea2eacb0c26fe76a32835791f4cb37cc0a9c9ac332c105766abbed9aaecbffde61d3435081f478f8ac56493eecc460c803a0061f52109730e6ea589c731d27589763be69afa2e384cf4554f8ed9b1dab874006a9d8b48be8091ce6c3ca001ef9bb431d59c4b4b4befaebf8d2c0c6a63126fc02a6f9436f0cc4b1f02c7fa292f1e69f2abe6917fa9565885fc1506e6a9038aeb4d9021136894a9be15a3b0f088a4c6d4a559cbc3de8199894ce4d5d14922751623f5224a58b27712a94c2b8c9a44a748c28198e2e1e6fcbdc649368f48ed6360628e86170583c0ef6d4803492f5de2481095e586c2f23a56660dd911ca0a39ebd461d012ac2c9a4a26516de176da08db514d7c5d1f15101cbe2b5319a8997114547fe72ebad0eee21460d86df5065cb6ad84f4af4cf648ef0d5aaa08dda5a8c6236c598cc26a4f1ef38bb53df685a14d04ffe081f940c03b550784dcf9de5bd2628d9df99832e455a57095d341061f52080a0366d3f40ffdd8114ffeee785c6007f03c162c873c9787da07713851dd1871d326cf7611432a54004e74903b3a6bc73e5574ce4f40942b4e876a5325582eca8cb08540a1429d7ab0947447af4aafb1f4176a4ec1724a4897738d4bd612f2de49abf6eea630b05243e7a4ad355709e20e31a8a77214afa2d4d85f911043e97372d68473ace0a011d7d9ce0f749cf3d2be510033f3b4b34914d26a2fc3f1f17cfaa35a1b854aa659e83dedc6280345a973ff511635b795164f21401edd2db3ad90efb81d91278043d16bad540f759a8b19ac8df0754cecdf0385a33f46ffb250afc7e5cd559ff23a004046218933fd885c8c0fc1bc35a1f934c14379b923475cf22e6755a5ec1031dc0fe286c88f749357d888bc7eff6d10e84f0f35d87ea5830c7db4955e45ac27048689a3d1cfc27cf56055b00e34bf4b39158684c0fc52f7bf27accedb84f24e174c56e052fe5c54c973b1c7435e6f96d4e320b5c02e7d81b30baa77884933476abaf0cfe63edd3d64e49f41a7a86cf803f2e1d0d0c1712c58832aaa176afeecce2d2343494cde36ae52ef9a1e1542b25c55c08732f446a0be9b634af695e2f39567aa558f69ac1466789327c67f4dfabd00a90ba5b81d1fb99ae809d9d93590cba0056c8325d11476af0b596509dace02bbabd50682ee6d15a3ef34f1d9f8ab4a0fb7d25a93a504b3fdb040eac786f7d30cfeb67d44515522f8f6b74ba5e40425a97ac28536677cba367694840a2a44f672b68e2221ae672d59d36338f2aa32a72fd73680bc5d6c50ef9e1a326efbfb8220d525fc76f10646a56314feca396054419bc493d6bc507aac03b8b791720a2b37c1ac48844d244182f85433fcb2ad118c938fd22f0d1f28de221d5768383abc41ca98890b814de6b13a7da84e064d8bff4296e86ceb2f9aa1821f286fd6c4d3f9308c79d5ba6c29ff889412fba53f1decb0bc7049579b813d077da2402e1c5af4f53c39d27a664212c3ef6d2c027929ca1cf6f695d3dbc6edfdbfc071be665852661ad506d135826ba12f20659b30cb4a6c43eb52f404f93d1c32d8265ab1b728c27d8028cc05740997237b254160a6ce4054bae2fad5b4c588de51ab20b358c650efa41a96a3d54ca16a120f6798dc5f8a462830d67c4ca53c9525caa08a2d8a01506a2e2a66a1bdcb0118115bdafa30b6d949957105f5bb2fa05cf06310dd92525e506f8d3b168ad4cd43558c290cb02a50f27dc6e572bb60d7e72a4605bc788f3aa640d76dcd215ddd6c5b002630aab7b219f33e222faaaca6db338424b426a2706cebef345c3c78d36b43c78637d588b7775d54b0414e4a86bcbe2aab0c0d34ea3c6fe821a79c0860c5d3eac3c41c8c5043224486cf7f0d614623a7cfe46c40558a31e90e068e8491cca8032a3511fb0647c7106d5d70f61d23d3a99b6446246ffd4fbfa0c6dd36e0ce56738ec7d100ec856eaf454614429a2e862811d59dcd889cd29be398078e3b37f9e9e82cf1ae39fa9267f28d3cbb809d974215a2fe490282e6ae23910d50ed96d861f49d619a8662950db973a651e1d0f7301bf3869ed4a6748905aade15e87696f8db03517a032fd8dc596f4bbed334b2643297a845b48d0313797a1c91cdea51b6626c5a4f2f1ff4c93bfabf05233b7c0a5f82c29fc26414c87eba695468275b954945c3ee22f3bcaa055bff237e3f47768d6c54bbd8927781811cc8c14ff162229057b239e38cf70443b4a277907601cb840f0e2c4ac97e4028a32003560d9aeccb38b51e951c39c986e34d476d15b2e02471bbf31a425aabf8b73ba823e2ff03fecd23419bdde5721015c0cf3af5eb7e78b5e7939a830789e06bb3ca8f024c43a42c34ac12432830f691891ef728744ba766a2b937b2721a723b4aeae7ec45ba8d367bdb2a347bef5ef60c26cd8712b5d6c1dc9fc486f2e90d6e78ea602aaf67ad45eeb7c539bd2b16e50304ab52eb4851f401eed4c9db52aaa0a4e9a5a9d92155ff0ba47f9cb1c42fb2b531834e1910d473ad8324ab892b4fde66900479e035fbe019ce0f9170e119757cbcf469872d4ce21910ff78dcdc298d0a78489a4653eca822cd2d57560c12f68b17463125fd095bccf511754cad37371a586c2904ea9266f610a747dec6b47fef184cafc63ef5cb252f642facf34fcb739791b84da688f2e3d6dd9d20bb364d923821e18f52aad7f9b01fee798da74333fde46fdbe7eb71380197614b6db0201212280956de32907858c27b4961b2ddd5c74be0dabb5f3b49c94637ad89f65b4f3d32a3a9bdce5583abed2441b478fe0bca1ef19954b79e33282503ea8c6f69f926d1564ec241ec40a8ff93a8e59fac56855dd9c6b65596bd72d6a580228e2400640b026d1d19c41e8c425f61402e4dbe8f87e2064b89f2e9308f6a85da24287ae30a83ffe5e3c4d9238d13259967d45b30ae756e25ac24bec55e12bea306ea21f84852f5cfa1b4a2477d4d2af65c57a665ca01fc283486ad40c1c096b92ce7ebf00da4053313cb8b261c5df8512fd0647b3a09906210e94b62d233b04507c20bd98cf812e162c233da8476a137545d1706d5c73be4f8aa328d16d87678495296eae3343e8ca9c70e43386a5708b8e40c2ccfe45e444c587f6eea4ff9c963216a73a714273a919f839fb3ffad546acdf181eb27cc35ce7267bd0030a8d994e28900262794815c09736277a2ca28e41c18a44fc90d9cf0f0eac84280ce01235ba5ffe269995fad8612c1cc034016df7abc4c3e7566264d259141200782ad4f8e055cfaef1adccabe283ec0267ed02c6e070ab8fc547a6e5f1381c012e4f62a28ed33e248412c231287540739891ef79a65c5b842246efa89d5592e158bd54a2304be2645bd413eefeb3f22b1a6074402ad057983185a328679b8beab3210377c3b64fccc1dba40dbb36648e256b14f64c6d82b63d168d1109ab1c0bf307ddf8ae135e4fbb17a56041794d37fee36c238d9e7b5e534198677828381923cc49089164e74a29495b2c6d73bb9b7f3655d198dcbcb40e810022cfcd889e89c11c9b69f707ab97f5a5ba115dd2e759ea27881118e475b544a1a1b5b32f6d0e4f9327fa699ce631554d2b097e4f0d6bdd472f9bc075ddd7bdef1f4e94adb113b5948cabf53e039310a5ead42aa3e42083c79aa0540fc2acf7812404b1882a8eb4d9fef6276a80e8f67cafa36dec28086d15b7476e439c1d41724d13f48cb9de9e5fb33ac3e87135e7b794ced663c3adee6c9a39e0d3d4f77d6881a6e3ed5ef2062cfa3b60989fdb38b1a627ed7a4785b8c1be90f0cd4ac259f9183a2a90b8c93c459378db286b3d606d76606bec2a40871a26b00190463a4b9d716bccb6b72c727abcedecbba31275f00aee4e09066a148cc3337e562fc8c37bff4da1ed322f9cb72fd63a5c816046fbd3a31f01b8679149070b8a80081d7db37b75e5296c3adbd8f478a4dfd92cfdf476e149dde86d1b41b0c0863b6fa5ad5aaaa8ccd8dc09d983cd2b955ea3107bfe36637f107e78d835784ad42aa92ea8117351754a5d6ee4a010097aa0704723286bf95c0a4a1e64e1978370fb22ef483255b9fba42f5ad3f3b2d70508f862ca5fd7937e0ce55c3b8214e0990dc553f104ffe7af45e53fd5451ab40eb50dc1e2062d38d4ee02c9a6f065edc82c46ac008bca8ad38b0b4a05c7291617eb9c8c0fae9c6cbdb4db186304c6dda541858768bc170bcb62ddbc4debbbdd2e84f1d4b2c09fcb623646d11d4e5ba47b17baafc4ee9bb5cd6916cc994f0961a16cc9feec02f3f21557dde11f1017f969645d941faa17cf22d29018a0cba3993dc83cac81281fe50d930b34c5782057edf2dc793fe0a0f0568f4b65849da4636c5bfe900b39651bd835218b5134e1cd537b928e2063b235cc99a27818c0843af181edd8e0da5a07c969f680ed0156c8063ee7f2788e013181daf43945f045e34cc06e604ce36c7c6bf523a509f564863d01f3ea5c6bea576f0da9012ebf065fe4d098979f84f9036c3fd3f55eb7f9530904b963d5ae07f87de8d81b7ab77b56021597b390994c9523e0b0f48167284184aa154ab47b239f1b7226a778b83d541e71c38babd50f8d1ac48807ebdd15de3d5ed2c6001f73392449909aaffe6aef3eabdc29a3173a8a4d95fb036503dd23bd0ff4fc824596eda9be12849d40864f00f73843514d984ca2fbae00d4d28673a304507c31730ab91f0426e4d2618a1190a8ef6c6657579d9457bca8fabaccaaaf137bc8054b48d1c79756a54b3a45cc66eb4a8b8284ba12413150d0425c6009e513fcb9dc63526781ee479ba96c17fa0902d990446b5a3742c4775f213f00f72089976da2e06a96840da61fab624ede72c67dff8c859869c32956a46c293ac69a9955257ad9775f2f2ac72c721ae80fd2347e7fc413d42afb03599a9bdb05ba35b5b3d52e4892487b1b97fd33cb613a84d8372e2bf63d112af7532be8c46f189ed4495aba8d44032398b31ebba236611f2f7e84df7f1e12df87c24a59a5bac9776ce0c3b38cdf86ab6acccfb0c90585cafaae2697493313f191c00891d16d13a689902e7db52f96dd9ff40f1f266435caac5059671821af96597fc2675061587ef559c6083348575f6eac6fd3c75636f3b2dcdc7593973f20012a66cf01c8f26ff95cecb3549f8956f6fffae1f96fb865bb1584eddade0704dc9afdb34441cee887f88340013b9b8008f6d5013d78e0123bb83b0815e2335bad96129f3f68edbd1c86a1dd932ddecd688c59f16d0ed638008439eb1adef9dae087428090a05715d700e651b8e18368dfcd0cc4ebc37e0e33a48710dd97d0976e8da4573d8c8a061148a267eb3f6134436a851c2a873a32d44c21c33b8be14b26263e53157a4fb420b1d86c16fd1015b704383c41d6643ed09748b7be8baf573fa5d54ee679b7f9f6c3bc3d3ec37b868f3988d683b4132c5ec7cd7de8d8a4a2e25dffc69f02f96cd5d03223ca6c6941138932533960148a7c2270ea313dfdb87251bf9980dc582143219410d7bb4674691ff41f9463d3aabb8ef4a868968d1e95687009609822de09e603aa9d92aebb52aa3e863c23b5e5e4becc4146026ba84e93991316558e5ccc26378f262b64939e2279f8e27f2e3b271b7c542aac5bc0a7da6c7ff230738bfd877b92b547b2c24ac612f15c61e3294406b468e610e3f15ee1e475871ff87619037caf8a00015cf93ab1b7ca0f1ed6a2659a488942516c4c54ed823ccb2cde2332882e14be95d271b389c49abde45b03986704b642a0c0ff562b01bd40aff44bd4f0f31a56588eec765460dad4c9084c86a461eb04b6981571296359160cd6ed507256ea430cd97e74c2e67c67301a7d0b4191c7c4196d2de63ef9e39cdb2625d361781e0813fe9c2df6a3eb5b66bcc6a9fc807e562b3e94c281510afa29b18e7328f1385021d274977567522425a790ea80dcecc8bdddb88e8ea448b7ee22fb2b0a3a698ce017daa99dccd0fe123c96083ca83863cb8cb77628ab2fdeccc75f1a8ea1a650c90dc24ebad70dcea84c3924cc0d2e52017b4bf33ef0fa807c3a970b1830cbb96f74bbe5ad8c3782a8453bd5d8eb19d24e2dbf13e1e9b86f63cfd7d45ec834395734ec44bff8084bab5f622730d5f380daeabdd879876abecd74f9041b2ff19b681aba9c8b08275ad665560011de534f8a811905949e5fb0192f6532a4dcd17b1f1a942d39b5eabf2b126595f72b30b39e79d247e423c7aab9f391e28f4bbd33a5ec8ecb890a049fa9997cd2c4741e61bbefcc6c9809eaec12dedd12b26ac06370f87be0d945314d19c5fae8a0a591aaa73507d6ec44d22ae89b51fc5442dcadd891d1b2538ababe6a82625781688470338ac7cd363bbb45c3db1b0e4cd333317808f51199a88d430e0c93ea162af453c33eddfac419207e8dacd621b623a8d08f850f2a16abe7863cff28d70849cb147d7e374701dfbf945cdfc17e0fddc7bbad49c038caafe496dc0397f387b830a28bdcfedcdc4f831d2a6cd5f77e442f71937fe0baeaa343ccb57cdd131b3662f1f50866f9140543a153afcdfc3a2bc69052db2cc6f8a4b41601bc04e061b721188d1fa3f1d99754c479b0c5d99965d77d4a3411badeeaadb34c8ec2ecb7043b2e429c03e7fcfca58aeb5479c6eb619bc92c6a77e5847eb2966f379d96a8735aed61bac8a5a39ad554e570b91a394c109d403f152484cc32ad0e88c3255fc706a5cf12626b0f29e75b8425fbbdbe42e8bdbab3ce585532eb58026b692c4873526821642d606d2243da95888a08cca434c08e3f67430998600901f606056ea8627d082b40e0a6480a5d983d82aa4e5dc44708491363bd3fb9d60fab54353c9a80f4b8e74a736f8b76d97e9ad58f773f24f78919bda0a023431c351d091770554f6dac3429c578be6187c00d7d515f253dc394d45e48a41a14e6324e856b80a7682d15e13739fc26e57e18e4541d00ac3d0e0bb9ab3f7a3ffccda0d606f90a864f4f214e8ec2bc654785c158b43d43ce4afeeb79b13ebf2c2453b00749809e72fa2787367759dadbdbbdcc7d7cddc86ca87de27692aef5230b726c557fa20534029fb759e8361186cc6ca2c78902f0978af65b08a5ea87b39936ab36db72377ce67f427953ac4c5a8ad4566bda105f1be1774ead0a9e3382ae2279edb4208e20e3dc9be4426cc88a29340e37108f1998c30ccca36310df42b6a9a3fe205e2249c56d3f2b83ca40778239195e19bb60a9faa4ecc52358ddcbdede8878872dd60843b4501bbaf64fc6a1b0c478e505dd8eae7debdf1805caaa3cce117645ed9ef6ecd9900b11fbff6028835be25a39b53c4acc5d035c0b6a30306cdfa07a9efcadcb9600eae138e367bd51661382aa6bdc26ea4c2265530e93ab8697201d545e9d2e7eca7e008875431cab97492918929166e6a5c81692959afa220a6088c4bafc629681f4b95cb952fbbf4436cc7531cbc9bb22e1308132d3d62e65f005314324012e8b0b9d3248420e09d7f44e82a27672f20aa8e5034e2d2fdded1dedb77d7ebdebcc1cf980ceef509882f0783fd8403bb5c849b4b1db788cd93d79c4fbbdc3820699972349f85dd1649869117a6967cb320b4ba334e6c0ecb2f4b81eefd81ed12cbb893f3e575ced747aea999a5a9e70382aebdc4b285127d21842cf83867908fe737277d91968bd3c755176224f38173381cc54e5dea180d1e26432d8c1d704662a4398dc72e6214727bea01540231f4f785534871d2da971fad875aa88210b22c4df42446c0dc992c40f0367c251da215500479f7996318f8ed5464ad5b631bbdc566425ba70f71f7aa72b7a89e62d68d9fa0a2632b107ab8e7202e96a1e417d5ed60eee7b80f1c51baf5b4ba450942232c7fe18beaf5adf1f3661d2eae6c5bbe63df3c37a9a40ea57e7e2cd36d03ac6c97e710a8ec9552dad596d779ed49b4fb4852ae0bee82a354497d26a094364b2515624e483007069010429c20ce32748ef23404f7b2f92a139b8cb20c9503214694cf88239acf1352b98ec52a111e87b5e0cdad105afdcac0195f21aba59c900789086f95383b0ec85aa382bf023bd476f24e573c8d8c82055856d72d0a42129b3c799d3052b03a4bad98b56c1dfc2d872d11f3659799c8da6ac156bc3fd3e0e804f206e9cdc03d4810b97feed2e9070e2d4f038112abc0dcabe0ea0d9d9e89085138791afe44068782cbcf2282d0a33a2ebce6682aed85959626236fd72e310592b2230bbe1a5897b11b21c08eb85833ed598aed9e04dccc5ba8f7a891a8eaf565ae4d07fe503f7c813b4e27b0e9e5bdfc235dd81d80d72628ef50c0446513016835029b1dcf78f98bfbf23f50e438d40eb90161944cef1b3a2f8369329f95047850987a9c245cc3d38b4f4d4481b60902c56afc9770ff580c0783d972d346e59c7f95b9ea3bbf7ade64850b98ae572fce41222999f9430dcfdf4f4f2bc36046ee8bc0ab4fbec288fcaa5018d54d586df759e18e2ecdab9ce6782e33d395f2238872d0efe87216a76400ef59cf20aedb2d690655fbcd94f66dcef75099f0a7e9d330e3d41ebdf9f0d538b1fb50fb736ee35ca261c0d89f430b3f7548a42980c4231bd7bc2ff517f189ab3d07408e0afe1edcce90a74a79a019bbf7d0d99659731bb8a70878ffc55d86d90bb3436aad93b13c17850a42e8da99bbd33928997067bfae214673d54d98ca17ee03b652f37b00ccdef7c706c111f6ca0b5b4ab311b058335f2d90dde68c2e23d24f2036f4aaf54794a267e2c5ae4498ed33a9590f427eb299a48ea2155f2d7c69b91ceacf4a924a911cd29e0007d0c3e0eccfd7c439b1ed909b234817ec34f7d561ae375951b59581a611ff0cf68ec91a604a3ac1325858d9bde4504307214dd3e787ef5b2bc44244c733ca4bf547062de09f1dec868bfad9939f086a9ce405861cc6ef1508d3513a86d9882dab997883543ac7dabd215c20f8668c8b444c1cdde856d1e3795b11603be7196adddeea388b2d5c1e462424eb4697ff3141787c49faa797223f6c143d63dd7a1620b0b6b908966a55e4f06a82e37cd4d78c5d1ef29b43c42f4902c040749b95d602647397db1098b6c8514d3f30e7c45eddd4c99f0f0537629cb4e4b121204c5190d6124ed347ac0e3703d64be57578009607e26eb6a8680685f90acd6dd5806399da46e69dd2273be3e39be21119bac329ed22fc9b34e58ebc95ec9672933ab39beb80df85740f8ae712c81183a318463e5c4eead8ad1db87f10863e98a211843377640cca0d8a19ed72886504c9d58c2b1c5b171583ec198ba31046213c536e2fc4631846208c56e7d0f223d5df46de91ad3a3a087c6dfddb70d23d0ffbeda5dee1d5643263eb517f4e06f9b5e0cfc050cc49a4266e9bc509be2c46674d96578b7965700bdb482c723cf3d286f7e91a065dec6d1cb5285618ba55f07ec201ade32da6aee99e47c734bd5dabba7b354c4e8a2ed1495837bb9046f4c146208a397f67d93438cdeda4859a2b2b968a19a05a922c5fd5a540a2b66bd696f1c29ac2a1028681ff3951fdd4ba1acec145c55bd5f98265cf0c8ff1f8c309999d6f8e916df1213f653b1da8d3a9665b5f1a2219305e500c58c9e1621aef4722fe190d66c43dfb9cf405a67a9f046880c0ab45620249faaa61a3896d262a5285304c812e62ce7cd9357742dd96ca0514c62516012f7f9c592e58c28c4f62b6ce56f3688b8e4ca273cec2a330416f0efd8432d3eb5325abd3cc297ba29e14ba411385a92450b07af86fc88db655fa4e8595611b94fd4e070e79a9046e910d2e9a64710f436fe47ff6b7000a3808031950060a20036bd80343996298846be4eff84dd15c5e25eb200803803acb8dbe9aba603d1be54fd2d17f7d6bd8110383c0121692aac5059ff1fed51393cd3418ac28ae6bb7600ab71ad53a0be8c6e84243af4165a3afcf12d5131e1b2990a098ea0754320b0232104989239abd601a6ffc3bac6dd4824c5cca229e631d1ae6761dd25de5717a4e8ea9444b7ba21505607a25b754e469a10921a091212d9ff6210e9c7d7a7deb231e057bd66d91214f5dda97ad74dc01e9bd47b48d5459277f2026defe05c2d3da15daf1a74f76e25bd1be0f1c0a35be67763ed9282cb5771d1a6193b851478559346487f8362a180688b5d17b24ec3d7b856aecd6a430f7786305169f130d4af04569b3ebbce4938b67488f6e4d24a639129b43c321d05bf1d9c8a98276045f138079709dcc23614171ee03203b746ca73454ae88a545deb6a1457ba1c6d2561d2b8abb72b35e46f5bc5bc6b4d224bcc4480d8c1bcc3d3cdaf65ac7ae7c552719098a697bba3e9bd2668990b754c4f0e6ea3c00752de768a6b8db8e31b72b2acd3c84dc0c9559d99457b885e251c071d27b4e9d00a9d3567878e34041a9b59127789282207e655650123d58e4d899580b029ed6886da5a1d86ae76a3b5bd951e482a34ed043e3259e9ca34572a105da1d49a54d6374076d4cede9b7dcdfdca1090af706453596112be98e73489045689a74b4e5d3822fa34eb9c845f409f7a4c816dc6909d04bc3b0c95258523e1053c15777530a48abf1edc68f157c94290d8c19fa8ba0818fddd917f0045ea94063ddac47302250ccbc4164caf623b760833d7c1f65d45141fd50320542119c4cb0f47c8f3f75092f48adc3d4eacd6f8f5ae794db810b11c060b717c4c2bc485a2aa3ee659912412a48bcf5a55aceaa1d7177ac3d8e4dce2ce418e17c964e72025c42026e48be10e47b8c2c970b92c8b1a89c22634d2504c6c19066f2e7adff0f258d809600c86fe7b66650fc086bf91f9299edf432e8e9651bc4bd57ee7c1d8ed65e5941e3d3a4c56661e0112411963dae7cfcba28a6cbdb4dad488db4d566f62e82a0992293794d954104a821e9b98befca0e420083e9943aae07794e6444f040d8df6146e42f5877408e01bd2c06c44528d29f7803b76f33d5e143826224810c3a59019619d8e4a987f106af99dbe6314c61dd2c62877e3d1e9de4adeaaa4b7f921ef18711789138484e47b2d830290eb02362d78643663028e42fdcf544ef266c9ea645e7c6a39407f4c9b1215d9a30c188fbabfb2b6046b6a13f26861f1b69f221cb8a790a7ee2be6cbdba84cf73d08d1c8b58be39d7957f145ad87db8b20a5100bbe938239366bd3c333baabf55153fe1b26e30e2bd17b0544d65e266c7454b2c2a719656f9f0302af152210692f676343e71fc9695e2b1e9b6ca0bc00abf970c2dffd2923c005a30fbf1339b27383d8080b3942b8ecf4bb57fcaa468306e1ccf28d3442033b7682bd7a3cdc7a9845b27b18b458ea47e86ba5bf1786395dee18b75c832836349815ff249fc956e94766de967ed477046de403d91b92f8912337c98cbe41012deba5fd2c67630dfc8423268a4adc860d5c273d9d2f3ce6ae78080dc4394faa3a3fd49b1b574fcf95dc589063cd460a7e57b8945faf83871d6575c017fc5c876f42b75e85568ae271ff4a1d6ef2ba43fab018c4156b75d50c5351d9bf3897dca7329b84f7aa53d1f2134ddfd70c0694f9a6674ea5279d06e15522ef12b5fa6e48b526097f10c7444c10f054bbe17c6a110a1b466ce49415b6957b34e6c705cedccc4ec5e0904fc46062f67be88d979b6dda08615d16395879f6190436248dbfc5fed736a628fcfdc5b2f166b3638bafdf5019e64051b423da48c0a113717692fb3857950976cc86502d287f650f8bb0fba60df83a5d65130753a7f8e4004ac5afdef2a98136afdbeac96916faec8aa3b0769111f6c83a4ce9e831d821caf1e5980b3f1e34e46015f70012201cc42cd6ce89e8374cd74283ef07adc6ebcdcb458757a838a0a7ac43288e0a6dd23cdc145a3caf7ba4cd3ae833fe6461a2a465efa66d7c081b70f6f48fd1565e1bb7903d07409f7c78dbab59f96a09bbdc53cd6f6df4437c3954219f0dbd409d5e64ff3b128c03c3b68a4b8fa9452d544435bac231b6f51978c161e66c6b4cd9ec901cd4f31c95fd686466babb304f694551dc58d3a17f0e9908ab65deb507d9501d127d9c43e81a1b9cbed079bcd06575e3f720d0eb7d32a1b41591e3673e19e395e29f7de1a2e871d1108a797d2428cb40f137e2622ea16cdd5e283e48cb2e52d174d32f65fbea5fabc1b52f43945dee29310789e59d36ba4194caca65977a72e7d8517e4e2aa71d5119c78d38cce6efe11bd29399aad4bf912c5b0a6ba09fb4d4557e44c029be002898c5ca5255694b5af9f96598e5120a0b73797454bf3134c6da5fbce1506945bb435de8bec0a93db53020e0dc6a057f949e1668e02520289d4b3ed5262e6f25bd2ccc6c3d3355e08f96267ff22d11fb492626831b0dc805571cf826c778297693640ab5530cb1f06788af4e8bf95be705b98ab8fc43ff151549f8dba075fd808ca2c9105afce4e08dca11086451af22134bd748284357f184de2c58e70d50ffaa230d075531c254c76587f59cfd35f780c81452de6dde4954e3879a854b6cfcca296aad712654a61270e3b588d54c4e224c02036570c942e5c083d9cbda0d8326f67d3567259bfa1b3c71440dbe05625bd49bbb036b2d5414937b445f7c29e3a3b6b1f8141b015d6a736428b77ad898ae2cdc873113861b518057cd40560f7022fd76d24f3e610d881ab3be4b160f75fd8326dfedea11702a0cc9677dda844c9b63f5f67bf7814166da1c9db9bd4288bc65e2fe18ab3e8421d82118f0ccf9a3cc82690290c8a3179a94c84d18952a5697270440646d31fbe216c5308037b59b8148a9915bf965684973170429b0310f2f011ece2772a6ea7f98022d52323e59ad1f72e28453fc04521ebd13bd52a50e083ff39d685e59535126d375ef089f436de3619f3c4f7800da49f9588655ac47a4da87058745f4fe80ab14567cda1c22b3996f67980956a0ddb27e155ebc941ea0ac98d822c5e7662677d301d3978ce2b40855728ab23cde8fc5d59fc79aa3911dfd455db236748c1d16b1243a14bf162b303ac619f27819215843ccd8647976c12ff57dfee922c28e828e9975db833ac9084255510cc45c088503222e4df55878923323a5014a1c10ca6bc14a73b4b56137536aebac35ac75aa19ba2e5e37ab1f1fc3b06e0f0de988a3cbd0117e78557e83660aec544bff5201c505061225d8caa459d1b8d6a4b5a4dc9a7c0d23ea669ba5656f1cea31919ae8139fb0e584d296db804b030791813125712e94a17358810164e0d96a4cca6d369db8a5e553c3eeb1087b0c51c22050448ed208e67b591a14456e51c6507636d89a2560eafc5cf138cab807c93c0f3132fb0a12d25c1acd42027c2c3875344a3c0ce38a6d02ab1caeba29118916924b988eaecef87eb210a61ed3f3123622244b00359ae60c6f521a91ea1dfd03708e16b39e555a09cbb471e4651deff60f37e9e96dd2a0ab67df36541d82ae1ab39c8b30c6e9bfa5e89f8596a1c227215fc642c89f409a0acec05e7988361c170e89b1e70529e42470a13d8d78b42a8cb32db83e07ba8439e9062319bb13b6a78ddd427a485c5b3196062104f563f3ca818828fb1499165e1383bbf7c3b367319ee4befc90853f7e806433a3516e3adabe48bc5a6999a41dc1869a3c480d7b4d845a8cd3a9374e2200631b73231f10a3e65a15d5aa33c6d42fbaa2ecafc1c700a32567a8523feb2f4ee02f23620a0969b1e2331e62b43e59e401a91affc199150cc3470c75eec565ae0800f72a3baee4c3f692b14c5796f0422c3522d2c517bf92fc4c0484e4ad22dabf6b946d450210fd3d2c145174fd087e577ed435ce7382c5fbabcdf2eab8e29ac7ac2b435d347f41fb518ecce82ed109cb7ec6453c1fb90fcfe00e541a19dd3d36b1612e5161c4db01157407422a6f03756082bc8c38d87c1c1864076a42d6ef028515ac4212cadc484e14d9abe753e945f18ae9db64b4ebc5950fbf00b6ffe63b3efbf854ed8567be0c00b6c2483c60df8ac138ea9cc98b04c4ccdab66b50a6821227f4410677e58c0fa960cc7fe88c2c8d3ad72396902736504226cc0714ee54621eab632b6bf5716306b3cef924038c9e55f9bde12be63bb37fc0c67d9d884e34638f900199d80263fb8a044620df55f0c83ee7c0b5989900ce45b7931ecfbb8b0b78209120a1aff4c6ae8af0a8a1e5437c955da78e74a97053b4a2b309d8ab9eb367fb03e63250d6b5f5ec3c40f5658803ca0d0dc2392dec1c660941824c8a9b4d869d3891499560a2d6243080fd0190a41535199d0139cd1e5c196a709e4c5d794d45127699ac2dc5951c3af313654152b5edc798d415ac885918a66ef69799e2abfc86c6c446e64685ec8114d1aca5b0d99631fcd78d55977560ca480cfd0076a4ebc20228a1829e292aadb2b010c7a810dcb331fd0424547a9734396a7abf34c9b740f04b44a35f1d65235b3a6cdcb801376bcae724b306dd2ed47b6cc3eced671c5f40a11bb8d19c24e4ad592ab33740713ab69ce3da4938995b81443940db43104f109717aa7c816a93b24146232a512008c2238781587d2480e96f840f5df8d24d2e8e2aba2b34674c932566764a8ef69132d93e0f0e1c9328a984503380cf385e3f9b1d52f0afe8ef4b7acd50a54be9cbec95dca352ba01d072409a5322e1e121f703732e250ec1c928cd2aee94e0fc3d435b6780431e287e18010c9ae463ff2527da24384f8b0cd50a1ef91f5c507f15a3255cd739078067e56425fce6b3bf03ebc15467aefbd52e71e09ff90fe6785cc5d59f240e85a044ab408d1e818f3518ba6e2e0ff2c84a0e16731459eb7d155e7be02590efba8bc2644012a4088fcd03966b57fe57eb968f8e7a208a788d33e776de9b5226f3e2a1a3ce5d0dbc7f324b63209a3fdf7a9cb70c33ecacd1bf036d4b42dc71e84b39ec4bdb7c526e3fecd4e42148bfee8947328d181bb213f4bbae1495d3e465ba4eead97c114ad6b5648baad9cf8be9213bb701045db4b24548e9a27418cddf34cd5711ff873218bd2c1074a04c2b0a4b2fd03a17d0ebdbbf73901fc035d86507b78ece9b72346351b27427d3df29531292627d724cfdbb3208521f35725b07319633f6973f09645bbae8b68e4a6a1e0b4fbe271e75bde76ad058d27d488e4e19936c18e7f8e506246426cf6ef08213736ccb1d201dfa5b2f4bceda7b7e1508a8f90052ebff399ad9b923dee12306da6aca77945e372713470e8c40c4cf873020a54e6f39fa7a9000e0737b4c2a8a873c0423c37b890d2fb5cd8914115f0d703016e409e6f5f544cd6bd0e8c6ff9bcae1fa3fb5ea98e26512547bf574e1e6eb469afb6e791a1ff44e5754df31da557c180363796b6f81f33acb2363c770fa33a35519406b57e2c33024b98947d046b6030f3be12e72c4232078c5c55effea0df508a5a6a04fe58e0093dfff46ca1bfb1cfa8cd8e3ccee3b226c42d5b0e3e27c7fc4a465b354c061854f31e3defad7eee894426ec927b3ce565fa15d90240b937c461c6b8895ca648c493f6d8ed55b7c777fc120981647a2177bcd04dd0ff1ce427e545f497bf20006c08145fc6c96ef5ab6b6bc56d9d11c10cb9aa313212af82d79edc2792c2755461987a2e69c6fd3c1d433162d3adaeee6f3d12e374667505a55780370e558cd625d3405e0beecf100c8a9f57d2941338058f2fcf755d2efe41eeec68b1b3b624ebd9b3cd5fa523857ee46fa5373df87cc6d9d292ae8b295a9d8fe9242ef831b0d022fc350cf05b46ab8dde7d3d8aca5803839f22da26bee0d0925c14f83c44743933aca6d2a73b852ed672bca1e5a894154f8de42ccf771645f545360a5781ff4c7c7288a6ea4b13799639af8afdda0d768eeaa3183bc18bc3041900faa097376ef4205d20c71c4747d40ed3793fc29d290eb06d73dd8683fe21dfb1d902f7a89724649d23b78861bb8bdc427730e2542991cf813078b051a185768b8c879a95090584fad1c9101479618b2e8da024fc36401704b4a1870dc2c323018d225b216b80bfdec73b66c981d8bbe9b7ac77c8440104274a0428decd2a206a71e19efb96854d2688d3de6bd36a3fca41ee4cf69468fe4c6a544361ae0f63e449fec8e0fd567b919daebe85430e9be2dae4be787eda986417ef60f1d66243302df2c6dc0c118d3cf7667abee61852843ab2b85a5bd9007433226f4b856c63764a854882ca74e740ab8ffa364d62be831845bf194c61e149ec203b9ca1e0f796956206a92349fcba2a948246f80142e1dcf32c9913da750e6e3754fa0d54d2b1f9510154ef363276fa050725101f9490b1d6834aa316d165e818bc0a3e35afc807ab53784c59ed61508390a3c2146494c2ba4f981533011fe70d7e39965e141e1a1e994733f199ff5561aa004764e6691d94468fc6596d2da1a15f197e4398a881efe6ea9fa23764abaca0bd008429f2522e530f1a31f625d35a4def44e62bae569235ae9807dd0efced66d2ce72ce0c0e292cee6d7e4941a3aac6d64a59a57ff8f0d9775a93d68eb759341927201053dd445229016c0f1c5449879079b31598b73045f82428a14707aa4c4181b584b07df5e758f06852f9079b056cf5698b40305b90401e2fd658fffd3ce898bce35ea4bd4b9e0673fd7b914d1c76a4058c4a14132631249824f1c0bbb98db257a535e4c831a9ce5915e376b5135cb19f5f141114337223f955572fafed871ca4ebb0cc2430cb7dc0f735b516221fd307d16738637cac806a2c5c30c60932bb63db54b3fdc7a37edb9abf0d9d892c0d36f16e485e12567c83aa0725b8d272098935bf6dff3bbd8eecf6130713ac4300cf351fe2ff0d27c61c6b17ae362b6cc83d509b356b764ceba10049947aa05ccee8a6730b69dbb968e91af44350ead56b63f3d60daaa92c1772212f0adbf7d456a9759ea90af49e313e572ba34f9d24403f801a469510d9f7770bfefc75c100e4cec77c957ee23194bb8c1fb63253dcec90f89b1f01dfcb04bb050ed1bd79391aa02de8dbf5a9e82fefde4fcf827a9648f89cc3eaae7a02c9720d45a6a4144ca0e122adcc4a411e8c213f05b4e614e56cf8b10f0e79cfce4e00df884abf3851842fc62235a45a6388561405900bd91ce523dc244c49298886c1a7d34ba5060080f3b725c344ceb5fc0a4bdf61c5c03b4e4f309fbd6d8a6962b24e8174640c8e288e5d85294bd743c6175e6b966aa7162da743c5c19a0369d0dcbb4d44f9d610fa789d3a0cc80d785d1ac98c5c4d244b78ef04313a3015d8c4f9ac7843951d63fae39cf89801142e7fac128a43ab0500aab071cdc47adc253e92073d3f11112d4a11efd5289d6be8ed487c9dfb859242d7ff4d08555ef817d2f21fd667058eb2574510f794a3f753ce581f420d6e36306f2692148a48d1facf5b320fcac8aa00a42faa8eb3c3fa657faf9a83b0e94be7294c815a3fcad9aa5af33e16ec43cae6f7556aaba5d4776b13217d7eb24aba6d4d7a5816cd594f6ba6dd57891488642dd727f05b21be458436c1b62095f84fa1e7637e189c86bb83a444c521cbc4d91142ffb9d2f2384aa93a051d434ae36fe2a469e670cee8cad1420fac438ce542a3a9e31fb88e8ae2ff497660f205221408068dcf33df52d103160fe9e7093fede8eb686f7ab4f649543a85d43e681de453316deef984047df352b08ab3e5221f2c591c022874883e518f67b39018ee0f4ffe0e308b3eb7c6c85e55a2f6676c43ec995057b8e4feabf3e5c75cf10199394b9c671c1a474a70c63105b501fd0a31b12223e332d7984cd82588039176380bef583abcb5a3c3cb3ff43fc50adabbc552892b44c6226ec3784583cc6a6b2e3e151c8f382cfebfbb81cdfac6d2dada15c4bad4bac3069cc336ddfa51be2436d7935c2eb05526fda8759303aecbeeef0ccbab79f47a20b9fa7d04350855be72e46482f2dd98bda1077dc32464cc58bc7c45e4c1b38d67dfa40d46aa8f8d1de046e16f0016d2e244c23295965572ff88139f660d1b56ef640d47445441991dfbcf79262291e7a42f79b08a2f05461fd03ec048963667a0ff598435330c9e22151e5734413a26e8076c3b124f633fc74b6db0df9f0293a688e32fb2ecd23b09897b0336ee5f9c349a81154d11ce57e3c1fe4f6e2e47559e967a9b36a843af9b3aef54d6a56c0503500f8fabfd6481a874e19ce9ddb6f4bf193b04ba059af210ad023e2f882a4772bbbc740f8135d75664f899f04f17dbe7e1b53300aa1ba2bdcb68dd3957a9c562288c0ed8426c9ee557ea15d2f9224ffdb6acd44ad25b3a269fc528fd0476ba5730d07bf002268b5aa1c8de6cc4de1b1c379274860a9966ea11e6fba105adc31f01eb2d101db0af66bcac1c3e7960bdcfa32905e40a2444caf44d8f0067d861afe5b107dccc54a486c771e45de74804e18857ac47edcad8b0466fadb2344a38d5e709d4a5cc8397da8ddefcb9c364f3a8cdc160067a5381217bb3bc4dc293cd534c3f92dbbf83fc2794363a86692cc133eba6d8d8d27c4199bde4915c743df102cdd7164808e06c723b038b5e59b8c34284cccdb47c52c64d0d0d003cfa71991d09d8c70d75cedaa664bb2ac994d665a948da465e819d9213cfd322fc464e418ff7bd10f3daf072855e79437e11a165cc60937c56b012f9ef6e384d3a50625873d36bdda5fef0905309e07205d281aa6f487dc2529a93f12648ea0997d9d781ab7e18c76b331f3a8d2891627f39383869049c94f62bea207912c4af53575683e6fc363312725b766565f8ef0780d378768364226e1428c7f4d1694e0e89617bd455161fc871669391f792e22e40c369b098087e83d75da2e8d2b3ea43bd18b70b56101d58c31de84bb644d6874e0e6049cd0cd476566c6799fc2d5e7bff4f426945b4df284ecdaa0cc52d4213b0879adc1c9c209871b5ef604bd8c080cf557b210bab92df0fbad40b9a2e233f106e4037a7c72e737b8c2e14a30d87d835a38e56e186ec490066cb1b916d66180eae0398ed4be7a69aa0f518daf36df8ebe01f382f453456c3eba6d3907009a3b07e77dcf149fe71c806a1e646908ff14caffa9010508313444c027c2c507f57ad2ca4e45149e7433960e70957f7a64f72aac39a4cc483740b5ccf911fa5384ca4f6176a90354f9ce46e257311a6faa194505d4c90761f8ed1bd06acb7f497a0219ab6bb86c806bb99347bc4951c53969765504a2739c8df09fc2355e72b3690fb09a796684f61516b78419e93e40f974567e881194a85a7d979014f64cc459ed8126bbf39357786c136505e38b92f167fb4aaa34d0b615e2bfe83cf89a7d66f4a297adb70a39fa57b4f1269b597480f58c7323b4bcd37976df2846918b9df6592554b2e6b814de41d1374e26a40f80665534f2819cc506940ca9a310e43ab97f1f1db0426c58717235cf9238b1118d8213fc2e6a5f2671ee4bc98e76949e191676240bc5b2b63d2d300eb0a92073b9a2d97ac65b6819f17c09fb6b737c30eb0e6e3a469498fddddc1b6588caceed1d3994b9c3786b48bb91dd75c23ba7b59a5919b48599acc9818a980acf2fc1cd55990d6c7d801f1c13e36cf15359a12e92b3377052b1049cbbd8f18cfce5c94c56800ab806033fe769cac9942c20b22d08a93ab69e1345d92a2c80b2b8e111c5fb30e1feec6e70698a1d8ba6ab732d88b93198925d7af63bbc2999899a863a3938d8516817b37232df30dde743d60a45be8a6a12a060f7463ad30f3578d517e5271673fa7816350389fd439693b787ba0688486f127af540f2cec7564ce5aea7bb8ce8aff1df44c85d9a995485f81a04b9ef9980488e20e871312e034aa6d51de3620b1f31bd3c171c8304d06a67531e88a587aa8dfe8181035f6553f82e5189390955e5f63b99276abf69eaf2f29d5cd25465adf748dd573c65dc9fccbe215e3245bc7d987e5149fdb2296f271984f12491f48d7eb9611360afd73ccdf5df8a9e11a4387d99583d1ea2c610cc880ab6970d395467544cdd64fc6c85fd0f7b6ab28b65aa9412c01a7f23a4194ef8cea2952bc2235ad68f43b2fbaeaf31638e8b774da42ba16fe02d4a3337c9c4fdf4e98676cffcc963d092ebe8792469040f1df5904ea51e76e5d1a12dd0dbe0616414aa7c16d1e35e390c4c28100d1f24fb927cc6a627c157f2d1ac2a257afaea7fb8c3c55527348850ca631ad47d3a3fcf70a1412902add107e57b5f961cf871ed89206ec6843b3eedafbf1e50226077c8fe468f991ed6f23a03311cb52b54cd03888289f48746375671d5a649e12940bbced132ae744f858e1527b7b6356a4714f3a298e642891c2cdbee87ad13c2d46d1df5ff4943fce65fe08cc8a75bbbe5df2fd2970cdf80309a97024d04581f2622dd60310966ee31ccf59f37c8cc31ae40ce0e19869c77a3b58226c876332c0fe2109d4ee47308eeb6e36bc37493a4bf5e46144d6457b1285037c3bd1c02f944820bffa364fc6c1a03e86002a7c1ea7abcc7dc0de9003927fa629984705d609079150aefc7e5fd6ed3699f387f75a80411825a6a89c449d73292eb5de215bc21e3178d624db699c9223bb085831ccaac639401c19dfbe114d720fe2126eec7c990a113ade4c5523eb7f21e55cc8943a7716447e39449e395bb101effe5a2db3e47797f59f943d91a0634d20b4b6f1148a5a2409252113113c51021007c8e2c1bae3a8623681a6f964a5e6b8ee5d875dcbf6f5444ed0cc635eacd2a04aebcd369aa06a8fca37e1ca3ac36c220964139002c952d3e53130510d07bbdcaa5287d630340f5086d5c3c6dd876a5013a6b65f2583a076937514067004c055dcc86e2b98021d79efeb0ddcf2a0d1c6c28469c3d5fdb12a86ce5de09c8d6b279c8478c1612762258cac15eb7b13530d83f8cb21f09fd461335cead4eb477ccdd3162389b1181c91cf343df8f1f6c6274c1004ef8317407bfe56fd2958e62b332b1402391a6656cf35b8a62238e864c065f25a8ba55a985ad300def54c6a7205ac627aba697d1ba059048aef38865a6de006aee759aee1ee97afd3ad3fe855a8da4a2341339920e8cdc3568b3d07d88124fced21881b98deeeb0503f38fb87c7dc7613614b60a14641571c798d4b2cee3eac260d0e8848c7999b56679e53a1f32df7fcc814448979ca4da5235f65ab4387cbeeac0ff6e42d2621fe1a3618b418d54da9ee4470bdcbc7f50cf63aaf431430c125d1da0eec25c4a1b341a10054c09f6b4414984b499a5a3032818eddc83a4938e245a86b9f6319c9dccdad22f55a047fb066cdf9d330b71e88995cd94970705208ebf7f02584c818a9e3ab66e5fa61ea07a087b0561a40511598273f8db6a9ea3249ff26972b8c339d511b239ddda549f69ffe6b6405d737ba7e49f95f7c817c235ff1ebcd871b5ef84d602eac2ad652d9053c8bcae4efe046c52d1c9e13de1c68454d8d4f7d2b6bfe5972f56fe4d6cb65eae2212c6d99886071091e42944bff35c10b291ed47bf3799edca33a2ab90268550d078836364f8b80c003e177479644aed61e5d674355f40faa8fea05dd8185a67523676e53eeb9eee27b7f4c32df466db25bea3ef051b7de22215cce1d50bfec28a97c8b8a96dc44f8ebf1f3e01ae09a9f084ad489f9ad8c0d8d3ca364a08ff38141f444f65b6f42890086a49e154381895dc38a2f19ccae944e47dd85dc1cf3befd10eb86569c3e189c88af4935052323dc36b3f1c7f08edcc6e723adbf5bc74d33c612ab747fff81456498d4e817c17b384bbb811326c4d615bfac949f693e341afd87c95db6d4dc65081b35930ae1d7e88060233e547a99735a639b4d13ddd50d3a42b1cb3e723e3c0ca2caec8eeeceecf648b008e721cc72011dd6e312a708efd891e87dec71e4540db24ce5cc8d7815a749d3b15e37f7b43fa7968544b4202c81044009b13213452165f2cd83104d5bffab11a3d58ef1b7853c142a0b793ee7cb788c5a1458256e20372ea497488f56d68391bbb6ac70cb42ce2517b3f32d52027d49a28f09056fec6fa6659d342f1181b3bd94c036ad8af9c046b0fec41511dcd5f4287fc7b863688272596cd47d3524e1ce49353296ce6b4544ddc5b25391d28aca6f1d3f566f71fd226acfbe3990544df1be6ab500028f301843899dfef38d658746eb8006d895a487e4b65f969fcaf4987b3b747740b3487692d53243ecc401b94ef8b060e707cc9b15da17b3a42c2e471f4585a6e605c913e2abedffa1cc3639de0137284e6ebabc9764a1a7bbd8c2e48e9abb71877f195584fbc04d00c3d6de691e5e02262de61290eaee5a290a8ea3c00cd9ebeab478e5da5d82c4861ce1e144e069c055f961088c9a10a31ad775de30f6ef57ff8db6fb011d97faf16593ac42bfec6d67ef03b32c69a2156266a1e20da19fc9d1418797db7b39a509cf04e7d8c56686713aa5057343cb4dfeb32acd688a768433dfe00a8b9e3897cd686ba49dfddb862ca84b73fd6c26eee23e430c73694dda8308912594809560af3a082ffcbaf6b52824f4c595a95cf87d12b3d9a3614fb6071c884e196262cba657bad9eaec0962126cdb43bf277a590d2e2489900b63cf3974edfdbdc1cdb9635897b36228dabd495d27b93e2f9dac3d34d3e10b3ef0f80d305010402da2ceca8ecfd8117f6cd94dcc4756d5246895822c12c4b04e51b3c6762751288d663ccf31e842955e1e05f0da7213d6f308ae029e286412143d309100a5e06a2ea083b0384cc835ac509b04be5b1aa8f7836df236a7814b3944763d27c6a251049c82e5ffd5c93d30576fa9003e141187fb8a352ac8fb69d000f66762faad0bc2dc6db16805b9d359166b40a4a4f4baa4593165806edfe96f3aba7e0e20043e000349d6961f01499dfe6e39d0c06857d82e2e9609c6ed9a407a82a1d1c27c63edb32f78ddf9c4d4cf2c6e809afee12ca30bc3745876220077e4269e59f34a9cca72a13384ad5d08ff90a04743ead75e1d061d16ef1dd824d3f8f7edebeae3c251b2ca39ca03573ca710b2a63528ed40415dda98f5cdfb0af292e177c3ef99534958f0f777f6da2173a8572cdefd6e03340c5c8e4900f64d401ecbd0c01d010753b6c6dd02184a235bb0ba21fffc63537912ceaae5f3c047474132f20bcc8fc3d9c2f19e232ae54bc5f21928408272671b624395fc57456b2b93e47b724f2af24797819272c984e0274d06596221d6acd53d5e9bfd5c4a05b40dda2a5de6fe33b018dcc9e0aad7881aae5c494f524cdaa6d68e4512d628d4960222c0fdd487837a15936266fd679650358330dffe9b7b55cd0c5465a3f13983909d4a578ced5f34f8b90fd6703665c29b7517ee590c2c24f5a05b9447ec6f836100b3f67ea78bcf07336f35430042dbb6c7223997ab9860389e040700c35687af662b0f09373ede7537c26e89a072c967914ed859f7021993987c7aaa52de792a18e2812d75c40943b7a7a6ccad5f8948b465350020c3fec9ce5049fd560200aa500580f0c0e0c2f84d95ad3239a745009751fc7ec9c0cc8f0026c438d058e40ee2c933849289e1f3663d4ea930fb17d7e056ae02315f729bf4de855eb63dc79c84e37c6dd94764456141149c44cb3547c51c960487746a6f30c41b5b31200ef631915bbb68e8b0648dfb9eb0336db419e038fdc6bc25b805dee26f30bff1fa21f726950995742ab50e478a0aaa1ef7e76da3d1cff5be8c8038437221a32d4b587a858d48833a9b40a366083ea43370916f8cffa6247c1cd4115a952942487a2245b7e4c45a05f2cd07f3e9a027c5b00a6b1baf2dc223d139b877f997c016ccf014a21b5385a4018daa40375a44dd18862cada6c5d8d12c5adde8e64ae353f3184da8fdee79455b008ebbf8951aa046cff2efbc4f5669d2873405d83aafa3f432d90f1a76759dadb03775d8116f671351ecc945842e4de644bb2a59429a52465610374036c03586a94708e0738f519515d8e153c754e593d50c5cc1757d765f57bef59d18a6f4610b3207961aa2b94df6565592f5706c4c3821056cc7c71755d9feafa51b7203195dfe2cf6aff79cee42fb899be71c1bdd4e89ccd0dcf7893ae6c2351ef1b494956b67d9f3e39567b25cbf292e52577c3ea13cfac8da6fd934894fab55919e7709030978c82e6c4b65ad8f67c58b5afdad6dbba71606b8d1e5cb71feaa8be3ab957638c2bc4aa2cd6e8c1959f2b67db0fd5faf96c3d4ffa96186254eb2f9d16d4f91c46f556956afd14c3fa29a54aa5f5fa19aa2caceb0a5d807e7f8fb86af593826ab09ead677eebe7ccdec22c10a8c76cb14055f5a2ad662309745b9b6d12fa05723d7d110eebf7a78509b9ac0ffd856daf5a2fa26fd1b77e6e65594f5fc78aaeefe1d52bfbed0272bdf512e4a37aeb23a8c79591b220aafc8db44d2c6ca924e8ab9b97aeb77e93381cf35d090dfcf3e7e82d8c7a520ffe99b9acd6fc9585915c567b4de57802f4fb8db33240e65bbfdf372b13413edee98b5abdf50f4443f5568ff9d6759a2fa3ce9fcfc2e9d495bb31bf0b7a7dbf0c5bf92dac2b837c5cf5fa49b1ca8a29d579515d8e942fea9c51adf005dd5e25552b7841fb374ae45520bd825ba3e5b5360ed41146d5b9303a5bdb0f75b4cfadd01608ab303a1d00eab63632a4956d6db6769b8f81921bac8b1054a67f0b52b96c0f4159876eff3b823943595ab604ad91a7ef7aef32a3086018d9699d66f939bdb02f6ccf8953b7a8449cdd8f01f3f38e4118a3fb3c82cd24fbc2fe94f2cd59720fd235ec6abcdd27f3d449513ba78378f43bcb098ad92c852c506ca95a403cf843a027837aee09a326d6ac26e2a246c405a420170e878b35b186611c7361826e16cf2c59582c62614259e874ee8162166b569398dbf130581b7beec6fb0fa642255a01ed7fcd338561f63f18634ee45f201e91a7fa11ea9057b7592255a225b4be6c96422fd82c9e2a9fccd22cb93021ba71389cd50fa348d5c3648d34aa87c51a3d4608a9267d2c22dac49ad5f6146b9c4fa792e50ef2d7a1101d8d5a66cc2331c624abed2cad166bdc8d7d1727d0cde229d57dab6765b6585397e70b0b8be58495a979b1a76807f63fd191220823d35da12c6b85ad7cf17a6557fc5cfe4923d2487625bbf4a269eff22e2fa45016ea5cf5a873bbbb6e9d732e94856ea49615cc79cd1013cf091d010e218c112e6cb2557a7cf7a4d2b0a424e59474f9f948ca69f01863c718b321314629e376bcf276df7bf145814659e5bf9763615807ac877df0b537e441e80f427fefed2f840cdd4127af766cac3ee85eb10b2050b9918359976f07b31a91fafca1d0d16394517a8e85e177fedcb520fd77883f1159dddd801aa8ef3973a7ed530caaa1abf7b0d51d7bd6eec67accb47edd7e6562ceb5f02ed68811bef7de7befbdf7203fcf5eb84712295ef2119004747f1e79bf5f3de7dcabee76381295cebd75a2de0137231d4ccfca5044d0115477aea4bae3dc549f1f8cfae99e736c39798d83b91d336ae3ace62feb1b86a14850b7e3fdd63c7d6a9ed34e4f8f18aec4137ee4a6c76bb034f1599241ede11b9c272bb3f5ce133df02ed170eff0cce9f9eb01e56c48d74deba1f19775a3e1ae6e786514a67f0e163ba89f7f3f173443ff8ec915c718419f18c3924803fafd1cfbf049508c918a9410f7fc10a30cb3528b5fe3061779cc8c48d71af1bbc6186ac427d004e8904fbc86ceaa084150f277fb3b249432ca08dd31e76064dd57f1123656eb8f1e238cd0dd8e1d9267a49022f5bd101f5eb69893fea7f45d64c5379837ce39aa85a23a24d27c59e71ca45e4aa88366b57521a0af94150901e5a7d917ea1d4639e71cf5123a6ca355c26ce3a15212888c3fe58bb01913d32d44ba8e9efa39c262306df49b5667183910d53ebc1da1506f101e501e3210d0d0fbf04a27bab91e19bf2afc7e915722919cb3aeb75e5b19d20c8dc68f9ec2462312455134b08d48571a3ffae94675f434fe57c084381a3123124565201a44ff791d4bc2bacec06af8f83cf5b901f42a38e683bf0e86c9a1a3e7df9791c978191b4d5d6dc402bab99e222bd3f2fbcec11f25414719bbd54814ad14c5b657c490beb08daac1cf82cd0b744a32c487fff9fd5d6d65dcafb63d74a5322032abba3a16325186317253b79784677450d2f6c89b0582970a6569f9621cccfe6e31fcde7b06e4fd5797d5e8f1957f5f34194804255734a1f2ff4b075a5abe8508222425d111a51aa95b70e291e828c7ca14566eea46df89705c6c1066d4fd5f2eeaae115b448144931985912af281208713135270454e890b19ec602dea468bc4d030b608c20554d484cf1468cb8e0eaa545137fa39556c306a62225141cf082a27558ee4505942dde80f818a954a1b7abf683672a62c9143658bcad5e550d1024a81c07c3b335a987d2a23e0490256b2f0000a9e580245158a26298242a1aeb15002ad9b89923084128851e3c5079c500131b3919bd11574abb0a852574ad340497777c78005168afa7477ffa83f36949445cf88e4e2c4cba2e44180c2031d19a6f4e45c6145ce94253428a8441b16eabed4f981a9ee8f807044dd20d405c218350733f1cc61bdeca2306207b500d5e5a0c0c6c3a0ef9fb5cd684c256de826eb7bc18443d04dd601c4f774ac8381b09f83810e62a0f6bf08fd04ef70f8777fa8a8a385a164ec7ee89937dc9dc1837c30c807915749ab6dcf20ab733776b11a1ea02f0b651dd6f981fbb7fb1c40a594324a29a38c92a2627bcf7c10420879a18c104287d06770f5dd8d35022451ba1a7fbf7b0833e95ce688a0a47f61d8d1c5bd8ee5215d21bbd8a80cb1de205575f7c23cbdccd17d70f5773266cd33f237dbe037bd6218665feaaeac266c8e9b3b3f10ef7e66eee72548b8d9cec82825f77b7763e98211792610bbea8a81c0e80ebd63101428c928a54b8f2ebc189f9d1633509fe4da831b6aa0dbd9dd5877f77537f69903f53dfb5acfddd8ead3f739d856377cc2443a1d2913a0001b68ac9c78b088213d077cd54a826e3475c642826e4ee707cf2860c6e170fb9824714c798b79ee765039edbddf341d0ee6b5db78a8ebeeafea266cd5a4f4f292999999999999a5a49444fad7b4181a1aae017d921b67fdc5dd07c46bc7965bd8b56a864b6c76188293d4b9ad480f59f11536304ce261527ec484bc1542dfc7dde585d11d7ac72168980bd8798043e8c2a323e734af9c745a105ad59709f161bd620288582346876ddddddddddddd08e2d1efdcaef57a39a3eb5c1e0692728a8214f48aaa8848ead383a440179094a46c60a03e1b9a746802e835284a32333333335332b67330b462201ef314327a8c3042a7a1d1018a824a1ee3bd689a0d1c7470e15111a373aaa2c93cdf1e9377d934e320c20eb80ddac65fc64819e3420e4172740dcd698a9598ea621c09ba359366c255db34e7e0407a71d46544f331201e4e9cf433a8065a33ad025f0469c0fa7bfbd885e0524affe1fde046ee10e4d5bc2644de112c2fc963f28a80bee5a89b0bd586454724979db99eaf189eb1b21d18869f6370f087c1690740c0670d50f761702de4886119061c9b0c1f774903c30cf53defc009a8ef4924f736ece0192d6243d7fd9171932a594503a043f7e811ba07f2715548c357f886a0f0bddd7d0e775fa2266ead98e2caa95ed39d7ab0507fd42d883bc18771b66da054d77db7df4f7165a70aa0ba29b6c0a9cfbd6d82be8c3a51f71c83392fd112d112d112271203487f37a9afbe1c233c51e17b676b0413ccb76e2d977d5278cc3c78df63ee292559265b63c3a33d894a49a24fd23e46a369826b767667955825b060c1c179a557723aa226e846e3654476a9a77a7ff8f98d79aa33c0fc8d85501d11aa7b9111741ff4c12400b250f9fe55853df7aa0a65026ccc03b9ca9dfa43a90a958db3780a13f243a9cacc49cc76a2e5dfee39d82a9c6832b33b5c488eb7a8fbce0293bba090a0e305142a0956a7f305924a729ca48a1e1ce176dd8e1d6ce6f66ed7ede4eb6e1e85e8a885db753b275d39a0ef9db999fbc551476877ced1d83e627e6176ce5176ed64841445511425638c31c628a3845142caa9a65846296594d4524f822ce62896138aa264570129a79aa298a296a21e45554f4a45514ae8a28b2e409510dd2daf5cb932850fa45cba6e574de976dd0e56eedabddbbbdddfb5bbbbbb7f77bb77741516eeedde3c655c4abafba73ff250ee036ff7fe34533026fb8c47102999953f3bf7ccbe0f64c9484177772573865cc82b2050506555227a8544554b8b68e4dcf3e1101226a51f12c021871891a8655ffe6d685a4bcbe891a49046ee8edb7d8082082e7ac30d3788c670ccb362ee930cb3762671dc8d7d51084442ccaa79682a0a15056445b1fa87047098a24305ca61e79a144a1d8923a378337d3a499cae02fd43817c70edeca2a29676c611c2b94f51422166513b0be11c45d44283534c4bcb686d68da6824e34591e1ccccac423b67208a73671207491415b6858ae6b7dc5535e79cfd404f8659399338a22188b8eb39522acd203bf0d8f0e324011ca6e890c3ce943812e74351d64b32af199a229c3ed5a04fed83ee9302280db5c4f9c4a0e3093b2916664a9c18501a86592731312251cbbefcdbd0b49696d11bb990fad9b9c491124708da4e8ad5e4902945c6b4113d618059a3477ddd97cea57341b9a05c502e2817940bca05e5826232994c2693c96432994c2693c96432994c2693c96432994c2693c96432994c5040ea8848596f87a2282583b29c0809dd6844482811928f08c94784e42342f21121f988907c2e2a44483e17159f8b0a4c52371f2974aa256620032a4eb0a0b4ba1c2a2830019520aa1468d1a305162d4a4dd0ee6e6f8e81ad3d83f10178dd59ef5cc27432cad7dccdbb458ca4c11426950614f4fdbf8c511988266c029268a814ee598412b2190100002316000018100886c30171402c0a1461973e14800e65863872523695c8237114865118844108c2000cc3308831c6188090428a30ce06000b1e6ad3c152c456cbfb06f53a0f340760027c6795e9f1b79008d4d2a33f86830072a59292ddfb176bb028874a7c0fbf78a44d2a882f1488f356fdd68b06c38ad8dc336aa30b8939218825b27bc4176d91e7e3723826574741b76bed27485dd349cff550fba504b8cd6daa27600bdf6663e892c0cc5dfc5262ca5674d88371bd2ab9d017f2bd28de5bf73f3ac5bd58eee2d0f5c4db718a2b7c06a3d673e64b7d738fa3b1601e85760918cf6815709d1f508b8dec2947ee5b8d3a6897b2d91ebec6d1f0802a093059011b35814aba52465a090c72dc6bb122c544353f5ac056e7115ca2ba142bf727deb807d89202b4d232c75241f32173f52a3710a6782f656661a79458164600a6bd11d4f71910a3ef950956b6f904d888c3480adcc9a6d2b79d368b7c75c5a7614747f08a06dc1fc01276c5235f60ea44d0cae1bb41351839ce5b82d854ea8047f1c4260275e6e61df1653c4dfc4cbd9bed34b47c1612b6a5a7526547ec25531522a4de00cc4fcde5de2132b926e9b41fc7659cc9042e689418ae32ac8323625846a4170e63b18d5baf1845d967c78eb84ddffb993f3e610dd1916c82e35abdf781815efcfe0cf5391fa21d5defa0bd97e09c461d7fd78ca3c748e0df267966486ffa22056d9d135cdc21fdc3e4837e06fce52f8bf2b5d80e168b91a989002838306b58f8c3e156fa10e0784eed31a348dd1d11b251646412805e6a81a52770edd78e20f76ebc7372f0c2ac69c5c39d6053cdb1531ff70481312bc8e68b863c492cc7b7a2c03b26c43a07c9197f63b48db33937335d6c93df8d7d3e4ed5d8ddb486bb5aa34563c2f6205d4398771a79f6a997abca081844b4a307e43c62e8579d0d69e3518a8560e79aba6d83e787690ef012275cfb49ba5e38ec833d91be282d177cbaf872467f643ef223bca4a54f6723a31b2125d4809c79377e4483c7803a77e597b487146bd4b952ba81d92699dad499bade164151ff9a934d9d2d6bff819122233ce6be135679972c843bf8bb5b2acc938b958dc217a30b1449f6f9faa7c870fcc00431eaf301197d74d24dcac8347cbcee24e8d907a85b255a07d5d181779cfed6db59959653005b0beae5edd5aed9d92762865a5cdc992182ab020e5c05048030b1ed2dd4f8a02ad0714506cdbdca8a690fdbe60c851e2b3f8714c9238645cf92317506dabe543cb799edba22795c8fc10202d5a66aab097582ad01e9a3b4c07eaa997d8d2b0672a9f07d7c1ea1af93fc11845354ffa7a031af121407d281745065b9a634729b3d02134b95cf21c1ce91d0e0409d26a273e27e9fd88794fb39adda4c0885c68118c7f6149ab2e577465f93e9b2e23f362ee626d4c581803c53dce55365bbb6a815f9721d4d025282b279793d44f708de9624c4d22000260e54266130f4aac81755e9491ca8dd9ae185b32f256eaaba91a860172b26b579ca8553e6385724640dd057314c6b83e5855a6b32a8a9d983a0079558a26c9c438fc7a4ed26e733533e0c875de9f1505a5600da7d0e76607b50dfc9b7ff42c5251d1d22f78cc40e5a36484ce52bbf41561b85c168cfe85542f8a02d3983587b96602aa69a78285616ae2424639974c1ecab661ed44e9a960717765211fd05491f5cf141258af0af8f8930c050fbf309a8e991e0a34507d611df6ec857f477a20fa228662d19113b72986aa34335baf2b3d53050ee5d6f721926e9d31f44ca480e077b18798fb3dcc5b717d099b2cf5784072684bcc352609da3063f70d96f3dbd01b56767ff05c94ef3fa7c6246b03864d310273b8471e619ad04b4880f8d192cc7dfa21cd9eeb217297207350965bf1cf2408d04f3f7e4635d2fce580356d7dcb00cb8f50f8754ee9fa03b1259af567d84d4e6e2a9617d5181de2d11419412383d692d51636a514fcbddbea4d4e9e9b93012300e1e340d7e7bce0f24777d3c6614c4b62c64c6484bea7093441f955ed171292b37274479757b7b9437ef2467bbc68c8d6151c6af3fc09e8764248ca434a7409e956d76e443a33c57a94c4383dade8e4d33235363a01cc44283275d49bcdd07966b57f8f3f5c6ca6110e73cc3abec14d4332a52a2ec709a29e32ae64173960eb5e31027646eb2f3f082ebc13e79deb222adfae116cf364bf34a57e2ab384d53c3470876b633023c578290d9673b91755e8bb872a4b9cba210d784d218f616c2697b31e7fc5f0783724dcc1f51342e0629f3050a6c1d7d64da4eb5cfb60dc053060e0c3b0a4774018b30e807e95b66bb6d0f1666308fd325eac5cbb4189373fde4a8651a3af1a058897d31da930456d593fc88b5b30e4aa3126de2aefb27d727f6cd22a38cba469c617267cec363319a808d8a7da58abde289e89d6b797b4b89d9b0d88b2e5aed849b00ec5b6470552352f43f781c24bd901d0498223b0bc237e4c8ee589f9d055ea6217776601ec2a6b6d8a93fa762a2e2ab8a9c9d98d64f650e17fb2adb592de646b35668fe6ab09e11a4d9cfd6bd930b753a8aafa562c6ba9c6de9d425a806a578c8f03dc57ec9219d10a045ce2d776efbaf312f73ea18b6a5942daa3e3a49fa3fef7c72ee487e4d1e3ac557b8f2af7811256f9210329772fef1992b6884e916610d5c19ce515d5dd913125fbfcbfbfc0a7971e69b1c9db137dc4cb8e2bf6e00b5ebc2d4366fd0536d24b6903209068b7766ce43f90cc89d1648b0e13a73b58add9f011f95789903866930794d8066ffe9826f334411f9e2b46e90e7b2754c24d4e0375101fd4c2a71c1a1b5cc023b289faa458f8c42e19713fdc5444cf9de4ce1b6ecf821d1219742fb26c9d0f022be16844428460edf9db2d6f818715f3a3e6530dcaba848f909614af1a7a62a4c4cbd255c815414389370cc1fedb077a3f55722bbb2a0b1d287155090ce6facc981d0c155a04d2b3a569dc4ef2a2008a76e060a640741029e7651790b1e116fa5952daa3f38491540df4581a4fd9229707f35eb27725a016df4eed95fff89b963f49dca840297c5d5f6bd51a058fad606990528d015010956259b487684af5597c0304f3ee2ec3f91addb7e70c8ab53a7974b2ae25b350f0c0863756e92a5879e608e8e2425eb413934b049a2f6895badcc12bac39547424dcbacee13121d0794bdcf7f05f912ae90295cd128af0d211e6b14751b726ff62d524f82cff72fb6ba76338b3972ea395becff6bd2aac5e7078e9ebfe90187d29425c81e4b7d0e1db575cc3a5d9dcf5f9011ce725caae7b5fd96d9e2554e07459b0fad7a939608e1868eceef256ac825a7082d382a5125f9ca00b321612698fb088d1485b37a2ac00e2540b5cc9789286948c86f1820e021fc99cb11090e39c7f7e693161cfb6e8622e5c398087ae43c494fae76e296937c5a1a64575a784c45826a6326968c04eb106580a21fe6fca54a985f20dd6c8e719831e59c4dcdcdd40e0b210409ce1aa88bb24190dd75761790b3a288f6cfac3db21cdd48c92e572fc6ae17bf74518984cfbc6dafe8bd4152fe6ea6bf709abf28cc572d62fc02402ee51b5319fad635b5ef7d750f2118ebaa5c36c38498d232827c4041be2b563e42019d22edc7c0da849b88985a5e408934f727c408e13f5c0ac05747bbe0e120c9faec524c38e5cfc1ea6858c18718922c2b1327964227e898231f017bfb9047d87b9c958b1beb1f89e9ffc192100f6222e3bd929484def8b476779955c876bc2b0d2f81613e496bea2ae7c26caa9720387e8a112e09c989b8e96b755cd91da41f2c2f2790c41df12955a1660df8d62088dc1edb08523f3e88e629cbe87372a64b3dfb098d2d458caba31b5319693a1307ef649e5429e82d429e518b90a04b4478e636e8f931a5fab047c0a64b1014e99c069b6013a1d2353e0934ba5382d0222b0e778414740ec296c80423ea8c1e040de109eb5c044e57accd69dca0dc84ba184305de6f31d8fcc31e31fb3cfe8ac0626cf66021fea515e277ac3601bb9207011259c79b2b781094961bf100e20ec29eca451ac6f665736949ec202829e5364fee441d849d60324e8ed8b1ebce54b9b25a418a6045947db36e875b8b908ce383572ffc5bcc663c009e70e11f6146e2501f2798b78075c04b166583bb5fd4cff81eec78e1f9e244c6b760e785e7142730de38d0554d650d570f767fb3ec9bef1dae2c7267bc1e8cbe706ed12a63cf3b71d8fadcd58a3046bda75fbc992b3f287abde5c26d7efdf244b1957542a8f56705a3dfe4de7d7501d7fdb551f231f90869223fde7b97264b6f35d22bd5da977ef05320ca3bee59b31a430721267d595c8c19f9f4f2a4eb718fab9e50ae4f93704a3df9271558b572ff0b885c7f4896f508c8b8096af6f3f3463374d52fe857be6ba09ae32b33db6fd30c03368f2cdf05320d96c00b397c3c9676e98a0afbf40c6ba00a9b60aa2012b1ba5d9b8707322812c32b7879d740cbdba583078d25658e3fb72136649111bf9a8068dc8cc0bafddd6540d58897e1bb904d586de17e32b567411faf050fd201c7fc52462081e0ff8883f8bdcd0d1c7441d230a9bd8f892bccf3e873de10e4d300d456ee9a67878e80d55cc0013b09dc27f0986ca5fe81b4ce323681bb86ac06981431bd4b5138226e90be4e720716bd9cf0bc07c72d12020d7642b4571fedd7cb8d13de65744dcb31291c92e0b53c9a4e31eb7aa70afa61d3770645050fe45f074205346a95c416954753e7781ebd063feffbdbe8d813cfeb13c097763850c6abe634d6e71e6a342cb50e77dc54613c376402608cf036d26bc4e8dea2b0aeca06ede17fe8ac02611af3a09b694d58803228b83ea15b3e328aa5f9e779408555a4f890f0ea17487e069a26f31b55051e3750d869dfd70691005663d189c8053ef63a9e6a2d3d5e88873ab1c18bdb45afa142a9ee2e961752207dba9ab591024c36191f446ae3e61dc31a0e3274a76c71354b9c107a55a7e4836b5ca767d3a87ce69c3e33406f5c0d01cf239621dd668a359957c2636bb9b1238405699b3e759d2cf558e083eb7b1ec3d221f9ab7deee958c66f2693f211e2d58eb3d2c7ea5d5c93cc0fe2d5e3a4038c8507aa5c2a402e4cd6d2640ee200c1f58f1439e88784fd1b54120c974e3f250fe3d90996373afdbce406d79040afa82caf936d8bdecb44ff44bead8e5402c2013675bf2c412284ad2e79d7ee26d268a1727039aca16916a18a1d15a9593009e9aed14141b648a596286c46b7d71eb3979d2b00c99c2ddd0efeb434296b1d13c2bfb33c2763a5e0f266e73a61c2da4139cc2683534c1021642b45e448f1c7ca0d9c1f475102a640d7d447d0145e174c2928d678e9a1d9c0fb7d136b018ed12c4229c2176e3abd795b37c735fcd52324e80249da0c0cf04e21803babdc0aa7856c35c07b477f63de7376a004eac7bd7e6de4897bbcd0af46c7a031dffe3e1ad02b3a13b174bd600b576f91f3b7433dd865f6914364858e8f64a60fe45c81ca5720a4d6da5f5f866be280b17ced5fb2a08805785668b33beffafa3a4db2d0940f4ec69c44707e8bf76648e88857fcdd0893682b311ef0a36fa329138dff017a8cb4c5503eb835088aa653f030f51f9deb5388f0c1ddb3f46ade36c80afaa25dc301282ee37ea2f2633be0dcd38a53828570366ea37a17a3ad93e16e6fc9407f07a40cce7438bb1247fcab158b2347e291070d6f497f0b6dc6fcc4558165a7d01774a6f04e8badaf8397da5a8ec4bcd2ad3edb02d0dda08c4bf2608c5a92383afc58515b69503ba0f8d2e7e8f04cfdf2ea6eccced1855bda71b51117c711e7565dc4bfc024043e21fe9381c26513a66f12b51de281767941b856a4a59eb1c23a01a5b2da21180aee64615ed8562a9190b8e96d4cc2745284c4f446eafbe40e401cda55fb26997bb912ff528c4ff3c363e62c35bcb3a5f718ae6e27f211dd9c7188422470097073294b4c918f8fda5330ff8c5b132576dc11480c5cf818fa06a326a539ea632baa03ffe7f7cd88c8b165bd9e15830785fffbd349fc4eeeaf906ea4c7d8397e577d8c96f5d67524101fe724b419ece99b742ed4e7b07eb777dc55e4472101881f636d67c266229fddabd50c5e60da04eddd7446a7580fe411cb1979e2165efd0ab144c276b2e7492e8c12e9b75e5d2a1d0c6eb015146534a54af00e47eabb56a97e41555b65ba987bb812838bcef2a8e52d9facb5eeaeaf48e05ad333f80f19ed15392e2e03962281bf20f20d00d144873a663d4d14a6b675fa6ec7c3ed16a26d8664111f44c4477db245197748182f6c7b340399eb27f34034e67fff6db5aa1c7d1e2f3895d32d2fdcec58e9d02faa787f4a377ded1c893747478a7fa44425e59102b8cfaeb2eac306edb2d67409f35f07a3ff620e1192d66fabd80a688ea72d4ad8f5f4558667f28cb0551a66203d0ce731991b07466e0e06e346c15c10ca6336cf88ca2c36d27ac24abb7e7f84cde80728f0f3e645619cff635ea3ded2e1466a3a69e809748db27deb87fb180a5c51d4577e61b21715603d6f7fa85f8d73bbd58dafe7b27395c5ab26a8d700ccb707249664fee7d084612262b9d4e29f301096585247539d8d7860eb59fe9df2197d294c8501ad5419b6433610100a891511e73578b7252097998fe08c14f010c34f68c01115a0fd6bc7826fb9ae33b3f440bc09c43dca12f7f7c91c0b5850bba11b78c8408f2b92b928c7bea86171c56e5a6d2b4ef2bb30a07c94da98892a3ca5c86547d973236039711bc279d4a604ef41fec19c3e83ab905e27958e1445ded925b519b96ec42974bcda62414a9db9922b08114ed11039ce370269e6c75b6923a087e9fd8f37e51cc249dbbeb88c49b88541e739dc1b8ee93446a51a51e890f179eef3c06169e6452733e28f4b2724f4dc133f86d498fb3891be566e0016abe8e2530d2bf5e6a7d318ef5277a687895c6ce6890027cc9679ed7830cf02b4699d36cac1ff1f61dfe5b2a4f2618f36424d51d6956cfd350c89800bd2476cb16c4062ecc66c007882c90e90040ba201e99782c78438bae24813bd72b3e4e0440e49c29ba4ad01cd0112507236ab926a48102d05b4d1a4cead505dc84d7c4b01047b7c2dc305ec9db54fbce96da3c3820ec168d9cf65771460ccbf79943640e0bd9133dffedf575bda81a827b0ff3bc0bd4b28534b1e59762952537bedb891ebc7d85c5432ed385b3e6da970e71488d83cd899037c7209efd13da0bcc26d7a5718bbca341cb46628bc71d5e978667687c0fa59fa86d9040810ac7eb8755547dada3399aecce9462b1d73886f19cfb0cc0d23295ad22aba5a89f5d7f362051efc8e3f2b69eb3a595ac765c378e636ef0e8f4a004da1341400fbfc63b893c5d541e35fb287280d8722f46edb0a2912545709713f5b4ac270058ccac71232e127bc76595b09dbeee3bf764602034a8d3cebbf1dd3500116186417cbf2298b1b87b876712d782a076770fc2e7fd936360ef2830ccc25e385d36843349cff0cd73f97871486d8d72cba082d4c77890bb9535e9c60f9e5574f524336bfa51bf1ebd59321914d9750ac33949c4bf44eceb48ea52d215c4c69023ad090e29d532859afb176efbe8d8924d51be65fb9395e0dfe89ac8de5a8d31125906e3312e6ae3ac60feb58bd4e32dbb617c7398d47fceeaa7355b1ce87235597e49bcdce6daf906d777c3648ae357030da96f43fae3eeaa3004633115bb14d61754e213c78f200763c5129563731905be9dd2473df5be1f4907d5b50f3022e938b118f2e734b108f5310b2c8f253216ba9515eb47f5cf7dcc0eddd513897435429c013b9f01f996176b6368022db0e4de38548e77b89ff4bc5ad162cd2cac16c8cf42aa147b91b258d2a5d77e564bf4c95abd0b3f26409b1818974c87b86c444b68e49f1c0aed97cfbbcdd16903d38608072008c5e55f65066bfd6168b37802c086a711a62c4a1c3153b689bbcdaf07e5ba5bceabe41188333d7353fcba4132221eb8fff7ce41aa4b88056bb7dde5db10d26b222b06ba64c2ee1097373af5de8c7720f1af1418c6ca82fb8621beeb8f6f4e2251810850431670d12f62cf1a7dffbefd82db908d9e4d5c0bf59b1f429ad79811d20857b90a1047ad14d979c0407fe94ecfc469b14585b607b4dc1b469ac82ded0af100bb5670da6816f65d0f9f084ab8d717ea678b6e96ddaca608b9b44644e66eb771e0fb0268b31dc23ce9f146a605fc637f94befec9a14e0dfcd153db84d60e75c268b47017a9ecef45a16ccccd0b7c2381db27d08926f11cbf9c4140494c262db3a3627c17800537a21550136214af7ae987a3b9248dc8d45ac161a1bc109b73dcbb662a4333972159b549bbdcd54273e6f7e2717740be78d7cbb91c9487fcf8d654194c4b1358ed57a7373cccb1beaa035169f64a09ce6371c94f2be79ecd8ae1d07f9e6cd8d4ff81c3e3cc3872d06b532b3d648bb1970ec95c18f9236c5fffcfd85106f856d56d4e9d3906ce5d341cfbfcdcb2dd2cd8ee2c51d0af69a68c1058e3b03b2c35499a941994bbebb1110cfb07a4ad499b1f2ba63ff8b9173dbc71373b886430f1ac8a4f330726dc8defbc53c6c5e00d011ee1d8c763debf6e3b8a6b46f994cea1e03686543e4a61665dc17b2a3815cf993041bdd7e83d84502c7981998ee157ae3fe20bf344ae65821382ac1641b3b9004434874817b11f9057b327bad99a04bbaabd3b650b13fbdce48489e9bd9a98cf3ff9bfd32891200037a52ace7e8fcf22dd38a5a2f9557b928958cf04db50e03c0d6d440885235c7452946c6977f40d951501a6a32113521ec3114bcd462f787f082df05eb43ca812db34b76fb83989f164fa3212364b23e7a62ef36356df682d40a11ec2b22e75d1e3d0b4499d0d8c890142ebafc0005459d5940ff4290de4e126a873941d24544c849f47b98bfbde1719b6461bef4126f76d225d6f54fd8d26dd0e84c8fbf58a540d33b7cf5c912d74a7a711f6466b7fd17623b59bd0025ccf927cd48ec263ffe092ea5f0090429d98e3b07f4a9a003dd31180cf38429e268eb26e72808c73ec8883b07dc198738efff35e22083cf47d78be4a8a02c4083d89f1f670682c78ba4cbb87cca8fb05c6f17e1d4287c5817ad1ab21951e2404c67feb88b610335c38bcb3cc628bacbed9e02cc03d813b714278830886727cf6b4124d05e5fa5699931ef90b7662b5e61916db258153e8bfabb3a1a6ea16bc00ce4cdde2f6d21d08215d4817c00d2f90a76b40e3fa5d5b6985ce33bef84f7c1d8868d697bd8693da6988c45e2caeda3908123ee2e32422922dcca87b8807df20c403d7580c88992a595c6b1b6a6cbcda7794fd7e0607b57c007452b2111bcd02de65ace8a66f42a2200aa9ab1cfa80649aec647746d7fc30e41d715f692d4a92e73cc589e7330cec21293fe554f7a23ac1f4333e1936543a29452852f8e94db93131ba6eed8a048615de319a891a69b7730e804195264b6e9960829ca62bf4fa4f70fb989e29aac1d7523c6db2867cda869bd738f19b6289a754fb104008d9130cbc4b5c0cee599e2c3d737ec3433e700a17c60a590e90bf1e1fbf0335818567b985f32a32b2247799464aa2843ecca2898797730287119e45ebf88bbdecfbe444b9f985a62176481b6965be42423272f9b8a810d51c11ea9069f0c49dd67f0d3754586f309cf06cd0473c62106252c3a80a5dbb0ec641a3416dc0a7e1613930f82968fb06ccaa06cb246c4b4d8fbaba278291711423d59a49aacb310163e37467cd88de9ea4f77ccc41d329c31569f0100eeb0bf4b24a269ece6c1e6360d545d9dd968e8dd8fbaeec1b07cf22031e026c07c3fde4637ae79b2f84904e503f1a37b715f2ee72a75262aea108a207cd8fbb245b5af107236e3f349fa6388728cf79a5c2bac1db7ed0e007b1af9ecc3712a9d09f8de2c47352655169ca81c644b531d74a1b10e644d056eb939fc6bf8fef015ce3bbdb9c3dadb493734e7228579e99071d52c08a66778570eb8dfd127879332aca0f13f60e8d9b1cfdbd3446bcf138911bc2c8c9b2d99b046e19173009b15b9789011a581cd40d97e6bad18de104b079424005521c8e7720ab3770cd6ba0782162b9e138160086697653d5ea8e07c9268427a5f64274e8fb7d41b290947d523c741c540303ca625601303235491a06ddbf62dc3036d6bbda64e7400ed0348f5124f28a4044afb8c93e3736cdfa4240611a5c0e8857072ddfed0de95dc98b636df7e4817e8eda72a35e00c7b7f76ac8f13a3db79f4156bbd8eceae50150fb1b97a1bda54f9320590ca29968e83a609c9767c40961f2d46c5ce5fe53b4d27f55f544a7ebff37ab51a457aacbb258c26a70d71d19345d398112ca0a6e74259c0f0120de47538d7f11da0aa77c8c4b80cdb958541198c93cdb6ce37a0e94d912704e0dddc55c086e6c4ecbb625277f6adf9e884322899be688c3d20a257c3d9c6d803a33a99c09c3dcb667275c07adb34b0d2e4228e2fbaba6499acb4b13b1666f124003c20e1c11fd308d475405d068cba213000eb64b58ec89131788ea5e23cb6e4e8fa552f66ad549feb08ba07c03471231a482d751cb758b8052f8d1f27e6231ed0622a01ae0a5f2c86739490210c4141020c746b53abd37d99d22f0410240b8eb50b4635db152000e218b01e5b0e3f33da0c6fa80c2ae02ee20c7a8ad1ba4796f531e0872c761cec756cc098405f27b47810980a86bcaa2d48907ce6ae2dabddc65d1b8a95b55120b5e3eef73026c1f749497317ed55df61b9f1390959681b52817e4837e002d490436bbe59c3e2314390950104005593155d96d390fdba5f79c6cc91297e3d2889a026c961a3340208c691ce76b79170be9467ab0d3e1efa588499c1d767c300ba22a8f769c0f8a7b35ced877558bfeec86e61ea1ad42fe9b2e984fb3662de03747ed83c70c4baa1a01a07950f852699255dc16441098e5554db6f77d8a531304a40a3d56513cf0c7b8ceb96c7187f80e536c6f8e438963b39bfe4c43ba1dfd0d0aff795088d0bc37b62c5c9a205373ab1a16fae31dd1d864eb1a2a079acab1caf32ea240fe0326d279057aabb2a4412b37d86c7ea322eda1cf98563bc8f2859389f774590fd9c6357a9d89203f9810cc117551a942897eb9f516f30bcbc47206c00770e4de999e589b3a3f5985816f5067a6d9834c94a25db5c8e42ab6ebfd2cedc1d993cd1cc8479c8e46c94340ba54095f0823eea4d48c08a29b511117314fbaf5fd603180ed6e17e7ce4c5feeca6b13086202f47dc96be0dcf798e4adc925a856bd726ba130c2abb3e019dad99a60f4c196df8479d200fd694c5590c3efbf3ca330a6127e5aa80d819d412cb79208ece2c62fa11d8ade40b9ae83b8e35a8884e885d5298168dc1cd65b4476c12c2ac7b9f8e92c845c47511a2ca2b3baa9ac2f894bbc777790f8a320c8b697d1f63a8250d30ab600ef319aa710d221b70b57e50047a1da992e94fcace6037fa9c0692fdd45c58bfa4e67e6600ab12813c3e02cb355a64815edf82af84568854470868598b23061230555238e5231385b0dcb4c237445658ed82169ccd96592e42b2317e02cb40a5cf7c6887a3e72fa109aa57e64cebf27fc30f135383103ed05a87745fed569b3938a336b79ded521cce3348fcc3c03ff53b25dd8b4feae4c6f99b1dfbecb9241cda63d2816adc18f4ac691330ddc0e29eb08ccc5c3cdf68b1ff86932596d8d9fa10f083ad9bb4f513993653ea0a77aa831003f88355dd854fbbd2e5091cb04e3a8312f6194286e592e11b87c7202bc8743de03489232cb1e537a70a3e409199035a7a9adf39d45cf79de001d095b624f2b3c384edd495705b043f889b7cb664cf798c1728211110b5883ad56c4b9ffa2dcb3c11fea628b299c7f9362a93f0653fb060354db6b20f37ed068d0eeb1d019c811ceec8488af0e0ec738355e96b6939aea5601d76175e4eeab2574a5975b1a83bcbeadf0ca5ac5c3df406cdc66f059c76aceb2c77b081aea0c2c69e69c612a5f181184c8189a64c9056d4130665a27ff1712f7133c9b096e6e4b6dd70c156c531388f471e357e6adb7fde65b152747857a9689f14ad65dd9fd25dba9a27c821c0a1bd3bdfc30d1ee6e74f5468170ffbfc7c55cec2df822c196f4fecf00225effe6d4af35e887ac72237524a37f7ef163a3e0aca7b3216a77e7df5e6798c38f456debc08c1f00cdd242539ff4441f95aa714f4d68b083c8470a546362cac7611f240a391ddc6305f75e87335033024ea8daa200e031b42d438559622a3b70b73cb1dcec66735170883a567fe413c430ddaca988c05d3cd56661f5b19d057954a0f49eb6cb4b74634869a74d47c22fc0768729df23d80e7e4a801c762e3c41488a6bc10c028bfce5a992c6f4a7eaed6b2695653048b0c8a2e8deee9ebb8c7f1c5e764c500eaa9a9781eb0a64c7b620c91a937468a2f35618df8df6b23af4589e5822f9446372a0f2a944db1babca9fa938eca9848b85f1695ff925af04ff1ea5405af2cc7ec2f06fe821028dc393a0ac5c6dff562c11beec9d603614d0d91dd74766d383ad38cb9799dc173783da5c2439bbec895c328baffcc3d4315c83bb5451aa15f3c04e3d5988f74fbe158f17b8a16ab19d4af490571a74abdd6b94f2f6b124d05e25c52a862c3c545341726d4dfe7d1129f8d3e7026558d1efe688635ffa37b4403da3f073dc29f47212e630134ea38e8bd313e12306c6b957e261ca4d64d897405924ac08e74d11615f840d7fcf817c8f8bd5d5569197e876ce13c7c5ed725211261bea0158cffd7a06023745b0ede10b32e74ef393823b23142ea2a29f690bc03b05f3322f717e9b90fa1b590fb38376e0fddd7f97d1c3ae4b85e8ecfb4b09988fddc7f26d4feaab48de6073e9f4c5769a75a9a08666ee2712f6eb5c7ea8cc2035f55a9941c998046f3f8a270f48b6c3aa06358112eeab6630023577274ec021d35f2fbe0f68d42b723804d573d096ceb49bd03cc694da8d7179420f3405095f2a0c211836f0a849ea1d24bd84ed56a50c2c92e674c3d4352c31966f54601dd931974a59767748706c64e101ec9774a98b97096cb03c25502c2c817e3b0f309decef3215b3abaf44eba89907094cbf6a98498cb62c9ecbce9cf7f64abe07510eafd103020c6af7d6eb716dc7dcf2be5c476783d868c3fe7258e0f26c60fb419dc15adf3783adaa2b33052eb0665327a5736e1434c9ed62cbb9a50afc051f811131a6b272538533c17d14d30698a09a3e4165840a81c9b44d2af62077f5a71885c4f3f9e313255dcf387bd16a34d1a100f1b98b03680d82198d0e967cbf90cffe006a66344219d408eba31f59da1f32a4743070ccc865ec988c76101127bc06210f02c8eeae415f23db25dd1aadf81eb2f684a79adf84d1f10b4d71617fbce58af49533b16e14e890157fa26c9f28c76eb8e30632e7d355dbe81fc6b592f1b7c251a246b4b4fcc3dfc907620e2e8f77d895b06ddf6faf408d09cc509c015ee0865ad8f06cfab24c0fcf28a4eb2688148d01abc84ac1d1142283e25d331659d06731702c9a4fe4b3f57b4be48bb657a9a55d625ac9a21ae5a16b3b233a925c3f31cdac7c3a1f906038c7eee2ed427f200ebffd3658cfb5db042ecf0de4aed58f28de97d76c1d87b2b9530da56742026659c500c094cc2100071596534636b02bfa8814159fb5ef6e480cfaf089a229715142745740755b688edf122542ec6ffa9dce1725e87aaaf6f8b72a1d19c15323bb688c669d0328d67a33b00881d455a182122e167cff1364767efb5d66162d9a3d6f98b8ec0a145ab80e341dcc4cf5af2e89ee78a9d30d08f661f4d40693471e45918e6d18afc8052d03137040253be1fa6657e2c8c20b84ef178e325a2fd619071882e8af4f99f22543c8e3e136f4b4090c179574c25aad7843e698ff6505dc27bfa9856e427acd080becfd2b738003ac4068e32436948ab3104aad6ba6ed4112a1f17685c5e1617dce630cc8bfba4bb021960dd2f3c6c2369bea077a57f056458c07651145437f7cbd7bb5b835ce99dc8a0efc197d38fc797245b4416392b2fb71bc540b380f488814fa1d4012a534089cbe69cb6b77e9e98f6be3584570a620fc6c278c15e5e7ce51768360881530d35af4139641adce6cfa6b16a0c313ec601613fa4dd51d63b2aa63a29d79efeabd0bd8999e40497f823abe006652f79dd69337ef0c11f2e080518f5b8301044e8e4118e88f9506004ea50a4230bca65ce47812e98498d6ebc55ba8e43efec17a30f7515ba62df222710f72c84f3d6010bf1bb7fd5f58e713d86b35e8e68f83686550b75ece386cc47d7bf566bba532c3bf6751530580b7f662f6cc57756dece9be0cdef4d3a8568c2dcea52985e737bbde7e5e4cacbe157459d10bd9ab9d672e5d96072ff544e7cca2fc1aee0efb5ef53fa49d063f3af9784e965f3bf5b9b31709c8140a63990c4df6622b4ca64a79457507969561cd644bfc894ad0bcecaf2cbdf2f6e31d98345a28b6e134e881111c0ae465a92c02e2f75008ef22df4b774f23b0c7e17e86228f405c0b76ed656fd649324667f5e25b383e8535e5ff0574fc192cd267e9fe125a73859de9fb94fb706bacbad2f29dc9fa96b962efbc07b6a43b35a7fd8b0e59f244eec60953c44257d4d1397f947776e40e9f8e9b6cb835859c6d103db080c77c9c430bfc244b29dc033e1e2a6a09d050e09fd7dc0bbd0a467bf273e216d1b04b04e41a4c274f6d76fd1d6e960cd0380131f8c637761943bab896db2bbcac37a1d1e575b7eacc15bc14d8e7b5fa157e587460f4e20c95fd63c3be0bb4ec6d7838e6476b802c58ecabb0cc4f1d1789ac49f3de649c610b0f432efdabacc4ed2aba93a4da3623aaf28c99e2d103f83f2d5c65d1babe5503e9a28380229271626ef9b295c0c868b580451565ff51ba75c9b2939643d22333519a077f4255083c5174d7f1c3f82efb202e09f4b122bbcf71e35d4f170d375cde629d6e72480aac67527b5a8d87b3f1ce5736c00d7e1350813fc8412bad0b2a9a96a9e39282a25abfcc4c76983207f6e88b2184b8cd4683e97bf23fae5237bc384a5e62d1e8dcc7c2cdda42dd72dba44179429f408289de04f67cf566c922e54ffaf2bbb3782c9b40a2bb48483466b0afb97411e0e5ed22079454a86f056d7a009941a95c9d43785981bac1de86c9643a28a71260ab8553498bedb611d22c6f7d5a9c3b2b1af1811c3a83a14e99b616e05002dd748b4b3ab3f43ae90cea2c5b16cd8037d8e7efd19460f40758c6dfde88a756d63bc9017a68da9c0d2ed326bf75b298d76549b159a135e6227f39cb08e9a2ccd705f811a8525fd316f8a147152fe2772a3f3899ed642646c7abfba0f01f993fef6ac3e4020dfbe81a0be7d7be40b12c0c45e5ff3ed3bee4291bb66f8fdfc0548f0d8d1fa8e7fcfc293a86984ff98492c0a392dada056e88880a586bb5b8fa10d259ab4fa8e2127a6e96ed4a69c362544c15212f03cdc6db86187e4ec242f4ebfe95bf88cd0012d0a3f42fdab1de69432c40a529a5272905af3c96afc5914bb9a01490035620218e77a68bac0ee08d94b006d29837396872a0f4f5023eeba8a660df13e8a5d97f04bdb30fb16d9e4e7d1a6e6117819095b9b141b593bd8983d31c78e8d8146083f8337c7330bb481f86e511605090a048cadb7b4a0e90c4119253e640f36598322b606aa06145e034a7bee7e5b3052ba4a075a6849a309ef8d37911ada8af6325948295d4a6a0c6dd9cc242340648bab09552b3a58400fe7dfbd5b4a64d175b863106390ab5cb0f6d801ea4337a8c48d02e9f5f09fbd90fb068d180922237fefbdb794524a99640a7607b307c307d3e5925d0f5709622f2ed70bcd3c751944687bbac277902012be5927ba50c5e99d19845da8fe5c004710091f5927f6c79c23f64413889a9035ba0ce5100948e08275a13f273281a88967ce71bf10c87ea174ea9c0ff9d9fc8424f8f6d8d2b5c895c0e3997384eded3c5afe446f5fddf40e175a9e7a1c7d7292971b9e7af4bbde6137e38c33e218cec14e1b40d4c4b78b7370bb9e391f7da79727349e79c974a1d2058918247d61e5c31b3fe90b2537cf334f74592ac31863c601f9634927d9d4c09c4cd3b40ce3ee2cf6d269e9b7e26f3658afbdf7da4a7b8aa6dbe41d160b35df34c77cd3b66dd3325b691cc3c2019d39be22fb58528776cc7df8d999995d35257f7c3dfb32cc3b8b8f7df79b64201dbdf4cce58c51b5b2f1719879733e9aeba16961864d2a9d7126188d71428de925ed9dfa592c9db3592519a50bef92f42ea7e9a3c8e8669ec839f384d22a9fc40596ef4f88857ead06ac333344174aa62c328bd462cf96914bda12eb48e7a2e8426d49b3c255896ecaa5f959f974079db5a2597929955847bac65479606d5b8c3182dc3ce8a20fa53f1e084bce399b67641d1675e2d2b6e7d523493006d299e6689ecdb556611e7295f6d6927cfbcc9a7c7bed9cb09f7cbb6d24be8d7cb75257e9feae8bc9367da2b553d9dbb3023aebd2db1a6cedc3dc7ad7a717b27802617d873f7ef36683b1e98d3eed2c10bdb593d6cf28f3ca6a45e9f9cc35137dcb8f0522a208e40d4af939d6d37e7f0ac56fea3352689c6e8f34c609adeba76bad44859a71ceab4d58a7ba36ad75ce3a676302686ce1d4423a8d4198974e33a7d42d75bbf24d0b245efab65ab98dcceff5242d45cf543c276911c56b02f0b89ecd8542d818ccd922ef1040a409000e4eca6d709c5b26ede37ea2b51ee783730bd2d0d0d458afaed9388d57e3c5c761ad6b3ab5d61ac781e3c6cd0d4d8dd358eb98ddacb5d6db579bdbe07a363fb93680ad95c8d5aaeb6aadbee2e65183b556a6afbef2701ef9807704452fef5e7aa7230ad2a9970aa677c2f08e1fe9d4535f183fb4e129af5a7a27b4754bef00d95a5d53713f313b21739ae27c7035bef290a4cac3eb4892875bb7ab639eab5e83ebe9afd99ec643d6531aaf711baf3547bc8386579f49f08ecdab6b9b17747a1bafa1e1c5477128ac7c5bf9b6f9ca79340d8f9f3f9ba0f8d685ccdf3ce8f41b8d6f9eb79f3e2105885e74a7c7e6518d962e9c4540585aacd1828b76441f7b7296e1268d67bd391fd6575ee3f14b2e287e8d5b4f48fc9aed0b6df8e695c629e70354e3366af559d43b365f68e349efac3e201bbef2ea134aefd47cdcca37ce878d156b8bbca30768f31a2d6e0d0fbab08dcca31a5e81e29cd23bee1bf793f9758df311bf5583d469e48ccadcae411a1a4e7d0b407823d278ba857bba3da594fa507bf93747794231ac3e7c7519cff2e89a5a8df491de915e2b92cca95eeb173615ae36f9e91549f2541f3867ba0ac25594ae0ef1d36d45faa97d4754a4cc2321ba385bc90cef5fa6df952368371f3becc75ba7b752ba7db4abe88da131ce0fa2a37c0b2d8ff2936bbdb19432d487917efb4e1ecab3251d13e72177df4ff4c139eaf3e9d34fb31e3ab90596ef1e35e4bb2a1f9d3a8fdee9de42ca67ae6d0106db7830a077362b16b56d5eb91e1bea0bef95f372b9f33af5de4ace27e37cbaedf342ea9c967128748f3a7d21903fa97c82e298476928749ff3901bd0f60151713ddc4f74da930151dd6ee520eba70ea0f6ceb61a29bae940de396af30f373e7d9ce78ff2e26fdbb64d6ebb9b6f5ecdabdb5ccefbd3aed99c5c73edd47d9c17c6e722d703f5f530eb6cceacc3f909f3ce93f193c7bfd9fc709e79e6dcb67d34bb407c6a356831460ee32c67adc5ac732a7c3f1a8c2928d13df6951029fd84e20a422d6f852ce639bb428398b31ad48179c8f211e1d30182de60d0e9ad83946ed1512a6462200539aab9b576851fbd63a5ccb77da12afb7444a1e63c1d1e4b07dd6cb144d0d152a89f06f9704a23f609c51f0dde06a9cc922efba142057a07dbb80fc382ec7b21510a0d4615ea0af43ae659cfbc20f3b97f60a077ec2714bf7e3d660a325fbab07b99c8350102882ab014155db1020820aac0d2489fad644ee699671e9bd23aa39606330dfb7a4883998ecf62d34ee25abc72e79d77de46d260e698151de635469f3de433975e28d4034b5603fde2528399c72f2a3598795f894ad4336927364517eaf8cc1b49ef64e1aa9388f9ccbb49ef6416c967be9a7e6fd76559c638d907d448f64851d1152bae6bcc3632f9d91f7433deb879c452b71920baf0fed5a29638e3ec291314c7f4cefca216d762155dacb53a5383d7312c9df5e9e1653a8a58fe7a7c92d520bf08a5c1ebd9178b1abcde55c4a22b3179b129ae96dee1242624feb65f8f5c2218fa85dd6d2495ca8d3b3a4a0ea790fce839d098a7cb81981c4cf1da69f64ed8421d0ab1cf1efcb590fc803e1f27ccef631fa1f8debca213eaef911e245da85fba507f4ff985ed5bec1848292dd37b595ac93c27cff61cb0cffed843573b554b29a9ed06992ff5ee6eeaa4934ee903cd27e6ed01494d66ce9ecf67a33910f5761b1fd4dba9b5be7d3785eb9b43e0bad69f4dcff4761b1fd3db7da6f7e7aca365edb13d288e79671d79654e0b66864091310336d6a3ac51560cab326c46501cc332da29c39ead335774fdc2b3d3af6b3004b9257adf53e77676da9c09444dc8f662d6ae79e6f1620eb479a879731ce79c8d8fecb32fe88472c6e259286f392d6519e9d4b4b959cf9c76ce9f7941581f145f88507fe7329e4df78397f1fab5ce3c6e7a19196fbe6639b69cb6ca9cdc8c97917f92716d729c73ca9cb27c7bf14f5efba0aea639733e3c7a7225f0c8689665aeb9166eac23fd468e1da74c5fd14dd70bcfb9740df3247772291f73eee43232980bd597712d3ee69c1744c685ea9f9cb99f0b7c07e1c082e298680286b973bc28fb750dd6ef7bda591f68f2e4a37abd2ead5f6729f95a21f1ebf5fbf9d313ae94d24a29a5944143de77668cae9d9e6ca4f7b5b65d7a2cef5d01030d20ca719d475f0792577a10a1ed834810aa2f5daed08f81bff763ce213bbaadf123aad132a1b1446dabe9da742d727c51ddf4aaa4a0c521d97c873ec6f64834ad0d87e690b54136b607c98f41f30b85fa33ae077521dd0399ae173e6c0fb2625e18f3422e90d76d61bb10fb4177080c2f7c1021f5a30bb1cf02d173f50ed9ab508bf9e99f8d8f88f4d22352e809e99f9ca3bd56e71c0de0383465b7330b41b206c9972efd0b1aba4268e007dacc96ae6592b844f1e1fc8e317a0666b674d1c3e7bcbc9099ef477a2195dbe47342eac6f4423619de1124ba3e88848f284c1783d1a64b0f89bc2773a94566c9eeace3e37aecd757370db247ae07f3d8832faa6b3024f2306f7a42e2875148cca6943241f26d7ae4638e7dce3aecf1af17744fb88e7dbce266a276875e9bb2c306c8a0a1764cbe7c39334627bda55b4fe76b18a9c72f287e25c013d968af68ed335e3a20eb217c68bf78a4b738b201de1184f546ec44cc854767fee837a4884e8bba91542bfa54fdf49a1b62ba10c8b3b6f83184ce74e9a60fb1773287a8c54d4d58f0030b8e985cae1675cd234a20040c4130d11a5244a715dd48aa35a448b7aa1b59402b3af58c2ca035f443e6c81cea4351787c435152a01ebf219739d3e9c7320789c7904106465fd8c0081d5cb95146c72d221da260c2891327965220468b5bec212b0577b95af148ef8480640aa131ef085932f33aa787b26af1f30b9263c684179b20602de17520444978f9fa5d0fe5170efd94de9ce286bf9f11ad1ebaf061f4b03a10a2267f41a080214820e029907cf570043fef0702d6f2f5fb01e50505c00206930b95bf794ee2e2c31b0db1bb40d4a4658d5c34384822061eb85c2d3672ddb061882445418456602d6fe42a001630700951c010a4165c3c0592167b3882af9ce485152f14df0806d6d2b29f8bb5b4f81b627701044e80a8c10b625c435cae167fa1f4e62450002c9c182301940e7040c419318c19d3e212542f3f5a913439a717eda5d4a55fafa3b4ced8dcd40b15fcaa415a29523369ec523ae6b2faadd5a594b206efa09dc4a41eddc6662a61ebbcac23db8bc63e29ef88223448bd307a960cefcc962e73cda9dff40e751dbcc359e7769d7373569d739dfaaac6532f8c7c0d0d934f2ecaa53f27f100ccdf3478e3751b6b93e4c511cf495e14f1ab06afd7495987751869051acf4cd151e79605d078260a6f678f5c8f479f335e74ecd5bd76aed5bb7a94dc09957af4f6fa85318c99e601596776ebcc27602d0c81e105d707c99c05a20f0a45f00333c63c0bac0425090daf390b44af7d8c7d3ed9d75a29a5734e29657747d6b994eb896f29d7c3665f183feb09b3cce6c7da16de025d0f1afa50fe751eed61e5d1ed2789da9e93bc28fac94e7b302f6589407d1586a75b7484a7d4b7de892f68cc91396e40e3abf2a3c864bab55d3dd471758c605d051e6079eb15689ed9b2bcc455de82d171d33becd92d118cb7ab2facba8c6365121acfe8c0a5ec22cb4bc9f303b2cb16a66f1f1ad7f0a1db8ebebd53ad78477c125a72ec6409282de5eaa2c7e73e003bcb308d163bd4a44b4fc9b7e7681ed9ea10fc2d76627010209a82c50d53c2d0a10b2d35b498bbd275d216a5efeeae776418f1db9e93b6207d3ca2f1cc0ebabe9b00349eb141d71e3d287e87b1e4b339f5f65888d847592788c7f46c9e65af7d2158bdd08abadcbcb03a75ccdb37c75cd328e651274aec673ae69be6d1d324f7733dc6fe304cc8158a44357617479e3ef1f28c26ef4fcd10f31e149f3ab34ec84963aa7cfbf46c7ee81340d1432134a44f277a2134ace0f8a64f7cff3450fb8cd225a59f90f6675479a17e295dfa4bcf5f487b2f1a374f0a4fa0f8d0e70c211f3e14727180e9432124aea00f8576a0f4d1c31098e0250513d3472f4e3e88c78c39e375c400c6c71e334b5da3e039a969e9bbe839498c290f3e2785b1e5b999a54eaee039a90c261f919e93c2dce007f09c144686bf2ed710568ac2827d21fd1c08123f62d1c910daf5fd7de47a044d97abcb7318cf605ea35be57a38cb67798d69adb5ceae55c65aeb0565a2bff458ef4224ea9651c830d19e93ba4002c60b64f8610b2b46a0404a8b398deb21247fb68fd9e0e58b9a0d0ac9d7ac6631cc76aaedcbcfcd33b742f231d762739432b6f32e778e74f0e6f90bab4b26819b2f8a6389dae4fcc2f84171f50ef20ef9383c48a762e64a175e9ad485916fa6939ba1a28b8ed342349e91415237b946e3992a3330e82fc27cb165061a6f44b2861b9cf1427e91d20597f7a2f443052f5364972e927e79723715303064b66697308a4af8a1020656267c09f3d345681edaf2f2216301e3adcc2e93b27eba8fd1f5234bcf2d218bc53c4448badc708222aa28d1458b567b34c23cdb172e20038c1e7cf0440ce621f261075e3871c4888933a4609e0d3811c28a179223a868221635921a363f447aa51c226a596b3febedc9af6d74fb51dec13b2479de12534cba7de84266923cdcd4a54563a3ca5add3a87ba54d2cdd5948e2e806ed76337161ae384bc319539d486c524468373a68b8043e727b8518d521c218ea720751054029ffea03cbf90860fff10e867cbf4a7629de8ddc660f41b41554ff7dd3f690a3f1aa4eca51ed1b8b5283828f1c261895f35e801160f2cd66a87d58a06896e1a79e6c2054530e172658c2996b4d899c6f4e2de6ce288512acca904f3b494cea1545c702b8ee6399d3c174eaea596e8c23e9a51ba8f1aeb6eacfb0804afde478da597e6d13c9a52e61111e6d19b47534a12ccd3f512ed44cb00fba6942eea269589058ce2a9df2a4f7d7ed8d1f5a106a9b7a082e499453227f611e6dad19604efe83eea234a1df3b0979e660101eb9ed2474f7459f5a24f128f8000c22c6a81c370180ec361384c9c31c6183d471fc5e8de3cd5c0a9716b44afe19f27f97a38d14fd1678cd1371c3abe77d290b21d1d016089ca0daebbbb070429d811081784d39c20d0584da42af1624f1aa4452ee834bfe10070e94701e0c171eab37700e0d4e79c373c9c730660ce3955a939e754a5e6bdf1b08f68f89c930693728be43939751bd3e30d008e2a358b6866d12ceaa33e6a293d459502e1646f9cdf5784038757ae8f523d74d1ddc33eb2f1b08ffaa8b1f452efb853ef2c353335a89a1a9f1ea786681f7df4c8bf166e78d84700f090c3f41253faa8a5f494c7e1f103c0eb6e3ca393db78dc601f59cf86176e1ff6d15110fb212f09c5a7f199d02075956793faf8b5195477faa617950b9128a3200daf1baca49c4821bd8e84995c5e47b6bc6a10f3aa614b6a895709965e25509a30bc68008382c6adc52d328b94e262520ac924952493bc9209934c9e1223cb96540f5ddc22e78dd14b7be412b7c42d914bf4325dd58a967ac16495f1aa61e931f753631836b1c6fc48435ac5d884c66d834e355d7a0a8b2e3cfdf4d07fb6c78ebc8365a9b59dcad285fed67639c0b794525a5966441dd0a0a937f9065da75a492965cc62e2a00bbb9f9d6a524a61106b8fd415ab9bd0c1afd5b7dee9ac8dd1c67ac5adb50259b79f8d0feb4d5975efbd7eefbdf7621876bb8949a9a7aae842771cffd8b5f28086293f80e7170d47b610f3399e5f33283dfbd2950ec7e41a48c00a0b50ee9862eac2ee29a51b09b4aed3a20b4fdfddc72c40d07cf83995832e3a1b60bb0d4a2d13d01887b914966e426006a4c7797e19597aed54edb4f1413d3af5f8b5cb9ada810c6480d2c523524ee6a7c47427eb73d2f8c9fd8c4fa7ac4af9fc72e4007b07483a582368d6d03c8c5e8d1a343e3fc74999d13dca83e27f3154f97d41d3c31afee30b9a2ebdde1a5fe347e7abaffb1adffdccd63b33422d3820be1c5ae1e31752a71f10d603054d0fa30b916fb48d800b9a1ed2f8c23b31c7388e732299639fd71a5f10cd67b4f9fc6878fc2acf88f314e7d20b7f7cfd70b4cf888dd6f6cdb039110cc38810d91873229b6b4e24fb3a99c3ce3911edcb7c05c9c37d2c19675c47836ce9164f1eb2bea37b377cd0596735c84eadebb8414667fd14016eddfb09754e3bcaebbc20f44fdf0a355374e19d3daf7c1951922f2356364fcbbc49e9acd64eaf934ea75a7e3a4f4a27bb6089aa4c55994d78474f23349bf6fee136fb8a3eeae82fc5c429929a990d8922c3f9766ad7091e5fc6db6e6456bcb97456d2329e51e75c87f4d2d3fc657c4eee04996fbbd46594a452962d128ceb8892274754ac6061e2d22f7b4814ee723fdf6f3e9b5f46a63ce7db8facd2a0ea3b752ce84289d48ff9e47a04f161eb3eb15f66fb69e79cb91f1258e91dae7fe827ab34185f46a07c7be6dadca2cf965638ed0b8ad20ae5c89152994b82bf5f5094581af4a1a91fba502221f54e95deb1d23b4c91707d6130533a74d4a564b0d6d9e08eadf613eaaf42fa67af00098b8564b5ea8e148b115a518cacf7b09536451263dc0095ce1c731c01ab5bb9e38039b010fb1ca7c1ee066c49075f1ec3300c73c66e0ddc1b04efcdb01a300cc3bcabf298afa678ec0b81b01c741ceef92543101f3a4b0ca78e4c3a679122224aa46cb8f7da5be4defbe4af77477f5f455ef0f70b6d6a86d4912bbd4ef5928186cf9e5f32b83eecdc08160d2c165796d181acdefaada1efb3e4b95648fcf87d20587dfd80e63665903265e47ea59fcdcffccfe6a7975e44a0f8f0c713a08075fa4544097d7e1131410f3a4e3a03899fcf2f22367cfbc693f20e7e1191e1570d8a5971c1e5db6fba0363347db8f5a0cd50d16df439e90c2a32674e0fe143a24a3d9c5fe8c26bf1f53372b64643ec2e1025e1a5453f174f812484d722731408e1db0a2a7268dc3c321e5e2e63ae93e8338ff3eb11bda6699acdf553b8bd0c6b56d7eaf4aa694471c3304cd3e46bfe329a5f209b9f694ff6c79eec750dc3b2afe73ae698162c3f1da38e6d7ebdf858967d40d8c6a1307dfb306cfbc2a1dfbc7ae1945d84d900b13544c68b301ba07a6cf1909b1734f453ba8cc72ded7a3fd807c479a8b99cf50b39d73e1bcdad5377eeb3d1be9febd5af572f730b74affdb9f6fa988e7d6175cd351bccd906fb7aa83f1855b4de8032d7aa6fbe79f5f8b7e67a34d73ccd79c8c8a331b91501c61129050d64083fadac5156761e5dd99bba741bebfc525abfd50b360973ae34a0e8aa4b8fb68677d62a420ed75446dcf0e6d9466be3cab7eac3af837562ad4a7095af000ef3cde76810e7994550c58f7a0e967711c808cf3e5792abc81268a1ab56f45e672fbaa65a55e7fa711009daec0944c78d140b5b6b259dec92554e7446a89ce8a2472e342dbc1c399cf44645e9a4743aeba8a2d05a69ad5475441727956e29a56429a5e4962e4fa0dd59a382d285ac766128b6a80f45991e9d1915fd3e8fc6b90165e4e156c4811155de9f5f451891f23222865714d7eb08307ce3b7e1187520523bc89779bacee1197f4ee96d599abc8ed0f23a02899711625e4660791d71c4bbdb27addd7d738830024e5fbe5fcf7bef8d7c335d30c3bdf7429142e7aa534121a3c91226a922401c9068ea420547f8c03483300a03a5862428265372707224060a6070e2c904c2280aa32c92a07490468c88306241927be2611619b98c6e48b2e405e50a14268a9833aa9ccc39a7e482c5ea5625583204181b8e9e48e2031430349ab2f81acfaf27494ea60f54523f60e202197ce9820552e60f7cdd71c01c20e6e13898a3c4510d465cc03446d1fcaab0184378a1a28a2523a61ba60f31e0a6f2b112913774f9f2848821b43c19e3af6a09add43a55319973de996436b9c20696882a2f22a05025512da1f17aa23d89e167be7cd8f913960e2cd60e93c98fa0090c5f927eb0010c0b54bfe4196906527a0073c58b932a5aec4c2307550eb3e6098cc609b8c3300c0b424910506e1784917baf4c0c6590818a810b20c838c5000b23cba2c510b398a2061f3704a30208268098c1bdf75e1b6c70d9228b286890a4071b7a00e20803c288060577062a1b8a907ea84275a4338267d084e4c40d5e70a484134a8abe283203c3300ca3474ea002c51048621c3143063c146529d2412d821529155da19281c6f34b88256384b0c1bb4eb5bab9f6de21d1de7b5f42c0f0f75e55914e6583cac6f32b081efcf6fc0a228b0f3b6fb2521959ad58aa1958ac1d1e051ad000059227a0808196163bab706019428327905051658c0e2c161122447866eb56ff8ad42a850a8620562b29552e1c9c186bb052c5b05ab122a61ad275cfaf1f9878c7bed70f53884cd50b734ccdf3eb07275f9f5f3f28b12ec42babfe84d888db988fdddd3fbe732d723d30acbbdbbd970f605e3e209982c5911793a5d79229a92f2dc42348346e8dfd5afb854058777a767a964aa7b355b00496d4184d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4da931524daf265a5261bc9640498191222305460a4c2a0c97a452f44dee52bc5d7c8e8dd65d626e459ff706cc333ba7bd372d6e96067b498c2e8c4c4bdf41e6b773aa874ec615c5ab07a497121568a7d412a925524ba4bca4bc748acb93170f499e5f3b4079eda043aa4a8a4baa072f265b669720b524b5842887266ec0050a5e567c21c4bca185baaeb3b606897f9dcb8779e67a0455cc63a4214ccf9c35a1b33ea79c73decc7bbb6ed632a4941868d087ff5e5ae566b55a3186e2219dfabdb4a9ad3de96ca50ef503c3e2cf19b4d2aa4395d64ad408dd5dad68a573529e2c5740bbbb99b15bb1696bb593ca6fd2d9524ed952baaeb34e512aac6a6aedac656614c6485aa99c93ceba444a796fbdaa132a85063becf6cecc386cbb71521a3ba5225a69cf3c6231ccf6c0543228131aece6bc97bb5c6d3da3844631a0c12e9c7f6fb575525ae984c16446add01d979873ce792f4a030dfa703ba5d5da7ae3663dfa9c35ced9f40b2786d16aeba4b4cea4465520c3b42ccbb0ad41332616294575a041cddbdbe7adb5c6f73ae954723eaa67dfbc5da582b69414a5c2a4d3b5cbf598b5b677d6da681dc3acb591cae8734e9e74f67063b17e91527a86021bec1a9c7332563d9e714e1aa5bc9366c90109cea1c98a09e93463440169b06b90483af550a8b919b7f95d798f9e5f49c2fcf32bc92b49d1f34b0723bf7a7e25617aadb79694ce3985e49413c592fb9b52b49ef5669b4cc71c917841a2458cb1250d923927ad3588b0d65e8c86892ccb326dcbaae0384ee654b3e8baae43cdcc68914aa5522a1a2f1334d1d0d0d0d458cd186a361b366cd8a8b141c97063bbe17adcdcdc703ef1061714c77cf4d899e397095c1f1f7b7ee1a004c716bd170e40d000226987213a28799d9410816118d6052113a58b112b66e8f2820d6800a364c8bdd7060d4444dc108549982e6614399a33f040050f5ee4b09920070f527840ca21093cc0f30bc9099ee6f9854409142da41f6d7afa9f7a3dfd92461b1fcfa5d07de4e8779144e0a1230a114410a177248fb4020a2caa7045d1428a56fb8a79889228e1c00a0e2b50a205575aedce3c444c9cf8e00c2c456028c249ab1d649e08d04003248ee0e0062d28a3a565f28efaecd45e0c673a83d235ef8641e999b76215830c4ac9dcefe337ab57f5d27757caa0310e0f06a0ba549c892d29879bd6cdf5e0b27f017b00ebf4365fab1b23c0008cf3dc391c004e00e6ec21f08e8bea542a2fa1049b99148f6d2b810125a46cac8d4d1b913b33dfe6a184fa4f3c5cc2c965be70e8675c47efe8a8e1218bc643d06b3c9cbce3864ba7bce3c6a5d798001b975f08648497cef234e9e948d2491f11740c619df61b2f12619d761b2f16890568aff16cfc587d2158e3a3f9c255d33a039516d5962512581084120aca48c28915b4dae316e651804b8c2a9088b2640a16ad761e0ce89d948c534fa87f4b99a0e36f54e745979292d20f15bce8a4a7c43aed29283a576c2496528c91ca0c5c48b1620bd7122f584c1254aeb88e2881d214feb203122bb8018a962e3eb01524a8708939820692db9c7a6d846a1e338334c8e63ee66f2e157e44252c514b548a51461ebd438b8441460f5e988871a28928071ca078a10b9752d1510a3734717112440e8428630137602106941e6e208613ada206a3d31a9d8c332ab9240fb78c7c885561fb52caccc3bceb49d6913a92728ef41b1e68bc94aefa710a0d462b1189c6972e9deba8b42d1685350b152a120000001000d314000020140a8744029150281826daaefb14000d9094406a4e974743490cc3300a62083286114000310a1040081933345403445a04f33c0c1ee287358498db2ef5793266d3f48fa5cee9e013a9bac27d0d0b27c3107243f447589745d5020edbcb65b57673fa4323511c0c1e8bbd32ebfa2a2936a9f5f23998f9be5dc9ca9df374cf84d1b15702c5aa42b39955f83fe5fc443eac36533b3937676d52dd1f234118c032182a387c96eb0427ada3f169671f24cf85f3718d7f2f84da7740f5c3f9b196202a8fa47178a41308468360cbf00a613fd89c6e14de10d6959b8a80af0680116b508f00f96047b184f075540a9cf9dc7fe6210577ae874d160a75b7275b01ba365568cbcca1876eacfe7cd1ec4ddd422351521f4af412254d1678a12432448b45d9eed4dcca491932e9979906ca3c3c8b3118e60e0d70fccffa8355f61b13b09f9d12d1d424f4d15ffb0cf6add121df60f23719cafea3e22765f623c9f627f7540179cef6022e913b9cca2280110342cb48ae7728abb97b5d9291c8a7139eac6174570a6e5577151e83f7259d9c74acd3f2662d0b9572b4754906dd0ecf87c22e50708d0de20f932fe63b2bfb84eb8c3aee4390ec9e40696aaee828b075250341bd65f47dee5d51967f4f6b48584a362bcc47ea6b5c9657523f5012984bccf0ad608c910f70cdb7722ec7bae0e10b20a3a609c9a3a1458c37c6941656b383496567517927a35a5c8f02291523fc28f87889c40ff67ce7f7e2a557d5b59877ed608781e761ade641da164b39fb8944874d7b90b911625367504a860e4fa21d526ec88dd745b815644852e620bc50aa94e0532e3f1f2cf9657e1f1807271f96ae701c84d8360e277e489edaedfe1197572f6fd1ca3023b89e953b5ee7de79590d56eebb0e9acae82df5e1a47acdbd0095d49d2be1900266280eb50b81f3071ee4819303fa67557dfbeb2b07d83c296e5c519b54bbb6f0b6bde88998ac284f68f5511fdd0f9dc01eca71844958741f72948967a42f0ed97e2d905dbe4596311427dca822744f6f67ee4430175330d6851c8d3a772c297a0507ee58c6963bb5a4d31b745b032a603253a2d7f6a8943326ed47eb78b7badca915109f8c96612ee8f9ccbfdc364a6e7cc4317dcbeff9f9607e427ab067250d391689fcde257094ed789a0848212113b8134811e242ad4d591eaec96d3371f909cad517d568e2425f0ad1a00794697fa0fb9adcab668feaedc2014406f0f9ea9aff94e750268792ca1ac5ea3332f2e5e7d4b32f48b4a16aa2844359f41b31b788eac63ef8c99e3700cd91215251f415d058f319f1b0e362499f7c9666b584cc1972a61ddc070f2c3bbfc7f56f27bf80b9c2bb8b3ae17a229097f9d2f3b42677415913967eaabf941e6e1e69146ef3f8e6b48d42e1db60c56ce98a8e51738b6aa0214dcda2852b1e1aaf84e6e7fd695df16e1b67f63df89367d6971dcd36e6075eb0f0401a3a267a6da4c24dfe06f99ffe84ef0dba5323b9e64e128e4f64b7953f82c3d40f0e7f09ce32f9e345299ee45920a4b81c396321830bba951d9cef80e6c1dcdac2c47697151827de0a8227608b4141fed5f1c230a165fc2c7663fe0c872e02b1829dbb19fec7018be77a1271abc058b2fb89296da1dca0601fbf63a80c0bf3b6ba526dd72a3134e0d9a7197ea83163275e75ae4bc6ac5f4bedb8671fe15268d6a1df12fb1786246c3fec86ae32e1f9ec46606379872de85fc60f1ffe22b9978b084df804626994d97af79d594184b52ede078b61f77fa81f122e797f8d750721b9915f064955eecc6d588a7abd7442df869281d4581dc1013c2f07f0fdb375001903b99e9fa66cb152f952f17a2f0f4c6758ffb3436610749e17c131a0084a73d9904ceb157a975951c49adaa4c322426d2fdc7d8bf043766b4f21a30a68d8a82181eca87f97bd0c8429e7eae0e8c496388c85ab67ac72a825533f4f38319ad2eec8c7754d1338a209a3d2e0606120068da55e635b96004dd889536ba296ed19ccf73474f7cf8313b6a5dbf8313805fd95ff82d830abede56ea079b44ab7bce7ca5458d8077a65102a999712924de101a41668c95809c1c8c63421d8aed98533e305619f413fdafd71abafcfa840b19c417a67d61db44944c266e220e8e0c8c4301d8349ae0175b6eeca9961e74882bf060f55d79a7a55e904a3381bc4906d1a232315f5e27e1825b77d596f039d8430c21a9713cb0f7c2256f612304182b1e45796580a40feb9a00317f69924dd79ffe852a06bfd77d3ff3368c5a012645c1db990ba0ffb222950e506d50f6c9539116ee5a379cd1420a42ed0fd34886dafcbf0dec0750bb003ef4b568fe4b57a1c40316a8e1366ac36af990f8c55f38555ac741b5c5664f594ca22c2519b7afaf6f21e2eaf28f8e513e656618e8ba4fbc3508ceaa84348e5b993f1b10fc2fa65d53f255cc999b5228c682cc25fa243023d8cdeeaf5d068512f9a9b61882245fd45a42fd7f001dc188c880fbfe40b7417001ef12d9f78f2e7824aee5940f199bbfc5cd6f3d4e6017954ae5f4e1d7b40e71ed484c4652b0d3f289b504879d46ca3808b7fe02998e0b50cc2fd06c33f86261ea440b809ce81012d49e2d0d6ecd86cb142d0c4d49659847d8e0db7c2238f949031bb78a316880471c94679dfb260b3a36400ce0d36dec029be9855118bd1de8c2f221ebf979b201242e20b7ff38f4a5af132849863008bbb78473c367b8608eaa0adb0c96d750331219faacb228b69f46dbe17b410c481fe17622dce82761acd2ef213af428036dce4db4411da64b416002695527107760708918df6e0443b543ed05470f8a97dd5d2c79abf5cb9a41458ae386359f210185e4d1af50b10bf286910b554665d2a66783abd025ce6dd0afeb3f74110416685f5f55b5779434d12e89154d17562b7588f8d42745430b0cb62b0cb3c47428f43e52342bb81aa49de95f49fe495e19093954238233d265d66d126107ecdbe47e00621e4ed42ffd7f783fa411b228aa1ac177d1ecc046f4a73275fc5d76240e8c0f608bcd113ed39afd204ddd72b23790c0caec9417a4907d3b1c141bf0e5ef5a87182115408910324bbac99eae7ea4f974c3d553acd43b4f8188c24d75a1af1546fd6a9b2fccaa39171046ee309a2e2aa8c0125328af4ce47afa4c9271dc0912b30b36c8542464e54b691b3cfdac81b40c6d3f4512223d38d00ce50a11d53718c44463c3252e7fdfc58289151e72f9d1b75feecc751195dc1d7f70c293242f39f283d22dc6ec459d939f76d328b3f689fe10e00278b8cb48ec9d79091be9fc1d48945a669e8c2659acb0a276503402f11cb6eb4b1992b32c2fd0538e68539fcac308cdbabc1a4bfd862158dde0518dbf2e32881d163795ef18b9eeef32aea3f07deded25a707913af8a19d1b7183d9672d8c02aab4b9962a7c34cc1f4af3445ab8a541a1942a0bdd36f8e8cb4ed6a26585085457a373b9c0e0858a48d9d93c324ce7d85ce87caf295bb6de3b47b14534f4e133a99ea3b69449a73d4e1622edccb24bc4c10aed4bca2bcc5e76275456a6f51f7d31b3a705b29595ec027fe0e57d935fec3af748deff1283d0deef895b9467bb0e1fe95ffc63bba4aa7e1399cf2dff80eaf926bfc475ed91ad68361930efa0dbd57b9fc8468efdcddef5ee9d16959b12158b959482fcddeb6c62533c96a776ba527f8901c07b76fd7a076f3c5e9622f1d4773926f5a0655665c9c4b28a5316ad78813af5b6f653341bad923d799d97aafe1cac180e132d9983fdb507191b0be66e6c72ad9e5d038d0278f8336ea1aa2deebea1affe067e235fccc999f1d3ad38e755e641d710a234d5c9c9dd477cb774e2f12b5b046ab78dc6f4bdd3686c39e4ca54f00bb2c133471d349ef7f65a3a7d084eef38fa79b57826803545b577ab1d5cd4313876e859b300deec7a48968c638da5494631c6f3edab80e9811657c874c8c32b6c366d1ac318fc366a3e440bbcb0c329406e9ebdc85f8611f66cca339862366511ecf41b3a8c7edc06414e371643eba311d01266ff4b11df83a3d44180877d9a0296c11f13869f13b07033f18fc647ed4e31c35138d318e9b8be23887cd4719a70326a28cdfb136fba28de110d3e9234e40784b263ed0c3b774b8a50be1484ce503537adfdbd64c705789447d5f3690158475a4f7ee87e2d802750ab8283581551b00ab86cc90abc20d1da340ca9957de6922fd9424efc9c6d5111b05ed59b69d678687b5e4de6d2d05dcd80bbfc1d5c48daa4affab797e5ab40df4804b1ca463ae9dfc63313c241c7dbc8d854a4eca23e01f47d127e7f7b65296a5416fda9885ce48d114f27ad026efb91f2c966c01f28737386b2f46b6cd9b5aea7454df5e5667119751ddea298583388f0dacad8b5acb5617864767bd9a7b2839dabdedf1fcbf571c5d93cca58823df18503499f90abea8a41d1be00cdd5060aaec07e5aff3b29b8753a1d5161b363b0878fb23a96b1f5ab3e12200cd09258de88faafefa07a1dc8da5274bd7de4110f7c30a51d2fb2c3809d791f9e2102ed408fb15689fb4997ff7088ae7ebc84215447c809b06f4ffb6c2f2cfc8c2f5552233e41bff26961d79b5c198b8fcd8497df459caaba1718ba04d8ff91aafa0d2aa989250b5e06946f6a31d7928241e5ecc089371372bdf7b02e7f32a58fa5486f0200000ad839c6ff834e5142b18cc22838d314c43b87b6de9a1e5e40ba1095793251e511e481905420ceae168631e63ec373bcdb77eb32101c0b00a83bafe57b28847ae0fb0db1ecd66b697b00d1ca9352d40dce5be33679f86ba977219b2eda62119463e564acd16cf14624fe3f2bd26974d84a5187d1d4fc8d06f08f8e27f48beae5388b2a7020e7b6556fef95e051b5933b149a0d546b3201c7681323be81316578f740261bd117978f35945f2e6f25aa8281531027ec8055b08f228dc6c5b38011393f3985e8cf0bd07ed155f22861301e8a7cd67e92cced9a8b08027b5edb3a63b456b1ccf116bbb2ab9206a96f62715c99ef28c867972f0e2cd1a01ea87dac4f69b95a4e6a2b57c027b0c9416fc6d7e2a4e584688aacee56781572438cbb441345628dc6e99b860fcb559f76409ca6bbc82968e67684db412b4341950b2a8e6f6b59501be182e72508635d73b2e28272e5a1f152b798383e11e4934de179933304c2f2d3b2659d001db58795039545785560496bbd01935842435ae57d9b971699d765a0484aec18a05c0f27ba9893a0c14c1d7f310cee030a118d0419d6ba9635739532d071febe662c2b50acb63b832c73a6e1506f12175fdbda28a96bd24e048732a9425b2123213382dfb501a9467e90689b6a2f70c82a9b85af1665df16e093c42ff51780c7ff757b017e7be0cf9973a806058bd09906a7ffba130816755a42f0fdd48150de93b36ca4041c04e54d65894183b52a9534aa4848e5e0614632f713c5f883a7ccb79657fd999297b1d42a38d179c123274dfcc9d13bbcc26db9831ededeaeb0c97c1bc09547945cb4146e5f9d60d6b983dfc8a7a9ad9c6debcdaead240f212f1984b53aaba6a7c6c1624b0d61f416ee44c0bc1e5db488ef60b4f53b900bcda9c82ce66d14891b676e43539f3a95ad70442fb1cff014d3c053c1667bb4008893c1043ffea4b03c3a4ebdcb1ae7f75b397b8bf867aac36c7cae813290a1e173f8a3bf7ffe3fc69f32bd1f1e0efc25a7bad9601a2c5ce53a457c2f79d3534c04d46cf4cd16bbc2b95d7368f5a7c11b6fbcf597a7f6e95055fd015d2a2a1c68e25e4a060795d9d2b3b993b28ee56b8be2188d78a2ac9dd8d54f4dc247a206fcddc6910bedbbd8665ea8d069516b0dfaa32e7ccaa0a0c17add8fedb38c31e5574715a2f3e5cd2832d355f7dae50d0a6fe9814f78248880b009502a99616a1c8c475a65d2b0f6ad1a0d3684fe5e0c5fb6441a5dda5c9b6346b44ed25b03de58c507f3956fb02ac241155413b78d0d3c0f54137643909510739be38a962f926084b0b01522aa35781a83e84f70f89677f2a26653a05c00575b437a875cf311d5514b00831e52ca8b7a7e598505f631f34c333338edecfebe6f041b98f69675900d45619e0269b59af076d2a3485ba4d461817d6f5c716868e49cc51e661222913bbcd2713f7763b5bcb35d7713bdc2646db90ab285cb49d58e5aeed345a6d8d59740439f44e12000be562fb0c51ea16103864b0a179417b7f7949ec7463f5640d5f4d5a46f81ae314a49b6bca2c31a354c42a3e1ec1eb8f1cc149064196c97426826f3047122386c8ebaaf8b2abbb9b236778e818dcb6d79cf5b3bd158e1e80ac7369c2acde02121e66d889bb7be48cd678ae8a74ecb95dcde35c1d79b8e9ccb35432b2ad91f07045573467ad7f6bd0936b64fca298f3e91b703e5074a8a992de7836cc6c9235a40107482430ad9c30719c7183867657827090ef041e2290862dabdd63d44248c50906dd67e1bd2bb2d5e25002ba742e268f4a900e0314357c40cb8913b571381fc5b3df696328c142a131ab8fa45a94a2e06a93bfb62a1c31714dee7f2c30031f1c889ad167f9aa77eacfb7303b641c1e57a1b65c02082c4a41ebbb02fb1b240d33cf4ecf9330ccb8609023314d789ac024100b06a85f524e074c7af2f84c1f6644a613ac59192b111fdd3ab27e6d468222ebb88ead33754e9dd5e975acebc83501d4790510c5ef5ecbc5c01dd8b081f87cd3730146bf76f8f94e478e2adc22ef43e823213a6cd307b97ca8f27336ec688c09898f59855d9d53167d7118ea7c356d6029f395455f767ed343c61f94a6751815244a56e945ca08a5d606478d8a00b81aa6d8c01226057b19ecd7e0381b2bb80b57855f16fe79bb445f0a5ec050662b53e1522b30cc8a75253683a8b40251212240641f46b50d8d2a2e7000be64e3df4a5cece9df2c6f5ed1b40f9741e9bf0763af845c6ea142b26f64d8ea85e596c55eab7d66cab97be7dc3cbb9044ecef97191a11df0f2ca08995148745ca9c4385b8e2dbca9bde60119695daccdc1246f7ffd5aaf27a24c2be76b791b52584e1934470149f30010f09fe0e00f453d288ef327b26c0a7e5f1c857efb4d94d776ebad3987702f822e07398285ffb5b781eef65b84f86675a0e42849e41dc86999d9925d2c5cda8d1eda336981159b1b8b8a179da2ece6a9f1290f50b49cb1173c955f33d11e91d0e3e28943b1f0f42cbd0a592abe87773e72133df574f8619a1c89cb34c779061c2b6d396951063a58faeaf4a0ddd84a8ef1e978953dddae162470416cd81456431b6131d1f41d866438bb57143570ce9d9d83f1a1d729fb8e56549f97a99eadfce35ee8c17d2d3419383a9119c8326a8e204dc65d642db2842ffd02244b8b651cf1ef7c042fe1416213ede84a7d3fd58a34257993e65fb05058238c16edd69530a56721f77f3385c749645f91037c1d51ea4cbd0c27da745e815f760621c79649dcdc05437ab246bc12ff154389144bd8707ade87311ed09bbbc98955fcfad7cd0c43e20062024b9416e6f0acb64c7f670616056da7181d022198e4841bd8a07c8f1b13fe5e9b3089902f3873d5e10b410d4efe537cc701fbca11cf5a42d552862bbb01d4cb4ff8a473efc4f37f20348616f062f427ea5e44ca8f813652e178efe9c73014bdebb7a8b22c2a1af23cf21a252d170673f7cb2a2037c509eae537495cec997b8c7edd2d16956a2210fa6c7e9eacfd3ac9f70ffc8c282c0d2c645705bcea406be3072d4e8a7752f1d74e141ee3ab1d41333ef42d2f7c1625d1dd6041dee00d1b7aea1224820e3b32325f33028ccac4b2ee4e91a8dcd78c8763ef2de4d7731917c87272cd6e2868e0bc4c90d8fc3dd01d8143f2caa5438fa8242eff2054a7cb51648065ead0bb497add9b95885c15c4d1ecdd954957c85e861cba57e7dfdd914f1f03c507c39344f0215618a639dc9b663e7e638c5366fceef2bddf74278eeb92ba3c30eecc8afa3d8ee09cb4bc4c4968fafb5654e342be5b0e62f69bab429513efe5413fe7681cb32827767490d6e1bb4946aca02eda3b0efbbc2aa62020b877e322065295ee049574d59b71f01b0e4d8e4ff1c58b8ef4ecaf3a137d5c2aeaac69079bff7181be9d4a3b10aa9e9e5c245092e995296b0770f08b8f08a52f949ed155e8f3b876f5e8457e1de9614c2a066df1fa1ef96f2dd49730394081a97d128ab493469c6c6cd68f95df87944341cd1e17046509f2eb90d3761085314a873d64498b8dc3c3eba1fa51b6ad62b1c6315ce93f0d2f9c1d8f6160bbc6801066ed765a7045f4a33ae9a04ae223c9778396d85d39aa8fc8f3b6c51a84a1173a8c5abeb7a376862b07b54083d38c12097276a0ba738ab799b4076e553b0490cf160b291abe0af05ce83150c00a49c66662956110b6a575e14e51ee5952ecacbca28ef5acf2445e1ae49191e99b17c9639b26abeb59be0b9cc1d79fe50bd657dfa19807bd6ffa6e98e199ff7a6e23feda38ba925388da01aedd6000de4b65ea5db78ad7e3b27fa438baedbd98c7ccc1863aa30369a4c9f14b736d474e9f80a6c45d3e88b85abb0eaa0bceb94760f6fa04a6b064644cf855e6577862529673829b93032b55c5c65e25977f71f11d3f87655398266a44134e89f486061d4e6b408e15a97bab1c77209d0323f04d9c9d711ba1d28008d7804f88ef081cc5c5841292bc88ddf8a6d897de82a55f938b898e4a515b42f7970f13ff260b8e539a54ecfa624ea4a8c2ec1534ec00cfbd09c723c60ab8de78e3f2d0e39317957190f8de478e0b6d2a739bee858f6f55d65300ce598db0f2b541114ff57c6bb4a61d4007d7bac70f678900b2ef119535c1592b810df74551fe4aa2e22b302ca22d3b5c7c64d17fb97a317faa0ab0e3587582cc04aa945e7a3a906a9243ab844fe42ffb889d037c34e5f497a385d6e4461b9afaae8bf03625d946b4e8aa4f1c1736b5cd6de193aa37a06ae7e4f5c934186d6bcd21895c6bd114294a04c6bf2d0b64b52f237c668171c86b859cdc1207f557231b2e8f24c3710b2e2ca28253c1e8643532fe22b5a64ac7671d4384b199835371df124603c321bb9a00ad91e2655a627c5ba5fd48a7f87b7b1eee12865829ee8d0cfcb94932cb5cbc4d820242f05034aa281295ae89aa6174c96c4869bc8391001f4e9028a212ca2fd440d2574283f81a06cda854a3fd6a45863fabb0e70a4e8f63828c38ad9b8391e11c1ad01ea23819041664b882e1f51e8dcf8a4afeaf531dae637ab75356e4ceaa6c705292331f106ebd5b853c966640283025b39ce808ae5734d9d29b03e95195b82d591f7d515650ebb0e1f82b9a37bd681f5caf8bc50627ae17858bea5673caea7b7ff0213cb2203bef568916c4145fca543c8bbb4bff756573a99c92e6eed047862fcca742863e201aefd0b71e9d5ebdd50e590cacc536246d78c0dd10aa343682cd0bf630f3a1f52b861fe5243fde480513a625ff32478c1f34864c019f44134aec444af7aa6dabcf0a3a41b008f34c2ca79c383309258b8603892617381581a39dc012f028f83b0fd003bdec556b302924ee6ce0e0c4912a56da6d3151d270331e81a19de5fd1fd241383afa15c8b6ccfd3a979bc21021ad84d44aaa5e43d345e8bd8c51fd861a8b8cfb955cd8019eff9ecd5cbde8d28f2432054903e8a2dc7d3a20062e60bd31c6ce93da7dac27c1d4e8235d6dd2a650937b43d312b0a064b87d4e5809f4a6a235575890e0b8530908a0fbd9616a3ce558a20c3fa9bdc3ac38784b95a8377b7fcc0b1501d5715f08834af2f4177aef75a8a7a6e9d4e999475f9ed3e18fc345f4b43d0d923da3359dee309687d59eab6faafa54ccf82dc6e575789cd6e035baadb1b42f55fdf60ec426d574a6b9691310f096ce92c87d966323807033c1ccbd677a9d491009243c988281a73ba548c9609d22c65424c45435bff0d989f540841916cda246460d202380a1919436e0da079604bf3a67c82e982ae8668387d94ade5d82c440f864644ee3f06b6946999f1f830a85f4b0d8d456e8e8519483dca40d458daf467afa592b9854ecaa52c0db85ceb342894d29827665033a127c96e1070b6d56b69a6e222f2fcc36bdcfe5f7a2d0d026e21fca342efa2596b412a4818ee16bd0a67c250bbcdc485a9d7d249352b2fdb8c4307c090bda4a12bfd58d10793ae9089907a2db5bafe542c5a238b5e4b8b57284b557d3b46e61e6122c3d8f9d72ce56a50522cfb72eb31298e8be94cdd9f1c6811b102582438f2fda8adc7627a887a2d95b63046462401a9b3472b0b33839eda0a8e20596741a71ebe0e1ac1fac2d5ad60cc709d39ae031341043210860932362768b05bb263280cc7b5b4bc350f5d690f8ac2b2bad43431c9f4985f83ebaf95aea38e042628a9e23bc56b69919b90b36a192dcc5cc4b72cf26f44591a734507afb999696c1611801988be336e15ca8c277bc89ced923ef844e874c34491e1156c62774bcab6c6cf1be9e2098cfe13381776fa438647c44aa70452d48b8289d7d2d29f0c210834eb5ab92fadd2decb575ab9416e6cc825a58b326a24d987d1336e7a63ab561f7d391af95b458348f078d23c6f75994f02afa592bcc21639bbd6d7502caabb62e81181df05e8c76b8c406ea9e56aed7758428b9071d52499569c702970c4b6bfdc1ade2d2d351848f93a06b0171ef263f844249f26df0129d24623589473ec006bfb02122e1d20b7d848d31cfb89bf8d4d7f507fb7b4990f90847d65e9146fc273e0b6cd9781d02d358aa9c0a1a81dce9216f25a7ba582b390079332d1a619c510734b998d3b915fe6625e83b5b6e35ba61d07ad6d496de92b75ffb8d96f10ab7766e596cefd76fbe0b7a52f785dfc39ae097c2cdc36863752e596facc62c38c3b7652bbd9109afbec6294cd17bad27e30df7dd9087d08bd2809766a9781c985431144c3beaae0ecfd899558d04964284eebed33696705aa8713545453ca70875937f29c986dfa2be368165060ddfc17f6462ddda3bcf877f1b72f5a899642f7fbe1cf5ebb61be39852e2d5b0763e68193ee211db7b0923c695736c1bd76c765062d5b7471dfe1cfba40a3244a223a98e721812c5d63c6c4f0b51b3dec2ce286f972517267338c1f008916936fb9a114beafc4a764ce4187f19b741573feabab72defcf8bd89e0546fe8f244be76b9f14bd67ab6e80277edae8e471d49f2b51b5a91703efca7f59c4d1ad71661a98e0f68e9e91640f5b5eb0d4f70fc2763e9c14ff13bed361059f9f0b9555d859066488a53a6bedaf832abbd80844ec85ac546dcab7edb7c56ad7cccba354f43c581be29edab0d5985a1bc578bc0237d821845945c63d39ce3dc69a52e280b13b213bc5651607a7cb12f7a32b53c56a5bd8eb00729893b2355982193e611345e6c8fc79dd804e4501fd62629099ed8416b5d4145aea1a6cae02c4c7bf10dbb1a26c7fe3535b94dd3eaef880e85710d0ad18977298844710ad23a1349dc3a2d3dc8713bc065f2a7e6e8652e8e172d7bc05342f6ec5e7cd90e459325f38878db787b5b60097be028983bae5b668db448b5071198cb42617b1e2118160eaeedea2378bbe6c1664a672b4ffdfedfd992a5bdc39be69242157af1598fbe35ebc74bdef2cf3d749c636240cb641500480af28496052ff4b1172f86897ef25f580c86a3fa9a581fb5219ae640464c30e7e32a65eb0b266c723c2289c3afddca4630119761b941e5f4a7ab28e26b21a95843e010c251556bb7fff0f0258de703b56d12d3356b1ef4993fa709ab86edec48b9bcc5d4d057054c2327e6bc03514929e582116002356069ac3ec2baa620b38d60ab49f6dccfb04a94e8174d481cdaff0d5b900c199462d9dba5468567f23907f7b7d90980e659616c3e7110aa2e13ccb9224080bac0cda9ec6dd1a630cff397451e5cf17748f2ea16d8e93e4cf839bf015b5d504f3b57e3785e0fb1bbf026951511a0c6d373d14dc022c36f3fdb96c8bce069210b12ef3572392e6f305872830f4fce3c06f1d8e2de288f12ac85477616158c4e7d8cc875f7d99674de1ae1c6883e28207431b9577824cad219d27866e8ee06aada1114bd4ad599ec811730a494370c2f18187e4a1fb0a684a59aa2ae7e871333a6ff64f5db8142116dad6e9d7b0be7e761b6054d6938424bd110befee6743909b9d301a14e4982b2d299ac459679a77569f5c64c0f5f23e935398907b966c34589248cc1c4b68db744ca0c683da1b585fc8648507abc7e07e790a70f0f54d986f0c89dbdbd74d4dbeb9260ef7b9e649f26d51fa8343f0af2c2d79a57e2f18327a7ea02438ec04ddf3de23ec7b76393097aeeded9bde3c468cb1a74ba848e97514248481eb2d3a89136847abdb47246787202ce89bb36360167353b42bda449debd3e2a02d10d61a7f55f56898e2641567cf5581efe94fee0bbaff7332ea39a81cdcd4210159fc55d57f8daaae082bb3ca6a7c2bb7c2fc561a0bc08905371c10fc0a430ad3f3f2497a29ef9f4d7f1e835ad9ff31650019241f29b9cb7fe905654833828a12863554c6c2cefe931dd02ab84984572a08e010af963f6c2dd5c4d49603cda4036b3fb1d40d6291183a5991e61285b93ffc18c5cc18e83abeb7c3d12cb103ee50c4b22b23ae0c833ffb2a3d3ce0764163db187164575d4c90a675ad1d31b2e6e2643e87179bedd927a74171c32be03fb437338bd801048e9da72f5af318b52279e94928413f97ddaced1089825cc552de32e34409ae5fba6020d1e88769596febdb1aec2a686e7553ac1aa42d22e6f3c6c7e7618424fd0f4353ab9191d878a274c2763d6d121870ca81bb64cd877ce656fa778b6a0044dce5c9a507a19d217ed706d99e25f51ca25260c659942f01c0d2866adfa9e99b275a70229204292c62dd532b483b644d0dd8c5f1804246cdcbe99980870f97afaa32815b7b0a4fbb0948a048d59f35fdf2a3db0e97cf1ba3c5ad23ea4c8418521bb9da5c3a612c4544e6cd2c47373df9e5b10dcc44987fdc8709c25e789132af86f8ff93935569088e364e582c7e175f18091591c2ef1557984358e9ed6560523b3c424c42c313b2968116bdc9f82c181dd0eeaa4c0199bc74b4bbabfa9dcdf01b8340b9d023926e64dd68569611732a5155561cd73223debbbae11855846c48855fde0d0863224c71c9f4e18694371d485523233a717b3957ac2d52bd11b2823f026b023c7893628cb716b0fc4f20d11adf14c8c1aab80c9c066731ffb8e22a61da26d105e4bc1a73add08d7233e7812d94632946939a321510b1cd19ba45b570df10f41dfc0f0904211fed88f1bb08514a2c4a1b57821f78307e08262753c74bccf67e934c076e593fd001600931aef5127cb60beb42bcbef9e36035ac2553691e54e44c7668427c996a4d68a2296440825dd052ae9214579c6906c774b86bad5d3eda908ac4443080f013ed0efebe7d0f20f54681b6e52153cc7692b28db82fb38d4e8b168b90aa10274668274a3e4c9cf59a91f20f891111ada7c318bbfa86feeb7ffaa5db2b0dbfd328c3d453f92a63715ce6a03dc0a2c6e4fa366e1428298a75b0046b35117d6a73d59b95b1e9a6463eabe9150388ad4f16511ee80846461ae56d58a1dd9ba333cd7e5204c7637bc02eb81d86e5292af50472b13cd10e0bcc3b87ee3cf9f8f2884d9ca98603dde60c278573507462a23a862aa26ac798f6d9e27d84026ad1ac73196fdbe0a66a3a48ea2c23b40b306053da06b438a795b2e22b13d111ea2b0a75e17f9d8994e62d3358f1adf9317da0a9a2830d85aaa52fa737b771b77c95efe3cc827d0c9711e3f3bff9bc584fcffcc5e5a14fe58a8b6a27fbe07911bfe23d8875fceacd768ae3ae8cfcef0c9a6427dc0c1bacc2810dfe2d954b45f4cf070cb38d301e0cfa917edcf96c33e8af1aa9e60261a5f5513fcb51cd73a7290557daeacb93129a83ea1c1c176b49c2dcce70dc28bd6eab1b06ef86b5cdd7d21a9105dbe59aefcbd505fbfb9a64c38ad75cbee79fb302ef4af528168d8a056d1c8e55294bf376af7781f1111f7db507ac3a284e0aaa2639e54e3e2bd9a28f4b680ef4ce101a7bf4d876fd6a3b4ff5f047ce7f2c40b7d7714d75c62de0ecc84f21b1deaf8795cb6963b34738c8007887a4ce1828e920bb6b28b885083261f6cf38901fa3514d4294a8de561fb88b21605a1ae047f046504fa5c9f4956a98e9e4179399dea9170b3b7a6c9ae6faa0eb4f998a7dc4c4386a06213141f5b6252be7f0e401b0563039a79c3d6d42bf6cbd334366771665bcf28e6abc051c873243d283d900eb3da8d243d0d285cc220af3eabc465e415b295542745fdcd42b7113cb4c936e2359061ca2e813815d33a04502792ab953e0962daeb32cc3ee6814498aff7b5af7686ff4f3b1a3bc1386daa1b05408597f22a2c0a59c0da0b20cf1456ba32eb7fd850bb64429b8671c19dfdce0b159b0950474e02685eac871d52d60e33d25a7d2cb369587c1b8d147bec2c2b7d6d0e71b45037be9d392df196ccf839e021b3abcdba538efac37574ac56376da4629b5196d44b840e7557bf764b94546cd523fbc0544af4759a7561d8fa651db72c3bd16c59028ca0a5b51b213c696c97eb692e977438259f5cef678e104a09d48cb0a9512e8fe70d26130aa278ffff1906f240b241d6703ad69506441c964d3d63e490fae1aaf418246b5d6764b17e262c563be67588fa57d9f22903056cc6a865af857d228781238b5732647af0635ed133121f710d8b1e1616f1fea05b5ff0112844c18472c262381e6d3661396797ea3f225451fb43f73f76755044bd0180ec40424795c22551bb25b4728b4fc5b176cc20cf341579e4f3153f4cffee1ea18875d76234fa77ee231b20ca8eb8c36bcca8993c5384c72c9ae54f3f83e9d30e3059d8d0f2da08f454217337caec8fa1c0af17b1b3c47e47bd2986b4880332fd4fae05918cca01e12020cac814a069f98fe2e14da14ddfea6be27a282d2bc60671439a12306fd9945fc5a1c31ae4c66049c883bec70a059a42442349cdb4bb406a32d5ec0fe7cbd1d82d8652a85017cee5b0c844dd572bff36eb9b07b04210660524e1ecd90f3d082c8eed4eea446a43ece7e9d024b602f02b689f5a72874ea86f08be1e4a1c85bd662e606559fd059a67942757672b019e518a9157a564b2e9022c68f165229778159249888aa85492e0c651613ca1f4fd4d4e2ec6f48e61e49d8699a21e3aff671e09259785f1689638abe20360f73eb44b4d18831c3298081dee1fcfd80d7309257125dc9c9871bff5c7959ce2d6375346f772429e61f7a7dd7ed8f6f9bf322a9f5e7ab3f67320fcf775429a75af88eb6fdefc3a0e086964d250f770c6505361cc145828dc8e0fc5fec74b8f0859c4b239aafb87e0cef567b8600d7ae36d3ae2f74821f53dfbae5b077120a0af8f74231ef7ef79818a4264297fe8aa8e4fa1822189f2654cd5909041120c3f0b515f6c59cfb856acbdca8e6421c1446c682258d7dd6c70569d82012d604149ca163afbd0582544f3368f25ce6717d3e98a22ef6a52911b64e4c4e65191393914a2bc77c6c2e88e880cf1cd1ceecf5df5d12cfe872aa65fcd8b45d67f33bcf53aea9ff11ed70a6c47fc892bd1fdf370a25ab1666cad6a18d694cc60dd823cb9b37fcc3aaa01301e8f40617e7ab5905b6d0b346442701d64dc254036a1d675768915d0bdbf9a316e89bc063124ba500148623c7f1dc1e7fa31a024444518f2453ec60d3e3718697336de7eef26bdbcd3d18b1dc0d92bd5c72e5e26a790f2641756b7f3ef7c43c3d3eb50475e436ae586e0f0c17e01c349d2e84bbfbcce17fa253f7a3d9f13f87231e3377760473f72ad62a109a4c05a6965950b1857fc1f1c83ab5682ca5d166baf8cf817fcee050ef138974d803462b2f21406df191d06ef7bc3749947f9d3a01bead17444ec79db2951132f0c5cae574d1bf7562fc0ff91fc9f46552714fa8b8530f9d51d03025e9a9112819c65a12992cbf74f5a116684011bd57ce249e6250f13399fcd415d054f65d2346431a0ae7eaf29f91f70ad98e174f77c370d082635ead62ab7188257e43100a73f3761e3fd42a6db23dde509ea58c1cc45014da470da2d0cfd42642ac4cea32e09582e7476589d3c9b1f05ae45b34226b20247ca36c1b3684e1f960d5598fef29cd1e446bbd29e8693313be27f27c7dc851e607ccfe2a83523e2640fc462e8718c46be61a3a0f8eac4d1cf3cac9f1b7d42b20b9dcd69114c16ea75c59e849afdb5f8ac1454e8984b352077f834538ebdd607bad33243dc43627fd56e4b95fef9b0db5012507c70d4cd05c4b0644a4a2989f36c2786bf2e7138ef1d9f4acfd8cd64a5f7c07e0bbba1e3cd2d432db1a7919948e58ac4d02d7f973cb3a1da68bdf339c2822baa3b5542f29b281ef37297f4db23b96bd7f6ca253a28f15af26e302384bfca4039fa89ca0362ea5ab4ed1a082d239a53bca1aa00f8bbc846e07ad0b2223ea04bd492606daa0e0240ac4a45d694f4cff2b98c29b6d5777d49b35f7d8b4248d7533573d2f856077ed7e2af460d0d3f46655d94a4bc8c6e102ff253909429e607c4946d46bf7b2eb1ef718a245b32941e8e94ebaf2d86412c561549ced05ad1a67b47f8799f211515805580d41a384494165e480f052d128f186b930d5c0697d7ac9be852df6098e1fe40d54a8e06b71681d5dd886ed7821f873e609aa2c8d6dc5fee11deac1da18ddefce5d5984d1860fa799985e07a01b7d5d3632c24009863d405ef8b19de4e9214126714f04073f0dab82a5e32d9c084187d16e93db35a6c577e6f1ca96199fa4f209b2dd548e1e7412d2146920937f044ec4e07567aa7f170d3d22382ff2cb0c841bebdf565491e5c3e4421ab5ffd9640d927d10bb14b2a31f8a827f5e29a6a8dbc11381fe26e2651974cd0df383d80b19cb1e922e75cf65dd973476902e6843d9a6766f74ea1f4d0ff67a0a2348c8e10c9f6037d12a087eece0583e9ba7d97d7ec421c97211133364fad0348a38e85054c3ac017f01f4bc7093db2a8828605096473f38d6736e1cf69f781022950f103021495c8e950a97ca7da8bcc93194914006145135a7fbbe28cb2b1c6a0fd5da15899d43113c7d6c641caac053627418fba7954222cfa59f6e87d5edc9b4919c4136c99b8b2c432ccba2a3bf5d626bbbed4d532921763e69659a7171cf8fae2cb30a86458c3eb4fe7651695404e1044dcd55413712cfe80b9d97ab622d5965abee04fa85f99e1ae92af0746ff7b86e2167fafbf18deaadfbc82c41a4211d36c6d079c998b754858cd0d94cdbae933fcae35b5532c2766a5fc14123c0e23cd344c5a28c5f74d683e429cbfe146fca72473a4388da00f95a8a98f74eb5c090f0b6f3b1a4ba2df4f8b8c2c17539957a12bb6be19f80813814b6508515a10a6a00ba0f23644520630541ceeec537f0c2bb2669c598a0f8008cc6aecbcba4d89306cb2a6885e62c75c4d7361f1957ab56c9e8eb042b608b15de00b86a0bfd73050acf7d2e8d23a3be037aee778f5e2ae2a892df36fcd5a41251ef71667ecd336424b48d06fb8f00fa88966c72610813fd84b9c03fff437893241295f87cda2e2803cbd215b29fd23bcd54e3ff86b6a012a5998524bcf9673fabd7a5aae3df6ed660978fca7543b86e35570a1211b938722d17f31f161e344f7be2b522f6c6620ff61e111323fe61d13dee240329e9f7b7576ed01a560086d416ec6f5cc404ce3768d021a1458370405d6d7ff70c13c3d60ba41f21a17de241905acd18b5d28e63fadd37509c18b8361e0fc971be6ed51ee4de2a6adb2a2afacaa43e32933443c6928a24f76eac7fa547232c6828ad01ca8e80e4dfc675085d223c48a0ba7199ff69bdec89f5ad0e734fa032d2b8a4dc63ae16a07add9acf81beda718f5de5487aa84ccde4e300809a0d1f502179566e114c13fdec26cd4eed858387b87b4ad1901382d15db4d30314effa6c63459c8d016314ba4c9ffcdd26cb806415e5efefd32463e7c4d56d0acbe6170f72789e5acbedb8f6d4561fde20f7bb5120225eb4b2ac98d1ba22e7a90dad3d3d012b4daa3699a55bda8db8fddf45e7d4a584bbc111713090f8e830636c6e6007df4c9828cadd93ca2848c9240ae6709518c48bd65148e0e21c654bf6d6751cf23241306ba2283aae3099e9415991affdabf67b1e4bd88495dec3cbc3eb13fd6f2e242ecc56f4e62048bec880174b23040e8e7b52141424f8cb88d5d1f91890c61dbfc4f8d69d9208fbe662b36b0db2dda30a232f2e805c2fd1feba65183998d5b69910e7db7885b7c9de13b9f91f4e3a33b8be723a2d58e18cdc11a54ee506fd83a6c76e1f497e743972d0d78c466c909ee15decb55e24dd4f9d6ca77830885ef1535f79e58d1cfc4e5440338e1fb18c03cdbc24718aee180b2290b545a5b7cedd025f79b955738833f12a7a4a9b7dbbf0996fcb51a0072002eab143f4ba79d44c797c4284ad984e5da2828c9747a94b8d9fc8ee3e5f07f4fc5293bd3d97d39bdc4d71f1708897a389887d5f4f8cc966c60110f3be08b06774fc82b8369bfc9ed7d9a4c20fa5a76290480608137554c86f431f5d4c710df1ee11786d1548451a1d97af93370f81c654be5a84b7c1e085404c91069f03068cd4df29920becf0654c8be5f06ce91337a2b03bf730032d78d6d11c00f93824d5f44de8e2eac15a5ebe40dce76903bb7913071d7ee514f80787e23aa4813d738a1b724079502a8f57339b86febc1ebb29565783951a3f898268e0e1fc098338b924b1ae91dd58cdb9dd24140a0494132a3e0518037ad2631542809e9141cc151dc7e9989c8320d0bccaa07c71990eee5294a0a58d2deef7fc68b66f3876c969c80c55cc86675f96576ad7377abb704a786dc3cfb409db9198001e8b2dc1395a7188d39ab6e5693af8f656f77ef9334ecee14bbf98be763007444de1aa26218b5af1350f23c70f5ab44bfabeef23518cff471684800eef57b22209a094032a073f8a7892275ff77ee27416b325b34dec52a61df73b8b954eda104e4a09d85b08adbde6a01e51375f952c66edc13cffce7991a35469eb33e15edbb5e273d9fca93e3c7d859f7b5c58c18339e14b66d949d257a98f44b6e97b124f5b035864232c8a5c48731f9d73fc45de54e6be314ce1f0d98212816d7bcfa81a6838960f0e3de3fcf7563149dee9a0f335f005e2cd9fd7a6368b80820ce0c09bfa28d25173fbfd8de8224902001022b1c096c67f1e2d807a5a59ed21918470514436ceea27d25bb17f600122e8d7a8628881becc21a9e341db577886a71d17e25727141d4caf76f7d65726d131b2b70d5a765a2a407da2ffb1224b80209d7be72ea4e86636996e712dcd912251710a08cb2a54acdcbe5c45c3146c89eae0462464bc683bb77bb339d89af791ec91680700248df16ffc054722649abff22667f510b3498b73517a251e358bec101146dbe419891f6aea7c261e17d4830d4056b8f7fc4bcd9e2d1cc91d3f1e664ed4ffd613409bf85f39b2e483755f0b0cc922a8656bdc82e374ba54717479f3be3e88f79419d05332ed69910ee2d94daa2dffd3648bbf5793992884db861b7d9835508bd53018957d72c30666e817276315f45c354a8741f6206020cf723f374e9d4ef430ade860f7a5f5ad8f0fb9ce1f0b37253fa6bbb1ca80429346624c6181e14ef307457c6ee03982aaf180b6fb02628c2a70f0e7f124093b346cf84afd7b7d15ad44754493c7ee1fd60f5968051bbb89225b7b6a173955dc1d15f601ccdc87e55bff853a9961cacf9d9889842000aec8ce84b89e901912b38e217b56064341c0d375e49d00495049389581dfbda17020f4403abec0cceb74f960faa1030bcb86653dbd154838384120e4cb211a315ca1da642678a328c351fe0cc6a3b8df7b70871ae2c090f72da838fc4e29daa5e2adad4eee1fafd3eed26782dec9fbc1c01360ca751f7da202e41204858f4f928c55e34bca9a9ff1b408063fbd7044e34ef1491dc0fad3442c7799f0441951bb9d1e79eedcdfe65c1d93829979fb00a2cbc2b9f227f601764a231b8497b79e62285203a2f06b03cfb113ae089ee2eecc2dca0749f705f259e3c9801c03ad5255ab772994a34db5b464b7feb53540abb52ae2abc7fabfa90af04e924b1eac17a6c6e996d6315ec8ebba72a96abaeffc0bf5f1c892f058e1b412e2ecc20c9dfb7cc439099f98f6514e4f4a0d4f4d3720e8e5c7583af8b92da7d4c28800415297d73a5baae81cef339297c4c482b0471e8a7ee74cc10efec988b1b7783b7cb7167eca1dc6f27173e516cbcfc1d4433e7471f00d2bf236e497d28ecfe87ddee8129ebebff21e94d20d9fc29607f1de89f9df991de8aac71b7c872a45fda9c9407117ee36fe119687d862ba9b1d5cd552073247e367b21658ef3ead6dd60b3de67334edbec630815ed6ced8ff2ad3afd2f646a235e470b828ce7276c7f044f6bc9a6b84582232c701907f9cfc2ad37066c5e3ea64ca61671e20fab290a930c08aa0c5acb4061acdb2944d379b1ff41235185708001a4d050ea34d711362548e0881b2e50c7a423e71c09267cbbfde84c5b38319e17b6237ac14f175557bd5c7ffa71e5a7aceaed77700cce76242bab5c676a6bb759ed6c2c217fccdf01168e92b448aa265d09e82ee39589f93e00388ad65712d1d8fda697429a753b99e244e0e64d97ebc010b0d65dfb9b85d5c0bad261d761143fb6633a66edd4bd4e72e16512dbf4195af84eadb689714ea480baae261218ac8f4791479be0f7bacd9aca58f654af31bda89d5e79a4645638deef0d46eb8d0f0d21445eb45b3d815beaef8be9a1b0f5114a6c7ceab2a735a7eed1f62a02456b5aaebfced217d515a55f980c218ecadf0771890e24618b627a91d9d75eae61f5bf3f487bd9a68d0119864d6fe7eefe449fd07394187340433baf4e262ce571ba5d1852e0491b330f8a907648192e31c09fda2dae4d1b24d63cf666c0774698a4b9aafd84fff2670f83dd1992669d6cc5443f993745981992e837d2c59fe661ef77b94f2025f8c2f449957123c343a567e8275304ebe58d36a0c69e7c9070d14c0edb5db66c2e8a549ff8db1a64d67d32d18c82b8ccbd3b7597deb4ea29589208ecaaad40c30f167aace242bc8356704d0d3b775a66ecd640ff0f94fd772fb7fd0beb742561a158e79f6586b329da65b2e6f8e2102e6b64f2d4d5a6605184b6be2b857ea6e45515d17344780f2ea291b471d4b8c05ae21533cf0699b1b030e3892e7596b370127ed65d1ebf80fe47fc3baaef240a61af0bd5131836d4de92007311dd6b0cb10d92e2b05c6c943fcae9792a3e70d58eab19a89e206086f13f808a963fd3f4ada42b0cc3d50066e66b9a1393f89741df8e30251811d7215044dc45c23f780aa6d0c4271463108150c3c69aad4a97618cbe9917e2e82e29d2f57703b902888240ea38a2ab6abcfceb1984c2c3625d1ea8283a7c194a17a71319a5cd7efb313665cac0baa5fc91aac3dd8906db85b5084c9bba32f91ae8921a929ed9eb0a5f3470e0242f70a5abdd26017ede3c92ce3870252a361206324aeb1603daf016464270e5a0c8b9f63b46725cbd9ce8b20bcf317924ecf098a7fbb47c765ac9d745c64ac719691f13b32c1e50b8493f0b24ea616017063289b4344001c61573ead0ba550a9f3310d8c5a2ab64a7fc41ef9f1d2f269c1ceb2f47302cad0d9939db26a11db7cd4ca17bea6c28ee1bfa0a2cd88e1ed868013268fcd697f818a5f5b361957df573f7a935fa82023ac9e30c2c5d218edc72b9863e89fa0a083c30e2846fce84d59ca5aeed217e7ae524b29c0eb6af3b07a81366c090f614e197e19f5f47237f056f84a596ac13d9e6e307c9b1954be0bfcc1a78c5a78de4da327023463d71707929592a3d35143dc849972fc9dd6017533939a40d740270a5321566e666cc20f3532a86a8200e8cbc4babbeceb300d2434f3c525cc41fa8d49d5064c0815a94e247a2b4cc28dbded8ea078e2ea85a44507228d2fe1a7fd862c173662ae4a3b5b1f9d05276d2abd118c9f3848b9193bf9cbbbc1997eed5ba98bd924990a4a56048246e057505cf84a3684f9bd661338ea81fec30d50be4ccf1b36f4ba3841d3285d691a8178652020dc3006a87a16c1088617c3d62f86a96920e045a78883c16538e7448b35abbdc17d147551c2bd4022f84e92149234976e610d5ae032ef3148384ff9196dd9ec7457b3b5cda904206ac3bc376842a52764c156d850405557d43ea0b1b5b3a1940610b82a9c05e2ee4daab7884d18b60617ed010742fc479c49ac338c729c19c86f0517e1e3c68d4faf08cbec1eec372b136de459b61a525901833899c14ccf27b5705303f6f49e79e94f740dde241973179f479cd351bb701a8cf044bc2f9bf57f468806555b38c9e55eefd437acc8b1cd9b2ecfd9ba2f46f77fa7378e218256ad2e9ad40f509430220ecc6ab6f675cd1c28fef0e8c99d5f63dfc291527724786d1cac26b68ba629e917a7cdb7398a754632fe540b07d1d490c233f4a20896faedcd07d0e69565cc281962f3e6b05486000cec5d4132e809b3e759b547e0a005557aeb09d5e87727d812a797aac86953d71ecacf29730dc3cb24f408c9bb6970f168cdd9e63c0969c80babcb1e808da469069c6a5e1ee015987f04abd7417df1633afc9d0df47f9e563783d0d4e69ff43f36613fee40eaa1f8b5649b756673c59707e316f51fd378694391a746a22c72c401ba6b2445bab824f00f69dc9de8e7b8ba115d80e8f4029d8d8c6a7ecc94daf5924761f0fc00921fd6dd492ec52d21e85205c2dfda72ed09acab46db2422a94711989b394dae81c2e604633e1028de65e01a12fdd6b5e2e4f2c1e58e22c0304c45b9a9490e12b43381a32a25b4f34cc87ceed2621fb45923420193481fbd050ac93eda9982fd0fcce1b332c88041fd41e88859f04520e6bc78b63120629a0e3a5f9ed1702587b00071480242e44a007e911d3056e271bcafd03cb94146bba9c5ded8b29711af054d402e023feff6bb498ca1324c01bc223e859a988b3e21f1d9ad1bd8a7b8b82593240f0464641a6a586b9d2d4c93a2f47752ace9e2ad5b0298e33c4bf96f208045c00e3e8b63b6ea41efe851070f99b65e375e9d0f4975f3bd4d22baf4f2e1f8bda2371964bf0cdb724cd7a8c4a1a5157c2e8254d72d92c7b6adb48d5ce64a6f21b335541930abb681f9529118196047276f3a876e1b9c2a50912d2f3ab3471ccc30762bf0c3f0c9cfb52a57878ddcf2494813ccbfb0fcfc1fef336feced1abf5a1acf791fd69948d8f9c2dfaa41e621726306ce04a8e5b16e43cfd1aace7fd45730f14d324417c7c40fcee22240308ecd8c065f5dab86ab83b645a56f5666d209469086fa570ca3eb2e3ab4c947d69dd44ed13fa55aecd71a692c978642628c3b5424bba500ffcf28cb721fcff08fe8c573dd97164dfcc3048207f66e872e0d6b2fc8e013d789631e3505a5ba684311c1439bdbc2c4ad852b4cc0ce91fe6302d9329321aaebd480e4faf2539b7f11a569396f56aee7c6a8825501af023694dede57f995809fcfac82c9ca21edffe009a8ea344574f778000fa28f429778e8ced69fc830e0b0c73b760dd1909ec36ce2e9856ab43eb38f6d954f15d567fa7b62bf8622c57871d73f23d0a647420e548eed81849c1b1815b40fbdecaf095d57d5956ed28a159c5497790de88b69f78b51bc63034b15515f94128bc9133b3c687123cfad3f80103710d22be745193d1e32acfe6803fbf7d014219cfea985683d69d57b2b90abc55eb7ef64214f3155b37f253138535a6e2a7c2e8a22f6e22f4fa1659e4be99dbf4e97225acc60944b48b37ea7e55953eea273ca895f7b1b6fe2176ea71d73fd8529e6799e0e9b1937d4654e77bf1dd2e18d7f2b3ef644b23517bb34cad048aa2ba3d27faa725d5ba1fa008fdb272f77913b6f43a789210ca5c7980969eeebc18de0cb23369fe57f1ef99ede6ccbd342022652a159e1211bd0fbf10c931997fe18decac6bde0979fbf17a6c94675e586483a0fcdd535dde3bca7a19a0c9dddffb0617927b7ff28a6f619c4388ad19549063376292146df6f4203f8031c9897794b1381e44a822f180722c2781f40aeb4e61759582f42636667af96682ee9ad994f73475cd5a95230fe502488d9ecf5853416b1eb223e5b5d959778c7e3e7c049787f32f3d2955269cc210dc5a7b5ce683118566106985882e5bd62a6efca0e2f27b229e0b0e75508d46c6293ba9b2d79b6894ecc5a7b1954650a5cf53c4c309a3cee3c3df3099ebd80441bf4bcb69a824e0bc60c9bdfff28e6173ab5da911e7c4d15eac1effe81c0e1b570a50b5f7f432f48124a1a6016044ce33d511c292452f9d508c8f72ed044b46c4dde9dc52f4549d944d620c03a3887596c6b4f5fc261082498f595e0de231bc61cd9e989a1948721da1e589345a5698981ed959d0ef7cf811dbb740b07475bc5d1d2beb3bd20c6928e68772dce4ea5dc38f2048f8c149c3195a83020a1570317978afd6c8f3b65d432448b23b0e67c3642f29ed9acb145108eec8f87e831d324cd8e07bb790540c5f3b3001b8b60d38cdfb8da403b1de387584e1d537c8d03c2eda837b0eee7086aad26097f0964ee4f7ed84c48acb6f6b5a1a17f2a4e65a93bc42d4f210843166644366baed011bc4ebce8f39c23e026fe141d792ae41b7e087492883983a4ce6fa9592a92b01c7589e8d5c0d26e8e017f983dabfa9aa54b033f986cb2561b7a9f1bbd28ce7030fe21670335dbb18538fc569a6d8c26612953001d9ff1d7f2796777203f1a701eaea00b3171697a13768a44dc14c0a339df20c124717343169742eb56f25489515f0729c4c99cee8f64f9f48eb95af8e9d1aade340dfa47489958400e2830b0951d5c6d4cda29da882841c04437ad833d97d82f146a9f365a44df1f0a5cff66cf72f3482f76691676a3542be3b0dc791ca4a39df39e96e29e872689bde07f2d001c5bef8247927d9d487ace8156a43054a74abe1e4ee8d19c46e918ab6119ee5bb1727a8cb47ca37dc5d36050f999040a95bc1702594d554fa684c28d6677f366d4e777e3751fbb9662fef840a7eac45bee1962fe085b6cd5705bd7c6f003494950a32a183a8d9ee4bc4a4702a0d5648fc6e9bff9d2ca30301349497d0c2461721db9542a5bfe825015d8e5ba259cb06266581f94896e532ff3fb8e87c76c81b42bbf3d94af92b36b460cd92c0e791c95d996ebeb32a9672f283099484623afac60f73a0ede4e256a1dc6df6e5a8e741a1876324a2e22254a2d6f2b724b86929335c7089f3ca9d17037a6d836d69c9b5a8a4aca0b4edfda9892b962d807cea1c439324c1bb8959fec5732666fd7a5f7b69eb19443d7ba11ab62ede751ee155a2a218f30cf13718faa0eef3f538e2f33f4890616225652b305bf4430eb3b31efb0794c7c0090653df6c3ec8f22e1bcfa128d927277c35f5b330e229826f766ef93a14ce2b3c306a6239339c2151384444d19437067c47ab0b8f09e2dffcc31daed5e0247cede14db87a48f9b82ff8acb14307554e67c3bc0cb0d7c9d1d97b4e657a6d11ab00f3d3867f93daddc659048f90b8bb9365a79ee05001ec5369fb6d00dbfec7db0d0ae1e559e2bf4a29f4f19eea507ce1110948c1e9bbc396c30055a3673899593bf27a69e9b8bd12e4148989af1add1ef9972dbaf3c19b3dc9f616f36dfcd34d0dca143ecc923cc16ee05f5c5861d8ffe89892f450d2927fa62b416273b7987a361ba3739bb1477d528d21abf98cb0a8467476d0756fce2b3e40c8d2ccc285f67b299d7d46f228040c32f304c688d01c67e0cae4b5786f0ca5aa52e6f312d0ee9a15feea3d290dc2ad59c97f3db39220dd1b58291bb99610f2fc34f4ff44f56ac3e3a65184572d1d4cf206e8e9ab6726231b6330328a6883c9618645ca3bf06cd2cebff10391117178203e6b3d6a03ed93cf26e0c8c700e0327eded34f473bfde7d97c31e04c4d5ce3d307f6aaf2acfd7d19c5d34c24c5dc9fe1512bfaa67b326527f7b37dd3bde6d7d58248a1ad6ea465468be95072ee3855f92e40bab3cab122a0c4ea34140c066bfb6cc70ab091061423712789593db376786af79c4481f4b34932a77c1181745c81461e44b57778c887ce28809e1b42147ac1383a48896ab5b6acc16d38c67abbdefd74ce70b18aaa60ff07a78020864d7b56224cf8600f92ccf39220dd1b582916342a61b4eea9c5f7ef593c2e5a9dce490066baef8bd6b0cd2f6237deb94e4e428f2726c67e841cf617a33fb79cdf0e6b140bfe350072b73d727065ebae7011a8da948bac7c73223042d2adf210945fccfb03b2e8acf8555ddd9f9efa174a04afd96a703c9e31deed1920877323ecf36f2a6a835fca033c970dfeaf3b35768394827c5e25801ec37f76f24ebd1f5ae54469279a2896ffb618fc28d10069413e1a9190ae42fd74528ee75d8b7711abd25a305dd1b0260406d07fd8240ecaad612e521f479f55a20f951c9471940c7e61825c99f758ce95ce6457d1455e90c17531baacce11796f23fc405a0733b39953ceec7f0baf088005ce2e6a1a3653cb2468ce033a4a4c31b8771d1925f786ecd3bc98afea23a1fc9b51da33e1de92139375ff8211a6fd12bbcc94203034c555c5508ea728b67413f04fe523574604d28a68a5ad48c514d6ff310553f1db5e7db154da6c6570afe112db4b84868cf4ccbf0860f75ca9ca25f00fd77118ec89e1f9c2a6490242e310e69eb865bf6750c62c77e8ec96bbb15770c8236d84a302feb52beca12be7388a72427d5ee86d6fb16adaa98c3359d707126925a8469dff1805d29c8c1cfc65e27fc7afccea150165c3f3684ff3abe93040e479a4945f8845b015a150b00bdb8caa8bb0693e34a438954ec8e0945252c687d475ffb1f80a6ed94f502854dea6a37db9d65b9be428ded687a6e0cc4f84b669a5e7b4416170dc4e9e686f1b9799e0d8a0325b9f8ce39b4e898e86926c1b4ccb51c23607dd83b7a3e18adfd0e68697202aa1d51721d4e4777dcf13f1d3c971e40026938c2707084db095187810123b669f383bb6032510dcabd49cc0a7e04f5aac7c026bef1c1f9222a6665630212810f49da702c322696a17dde5abde9301396625ea1e44707851e8d8b9d9607d39c87f914ca5f9bd00d0dc419ee0ba46b7c5abb1d83077a445e383b13d625a092e8aa3955d393e030ff45913be6887eb8c4fd0ed815da6a2159e77b7550f9a2b17d52169242b9797f2ae69a986d59323cee2228095ee378c54822e104fad7717cd43883a8d3e9f134b7edc26a27528d8ede873246439c2a93575280457fa453b164717d4c7239d18804768f566917eb14c0154ed020af5e5655d300ed24a07d28e18257f64caf7b0dac85b482be946e3c72341cc14fd5dc6dc63d736870d9fa1902d41a303621bc2afbd08956128846b74ceef88bc84ca45876021bc5464c10130175172b92f1b76231c7e9384ecbdf796524a99a4940178067706ef052f84734a930a02a54aac8a97346b523bc6ac88e00b3da1832753a8286285128e5a7812a507fcaf77fdd72a2b4883af094f428a3021e4c8891529280f5594546192668def18b3b2829522255861058512acb83bc6ac0459a314c687342b20f68810179008a11243971c70a02ca822a44a0a693255baa24a0969d6548162673bc6aa8081c90006fbd47c9f0f5310712b7c285364850f618658e1c312265841bd35311f8af0018b3d4283060d9aeac3931dbdec18eb010a7b53fee0afdf0206e6095dbb7ef3357b66cf7c0cdac824cbec48b738bd27625488d832a96801428a9831307440494d0e6960986249540aa63099c2c3cd5ff672e6b216b28c264d61614a0c4f984ad20ef353232ebe179f6085fcdd4b8504fbde7befbd374c4eed18a342444c6c8a9a5d778c4d39d3c3162aa11a080948f1918278f0883f3507b6fc191b9e3ef383a4d458124d2985c8b62cde98cc355f5913d9bfbc77fd6f643c1b82284f9b466162d30ce36b6b0b241baa94995282982a8068932955c829503bef189bc2d405e60218ec53e2fb923c1d794904894d29e26534344111030f452041840a3a486142ca982ccbb22c3b42068dcb9318285e808cc1b12ceb0163dcad10d3746982099a294680f09283941aa4243da5a4b02045862731af7701910394233151b44059628cbb90811d6e58220463b4a449a23844391325cd939818941df6b6630c8a92a83ddf5b2287531271b0f581fda15b1ff85b9bc3293ad3e73ffe53025130fb0ffbbe492e0212e88748b0ef5fa926c1ea381510ca295bbebf954edfea56042450eb03fb0e731667b29c5172d298dcf1c996f5e77fe0f347fd49e7dfaba7aedfcaa144615567ef896842f0f101fdfa1ff8d7cf513f761fb43ea83fecd7568efbd8470eac8d80ae8ede23bf95237acf1011100940b1d3d1b23a87fcb863886af7ef43020673b966f5907072ff4d15a5016402bac42f44c490d44cd99c4e22311e80c478388ab1200496d21bf6fc2895d43a9d06159071c2b48b622a28b2a7d725cf77d9cf58b2f6716b2fff6a3788caad7632329ad9b8f76547e3a5ae0606040cf6c5be6ffac4e933df6a8c2db6d8628b2db68faf0eb238f419f623c5d32768fec5f75a5b2ba5ee73d2d0bf3ec6189c3f3f7641f3dd9f26b1c548a5044a428248d2972200ec184b7292a4e463cedec7e37d3cde7cd52a46377fd9cb39a359966519959de92bb8e9cb5ed2d1a5d40b2c662fb8884887234e78c195353b3ce9b0a4490a9a40c9b22ccbaa0a2688819035406a302a13842a6932439324576c93169ac070a5e9f5aea42245b1a42027ccdb044d0a4b530c69e284d7a3264094b0d4044b90a5a658132e9bee186b9265c6909e90c844b1c5d9c4040d93225e30c617e32018e326449a185d6902778c2145417272c39473cbcff45b37b694d47bb0620506b3e25971b9aac400dd617126468f31c8165d95fb0b723a7ced9b776431c9da67cfe197f7cc2bef6f3cbb7b8ed3dc9e52b61c3009f2806dc901d86f60e8dadbf621cfdebee973f35bfe2df5db8df72b30fcbdfa18be026f3c1c9cf7e11b477b600346255c98f774cd17c6da4b2d63d4f763f896d9a83995c1165ddbbdf75e7c6374da5107ddc7dbbd110c3dd833ce38e38c334e8f05597b5a238740b7be3152a743b6e8f2a044fbf2f35690a1605ec54a553ab14939a73ba5b5cad82c27ff7632bc26396a8f498e96871cbfa6bac9f946b59ae1e9137aad3a628fe108db5d8b01ec75a595ee3ad145a5434e9f3acf7c3975a7765e4f070bc2235d2f07c7a92fba88df63d32842b4628cb10db1906f51dc123ac1a11e42af3d9be4d2d46174dad303ea9247848a50d29d34c04bcaf263b4b65a5bf1520b1564f9f3f5eea5204beaae3d2959be87030f1878698bae942a620ca305e813b4a1d4e66717124ddf9d6c80d2eb07c6ecd140b9552990c52473efdd077620076ee07687e5703909b2ba93bfd83122073ba20bf9fb05a3c5f4e15e7bef79793ee4306f0ecbb089350f57535665ef915dc6817277208b494ea538fff13caf878d83317db2c79fbd7f039cfc6b6cdf384ef3f0802ec1ec9257daf5c3d7377f6a784f658d20df67b5905937e4398f28f197457a58ad6a90c524d7d81139d8bebea794c30805c205a60ff7b5e61e42218fd7960f983e97d3616cea645c2d44a593e882c52487f2e8084b7944a57e0fa16af5f449327d421e47d3e7c8f4b15f5f22f100468c8a358fb884e9f6264facf5a3d235da28e7e1e0524e2929952da86e6da4d7d20be280936c3168a5b5520f76d494564a2b8c0a783bd4fa723dc9f2eb4b199366d693ec94d2fa6195533c25edf0c9f6f7624828b9b6bfd53a8840b43db0c19e40f62df8dee3453d22c89fcf7a92a3f77898b78b403fa4da031b6cf9f25da9464dd3344dd3341b58cbb0165f04a28d27e8f9acf3a9bbfff49f58bbd7da5a29759f130cebdfcfb2d7344a3f86f54520daf46b266f095ab00489223b8c4a4a39b0ecd9b49a825ee0e75fc9e90a4cb64fe4f07ffafbea893c3f7c49a7c09c80c19ab8f8de1b3bc2867d2f13348aef8816bc04382b9265d9921392d30a32cda986cca904d90985d41735dc97289c1d634700d9e1c3322856517841e30585a8cf29cbb22c6ba5f065872f5bf4172317991c2f2b25160ef8f1cd5167440a4610592d118513d3d6d931e60483ce0802ec70044892154071668a28464c15196a78e107234878d9a20bb667485d73c25e4a2e2c2e17e7c59ff883992247543186e98b1440f379e2cf43a5b042112d2aa0b0022029a5119bfb36411cfe6d0e06d19f5ce73f411d34bfe5da06d126da4e9f9b60cbc67ce9208ef95287410e06d19f74be5fb1ada4c8e17ff8c977c15e3e9eaf4c399ab3e3ace4054e5a9cb030b18ac229e654858925a0603028a8ef83828a1ea3cb21df8bdc227469d5629715d8f75f99122a37d898eeecfeb595f6149139bc4ac281749181095dc070e9a2e568c5a58b148cb10973c7581728be436c6df9ab2f4d514d25188131be26e01f36f6026435c4170d768c7589a14b0b3bccaf82fa62be5c7e8475c9b1857318df0f298db6be5c2991a38ceec447c4f7c19860b0e84d1a2fae2ea0b24a292b15a3fa210169be9c14a493c6a32d30d89659575ba6cf07dd10a246410498bab9f5b7f689f6563b08c8355b6aae5b2de5b9b7cb61f00336564b99c698bb460ef0fff51b20d836e80eb25f27579dd618d3fe7b9e4faa8eee4363f4193b9831fafc187dc613d4a744346dfabe554a3f8073f5a77abace3ace9734407c229713862d99a07698b7071e54415365872ff68cd13eb53671beb8a79ff7542a829ae1377210b53acfd72ae64f564f563cac7458e5b082b282b2c261b5e487f9e4878d02ab64b2602d0b638e1809f1039216274056695b2e4ef64a490ddbacf6e20cc759edc5378699489c66b5d7c6596d8d686452984ae38e5109cd8cab2a92cea774c627c232231363f45a6badb6d6ea313a95814a9f2bbcf2e81e698cee91f2b05959278dd1a37b5ce1e0eed5dd7d8554bd56a71edd635512a34b77269224897131b281d5142e2c7049e15a25f9d1295c5088712982c97fd7ab05be18df1e32de3136841a2a4358f179f9f5ae21a8d8e1c3e6144794c0575286b8b28760f2c2102fbcb042015d2979b121846c89ba012aae6ec8f23dc4f2099625a7b4566b2fa618fb941867d5da7b31ce2ec659a66d38d3b46de3b82e954a651bc7755d2aa5ea5229952a671b7a73e353dedc646ad03861590a0306cb524a95b38d0d963dff66e9c697ecf9389ec4a39ee7537a8e248acc0c23e774a7b466cee6e60607c7f36e381ccf5bad58ac9c8f7e9f4ff979dc8ac5cac9f93e9d9cefd3d1d9d969f1501e1e9f92c77576765a2d9e261e161a500d34f02935884c3b5c8bc7795838a88117d180737003324fff7dcac7e2d4f4643a9949468e641e9940d4a0710a0306cb929244e2541ac9229288f49f617408cd5774d221e774a7b462ccf3a0d6000080cb150001500108c0a71400b6b9c1c1f1bcd58a954373727cca1c0c009cf297d39dd25a2dadd6de8b71a6514df32935ede22cd3b48deb68d7f9945da76d1cd775a9549752a972b6b1b9c1a138383e250e4eb6b9b9c1c1f1bc158bb2583e258bb562e5e47c9f8ece4e8bb65a3e65abb5ad380759b09ccf419d8e86dc3c3b7467c7a7dcd9c9525f74313f9cf25f45c971be5c6677a8092c896d51024366e524c7d816a8d816262d59c0ac5490636c4b524c0b546ccb123236d860c36a8658961c5634c4b2dc90454996255968d8f5c8cdd404595c58c9902585adaf50c1b124794ffccf2f389aff7ad70bca7bfeb34c08a79d655996bd2fb6648524e71d6342601142e9d610449520a6ecf061f8668940d000e2de5b83ac9c92a848a894209604c1e4098780c6100410efa956050b0414104e94000918dc2b0c94042438ba9244092f5c693ae10517ae44b9b2835c89206b3bc6ae2ca17105c95d8de0f5aea5132cc9b0c387113152c5d50a6668fca0a62b52b42482bd62613ef17d93aaf07dee2b14be5591efb362081543f0187c31b6122688153045415629ac4eb0524496ec7d3c2b2094523c24caa65409cda63ac469aeaddec7e35909c28a103466e5062b33ec3007419ac6db73253e22187f9f8b7502a52e9775efe677ad2930c4a9d46b291dd29d7a9c5781e16f1c2ec5b22187af17f55f2d60f5a5fd0d48e74b7b1bd09b2fed33f8d185f62ab00335199ab62f73e5e64bc9ad64a9c34ce767f3b116b3ac026563736deebdf76d3430fcad69391f7e5be3d99af61eebb5f7a6cfeab5d5cedbd87c0cb701573b3a3a3a3a1ff8009005c6f9b2f915c862d2005049ea61fe937fe24feaf0b78f3a7c6557e94d6b9628f32a450ce9e63a90e2346c8554a052406e367b2ba15e4ecff461a15487de9e990ea5751a378d513e738be822c79aac018c730e13a15e4ecf04833a9891400165c4055fa08a9428628771028325db6887cd76d0df6194bdbc675217d5de8b870524cb8f30fc44bf023b1cf494a8919c52ce59ed04adc62e1793f7b96a583f564db3fce9da5107fd44a5f813c444554e2e3b58254869c482180c88c49c9001ab496605a151af18b1a6416cf29d78ba3bc69cf0b2e7734e2c394166cf5964db549352ccd5f9b2421e058c991d634d346d04ec186be2051b840bb81ccb60ed90e37c6d19fae3a74332fdaa310b879c43c7f4911dc83d778c350166d34f9a1ccb84ac7dc8ed1d1609323717307fdba4512aa55b1fccef5e02f3bb27da1ca881e1081b673f3a5d4ffa1097dca21641caf021c16deb7edb01e9eb80f43dd04196917dbf75c3ff3ecf5f192d0743ff1cfa31bac0efaee50ffd3327fb3e6d22c9e6de7fbb9ced64b4dec16fc3913df7ae43a28ec67dd66720eb6fc020ee6f3e839ef72bb0d5fab8756c1e83add6ef7cdcb1a3c13dcf73cfa35b2d3d8368afbe7563e76d7e27763982482022311e00e7b32cfb9dd57f600e1874f33163e990fb6c057ada0562efa97f0306656f9335104650aad335d3f8673743db4490e0f62e14b5b510b417b27b83daae377fcd3ffb58134bfb3efeeb17cfc0fafeec52d1457d0ace17bbd6bfb922e5778939edbbbbcbea306058779fb3fef40f6f217729bfb084b84b272fa644d1a8285a8646ed8a849289b48c3432326222890b7430da5269c775bf8e75cb067efa34282d2304557a8af1b3f771e07c0dcc14c4db67a07cbbbd06e6e7c0f99beabbedb78dea905a7087bfef70b7bfc3ddfe0ef72319187435f7fa99fd8cdab876b5ee6b462fd5eeab2868a3bb90ba535a6ba532fc116e2f3483ba27615730f4bdeda0a13462bb97db4bfff07ead1a6bae85e6764dbfdbea7ff79283c0b5adfbf2b7faf5774c1fab65adaa0fa591aaa361bfeaa0fadda73a1cdca66feb6f54a54349f3ec3a1aa1e43a1c1cd5a14aca904a7b73bb2fa595de6e7b22d200f56b47c33efecdc61ddbcb94ecacb49d0ea2bfbdbd5af512055d43a1fa9b0ea29994990ee5b4b1c9a76fbbaf5fbf769ac5992ce45b6e5f3f7be2c0e83df58336ad3ded70705bdaec774c1fa38dadb5ba6624c86c6edbf78a640927506a369416a824504f7bdb5cd474450ef247a51a9e0b05508e7e074e07b3d7c01a35780dac2f77de82f341f80d588438ccaec16f1b77efbd60906ae3389e9757c5d132b283ce55be71aadf42588fb5d65a9d54a7fa3ee4f122e4f1e2d341f7556f3fa22112fc2999aafda99a9c49cdeca0693f2767ee9ca83d250b9bf6ecfa5127fe8c503f1c70569d13f27811f27891f3f543a159674493e323f80f7ee1bc715927f55196719eeffbfa1304caf3bf010bddd23950ee6fdfbe25233ba05176871bfcfc9046edaa83e4e778e5d13a3aa55b2acde43c55ebbc06e0175dd84f7534fc8354a9efdc5a6c7fb32cb495cfa35b5ac7e5a73ebb3f6ba57d89a3e64c4ac663bcfc4732711fe6e01a38bf4d0cff9149de435fa5439c94b399fc4786f11efa4caee9cd8738ccde87dfcfeac3677df882b90eabe6f16283acd7eabd0f4df41e7c7508db12fb8736202d8371cedf575d873c5e481527bfbe5f390295f7fbfe5faf11704eced5da69191e2f36f7218f175bf59ad0dcdc87748736835f7421b90f52713f82ffe848167a32c8e3c5be2f5a4676c0d13251b48c3480d57402a94429d73f7c69becf8a504a19ce7cdf1918ccfdccc72b5c6024892533208281704192159a2b9e9a36dd31964412f95287922651b45bd02b7bfe7b479f969e947684514a3fc60ae40e081f5fb0d6b0d66cf1468d136d29a5acaa6cbb1b730604ba1b16d0e00ea23febc4e193049b7c273bc6ce1ced173bc66260b47de41c636caa9899a82d34b78fbb4568516badb6d65a6badf5a66cad4db62e1721d1fa5a8973d925d086ff82dc7ce1cf39ca5bbe5f8454ed87588baeeaca39410e3f9e77bd2cf52c9fb0cd901bb7eebd17b39ec8b017303ca037efb055f5b7b95d84e43407869cbda834a16c3617214dff22a4f843fedb6e90a839521a63d49e8b90aa1ef240df54009843439656bc83280d10fef62accec183b43a4003bc6aa589a2de6cb9f35831cbe5e2d601fdf4aad84c6ce2cd9158cb1334ee6d4619b21b7ccf16e33e48ed9bf0849fe9007425ae5ee86cf5a6b9010f1bdd7cc399243bc7110ab8979647ff325a59cae654ad4669898d162e6893ad9e274313cd06b2bf539cd149911e7ec7d3c2d885171851921741e31c5e0c4ce62200391212aa8204505a61b7808c31443d6f294b56c0b8409270471d2449813c6a0e0062e45a8a0324411154ca8a8e1fbf27d302718ac09066bfa3e56d30cf2d46790164c61668a2147102142418a2a94666892822e2ad02d54b460440b62524421c50c64c822c55394145aa4208325cb8d129b22710426040cf605f17db1588c75250a48142eb096581881a989a72a98a89451d21265c4aac2ba32801d63514ea2987c56be0ff6030ca60483297d9f126c0a0c46250a2b4a1156024919a8288a5c9afd8fed07928e4dc73b84a423dbb6f9dbe3681da9773d243ff5d977cf224db6397bcf7dfa58fb6f93f52bd6733f84a4c3fbf94348ad08484a5f3e8ed691f3ae87fc73748ed54b3d045b3d4baff4500cad87a61e7aefb9efe9fb38f51db86d7a08090747ebd03e755fdbf4500fefb93f3fcbf4d4431288369a2ff5d010920ef9530f011942d291bdd44320643fd4bd0a963f02dd7c04ba361f81640402d2c00874030e21e9d8de460f49a0edb9cfe08fecf1abc01f483a322d9178cf7dfc3f2250c7220da7372d9390ecfb2caec8fac71092042210d63fea47a05026edfb19188162501c6d9d1d635024cdd47f20812a905422612392f4e2c0ea818cd198242c1fc824614961f530a6688c0c31e00c110366873bc6c43ce11d63629a6262ccd013b63837fa3ee2cb2a750836b41c9b7e08ef4392507dd8098966d8f4a5129bea185db80cafac224f346df9f1a9035ad07710876ef9d3185fd15b98726ed95e9ba57edddd350e2be599af39e9a44edf411f0c883c3edd65ac26a0fe298cb9fb99cdb2ec661acf177e7b310679b8f06f9b04af94944a1f0cb8af5d189c06992ea8a56ad9eeb05ec835fc07e39cbfefb11c1d914ba68fdc1ec0542304f768fa4c22ac1c72fc501e4d9ce7744d9f0ce47e8b1d966098b7fcf6ed9e5e99b7cf787cfbcacb738bc0a1ec7db782313c03abb5b682747e943678be24b7428e2e554a5d675dfb0707df2de78cfa9e4fe59a6c6ad87cbdaeb49b460eeaa696523c9f87f3e60f8f377d78e6cbad4441e4206ecab3fd43a0fe39ecb1b399b93de79641b96d5460ca661b0786dcb674dbde47dcb4375f5986f1b46004a38ba6e65d618bfe03042884451caa48dfff93564616921cc2b00b69a129f102ec8734c4d66e5672c0b583e44f1732cb088b868c67a5b4fab36ce0a1f9ed0c98a27a084dbc244fda23852cf70d89e876105bd09b3d84e64f9e727eac2539fc670a33637435a49452c2d8f463a0907bd03fa24f8d44171cc5a90ff10e954ac78ef9ca315f527e1fd3c7346b609cefebf0f582ddf9d3feec600021b90d0963631a581ad9f35948aca21c02dde1e7d269d47c39cf95d153df7c4d18dff765423cb1b4ebab3cc87d3e88fe7d1bd7856cc07cc9387d62e4407291832a5949b20bc67cbdf0a082fe5ce44004ff8b31e843aec1a0a67d96dd17b23b0b41c39fdd8f9d03ae0e6b572386ec6644e7a28b17d14598da52868de8427e2542d57159b66defe1485d0bd53ddf070326514ace2b5415df9c7959e420b3cf812cce64ee33954a0b398dd4fb487d74219f033d2559a3bbba9d1df51f0ab4a1c09a216329ebae0f5e30831c80edaa8360b26953d94881d9f3586ffa6023dbbf75237bfffc18ffe67d8c2e7070c030fbec6fc2ecf1134eb6bff744925d39dcc9b09f81dd7bdce397a1f7f3e97b87c3dfd3990e53dcec64bcc4f918336bd94f656ff3f96fc010ff7c1bb075a37efefa59b7ecb76ea45efbd46baf653f5ff5415c9bc0a8742d3845a974886800000000008315000020100a8703e270482898c6ca683e14000c788a3c82549809439120c7501404310cc420080311400c20c618c39c72c878009e3a49d06b239f4e6fc96794c4007ede770ffc09b1fcaadb95003a04b996ae8d0baf0977c373246d66ac1161ec605bc92043f7d8a4035843593d1aa5860ca9588e6beaefda424f6f9b554961eac8568a0b46adc95e8999120512214d29c8b1aac2f8309859aa3a49863cf3b1ce3f6358dbb7d4f40fc95c9cab2779e30eafaaa72c6c4782e48b9be2f833e3ac433339182465060eb76accf559521ed0d0b0226c46eb9bca082550985091107008fad6f59b027e52c1646786578beb5a2e97eb0e08fee0c24640195be0a26b2b898d4a396952d72571825e2d818bba389ec1bc3dfb6a1b0bc7d7c6019cf4486af3a10bfae6537c0f0853db4955f7b8efb6d80bbc79c5052f98a2969faf74c9a8b7a0ab83b773d8388c8014a87effc74a6c4ebda745dd59e635f045ce9a89f4c8a79a2cb43e0b3c74957bf9d39581b1ee12a15d81113e299ab0e905b5a0f994e82b359fedee9680b7f2d9426b7b78852656dcf74c9666b539e3742e564db2433602bb7ea33c60f036a8e23c442665922247eaa738711599a85a2839de3f42dce24b12b8c8c233a7cdf23b273a7227f664ac0d5ade691b789dc989212728d3ad1ea250e450b90f20086aad042cb3599e90e24d95a465ade152b632247139de59ccb8511a875b27b4bb66a314bb4ffbe7b21e4a3947b5a358b7abd78338bfadadf890366abd1b36b2abc7384b0b4bf606195eb949645c9c937fedf650ce1c7ea4eb6dcb3636001c0aca08c1200812cb2f3efaa2282b436e48c30af1b1df1b1d86a59cb18454e29dc0a4602b9b20f6508dca4f02a077f6f7eac732d06a4fac8d97654f2e0bd63eb7bd96d68f30c6142f093c54fec4305ae8470593bf4812142cfeda5ed362c53ab9cbffd0a1fe46fa6039dd805c96233a012b3a606fb9498384b10ccb4d46ccedc28e70f33c185aa7295905047328d50f08965be34b4e911c99f2fea067817ac89352ad1ec55a4a56a90fec443ad19215bc8c83810931b8d82c64dc599bb68e8e952a0ad4631b4e554bded344e9ac82ce677a9945ae28e09a30fe9a7178404112632e6a05ed5f7ff96c25ca8a373745a5b41bd402138d2288e108c014df897c325b664c9d37ac67d6590865f431774242bf91bdfe89afda21a9c2e0b5b1ca27601e0eecc5e594e6a6b236cec0c61a4c1b196f7c2f2f2ab3b948a87382dd6b2f45a10236777cd4ed93d572b1b85fe9a11db6a7d3850c5983065a6a6691cbeb3c76ec37ca9614101026ebfe7434b4ac730264ebb0665191a7b003cc0717fd9a0edf607ffb75a4e81c4be5065dbfdd18475b4fb407508d4bfded94cd11bee42e86d6cbcfd9d4438acea487213526c877d6650ee0525060523cca66236bae5cb3cb618e585ce7985e6cee6ef4381088c90d1be4e8302ec90a688a3bd417f9f26b0e1f74a94752d8e2eb1c5d744186d65007081b2239c4e1244b21d013c35072969058735232b442184bb8b1d0d1117b5976c29b5b5da8d7b35574fc181d6522762c40e2cf14807dad980e5e2419845fbc22b0be2bb5e59b45742f9f1dc36dab6bfd3096a04be62ca14b7619cab65e2dbb1efa6935d333099de01f1164654cbfac39aa1c80cbcc54831df49d3e3f3360f5615c829ec4514297ec6e886dc58d762274f3a63a11c78d34c0e8593f894f509a4c86af02ed161083c4655ef64eb31ae50325d6f4d3b03ea529f4666480d97c3c588b29053184fa9da9c779892f3720971415307b9e1cfbe4f39e5695c4f0a020d4791e1fd30c3cd2ae075151c5a561649fa2d8143315fee20d256be9908c280feb60b764a1c32a7dcc6dab9c129bd1d98fade83a5c363fcd413be3a605082fac8d618afa0dd3619c983cb57d8f4c48882f12ac4c900aaae11ec72afcf48922ac759983881f176ee38f5363b560cbcedec7a38d4646d4087b215f3e85d988dc7fb859187d19c6bc501b0a887c153da50a89dd6ce0f61804a1a5e35cd2cc845ed68b8f238b198610954c60f618edac8587e57e3dc4108c8f92b1bca59a6884d21e5a658ea887e94f576100da9d70121fa5ce7d5236d590d42be5bdf7121b423d5ddfa63f3b42610fdd15bc77ee53b78fc8ecdf7f34dd45d907e210f439162543b19cec88d00562290174558d166d1ab5240d229e0226e38770e68b38742579947e7542b64e1cc836fecabf2b943f584b4e61d6c4213aa40ad5679b54ebf406a921aab35db28b332d9f2a23d4bfcec65e3dbbbb76a506d3a9996e86674cff1a13beff720f054260f34dc476d93ee8319f69c863c24431ac8b6852b7d806574a6992fcb8280df933bb14ca9b0a8e883b124391ed3444d3a9b548f274c807d141503a907340a43d1ce0c0510341e1188879d4f2f224ec3b22a49a893e5e4b59853baa85e361cfd4545a53b3b5c4445aabdc31a7837580298e98e6e434b811f33fa68aaa76c2523d42374af45dcafbcaa65c9608c744206fa8c6d46c025d0013e5232db209b3e00a0ec0ef7ca71380673010ef2fd8877a4f0bf4cce566338b107f45218a74ff281b14a135351697a08d1a72ce98a49db45f5820f4905f2b4755f916a03e446ce6094d4ab029bc03e39965f5ed3ae24164a252609f56c820971ca464928e297d1fcf1b7e11336657d652693b2844930277a759cf54bce1dd17ba2c0f181463294f8c86ee3d79a25569e736d6c57db1cb58ff2a3f060a56252de31f5e188f0a1caf05d9945d085d9151a730e745a2c7b6ca7af4e9310091c49e062b999cc9b01e41a8eb4a90ef324a8aba37a90993a4b8cae5d4b4d832a17e7ed540bddd6f91d9878fbdb169a48b29b55769bf45d4263e72bcdf88dae08069d478eaa2b1fe0906b42385d81d84e983bd28681532645639acd4a046408dc77701b4621f313bd0b47c52217155fa3893b0109a96cd2c5c26e58ced380ebdd98284d1edc6ec49a397b66616a142913440c7f1ec38d1384128e3776b317692386f5b60be00caa95f14356c383f51d207f19856288e8c1e93cd727cd5e8b3d6f000231723107257168fd15a7fe591706d728049b1d18b8f90969a6a51cb6230c15501a822f0e02f5e2ea481cbb96af30a8ef34905cee87bd5fa4f595986ce0e339716408576e1d5ca05ec7f845a8aebe9b24b5177c6b208c663adad9ea96f122c902833496505b1ea15185fdb4d4d7616c541b5248d27e7c23d61e194476dd8c087dfa7c017b8605d0d33c9a14aeb2201709c24d13db449d41bb9f6bd002b407fe39158e3877f413538bd4d8d712a3df1e06e13865d18a0a6e08ee22201c8f46b22a549e1a07522125352e003573658e93d7aa90e7f2af9668e9378ac8c050f8489beb744efa75698e0802009f30173e102a3a4bcb29aefb2c9521229e89d1549c4d3949202b4f9446edf125d82800329408548d1fc2e60da39be98e48cc1046875476c2940b3f82ea5b8bb70d14e5b9b232a0bdebf4a7545ab5579bb00f9fd8e6ba9724747950fe7a330edddccebedd1a06ca51ee039cc0633d68b9e6ac028155be29e1a86c5f6accd2c095413ba36e23a98dc415199e23fa4057e1c180a848c5d7b6a1b8918808337f725723802a0a30873e6cd103214310ccd228ed7ab9f788a36d5b1c89de2c55153e9fd9891408700a3024e41d4432e1472867f881ed98f7cdc0f7d5068c65e51a5506fb0278fa57a9b2a09b1ec3f8512aad6a5aff93444deca039a67c46a40eff7d2ce1c3ef4ce080a12752355c37c9a71b792184cc584235fab2504ab9f4081c046656f3b03fc17c4fc8a22f2ac30e0b142a6aa00b4c3d6879cf185dcfb1d7395bc23fa6848e78e67d1fcb427492a38ab4828c9db329def85dbf98f60c13bda7cbf8233aec078945a8cba49013e96790f8c7010bbea3e42c59ea58ca7c7db9ba49da488bcb08df31dc7773b4aacde56297a82dca57cd26588b6a4cf542c3e005a2560717a8f07e078c44d6a16a4c1334e04dddd9cfbf0e3c3ec64924c03f12db8b7890d48d99b2e3a6f7b3a92214c0dbbcc1e9e1eb13bc6e966fe57cc28b20205973b0e365a31a9dc0c3281984f4701dbfbb4e401279e26b0f0c30391776e07a482861ec3c52f5005f58c27153585fb8460831203afb76812fc88d7d2e25660839e80e7fa26ce0f89db362c8c03da6d054914053519c4c15bb56503221c647936a5179743e1300e08405292f7bfa901776f32b9263c0c5e68e6ae6f2f49a5e6e20add4dfa1ca0c0bb4be4a6023d134420f341a1c98d166e3ba63e60ad7d7268f6d5814180154f4c8114f4a091ea7bd94ec7e86bc503fc41d7fbf474906b13935d897d7137d7700ebf7d509802258adba6f9186bb0309e3fd6480e57cf09087d41eff6822359f4fe1f6ff95c40703fd153e3596f89a591fa9ba07d3a9373f2d3497eab65ddc6b7a68473978d34b4ce234b6f3cb724bd87e42406a4c0dbe52af90bde4cd93aa10bad2d8f4c4556714594bb167058aa73d0d33c85d4a262471899b102d0c03ffb3087eeecbf180c0d3e2e92ac60cd841157cec0a170e850753dd24f70210c5fc21cd8394480d777206617e9b465422861f24cb6d104f69c310c824dcaf9eb659c24ad0940a021e5adc73008230eee4f4cbd604915f7d5da2110e0eb5a00cbf02466406022c2574d3dee0be3cb58c545dbc899138f6445139b463320692a483c5f360ae7acdd7b8c8d57f924dee442c67ea7739318cdbaf7c101f3cfa8cab89917aac6e0cd29771d0b773fd9935cf91fcaf5dc47d7ca90d93ba8a4fe23a3d13f3e7793070ea1072d97462e093d1b37550b15806fe41a4052169c7b0e447e928e72a9af63a05aa3511f71a8a132f18968a189b3427dbcb509eb34777d6cee9b5c43baeae89379ee85f1a470363e613666c427974b9fa5a2aeadf286c998d7ce2b25c3608e86a07c426e0d309423dadeda397cc0d2213d3d07ea638edb75f17a10234852db46dcbf200442b6627a67819fe61f614c19071dc7efb0cc3b2bd7f87544655c8762831f8a29208a45b22eb3abe440e54572d48a23f5786d9d0e9f779d404428992bb9438f1ee14985eaf20c1458ebdd9f9074d08c960a0012f2143925c7a3e6ee9b016f606806cdaa66c25fea44146fce439ce174e52a7d10906795f7cddca5ded10ceb78fd2c0fce16a94f089aa81b0ebe31a48f718e5eee96013262d132d73646ba57064ecb93e8c07aab53a831a578a982dce273391f48f55ab6c0cde71366eb7aaadc0c34b54bd9e1d46234a766c130161b0e7d2cfe411976177a58d552c58a3a66b5a57f0a285540b156a9d44141fb4931b9ff333a4445c5a4083730b902b6d0bd35f76935a03d0a3d4ef6e58ad58089ce8ec1f7847b9628ea5f51abe816895782741b3d41bc2b3d44aa31bc4340736c61a776cd6a063d15b28326f43d6232a12b580df8cfe7f9c4eec0beda98a1872df102fac440057f12d9643c556620bec80274ffced8193648aa5b051f15b67e20621a0f8b32387e1e03b48b83e4a8de77feb410f4d02de5adad155b8077516c614c2079bb7aa730d58ecf3fd9eb2cb952d14cd9bf0b7e97b034c07108e0f6004cf093a27ad64a0586657c64578732ebd896cb530665740daba5281542b66794f000c593546b89f0409b46d5d4d4be4f1f7cdeafdd6145c19c6afe6aaf286a62e47ba019ea3f840673e85c824ae12b69ce1a38b58f1c77843769a4078dcacb7ddcf5c1ca9bab2e893bd4330afa4ce4b2e966b61056ea3278c9de879dc2c3b1ce9c57b9aa57149dc9220d8ad14ddfe81285f9b6ffa9550147bcd7a2d79680e9ff24cbce045e28cfd65ff34fcc7946ac517a243af5142accd4cae01e735abe13deea7c001b96e2a6c57089abaa93a3b671e9a9253c88eac49236aa2e097c5effac0f92b1ff484e82b3ea08ad47292e8efb71d80bbdc98a235cc847ae4d2f6eb52582978dcba61d8333bcbe9fbb576aa00e7c1405159119f1c0af8134a18d8ba80309e63dda8c0fe05d4ea8bcbc19f034a027d7f663dc3422a7973edbc341de4e40d6d812fed46a9022c663fc10cb2275b45f8da4af80b08163c4c72dde40f9d3e89032f1823b97a5b975da9065e0dac265ca8be6d6a990ac47de172e61f529c9a330e24c4d461d8155032fb8389f370fd0cd018cd864c1aed51355f2f777a0367041c7c6ee223f3d9c8a266040c612b37f388139a8752da2084ab1d5cd78ef60f1aece08e894b55e70f411300f86829363060754fc09ee3a39102b879d668aac64e19f9984f6de80883e6cfe8dba28e56605e2378c0ea689c9ad5b1fc1fdf782da0f54233771c2b43425d7416d9578f704045aa6bd7a07c6b6b9b2b2d87ee056788b0ecb43be8afca4569383c2e269f2b6fbbeb21661457264bebecd44ba6fc8f52d8757e43663108429c1639e58a3d8b9ea0fe10e481b1d77d0fb27756cdd104cd2b96c31467be106e5b371a031395f94991e7b360c76a01710e1157f49ded9216b23d003fffb76b87d31e45e753eb6a69656995957f6876abb37032f2d9e4449e2d575e1515aa7bd1ed5164330a411445035f83b43c53149ba2ad61edee20064b7cd208ce5ae0e874e23fc405dd03041b5b7bd86db449fa159f1c21b4afc538a77db44543c27f4b6ffd82c751972664312f7729f8ffe058e03ee4f5b729f8366e13d52a31c7a328d4ef086e60f6cd01c3d420b22d9cbd63e9c0d224827779628825f66451e58db502e611edeb249f2eedbfb3bf232f82596c2b0d66461e5c2cb320f8e3bd6215a33962e8a82bae605284a565528af80b0825781bfa5837076092104425b8f6c22d3929f844285df30b1262eff116ecc7d31a0b18d5c62bd7dc138b5462fed37025e14a8c5cd52f6c77d5c0577053a291070dd604f25316048410df82c74b79aaddaafe539b1201c8216bed90e31f24e851df926df50ca37004c94515c26c7175146a1c8d52a2a2582918f75723ddf27c61dccf6d63c50eb52badd92707d719c8d575bb6ca19db761f2f874d573147eac19ee263b2baaa214b54855a3342ee3c4f040deaba1eff87b248223bfa1b390d534d233f1bfe2cea30bfbee52c6633d4a23b996b1d9da3a440f55876d4d7bfa43d54a0f2450b95004055405e5133eab9a1db3311061fecfe2dbf9d91c4b4e694c08661c91611f156a7a360f3817f6f15a58798d1ab10de163cbb22a5fd9ecbd741248ecf9a37fd7c1516738ffa48e05eb42cb7f08e5757bd005954f431f1bebf49c2425b16142805bc31a6e5c3647c18b38942d7320d30d59ddf9d1ad149b3a7aa9fd14d3d69e1189ce1f03bdf091b62fb9dc9733adafe7bcbd68931d222a213c34bc031ff1d47fcc65b98c7ac72e9c806bbfc921068003b71d71b2086b121ceb5ae40af754885ad5b89ed28170c66746276a00114f31b98b4b08cd1e1210860698629511e3a2543ef3886ed118ee2cce0e9299b545c3f0e2b121420e4fec777d19654fd912a825d199764442d9693445428941e313452c9ad99f0532cec05e45b2d42ae0439ba0c386be20e7b6b6d7e641ecdc1e03594353eee90f57a5ac246fddd45eb55dda63ef112d23a4b9f4eae580078710aba23f607cfab2e1ca64581b507c9c20c80488f14b003ea5b64fbf9af249d7fa43047f6ff127d1b64c15ba20ac42480d016bd32507ae731f895506970a40b3990e8a0fc8bde0ced26725d31972d9817c759068fbad8a5545a9c43f09b4330a8462889d164a10c3eb8ceb36b34147bdfb5708939dc7a65ce969993b96ff25ace26f345f0130ec5012dc5cc2d03b07ac7a8168752f4f05c384d5c29548c521b8d5ef8cc78ef4c8090e86e28bd7ee74417aaa14891f1309b4eb2370d00814a784b452ea2763dc380063662ba282b13ee89bcce724bbccb5b8abbdf65e066ec1de33acfe84e366f81dac6aff808360c81b847a2772d5b5ae13b1937ace60b5f4385ec84b09f839472e6f946596dbde1b08fef3aa44195695db3be31bc72442d22506f3273ad9dcca1d65d9360310781f08e7ed604c6905e38c41d30ceba634383752f7d91086a7aad3d07375be0f3aacb52deec21dec0f2c7d855d9d59620e2d37106bbd7487a742aa1d23cd851751933e80de3af8300a83074a13d1444312f8036d9f2e4256b6579bebba7672d0de46849bded2f48170c77b530312324b0249d2854ccb7df5e1ed697eb8fab4102090bf48b103dce625149bcc154849f751e82d03209c7188c306c7f4328ea51729cb558d1200599b5690079b6d5c8b6bfb69c9e009b1f16d41a8078dc1df14c8f20068fa246f75a7ae2304ace0d447121b83197e328831b953cd39f9344aaa8c50ffc806c70aefdc0c19d385bf78c0d29a9c87a94b3233bc6882249f81275f426e268ddc045a0f4a9ec206b61b6ded41b68ce8eecee4a903ab51d4cc7dfab9e87d5659b3b3d010034124ae467a363a371a43f7762733ea6082401149d6b68ecf5bed99c6e952716e6a6cffdbf7a3ccd53949410662549f0cbd5d89cdcf71534e7afbf6acdbb403c921c35f052e99cac04abf12767f02cc44dde369677fd1ba8ba95d719ab3d2afe300cb884a2f4eb9d5f835e072da4e9269419e03faf2d397e07bd8ed5dc1dfef70e2d7c10deab30114fc13b2c57e2394760edbaed8976e887fac0723054f1a3b7ba29b10eb61588a3cbf2aaefb3363f617b40ee0443b21c4ba5825749c78dab0209ab12f5df184df5ed6f8fc788816079394a55269a19457ac99f86bb8da5d2766b1fca1aee6ddc2b9decb59961e4a0f9925b9f6839fb67bba687128e4a1da3783649e6443bfde3f7d6173f32cabe3d2e335f6cb1ab970eb37b9a27ac7499ae5809aa5340a63aef294da64886b484811c351f5a099e63af2e5112523ef24fc0c3058d2cefae1dc53ee9edf0156d282a58ce7026c0d108c93d1bd2a801b1336e828d5c644054addab07eef509a662dae4c891328f17fc7faed91869aaa6280eeb16a4558bd6d7b85267c23f5f1cb1e14a34beb98dff0a3aa9642e978864808af94a645df95da37de95dab2ff279c3b313074531010907e2c0ed30da51fdb7b6e97c532179d5855c7a16bab1718bb4c09dfadabb30f4e62b949971ba86629f69d1fb9ebc601299698de33fe1b9b32ba3a3657f9a9338d58fe8c6cea67a8c4f3bec7320d306fb5fd022e895cdde67bace28e631416f0e198671d91ef782ff012efc9adf3998ffd554940003bcaebc92da7e6640f0e316a0617dd5a7868821eeff5af720c4012e686818cedd6bed7f23b735c80c4599e42ac419c832490bf1f60f12726f4b5fc626e0debd9d438a9e53a61e129b836b9b542e88138225277a692221ab4eb10d1e4e249b70e3a62691e64614e00a8aa7328c28f022954ca2bab62670ec45a563e6203f24ad0ba1cce71d8ae81d225b2019dc7c5cabfd94ba7bc2751b5b9d5a0b6705ece4c118ed26c9cb5385c8ad5f82b74de51e35cf9aae607ea47853f209352742c8a4656a5af0eb7fb81b088fbfe36e4ca2335c5e3248e23c6aedc34a683079288b3842550c611a0e526da7a050d1a4fd9fff28259b0f12aa1bec6895bc82009d36908aa3002b0a22dee98d66a2a003a8de487612a41d5ab31283d558835e29d8dee91de408c00419317939aea041bdcf06c1a8de43cead5ad0107d382fecfc4ea5ba8466bd2bd2a9b9912efbe9a202b7a8009340a5cadb59b09d1fc0109bb47d760d3393d962187f55ddc25aba1be53aa56fc1b08725ec9e83c156bfc0a1fdbc40d4a653b6f07621d74537c1ee8a6d6426f0c7f8e0f351bed1a67da1b9130d07ac0ff297a7ac2ad3fd3ab22695f75c26ded60a06ede5f09f44da195ebaed6d4ae5f614330703ac5ccfc9e140276cc84c62e9682ac5bb82e8658c180e37929c882e46c4186b4be19792a7bf0860e5e90b5614fc15eaa85c4d8b4ddcc394104627bd7dd5d5b53c3ba9cb9ef8853f47d2a055711d5f5c49668d95516310008b5c4f1f36e4541e87b3a2b9de45b70b4e6a5202e5af4f14a6519fc5ccd1e77652467b362f3938c37df243383cdbf92c3b1b2691e56d93b69be814e859a7dccfb6c3233a8f646e47d3d2a033b64f7f9dc427e43bd5f3b90b4ded87216fe2ff05ebe28c613836cdf30b71274e015b32ae0407ef1327c12586a0b24e4b961eb3c09cd7a364e999815f49d8870f21dbe35312b5df88046528cf6c8ebf4e5a86ee6ca3cbd762b16de2897362e1520016549755c8f4ed35a5b0fe9a5924e99a089a8ac7ae897f0aa438076e0503aa0cbd2cfc064ffbf741d3ad674464eff019e7424e229ab25083fc826b83ad606cd5a65471b7acebcda11032fbda7bea4b81e05b649983fe2030202fc94537cae88be4a6006b8fea2ba96152b2fc048c83ec8ccdbd546aa71a65847e8020621737de63a1616e35cbeb78ea1081ad632c2aadad5262edaf1fc8afeb28a02efe4e8ccc4e2b32caa57a54cded2b99cf48d14efc53d896fe665c79232f92034735bcd09828538efa9f40d8f5e0238c1b5c6c2bcc485f816cacb387a1c18f538c299ea9bc5feffcff3057098c067d6b7cc522208a35d92997a40a9b658e19fa775b90f9b7bb02d05276c185eb20b99833ac0f06855e39e7f6cb9e3bf9d689ac92fb1da4ed527c82e343aebc5493b70ccb0e2d0fa268267646bb22dff0eaaec208bed6606ae2d5a5aacc523d9d15361f3b321c30a93aa7586e549e84a5b62add0dba0dbfec5c48ea8c522ff3871759e6fc7e38e0c2a3d68efbae4f6b78414925f294a3eca1b270ee7888f9c503925718ff15501066d5cf596b90fea0f79627c22c43f211e1a1c83ef5e25a4fe096df4f3174ecc300af0466d4ca75848bb9b309d61310a38701f55d47154c6bf0318ab1f12a2d0f6917e7cbe80a0e60880fafbdcbeaf2a4d2c68ee63c43415304e925a87b48d0257b6eacac3688e6316545dedc7fc04d538ab3a99af405b75fc00dd71a6d21e58a15cb8fd7217362ffc44b9c7b86d2702d8175241f48e7b9e015767ea60e54b193575620d347dbd4fccd995bc36d9002d84c656a48eab359cb09295b3676f2da9b45aab9346af02ec4e2454dd060d850a8799fbdd9fc45df8110b6090d41332a3eb472332336c14257237150633338348ad092ce4bfdef00ce468f0f0891fb5fbfb6d727ea4583e148a79d20e772be98436a7f591eaffdbd293a3616c84ba323f8efc94fffc423c8c194c029e2a9bb6a86a07994f4f2514834fc09ec7932150a8bab55e55f3f78dbe88f40cc2453c97b63b6382ab2a959729815b3008d15d6d31d84af7dba237c0b44689bf62cb66e92aedd882da966a94e9dadd8a4ee699cdabea32bb16b3941085aa1cd77608ad4a244320af799509ae97435d021dfa1c027ca9f6374028951cd54ebf730f67608bbc3ee8a9b03d59121107e0510dd633b88654a1ecba6286b8e11cf6181aba45a3c196d99809b9a2e1668ca2ed0382b4812b5e3d7d2cd4fa890a3c725db5f90d36ab91e6d60df7d033cb344ccb8f06c33ad8adc5c94a67dca7553a569a55086a376e0398482aefc17eb4320caa90263b694efa0380a558155c8ad78468e384e5ba1cbd4010b61a335ca7b3b0eed8358ec2d5f7b96af7f401f3279eab9861ab938b56abe302f44592c19540b80532c0dc0284e151e5208b525c01b55a71e2a9417ea23d6edb8d358c70050e8223a87729d8ee6a05644212f854c9e2570506cb29405975d026af131cda706ec3bc2fad9bd34f8eefeaea63e6444abfff5d5ca587635ba708df63ac989a596767262573a45cbf51cd1e7ab4996b8586019ce9015153daf65b281679aa2c1ee1af6df90a4bba060fb33eea1999bfb584fcc1caeeec362c91907bd50ef361f7a2b75bd95e23f0a4da1509d8eda3bdb9f6ea64cb95ce3e08607ce7602dd0b5900f7d93fb984fad9e481ad46dbc83d284dc12d70ff9b693bbbb6dab1839fa7f7ce025584cde5349e2b3d3476812e6a2031c83de8e3bfe881b821825c59b03cab6ab752f06a9a30a7b65de4ab21336e42582e486c8d48c2da06f1a28ad314d4b177cbf51856e91580e8f4212f8d6d1334d709fde222f8181404b553be5a2660601c71a031bb6151b5e03d44ffe32937e9b8446826c5da200bf76d4b97e657ec5ae824e240532fd6dc723d3ffe25ed82447275cee2b16490ae89fb63e225d1794a77615d0ff743003c1254540de8c828e219ef227a7d556b51f9f3fba54bbf4d0081dac5f9369e940b9f31b2f4866580a50dd5ab9247ec4189ae0e401d85516a2534e002082702aae996527744b7db7a13e67d5d639e0c0d084aa323ec8331c75220fe16205411482da3d1e019827ce8fa109158198857ca736122193e8be6e608869dc76a25efd2715a31eba1c9118bf84d61f06f23ac6971d4e809c713ae185f6c4c3d80907e17098b739e615f0c8dceaffe8d346ec9348280cbfaec969d577aec1845980a3801a01b30032b52888d91a89c803f3d0fdaddcce2508e0452d80a71d28793d856d5d68e192b650a4f7a8006774739d203be4d08401843c0e8d974e6122b9ddf380ebf0c6f8d88d74619053a3a61deb9b9e14b170a88fd0080668e0f4518dd19a45671bfd6ba5bebe79bc486296723110693d09a35b3987c2c24a3c811e48327c1d68b7817dc4fdb9bbbeb1b3761262039a8dce37b52aad64b281dd2a016d6f60fb061173698dfd8d141859a3d896b9bf3736334600f23476c5098feb64513a539e5c3b37d1c7a739a827118b2dc9c3e0784a9a8ebbd4d33542cff285eebb95997db777e237138aebc7ac1cb6c5328101fb96681d2a2210ef63190223d909e2b1bcac4790ef748d5acecde4e0f7cbf243c3772a37b48c64ba6d435a47ebfe4fb9cad537fe49d4ba07b24e51fa1b0f1fa15d304773c41b422a893346246de80ca71bf3e91b5f968f6c9951419ec1849c92a86bf9fa69383019a11dc9e7e5a240d66efb76c31decfbeda93345b0dd395069d54d50a0a24ae401bf5132d85f252b358219613d4cacf7ae0227ec9aa5c32c8f304d8bc38124dae220e6ac7cdc14b17b44b1f1df61526638a1cb9a289a3578cefa650173c594f8eefa99d20f9447748389574108718098969bc2f03fbb94e3ae0ff6e26ad6a774b2e606f16f0f5eaf6235bf1adeab6a898100f1ef08639e018353d015bf9430f222bebf6bdea7625d180fdbc6c159ec2e99ce2b607d827dab9aca8d82d6db302cdd23784d8002d50381a76e772b0eda0952d8d943918ba06a22ddb3028217a07514dee8d4926486994896d31b334497da11aa28aca62499ac8d20fa0181672e057d6ad4ec7d5e92dc4ccc5d5168fb69ed4927422597ede5a4a1bcbdf6235f4768aadee99972e5c740d82784c1268735e830001033345de1ee965080f35e6668047b215da61b228af3955d0d3b2afe68c4a1c2d823e229bd0aa41568f084571eb4e175003b8b502390b628ee22102ca746a05dfbdac3b65e0c9fe3ef901935e3662f4223e432afffda521d27e39fa585e2bcb4de3ee496daefebe35951a642f22fbd06915f7f3d20855e89891656f95397582e1b8aee9aec7dd095133e45cc0b246e4adc52f71926aa0df1fc00e221a420e7b3e3cd19743c55514331e034388cc0ed3b66ca00b8c4cc573c5da5c0a0e29ee675e55006fccf03dcb4603c595f106c3dfe1a7f0c2ae038a936d32baae170d13716b3dc99f14b73f8277eb01b47ce3295bcad7cf25d7a549bc1187cfbb639dfbfd38392f6a0c425e6e0ce38d4650176458fd2cd6bb9a7041c81e53239d723331bc2da7133fe43664970341b52259c5e78e498e91fdf8aaa3094ef26cc0da971fdc4705be042651b252e5cd9faffb0ec4fcad2ae5b27147e723c9f079412aa69eec1863935d95d89203e3aed25924cb82e023e94b9a290ed16ecb0c4b6520563d101447413a2daf17b139a489cd7f34fbab38c811013ed83dae56fb7a085f9ab3379c86799ae0f84115853e7f614d62496d5bc29a62e3fc4665090244357176e5c65770ff50766962e886a72811d7e55cca0c3078c28fca0393ffc62988f58ba5745d72eee1fea3ebb22f1e83f40e712cc7c6305079ea6ca14299cb8e7db69ab6dfcd818497e01082d3bd4095e3b449e44c9f595383e3e1a42b220ee1bfcefee013e9a79a9b064a55c0e5ae851f4d2717dd6a02f0e27a2de44d8d7dbd4a8658a10e6b5fda32dc96a7d804d7744982be6e022cb2afcbc84dcf03f50d0c65d36bd4a7e665ca3ec52711c39599cce7bf1b03bd4178a6308efd531556e0f9d0fd7f74a487205e40090c8aec51dfc793a002195dc2e6188508362aeb34801c9bd3dd972ba1ac8f35c8ef334fbc293767ad0e1db06b69ce67691a16a1a5dcabee11bf218e36420b4935099d3609f7d7672ba95205b9c454911ffb7382db9b6ef7dc89d140390d24244106e3f3cbcfec265125fa15bfab0885025197b3f3c81b0f945810bc09d6f9393b30765cfba890030b4b7a00081bc068fd2b6f7e8bf9f971b50d036d391787e1cf8f3c97ef463e80589ec0155d48ccdf58608ea5ec0358e4a7efff6d7f7bd947cdc184b0fc9c22723e404ef915c035766e379cec645e6333ca0e2060e9eec14fa19655c6072c2130a6c64ca7c2a32c9551e5dc6786f913f03b77111f524af3f02dfda3562b5d46689031250778bddb48453a623096cdc0f67f7b4cd67cb95453b7dc622beb9d12d1f3f25410180b732eb9dcf6cc6c6d5b51878e476be95bc87df06d91728344e23897953a97414796f275000b9eb7f11e089dad1e3230722aba960128e47289563fda6d4ce1878ce3b1d8d8b07e95b76490370b9d45374ba0fc60dba5dea6b58462989af71908d794cc1d186f8808b077b1f4db582849812cdd38fc88adb81e86caa723eada2214179177c231e4aa42f4feca9629aac4d6fd45ccffaf145843731acb4113399c828ceefeeeca441aa6a2d68e8935282c02d903989393ee3067c130da2678a3908636bbda463f9ecbc0aad564bdfc4a460f5c9216c5699904346eea36ecee92f6bb1501a931f1ee19ea1152ea16cc4696e914c169a1bc70af06e169e05b99d056867aa155c41cdd26a37ee6e66ec4b53bf68e4fabed90932d7e240d1df92de2ee8926b22f4693344607207ae65c9e1ca986f7989eba6becff6d8c9e037e047fd95c7f5c77a86842845a1ae7c7855d584d72978bb094d8918b8c8f8e223329cca9e9af5cb4bccf66cd7215042a664041795451e10078d9d2cf735de32c24a4e7d6b1771962138c16c967a578469c9e0e2ae9b65ba095e4e17d9e44da139bf5fc41963be7e3d4419a30e954dfca49feb01727a710c4c82535078cdcd5d0de29370b1b4a5e242c67a6bc2cfb9f67caeb567fbb59999e39b9f0d6f61b90f45733c5ea4858b149e7d9a32c65fcb338461445820ae61c87b9364787ebe329f9b404850e1046cd380b36c7202226b55a9d2229c91808cd1679da2b80aa73137bca3535cd05f239a5c084895c29b23a8943d9d00eccddffd5b4859054c6f982e06bd4e8002795471c75b0363bf64e91a0a1d7770660177e9d90a7edcfde30bf721baeb5091173484a9f95e38e36d83acc9739326575cf70e4fd31610a795d55c992182fca28904b9594a09ffcedb4866bb2a23ac601ba1bea2f6a827bc55b0357956e750f05df09621dbc407c3dd636fe4607e1ee22c5755a3e3f83750f22592be26932cb32fa353670421922e4997e0c17e8bb1a606dd1607e0ba3600b8b0452080d6ddd1a6095bd5677790d8bf9eb103a24c22b1ad41e77b67f4ffec11c917ca10917162b34b4163cb7e4deedb6a674db396b5a5e1e54a1efa8f389da4d94e7eeafb7ed6dc694c04785ed5d4f8d6f51bd2643c22b20600a5a4d06c0efa8b4c3a1356a8987505db433711971d8c100a1f143c382e3b40acbb3f4dcc08061fbcf068dea547840c01c7ca885440c7298deeea68ec73c881049fbb517578da74d8f09825f2f55576da1f3fae2585bd013904e60c20b1f68cfe42d14394b90d214efab774964f57c2235d7a900c4ef0a26c5ceadd243304a9a8f773bd92c2ec5af7248e36c39be141840c49a37c703e98ec6cddab97ef15e85121c5677fe4454b940741cda6595c4ca762126e0ed559ff3789f986db23866e3f3d8f1de2154ca45fd30b31928a48ee18b3918b60b291cc232b903444d57d667ca5ed09433ead018aa31a3caa41e610e66d75a9e388328a59433e9b8db6cb8e0adebb52f91fb3f5848dba5f05f45f8d370c746399a94948d344ba8961fa72ad3a580c45e5d4ff394f293518e3308aea2f2f7ef2ab82a0a9a19e062f95be60454c83619e6e997b00b9d77ade6ceb7ab1f889af7a995bf77d03bf6880309b81def61f05d965b56f89d7cd85b82a7c62d7336e20fc17ed110b8cce3006921b3843e1b189f5ec328e57cfb13099004433d2ca48de41a41bf70ec8a986771a45b70fc16446ad2775cd3564f896845b151177abaf2aabdde14c0f7a12dd69d7d350e52d4c8e3989c6edc6398ee36cd8d2de624eb2a53d68d11ebb47641c347ac13e5794b54a7a3d719c14158d13ba424217fead28a72edb4ec378da6597907cf497ab8a7f78bb09ee5161916eb942c30c7587ef0d9564114fc1a1d51d1fcfba0836f7bbdc9dfed63589c48b2e9ee7efdf07b95486cfb8f4282b119a2f2f2084d4b97cde54c628b75ffe0e5c19b3e74383e1f89b4dcfd194677a3c6fb087d9b2b4de2ce384c39029c9aebdfa60b8635ffbfebf007d7ac7e3e4c86e94a67bbf488830e27bd08377e0f252706df0c557a7d78fb44adeb1bcb8489fde21ebaf43678fd28f7e957347d180efc1e42cf57f9e2099e8d0f09b5653d053ba8bb25582f530505b834c3f961d8f9b8a093d31f78c78ba8129a323531315aeb5b65b433ec95c11ffaf901077bd0ae21409758cb2d5c499ab2a861f7cf1abc8d663b753653cd7f2dd523c9f81af131b3e5ab8fa0b1552d7a7293004d0ea9d00f7e37dc82033a53369cdc6014cf51e7d9bbd769060e44f27669c466f2d241a6462895dccf6883e54277bb32a99c0f6625ea82b2eeeab5636d25a535fdbdbc333f024e1e8dc516f17128c3c69f8483db83bf062fb748689136ec437e589d58026b2f536a352a70b5920ff89e92bb964b110d7f1467588c9f6ddfbcca98eb3fa2f66c2f92ed4184bf698cacb29fb088c7a8e5274d1e4feb437eaf6d3748ae99429fb8d8c0e758599aa017233db8d2c1d3afe60165b57a031417dea11a0d0ee9ba3d70af2797ec130ed1d2c0955f5f12e72fdb830d90c9022d5bc41839182a39c9d980764f56f2ddda917fdef9009d2e0004bb17fb5bafad869f2be5e92d4d893b0b7661ab3bc8764761e4ce77e2d359e317600bf18dae87c0fe5954eafe0bf96621b760ce3940028071e2dd1f927ad766abbe4d3dc50cef5bb8a385a04678e0037fb08e7c360a03f5a326056d623232424f78fce65dfa24f13665dd12ca1177d1b74b63b4fe98d485dfba385a0524beac389dbc33b9efc7fab9d0f67cc07e598c3e42f77dfb0b0376785370ccb7df4a1ed273c0cf72729dd9b9f538099555ae882a3fe1b06e40765c632242163e686178fa517d029fa2051da816d5e11e5cfded2c5b7796802259c1a10b620658eb9461d85e0eef133db967d914f05479dff0d555a7237c9d38ac3d4b35135dcb67e6842ace1cab9f0321c0d5b178663f49ed65817be14a2c07480fa4895623e73fc816a4595a7f440a27030abf6d8b3047e0c36186de872b9246f71672c6fa4544a046e4790a958d8aa7a47d458c2b09a1089f11091a858a513b17f454ffbbd6dd3099072d2efab79885d5d46ca74b50531d218eea0d35ba4c30b400bdf3bbd21e4cd149e171e4ef88b45fc2a987aa801952db9d8007f4372ab805f07e4d0510cc4442e8cdf477e12bd9879a7661d00ee207e1fe95c405644a450bde0e2764ac4f2e4d8426af96a81faa1f78a8a54d164da04b9a5fa68a6b8c91dd04ce835ca403fe4fbc30561b261220e9c36497de1e735a58da203edfa808a1d3d5fd5f6cbfbd234d75ecba7a04ed314e2844479426f050f7793f6fa0571b4fa9dbcb50d251b7dfebe72cd0c3d6f0009f7f3b2e18ac6cdd09e1ed233b62216aaaac170d3d86418ac9f80b78cec8478ba57bd83e7d98be276bac7b48f092b30158ed37893dd7d616b802300a54ee84c6bc391735ffaadc808a210f30aca2e140306c171e85428fb85165d00a896026eebad59f77ae78ca7420a6b0b509505914ce4de2f6e49c574cc1ffb45ea1f198e697976a1f31b417b91e278b04d161d7e2221334e97f473c842e2e3ace5c6394fa49e42d8cc01e3c8208173740347b751c083bc6f51cbef46113464e7559eba343c73c46909f343c2f42b779c43bb5dfda93180cc62a1a37e07b00cc2305747ef3c371ab27015088276c6e71f4c72fa1b99fc3b34af8582aff0787ba861d2cd959269b8dbf9d2eb4fc513f44b96e1eb955b2ea93b84301199321ad575e9aeba6d1d9058dd5d12818da99c43047c6d38ec3cddfab03d190023a256981e2117f5845b4b980183491ec30c3434779e602619a255c2abebebd8d7718f8605b1a59416bee0dd78db8b6e9071e63133df69ff44ad9da466d8a50d4a034eb80869bec8bf65b9d4b97a8e04cce82860bcf19dc09fb3a00c519911c07ebd7fec10a7c0ed32d76033d082b053776b3c1a9d80db379060ebdf27ab659a18925b4e5a76a71baada13c698c669b3635c0ae1a8c1afd4318a60ebeb469bfda54ff16c61b981ca8ce1f621e9e73b40d7bf4bfd71957b7d6fe82e046b081d9158c4892de7aa4451337dc7380db0e54502bd5eef258be43f9fc5bc128fcf288987c003b83d0cb9c2618378f113f3901742a4e3fecbb682ee39834224f30eb7277e5a6514546fe2d454e055bc2e04d8fa0784da5c5957fa79846d1fe7b765aafd554c5766790ebca2a1f167f50f6ef411e2f9c60041254bdffcc8a4fb90b230b082d733aaacc97ff42e28fe33bceb00d7c916bf328cd529560574ea3c8740f51f0e21c365539b861a4da12a5e73927116a96adf7ac95016542dba9e5446b09a376d068db2b1b60da2539ffba1955061700782cfd2afaa72dac2a9fa4a7a4ccda5ead8daecee2b3214b06ca7bf9c8eddfb54a987783097241d2f05a47f327cd7bf6eb9eac9005df6cf0012fce5a1820f6d60587f921af7b0e5a1415d08c334b49e87b966ca3ac7b51719d658ad8b4fa00299e6ebca315c2061dc001249cb8be2a53a3f3cd724c20c451c11559ae41b9b391c831a360a96cdc574d7bf863c907397055f6574aa1ad02cb88162442a8ca6b19dfe244db4c63e3c3d71e246a572d8704009134a3cbd6a5c8a54c89ce300af9636373c910034762efe80d2044bcb16b98bc9ef3075e73e902453d2d951859caa553b905558b7693d50a9046b4b5174bab40b8fe88168f627234bff79e60e37867760b5c46d0cd3cc2ece7271a9b62f3a9775d9c6170d867b33bc1fb61941b24fa1a84e5c9da3fe10f3338f44187d2c3f3faa93aafce2420300cf003e5c0ce81d5b144e4e1131d624086fb212f5195cbe00a28f912f42843d2db70b5e166edb355f2e5643f56be8a17353cc1f917d7614672a219bf0f9c84110cd0ebae1e6f40d5dd84beaf594317962e1a95f627fd2af1873a57fba24d5e976cf77ba3016d305cc9bceaa7ec5f397ae12343c2bcb249631582680b3beb2a4f8967c80616c3643871503307577000ee16561ed64a4057c321e21ff258a797952375f7f052eebc4e67a14d6412c000e25c4f42d3ade106ae7772ae38aa293a78c6838f6c4773211eed8a53de7d30a5575209b8e8b8be55b409c03460733c53907bee0c8af473c79a3df9c134851bc476fb4ff247046c2d3c51506f91ef113d42e90d7d9641e52bb28b9639c44666c526612410c97137b31d4a0ef5b02d92ad195037d27403797045335f685049c4659babcdc0283c065768057c23a70ec5e0af87a4ac6805e1d4814a940f91ca07a3bdf2f05a36abd4703d770517bd4289ed4550f6a8b3bbd3a2ce40ec055c37422be3203a38e0d48ac1c0413ae74bdc5d694be13a9297d192db938789b3a4e6071eb395cd2a27f3761ae38da3e3a21124f6fe7ec67b4f449dab019a138e5c0629676af46484f70ebcc00ab40959815fe7cb3677d122e2239ddcb82081ad34b2841c5453231ef6b3b44aec98990b964848a4b733eca97c525f162d615b563e5f7c5ec63cf274ecb9bb54e3ff873883143fb74e49ac0982f566c7d0b09d3b8ac7d70239edc109da148868a3fc3dd44113c0d6704b3143b1e315cde031a9828ab27da665d35afdf48747ec091d33fb3ab43cad11bb2d8c59c42218369ad1263358c734c46e8934b3c717b526c3f8af06714fb37cfe1bc8f68c5ad4b6d4e8aca03c34d982431990bb007e3dc09e167dfe309b4cbe79d728622cb9fe6e611b251af214f7d0050359651223a8659b019d6e106ebe776e08b6f3b07565f9c160b8b98d7635c7bc9b0c6d5ba78023dc8022716832121e01b7236be5d8d9adeab3e46c2f34141efb2d9c4ce92472f92a53981c005f73fca32baa6b06dad563c20b32112fcd0c08fe08474aa192fe22350b1334e81b1fd3bf48bfae520af1f2589251e9829180646b6be40a8425a17310e6aa3d63bfc22fad3229b994697b31aeb74714028ade89cd9ceae04db4aad355383fa46c9f14b19f687972dabd46827161eeaf7bc699909ec60d5685f91ea8de29f26a64e8dbb497bd10e3c054526a170ca890f53b2127ea6eb289b8a3ad2addd7ba0f689cb6023eb5f0862a8b9a7c36bb1241cb97dee3e5e60eba21a9ce38ce4e59c8e939d91cced00a3e056eb43a3b497e63415c318a2deebc68c24faf8a5c039cff455a68a4e5f9be83cdbef03189dea07be516e353ef99d22e1ecc9f3a28ceaf1d1289e3094db1946d3b34fe426ba6600d75a0c198477ea64a6613ab712f8a6ffa4ff97f3688e12d47cea890a1db4f5045d715968120cb6bb291fe9451908dce6f404768e309f4fc776e25d2a9dd263105d21602178f5c046019de8543fa39492d0aadc672927da7c95200401bb00593e442aca1b3fd4c9637992e99d3139c776b6daa3dc2557e078c7b628dbd526b9240b8901404c916b97bd390590d6075b2cef26643a98eba23293470eb2e542c4f6bb56dc39a9d88d19cde1e410a111c5f6e646a1886c01100e073aababa56e2ffa8a87296d0f6a56845a3676917801b83a2e8a1b3d895e37d3f9d59ca3184949f15c295a85d577b2e9e5625fe9f1a104e6aafbb3616744773f48772548250e9a0eb9f5b3084a5cf26feb746a822bb5fbb7465d133e3435c614d05d86d574e1fb7c84a7209361c5e4c9335e1c53619a6066b3beadec2046e9e9a60aaf2e16f349fa1f693b44ed4479e68d211965ac643f8d2e60fd5dc00d5fce1612289fbe0e7a00e6689df4aecddfe453fb1d3a50d304c8b2f4c17223d9c85e38979a7745f119a9f0e71d6ea9120d2e6fd7530590e50891fc0514fdecad542cd3baaa7a00184172552fac9749a69bf7f6f63ee34f4c05c342521df69bbc34a0f4f7def17ea2f0830a55872515929f4605cf3508cc8c48d7960bc49f168cd801f76133c2080b1cc5be98bf8644b651fad74ab6c1a8c4b2cd15596c720641174f5abc9305e8f51d7d07e3f0ce3431a4b2df71a6047acb28a802ca2cb54560066f60f93025c87dc41a29744838239e116b25b351010c482aab3c05c19d4593604223fe6f845cf6c22d6ce1e2452cbd1c19163889e4b3f1adac55af085c1916cf7286b6681db47f53172eb865ca039819877c86316d655fe17c5544ad3a6902c46f333851252c9e57033b220539459cc370657e5406d34490a1c5a33cabb0fdee41c8d387cf643a60f1d52b176f5f1031359faeb2b29ea9220bf1a69c127751960ec80b6dfc01e61927e2854e6af457b8e4273e8940a2d6944b8e5711c4c7312a8a204174ddd5c545a3b3330087a3b4f11763e7ada0ebdedb90ceacca92ded66d828542d42f916bc79796abadc63276763d15da9744311fd4ec9e88d11b08a7105cb7962ff109eaa695b17c0ba6a9988290b1941a15282d875e2cd84651a77c568283bba4815dad6b8a76ac92279a6c7f95cfac51515b3ad3811a8209817ff523e8f81a3e3626fb66d96da1713eecfe534eb7cc42af1534779c8acccda32fb5b4078825a45f886bd9cbc7bedc6b2944c38d603ff75dec371d6c97c081b579de215e541ea5effa0c1d59a2a371168848ff6d9a6f80249c4016e700d17541a87e20abcd8733f927c44dbc5066ff40c68dcf3044679f333b9b7353234dff479d065335bbe9f089d6653a73cfd7c86744e546f64593858a5a2b5e2f42c4e24f6deb81bbe32938aef92e45245a1cf5aec8a85f1f5b1134be5afa21e3aa345b511416de19e32f8d17ccba3ec432a8894f00e75a14c7ae64698cd6ef91b7163d3888705ffc206336621616d00846fb5b41b3a361b5916f3822b24bc1551242192a2e91c176b2ba502c68386ae8461294da7524603d5434aac857de59ac5b59c8d621a5b2673af10e1c19a62f1213a9bb8b1aaabbe0d651aa3639868bb4ac4b4ae928e516731a829b38eaa097ea733bb1fc7297bc1c72c66027306eac99ee305bd1f52a6a340f578512a38d2d5f45811f1ed4b80769c1b2ee67607c840a631455ac3f21f880e2c22a2c1c49df475b83e2524c869bf155f8adef1564fbaba5940bbab3774a299b8835a5e4479f26a148e5df77314bf02ebcae32b8bcf8f0940ad847feb42f397227e6a3d51b562c83baaf8e5c038e87341557dea23b082b3f5f04f432b275feb46c00527e2426e90a9d21e86ff9f29290f1312bceba49257111271534d0a18e7508f5d1ad8bc3912e39da6ca36a8024a03b0376711301b6f2253f6bbd9f19002717e9b4b7c27f04bc7ac2eb9a55e80ba76b208c7a4807a35063ae9d7451bc24daaa0a752128c29c40880a9297dc414d39dfbe7180f5e18b26b1bc1ab6a8f8ae62086397d775f23d3495d979e04d9e6d4dfd50296a75c632e2b5246de87f6df2b8b0df35a038c72e6eaa1878d337dfd514fc2e2a7af9d10bbfca90f7925b41317eceeac3260093358c378f06af6f4a92a5e833b9c19963fe1587f5bb23e2c054e2fa38e23319aad264ee5af38aa7a8353eaf3787ac40fd1bc616f06dc9a362726a503abc2aba858292da11af494b2ddab8c26ce59e724b67b07e14217ac8bf2d67ed240c1582e18d615c6009e5c72d6a8ef82c86600d36e40dc971f0c7ef2dc88404d38daac2242b64654bcdbf862d9ff4e9e836666aa9a76f470d1455c4a8df81711ffb5de7f5ab475eba13383e06bfb7652d16ec7c37ce95270ba8710b68a402adae54498fc5e6e90f87e1caaae6becd217149af1b0e3d71ee0d60c4a3c0ece0b38cd8048a510f63c31f3ab9eb55fccef56c600d465283899dd63f042950d0a03b9684e98ad0162e07ab5d2afcb94c25b7baba54fae4295b097a85fcd740f2ba1d4fdc05e61b36a0910f313101bfb2ae1d201882274d4065c7b8aab76f0ff1a8219f4a05e37425b5761234842fa06b2f4ee542e93e7d8f20aecc82b792698476243e1856fedaeb8a7f5f152a2b0a2a8169573c3f4a0a0479595bf4111c99a8e2954ebc9b60e1d90e14ec83a2ec5e78ef7523dfc98507762cdc5dd7e78dd6190b818040ba9d2f01401fd304b203cfcaf3680127c65e8eaa51ac9d076c02cad8a8748197774f3e4548c33b7e586d973fae53a4df9502a543082dc8bf01e24b6d11a5663aea5aca6edf7a82d06c1c4e57286482661e25d865463cb6162268426da1ced0790f15f06a030234c3fcef95582014d6211d3bacf5da8a8eda61786189ac5148946db0b0c3902c3f680fece487dc6973a9725dc88f6c50a899d1336a46bfa59556848452dff88c108eb7be8ef802cd26664348cb097cf4ceaa7e9b646a2ce0dcd1223c2396f49ca0e82a0604120cb068bea222cad16ab6243bc533a4fe11c07a5b5120ed110414af8393c04d3e4f5ae5b29c4882f68cc00ca94abb18684ed7eaf766d485aec99e464ff666ab9705ae365e5c76a9a9e58da902cb091f313ba84b9a4a7a1882d2a65ff7de1df7418055f4d899513f214c0cbd7e262858de1b45940f35f39756e381e79173c34de8156fa87b627832ef63afe9109fd91f03d35270f2f4aca1116931372ca85360ead62cc29adf5a067c6eebcf47f8ad2d143fc75249c2c25f4b0d1dfb633e3dafe01649d8b456973979e23dbfae11b834e84605ea1df7a3402835cf901126f60abfcefc52744a1bd7220b2bee83b200c7d0892aa491befa37ef704261a29a81b0fb8957843f0cd1247620460ed7ba9214dd09b982dea13d9d4f27a23890065e074e6216807db2836a92038c6491c1941c3e8873e98690a29da5639670cb2d450debb4e6f5c1e3819f9cf2d067ca6a606be6ce0c7d6a5b57555fed45ecb002c541125958946bc029c3e392a2019dd8cb4cdc3adb61df303981d731cee39587116afa307c8c5b07812f97dcff6d59f168f2d78951e31f07d4d4e6d5c83ee534eb8e9a76a07081c14c05bcae01fa2a094060508c694d073258b0cac25c05c01967486bf61e6ffcae842eddb4f7dbff6e99f09daf1dfe75811d9582d0d1cc45772b51ec6e10580fa30000000044c8301cf5a44217559ab0fdd870a5a2ba08c546d41db6b52ada425a93b29bdc7b6f29659201260456048e039bc65aad564beb8c81a9805bcf965bcf15baa222e4e2c643240be2eaf3c6e3434422d544e68ae8027774a7664c75d1976b71a782a668a2904f44b2750d8e0e5bd02d6c174b7d0769afcfdb4e1011898ef19b559fb71d1f9dd5e76d67a8931c67079c14eca9ea5cc0c0439847109f1d4011869b0f939b0f944f148f50df371ea2bee7057878bcaa2d566e3b4eb79d19bedb4e922370521393c60020aef08928882970b47e801b9686a85e382a62443eb7a4b5d62a99735a1a7b266f0408389e791e3fb09ce32b2c30420499b36ce8e4b119819b62f6d85400fd0cfb2a09ca6f40cc6d30bec16f332b5f6191885ef1cb3b9d5ba361a47e0f0a3843b0a40cd2ec540412fdafc28dc8099c74ef8af1d79a1a8e8a277003685192a8e99afd2e13a845292fa8d5c0bc90c142f93b6c28b99404a0a95d994da21250fb22ddd37c5272b52fc645810a9411bc8c911204a4efe031a6dc3556ed996655d10a3a6ce8f15e6ee5ac024549091755b34b6d6a8418250d251101d482286f78212e33886610d3896dd53e8409e57dcc2ccf03131d7a88617af119b3844259a69c824309abf54c1760e408da11a6050f199052290750ad1fcdbaaeebbaaeeb3a1eff03e8811881809a0fe5eb306b78c00e4a254ecdca9772fe60a654408d06a47440cd05116ae616aa2665046a38ccf038a264e86a73ca4b9967861800cb016a7fe386a9728a812a19500b9a609094260420c99272872425044c54806725e6abcc909194b876653e4da9b20035a372c68f13aae01083069825495e18e93d9aa2f450fe8c0ba4e810228b121a12e527866ee401e5ec4cb928235484ca141746dde8c8938fe19316509b4d93872c357c90a166a41cfa1d1aa54d0d0633a50ae5d4624188da87f1c8bc15259306593997d4cacc1cb490a1928254c9a4acb5b0964329a2e67ac156de1917d8b88490c2cc8626193e656674a3b1c654ce3035d4b6b450fe0f0c2505784eed0b102595d2c9d74e285fb5149ca0754035eb910313a232555ccf14956e444259c2e7544aa0c6a25641ed6ddcd4e60bffc3c4e2746b40ed8fa44cdb192148509ce7f1744fea4b67adb65686e7793b4ba4a23e089518a4138568dbd1104cfa6be500a551ead94a27fd2cb6521f0060467f65599e35f81cc09f7382167682feb08f769c8d1960ec730919a63e0300ce39573419bca8a2b149e648ff0e014d726ccd9021f2f3e64b5065b92e6bf05f3950b9e5381637d2bea27b9a039c7409199e9af3e19f262c8d593b8ea0e3fcce7559878ff408be779cf3f11c05b5cf51d02d16e3fa7d5acf0268ca672531a21b79684373b40bc733a905555b8ee3382e64317e218bf92af0119000377af2d90d6084713d2d2880f9d14ac700e8e7340260057a5a10d358c7c352db686e03b5d65a6bad754408f5c66687489adcdb86dfc444e8370366e0bbb8f5b42100b4e62981fb700b7cd4020a819a9bef7b3d00dcdba541007e1f8d0e4b97cabab7b77793a8ac77fccbf9cb63c7f3ec4ffc489260cc33cff332adafeebd37cfaceb45dc0045264d451634e5f3c6d227429a37a2222d2276d3e9be11f13cf971449df65702be6b4a8b4bf67603861b2cd818938ac70a3b104902c60521dc0d2929a9aaaecfdb8da539ffe7ffd7d071246dfabcdd409af373fda729f4cf18ed355730a56bad1c05a55d174b3f127ff9c8fff951ae5a1859f9ffff7fb56bd27a73d6de6e04756bad75bae113fab8d1627399126de82eddde869c86985425f071702ea8961a6912a772fc4915377de33ce03624a4d73e6f4327f4f0470fcd24c218a13343412a0cb5d853bbca4b98430fa10e39e80065d3e064db600ab9a88014642b49f2d1218e6043cc51c21852f2cc40b50398b02a4b68260a880d3f326c2c4a6847422d436a9020c28eeda4dc446a31c2a89a4f7843102910838316a51d361051f68ba63069c90f0b620d14c41d20418e786e8434d8903165e367039d49610cd50f3b569448d9456ac00186508c4d29053b8709a10d3c421f70e8a021c2a801b459a811c29e21153e750965e041dc818308e4b47b9a84532e84608a8835a51de523449223a452838a906c4b09ed6c13ca84247ce981e54685e969470ce10a49b6cdc81321210b235015ed16b5ed038d99e882468f28a32a1c214c68820f5ba6431194183483f8e2051b565881080a3ff617a34dc290d40c5a0f335c943113a60044105bc45409c7dc008606d1e886a48532296c2825402185588836d28c5d838c17473258843190115970d9e1cabe61ca2e9f846498882520d9b254e484137a846144d85e8444192d28e4416b115a99da495ef6ac872d398834284b9cf860aa4185a320e12da98a0e3336c2c480b193c4e03142157e01b363c892254a880dfb8a0ce1192544fa1e7941df2122cf8f0dc3d1e681481ca211be300b0aabcc76f614aa2061c212b48c50c587941e4f441d4d760ca6adc54868648828f4a3c951988588050d2118414360ec6c2b545dc28837b4ec1eaa389122f63c097968121261125b18c131247cf263473932220242630fc9829ac876c424aa508530a14dcb5eaab289a4883d9ec0d0e40653e8c5c86632a4851fe109479b07d1121a620841413b84a01d17a8c432cc9e41cbfe51450422255c7ab24b68b261308960048521a2093f9c8ea410854c686c324041bb0868274c01151061b696304a952629628c27529a845798ba18d94786842efc08a18e441c443f68fcf022489cbdd8a1412523cc0e427f5a764d7f55441e53c22350c21f64d8429688346c220945a6fc08e9248e0c3f7a98e407a993383838b5d6fa83a3d75a712a025aa0a005e5cf3fa8fcc71122f8fa1ea0e307b6ea7f80c90c2aea45abcf9b4f969eaaa0ce850f07c30ec9aa9d3e3c7c82fcf8147111c46e5db3eaf3e663eba4e64250b438436f1f2da375a3872388f321c38eb1fda46fd30baa7ba2c8f4fe7aaef4d818bfc97dde76649de438d706b5dd77cb7dde788afc3fad566e3c50d65aaebbf154f188e91bd623eb1bc491697cac562b10b4f52cb56ed3c37aa2f43f1868eb5cbf31464a46453ba4b0f406f479db41c4abb5e31ed45af557f9ecc63a33ad7650fbfc3868e7f3999f4f1d8ecffe7335e7bfb52399853860efbdf7fbcd351781b9089d53707c6539a62e9c31c699e316a594ba5c2eeae22c976b246946dd62d18cc1d103afaff26ceb5f91ed55a2946959966999a6f47596525949785a73eab978cdbd2359d36f9953c33f1e023629895b039b94c40bb677d757c6da9bcaf6ceb33ccbb33cab4a9a7a4c3b908aaa8ab67403f4792b4a5244a43ba0cf5b118ba2eec1488b659d7cf2479276fc7d23fef9139f4e071ff42f83fab57f32f2470f2889f9ccf813d1cac9fcb2a8394f1b29c5948ee4ffb038f5f8d36a8e8b7be3c7b5a6e11873176c5212342369bb66b1bcee81377b9f53aceec59563a03ff18d3acf3dde719a3378ee75a30660e76a91a6dd982334ab1fa86e3938ab9af4e6e056d7d6d7e93adda7d7cbcb20e5bceb74ad5ca73be53e5da85e3535d1e21d6df2bab17efd68936d82e2e03ed58ce4e7a2b94ede85fa0be55da8fefc5e1a9afbf4259ed626d66bec78e55eefd17cb0dae4791d0f5179cd586db6da68c6fbb4fab94fd76976562d22b114f526140bdad46b4e2d2afa5b11ac02293dad74cfbb4f5ce6f87daabca8e67c45f6b134e57040da902aa6951a2c9ac632e740c5b4529b2cbf4f7fe2efd385ba4f35ca456d4670516a5b515a54acfb7fce5b755d47499ad547699dabd5d66a57a3f5eaf7f18f4fba5a511925298e8e613a1e07a15b1a4a31a7980aad68461dccbd1aded9101bd48c24a594f6728d765c61ee594edace76e3881506e0cdc0722afb139677238a4a734ee1e276c47983bfbce6f5e2a44d41f306b8538ec16b242da5b3ffa7b60e62d8ec2b4c29a674e55118957d89e71f07b334303a8be9bdf76a35f598b1d53a96efcced080fa7e66070c32b4eaad85f4eb1e23a78bc2b8e41c5b33fb1ba239d7d098eff533aab2bc0ea9a92c4d9bc740bfabce958d2f1d3637dde7244e9283b9869dd3675fb48fce65bf195868508c1bd5549ab3749d7f33cefc27432d7e2b8cbf1fbdecdb3f7ee67f072aff7dd4f6996d18c83d22cfb13340b557083cb29bd9996f44f7937d6ee41ded1aabf766fbf3c1b49ca2bade6d82216a5619b6534d33ed33ae5ab157d8da4aea11ca7cffdf71dafa9dc2ed5d738922ab6ce334a69b675f0decbf18ecb60e559b67ace16dd24d5a4b74bb668a9e87e77e719a59cf4c0eb97d351c5ee39c35e5f2aeb977e9e7d89ab625f4faa9334c92e556d9702bcc23e1ab318539eede77f98b70239981884aedcf29b58c56295e65f0f590f9e0dcc9a31780dcc3e62b5baac4a29ebe361eb3724a86e39de5d0a8f3e65ad78cec0f7cfd258adb15e0db056b0b6480c701cc771dcf3f8e51f5fe141ef3e8fe43837aac0ddd62a20cde1f6cb3fe2729d8ed7cef187d9af36a1f457fc7b0ef2150b966276d6cc1db0ac9104398bc562f18ec53bce1a3f3e5774905f1415afe817a662f76fccb3eae115e0531deed3c7711f77c7112966bfe3e5f672bbe295afe81c8cc41e746f767ce6baa27b3015b8776fe5cba292cb34cfb37154c6ddcff2eb8d644d07c12ccb33229d5bea5f02f1790684ad13017c6b4713502ca3318f528e13514b6cedf8d5e3dc37daf1e74bd84fea1548a7483456f997a2184df9072307f4252c87c5e889237f4a2ea24a1c23b5e1ef075b929b932627283bbde86ab3699bb6692e365b929b932627a82c54a12ad4942ccb33305ad76c9b1b1e137fb8dc05a375cdb6b9e1312efa6bb6cd0d8fe55916b2e9265dc36d49b42dcfb24cdb4a5db9cd56a90d83b6bdda3acfa29680f685fa8ff7f38f355a6fc11c7cf047fce5bf5aa7d845eb5cce75f29796a88915f778ed9c50134dd40438621aafb77af3c0ee35b0fd3e9024d82b7d123561f92b51131fffcbbd123501f2cac52dcf2f7747318cfef8ece416bbe8ef36fc2686833bf99d1c318dc63ade413d73e69603c727919f74cb21d42bb749d22b27ea75de4490ca790bfc12c63f5fa2837ae6cc5e922dd51c6fe9c191fcd56a5cea35a9e6d491fc3a18ae4df888e6c23fb874b93897cbc5f18f0b972e17a6b95c2e2cfb1fedfa1f8d35cdd769b44bd3600c8481301006b2658e9cfacbe8f36664b3e4ec977b718cbdc7de63efb1f71e7fc174c88e7f1c84fe30b2768cbdbffc3fee690c5b759c97f1485aad5f98bff4eba55f2ffdc2fca5398aaa359f1debd748aee8afae356f8d282a7e8d28280de62c16d7af166f751c6f912defc547f26968c696d57cd249f548babc174b73974b734b63f5f3d6e87116d600ecab91ecf8e52328ffbc8ed3ffe9a0b5386e61a056abc5f14f0b97ad16fec1b456ab8565ffd3d23887d5d2b3e6600c8481301006f28e20d1fa01fabc1d59e9600bc37440e8d7cb59ebfc91b6e7d9bd5c5faeb3e6f9729dc98c4307e4f55e9c39be6307b56b1284ae7339c867de00e499a3a01a733c5259c7bcd3917c166bc4ad9c716e699b6e7be6ac91d63c858df61bc95187221996e11f5ce21f4cc3328c8b68ceb8c5bdfce239e7170cd30f9108a8f44b9a935246a301000843170000280c0886c342410e0421164cee0314000c689a365c4026250d23511445510cc3300cc33008820008020008c02010c61802723d000a6a9b8dcc186e4bffe3fb4fdfaf9bca47bf4bcd91320bf9f1d0f5f159fa5ad8101ba38f2655d947b54f5d5e9ed3ae7f46cb0f7a3d2c5ac7158a3e99e2c1489b2f256d0ca989984cb813f5fa1c3d8ba414903c4d52524125f03e21e45c2eb89e75be867eba8d3541ea07d1ce73dd85949fdbb973b91812de62398ae7091aa09990b5426d1120221a3a707e1c8d8fcf47c239bb71105da9cbe53dfedd9f28eafc73b801ad076fd6b188f75756c702279fd3974351200aa8ef3361ea1263f4269c9ff05427289479fd78a3e321899542385a781b8857f42b1091bbdf6936d9d9e42824d1af065bfc393cc0003f66a0abac4d51d9e3e5ca8b0d8beeb09b027c1267a0a17661621a1b39a45f746aa9942c8d284597a3b666cd37d71a97b19699878710460018e6f3f66b9d4a384589404288ef7438ed1bf4fc85ee145c911a6c771876aa64fac9ce98903af46075c31cd862b8b1b733ff4de750b87c227894653dc09248cdd004af27ef299c81fbaa3e98815bfedfd1b48bb6f0420682e8430af8b953dab3406ac809f71525eb24213336854504be296a4e76dfc2799702a856e6a01114aea6e2293a1a5bf1d55f0b7b92c5a0f46fbc2319826ec663661891fae9b195847c95839e6036b081b56669729f08d34f7c822bcba9a91105047b5280955ecebfe43c2e8316002fa1b1646a4ed8e107c79e1cf0321aa517ba67f9d19151b6c46dcb6c8f8689d877b2f9bc69a148799db2e71b2e2d59766feeb6651912049309fe8e903016c9cff78c4ec40c19cd473ab158038e012ad1f94196475b1fc4469fb5d6718c3b9a0b7f02322b176a5f05f2d47f4ea038c9565a7a56c7077d2241eea8b4b8956b15ba593d00d137e744df6b1f11677877979614e9db64095adcc0cd8b9ec6121f9f37bd870b2af094ff4b7922cb67667951cd0b121009a39a61ebb8df0213196a6c9feae3f749f125956b92eb944edb2ae4fea8740273d78b7c1b8f07db27dd667502b4807b548a67fcbbc3c76bca12f6b6e5bf0998393c5cf0b42abb7b9c3f409d87a09703ed125e8b21a6c794aa794adc63657f3096f0301e3d2a307f035b0f099a6d8261e1d1b018513fe2fad02518982a8d4b5a55425ed685a4cffff87592ff7d9e5e53e1acc48705bafbf117d953213dfe9dccd4783a19f86cd39d5837b5ad6d275bf8a6f543ed949d92a0186053588ce380363ab655bf01d4501a8dbe8841327b1b5e7cd6829f89aae5cfb4985693f003db4b096e6408094d8aafca98d3c1030494a8d9fe0b9ac08443a78e764b7068f97ae767aedfd174236c6895c5a3adc79f261cfcbea4908bed05aa1ad9ef5a6e8361ecf67412baa8fd780280789c9daaf834a94a3b8e398745db7cbb6d338c5d589170423ab5d7d7063c1e0ea3c34161d7bea59afac356102d409200cf4a51537098635f47cf340531e732b96b8d26437c504b4c7ea0b7af91000b6bfed34bcd724ddffd1266bb1d8accbd94c952f6431f335d9a4294b9511247e73fc91b4d65446308fa67f1068f2283e5cd4ff2a3cf84671deb422ddfea0a916cdb93651553b33698954892afc1fbeb76d7cdef3b6198aff353173f59bb14caac93f1c2390d62206a1c8276bedf510cabc12c362986f7c90a8457e666a54f65bc26726ccfef864f4e161004781b4aa4aa470c5553a30879eee947bfd4f05f1cd383105d4a4f471f853818c49339d792e5e297c3af0826da51fc440418ddca167314e778cdfbff1ea1b5d4790d754a5b3c31a07bc4160db0b59c849efa43eaef11c3a64d5b9b3b1a4dd18e36927251006c4eecb92c762935552bc6c1de1798000c3a89a99ca518e094c8a589eb428b0b6e9b0568a79119d0502b980f0d71d584f2f693570621e0e0e448743d28fcce3182bc7573a4fd1d4099589b2f475443f5329b3721c41b18e8a53311a0bee939b4b0a3d978ec54cb0df71d33eb4504ad7ab0b983f6d28326b9546d154d0339b2467e890eb5e765932af06c5aedfd3de27c5f3bfbef8f7ca57aa2eaafaf699fbc89817cd9bd9bd47c61fbc623e24689d4f899b649dd31f7283069d4ee65ca4b1d4f48460dec0c2db0f38d3429809ebfa9456f60ef0287f58871575a0938b082cb7057bc1282bd981b9e9902f2b4577b88d017b13ebd5d2c377f014de0356a6022ca19e503f8818b58b895f5588aa20d33d2cd84cdf0e112b1af278bfa0186cdbdfef40c82139b6e4b5b0370f04c2d605f8bc70a541cc3c2e4fb773c24a81a6e29f556c8b1d3423589ba10302d55724a0e130df0a3676edbb73d4585155013fb6d58c8197733b8e6c2d6a39fceec87c70970ad58d404ea36f5f998242b9d6d8046745631dc84f0a77d7496f73ab586cb0e2855ac4fd4014aada02ca73f6f2bee9724345c4384771fccc976cc9e7decf29e9fdda1575b26dd05401a564f4a690bb971ff7d66d5ff1aabe0737e7eb7c9b4fbbdf8cd12dc8f060672e89ea2b46260ddfbff7a42e84f0cf250cd46024b30d1e2f5b1e21752b08e03877e4a88c1681b9b5fb7f5bb8282ac90f694b79345c1cfc15f13b87688a30dbe84ecb856eda06b707b8df589e6b54d4c2d51939b49fe0bce30dc4a899e79ef6bac3ee8722353a99ef01510f0d1dc4b5bd5ced8f6efb50492f95ddb3ad0ca8065ee4d17731fe4a618a83c1151afd8eb2476f99e6a621856477b804873d38f60e58e5ac03147388b7b63aa80017317421a1a8dba202db9fff721436bd18a5501a068c87df9b72819fea6e87aee222b1100b9a3b50ee85543b9d6e38f96b60d04d25b8841dce2e68833ec68c358ba953ff3bce1724fdf561405193df4d1571e32e6dcd71d51e706c69002dd98a7cdbde2243e9c8eddcd12334b9b6286c7083edd27f2648e3ccfcfbd8a48f5ac89f9c70f557a2a9dc72e8f6630b8fc0887e758890998478626bca34f7520bdc26110f8b7f15759476c8a8f6ddef1d83a242f51b6a00935230d5e77860b62fcdafaf027bc8ef430f8418cc9126e5aed0a0a934aa1cec7471a03e71bfe63da8184089bab18e7f14bae240428f3cc57d801d24395d4ee20a7239e59d1369208942929da3a8936e4c490fcad53c17a40b8c87f38706d64a04b922560ae86063268ba4309132f121b6490b32be37d0b8803641d396ce97656a933634f8201076a80ba20b572031758af09b267250e8dc568709882b29224db6907ad046bb45a03488623742b9c48808323dbcf6085d45611d8d3275d144cdac88cf302be21ac4ea61908c871e96022041ac067819cac2160469b3984a464522afc5ee4f80cd0d2b2a573450233a10bec21580f0313be0c02cfb0b6e346acf24613c5dbd2a9b64f64073ca05540601ab118e81e1c4149bcd64ce68e267268c96e3c5b1688c1b73b2cd009ff71bbd66c39777921cba5cf284cae8f62073115e21a924156dc83a385e4499b44bdcc85843a70bcf0a28906288294c79294eaa11eda3dd594e04541e9cb8a44f206a3083c2d9862c131ddf97029a53deb0008d4dcd054ee09500ffb1c08902d77ebe21888cd69a9d74613d499af2f110a1313450113ee21eaa1d805a7ae3feb4bc9424403fdb19f2d7481841fc213a1531fdfd0420a5ff8526e0f11320b1e6be37a1927356146232310fe9139351799c08e9a1475f2d1b5393f809a8f70e1cc85a610c523470024b831297e77e8646fe4d25d7cfe0f1aa83f0294225c7c2747f0e0db7c7f3ea2cf48a45c16fdba2540dd8132626e8931b88fd0641e3c306816c6b78a2d924e24b342e848798b68b0bacf741f42e0b831b95860453d1607778ab4ddf95e5cf42b11778a306620dcbd64b6bcf230f44da233f151efe2fcc258bed0668635e5f7513c45462f587bd4f645d657ac6f30e31514044dabfb788afdf4c4eea0de145abcc19dfc764eda1a715241cf2e0ab045fba8e294bb8a6c92160ee79b567a8c75a1819a9fcfb1f526958fb362ab1279e3921a46d360a56e41569ffe46ec7c8ca638747df6c25cf39e35366be10d81834602b2f516cbc13d6f54e2ae8ab1abe53e81b1ecf5d6cab6114fda37a60bff3693542ccafc88bcd7a02276c3397ecb0c682dad6c270d90008a0b8e3ca759ffb04cc827c135829772637977247a37e9dca834dbb683bb5b353b3fc240bdbb4452750113f960b5cb5057328779c66d416a0656ec6c7ee4720d5efb0c9f0faf50cfcb08987d035cf89c7f67b708616fb8ab45249de58e56fc598ac96f5c4cfb915ff9becce5bdcdcd1a1e40d6f0dec1e4c2ef5e52c21742d5dc3bd3574861c18aafd3d0e428e5ca33cd530f1a7b54c9908295312e5160cf002441e2f0b4f5398dbc4d1ca668362b96bd3277d582159ad7f306920fabeb24013de9c5c18eac2b286172908ff52aa78a7aecef18c2637a396ff98ee0735fc2fb144b052fea8b6b1805bdce0b828b682fc851e576bcfdd0b560472afc80b982682f1a03b920bb3cb2a4f60b0548ff90c1f1a41f7d4039a8cb2c52129dc061a68e91073ca020f1460ec0fb6b7b472bc4275567031680327176fc67961120b5e057c8ac0b859b032e2f22958e644d2fdceb5eb000064c36d00690bec8b08f6ca55be3be353b50baf84473ae7b1a8d32df8e44c1fd754fc33a3910b1aa5231003e09ba8ab826b30beef378e38000b8d6bb21437986684941b6524e7631f45362e31c062d05d8ad075b8cc8780491978a9a5164bdaa9c7394ab010b3d2b7e497dd66b9373fc8fb2ffcf396a3f34b00d2636e867b9600a06b2bdeb888d11e06f72685e3919b1819bbbb8b675a77f1f8cd95131d41cacb37fca570d6fab714757ec419ac71c6ddecb1c75d633473d7798a7e8e93d6b88544742e1b08d3b78b5860d52c053695a36e85c9163a095f5c60d01d31a3419585d394a18e0d6488e6eb776ef128df541bb1976309a760d342ecb2608ce89a8e957dc701ccd58504b7e7a8f5bc4452e6a76b11a171b4b5e1a4736daea1447edcab95ac120cbd803016a2e9a4f3810093be3665029c3d1a5f545d88cf069fc19d3d79cbf2d5070d4c2f0c25b9851625af763ef578f1c2480c96becd733a0d100f2460be854abfd46852e9b2aa6f51aec5310063dc99831e1530035db07a20102a17919e5fffe46b1c06b9720af43b63577a15dedc472c2bb5690a00020185fa39668068cba2828992290e08afb2f2b47b84e0b267b21e1e445e8bec2a7dc1c89005e5aa06e0e8eb030344c28a820401c6848a1001aa839b8ccd6b979efabd679bc85d92cdab851d2430230f9d6cb950c85e6095bb53c2ab620134434040608aa73af85ef8ef2cfd6cbc293fcfa9f14274a89973262a7dd61f5c11f3b0b7a899e136351aa3fbab414359cf59251c37c62362352e6fcd812f4271dc110d0cbf23df41fcbf5d828cffc0bc556e1812dec335eb17f2683a4af90795188bbc646c9a9613db35a545983f311ca0fe768bab1f9e418fa4708d89605afd05702f1ed081ca820f9602e9d42289fb6ef238dd08c2b6f30b52ed54e2f4e0869915e798f01c3149eae1a257ff54ac1d075dc88ca768a2881e0bc38712b3d561d883e5b0b9f1af543640ede3cbeab58a951c846cfe0ffbe7867a4119f7f1b245fd988d3373783862f9066c2529aabab0dc9a02454101d88f79cb4d5f60dc32cd907feab74acf441012288d9a5128650ab576bcba1a3244c9d92a36d659f33a1a8d90e7decb282efd121b7afe86a3110c7d66f5b2c9d95e89db185baf538b8de3d21fc004ad5437cf7b8b97fb6fc06ab91a5fad80d1806402f9b3a90f60ffe8ca0507f9a3265c680f40c075b2802f487b65821078d4f98a07088f980e1151439e0d74e2b6194b2a08361502b4ab49361c914f2029d3b299c21b634a7e7960c907e0b25e34f4448d2800f6d27e2797dfd40b9c766257d3c66031f4bc6df74dcd8da04551b133a0a757828c49cfd98e8325e8787fb7a282defd0f32bb2a1ceda2b2e8b60f1a3890edc7844cf25dc50439087bb2fe790e82a7741173d76ef805ddc1ba31bb4f88a78c0ddaf8be0e127f059c3bfeb110c1fcfb402d7126007b425a1582c40e1e110341721eee38ead5eef1e6f1db0bd02bc363fd0a8f0756610a792bb96da8f11f91b2823e2e3b3f2f63533b66906bbc7a19a06d8f72a7a0a854c60d21245de2fc9a9bcd429c166587d5f346019a418677e04cf4cddf01e3c1d735ea237133297a86bafcc7f29a1f12b9968a885b4d0c141ac6a209cfc54683ededbee3d24d2f770d0bda23947e82417b43f1a874f63de8f0ecc3f397da24b0842724121dd7f309d6682909a312bfb58112eb7a0880c13b954e01f2763ac06870acdfa7c7fbe9cfe91328d85d33cda84611ea3a7b8a4d0267856fd0926b8613893df5850d4bac7c50b4966f0906cb56ad42d1b003a7f2bd38763c2b0bdb65afa50c6596fb2d38c31af8a099726e5d7c79054251cee9f0f949fe32b908ff6029dc1c82624fd2f73f563631077810637cde1240d87197908613e843fd6901cb4deb42598b2be0a0ae0371167478550f8701ea63415c214a9031e383d4a3821d3a3aeecb3a56cd2fa5e3bc68759f6828961f32a684effb617319f289411475f2465deecbabeeb1789ea79ccefc05503c41ffb0dc1fd85e831cb6d793c706a8a437c5a935382d5fa1c09fc1658f46d82122a9f310e154037e0851b68fcc170c08ea2cbe77c77fb2b56a4cba7ea2b6db61770c400ae952c83478c5df3583e69ca65470b36ea9cace60e91d4e990b0555df73b08b94276a390374f6328acb77bfebe018ed981ec00297f792c9f851960266bb30b67481e89c3420ba85ed22025fbcbe4f8c5d7b795633d77efe41db3581efc3e4f063c880ddafa299f7e7da5977959a56d77f050b7e8533e39310cfb54721a6d08f6b24e72f700e8aa6f29412669eeb87bfb94cfde97634930b89d4c307014a56756b6424ab15786394404fd7fa027f96cda173870b784914ba0fa506cb8b8c1fe38c55c74dcbd99094f5ce9828d133ed19045ce2b9139f2f3e81ae9eb3a5fd022a7c7715e1690c7e34582995a554c04c946d266b5ebf5ec21270c235f2079c8c9a70d4b6202ddb71e50db00f96c6c4c6b7398dd4325d1f8769ca18cc71f64dac6e92b0b17b7e33366707b4606228b37e1cb2fe67f1bfaedf8248d8ed6a8fed3a1bc03c4871604f0fdb0338e4309922e80ee6b7c9e7a307051d628d1d297ebaef1a9b837f8ce758d894010b56fb4a9c5dd19c3aef1d94fb8c41e369e2139ca750ae2b7e3f379dbc0f2b84d6fa1c3dfe51aef8c0ecf96c6f8ec7b68fa509f413525dadfa1c1d46fc4971f3e63422ec469c68a4f4b59ca06587201a0c649ee38f129ae30d71120a7b74fe2b09088c00b44824ff7a10821ea3269f8a9794ec3905916d768da784c1ed96bd5a978f05f4e783e7c229aebeb55b0575428d9f44f3a0a832acc97cd3a7da4d2f63daf408b51bec6b03010e6d8f0b9140b34a02b0782af9f52bde144ca08eb86982f7d274e5e85cf45e480462501096838872a7c16044800dbe0c53c43fe5f8aa5f5c2228c3aecd0be94c75b2fa1dd64fc8dceef5179fb20921fc05d0d43e10e62b28f736c8d1c3830f5b2df3be0c7b49feefbd737fd14b940af7f8718490f0be2222810d889d4103545f1b1b9d5533c4178c7c486b3a0fafebbd7a740b0e94c0005f34da5fb807c87f9667b0bec78faa30239d88b1365b98099b0360201a9da6a1ad990df6209471c8d582a468625cef97ece84dbb1a34135ccc2f0fbccd88448f80cbe5e885ee3559282348adcf6f3d549a49b05e054cf963d0af5566902a1c2184645134a479219eecbf8154cb6f6c068c365a4989da7d8d06aee6dee65af5cfce5159b8201fbe90eca055fa2b544f964df80047877195ebc0a33804b4571339014883212309ab378af90e9cd86b77c3cd720e82da6f8935b980185259f9d068a3649e0ea01cc4c7a3e8c756b20690bd39c7ec972f8620809146ee58af297dcc31301d36150026645a433f14ef21d7f465d38c2883b2c4ea29400d10f86130b579a51e5f132564d4990008375b1fa1677ebf762943c144547172148b34a6904b8bdad3c5a02805c4e5991e46ad05c860f984941fd509fa40371b534c91de018e68ec9d8a592f2b32b7973916fac2fb4702eb613cb2a60b0a3f852fa78942e2fd3fa16028237098f769accd613f542ca94387185de2a647cb758310f69c93b6b281f2315a47188d5b9d8f16b3dbe04ecb4cc53fb6078be38992828a64d7aab40e4103d2a656da24bdc0075977ad8622f82011435f050ac8f9e947cb54a6abe89af0eb0b9f654d2e7c2cc660fb7f3bc2e577c3256645b27d43544dc0086c15df556f2b97c97107d9865c3a0c13016df578182f24ba307f2c5079ac087c36a588744c23a322a7ebe4a3e4c7d01f7eccaed7daacedca4e01b47c631d84e9e9730b789c57622501ad648a2b3d48385bcdd3534f456300820a8457f20051d84b5cf978232d2f0c71a9d173d89c71a6cb799a3ebc7282516fae5cc7eda21ead7edac638437c4b3027e9f8387d3a8549363bc6b8ee5b59bba7b5094cd6b2797cc0b47e9f03385478fc9de48ae2b186bccb8ef2231a4192efc559423128cf85363bb8ab5fdbd508358223ebbee8303a78be23ab9b8db77de115b75f21cd3e1349c6fdd8217b208bbdf43a5c7f57c7c4a5081b4524292149a8179bb39a7ba2716b37dcaf58a844d55a70a898648d5e8057988ebf9fa0dc3126911d5eb1b8b1a1cca7a469420981b56d466164caae9beb8c0fdbc90496f33395ab4c3de7a98565282384e192812f66adf1ea04548d8e32a4a0a84b8615d6d6301c701af539357955eafbdb1d82660c47f9792b6a999e3fde7f50d5e4a7120b708bdfe9f035e322ca3bbe2554a9ba62c52d6553e83d9adaf5b311b857bdbee70048222f35ba6f219cc6e7dd5ebbb03eeffef75475131f4aeea500f7271396e728bf0819dacf37500b4c64df73d1b9867d9535e6a290282d6ccd272811dfa7d435026eda4325f956a16b19b4d439408139cd891248602f9b07c8bfa5aab979e911a030899de8ea7f17410b8cf9a34c6683c16fa727ccdf1e8389e0db4a6fa3787ac5c044772b7386c531a394c691cc71a4ca07405953201308723504489e9edeef22cef82d7e9db16b3a8d91ce6b030c2e05d35c7b7050b2cb5376e507f13b39f74d9edd1c2f78093b0b9afb96c5c6ff44fe038f7cbcd6414bc1a721181d59e93ee8b3c4e56da0e5abc8906ab03f01e0ebbcca990c473ea4deefaa3f25c0349bb98df20becf945284062b969d18affd93b1232b0ab5c44a4db4bb89f19ff3fb05864210c0566a2696156006232171408e09c0320e12aeb34f5b75b09e3dc6e637635cd357e015d7ebdcc50e23c03b4b02bab5e42e074ed80ce550982842ddccc10e5a843a4cbc71ff982c210f7d386f60f0ed58e3dae42389cad953aa67fe4e0b4ffe3858b6a6352af75ea65a4dc536501a6d79088f43952a1b52c37d764141affdf03c84f956e881a0fd783c2029dbcb8216437de99a886cb044dd4473d7cea2aeefb07f377b166243bf3e1e2d46d0d4c2920906d3ed194fe33f11a185e230622856118c0edcda8236b37fe10d41c33574d51a9190f935c3f7a5d927f804a68f6d4e5439d38d041bbff16d3c9ca5d0472d42ccd5b099822551c5365e07caa7774ae615f6b09942286b621b1fa8ac1855d66db532e0f567d0d5f49b68ad4b1999b4b47c05088eec0c9d95e5a770ba9abc954117c6674932d6ee67234e50e074e00814614a3d67f1acfb69a22d662d2423526b89c2d243485fb48ad42e0e13bc5416ae0c692007994f4e08676e87dd4b6bd655213ca743fcc6edc9d3d3235e62cccc4260928c33cb591bb390a160976f800d1991b18eeecfad9b411d96306b7a06891f0cb6b7ed760f76421bbcb11995b15f4e0368e3c32e3849137003d2af8fb1a2f927d28f306b113096e71f0c8011c1eba609289319d2953d7df1e37e08a150d9f3a1b6ed64a8b9fc2f248742950bfb1686aee6cd612088602a67708cd6823c6103b6ef3009f6746f830f0b11ee2899a068522660d30a2c2e1756731ae62338a7dd838c7524b38d7e05e5111222ddc61c815ea31ed593de09b225fc6c14ff565de4fbe97b568addd63ae123128aa0c359c2e4eac06565dfa06e44c6f89474508499b578a978903035e2e53627706d78f77d9c45570b040304c029e0e8771da083e5bf88506d4ebd489aba9b21aabfd4588c951251552a9cd1608141bee7d4e62f7741bb9b6edcfb50a70139958bc23d580c03697fda6aef932b363e621c8eb12e078306801a4d0cf172aff583423a86dc213a8f0561a804767b0d9c3173c6305df725ab41683d05df6cfc5072de6cd3d2d651addf5e76a8e8da9f28756f237a77741435753e9e887d461eade37aa6940e169b093d773d111738ab6bdd5c971403002f5f49662e7db4e9f3c6ef946b6690381c62bd42fcfd3e9c94d098063a5f81d438c5cd322e05d0141b818a645b26a94afcbdf91b0ed8d716c1f8b184ba2e527e0b8661da6e0d6f8e1464c5cbe50adb3b370e8f610a65427d741ebbde65c4e01a48c8f4c0ff62dbed149b615ef022b90c963b9f438a33ba416a06e4499d8e53c8589638a9c37cb23e0281c28f42384e36bd1eb07b731cd2e264e12355af1796470b72970487234dc1d8b4875a1173fd35876c05b91331f0d8aeebd57a677059cf9f415b8b1c76b0a45d1f7147f286052351209f2d7c0b5a0b34f6a42b370e48a468b4a73a12a2a95b81bd0a1b1c5236b868c890e2dd6ae89088aaab34a7487757668167b11b8b0e362959b37a8bc1f6242839db23484c8def2a38fc24757754e946bb4d66f1bc528c366dfdfd480c9bbd0af4a78699d8b1aef05a48b1ff2684ed476452a3d195442ba5b260e71f99859191e086b248638b4488c64143ba5883ca4ee2d57457fc2dc616ab16288b050b2e15ee5a744491f06ffb16bf85b882629162b1a4c2bb253564e8e6a13f2779b99d85c858745848f7eda07292548ed01536d824437637ea24986b5d516b71b6d85b70abe85401a9f0f45305dc32374f47480e9af20abe15a22ba857a0592c2d3a16af05b48ab416260b9d85755a74a41bca57bbd13c1d0eb9a4953bda026a7692221b079d14e75855d42d9a2d90ae85a1a11bda721a15889e4a2226e906bd5106254cfa9a3bab627731da57fca64154df4262b6c016542ad215b4a8e0b4b809be491b1eb7d00224647237f624e4ad5ec5bea2c3a21e0ba85124ef358e1d12841bdde2862e298936a805540b297b378e4e92ca41cae27616d2271a478d04ee5a2cea15e62b7416d56da1c68b7499c6412485716d0bfa9293b66cf159d4a8428dca24674d6905df0af112d3e957fc1635aab0414972d0942d9a67d1214662deae6f01b59fa4aac68126dd3859159fb3f0544bb2756515388bdd58a4a79d94745db778f22e29b9452b2e4b5e8db798555c5be0a9a8b56055f863d1a97192321b87ecc1a879e1713d15332aea02b21a2137685e2149c6e0f2e01da17a4a4cd4c75d4220507a9215f1d8916f284a72eb78317667b5605b8b8e6187f94a7e7a1a0788168fed7f3d1131c986326d0db4a21f761c9149b8b4859652f246a782fa0aa8b924636d7605bec5c6a265f1b7105b34c5e2069a24e0bcad40c1428d6712c1360e3652cfd9cee2c63fc9d72e0d34e9769bad287cc5530dc96e9355c0b1d054c1b2f0af1859545ba4aaf065491a27bb462983486ab89d159f85b845c52265e197161d1c2418dd537312796d1c1cd2ad9a0d14c9ec5d1a72d27fb71a9d24754b5b3ccb621bfea475933269b959ed0f82309220a2414593a08deb9093bc699dc5cb2e416dc3cd305f4742724db7e8d893906f835808f69ae4d5f88a9aade0b890beddee2d3a649380e94ea82321ba7a85eca18d027276d7989584a68d83fd5e4b81cf1a9914426c6ed60aadb509b6cf0f772a10f1c1a332a30d15dd0ec3396877cfb0224d9d5f05aa16b54f2191a071b890fa9ded4bd000c289b87d3dc9f066839d945f9b7e851aff24950d5d45bb0adf626ca9e17c5f61c34752d1d02db0aaf02cc41694168f2a750c1cbe2c91ebb75d54960babd6d0fa307015aae2bfe80bcd4dcbef9545ce8d82d2f9780f5cfe02926333a10bcb883ddc716c005d7caeec8480216844abe5c1dff28dd24b1dc4a7ce30c6eae0d02184106e595ce952ff17f34fc491ff22b700e8e77539dd5f4f42a5cfe516ca700c7cf6ee5de4eacd224949947c3a41143494369ddfcb1d84e93fc6f9187baf5053b5fe42c820e91692043e20ace6e0761081bf8a536965ccbc79ec5b56f921e3744bc46824c710fe6b801ce303407ef7f78835c8f0bda98c4541c1ec9d9922df90876d5a03b094d5388002682b5f84988a40de5c8118c44162bee7a13467b4fc81f3e6da5a587887923445c2fea0b5983cb1a141fe2e4717afc59a13ac3c5ffac785653a1a0eea9f3128af83d290836c588693cccc699939e999c2a457fec8f64cdd4618736f906d462a3f607d814b5f81b3f13d66d59c0d2f1a91d402d47b1581cbdef453c6c586462161351a96a56345cd4077f3750d9a45a43959bc64fe9bb1d0a0929358a9871944cc804bebd2410a4e91acc020acd57ea716fccac0e79c284aec52f43dfdc42a01a334746429c49bae726a347f282b8eb46eb6f51f54a298e72a4f213e7b80a10e80075330fbc564f8df3eef71a92fb20415b902cad31bf4553a84c7f160a1ddeb1deec17ffd59a0117c33d2df4602b111c80f95309a284960ac0ab6e6f6aaf4daf2ee426c5c6408c1c87c05b24421a481f897f259fe1a9e72aa87d1682203d6ed190953217041754e9092af5182c74311809c27e1be9a67eb506b5b74165cf173755817819e9023aa5e779fca90c7a8c3197e3703a750d5b61e0514bf0ca3d342649f0ccf69386803d54fed7d90858d77b2a87051b40535cb9ea3b544cab124cda817ecb738bd04c8d8e50d6ef0d1229ee3084b517fd40b89ad2829f18bdc179f82dfdf2692102091c282df3aa0841350eb3c71b0d7b2089ba38928a1d3e2ab076519d90666079dfd41f65469a0eac9e3073d6cb3539dfcbd128bfcf5d218f40bec2545785a498910641dcadfd6442828c9847741d6ac548724a509efdf950fa603362e126cad60c78231eb6bec6c0b8a52916358a5244abd7078940abde6d037730cc6f310f113bca2f0ed9807a5bad2237f6da1c266c45c1f2e4b693d7f49d52afe4c672a8d7ed506ea3d1918a122c8561816374d8abcd98467c95ff22c43a0ccdf87d1e2044f400e531fb7c2e2c32df694c96feadda4c79dbfad6645731b3677775ee846e599ebc14874aaa5f94c1d21aad8566b2a405c2fab6abe603a73c6f7341e48b73052cc376c1fe8e617109daf7378c653df7b6b8be8f433713c139d7e66305a241828029bee1145465de43e5308ef2149cb1909a55618a700871b8a767f07bfe08ea5fde832cb3fec1dac4c1d58ab8bfb416b82a96d147ca0ce8b45de704ed47723b8483166f748b2adfb4596f1b838fa3d8c0c4e03fa215a6a5c4016d6a60d9d35c27473b419ed92b0dd585d575cc045bb3b66a6a966ac657422f1f607453175ce6863968a35c7bc9777f1736cbdfc80543257a998c6c1e70b2088150167b40dcbc088ffb54548c0426b5434b196104224b27b73e50e7e0694068c06b387a6ff6b5d39ede0120ded1217e4025cdfde79e7bd57c313fb994d3cafe7b3eb66d98cf69fcfe769a0fee49493afb97ff257a7f31ecfc907777017447b3a09e8ce96656fc3352ccb762cdd7b6992f82023205965add5567949979aedafebaa15c7482446095c1fef154b75462a670d30100b707dfbdb7befcedb81a2684a23608661da73279e9e538b5dcde7b70cdb4e7610dd79bacd743e45c6d7dcc7fe3ef6323e0b42447f6474309e749e871b3ee982e84f27018d3ddb964d6ddbe0679d0b5fe0cfbcd2bfd4e17ca832778841a25792945242e8c15a83e8e936644627a57452297330d6f0532247d3b711640459e263cfa284c408c402ac816280e13f9e0fa36108e6ff29a31094524aa5ec48d99112bf863bb2133bb2d3e9c80e9d9183e73bad156a6bbf73e7f6747d1b5ee3679226c9c1c979018e86df115ce8794416a84a6107ec435fe1362cbd0e4499eb2b110132ef0ba537233b09a597836d605f82a406488aa0ecd390c9477d1aa9ebcc6a75ec7134c006ac66d96758ad58ad17eb30c730af8efd25cae8a061b3629473aae786ab972ed41fa5e2ea412932fb5005857535488fc2482f3e8db4ddc6de6a31cab7e106e952ebd3408d7d2663ccda6b91ce2bbdecb34c6615467a18f695824080af8cf35791527635a3d169b41be7306b902e1bd7fa344a9610197d128e066458f658d623eb2a50c56ac9e751924272d329722252b236241e44db0f1d7a5400070ad8e00d3f56a6693283b244b33b9d73c648639ca50f8710b0a4b6f9670f8a19f6fe11cb8cdc8f1decba1c12332c62d8e390731c026569db7248c44adab36c843764c5c741cec49fc1a40d86fdb015c0210c1c9a2f6d0858acea2727582119a2a3151a7e3350a233090a02efebb307d7001cd24382443c7d8898e290483a19754087fb2e29e0374060fbd706e0e8c131e007bc43299e678c9dc7a6cc3edd8e272d1f66dd0c9e0e7e0f6809ecb903dadfc8d5237f2b9ccddde98c13e74ece39f3f8f46d47a40ef201d3b7e12fa11c66e86f3af3c55eebe836a3514ae9e3d9ed1f7a8a74e73dd83dddf6709b50cfcd8d5c1fb11c922e565e1b3de07d658a3fd4fb3acd349bd97fdb6143362b64816ffde4071664f271bfde4eea0c440df2017bbe87a66fed3cfd3bafe766cd1f74034c3f43e168d88713a35896659e14fc359eb78fb37dcff541f4bd9e4e0ba2b7ae87a6350cce0dcbb3466b43f488cf25def8d70f89727ddd66eed77b6fbc571663846f7febb2eebad16e3331deec6117df6af76f47358c30d26d067617c2ace3af9cc10e34c23ff4868ff76f950cbe6639140d6dd6304809de346a682a3d4a51e40bc4d765461878c3148a7cb1e12bf4e96f189d27087bfb0d506511c757977b3dbd386e246156d870830622026fa892807471678900e7cb2a2809867f63fe0f89a2e908df6197b197298375b75215d097f5af6b5f7615d65a3fab7546beac9dcd3aa8cd8fc3e0388ee38208228319449a734e381d44c2fbd290906a199d9041f9c560a5e10783d60703283e1920f1c9c046d3344d73bfaecdb9cd6079f7d0b40eba600ccb1a6e9d7675d8a5fdd651ad7136dc068137a7df632086fe68f8c500474b193a82446e33f1b71b20206a56b5209abef75ffac578d8c7b285d005d7c7d29335a39c00cfcb04064834fd0f06456030e46297587aae49cf2776ecffd2d05c83d5dcc79ed28c37c7cd88ce494e079c9c5b9b770df6f73b62c9114a7c5fbdd1d01cd8cbefa8be179cfa4a971ca4be3006662cd6486cda1bf5674c400e516bdf74c031c6d0d7d3941cf192ba6e396e1735d6499dcd8c074ce9eb33ecc62d47d431cf28b0cd8e5991417984066805d8aa6c33d2b7fa1746b12e7c81ef753954b12d90b08746350d339419a804f86509cb0fbdceb3d3f303514a996be4cf0932018610c226b0b4d045601009709e3106159c101a68365a53024a410689349b2f6c401fb021c285920f054ff85280c447448c23454040a4a2117b8d5ec6d22ccb1b890e118b44226e3b24667c81771c423b0f72c5e3103006465118d453f3872254bad3f02b020993f6cf20cda8fc48b366236f0f9788a78b5b176d641cc91952c03bf6a05dc33dbcddb66dcb299dafd99e7e677bfa5bd57ee8acb369590f4d63d9de0ca549935e850caa641804c201de9e9ef3358cc26d1ad8bd7f5d97e76ba847765bd3527b0cf374577a327bb86941b4d6f5d074765f6236fcba241f018889983140829ac09b0bd5c0cda06174cac614f0e6e07358e54a803e106d4c30638c93870309992e60c2880d0ea49448f85c20c6870228ae26f3e1cdb2ee422d035a481cf9b2256f24121803b5dcf3d2e9d947d424193280e25b52848a1ac74186a3e7cb1e7c7abeec014acfa73d58512d7651673be4cb07e2c36a4dbe3ffd8cfef061f5852cf1bd6e3be84fe931de8dc77c99c3214bfcd9c4c69fa025607f286be83b01cf8fb376d85f9d0f0f9677bcf62b8d3356810bedef592cd1f1ab121dbf2e19a25fd0f09bc20bbd7fc4eb77fcfbd98d353e8e51fb5b3f76da5fa8c1abdbd7cfeb3331b43fa7451acfd7f7749db71df6377bdb798ff6d78df88eed205367baeda8105a38fd6b4dfcfa36ef48b71cf16b9dfe90c6da8fdb8d1ad283ff23d6f0e1d1f1e6400c225a0a9b8f8b2c96488144e6a9215d760dedb30d675fb36e7bcfd76e7bcfd6a968addb94d6ac5a0c080dfd83d3dbff981a731b0dee4296ed6fd7f9acc39fcedf4ed4d8b6e37aadc3b61df5f3dd519fe60fbe301893830f0cd4f73c90a92bd5326d47ede87b687dfa9ecfe85f4a61e729842cdb67ddf59eee3eedb6ef742a7acb706e3bead5a477a1a6144b927d363abedc018d5d0dad4686fb837cfd0877d435f2e9571e33d7c41df165ae21bd28a1c085ce1a7e3bf852e80399da87474f38afcfae88451aed15ff66a8a26b4817aae918a33b087680d2311a7e51883185165350a1614c0ef12164a95ff30ea2b7fd2aedd4f16b85428570d6802cf099c88f39e6dba79937a286f0696276887d103d3390c883d659738d4bf943ad13cb344dfb2d4a6cc62d4bd9344dc37ed3321df5319a1a5bdcf811b57dd011f09d7fa3e022cb2696bd16b128e3bc91a23d90b9b38fd8bdf72f1f71479681c49981444dbf6e9e6fc0aff18ad1d68f30ba10e4fb14565abee7687945ed1e180335cc3448b2afac7947cd6342ffe9f9ca20f3faf0a4fde716252dffd2c148fb4f28723cf7fdefdb8d2605c8c43ec2f7e1d130675f371ef46ddecea33ecc40a2def573c8817506e45f6faf9797ddf57fe4141d7ebddc41c76e6e39e67b9e578cfa6e3e3c3a03908587f3907f4d2071bbd9e61af9b986fa887ae68bc579832cceb72b6dbf42f1418133b57b31e6b890f44258d3108f1874cc33804061e010132c85f6cb090d57fc370d311ac4d025be5f68e9c663fefd995d0f72e10b7cd129339028a50b5fc418eecb2e47fdfbbed9bc2590b8e347d4b326c9a074f111415de02dff0289daf39500164238220858d090459321543431f283228e788208fe44160ec2e2cb8192cf092620216c35c8c125e38915dcbfb30726c6c8c20745aa9002264432d791219e40c1133f686330410c2300b1e4cb8115a0205c10164f50f104147a7f485be29e6409668004245418c20623900235c25dc171ab261cd724146ac25dc9022414911773202aa80b54bc1af231f739f18920831a680a1cf5c3f7dc0e32c1839ea1e1c784496754dbba941cdb77b24ea7937aeb6860a675fe99dc3a1aa8cd4ede9c66a3829e7f2bc4b61bdb6b52c7ed06a66ddda681baa647fdeded6ff902f52db6cd6c340eb3bf1f738890e5fe8fa92164b9f6958c74d4df0d7234d459bedb8cfdbbcddc97716a710c7d757b072139a4087652d319f59c7b071d1fb3f302b95a66185b826cb14e21c48350880349c1712dc0411125251d4c492595b17b0a9a02cb5905863f1f04043c5d36fd0bc65c3f7f8331765f4db9a8a9a53536e5661d0bd0d4d25f80960fc7f82620265f13453e269280a8c0842802153a40c2a90a4d44461441f235c104e80331f996c8d19a86df125c44110a45c171d1dda3478135e752baf41897c822091531c627e2d76f41d79748ee0de00ad4dba3e943f88223091270056a28700b1a6e392ca0a3f46d86cad8828e119492d261266d2449c3995134944158f9504212b49e5554b4195be00d3f1c11067e94281e65a7428385c50c26ac804a12bcaa70873db68d113e9d50bac0951890935a457a51b4042ce5298efc45832bed1d476a02cb3edd482279f3c6f5ed6f3652c21312356e94807764e9f83b4299f831caf8a194a45468481b1469b305f11e4b075f12221f8a043370dce348b38150d220a474e934082025384eea0c3404a3462bd8b7888c73043de88203f503f4a0deaebd0a385e4425f12607c6c41c0d7fa5e187e4d3d0090d3f258668efb074f11b604cd4fe72bb01b278763c2975779f3ea7bbbbcfbc64088c89930ae805cc74e9fe6eafd59c9ccf90e3e754a807f512221ef9a016e0a84142602d640efd968da595f4621645e0fb201260491a01de1247e2482ea44b2bc6eb772c7935429757458063fc8f713aa8088e9a158378b51b51514944c51bcfdac7d66694cb769cf4ead7bf3aaaabe6990677dff39728133f3483b5d7aaca5a63487a1587fd98c3f46d46be0713bf460d3ad6f7fe6e41e93a7fd2dd8717bce0052f785dbf5b503acf9f74d757ec770bc420063188410c7e30e6b87fcf832d2d28d87f3e9fcfe7f3f9ddb2427769944e463ee93e9e0eb26c1d4eb672028c24b630e20a98962db49041c3cf8a1b197b70495b5abc97991dc9aefe65f7b55744554a0f302625c7189ae62d79c8141df3a996db8d4bcfcfa609fb89844d777d0629a493529791629d99e708b278f6293d6099c3c4ba3d8b6827ed79b367f62fd74c1bd2d6afb986667d95b0eeeeeeeeeeeeeeeeeeeeeea89bc21fa75ab1704237dee94d5e1ab96ac5c26979303ff2d1bd1873dc3f942a19599fe5382d0d45a452c9643a9d6e6e501aa6345cb134841042082584104208a3a99583d362e1ac58aad5a7faa0c3b02e0e6e7132e7378c76c780349dee0d4671a9ff5aaae9a7f8ad538e8e7e92a393249d6489ca4496bff8a36e0a7f9c2ab258baba2c89ee0893b8284b27eb5235f2975608c763fd8a8bf872f839ef43deedd86ca4ca5019aa9041955d5508f87d67f88d0ff09bd3d400d4d334e42dbf6f017e6396df5c8ddf4f80dfde00ec8af5ac006c006c0c56c5c2f0fbe6dfb8fbcdfdefd7d7d337a4ef45e3f5b53d7d85f415d2d86b0cdb5863107be8218d7f7b3a7b9d71d9ca5fa6df0b7fb819dfed150dbd09f857fe4540de17cf9037e60e900d7065b83a94a7c857e45f5c80bc31c79237f735f27e8f00797b03c83ba475907f57f2bed8cb1b7302c89bfb00e4fd316495bc437ab67c45fe8521ef8b73de98ebf2e63edfdcbc80e32ff4e42bf2af0b795f4c236fcc710fcafb6770798728cb57e4df16f2be9885bc31b742dedca3e4fd9e8cbcbd95bfd4d027ef9087f3f6feb94ede9c56b393fc5e8c39ee7ffbed6db9456f27c9f857ba267ce26e1ee5c94c11a5222aa2222aa2a290969928bf17638efbf7bc1d9a32b3e52fb06567cbce969d2d3b5b76b6b4cbd0d3bdf474e9e9d2d3a5a74b4f5abe94a12cf9a190e7fd731cc6176569995af27bb15ac22af6254fef5af25aba57c7ffd25a7721cbbde2dfb8d2b1aa642880121954d91a49bb15260dbf2a78d003d0f0ab62889e3ec0974bf2398231d7378142257173e46484898892764f11e273a3b9f495ed25b5b478de3fc7e1f936a47f294270fc991202bcb31569a4fdb395ffbd1873dcbfe785fc9de42f33ee4b1ad92bb45f293c60bf7a1b991a894a20f07ce81bcd7cea49afbe27bd5068daed019cafd4e76aa534b26e2e808151b4b52a74a3e1a457ed461321cbd4ee3663030f21c021b8be427566350cdb68aab6d9a5691aa66d1bcd46a3d1cfb4281d4e8a423fd3b48d066f345706d176a3d1f6b30b5e515e1dfb347646560804f68fd275901babe9e5ac17d3228c22c628e59c935221586befcd02c3b02c1bc2b66d9d0e0b63fcf91821c6181fa27c4dbeaf89164d92a0254a1819880a4d4c4d4a4d464d8468f99a155e80209b30ef2ab47f840289fff542fb472d80f8b09a066491d7cc368351a280f76bfdd265a3a878d23d8b5fdfc68d35eff67dbaedb81ffd47a40fbb1df7b563ee8876dbb1ed883fb7990b84221a42adbeed229d3ce2fba34817687fa00289861f93151324f4c4999c3e3aa0b7f3f0809e3f8ba8f53131c448a9aa5841ac06d3112bf615d36e482d371d396ebef7e97dd7108a0b97a4e45fff9b83da94fb37a496fadeaff7ab2a0b2ea6e06f6db4fd6bfffa53faf573f2f9601928db8d98d2f7ea6a3e9b8e782fae34a7607f1fde90da7e26b50db7186a9c4aa8061c37e0d043071e484490481729374dbb2e0b1a7d5973dffee6767db9e9881f1322dadfdac772dcb70f377cdd48b3cb19a1d34eaa9353858eefc50f7406371df0ebcbfbd7efa8f7a5adbe1ed357760ac487d510b2f8fff0616fde7207b63be8083fbe9441151a6ae8032db2acc3de359c61d97f5eb8c67f7ad43e3cd2ab4fb37fe6f9c2b9df49725543a5f2d148499496f42164894fa5921be98244a2a412d7dcb3a9cd5cf8a1f2e6fabaddf7a7bee9f09f28e92991dea5a2e174a821a5a13fb354223d9923064db3bc919efc2b07aa638eccf117c9922c95cf0ac380670481cb5cd7e4bb5fb1c27b4f862a420008d100049817603415365c48e5608283c6e700950d29aa08fc0002a0d5047c80c30c96057a50010ec7c7120cb4d0d2c0143ab0007384f040b482c80729462823213e920c12113b289d948c88c2f4311dd1c1099f9280e2c67393e4095407e5440e525b4a0a273eed63925265aa2b9a5861ab58042622eb8aacb8050e702e4e1790452a69d95604e30631a7c61c214b88a8c887247a3485802c92e42425608c24a2244b368031d208136491358031f20864912f4fa016de92c50a578ca82428144a060a85ba99567bcd155064b868d6cb29a594525a6badb5566badb5d6de7befbdf7baae6b659bb9590dcd4218cd539ec49338e24638111abe0b015f9c04efeab2300ed77a99e389423e42a5be297292936826d54cf22baf1051178ca8568b063b08534478fb37450a5899eabdf68331ebf7e61b3f18b3323aadf776d1fab4700b6b5d2d7b73ee07633630f7de5d61e1d26aa5f06f05ff50fcc3fc73ff26adf6c2dcdddd7dce39e79c94524a29adb5d65aebbdf7de7bef9571f2c10508f907533e7221607421b79045b802bedc6857d2a43a9d4ea7d3e98442a15028144a2412894422d1c5f2bdf7e5baeee9c8e9743aa1e0e0e0e0e0e0e06032e2cdcdcd0d2a090a8542a14e74f049abbd3f4530e6122212894422d1754d5aedb5d65a6bedc90763d1462a954aa5523268f7005225857422491247347c69047cb121ab34e1dc16cee1443ff248215942a53ed5ea743a9d4ea7d36ca15028140a85b2015330e5163e41cbf7884422914824ba17c6ba3eabd56ab53a1d399d4e272c4d2693c9648a1e29c327ad28187393a05028140a75eff549ab5dad6aadb5d67af2c157d661060d762e11c7244b42481fa4103030f8710bf8a283539c9b8bc229ee7b95b772d6e9743a9d4ea7d96ab55a3a5c1b8d68f91b2a5eb5544bbfbb9528128944229108bbe1dff77ddff79d8e9c4ea7d3dde44aca38f1495b30c6befcd9c56ccdd66ccdd66c596bad4f5a4522914824a294524a29ce585edd7c73737373731359f10a0d2313299cd0137e4c02bec49b3965ea15e11147fa9267a2acd3e9743a9d4e3757689a37fee0bf6e2311b47c9796cf1ab1930fbe2118ed445997c62ec61cf76f73cc228cf9a42718538f9c4ea7d3e9547355d55aab4f7777779f73ce3927cefb8a44379b4c2693c9648a38110746a3414b11d5a049533c4123221150080da30f508886af01e832f05e8c39eedf8b386e8b80b7d85c176068f9d7105a7e96002d4584efc598e3fe639e2d8c05638a405994455994455994524aa94f777777bf355ff96693c964329968d062b414119671f21f8cd5128c992fbf12015faeab85bc3f9f1933b26ad7d29c7664473863d973cd1bdbccfa9b63a694524a69adb5d65aadb5d65a7befbdf7deebbaaeebba12a081c6c03156c3c8b0d2cdd0f0822f9e87efc995095c91dfb9eef6c1da8cd5aeaa956b75f3f61eb48cb9aa9280b7ad2a140a8542a1502291482412f917a38950b375a2ac12680c6c47f762ec76a4adae2a7fb97756d5acaa595594524a29a52ccaa22ccaa22c3b5bd7755dd7856118866118dcee0559ae6b2b9d309a7f17d23882e3db140d7239c502755330e726e298320f0cdb03ae4ca6a281182a9dded91b0840865d777636070440338f6b8185155064d4cef6c0ca03e0051768a4806c67ef3080154f0001884105867c3b3b88ce08105fce11a484e19fa6fd55c36af7b3db712ca7f080218dfb46a33df5a4e730d33fab95baf6d9d4bc6a557b6da3a1da671567f0eb4643b5f699d5ae4bd3a457b5cfae866197966598a66d34db775edb681c4689cdce0ed2e9b08d46cb343617c0c0da6f345ade6e5c0f6a1b4d8597f63664dc720a10b8e68dcc8fd8a6a1f7bd3a65978002a5962204d31aaacc5172c025432fcb5762378b687f6aa2d5a6ded044ed1b85a4fdef4613b58d7694142178e394486f8c85ad46d8a37294930ff6a8608ca5b9341e8db6af700acac40ecb4b1d969b3a2c3f75587ed361a13aac548795f2947c85757170cb53caf1945ce429f9a8e4248f4a9e503c2a7923c3a3429d7854afddf3a856235f712ccafb4958c6a38c47ee2bf795fbca7de5ee2bf7955bb76eddba75ebd65530663e4e394e394e394eb9e314b6f2421eb6d238e52bfe598a0deeb05625edd153b272254d2aedd2a31a69773ca21127de4c5f4d195bd24e6dc9736cb7714afbd7141bdb6d6ca5fd2b944149754e9a64584b7b8a10bcad29e5071cdf864c1101de765f6bf297f9fe79db9376933561ad784371561f4a3422954ca7508ed77a1c8e8557572533a1359d6e50290cdc8846a412bd41a5e22ab252a211a9643a95ae54b94aa5ba1d9a8d4c87a9e2d21a6802680ca581c2d097df2d302673794f86972618a37d7c082f073d027cc481315b0cbf5bbce7f005c0ef160f761cbef1468719bf5b2008a6401ad005f802e47eb7e88ff7faf3c1f0f336600cfe78618c8c156a48400c0d302f79b7b82060860318a025d45200961a2d0358f104108016151872f72d2fb8402305d4d2d2020b8e72b24287727272727272e2a493936ebb103abe7f1225fb938e7eada22aaaa22aaaa2fabba5d3fea4ab6fadb5d6dadf2d28ddf6279d7df9f7de1ba28fa8d46e97243154430300140013160000281008860322c1609aa639a22a1f14800d6f8a546a58389288c4491083680c116314000240440000640430180501b8b2935b6114a098675414a452b03a0b9e18d70fb96bb191ec9d658996b6ac4f2cdcff62544b18c96e63ef707a2f08fdd292ec19ac8f873cbc63be8814209b51034ae06241c526b0cdb929bad1e04c3fcd9d14c3b37b991eb48c14231864be600a5e8318863b747faa28fd6ba2c7e7af2ffde5e5727a549c939b7bddcf80af4b4ad1651a2923fde6e5e7de1224ff86fb9b72c63b59dcdb174d061a943ffce41816c6a4b6a9b1de67a4816b577a99a59aaec28750ff8664e90a2d272a119532cb9536eea7f1ee3708ce6cbb974a6c3a19f771dcc3db92048016d6a8b7d2121369baf5be992c75c92ed197f805774ddd359657e6e5be7dac1ad96acf34c28aa8ddd94bc303b5937f68d245d5e4bd4bf1d662a1c4ca3a04b10c0e2156ad21c412339458118626dab7504226e5866dcf88a8e1f34a713eb926820f1b9cf9e9b7047d5c8330c3e9cdb2dca264c4193530e1c74ef4345cb11d6f2d097e29d298f00bbfdccec39d34c4e5f4c801ae2fafd937f08dd11313aeb92b0dfbe3662b96c15cde2713f047a812088b894cae7289cba7489f0af661f348c53fa02adb2fc727c51e714a2fd6804445cc261434ae421641a0ecc2bdd68cccb6474389569747390d0ef146bdafc2acd2ef012a7e1a6eb8d936712fe9927870910590ff096634c566451bf876c2eddf0e97054565235918e76406fc905c1505561b4a4f24acc40935398376901b790c120e834be5133ccee9557670a21483f7f32921c69b2fe18920cb52c6849f29cd0f302caa57f29aa2cd7afbd472de7689000aaf96e533ac99914fd5801a27c4488ea7113da8cd7e4ba5a269a1dad664998e1c621c4cac2030a4517d2c41637d7516e4808d3088c80bba387fa411acec3b9c104ea30c4682d5252272838cdc86e04f72434187462e6aa0a10ba62759e681066bb84bd695034b8077bf6127c98689f3903548ff1eb375cbf6364df2c6668885e1a68999017ceb24abc9041cffb177020e08c98902c923c03485993a13a1efa1ad3cf5c50814f71e32e78cc03bb43d43932549a9d55d0f2b59a080a4c304b35e8dfacfee6cc04e0f570d34afd0fbb03ad0037eb06fd11f9339a999dbddda73ae7272be654a302d0a71cb419dc1544a543206258eb09d04d31a4cc2c9341cd030c58f2ed1e8be1c612897fbda7f1e6fe4fc721d967e06fa5fa38a5c246d17d83dd591f7c22456ddca2faca6d51b824194bcc87d188426d68bc50063b36e95515e2ee7a5dfe4c790bbcfafee7732482ad7eb4902aa68f9c963ab740d504ab092e2a1e46ddebf2f7f3db24c2b9c66bc7157ee1eb090a681c58f1eb5205804d11092be56d55bea4206e4b00790a6db9a7b1c153105229c71e4f2f283f8c491ed6c0f0b0c475f393c7030384ae713577df81156044bd152b3166b2582da72c8dc09a471e6a49330645ee331d591af04759014f2edaf9685f9eb6a3e6d57d0c7371054482adfb1ea77fcf65e0e93d93a00c80926d245369449b29975b2d11b654fab730a5bd973ca2133f3ff0f1a35e50800b0e5e98468a7891908d0dfb211d93bede1c003ac2e7f821effae34bbc3f12e86242a8758f6dfe12c2a625be165ee50ef158b1637cbd82c49fb3c0fd191fabf143405f141042448595c4a82324e694a804b3e3da92f426df221e07a6765ce34d78be2c23fbd1d6fee39907ce4d9070131f6b376e9c5ae0837a84f8b3d0add3f232568b5454a9263c919570156dcf1f276bf25d1283603c67e9a4df2872df3a704910634363de75eebd5cb23e4f9bfb2cccf3fc2464a7f67587b3fc79a278355b49615c609cc726e288fbc6a5f514e5096b9c1f3c88bd592734399a8139c59c2debcdc5891f826ba6361e97b533f160dbfc5362149fd2ddec85a04b82a4bb6c535ab6bbf7839ee0bfcf0394e564b61c46a2db0acd64093d51a68582d266f1af8de16514cd3d98e5c74c60cce3431f620e8ef99959d76beeb3b955632ec7b5991eb0230702673647503bbd22b541df854c61936c6c1f9527adc5bbf5a66f7f9701ea375450f8c7c1a6fa5418d6d3e8d74d2bc97b1599a4cbf1ba475356cd36c7935f556862ec3d2e532ac34ae87bee0eacf82ac7c852e5ae182bb1ef7f364fad7014a389d025935e6f97b82608c01a925d6f8a0c75cf9fbac785f916143e98434f166fd74e68a6137f8ec97139b4ede4d7e3e05d26b7d71673d3af7d553163bcc6dceeb8a72272f2502136332fdc031946690a86c4ada129c922f089722b0125c4a12fed7b559f6cb5e77274411b7e0e1d2cf1fc307c4124239805882dae83ea834757a3a256cd63adece2c12be68c900abc504a4ad2ac8deb20f5e562dd22a43ebe98921ea31561608a5ac52d341e312182f12f0af84788d1a3778d6fc744d9a67c23fa9fe4c518533dd0fb9d26191384f200f78ae6433d31a5a333740a4f7961a79f668897612e8d2c8c3603acf6ccd3041ad7293a687ef00ec0c7b41a12f074ec9913e8e9fdb956b722eecaf532e80500364104ac00c428981eb8dd7970a84ea85c6550700650fc0dc63fe8179dc01cb8f5ceadd4b664d85a7e26082255b0b6f628878017c714d4cc71bcfca28d3989665a63bf31a1cca06a28f96b0be8fbe6e30a61500f99c031c9e58f554725f18bf6cfdc83e62d9ed6fe6f347b25a08170c2573ab8ad77ce950323e4ebff112743cdb9ee9de7c46d69dd2cfc761921607aad3d4345d4018cf4828dd9c10070dcb0a0736c28cae7d545cdc9e7b5c8b9a35357fe7641fd63db71956f5c044886ff92582c82adb6737d2eb23b63ad0274db685ac2a2d59f641d9e06b5992bd50999cd16db1a79fb102cb5997fbe53106d04e7ce57a62c8941b62c96117442aadee7e7b3f7b45135156b41359d55235ba3a795fc1dc86a48cbafc482ce73ff694c59990ce516cf9691529fd754d5630c3f285c74e80519c575d02b0b63515a991ed13d3bb79cde84e864ace72334939368fe1c2cfc068c4383d2871c7c0ec65a7042b504979496bf4ada18f8d0be97aff1c38032bb00abc905694f33deffc4b04a0b6e3f3e963a03c8d467ad4041cf87749068c7d70cd39090f844cdbb2517bdc8d1021c09193458e0cf1d39193a51d39f06a51a4d96d9ddfeb704108696661330649adabf924718cababb11e716c53979b2bf65f3b1e21f54aeeea638faf2fb0f6db6f388775c3f2cc0d8cf6bde546963558e3ee0447376f4333728136ba2023a90e299805e0b8b0a0623542a268dce5c25d8e10b4750a9a6bd5acc434e6b0c699d742b14dda9d4daeda58b2d355313253f9c0c20219777360304f088ddd074460141a8bea90bec774eb548b37abc94a69059d5bad41aa49db72102b5f508c2ea6d2a685f3cd4574e1aca29bc7adbd0c5a9c51422a0318c2510a8e64ff4a6618cbf68ccd74944ee0795a16cd849e3658034fc82408bc832516d788845ec3218f764d15f6f35e637a6ace2692c00a071fb8b78dc50bc63eb489affb0823e4a341d4d8ca97797eeb400124e00bc1c6c80ae6457078742a71b672786251a6a875531aa0d5a3a0f4fe1ea797b7f0134a786f1b42f7c64745804b408dd86148be7d8ad0d6d44390e8cc94247b3ba5627c2eadfc94433e314ba32c7f4ccad0179837015e82542bfa911740f26daff0f92a9368e3d4682a3bd59d90075878f6a24a0629e140139358d0a5e629ac4178bfa6602bb0cd99c5e51f5c390e4e8a7173752ed37f668c980ee44959ed6b286fc8d3a9f56907980b33b47e31630fd25def6324cb01a37008983dcc1f20c71de13cea02847c5db3196b172e51ee01e998dbb615a940d3dda7e04319d6d0602d7115d8d2dc8e910aab471be9292164dcf95b655bf98450fd219ad3501d9300246deef30da25c5d2b51d292a8966bf55405d5927c289572561ca2126062a6b24fb00e955a66401cdb8cbd34fbeece68fdb2c1be7f5371854da80d3532bc004c82558f404091aeca805e7fa3288fa1a9463d3c2f38b863d5111691b66eb077241a5485a49eb184819cd7584dfb8f6371fe19b7841a4816c46a1da20e2c79afc0d5f11981fe20dfc8e3fd9f7b07fe2dbb47056fdfd941c4e8ead7d8dcba9423cc555e182077caaf220dd3f2f49a91a4de35116fcf596e0543e9802229a0f9507581201dca996a755135f9aadad3aa2c5fb13a66e90bd6be00969a2af6e77a36266e861a0f363593765f7f23b0d07f02c3c01cb805caa210c01661eefc7758f60e496b833fb2f6eb597845d42f8e1c4e5e30c90023e51e39c067a34cc388223650cc483752fae0d7f8f133d2a735a6634652ae4673401bd0e2cffbf2bee506ce2658739d40c8ef2e9db156a135e50621bd77d989678fad991b18d57f4b8d2c6bb4c6bb0986686af376f4726d77793612dd6f4c508ed0867a572c01cddde8c80bd1e5270664576484e6e5bff4841a739f70a30e5e7364e187bdd3755a978fffa7049cc994ec0004efc2502f5a44a9cd402f3a8340a0a738ec38c3605e9428f4e9a178050253501e931d610d0a06ec5e14f757485ea9ff9d1abee70d3f2cdb6887639a8ebc54f9b04fa880ce3aa88f5cb6ab1aa86ac462eaef03d2f33efef8ac5acbea9366ea2760de5310638340639cf4037810a20a38db16491b471fe4b79d1eda17697358fc20f4bd921e5d510325d47fdc3c4ecb1305e7b95bfec4eb21899f9f73699f9be0b938a31530735c152d729dbd1e2d0357eb6e924fcf999a21a577afa9abb278695e82a6b930758c8f64c08ab7f5da296031b82b0971c4930b476c8b84230e1a1cf1ca65845760e5084880e5d5957bf3d45457f5ce1a486c9a59d9b6493d30020b682ab96d1308d91a1e686f00e51ded26375fada91dbf0c5dd25d2f95008bb0ac619e4635811551ff251dc80535ba01a449f53fb9702eace8ac609ad0fa8e04d2c4472bbdcfaf4d53a4424daedb56a4bff8739c263e810326a4c4776c499c06457ecf3a515a414b7e48310bcafd156ec4624aaad277009e4d6f9f8384a8dac43346eab7cd81b25046040b94451911fa2213ad354d3a4e27e76b379f0fed979ee48bea59df3e7e6517d35d68ce1f88879a75e6a50669c1fc1c4b7fce5000d0b147eebb7638ac95671b613c385cb2d60e0073c405ca92ee4162fcccb5f4532aba7fad621976704a96930705c9bf77805f2dbeca71b996c3edac5dc724af3e0deb6a6829a6ed6ec97731d345f72fe09518d518fd6b8c3a585c73f0b7ba9aa2a56fd615d19adc6e66ab2d35062345dcc87a7228c1d28aa34d0451948b53a53ab6ea47a0efd84fb81f3fc9090b8850e40e601e41d87f1642f2af1e1fb9d78945fc91bf237cde3ed63129e79bd5b4410ec3be685b86bf994169284bb7e48b44e65c62fb1ba8fe97dde0d1ad45b5cf7ab3fd851852d9ec873c9a991bbb3e519066d0f108edde2da17cc9096e204c1c644675c2814d6d224014045f9e4614b350be902866238313459082eb4c752d0ab8b306e4f62daa81a890c4e07373ef0ce8ae720c5483b872ba0e672d9c270e26a64e7b791ccf3dc86d2ccfd1ecc14ba3cec519c71789d9dfdbc1555aee88355b0b40d3384e88bd7cc6f0318e34bc52f137c7157718bd290fec98f904900736d81b4ff3fb389ed7ef4804df1c5f7762113188986ab74fb802ca2934193d3e2a1048278f6cfe82a148f07200daf0b8774030a0d7808c1eb96ce18db254ae8eb2742057e696c2f4226c0999b56101a14f5fd21da08a4e07f20de41f9652bdad33e1343a1ae47453716701cc88e83fd609724ce2319193bb2ba129928ddab7292110083409189b98a272a5f9173ba0b1b9e60371db2793d9820737bf2c7e56bf4a62fb69196f73bcd9b392e5a4977ae5125fede1a1d00a7a44d24b541b831b728dbccdb6940e843111a2bdcc7d9c18c987f7b89891cd04f670fe303af0752a7bee1c655ac9bca4e0859f8289f57a0d9bd5ad116c5f3561d4b0997e466ac6dfd3d47ab212bef4cc36b403b6d47713d86424874a19ca11b7e1ae1f1d5d10c1ab8df55b8fced81ab944339f7ed889f3345eec2f78579278ee781790db847f723c8f58c0f29b351a0ec0e72a96834494b94e04d18a842f0939a0d6a36ad788008adecd5ee81a19184326be2195946934a4b09fd29c844f2b5ee846bedef700040b00478b6e27549b038828b38cef5aacfd6b9461a429ba3e943e4ea025cf2eea80c5eeb04a053156cf252b7c6a421f801468253a70ca5cb888b6887d2248b35240e11c1f4dbea8c1258bd3210d4ca5beb45d58c1f042a5de9d5473d05f1902ed9383dba997b29cc264f6d8c54ed6610f083fb37b74491f1e6b83f2ad63ae9e5c85232ee8d4d8272ac25daca99b8ed2d366a6ade6c6f3cee072d8772a0a03159471984b5683574167a8e9e466735904f8be3b0a8888faa8f37d9d53c660446cb596bf672881343469c4faec11340f5a5e575708def15f93a4f7fb960c793d38bc960814d71c908cda98f4fb542f21265fff6961b2b77a70b8251144794741e5ce884f2a7c3f26f1417359688827d38558af784e29340676f738d4b753e496f7b213a80f39b910082d756e9f7dedfb64f5e0b6607f3728eed42964d923c7cedb4aaf7e412f76f9c44e22a70d4defc9fca35a1d3d2c241a517914638514d1adced6978707d8aec77a0b56883e9bc2a68a186429b807dc6a5d43b6ca92d674c5c0a4f19b0837fe3e0c9ae2fb9cafab62ff2f6f92efb88c3d2e6abdc3dadb91d30f70603882f5f37f4152f6313c98248c8167de28c9e899ee32ac4c01f60aa806dcc6557bde7c90222c23e698e105ae3edc3d0e798ee35fd650f48646b178dcaf60c76739131e03bf79dca1ecb156e76341a4c58a6998b16ada792e78905cd05b3361e5659533ad547ea7956438129a158a2db4a523c932d4d133e93e43476063f865570dec50fd1730b1719cbbc1aea08e993da6f7e17e6bb9bf7833e815c4534b40d2de069f790275f56e2a5d0c8b9299ca6ef5d9342e304145a138aed156975d86c9c0d185dd401967ca5359f902f44eeb9e57e5e850bbe24eb5e0a7a03b6902a822ccf621d94e7bc44d6e3cde9fcdce1b1891464200c1dbc6c52f72344f5447006e1ae437fe8d27b52d35764e6a1f29d04d82f4d52c6b21e5d2092946d538ebc18c1a41a3f0811148150af970f804c5289dc0ffd32614a16502708a43dfaa06559f0d5ecbf457e9368f54e64c9c54ab47395493190a867be40f4ce3ca68e044dc88fa5135791fdf112ed3f49620ddf39e3304e9d21756807b74e92f4da165cf7a1efa02e0ae87a894fe62908e68244bd901287451efc8d2363672683943dac3895877b7a9ee194c779e53dad76ca42c01721a9d6e8ffd8260eae459ab829ddb94c59d3ca9e67ec1bcac1b29cb008e4647c78f9f533075fc8603fae73ee5e071eb9cbb8424eb278d2a4b06a0b2a394150d75515d951408a6cd44294895768ede0a409754db8692377c0750dfe87c4a0cb53c4d76a13963447f81196860a965527d2da6d61d76e000e75d151f17869e2a199423aec14e87d555c185fe827b2a4dac71750c2b0b400be505f6568a5863ca0f2b6bc416fa05ec538aa8063b85528da316fa2a8ea3836121943ba8fb900307b931a614d6e6cafd4ead4a7427848624e8a9de7350fc354062fc7e780521cbcf93431008fa39f205c2ab9f9b6f408cdd73e703889f46f127c1cba0ff40a5eaee21a04eab4af7221da76354fc12fd4b880ad28f4c4822a562201420d4d293e065dcb8546a3700d2d6edff4f9d8a3cb54ba080b9a22dd7ddc8ea918715c5ac12e06169fc36259ca669cbbb58e717d432ae95ae14ab19c24a8bae0919d764b7090d9ea63148b3ae1eac7eb8e4aba6059c9cd24684ee14341f23b57399ea0c5317728d5f77435d38c071f45ad50d153e4045763bdd303daeca4d554fb0345afd00525256b01dd0c4bd96b9cd760795335e8a081022ecf1d78e2e491629e655dca554b5dfad6eefa3ef1ee45e7aa78d217269e93d8c6cf217a5668d19f489b1f51666c1a488f35f61871522c99f71bfe035f21a9abcf53afa4811f27d99b646fcd0e5fe207d4425eff2352ae42aaeff362a9e9b8121880e6b5bec1b65ea12cb67e5ca4e686c426229d2254aad44fa5d69bdfb3813e95b7fdc69c108453a3b3a15a248cb331f900ae980f2822c6d5d1917d5a55c7670ed97f87af322bf57b29ed05947776016e2d2c3f22fa8be611d521732b9558ca1ed3897075c81f89756cb61aa6a85400151ac7ea92c037c5f5de43022a252e39dc21a250482a190b2d946927a38e06117f95c5306f734c8b0b7efbb403738c6bace37fd089189c61d7cf8324a6a07108c81dc49858d66f6c19b529cb82c650a89f948eac71cc0fe6592f24f752aa25b002c7ae74859cfff9d9160bc292129f627d305cddcebfe397bd14bf482ba9c56278869d3d4345b99833426660cd58b0c4a8952304d1e91861387d1584f1e2c6479b2509179bccec089cc7c66024b500b945f2890df45455b444b06563c17c8dd9012dcfd10ce3e825c1da14ca7080e1f1111c121006a31a43a0410376b65a778a6820192c6cc47e85e7574572514650c5a50c7a1de7446ca289cb87d0edfc277e02683235de381212a1679e79316e231eb2bed0624a2a92c2f0532e4ccb796c9df48863eb1141ea88d6e22d40740d2f535153319826959d4658a22bb901874f0743d1269a8b9c8832a68b81aac9801108fee695c172f5c5ddde72aca9cec8ec18214b5b0df8b866a91156d27ede32c6367fb61dbccbddb9dd27d6a3fb822d38593c2723f6f2ca44ebaae772212d86e7dc84c3155dc90260b24c26d0aa8d5c2229c14b9165025c279616de7d5e8cebabd3275c20bdc2977b937e3dea9fa14742d0d025f1e6f9a790481c4a933cf3dd3db40f3c94a5181d1545c74b3c734b5ef69eda9a9a1b30fb201fa4b9f4e1bf0980be6a4041eaf099c5e31f045ba75f003df6a9520a25cf303f5e6e918e07412da37b719d5d6d9f2c68c5f022d85be6d8547fb9e744540d75bdda81a6453f73312b532b260ed2f3bf198f0e0118afc0686daec710a18225009f5384d4b13085a64771d4c4398e1ed319d21347afb8a7a84d2f8a644692c80df6ab1cc2ffaefcb8374ad14ae513b3da4d994c7002d1c85c790887a0774a078d95632c9266b4c82283d18801b2228d5ac576fe942550ee9fce8c185211000ca06ed0d31cfd6d792ec28a6ccb3b2de0a2caa64911f4ca48d5ea0b4a7c1f9cd31cd990bacfb84767ed278ce5c45fdaba8671bdbb78010bde0c263e9e9e845ec140ed222b6a4f3cf48d2cfa53175d3195d0b0b1fb9002094b7a1d17239270cc55e1771cfc373658b409294d5f195be8e8968de38eccfa74d4fbd3bd270190ec6bba79c9af64d258d5f1bedb59e493ee4a602519c7ac0a91c44686a8c0bcde257278c95183415ec99f51bbe8545b1a1bd51e313ef5b8dd9205cb4e4927c73c7952fca105fcddc7a9bcec432bb744c3a993408ae4e16830207818df2a87e2d6fab70319bb052d221c4072a448116b2e653340ed97371e936000fa9cc0ca5510027037c9b86666f1b4b938ef3e0fdcac5bb95618291be1257871758001b2dc0055c22bbf49dc279a11d0e05f6e8c812f3b4def78492b29c010e03767e67b6aa671a114db11c739448a45f280acb09e9924963e9f3ce31aa465772499443e545afd3c1e4134cb3a5ebb8bd75e9b44b253e19ea626859be5479950df1023de528f44ea9912b0587307f441d4d59377169c0b068350151f780d53be78bc6b73e9c90b3279b6d6fad6abed65dd21f968bddc59bf5d0c93e1ea9933ceab3849cfe307a0bd901a5b459ca14954a8dd8e0a5a2a1c720f6a10e3c1ac8530bce6bd528410ec152b981deec47bc57c38a8d54b889c2250aeee1060131884360ab4ecb7d10394324ccc7753a2c62611d62c30a51bf16aad7203d8682f262647a23a7cd7b7db26291bf8a947d3fe490be72326944593c43928def31d0554c49cc8ce240b48ab136d5dc735c872cb48708af447f5f7394e488edaae3e253b54bbf4192b33414c4a0280645d186a281d1b23a203dd1b507acb8f134eaa32dfa3f02017c36cad74190ec0dc17a5863b457d0dbc8e5c1d5817c015c0d00bc7cc1f596cb767f8d7b53b9d5dfc01adbf6b883b74f1e413c83c90c802be4c7e1357bc5e2eb0bef26e330e2010242b3d51cbe5242a355029984cecbcf32493f48874a43716bb379bcaf5e84168f56397e3a892d89d14db75bd0b8ab8932212576346f55399447ff01042cda16e132c5330709a839331ff8806eef84082c08e152996d9a9de69806d5c38918f93d5aab5dbb922e0b8a2cf826a1fe04afa0f26c52b3afb534671e03e4cabde8d99bd4d242a1a00004b49b50b31a8dc5185290e3f5e1242c1b6de1444697773b27225a5619481b67e291761354754d6da30ed01db5a8d355dbc5b4b698f6f17416c5fc167f4fbf7e6b1b53c5fb55e6e33cc99a4285b37fdd5706e0cc3342073a7943950dba7d00b64c8826e3cd545d0f38fa53da8cc81fbdca0ab04c0fc078b14b897fb910ca0dcbb6fd8e401ec6c14ba507218fc1f02ab3cc9de44bda15c7ad62f340d40e8f372f6ade9723858883acb9afc4eb60a4a0522acb5e7eb29fd20a0e1743a03a9f69733c13e4a5cbdeb5285813215060f250aabe37dd954261bbdfd1d9cd88b174b6c505abafa34d261d22a7f947c4f5459111eb5db62e18f25c9592a5754b49eddedfd7a3910281356fcf0cb9688bb4d331c6ca6303f7fa8108bfb5dafc9d57f0bd679a8ea30dd66865fb384554c284a51f58992d3da2dc6cfa909b623d506e52f287701d89ba8095d4bab38846b604cf487fe607e540ac6cd30c1d17d736f1548c4c608373212b71dc963dc586d06d1a72ae0f5a11010f8f38b0203dc11b5573acda71298ac9b399704a231050fe29fa088645fc300ae8b4b8cf80295a4251fa325fe519f23024c1b2953d7abe8ae4af27ddc5cf7a4e626a3a15235ada78d4c0dc5800b5eb4db3d592ecc9e3005d3aaa34fc0964b847e3dbf32ad872e6d7239a4082f6146a0e205fdfb8e7d2a85bda4c7dec9c10644e5bc349b407b7cf152951054b610822d6cdcc3a3f93a3c3e4f1b7c5a1e94f1e1e41964060c1ba5f3fe9e449bf30cf8cc911bdc5ea9161adff801f64f37cee571dfcc235109dbf2f061a6949a635bd9a5a9609f961e2f2b55217a1a87d00cf4455dc8d7502275f1970e66453cfe45639f99d120cbeed50cfb10c6bf5a0a8dc05ae195abf5187c16ddc889b71636ea7b8e91eea3b72050b4d46d3070a811307b9917ffa0478c0c0d95cbc44dd050a9dcc5c79392800d701c7b8e53b3b1dc2872e331777a38a52b14ead0fffc48b8b659d7fba97f152108d80867a1f2e8a47508ae2fea00bcc84af8fe55081abde8fc3f13019050afcd3adb290fb56b954ec5776e1db782c80c45686d35dc315a92977e10cc57e5c1a0f7890989c4eb75f4d8da35cbc352bbaf07cfc6af093a575a1ee101ce9a0af8f6383af1ea43f44b9c9955c846d97fcdd13401d01cb9191293b77e2a82871226e7ea92aca5b3ea20d64faf5b59d3f0bee2d2c1885c4bc68d36a9a800fe4a8d4402cd3270c4f754cd38d110af840af80a6d182e199e6bb1aadd1c866ceedf7bc2e8166bca2c8578e645098ee7a843623c14a744879e5fff2171fc08644628d02cf331e735e9720d18538e00c831a1b73136dd45b8399bb57f7d535c742c695b66286584f55807ee08f0097cf3c9090b453d5f1c9a21c3609d2e483aaa6b51952f9b9ae3be5430118b09cc1081ac75dccd144a9e50f8837137f07f2d98c0757e09136b7ab2f06853a37a7fce7a6349966f7ae1f39e1c3d1999405939904a5d64538e92f7d62284218dfa766f910e9a128c37ae643fd851c3a005f74396121b18098b2653e01dfd165ed2569c7d1679530ea575a6ecd47a70472b19a0460c47e57f903a3d2670b0ebe7a901d6d43a1a4857679a42f0aff0c51905b72f68ccdc6934de3cf2554b0f5045aa603f015522a158bfdad225d7bc2dc8b52271777855b9457b20bc1cbbb763565dc0a9055e572866ae2b2a01e0b246b882ee92ff459d929b32e430e4324eb2331f0bf927e489de282639d8c5752610baf597d6414610a96f59e465697b4003857313d4a5a3ce151d069ba17f9c44bbb349ee41ca853767adcd6ba3cde0579f76560cbe7303a8912e321ebab312524009b165450cb4b3e7eba4a7ca19d548cb09232446cc68df41548390fae45991231d078de707388249698b5a8e7f54540b7894e8ae173f1ed7d786eb2d81c0849c06af2d2a35d4d691c65499d51ad16735d9d8e66db88366ab15d72b26d948b9ae50ac41f680ff61780064006cce98f60f70c8aba881950dfd6de0d5fa03d855caab097f59738ea4976ad7344382dd37ce82146b7d4a78e611b4a39717e1a064ca9615b231ed32e5b01d80ae0685bf4719ba23249c81477fc559247672ac49b61b34a27067eb0d452b61422f3ae1bf77aa7b42d8de02dab2f1865afbc943c893782822bfa67f9d8f416e8621dbbdaefcfa43138dea3a45d06333cdf44bdf573fbe66359381db6bb5518e7548b5d01b4eda74c1d6b233a2d0047aa715ab40a309c00606d5364bce6b8b23163c953610da36171dced34bb58ca390c58baefa068364e66dcc88df569146378633a5d404608a8ab5d7f591c29c210b9cc554c21877c02d917a8c2bcbfe59b6e69322ce67fb181ce083414dfa56af112678c348261afd39c8272c40e8e124dac519d7f21ca8660d24c32695da0ed4301cd57bccff34cef4545750091b1d08f8b930023e7f449a8020415bb4a526e7a17f4f55e43711d60e30da0e83bfb43995b6a24e9748f4214b13bc7552b47ae0f76a48600dad9289d7c9469867fb3f58b86c46b5c96d4890fa728086604ebe03e851989f012881cefdf2c0665f41efc5d1aa7651be78c077916d1753397d3626961ec85b1c76796f6c9a9ef4056ce294a2e0b6ee07bccf271b1516d86f5b33244b46c587334e57545161ac67c305bf34015c86527c4e21c3fb2d44351cda5684110566bf72166851d028189f276dc64270af9514715b8530b60b36d33048404878d9c56af17b243337c1a17d45e3eb7b83c494cbcdb0d9210efabcc5005b50edb853847ae3251361d89b66c542cf79217e7c0042e08a4147034d4e83480a916d15e686cefdc0691313b49343fa083bbf8129a184639ae037a75e200c632d2776aa3986b64ad077f18d89344f2c4927b01228728284f3caef858f62cf7fe2ca73fa929e8eecce9d8c512404c75d032b8e8e5d5d89cf27f2d67bde1f748ec854483060c60c7f95255a5da00ca0e77d026239c26d10ef055f1b9469baa67ea675cf2af359b97376d4e6530e717e5a7f50ba7a0b414c2be2b0dd9dcffb6e064d6fd09242998d48a3818edfd1579844a8e6f90490ce6ea220a675bfbbcc563f02300197d4b668853c6ac9a35d6f21d546f9d065e1016d6aca19475607deb38d0c2b8b070cdbaac03ea7ac7c856431810ac798320634e327e25cf6ddd3324a0b9d46406f874809469cee2bdb21a712cd3878e751463b51c12a2bf152de95dc5d09dd485a42ac0aac1bb89e29eaf0e1a76df6d8047acfa21656610b5347bdeb76e2c756744bf444d2797f23a6bf4eb188b020eed71ba87c009900ebab1dc364af103b2fd5687be36b0eb1441d8600a55b4bb600f55dc8c5d4908b321c008ed817c84302c7654fe2aeb4c44d8909253dddb457a2622a0fc55d612b6d700cfb197bf8bb2cca1465833eb3e2af6cd4267370db5d2e7fcb4d9e7b48d66a29b61b29df95f86c27b48555d3f607337ae007d9145388fa45b3d6d61f7b0cfb08e066e9a3bae105d0cfa1fac0c34bde32454ec037c9b84c86787dd8a908bf47d4ecc1352c01582e57216c1482b9249c9547fced42f4e6f1b0eb157ae92aca29919a8b344229f76ac5abd16e811dc2f2e676e7d79f5e32ac2020398ca521b5d1389b2b3e1687ca4752ae0a951c389d7f91219c3d30c822a0d19f0f2b2b09736e9d5b242f9091777e6c3648b9ee3e14ded94e673a44d57f83f28654df0259daf57094ca0f1b7900855bae439f16848468e3d0c554c80d4061ebd48dc233d14c9deca9a266a573129a90353a015144300247a1a1961e3593c8758158605559a26a3db8812e8317d4ecee7537601de31528f0d5dffd9a6ad6af139ed6064b6ac3a19214b0283b87890c503e6821564ad08a6a5f638d67a628e42f7faef00534a2d62e5dae1f63328f3b6ae6b5844538a960442df15bab7ea9d731e20452835633d6a94ccdfb0ef2d7d2555f5224fc2b5b28376591ca0d60e6e4a4feb544d11924ae4b8130ce0bbea47e64bd7852b7aa5f4763aa6a72f0c3a2d43a04ded6ca3fc1cde2376896b5ee9e36d328eca74f3fcd9a9ce4bd92668690e879d6a48b28bc0b037c004a5a5749ff5037fe3bb4e7d387f1d3a29b20d1b20cc0998c8c3bc901e5dea8490de551f165d2d888db4b9cac9bc14d853693da52a588ede37751a877854b0814d09884e9a1e821d88fe4a9369fda302d7aeb6286a08734e77d1f3b47fc3fad29dd3b37c7111bd3131c0a7eeff1893ed00852b3f48dc754a386dd863f80eb2894ec21f8597323977d5e4efebfc5a7f8fb6d7f5e85bb8b0734072bc35f151d8dff16f5e60d7fb0f73a70a771d42411ae6f000f4f0a02022336d7501ae24e405a1d94ca14faecd9529c8ac1178e5149403d1578d65f57aeea6aeeb24f09999745ac7c85b8acca6a14372a2ccfe38bf7b2337deb6404dcbc235cc9a462b328ba13dc80bdb6b63ec45a5c83f11f4188264c95a57693cd3b0757425afc24a47996264d681e26940b34acf964662667b436b155b6ee9e6e2101a5601b68bbcca5174267e30331e8f62fff2364de0ebe8ba8330b7de4fc443d6c278d2e99d3f784e8076d28ce65c8c3acd00bd96b0fde1eada652e99cba830007d8cf14a78c8a4f653894513882afba88bd1526e873f73c94c4b0a5d1df615a0d14ff0612fd3d0bac14c4858179830f83596de989ede088055ed45501d5d0c239e27aa1971774ca0c2af8a9f54890c888587eae6aab7cdf44801443be6b5ade03554fa797c50c32f9a5f24801d28acb2dee21e0920725338a542baf9b779ab0c59f6cb91e652dc3fe03e50d43d49cfe0f364760590a1a8f2a4252c57631b3dedab0790135be781dd592723d933670aeea084c806091c2a46e54d1636ca0bff1b27fef158534d5d4bd4fa476e4f3d8503e6a61eb98a72a83313284573fc25d0c9c9ed906dc9e177251a6433d15d53b918b6ccfc67dde221acde358d88725ac384944e4b7c69ce84fec073e37e704418b0c8bc0b544375f23c4a47a9f44f633287a324acfa53b4e3c1e773ac0f0781456099124b1967f446c08c085737fc29de9d0d0bd19308b3c1dc3af26359deea17b91241b5aa6f81bc080ac9daff6b6503ed111e2586d2b89f57e0d0b84f4b3ab5e09172f5a45c24af129c172a97d5ee80b9b116c4eafb82bf2b4295c9e95fa3a35285ee6215751e04c7971d01796ca29625736517494bbebe44cb0630001952bc08d5369481475562ea14e0d10470efe601ccba8b64e00d8cf3da27eed162a8edd4c275e72c1ec24f599038ec39e79eba331d87b6661b8b4e65c2cda2c1316f97ce66068f813c2d41971efe1e9d4d3eab24e1e21cef8c09bcba0e250f71dded47bbdfaabe82321ae6bb5172ec9435abeeba8db46bf4dc93393e112f955142ea85ed7f77b8991c7c67114fdc484dcada16e584fc3bf610dc26cc962fbad8fcfa28ca2804981bdea9ec6235767dbb0e5ef12a268513e214cb793525382536bfe4c24c6dd5ac5c5a2d89db413c87450d0c8442953ed40574b12457e794a60bee336740bfe93b90dc6f0c4e0fbf9488028dd43e24568c9c6f30d925213cba02d9930f08e4f840fb1a87016de3d12cdd57c04ee8db1549625fd1c4c94080512831cbcc062302ce5d34524f298bb8237cca1cbb3dfcbc0ada7e7286985e45310169217813e5ac2ec3a0a086eff738540c34d21bf689538f4406ae31a3d58d1cf23ae0c40561325f8f2246123338403156ea237f3fe58751a044e8074bcc07a88909bfb6d58f7adf3681249e9e083b549e2b576a2f828845e0d24fc248dcb7861c685e8e376782069aa3313efe597ca6b9d831cd2c929bfa483695592bda123fa582caac07c123de39e686e5074e28a2066023a79dc9cfa178b18e512c3b8ab68e76dba277d6abefdaa0d08e2a63a1bcc6c1c571bf39b380eaee26e80f718b4632db449591965bfeea7e2679871176786386fa7c42aa333a8fb413f9e84c4efb625c8e6fe9d35a85ac46af99e337c7798546ac22995141ec1b833e7e4f208ea4dcf03029b2965dd7e2037cd98f239f71e890648fcdd118d75e614c313c0e5e609b2592d50e7f1484aa8e130bee0ea0b7448234dba773b15815a9e82f4231cc4e4cd736796890b1ac628c9d1036699c689938eee694ae16dd132d3a4c2c0168e80ece61d33ffa0d82733ea06478e5085f7c87f5eb47ccba9011b05bc132ece5b9ab8c7bd106ca769fb91f581745f6017cfd7a4bb2921a56751837660e192bd4c7407f6962d69f731c39d88e17beebbffbfaf5f9846ddeca9cc5bac43036a3050fdbddb7d3f76d1f6dd7fe1f5c2940e189b1d35dcc2708baeec122e2b0aadce79abfceadef858ded6fc3883f77133f84122651a00f7b6a9b6fc5e5b127270dbd76dd5ed00a95f906c400a08dc58f15aa71e6b51c77e507f44290714c4db8f6a7eb88e17f87861c9d83b8186698c937f4224c4d29e4246eae1512b3aa2e201c0ceace12769d769d71bb62febf11c2362af58e87defb4f2c0cf5b5cdad1f30be3bb637783717f38aff0d25cbcb1beae0dab718f99f954ef9b9ae4a04fec85c73777a42ed2a90929fcbeaf69399b7eb120a85a47c00b214ba78bf9ab10273530d781c0064c7bd7c8eb70616e8c7affda2fbfd7f7644f66fc5fe7f799585b75a62b08eeafa4f8edcc76f3de33e380853687d467a74d38c6dc7714f15b12ee675dc5affaf872813938955d711f8308e09864942e2fd2f6121941ad227567f804f2362a1e8a17de016cb04445297777bfc2eceef7622408a81f5d6d8b01aef73fa97819240e90d80f01beb4a43d7a5887a1f3a974260bd8f3beadbeb4d09bac7258e9b3beb50a4bb4b972e994a8216bf644d4c7c63e90dd03b6c5fe70d9b9d38e2e5d09f7776f97446087ad95bf999380935de9add302b08c68487bb31dd6445066fcc9e84df98330ffa13e5c83d667d2ce7305a3ac5cac47dd4654811d661551884c6090b8a902b13fc8e044c37ab40bd08923ca0ad1b1235cb122ff84e5b54dd1669716bd2e00d12c535630f3a7276844e96708ce1b846d96ef112aa00d89d31975ba3454e386da3642ca1a732e46195d1da0b8e46badf475155e6ce8af436e6d51463be0a43ce8e7d629e89204af9b03c2907bdf74c78708b916f35dee070fcc9b945c3fe1ad75399cae361e2c03b25e58855856423da2974b9c3c0842d81b61ec057fc2d2462fbd2258610768ecebbe6464c78b9177b928148e496b84b542ead516fe00667c8ceb0226695a9edbb2f13176c1d1605895e5cd7a04de012cf640a247150dcbd464a1afb67730bf3de0b32b827fc1b681fd6f2fc46df2e210eeec892652c46ba4300bc3f63910bf7648efbb5fdcba0f4ca5da0cbfbddfedca95262e4a8c06a32038f35b084c3428a3ca055c18c0058c20b5bdba9448fb76c914b615a96e17c96b63f75e4f574f6ae0784a42e6583fbfa292feb0e8ab91856af2843b01c405c8f189ca71466448fab481a62daf4a1c7041bc2b28418c4d55f6ff2ca31e94205446303cfbf695549389a92d84f11c578a146d6388d2c4dbbc1a662e8b9969938c5f3ed3a63f41683a30e6e487a3fd2a88c23533b14e4ab98a3390f01413ee76a3cb472bace30aa1f760c96e85543ee002e585fd87115f1c7ec357eb7b76b8f03d27f9666b7ae766140c6d4950eed40fc80e531a4f221d49c13fa2c5d4933e2c5326ff40c9d4bfd583f7ecf4de8e94ac158bdad006dd9c2d5826f61b3ff5ec5fd30bf52ffda3dd26c1519df8d9ce528dec1d8a8edcc257d2cb149301aa669094a0f7d981d9eb9dd3f71ff801aa6711df2efbc7d1efc902763e61ae8391dfb3dfd910ef1bed27f517d3cf2a37ed44143455544939ab69979c363a5456b308ea3eea3792cafcb133a38623619114e207aea126e451fed4de103cd1c59b52ad46c3a64a66c94e1c84b5222bc5eb2907142b18079fc730ce9f29866e956d0f7b012fb1a7b6e183ee5406e5efde5b3ea54280bff65cd013224c059d61ef4c0c2559150a1e35f3d980e4f82e6ea65c32ff3b64334ca5fd93d06508c1cc049280f746cd2065b64c03c513b937d1b751feff8bd2b93ee8de12851a1cc086470967f4a1b3da2152c783590e21390fab330b1a0d6e11dc3dca9de5e9bf151167ccefbd57c1925e12077e2ac2f2a7a090b24a4c363dfe7fddbd7978e1483520c19ee09495b5972dbc397aec4f1cf8c05662c87ead5b4934987e4cc6109649c03f4623c8fbc5ef29382bbd0fa0e63ba39393f0132435492fdf7e17ab52116e54721aae96ac930692755ef9bfe05cdcc98a8d753244548dfe5fd88204d2f04148615f94d7132ff9e2ce88b3d5d8db73b7c95dcd956d1dc4d83ea65073194a9ec82fa778729b0e8e0e2401db88fb85a86198f16a53a01ed2a8e4f10d19d51622ce1a71ccfd00a3ebec0d2ead09311b7df06772cad4f271fc3bef5b05c13e2b93074503ed5a955d1c7c4a8f448a4ae8a1258d05dba2c58451a4e1ef3296421e85c7de5e86eb42a2896bca3da7f9eb258b8f648855a9cbd167fe464e632e546733d91a784330f94be1f452aa7c29eb7006268ba6171be7ebbf3fa869aec67604ed3a4757a2eba1a57dc0b3ff26304ca276c52197f18308c773c032fb601903dcd003bef629eee2ec0d1d31719bac42071f57c4c97e82a6f651ab4f829381c2c698c7a10ed629e8b8c9f06f0d09e835a71875ba3fef25c57157cf5d8e98ae5ee69eca3e74e12ed899627e1c1036699a0c686d688f44a2a45de0eeb4a4e25fc557bd99bb3261cf0cbbafbcb93c5793c924ef2fbf297b519e768e4bd1e58dcea9150cedeb625fa93c8fa82114ab97e470dd19cfbb3f68d5da12560107ac1c4b9c70d72a4eb8d11e112a18f9cb141fa8e5108545e73d004b56260cd5264f20c5b71a517eace05a9db7af051e6eedcc6303330e05a45159c3143e952b9279d582fc7c9c334856c5fca0119ceedbe5e38f324c12854b33fff7c09b8b281aa3cd6ee6eda174b7ead099757282d24c0b87f6e434a6ac946ab583741f350a382e681fd7dad35afdc9e829ea50fbff638008cc4dcad550c46e83c36eecce6917f4393ad671cfee03a976596a4f0e7e7b93f1262927e7f8dd8e0c71a961b69a387fc00eb5b1e35ed422a4f974a95be6148463f26c19aec5d959800e89e1f5a27ed7452b9736d7c89c0945e8bb6c378cffe7f1f58836b8c9e9a7c043ae024171f14ef27bd47859373eed0334983a2365199c567080009436eb9dd6ea5f0428a4c4e5db683cf92ac86f0aca11c71c026e09e4c92e348681a714b5d974f00f10636f689b0c141e1f188959109534031631e098a02fac1516a46493264a138483001a1272d165c0ae52a6e44f9ae8112b9ceda027fb93a232ea42c46b580aa8bdf084f7e50ddae41414c5707dcf8463c3dd2396e0c8d783c65ce1d7b87a5599ce4c230564b8b34a7994490af7577e1f48151bc0c862676248d242460ce75c1741d6022832a3d6cb34b5d5dab51bc41581d7f554930006cb4987eaa56ff4288a2361cf909066dc928488b11d47ce29f2ec52df659aae58ba9c93ce910522a5d6a4daf3d6f82049df8e4e322d99f25767cd9686eaf9d2ad7c6261398290c20fc64f171da5e83220668f1715c09368570a12a8b35e01f39e8591cbe815bd9ca3e852579da56bea1af22bd196a433b83d0bb837506f08cc8c8a5f99241de3637043acd355255d93b57d7a0bdbd79dbf56c4d76363dfd42a6cce1b3643c2a1369c6562197fc4f3ea33f246576e1e0929aa38da16d8fab881516a3e6f23448128c84c1e618ddaee01c5711ad8675b30056a5b3146a8695e7e7c565d656e03dffd66b286462c6f2ce7dc13e1e8cd8d7d3ca79f2786210ebf5e2db9d71635a74cd3af8938659146530e4f9cbb7c3aaf8afbc52059ac2039013878541eb9894ca35804c5fa0e87c550a48776b422e207d78923007e959818871b7b2323f99b9205836f3c29e0ec753affcf831272f2a65cce9a04e085b041c5268ed7226080e7fd90b1f7a3e82e7bbae24ea1e4cb163d1015905bfbed36e3674883341dbe22bdbf29d7ef7b95a42ad63b84b71729746477933c95bb52feac84506995a0b88e47e4afcae66ad49b712ce3a9e512469d9e614245ae62434127789f7744861874e20872050fbf949c60d3aea5823d5a53a76bd9459d86a100f305d90456f5e505a7a19346866a1280622409e0429fb3202c9dc65f40c1d5ee11c8acc52c13766b28e2ddc2b0a7fd68cae3363136f2faf9d8b6bc76473082e6f606463d21742a935c1c540b7d02746c4640d2dc15eba963826bb5c6e199713849464299e70db4147ef8605ebc5823059b242821ebc3ef9c10330bd2864b1821b351bb81af060bbbb186dcbb1882e0fc938316754c36b8e11292b5d641bb91b784b7108c83183760f4e74191ca097d8ea062e65071fa7aab4699c727149531e2f42f74b39c2ac0d0ef747d23291613f6bc9e8b5e20e7b2f18eeaab005d843a1eff1782bac48da841670938d045df3a7942c5162fdf4f2b6f80ba6c65dab20ea26170390563fa4bc48dd3c9f0ee14a7dd356128c9a55305a60dce4fcea95d841cf78c126509ae3fbafe9493f5951898762ebcb94cb1a8785c49f22863745741403def0d9dcc86e18117e548dc6baf8e14601f63ce92e5870e529f33652355def93f7bf3696b37936dbca80194fa61866c1e7eaa47057095a4a387cafd1212fa79ebfb15b3262451f6d74badaad823722bc51486ab74714c5b856d9ad6939785b0296b86946b5601a05f45722caa778b65a5701a6f78d5ca2cd26b87391cace01fa3fd17f1f9031d0c17ef706cc66ffefe7f7486a761984fce0a984b75bf6db86f9b8d6b0f36ca8e192e97a853fbd6c48a8e1d5f9d23d03da2100a636bc205957aa80259d1da33465a60be9c09b4bd5aa6bfec513c6e112f7b8970fd83ef0a7cc5729c637f3b0af22a2e118e35ca8fbc274ec70c5fba7e4f71c571d4e11c19a7bbd9375e581b598735fc8fb6934e1f953cb78ac6984529c77c955eaf359820dcba5c3031a88141e338f7f81962828dd58204cb8bcab9b058aa76f234f3488824eaf54435b404244cb6df0c31b28820dc8307bca46e321817b8e5bf0da6f36d08a3ff54f85af98293cc784f2a70893ed945c5fd24ec83d5db7346a05df76b83ccd9d5c9ed57b78ebd01938c923fa63233c58e34153026f09b65d3bdd2c2a6e92b24a6ba9571caebab33925352ccca18bfdc904b11416924f7b8545fccb7be4b570a56e3228c41283238a6da5e1f2453a2706538f64bc723ca12d3d62c8c08ed223bcfc758c00c64c0d302fe76084b6358cadc38dbe4b9d998707b4b56acb70b37574242f602d7f269361e87c40ee8409e579b19ab948397c6d398b62bdcaee159f293f771a0720bd2655d50c67c292e8d0674a127afd07641652b26aa1461ecf927a3152b418a066038dffd2e9bf3d7854420dc1e9a23040fc4fc1d81f2c55c51609fd5cda0c8d4aec9489f640902585816176acd564ddc6b80e5424bff2ac339853d5059ee026f0e0d719d405b2935108389fe46104efcac2490ffaa742d473512fbcca325b3319e1f98eb3eab868a7a8606de71bb59db82351c2eb179bec0d604193ace31dac48253b90e7333bec911a83357f52a5984bf38867ea69de4d2755afa09a6dacfd96a2bc5123bc662af22144ef8477e7e015d32caae045955df4dc8d3f26794c1b88fa649375ebc1f2cab2c1cf5a36105cd254b0792ad8e4874bf974ceb04e2888ac03bf3ee76d37b586169faa939654e293010b94aad986c4ebec8e47845015a41e28879a89b52ca6cecfb8215597464fddc096ee0e2fea60cc4f52020b56378fd898aa8b36478f4781b512565d3f46e8bd0b094c39e355ff21e5524e11cde4c42d1d2bd802d2a0e6caa2cbf1d9a7e2dbc980e88e8259d2de50a7d510f887b62db722771ae051569448da7072397b567613e68b1183c3aa42cb38f60e476352b1b458cbc74764dd7a64da2c56cd44f0e4fed76043daae3a87483751106a05d1cbf010116841f79e5838144f713c0f6191d2de376b6b89f91f4990f9233021fb542ea78c660f0e6026177a969010182a54a96b207b04104fa9892dc488a097adc65ce1da2ba21a4403d0eee579315ffd88658aef34b73724c4e03b23bb22743f2fffc0d827614042d11ea35bcabf3a32c3afe568503ea01a3a2e7552801195d39213e1c642b4b23c70720332dd9eec7eee08aa6cae79a88502818f782f285740824a685c8fa34f08e1368ae4a3e6e2601c293b17f5599b2ce826503b5d737012367245582b045c4936d81549826253e1a9b6aabd58ab226b23e7802124a9a9823e409c9142cde16f48206661a97acd04647ac6db6e10964ca9da7ab6784e16e0801f9b45694a5731057070aada6fd414c3a07f7b400f5b7d724d9208755794804c724c321942adb6b9262ac1ddee91e849600ee3959c660fb6c1e228fdcfc543163e59d3ff671d7c09072ae630f06dd106eb83ca2d4484498ac4167343db829e9db12003d093866a0a350005592d575f6b3717bb818aedcd756a9b73e77abdc3e5bbb3f1f1942517af3447c24a6b90968934833f9442927a157c5fdd09bf3a40992971960c7805e93b656e9d78aa4894ce663c6adeea73af3f79447a51442a5f70680c3b0b7a1b09abb3b0a6121e8e8f7ed8037c1104ca932a73073ecdf6217f038d3a1391ed750e74a1bad8d96a4874b3254741ae0ef3edd35467dae3dec20e26a9a8e02254a6c4b739ea73761a464389bb244681051635ea862990ee6f516c713e539253c951fe394174c30e8a294a49be673d657a4fd4657277931b58e515a994a1a8b991eaeffa6751b5e7f42f89c644fa9067d71f3ad435023002bfed92bc6af2de5f6b1ac3e63ce5c226919540d3d53e487c29ec811327b9ddad96c2f0706b4f65a8028e63713d0d1da3c058bbd100fe01e39fa71f0c22278ca5460486bb705a1e77736268ae1fc68b7747e8d5fd127207594cb294eaae6a8cee9683d0babbe02492f71e8a795485f836b94d57940805291e612ca8d9f88c1f9eb5308cf01876b574577f90526be4565f4e4dcda73b6232deeadc53eaffc05a2b30a4a8103b655da00ceb526a0b4a21f0bd63421eac856f4e1f99f609d45c43a4c78045337b7a52dcb322e08e8810d19f09f969d7260a8e0dd731fe8e7191a118b5b50aed28dcabde0f140b4df449d8fb6847281a4c971b7b1234b90187ee6c165db11c730091e6745c969c66721015cc0616a44798f5211c886ef56dc9ecef9dcd10c3630fb3d00592c1d4634bf76dad52d1247d5ce4d1e8eb6db1df1d5ac492bf6f38a4a8565ebc918e00cc928b1db275e2bced9a173562ea336f304695f767eb27d63167377423133f7dad480be22e81ca91b95425b40d2c5eea57941a7326b0fddca94f5e0c079c600313e3ca9425c10671a798349236135b505e8d8025894026a864980573a93dfac1daf70748b38eb0297f5854d003323d5cbd5b1729401035e7e29098007d18a1cf16dc9676e1835d106ff3638621b072e7ca5e231382e8bcb2d3df044fb8b94face986b770351558d3340d4bd4f47207d05a3492e94b9098373049cd0aa54a94b254127c6ff5af440e30a0432d4b8edd51f0bb7a39c9eb7979fd7c6ada37f629fbdeaa4ebbff44c714837b40d016f90aedb789f8263b6c3076431d262e7f452e566c0a0b68cdc5c7d2b2676c5d920577a524030c9f0c64fcff52b264c9f2e9fcb979ed09cf0451fb543ee3fc185c09a19a6e662e60cf982e41f1ff47ead6c45f661d1c542b33372c03506071269b9c19e7560e93af690ceeea83a4d40ec8647312332f1c8aa7993da4461f28bd589c82deb66eb107ee0e68b87b312a40e3aa5d359131835f104ff5a6bf69de2158c149d337108c4a34d734805b880b8040571554853a91c4f8b39bd3f32841d708529b0e036617d7459d55005d8f2a89b95017e3a4da812748e5cc334382913047daae0bb6e6da1cf06307b49e79b54a551f7206ea5b07a7393a883b2b5454654392437db9abf09a746fc2235e3f1cbad4d582009c581c37635ce1eb5a73344e0672907a21f92131935b337625099a73b4b19b238735b771531c91718be21c918468b65b859700e8093c44c3cb0377708eb0dd9cb123e7e2b069803909f2af5c56019a0c7be49d8c2bdfa2586ccb4a3abe01f8744f5d1337b02e5dd44bf880c580e3dfbc47564ea620d9cd183a3e73b67a6c3fa6280089e87ece5b484f3a7e8bb3713641f9d2d733fd32af0f1a622f3c0568e09a017b25ddd8de2f5ee62875e81d72bed337d5d37c3d28d434a889d068bccba6ef92a675d2bac1ae7a43598c254a79660941d1179344f50ad4b6f578530f32109fc00f44c6d235cdc2cc6bf13d24bb2bd67dbd425d411721805e293b0e286123cc054b81c88689cae25213b24379047b71602c9855d8b0084b2b7d1f062c2dc71369d67091075fc8ad9e4c356e5a3be5ee4e2b0ebd409227fc5797221b3c2788092d53161fa472e8201195c288be2e4e98f96c8560ba9d99dea13b098fdc5c35d98300d9fb0bf82de521f02d3507855d800d23a5e431783e092294e97b72e9fb23c2f460b548c95f225772e08bacd631975fa64f1d32acb36ab2b0f4d0f866f579b61d6ed9090278760b6762ccc0c88898646939e9b520e6daee5bb118b0aa7e5f32f89f9b3e9f5e9a1f406cecc6b0621d11e54f90303cae686c4c1aa28bf690ddffb0f4965ced2c5ba06261a5193dcbe2568f6be719a9aab54a195cd4225f31ae92f9386927d20d4e86c464313412932fd6486aa54626d0b12cea25859560e9aeac4f13b0fa71001c8916593c706628c05c33598a7099c8d50a70a1b2a447f41a7cfb12710c93f18ac0e8f552985b5062850172dfcbfa76dccd8937d26304751343e6c4a533ed14122288870d333f012609d1ac17fb3fd06d4804ca85ac3d51261318fa16840cfb901d77fe93cadee73870f93f73c2c450746122e6a6a91cf138d8f722e8894b1a5ab91452ecf661e26ee29d6b21d86b44f7dd4182f4a832d9a3b41aea4132d8827c792c62104f445c1024493f3a47bd7a15d2d2b637675a1b97193c221fca896b45eb5015155466530ab80de515128837c469a1540894f9fc09f4681f365eb17da9473d3121081d4f88da3399be5eeeb2dc3872cfd29e27b3b5bd5eb299d34898338b9f1910f444fa6dea1799d62f01e97d0e16563818fc3b76536d96f728c72ee9254195ea4c85c00618ca204e937cf789bea8110e07913b047110da07c1e732bb3e5263aa05356c2dc83360e0225b39e95dc84b94c551da5653926ab7c9a6d4bcfb9299a0804f039d4a400e73d6ad494e7f3ec67b78c47681869f7e7e0b18b582b99a521c2c081d0b21ebffc419b86dc2e23d24551cc9f2086ac804ffb5a2a739a895bfc01c8b960490c7f03e5831ee0072c88d592c4ced204ab9df5d4f10e15a0615f31c9948c020eb21d007b717a478634ef7051504ef6b1201750799d7c7c3a9b46be4d633761e2d08ff7536d350196a166558b86a9fc51f830066ce6459670ff41ce6e40413feed238ea91fbcc69303352e92b5e40e61afaab20710f6f39713113fd349a10b2ace7f0d26354595947f3a368bd3094ca1c635e7d041bc4fd69d4e22fb6639e085e4cd3bf4aac0761fe2b7c6e34037ea48e99841780b6593ec7aa560d1e074d2a324534acdb20953edc1a6a8a30d6de9004a772d0d11ff2a6f06bdf2eabf28b692e7e2b1be24805150aedb44707427e64fef2e1dc206cd44bb104c9c4cf28ada283fa1540957f745e65d9572765fc2a310e55ff1583ef0f34474853dd1d163bbd2c0e81b88cfd4088b689695da0c3f30d220b98a75cb317179220c7c7e21ebe6c71ac947455c6aea11404655b6e75611d8d7095b78bbd7aa10271a3993e89c912b998b5041ddad20b2a729177158a1c6f5f4742ca783b165217c4814a474841d5b20acd4d59bb44bcfde204e1c4f6a6f87c124be1b2f82a2d38b1e82ac5b5c6fa992bd2a151f4157fa2fd146dceb84e60dd84327bc72d80195930ef7a2f12dcd6e7be3b450a25797f84022b5ea904d860e44a8a765b37c1928a611766fc7c7e93e6011b57765595edd63811f52da96fe91491df6988ba2e772490f7cd500ceef92cce111aec704ba55b7e2fe7695988b5cc4628246759a30d5263a6c612377cc7402595d7e42431dd5986510e3e124691a9e1c36305c5e6e84f1644ce8e3a5544b37b4e95ee8e80e3980bdc19c89cdb1b9669bb1647a2bff771c3819a1abe1c53bb6989915320b71dcc840749013227d795ff080e398694071152a363198bfa66c91eed344855f25111d1073407cb1ea3f2adec049b21debf9b4cb9c38bf576c411ef6859bcdc31f543ed8cd2ff4ecc56ea2094144d80e1444dfb396dfbc38e64ccd62e5dc10660c06fa21d64af86868e4efcc540895a4a3348cd0720920162615a892d757fe009f7f0501684c2451aedc8458d10bac20da535dd4d70b89c472c5530deaf7739a5763d21e615edbc540d33a2cf7c0ad3118209a2f7182855590a7830acea9fbeb7029b1c30d7302917569e61bef5ef8600722fc5f1db9af88a7ebb02e75f7e1d457d3992c0dbaa2bda188ef82d5752a2dd31805a2203d9d881838acbf5f76fc3326ac447c9509cb026d7188dd4af17aa0808b9745e8dec2dd2b0f46fccc08d25018c19d831144fcff3e81955a29b3c68fcf9e0a94dfab12bf8da41b2a1fd0ba74d14ab59e90509ac03869ef2c8b76e00d76d5ed76013112248142d603e1c0397be2dc150c283eb75acd89cd7f07359c70b7a7b299040aa03ccf04f659d88752ce7e3cfc80fe96d8dd3d92113bc65f974ebcfcdf128f0e431d50e29928bdc04055cbc38f4f8d525702c628ecebf5e12c2dbdb12f5b485b5af969447c12bc0f314a2e4417ec6ed2c3c29d89c7a729f1e4f8f48fdbc9a5e2e04cd2611016061823191beadcaea2b7e6ba475a3b495bb3c48c0a7cbefade57ae82209aa7da9c4279f20745941130f0e6f3385b69a60a54000ef0d98810d7a31e16ab0e98f8c1deea67b78158dbabe8a30f8ec9dc922aaf6f06b846c7e0c55dc7299a09a177f8624f96759c89a5b369b12882ade105f9c43b08d88732a152dcbf850c39abbec719944fb364a98112f25f4e9cd404c2399cfb0fa7f92048651f6fade5b552a73803bd5dfd7d1cf2fc9eeb21135a937951ed0ae166aad5ffbeb4aca57b39fa710685ed2363765297083da179cf385f71f3933d57fe21e276463cb3ca262892aa88988b13aa2619a5120a976dc6e821dd90b35f8b55d10cb628fd6608524e567d2e7523a2c9c60bcd6059b0a462993ff0d60b554002b4b43d2adf7505be7c0139ba834b4848aeefe3174a3d1f28caf30659b23a77acf77439056466c54521bacb200989a5e3ebec72f441c87b3dcc31f84bbbe372c87b825020f9631e7854a43f69db9ab61f9d5d66318db7464b1dec24ca80417c24242d96b2f35e546e719c01606ee134810d7b4718e99a3f292213c8cfbd57cef4f86beed349200fbef70ec645246dbf70a267b82f335e81b6c5e6a02db6bc2e710662b290eeca9387fcc1abac9985f0bb00fb7022f598afd81cf672d04e3a8697276565d5ca1a2f9b1e0d4c5b6e6157400bdc037e45213807de2979a776a48a3716003b7642d57a57dc1d7ceea907325736d4d71d240c4ae00a7062fc377e267d246b36b3e8af6b2d98cce012c1b7175029c9cbf44b778389141abc626d54e1feebe3357ea6c2977a04a2aa04d0bda1cc7785ce51e0a500dc4cfee0b565be31a75f364f0b08a94cbb1360acd931f3ad78334da363c8a4d1441c4d6ff4c01deb102a51bf04a221d828b19efc8361569f3f99414b929f7cdbed412544181e8e7f1d7addba4a652ebd1128dd9c11e9a65c1f994025b967afd1bd1d6af4374b1dd750b57bae1fc6895ed4a034dc9694574f25550fce2147e58450ba92b6a0a9a3ae0822365024719ed09c4f8107f9276b6c0616e8202b5089f65cf9f0c9762a503dcba82f0408d62b0df6b656d480396f12f40dbe41c884ba1d8485011ae6982e55809615758dcd43b0791007985caeff8f7930a247763a96d171fd03771cc0825f391d4cc3567b24dd810610e2332f87a8ff2494ea3f04535dd0142bc25db9017ee85125b1a4a4215fcf6fdc12bb9bc894929452ca1db702940212031ecce7eeeeee16638c31c6ffffffef2eae162fd996d3962cd059ed6dc78f69341a8d466b7d9446a3d16818638c31feffff7fd78731aeeeeeeedefa7038738b16414c8434c3e06816aab990e6d793f016d20c6b2117d6858b4aa70b17f8d4e549ab6dd94e4833ac565d74fbcc1a27007c6ad925491cffffff2f93c964325aabb5f7f6ffd37f7981f960f27769dda5d12eac61d561187697f8ab6b71f9f0b73efceac21f5d1f167fc2bef9315f002f607c0574659744c7a4af0d3b1a3a6bea40d7b27a61b5abaf66decc97f298ca81a4acbce63a2a9ec36f50192b4346a553860c7cb26066117aacd27830d634a0653deb1d2679a384341b7073ab0354bef9b2e9584833027d830b694ea0898c4fc55493024b15ab26cda5a1b195d2d0e0d3253b023a5cc224c8ca3f55beeed280429a597e5858aca090e6969b24a4d96bf9ba97cdadd5ccf0ea5c1a021f6e3b764f92244992a41d478b046dd934d53c7695558a4f5caa5298094992a493aa14e85f69b4b22ccbb26cd80c7fef80ef71b575369bcd66b34109696ea9f6f64f4f81258c11484006c984244992c429d0deee6eb01b638c31c615666117e6d28f3dd7f7b6855048f34bd00b0cccf7af6c8df2f72f1bfb13d2fcb23e300b83553a61307cb2e3379d756559966559d2d98c0611d29c31f6ae7ee5934c48922449f253a56a2f14655996657953edf8bbbbbbdb4551144511e30ab3b01917bf2eb0309c90661732173131b49066002c10003efcb2b1b190e600eccd0bfbe245a5f3c50b7cb2341ff659eb1c0390024b3e33aba986644292244992b384a22ccb52559629b054adca2a45656f3beeeeee6e777777ffffffff1438e303f8fc7581f55e7cfe92216560c0f004f8fc653340921836468c4a678c18f8f4dd4047036bac31ffc8d86ad0388ee3388ea2288aa228fefcfc0830df5360c91b7f77bfdadb3f5360c9c96a6fffe31458c24e7f062e263cc018eff020fae136221db6db102e25ae2588a88551bc2ec6c6bbbbdce7a019ccd9c4b153cc0083f93f34976edd03347f5d1353031d0134e33973777777ff5cb2f0ec9205689ae1359c71777777b7e9048238151553680e7ac3964c4c5c37934cdbbc09cd71eecc5a4700cdb89fd58631c6ffeac26e74fcddeeed76bbdd4a184c0c72b95c2ed7ef9f62c1521d898ce3388ea3bdd65a6badfdffffafd56ab55aade6b9640153a3b55aad56abd96b55d6df3ec618638c71b88ac3e170b813985279ca5a6badb5222896c42a8a62adb5d65ac1d4ccce66b3d96c468348b16dadb5d65a5b8ee3388ee3288aa2288ab5d65a6b4a754bb6d65a6bad305d6d361bc618638c6badb5d6fa62adb5d65aff4e39d30cd3f47ef6eeeeee81a94f456ff44948f38a962a51486ac4c2277aebe69c73b5f209695e1959581488d228103af3ffffac366bdb276ee26aabeab66396159515bef8de7befbdffffffb3d96c369bcd66d471c9f37f556a1cc7711c4711144b6215ad288a258fdeeaed76ab364cd55ebff7de7befedae561445511445eff3db0d964a6badb5d65e511445f1de7befbde3388ee338b6ebbbf7de7b6f5b6badb5f6aa3ed38cb932cdc01863ecadbe9515568b8b8b2556511445511c426ff376bbdd66b557956ac72c2b2aabc76f5db2a8365aa1f8ab52607777779765398ee3388ea378af78c52b5ef18a576caf9e024be3388ee368c7711c478b44777777bbbbbb3b49922449628c31c6b82ccbb2eceeeeeefbffffff18638c31bef7de7bef8a6946374d1dad6fade8b15a5aae162f301606a6d20903d375b4ab9ded463a8ee3388e2fede2c4e28ba228da2134dab3aca8bcaf52548ee7cf558a2ae5eeeeee0e96aabd7d9b567bdb31f66a6fffffff7f777777575b96a5bbbbbb638c31c6f8ffffff03b74891cd1ec9f99c7d52d4c4e218a5b4561c5b1ae1dedb6d34beceffe392d1cd94a3869dede806eb74b47314833dcd6e771454c424348a62f42406f59d4ea7130a75b4000b45c46b1531738c4c8c189918fe3214dd72a501c16c140bdd4196b788c0d2083e3a36231b11f00b3b9b116e083c859ded689604f4c2ce7604247444cad8906ec20f3bdb5194d026cf94ad23b62224477028f2e9a9960ea140f308094daffb0e3f39e408f16e14502c129b0f3faebbbb7b777777b7bbbb7b774f0f0839d69da7bbbbbbdddddd79aaa8366c361f34baef0e3faa8dd568022949121a357cf0820e4341e0286ac1a7fb4ecf38438e90128a74dce8ee3288bd3dc0ae4556d8415a1f78dea0431045717777f7eeee6e779e3c8371a8eedddddddd3c3c47b3e290a1c38d9013215c5062490e484c501b3848538070058d1e383d807a8696b49125eecee8a37df4bd512c31654e50f2739301881bdb13385c115cfc60042ea6038622166e20aa517b547724361f66c811d243e82d72ebb1c3dd57d841be7b4ff7f474f7f4dc668f904475e428da61050e1551a008717f888afcc87f6d0c8a1a55f820c3121a78d8704b2aa2862b8809585c21850ab9216e0db72124119a4867babb3bd8eeee0e448312da0165e2d3d7ddddbdbbbb9bc773e00fc14891cc861e1c724a8e7c3044c28da2dd799a87a79b8747083d3264454ef7f5196a2188ede93c73a7781bd7c8123b7ee4f8edeeee28c21ee2eeeeeedddddd3d3dddddddeeeeee7906fbb0f0a3babbbb777777bb7b4f9eb144f3de2261671085db8e9a0a8d5b0e3e46e86e222082d4e86e433d41de9da77978ba7978f24c89b4d17d890c2199b3529113391ce4f420c3e28e4ba628f58d063937129ce881c409204cb8340cdd28019bca70839274a3bb83288acd347677f7b6b6bdebeeeeb69e6d724cfe9bc19c15e8c0c80e209c5c5104504fce79e65b8875444436b0814511409c48826788051d28dde919dd3d70afc288189c2881040f280ef80ca1df7242177239702969a500b672b8bd40a46334041210d9d201b666201147dcb884326b05e62c936370d8d9885022b4c93348ae256c4b481b114e025d68a90b0778bb93a043170ed0e6df447988b71615a0cd875fcd315c8ed25a5a58c54ae3e162b9fa8961ad2fd22805d4018779b70aa366970da0cd1713431b1bda2f16d6fcc5a80c4a657c61ed4c3535673fd7595108af234d13549cba536bf5c7a7ca9a44c9e1704dc849abb5f776fbed76ffc7fe8f71a9e4e152c9f3becf34bdef33994e2754974fb9130aec3a4a76047499ea00fd0425a1354a7b426fd058ee49e92314f4e3431afdf88cf366e24cd914bb2ed3da65db45d09d68add6dedbf676bbff637f8c4b25cffb4adef7994ca713ca7442a1403095528129952a2565b5525159616161b15a5a5c668cb0cb2ba69a19caacb0b07cb3cbac2ee3f05a117461976bbab0eb26ec611f6a3027035ecd852d27e0ac945627a0cdb769867f5528acd95b4ec0cefbda7fefd451994ae9a44b3c5c3873474e60636373279c99d668adb370ce2ac33589926b42567b6bdabffd658f4d35b8f42a05799fa9e633a12c0a55e944fde9339d6a50e02b8502533f2995a94695b27aa5d028e1cc2b9a5ba9acdc8493a509ad511d0a447f68104da24369b927e1a4b12754a6e349f9e32314e4431af98cf366e24cd9a44d20f3668a13826baa99a1ad63557bbbfd1d974adee7994ea8130a44a55429aa9495a94626c50481ca0acb0a0b8ba5c5a5e56bb95abc986a64582b045eafeed5c25423e33241b0ea5e30a69a19be7c39b4af57a5f3f527983f7599763e3b241d91f444f8ff4352ce060e481021b401f3121227b4c96012492b81ec094222217ba841068536790689073008a4015c014c1aea4026c72089a024d647205c9c07168a161160528e9b241d6ec4841a188947ecff5f067648230d21cb025740a191ab8343ff501667d6f7591ac3ff430de6ac46781d4532216421f1a094d66aef0fa4d15227bc1613aa14666a870e0993746c520e354928e9879934e438afa5c42bb9de51e342d63791a0b0d6de9b2456e1eeff4834a41fa5a41c9787d7c275266ae37a5ffd5751312d54c22e833495aa19a49f875209a9a98341c19839e7cc5d57410e944fa8748f5bbba101048000a3190000002114858138cbb25049d80314800b26524a407632202a3a26924802413a1063281061000601180418830c428c3184652d72b8d54c76d73db0cee0fe7d9f5d3fb5f3e4f5fc1dbefcccc7088a44dc784af9ae9f93e91b5017e84586f0eca1dfcaf36287d334ae5970484ab91740695e20571ebbf66ceb7424ba793392972f06bec0345e01abfe02d3d7bb6b2365085b06a68977d7c64d39cca07305371076baeab87989577fd434dc15cf8fb36315afeda338d2507a11c9d894e12e83d07dfc38a652c59cf22f082444b417ad9cb4f6d54d65586b4cf8c649d82cb6f21236ebb2cf1b62e20e4597ae95de774f68a6dd0735a988d57b251ac2573d16a331e125866302fda0856d7242657c006bc496adf0f6c57188b34b23510bf7c0876730a56a61e296e166e39691afbda3e42d28821a991ccc30c091e48fc0f7244eb259220f8f1a35becb84cc05c9198eb70aac904474457b3635e8d13fab48d9749b43e16443d3651413f2c8d626632d2b03412803be32de01a7049c941af3013c9b023ee0413952759c383a52e83e1ed7dc28395efb77f07b2ff7c533f4fc0cb910cb2aacfb528361180834b4ae8dc30dc35c62b1f167ff3a2fc6379a0fcdee69cc221b41b3ec552db3babf16564c96f762a02fb7ae9bc4c26a2b1feb7a30f342675756789ac6a7819c08d2c44a99572afaecd952448328744eeeabc731ed8dad8a9f45bcf80c31b228f34aa83f198f8975edc23a88c4bebb7163268ef818856251f6badc64ecb87fef148f3bddc414222e5c6e5ed14179634368c777af519096a9a90221ea5ddbacd2712c28360ff2ad8fde90ee55375f45feaf6117cd5e43f391839eab58dc27c80fbd240568adc1b6ab0e760991fd0f4062beffc0cf3009bfb5647772324118a42fabca70bf468c3f211568851f52ccfe039431ee3f70be4cc2ae1ad91d18491026e6cbaa23bcad31c34b480552be8cfec0ad57be6ccd9171bbdd675eebd353387fef188bcb2fb3d4ad8d55976663a1d9324c29b8cf4f788ee770a94efa2af265314a32e294cc912ed546d8cf17571c35fb0173370e72d6d9b2f44861d4594f12baf9de7d14df111c80fbb92b2bf4f617c3bf964a9034de1c98b93d4ba83830a25499c571789d21d77f3cd8d4825a6a735cb6ed7ff3f44d85b42dedbe229e57f7f45bbbf96d25b66543517ada592ce13cb0197fd06ce12e7d15e2c55600c23c1d73660d357c9a9eeaf492205fa8da7fbcd3b71a0aef5c698840123f7cb6876b9ea82adaf33d76cc4632f4d45deaa060687068dc754c0bdfb1eac12c85050cd5a154c0eac67ad9f2f52842d76af6ad4f47c4259b02bea2697b5e5bc1cca882ff7aa29bea8c85c833c0b4e5e3259806f2bcd25a45c1b0572ba5eda7f823b852b5f229a57c261bd2b08aea4a1563e7da12b701fcd822f31a2015e7ef4f11c682740b93dbe8e3770d9b049e96f98a856df9fbed729833afbba53d7e7e966bf9332eac970a4d8c135f859c642b8516720779c7eae0acfdaf76c134f081322c7b859264eb699f48e1d2c93f4dfe34551d5ce2a35b803e50ed729c06309ae2638d143afbdf5ec23ab02e9d9e8372538eb58f0f918cffd69b3f649ba7ef1cc258d7fff7d3615e5a696bcbd56c966b42e085c8a8543dae4d8d7e2c81293db0bebddcda23d8df0f9b62806bf9a9c4dda6120ea71d990769197d746061a653afd40700e37d6aaa0b350a4b016db159ceb7288870d5ffe657a2fcbab1a9add1ecc624f7df44f1cd918a56a40a3f593b976ccbf85d53f131d4993c00d86805275a8133fd21ba1d451923f945f8141ac2e3ff2f37584a2a4850504ef6054758cad51f2bbe75a5a0192291c08cf1e70decc9a94cd3bf40812589585295acde0cc9271a32d5110b6cbb0fd437b2f25d35ce4de3e73ab1b008e6903b3bdafff65ae0446f1d92fa345a10db3564a709989d108d1ef358026eee0364699f0839554b3d07bbcd4147cbb930d0a86d64e57d42763ffd708fd96ee35b670831a4ff54969c538c7d1f8b9c8c09886ba94c9f9be09248997b6aaa3d35308c9e70d9df176f8608c455af51b53e0d2374f17eda6ae66eb19bba16d517ae213c85752cd1535ff6079867b7a2b9788b08a17d71862611478fa3c5d78a102c33e09ec504f3f46280533fdc15c54d0360a43afc384317548a85040fe6a7366fcded381d3c95940fb430ff8604589ef0c70f807f9441eb2ec304c5787ea00039575646f4ef6757564ab7399595fc3bdbd2ab7b2bc370de2a1dbc1bde5b1906a2737fabdb4d28797983ecadd2c409fcc452ff58e5399a1364dc9601388b2ad8f02c733eceb0a628722001854523d9a1c6fd99430d8fd99efc6bd80666f54bc6b79d6116f2cbc64a7c6eb8a11b93bd9cae44a6139d73e0c30f63386f54ae5a0144a0504fea498612942fc051141cc8e2cdcfff992e846252e50c303b99a5aafca1955ec7827ab9e0a7c86791380326673227692d291ada8add0be650b67d1f312793c656716a04b5495a94fa8aa7b8cb806ca4b6a3c7229ed43c1fb0a9161a30831a6d1c000f7db4512d4bdaeb73420968012fb84738d37cfa187a8b4f2e5edae4f01586a1ebfb4cea3a113b772fdda99e319b8b9f61e8892b1a09bc864064fdcfa54595de4fca517b5ce4b8dc1667d79929f23271e7055a53cc1e29e4d7c8ea0935ffbc9cdaa532e601e10982676485ce62ecb013be71653fa13cfc17acb6a05ff2752b98ee1a7879236bb32385bc97965a441355b137b6877db345a946d79b3d9d5112cb225ce4adb5d41fd46831e425313fb8afdd1290ac0f51c9b88ca0fbb709b8b9b13771df0a299cbf6ec7fc767d004d2b410aeef7a8a3aa281de8bbadda7aa8b9e23feb59acc1c07c4427d697796420d49ab71d0df60360dbb26b9efb955d8136ee04120e2baed7d3414fead29bc40d71af1784dde8878cbf58f1e0e1b350b9b618926a65ee2f62d337bc1e9d5eb1ea86495700665cf63e347fde6755e9fc51b799bb92c162ff9985c7734be70182c00f062aa263d9970dd1dab2279554a9ca0f61d675ad65c0d76afa2d8645c0b1bcd98ae42368e2a7cad669995f959be8bf5e1fd28a9d3dc6ae453646e3eb82403746cd446743ddcdeef6d2c96c586c1c193474baffd2059b9c00db15c2d1176a13d6b7726893cd50c6bbe93a6477b4225d6b872a140b086d0bc7c9358a39f621d1a0e8760571122e47586eb51a519adac2a1f3281307a2795d94f77d78a80712305085a12056ddfc081ee38bb83e12a4a0f25472e50f832d0c2feb2e3c37d4e2a7ca95ff7c5eaca6d981945008798022288efe93bd12ccaa01186a0b3d8a6aab59cf854d64f1861d78aceb3be76b959b0ce81a9402074a7ec74aea0908e900b8276c4645bcfcc1f59ad835c77261aed8ab7d2c6fc8352cb59b0902050754eaddf7a602d2390428757380aa3c4bf4397198b64e3fd13c6a4ce19f1d471351869a8af9677fa9b66e2bfce9b75a98a403b929a9a6ef91908fd8bc800d310853db1310baa37339bcdd775c4d92fb8461421eb451051c8893e22045ef97736de3eac8ddcc8c6455ad822dab3d0320051b26c7755ef77d095f064f3e56a3619ce1d47306dc8492e80d02d6c4ad485fe0a3f33ffbaf6416431b3573306ba190108a9f33842293480fb1194c750fbc6c48242ecd3b8e9c06252f0324b142abe57af26cd8183f3cd7ede6ad49b76e03f66863cef5e489963e6d49706b274f048992a05adf117a0c06d5b792a8a6adbafbf4aa96d60885afeb65dbeb18b7c70193ff3521576047eaa8ed57258cac82e879a215363c0b5afebf88a0121466ee2a13f2e6b65344d0424c9d3a52e3480161214f6fcb62d8af22d4153b52f2bef23a34e51c350b98b23168e152e3940c756200740d45c546937377df52d007e7b2bbf13f8d5e995d3313d11113c201b657350cd22c2c2e1edb354a001288e1df45d1862d822677aa0ca0b9320da2612d4710ca229632133de4e777c37f3bf868b8238c73380a80a26a02a91c4f4ccd6b260df9a8baee05da9b60543b6100e94a05fcfb33c65a9c2df7dd0293d61c288dcf7a7004a7a163e1c0f6489616dbe781e048ff1aaf73f676b3d3c67eb9996cac5a8bb20b923590d8d93d1581dcccc20d6ed1b86db26d2a8688199a341a33596c0a6aa8733faebae434ba27addc2a2a03499dc2827a71687d60e77bcb6bc0211c698d5ada47a4a4455365360842df58d26bcd0d71a9f52e500c6a8a2d2a091914e3faaa29f534cd782bbe401946c7f762795d62d466a1cef8b5f509fd8d41b9cb2fd6effeb87be5966adaf34683439aec99046e35d25e22cd5fb6f53fe8c41d0773a17430ab640ade5c8b8c8d4851f2fad6498585cc16a721936c6dfac82789b89060149fd04aaa8babbe5be2d5bf82fabd3865b395b1b9511ba2f7aab0ff23d9b86d6eb9f1a3d42490f57b8835f34b8815820b19704e45586969bfe92b0f0bb7480d2be1327cf261b2d3cc2e0bc341a2edb2aa6275b1cd89b8c43d2011501a1f40471e9f16208be9a52156751abd1c5c7e9cdbbf20d2b23d0a9cb88c64e0ef7a1ace61d111fd2916a428301801d1ec00e7c64d1e5510609daf634ab8599e19674c33d3b0b743146496524999b62455020c3a2db264bec2273cb7be9e511706e19af04dc3da2f21eacfe6788516ccfb0a47ba16341037298f43976528cb6d57429885f03365554cb64de0640550db9ba7fa71c1183c4b57a8f909142083e0f7d038f2c9b9b84cc7ae4e3c6116ffaadd942b79e5bc75417030e62cacdbec41ccee065ed39debae0a41e85192c69075fe78ff286a6d6cc1706a2a9e702a4a9f0f5db6079a3033fb80e24a77f7aa96e3c51bf95ab12c79e7655dc79ac569714f76e93ddc7baff6aedfdfb7eed01312f4313e38116b4dc0eb74b2e8b9c35e714635586b981650c2760d91341ab6d20cd0f78305c726f940b48965e53822eeb29705e018e918a94909471ae8299d3ca92b91c473c8e24aff8249ebc3aad4f9e0f0493b1165bf3f0075ff052d9a676eda94bd239145b32368e1e609133326cd142488eea5fc931cba1dbf3be3912bc29d8b5a28768c1d39ffb89e1728b813f7a245c40a73e30e7251a96c1149094d9946b66b91c50efde0ffff4f150f4f8b962d2b4961147370ea922ded5732756944638a6d49aa00aab6260ea150b2559f312a437b35634a8322627a54b880ead39ed5ecd2af41be46c19f9876be60208c97b21685858c51b92b4136d6a081f50e76bcd81d89e3efac0b009c23dc715083cf68671421112524a8501b67d16862c6b23d5ba68b3e92ae2c2c94e724fe2dddd0d41f494e334aac28292ba28a511eecf88ed2b9a4023cf262f7c23ca29a121bc8c863893bec292c28cbcd0e9a5580e2f58c58244d56ac1253cf36c90da245acab2f1131975d16c01764c3484d4ab8b197504268214b402ff9a1366666b54008f9e8b290172190e1595076140da26af688e19a06a9e51bc24edbffedf9d0164ed3a7de1a8f916091f585676262bf815665284dc3292598190ba6ad5c600c19e7654438112706596a0ab93a373ac855ba41ca08b3131f17df474a964c047cd077267a14923828f667876a6bf9b746cc5b5d6682e4a0315578357a62a3bf020e484f531434c9ed86ef91850ec3b3a58fb854b9ef121691cc6a9881e506feb3d8cbe54a9b07d9d627f7e41d10713776dac6230ae71f42bf6144f7caa0e1226454ee03e61a6627042a5026bb5a1eb8f902765d27dc44e40325610acfed099c243c1fe3e676aaeaf85840e99e3e35f82abc9fd45f658c028a0fea14f6dcc365ea83c5c041e26247f4a0a67e7df12c63e5eb6131cb6d92e31b5a1c41eb03a04ee6f04bdbe6352b3d2aa80ff3bce79c1b8a86dc3abd5d745a7c5f9e831825de1b1542d86f4abc0f827a5c9d6476c18dae75222d28aa0601a3b97092f4ee33db579f5bf838e5745930087208d8f833cbece0521d21c7ad544d9f99e5de4a7fa1dd76942e1897321dbace50fe951eb7874de9e129ea6a6b7026339486930bc4ab28eb9bfbfc9d3cde069494ddcb78a3fc8301cfe3eda03b8b51c01c4702bc0d1686f1b4ae858b0505fb5bb37d8120644fc2892804c76ea462b28fd60c8b9687fcf615a4c5ab4458e454913b0d8994234d519466ee89f9e24490f916bb1ac4d500491463f6b880857cde93151ea22c912b15e206554f1743940a77bc9b3868c491d3b664cba8def02ec12dd05b9803b62be7a2835f625f5d449e6aa987d88621cb63ab35a8d4b8ec9689d95012d18935b1dae908af41c62c90a90d87c2eeda951217a24901ccbf6b075fb5a964b9180d21517c289af6e11cfbc209a33a430243d6edea10da9b0651c3cc9ed10ba8289554fce84fbcbb86a270e410709d71405cbc8ad404e5a706f785a504726665660cb59ce406273522d64a6c123f606db9501c8e12a5ae39e27bc32b04aa46ec7f492969729d5acfc880d8b4597b5c0daf8aac10a53c5a6aaaac746c91a1cedd86ca5bc3aaae20f37bc28ac5f043752f1796141ece9c1a3d811a234fe4413459aa8345974393c74c4344947b697a2ce0b887095c4aa24296227190b000bf8a811a433f92481d3dc0c9c535b4c00751247ca01c7b6a71ca450ea4061742943de46556701174400ea0eeec2157646fa6696bb72fa79bc4bac85e3330638a2da6a32edf62d2c868d015adea3e697066109d7ef8eeebb02d4ba04a3556341e6b2877b8f18086b52e4caa5a7c3b1a1bc0e13d46ee78a87317b48e75b1ba0e49a0995e1257c7a37e31bcae94a0472f949dfe25ba8317785ffe6e52cd195402b8d03f982a3a3ecb14bf5186869ae102bc80c27b2b7227bae75a48103a4282018e4028860a9d0f840f3be54b682a67bbab0c1a6f25cde7954106f253c5a26e65d3cbebb1446e075609e748a1d87281efe5a3db795bec00c0d0225484b52ae46527b010de2d165a935608af9aea1ef5afcc13c5e9d0875291e871557463d361707a3369baa2aa2f4032499f8739879521544f482a7d5bd0d473298f24587d8453b7a60fdf00c092f87818783e073e41fa136687c85a70c3cb235818171d08e1f7c2b5d3f7ce7b46d23587b0cdc6e0c11981c06ea1fc4a20e8eb6fa2a945c0d3245a9a21360fb4e9275d11e3ef1e28da7eca8c419f9453d06fd39bb5f426213fe47909df7a82b1190f0b51dda427bcf39eefee73918721320708c8df87d3958fd08c7bbeba2f8ae4603cfd6935ce1b7c18a9010e234006736823b837fae44a848b29485d79c88a880f1dc168bed12b09844a0ccf7d8b1124b88de288e0bca8c6efd5d02b0c852d0d668f019620535d3a5bfa87e80db55760c206f163168d44485c6a611429a410dab99b62d1752d8540433674562d333aae380d0abe0c29731d7c7e7a0dcb98d4cd27856e28961e01ad94fdf4753f211242b02aa1733a8f8255ca7aa0b5a926c157f3535801c0f8955559858f57265731812a1559d93dc678bdd76459e0a7650a13b9427dbeec95b847e998693a1d414369470ca4e111141439e650fa689868b7c525f57b9a07b0e5b32903d70dad878f996aff6c7c1929c3d78c3ce67489acef24a52227539dd5744f1462424a0611821114c38cefa4c72901a00bddd7d02730e34756a0ed3128a4feaf37e9bbc6703446ade058cbc3618da6ea6f73e5bec7b23840878d4b8fc7cfc620d1bc3e65c0e1e8fbd2b3f078caa165e121f29b02b5972dcae2e873164c9460b20122725c2a9d3bdd9c59d8832b29dbb87f4be823ad31c0bcfee18395b2562ee0a5a39c7a64510acfc8555b6383493d4b9f8ad6a909915698f52a659b80d3c9ec8e82b7f35b8e707697ebc4fb68e6e489f793b7c403d50df148fff9117af9cb365efed098ea7e2e5e3a560e02437196e9b26e58dfb99a2e3771cf8addc25bf6cb42459c67a66e6daaa1c8f495786d166cf23bb77b0eb6fa5063b9baf973e8649cecb2367a3a09cdb324a363857943a74ec9a735232ba23da71025279e23851d2730c7f0a3695a2b87ef0898fd292259f03b2aaa92cab481c352466966e902bd575a83ee263efd4f199c1ea64d1743da3ba1f93bb23dcd4afcbe24f0eac366d3774b33595d4f66ffe6d6beee6b7f839b45db8a55d9eab6ea0703ac2aa61b26702d865cf07b590763c61eb9103cd47f429a3167654fda2bd7d5743fc4d5d4404a1e537993440a3d6209abb76a6cd2c25ca514cf2d620a55e1199a74980018d49957f2fe1147a50054262b74af08e0e65ef1a92b70a26eb5ad2ffa0eda39269c73021e3c0353186ac812e4cbe24ef25cce85bd34e9c5b0efc493fb2994258986feca93d4360c29524de17384ac1822be64281c3ad7ba7fd4a12505c309605c4b5762ecbc6a7d1e7883f7dd9d2bb3fe8b8b5c14a88d2d3aa904648a147463a0cc5e560afe32161524d845428779e5807d4a98389027a2979ac3f1f7c15b081d8a178b0df2a12612c6a646fdbc2e84acfde098e041c9df56c78a74d570dcfad2ec3a4a883f6bbe2af51c81b0aaf4f821d5a258caae6cd64ef0c041a109911cf3465c08565abb8b8d27382e0b42feee4ea7ec7a061184594c89304030866208a34a000792a66459a1ad88e9b7d40250f1fbe30ae56cfb41dcc7f86f35682a4e9d8fca836a9cfee623a1f1d966cc199fe661a5b2c9b18aaea7159ba9f86064d275a84e7fe7feaad4fdafc86be2fd1276545150b87ca956324097f22081164593f5c754715821a8090ee5c5c363bfbfcf6672078477438c3bffd47a03772cf603443cb2208850af4dd06b458d0f9357c405cb4b560a6d33a0a77a905e2bac0a24610621452383f01165106644144c0da854d001234a79e3e6d6a650aa232d13a3222ae782fead859eb24aa22c0db3d1861eac866e52a21b768028601595a6209c578ef3b4801f9aaece43244f58cc539977bd8f71695c20544e62bfcc51a5e56e4c71d7779e114d4cffb257e6f9c5026098c78b23a68a75a8aa12136eaa188f135572029e8aea244de5237600cb85901c477c826cc55c9135a3e735d091cf531add507165c58b17dd9fcc3c1bd3fa6fbc054348ca5ebcfed2f7af3f1e209429da7731e169321888374e23c6327e8995129e98376b8ae9e2ac98d6881643e957846bea6cf7d2ecb972c39bdb3a98c6afe5427e70f7a5fc4861d48d671d961e21445f6ce45b64834d1b510906388671540c998d2dfcc6accc6e4d309b8ad7ff775d00be77709a07e06470a96630b387a9486626b3bef45d8bacb1b3f8e0b2df4487b6df1df828bce6fd17ef82859dacf42bf69c76d6e3bc63f432b21e696b6264b6a8acc4c6f14a0def75cfc2057f21867f3ae18f86920413ff140c62122739be9cfcb3a6c8b3228a4c6210978a4ac99c80d25fb7c843a69f00fbe88185242fda1a175234ad6b24eb2873166224849363516b7911c2098a2afa0810ed24ed27215886b7d83128a98526e756cee491936c43c5c4b38264b9f713cacdc84a32b7d077f7144aa496fcef9b417e29b29fa4041e0a599bfee344baee935c57091fe517782ec1e4b0ac9a92e937dd27f40243b9adf4941e6016c359caa4f9d94b9c1305cd0f1356c6155a53de0f111a0a1e2bc5e1a0eccdc0a66b74a09bf31529c237c3e77fbfa4461381fefd2fb9282a2ac0c018a9b08536e85b8c070b21a2982653919ece341099d2f33b47d18802e3665e6f08d8a17e36199099bb31dfb82886160e8baa77ffdab2d3b9036fd18a4255ba706b3d46a3108314b1f468939560e4720c957c1afc995932bac77b5db7622bd5d0d54991a19df281028d1835e756295a14496761136b18b147b8a4ec9119cb1e8924003eda88b81f13d3f88d224922e16c2cc42f0980c6c4c9133571bb208d6c2d13964ca46e76502a626e3a089b32843d980dd8c372d1f7f19483dadf01742eace9fcd183c21af755f174b7a52c8ccf5a424c2d602183cc9c48baea3d63990328ba9e9a1f50254aefa093334f07fa3928e32ad0c9fb5b9bb83af31861c29b20c1335eea2321210d8260bbf69919f99661e49809f36596f72527e5b5abeb19dc47c8024ba25a50388a0b340977c128d6c3c817409de217f8ffbb1b2b19f8f90dbf5728187599e1138996054af99686b92a9151827ded7c4118317f8ea948cce8bdd186872550cfa5383549a0e5f333be428a28e424c8b73dfbe50a20c2c612f16a10e3b61fcd5b012b66d6ae46fa29000245d357b30352e469c4ab013d7f50ae09b28c5668611544dbe016817520ba497730794b5d2d221580f347b5894175e11b46500489100c61f8a155e196d37b63f0a421f082c5c6cce44b9267c8ed5599bf50082289957a4c37fedd87814c72559521d309f569ce3cb416f785890aee6826d5583baa4290a8a061bca81f9e18be205aa5fbc30ada591106584f940d2c26bab64047b9b6df8ad1ba969804cf6efd38544b1cc8a61c972556ec11560127b2955a92b9b1b2ff740b0eed8f6598ed4d16d99e96d504e43076b52e90155815b3cc9c481bfe8252caf882af526adaa14e06515d60a34aa08bb59a7d185f22caafbda190090801c4088e9042fd2783e34967162afa614579702e06f2329002db756c31a75827224ff0cd05ad858ff6c0f8aeaee39e6b9dae75509e2d156c54ce09b77fd4a8836e6f6745030d277170469ae1f6508388d301554d56345128d36a61c4a6c81e9b0275800de30705c63d07799d6e91f7380c816e83cda2dacb7d7c9ff709a822a234b6c35b9c5b1a04919be37e31f11089c52cb708f2e8ba3526413466358c0ab34ec7efce588ac154b560a89da766f65d23ddf28710a34140943cd2e5ca46b955cce2fced06c3dd480da279d92f25222cf0fe7c68ab85bfe2248221ba4881223e43c0ad0f127e2ad0f1847dc097e16de66f118c0e9eb2b1cf6018ee8ccbafcd45164199685c73dd214fba8179f8414f40bb788c8433290a8e06ca0095670f7e32e4aa39a09b7c46bcaea09624df6309ce6103060d870ffa3ee7e79a69700411234085fdda2b73541748efb84d031f45a0192a469250432299de9db5f74c6aff06602759b6c182b3a483c50966f29981d474ce842efc2642d0187463698e5de5b435e89940151f2ae042bb8d02e8d11da12156d533945f18f859325a083727e2c8942f1416b48389ee4eaec6c93dbc4cee10b0996f42c9e192380ba6ca9f9923730a135ad4f61c3be1e42103bbb6858f91fbf26cb67ec69d9fdea5b3cff49ce3216b66b5c500a376ecf7bda06cfa3d8aca5a39279dd002f23b7105cf7ca13907c893cb4b7a9f514c58b2b11257d06840c9b91d329e43664683e8dd86019a7e6a94812d83fba878a86de648850a4867afd6d30168a0532ea7022996e50eb1f7ffa52ffa9239405f195681f75a0ad798e5d46af1bd82891b498ed736f5024516f64301b218c1ffd9f13e8eae41c2583cf98cd53f8990f138005d133b77a66218699517e359a1e1a6f8cb157b72b8ccd078b357c892c122463f7b404d0fa634aaf7ae5a0174cf9324c73d6d9ee83fc62faee041361136bf22959a4ea14710667acd8d99b17fce732ca2406b1e44c0ca5ed28a947d7dce5ec1f949ce107fab84868b5840828064b99e2bf24d26a4334188f8603f4826540fc28f6e44e01cc4e1352224410da3b70af91d5584d1f5d8b61d45113b0a5b580d3a360f4d2e685e10a13ed7afd800588284b1d406a04e5aa1d461d0ea81566fb89256e2d1ecc7557695b0cab90ceecac6c3e168f87cb25dd15c896e8ea5c5a2e32c5ed7041d6f4c4476b50474574a407791047ca5a3cc6fb6616f9c1b1247693451f98f6081bb4ad7ac16bcd89c97a61cce01d2c5cfac00740f42e6ca4bb624dc099c10ea7ca608ed890af2fe0d2f019d286bd502b4270815d7379860815f8b1378c26c252fcefc506fe71d5f99aab7f3c25e3998b7f34eaf4c793b5f0ee7080ab5ef04489fbd36a915a9422a8ef20e242f5d1ed9be3eef62f06f444557d58223ddd4d4bcc0d6199e66ada3e8daf9e8d8bbb6d3897d302a6d3a69afc8fe4d99397380d2922fbf5651b5e039774ab6fa27aca885faceb1a55754375af706b44e15b9e9fd896af73fe319fc63556a6fcbf3cd10eed733062e43e3f539c06c22ddcd1ab9deb645da4d22576e68a3dcb635a936f2872456d8382f60203e59dde9b48e9a8aefdb6d42e15265febd82393c680785a534431eafc3b2ec5de4acc789f85b395428efc97311552726d9dc0f0f0533675f9924d7691ea6e1b9dcb410fe92a2e8db8983833927173c27d2c1b336e2947fc8147b2b8fa6592d874b7c6975d88eb48389a63d64d9512411f7df45aa8ef8d34e472113394444510a9e931e82a8882abef95b179243ddb8cdad5c6dd2c0923e0dac6c5d9efb394d66042a70504a66d41398f874ce4af8bfd82a8ec49709c99bc1f53216c372ed3ececeab6d6f32b00122966be2e3115b1793c71b9ddad14e038b72af2ba4b6c903c99451030947f4023f403e991736c9033eb385ed94a157372c1a3af2a2cb177f34deda91ae1ab524c0c47d3bb87e22cc1994c29f14ac0e6de0bac104ab3719ccbcf260e11d09d34912e0ae8126374650bb2fa3c4cdcd3fc9e788e0330ad15f62d3eb185e48adff71beb9bc28defd29a0a0ac5c5a4ab43b72828bf4a5fa1805aa2ad79cda7381a91d1794da9f9421f70c66e6380465b2af6146b3089d33544c05ead5de0d514e5d5fb1831ab78f30649a438a6a08fc6c27aea81533f4de46237a8f7b64a859887c2a7bbd1502804f2318072ef88ac525615f91cf06cfdf6b36d0d34a70564a7659451061aa9865950aae695021e1773624490039f312ee8fe91b434fba38cfacdc0e09f36f61cc441beae399435d0aa6e78cc4bdb6480608957597819e029622cd9cdcf4d529711c544817376941df57bdd4db44cae3f0c0b7f80320d720f7d85945910c6030a169aae9f90204cf6a8644983f9644e10f305b3996cbeb1e89840655a8c33ccb491092f009bba4fdff85e0de78c16c3cddac88fd3b179deb4b51bfc14010551dfeb1f1716e9dd18ef790fa8e1c771b14101bf2b39fea98d63151d05d85542897f13437a75ac8cf80f21cb3946986394005f069c9289b748227dc1903d1ea03c70874007ebd0deccf9481c14117881dad4d0580c1064c8378ab22a5658116f7d59720a7e5348845a2eb72786f912c42c67f54814be72b2cd3c51058f567b135b2af70be79d15f543000e5fe735a7fb43030001096fa66cd5d950a43ee3c5aa04f07b14c1939a526e818bc8abf574edc595c716034e1aa27065b9b42fd78fa32c64f15f5d03e1d414efd852c0f0c33052cc9017a0b89365e801211b10ea8bee70d8a94aacf8ae8ee4e1ab252b4aebba4e42ff3799e001077a83de30a04f416639d2c5a413367dca04094a5aa11466f29b7fb1c06c5bb4f5f025706ea503d0943b8aab0f78db124b54835701bc5c02fb7513699a494014903490362037ff9a992b02fa24057129a0cf777dc7eb33077d4b2df32992c53f77661ba31dbe2e82fee877d11988eb13386d8bef16e7f7143b00e28e812bbf7de6bebbd321fd98dd716ef77ff7ddd98f768ed14465b49841849159e1747ec1bbb116f11232ce4f98e5102b59288000ca2ddf19b672c094916ddf724d9bdc655ae0439dadde96c184c37fa1631b218c5b184c58fe377ff4f8ebf7108a87b24f5dbdd7d646754117e0a23c6ef10418608498eb15a15cacb194b58747fe20a228820429cdfba311489445b2412eded62ba11138944e077bfd9809f01372009d28d38d375a3dddf582f4df71d69b7d6546ede54794f9b8a303ff94a02d85af1dc4abb7a60b01b0dc3842ad2a0ed5b1c622b8f96004ecff3bc8df7791ef8f6451abacdd78d9beffbbeeffb3ecff33ccff3369b71fbcff33ccff3bccd88f9cff33ccff3bccdc8fde7799ee779de66ccfce7799ee779de66d4fce7799ee779de66d4ff799ee7799e0792dfe891dda8ed28f88007a04b088890c30e7c40b9a0e4c4070cf8aea80f17d89c5d511f549820a28828228a8822a28828228a8822a28828228a88d203f1443c114ff0756c658c0676658cb1851d3b76c78e2f76c78ead630739895d1f104d4413d14434114d4413d14434114d4413d164b5aa2aa209564deea697fc4c31a9a42b173dc84903409de9006e3e534c2ae8c9344dd334cdf33ccff33c2190d6f4964eb754a6699aa6699ee7799ee7a9324f930a7a42d994699aa6699a366553299b32324dd3344d73059282549f0a51fa743a9daaca3d6198d6e18340445397d8b50078d9fc371ff1fd0b0281808c5c171cc3b4f6125814ebfd10b3602b09ab85121d43f58f7defc8258a40831837e286be7f2dc702b6c98b1bc92a5692ec6b3521bbd8c5d86575a1f81e78f3101da3319c65d8414a38f7b594315105e3d16a8bb92a091b97c70df96b80fc5f57a8dbef88b12a36e1856b47a5c8047df106b17ad0c40f683f85f245dafed6d18e0ee8d235451b74e9a88996989842d7c7f5de6b3da3a5ecbd4ae8810225b6d9a59e00b6ab0e9d1446881d2242707036e0e775fa12c1e7755a93e1309b966157b6300d1e34190eb36919cec0952dfc43490d569f5271006b30141f941521dd98050a43051b7f00404014c6686750bbd4ef3d60ec3588b97b03b6add60a0a2693c9945de414b7322aab6474dfaf79259bb295e7c52385253af38abc22d7905dec9c6bc836e4157925a7e4151f9325e268a2344dd3344df39971c82af99457724a5e91cf7c86962805ccc599a8a10ff42e9b3b285005aad2344dd3344dd3344dd37cba8865029df9747c793ef399cf7ce6339ff9bca8c78647e59607c9b3f210798c3c4a3c693e3f387c583029f3b4785a3c303c36b6a7e58678ef81e1f1c1d3e251e251795a3a284cc2240e91069dcf7ca6699aa6699aad4c2693c904aa36251bd186b44101a6600d50c5a19e94c7b3baee31f228f1a83c2d9e5467a29ed4e7fce0f051f99c3e2b9f94cf8a8fca456ca863a393bea8f3828d6527d561b9a0db41852617b1a10e0ac3b40ec3ffc7e4947d4dd4503ef39966ab2bd561c8c956d98ae4f25b8e39349b30ad39c8320cff03551ccaa196c87a675aa00ad33a0cff412011a8ea4cffe84c8c8a5c768c91a00a7b522e82d1abc390c49e14a8f2a44095382289237144964f1247a1c93fa78b6012a67518fe8340d9189afc6309baf4a452ef49ed16b2efa05cc4519893a5d6982cc3f01f04eaa0c4917fd86c5f3b6f0b7f5cf8d6ac979f8fcadebefca0e5e7b47df959f99c1f93c5d8f6a45c380181bf46b0634305e659c0188b1bb1de6f355b395feb19cb603f123ba80eaab343c708df6141b141980eaa7c8f2cb10eea737ecebac23566fbda795b78f4a1cc971f175b7ff97ef7a7868f0d9600dfdf07096b01f4e73440f959d99f94cfb9afdd9f1537c4fb8b6d70cc2a09cdaaf09ed4c44afa0c5353aa624a612a9d862f02894e2c459b4295176df4a2fb3e265d4cdaf71d75513b6455b0a18203965d778c2d2b632be7ebc2b0ecc2b24cd3b60da36d180cc765321a2ea3d168dd759eee3ceffb4070b3e17070846188102236186ce43c070706f3c0c610185649d0a0b1169ee41f1886611f9a442c53805f644983be756771b4ef93fce386a61169df0f4d7585d12785492eeb9a690c965dd124882c8d5dd124a45ba9f493f7757bbf3957a28550a4211cfde41ff64515bad454254d5557e8debee6525748e1ed6b3f580270bc7dadc60df9defe26729112169d106f7f1bb9088b118f012cc421dd904d8acdbc21e0dbd75217114574bcc6e1db0f47cc3f6cf7dd08aab017998deb85ff56b76cdbfcda6dcb32f7c71ce7a9751075d8154575d07e9160fb0b0299081dc3ee86c90e20742986a18f54d2926cdc8191d9ea18b1ef80faf72b499273e8006204ff7d8d4b00266d107b73f7bf306012bf39049b0d626f1aebd3149360cb8d5cec7223ae71fe4d635924dbe24672c6fa9cc90e17fcef2f00fb92189cac1f0346fae3b748158ec791baad8b1c714367d2ba206bc286ee357143d7dd84872ec61887ae655996151a73ce39e790355ed7755dd715ba6eba994addf39e696a325991155594145de88c338185ee6f9a8a4b5a98458e64926457ceea48407eebed26d99563219375b3988bc71ac2985423b668d1e2c2b4d0db4d6bcb0e2fa8022143c60cd6daeb2a268cb19565a0649caeebc23219a90c95a6691b66c6688688e3b84c66c68c940d874d7c81b5324ebc438d193084b0892d7049e1e2019719760bb65bad55915427acb5f7a2334aae2a552fc226ae40f5427542a9545433d8e1059dc864c83206d4c0e4860e2728d016a18c879dc1b8b4cdac66df6698cdb22ccbb26f5774460eaa16c020460d13c458020862a44388e10415316c902006104788b152890185182fa80c0e6c6e575486e893daf7fd74939b4e4a5d54758c2d2be7cbcaf9ba30ecc2b02cd3b40d9369dab66130dc86c1705ce6acaa8aaa60b83425f2e84ce83d6f29bda454859a50269b624b56b4b2d7b1a5c160d85733dba10b035c3b6f0bfbd677872dc21b2c01fcef87a6d014b2ec50250b4da18b1b7261bf309b96751f462499a821f0054cdde236e646b419711bd20605b80a4d9d0b445267762b1d87822ab006580374015f3658e386780fba803f80353628c014acc1a15ea8c2c178680255a02a5b752bba925bb943bb94ce943b95ce4577822aae857bc96777d29d7426dd8add9ddc10ef3b936e04dd49e7a22b7527397f21064c71677a3ecff3ecccceecccceecccceeccccbb17027b7b81597e2545ccad5e0509da9a5d0567c4e6e855be174c0b16c6ee58678cfe980db01b7c2a15c0deec4ade49c73ce9f13ec4a1ccab570292ee56a70276e8513813151431cea229e148843fdc37128877228877228875e0d8526722bd54e8da499a956d24eb41187661c324b9abd642fd90d0dc5ce5e6e88f7d98d0c0ad98b76a289b29734dd642b2d8546d24ada8926ca5eb255b64ad3344dd354c470a77d4dd4d0e7fc9cd90a94add2344dd3d4d39cb355b6ca56d92a5b65ab6c754d01bb7e7511ebc30f2f15b96efb22b55c1066cca1bbbbb65376e9290c463a6a83d62ec2658ec276769576493c6320365cdf5a6b6db5d6566bfdb15fe213ee0dfdaa2b78dc1cb67a512944a02205fa8b010ab4dec1097e3082e9879406344e208186c9d62b3ae0346e90e16a1a39386169a0252094061168acecf2417a7010901d76f095afdcdd1dbfbbfbe5c1c3c3dd8a40b87884473cc840d7a0f5aea84b8b8b0bcce5052e2fb0cb0a0eb4cb0c2740efe1a242754206ab2a8d5c44bbd47f826518967900c358c0011ef80045097a10c2583686852d282c9a853eed0bf40cfada159df172036d037d997ea083a04df40af48c140dcc6801831cd8ab19b1fe3ad93182df3ec946807f7d3b03a75abf44932e2f5434692ca241713feefbd56c9a91872a3dd4b5628de8755b2debba36a919d94033b222fec24f1724b2a02bd7e97a8131a764adb4ec9c5bc8d855ad940b3624ca40677f65648a9dff4291359bb57bb3e6ee59c318e3ac5996655959cb39e79cb37695dc54a572ca3d57a98ac91a59d169e7bf381107396bbf69ae42233b1290fdf523d985daf9affc24fb00f722f1c87aaf1bbf8047f65ebb89b76aad65fc99cc39e7edeab0a11f8047db01f92bb0c21c068f5c04e47080258df92806413b66fcc0918b5ccd7390a3cd2141b0b473876b6387ffe6495e443654398e158773fe009763fc5a3ed50569501a1eb9c8adfea13f864f93e27c302a08749ff3dbc564cec407a37edcd7ec503fee733487f3fe7bce6f1626e346dcd01cffb5b08c7c1ca486c3f98f436adc840d6d326f398ed5d8e102fecd2f00ff465bc0e637d202db6fb69506e55f6ad4c6ea1fe00cb47fb9ad368fff43b9c8c696e1b62bffb8dd6b4e2e827291edafee204b6c6b2d822c5db5cbed5ae50f419658cecf4196617e0eb9dae4f25395b6dc5615586debbb725b6d4f77b97de9be9fe158ed1b5e2254f50f6d2c5fc0a3ed2edc10261d35e284f6bfc87a4372ad781462e1255c146530dc4b0383cd069aa57cc12d39b27bb35b6cb1e1addaebb88a98ebebd7ec2a4c6f6cacd64f1597b070cc5b6309063ec4627b1638e52b5fa1fb3eea27b7a40d5dd9b2175bc7999202dbc98de47e1961c3e20dda5fbc41a35ce486f055ea9041e3bf4a99bce4551a3b36a0ef3bd6d2abb2951871438b3a9410894ca69494a824d22fc790a91100000050006317000028140c0a44519885388e04827c1400095482426a6a38134d4471398c433186c418220418600c200400cccc0c910902919c1103bf40d0a12b72231362628c88420e07be6394428bdcec76158e1eb20c8b3c85649c37600d5403999316df13106f3719e503945c14072a79aa864c8a5ed70b4ae9e74c125f9a1e03e7a75b2b2c833b987ddd6f534aae089ec40930cafa62f5cbbcb0887a5ea8bd4411e2f8c0653f06592e29d40e315d22498fc186e4852830488e5fc9e9ed08d661f638d1f230a7c63413ac45c82ee43790f7a008ab22990ecef63be756104db94c971b1f8cd2bbd36109d1367250e1d2275cdfc7753394743c4430ab6549aa4111f43d2ce0803fafb27709692ec1d3bda9b3e385e062f765068cbd35bbc58dfac10652110cbb9e2caa6ece72ade85720860ad45422e1212216cba2ef0b286326f604af0717fc3e5cdd6f186b91a26cd339d690533b27af8d8ac4e3022ead05976b6ca0217d7b703d7f883873c95821f4204572d8d856b985039a0412151ff815e7678cdea1a438974b092609b6aa6a722446b10aaaf19e4c6a52d5c587d6240f0de50148888e0cea47f982a704460f4bce7304ec6579c9c1ff136d973233c4533239e889a5b31e04700b2469c0d8af1cda264c2ba4c13ccfdbdb3ae85ca6b71e1e314ed5f3def7d26f59e900f5dfd52a6635977ee3268db84ab26b66296662543333c29e140096615443cc71e20aba947483a7fda419a39f4f76b91d9239ead9a3a16de772e5ca88f89e3ad483e8b500330f94d8d27e5193730d64308d9fb5053e761b466b21207a8ed4d6a16a88fc4ba2fb94ca904695eefedb982ded61e2db8be0353e0014145f70fd7d0e319d3344515fb75e5698f1e1d60d6e6882ebad5227a271f7b4fb0dc79db5f86b74e4f14635536864c9c3a46b73a30e8a574d4e16ce65ebc5f6c741a953ef82cb9dc07fa7d677ca3b12ccee7ac11d70fb0911ddeb05aa462e1debf637913267e2d49b476dc35eda3747e6d9595aef602b843f72449cdc2ae0a56e0cd85efa9a8cac959c5ee75eee0f7da03dbb8459fd1b8569d59b8de01ed6f68834aea2285d10acf0d300c36feb716f7cdaeafcb3dbd07fe6fb116077b702d519f72d9a7dc407bf232e4f5a39096597441800eeafcde8453fea85ec6ea36372408a809eb4d64dd2d8d48434cd79c5e6bc41c153c17320d5d2dc3480e47c83747607b598d17e1ccb5869c3a254520d12b0d60068341b4400fc3703fc49f5ab49581ff248fa492d2f7e297976a908acd85b9f292da67776c32160c78aed53581cfa8e36e6d969d346c08aedcf2f655f4c2e695831be9401001b924c5a436435b45915f556d7ec1f0f9f12ddfc0a937ca037667bbc96f02112279eceb37aa2df71218d8c7e6e4ea34281ef24b2e0b41b060e7a3602918d3ae53461d1b335aa558dd2e26c7f56b126ba867d2300459836aa7e60317e1aa04a2d3e67e596c322305ebd163066b6c59d277eb63a7023d8602de81eccf91577d0c1c8e7fa55561e2b1239daf424adef0743da9c1d0e117658a923da62085c2c052823af76e5b0eb2068f96ddf8264235d3018293068663a40361256c976c7a2cba100ddf2dc60cf4b04f3c8849ff52c24d23d6f5adc79bd26d51de2897ea30453194fd6149c22d1436cc8509c4a22b54d26d818560b1321906a77db7e583b93b8c8e7a35ad10217239b04d37c912f47b5a2002e402619d248214abe1a7556e89b803cb2e44936392dd7c9a84d3ebf84c8264f8614c9a03ee533161569e19778469518eff424bbec91fe04396cd0421b5325caaba019e46e26845281a2fef431b6890026d837d19bb756c082a83d16475ade722a9d92c6ed49a32f6a89b18eb5c6cfe98124eaf17db09d72882f73d5f0908c3a2e7b289faeb38e6a67274c6b8d7f21bac674d428fb75d020f4f1a23c1970ee2253a552de6c3bb1e1887d0b3c7b8f6030cb1abdf3c60e5f4a0154294228318eae9c1e209fe9c84887e871938481f2d91149c16813a8c2d4aaaf9c4b6f22363fb3f0d619b38f6c13e32450a3221413eb4440500eb4e59bd3c462003ebe991d7252146975572aa17b5b1d93fc8e4ea63309808691a901bc8cb2087ee7bccfac9aebbcc653ad15d1b8d82b06b392994b138d8c3f681c053f4b7ed4aceae9bf80408c0f97fcbba7ef31b5e008a88fc3b7b1d7cabceb1449c8923010c63cede7fa8bbb20946629303aaf01cea64b4f363f195330cb5f57cf1e039df23d6731008c9007828e4ed8cc2aeb811c95f01656d9c8a66e23a14787c7a0f440a529afa1369756eb33b5114c36d4208ebc867260def48394efccdb1709034de4c41f1f9c016b6d108e85561712c5aa8348e3dccde12936747da8b47ce3b91a1a86b941cda95db949453382cfc4ec8217703ced06d7d26445d2f9fd6b6d2480a767502256c1c7fe7a410d6be8bfe0737bec7997886608fc0e134b8113a7b63a540d52285d4821d4ffc253ee711a3f2528b97010c93e9010ff4c1a580dc22152b332f28959bfd2392c1c503f972eeae079303a742036bdb8962df60541aa394398432f4ad10932c400f3ffc7a54e89b47740c2a18034d396175bc75a53d045558c279375e6bcbb88a9bf4d95cbeba85f1690112f11dfe7cf25fe71e157b97a40f58b4e26f854f3625728cab52b2225dc25e209b3bc8f82b88ed4a52d8d44b6e6fa40b2d5c55d66c91ffc3132063196c44644f3b74b778e08163d1cf2cecca4a43eacef9176eb478694f8aba419bf924ec3583b5c8d03cf670043ff8d4ef674c0e0ac2d702d6b38acf18e5a81b752cd954e0c907aaa8c9b2f729d9a763c74b9240c460ca401b8fb3cbb388cf6771c5014cd0068fb4fe776822a0b19fd3fbb8fc2b45f39ca8718841ad2190cc4614d050d394d4fd4212583cd8363edc09f6dc6323e69e09064b312e3e434e4e6835f6896e379e91c6f6daa17c5e0eb63f4f6d015e8783080a111a78b2313e5660aad138419df54f6e77709a3622caa987cda8e30ae807ab3ff5489d2660e4f6f02099f55d6e140793f0c1f146215356fdd92c6dc79ed11708a8c76cd6aa468c7d4ea2603af0542ef9f5d762132b86975f11cf6f8254bed96812282105eeaeb6e852e98a0b81b4d1cb1a57672f9933849758b12b4c8422be3c0de9f0efebc47a5cc4d2236e335be99a80422efced1cd66e12c4eba521d9a91b5ed94ffe014f4fa0241b1d5b657e65e95c42e0b9a853a5f54de691fe363d85aa96eeea85ded1543cbc0a392daa0fff4782619ca7a1eec7807b9e1c63378752defd9085825a45ebb9dec3a332527ed3818037dd3e18197d5ad9efe304a47ffb017310ad0ee6f0ca15feab5adc60ba39aa6e08a08d0a6497833219b9bd6dc1c180c9bbb6af630d6b94e343eba719379dab1220ce88964211fa232210bc7e64a928af9f9662a92d918760f60e61ea28bf71025e384a62029942356d56c6c4035b83ba353ba53b007e17a9f5a19f2a30ed55bdab0aea864e0acad6c46621a7712870edd0043c6c7e4b2fddf70e6d81de9d4d548705e2ff1196e453b80fd79cdffc81c3eabe324454efd3974a71e159c520b53840010b06a9276400cc7acbeea516731ce4ec7c8440681a2f5df222932f9c61811596455075f480a090bb413c521936ca242c871edc0a593f34292e753019b1e7c09c6a2685956909484c5575311fa06db4fae0e9ebd4c14f7c0228e13262ff9b90805e651010d819ad7f8311a6e40c7b0942f36bbec0affa3fb9669a2af6ecd49363ead09f1a1b3826020337578c962c80e934aab906bdd74d12aacd89646677a4838605bd51e6f9b52a0752c56b854610be6283a00106940abdd9de3089de7047949469bfb7ab94d5782f659e17eb995706839827450b20a2f055bdf4570e7ac3b32f15555b183b3f2cd96acc054450d62563b6488f74245bcddb36bf31d3495c7896cd4526785079d15468d91487588aed8908db13ad924a73ff216f164615678a5357ebc12bc34be93e7ca88e2b9c77f2937d27c0dbbe39deeacab8196fa95d21db94310346c57505d394da9d607b06d2222edfb04b4cde1ef621313b2dd1b33b0f8d9ef9cd5e50965fa3d712cde2841cb78c4eb811a05b8d57e1dcf42bad02b604c645057f8d63f139b8a64f46c81a554df87d1130af26da85b9b4284d183c321b60ba382ca92b7659f4fbd32eeb7911cf387d213b82950c994bddc9b42d101c346f6c039afb6bc476158d7c1d0703566d2825ecccec71812a15c33fe47a2034e229259382e75d9f69d1c453d5fe6f8f5a154871730c49cc719a770f2f0cef222fbe507a9e9e6ce9ed973d37b0081e403beca82a756953a35a5eaed56d437634c56d4ddefe350f2eaeacefb575435bf2b56096052f7097637926e6058616fe028e70d89c11b2a4eff4062807f7af2801cbc85fc74946395c778a429714820d7f303fa272f3eb41e29ca819a730e1e38778388c27473df01f4b886b25393527aeb1eb772f03360dad3e379c5fb84767b7ec3f7db895b0e72cfdae78d7126bae225185cb037131bf39cefb3ef9d89e1100c980ae6c35f2f151c3fe0472a2bd05924c44a6860bec559dadbefe55fd82ef65538b4906fe46c83be1d1cf8aa062c7dbb65fdb3afc2358f447b055672b991a7f3c2350a1de0fb07103fe31560c9ef569ea6fa040681245a2af0a5b7db65ba2e3dbca79e9d8d5f1b243352012e7def82b01bd59f3737a328fdfcf352a5ad323d70658eae001c134f6b7f536d3961567c7506390b1b20a7938754ae6579c5d522bd672de0d41188ebcfdf7bac1bb59f649d932549a5e2f54662a4576b55fdd7416c8eb5c643481fda9b757256096bffbccccce5b6b208c2f055676a3cb1f2ed3f52eff948233031c108fc448056885bf1b4386e8d8d465b686ba16288b7d580a57d5eae6886969024b27423460c4f9fd2ef94c6f17584bddc628bd689d685679b04f4a6f0a4a4c6a08afa1bea8a3ead8f5834d229103cfd4d32a06c3b9daef7d99517077509ec2d975217438987c4694247e1a9336e5b16cab2a21dd4c1cd289b967e1dab063e4c163dde0d15ae82e58039088e9e0115a2b4c3421e7ab734550dc51eab54acb73cfcb779ea04c289050d9816dd4a07d70cae326c94d1a94ce41fdc471f421df013c2f1cf512a27c6cd82593e0d9703e7680a5ec37db067267030d1dde8b77bf188864203bf6ce3e1018c8f2082bf8b5db5df3f43eb7df38f60cf782697b520389543b6794d189a1945c1e971004d8e2eab3d48cd419d1024703cb902bc442396830c28d69e04dde4c1a6e8ecf925e385e68969d5bc50977473f0e9304bd5d1a031e9d56c2963226742f12a873ef39a3073642c21a990d5f364c3d958b25dfb0c275d3b23573fa8a720a9206038f87c23febc7f5e34cc9053fb4c5a769b2ff8191e94095e8d4e3192771b055e6f3d006dd375f54b37ab01e69d714ad4481b83238779ee6292295c1c78984d5f7fe4fc8e7d8b91d662bf0b170d5a1f43d92790830deee6be57cc76bf8b6dbc838619ab6380059c4fbabf7ad5cfc0566c9cdaeae071f4a53eeaf12953955590d03cb27209efdf42fda66929098a0a1472120d04cd339e65e7cb8f3b22be9377e6e5aa747f9f7c08d8e599fbffcb4e0ba58400612405455c3869e3bfb8ce8d1a2543ba34cd2736c4dba1da59e3f360630eaabcd694b7e6e80a357b7dcff18ca909bd040062bd1b4c692685b56ba552ba330b509deeffc273c75b8a7f1176e428ce9e5e8b7f112054a559b43acdd647688ea6f07c6af99d734f4e7dc9bd99b75348fbf689491d7315b2fd7c50aabf1a9157b2b562499b87b927e4ec85a3d46744415dc5d9537d9790071b2f6ec41e8c021832bc4342e62c9fa4f2d99a08097d0a2b8bac83c7ce7b3fa2d76cdd452284646a932b687e4ced264a8fe34a05da65063d99be1902cb7a0d36792263fbafb0d06c88a00829b5520fa8f35ee5e2ba135122f23b9402cbfb443c82d892224117e61aee5dd07745a19e8436c80cebe6e99f88678f36c1655e8b4e84e862c0956a3817e04205c2594dac5c210409d287f043b7409f709192480e589c08eb2d48da62971545d4e372d501cda3fb60bd2261d61d41388bd3f9abae2a81b5b9d4b29059c5f32699a8a923e924ad0e4cb2cff35004deee0a8db20418396112862e9127603e0d1f5d71b564155911e8d395df40374a49e5b73351a328bb6447fc4a8c20de92a822ec786c43238812981d595948e75000d87173844318ea7b3baa6130a64f1a5629ec07a66b581db0c10266fcb1638dcb3ea5fc10d9841fa7004b861d656d30b2a1ad8b1cfa8781e7765c41dbc99ecfb37ba51405584f700d465a88c8a46b4cff0cdb2ba9bce346c919ed94bbda6871557fac406847efb28bd6ea44548491bf26c27c9e7c8e7dc30b73b1c259fbc564507a22f9c800021fe091314846921394d45b852f4b5437058dc51de6cd1b84475f1dadc289bc66c023d1c51a6c38a8eb6491d2fa90af82fc82de31cb7b7f962f66acd25092c61bf1481689219e19c3e8abe18d58e978ca5e1288f692a1aedaff6005d3fa6816a200df50a7d313cd34a808a717ba15fa2aa7a0dcc63462502f83502b4ca12b3543588e435154884248683e0642ca820f72d4a7be9709adf9b4c5a7e92daeb571329c10d71a8000eed555f6a8d3333e3fd8617321d9b982eccd67f0630a9f1df0f0ae150bebb99a2acfc91cfd63dd0919eac9fe8e6326481aa3e74715d4d1aec08011ed0973a3ecb44fa8e8d1e668ffa22ac000628df61fa582f30f6b683f79e4cf96ca796e53ab7ea4467b6f961a25197c2830926dacd35eca05dbd27412e90721f1018526edbf361ebab1dd481af0cbf073daaf536e92e6e661aa25fa845843320d063de8dcc47d015be36449018b45b7321ef862785eb6923ddd471b2deeeacf4802b4e7935b05fe5388abc437fc6ecd43a7af890daf0cb6c6b2a8232b91430ec6f3aad930015b740a680ccdb6bd2f100352e4af861770fae59ea71cd9c8a75f2d96deec8db657f20320d7676728dbfb2e0e74d946d74460a8f107e0e8fbc26cc522fa22c11eef52b7e788b6df908f041bf8237d45ac9b1d8236b5c29dd51586bf20e1349b90f2da2eb1d2b021741e0d4139dd7d5ef8c7b46a78946c95d0f5221cd984ea082c5cfb65688891d0b0741bfab0eae8911896d267e07dd500bc7f83f0490eb4945c3f84e31b2c7b8707be4ea1d1654801324005cd7cc8876cc933e1942f52963fa9317f248e0fbc19d7488aad0c2a74cfad705f6101fda185f02a175a68a1f1b98631d2f6aa925328412dccf7d75d04da303e5dd0fadd0b382dc2062994d887616a36480a9e7b0f03dbd5282404d281df5018ffe25542afae2d0f032a7747cca7621ae2a198f4a054d49fcff3610e6740c6f725722e99d525b0d5b0f5abd041888a28a2f60d7c1031ddc30847e12c27ce308e848420db33923f4f1fc69f8c35729251ac141fd58711ce39116b34e06150d16cab1a027c98d4106a5817084054bec8344a3fcc8f92ed00be7d122a0974e4f630792e26a42f2302fa8c1425ebbb874170c3a20df8c624f001a3ba3fcc84c926af6cb21a2f237dc18871e9c03bc9d14e74da39beab1258a071cbd0af28ff24656d34b86bdf0c0278989f59d86176a12370fe1ed08ec80c528f9e9a19050267281334f811312f35ab666815917f9869feaf23a6445012522161dd58b33d97f7ab04c353a0099541dcbcf423c6128fc9e69cd7a211c37531e04a359c0b70a182b437d98f6c576930b4d2c6904af0766ce2f26431622cacbfeb6ea0df399da785f44ce42dd0687f86567c520345f79c99e34ff43ed1211085176730cfc94d2807cc31581c181973023705a16c19b72be1c3e646ad1dcfa16710c901318e2e6765175c6497f3210165c7851d2e296601050d97ee5ba562503f03ec852671321ac1a13483c769a813095a0642c89174c539ebf4a5af494179fd26c8f2389e3356a0d2c0ed3784db1f23eebddab8782772e329cab510022a4fe9974415af520af6cf57bfcfd50469da442874ec3497dc31ee15cf50b7fa475024817ac9e4a325dc3679786ae69799f7fb85e893a12cf6b08cce0248c1136fc980bffb8784c09c3c8dc2809174afa95b6acceb76a791ed62c92e6898099ad9c96de68da9a6a9d7c980cb771fd023c91131f8ef170d40cf25c7760e04179f47ef9103e792a15fa29359fd881f5c12416bd0a9d9999a53f6854f4eda9c2e4e3f94003855d736c3ddc72f4bd6f422bf743f45bab3a484c0925932d11b03ddd8dc511af865f8e992ad61ed04cb4d533b66da07185f1419c8423cf8c42de12cab44e263c98a26cb8f9dca837ed62bada1b641ff411b0dee22bf440f4be6f35f76d356e58af0fe3615042d2ade51480a1ac8a7aa816c6a137a8e3f27d2c036022122e888994d2a341922883929a2ea61bad9fb8b9bb32cdc9344770118ba59929a2c7f0e9d04ce2ed564d6e9dd72c63a35d6c8a14fa51975f71e69191a99e6468eec1b89e81c9bc95a18273659ae8518cd0d650695603c6f898abb3059423013f51736616ffa61daae2a8c3f41c6283ba46a531cf70499ed1628955270ec8f09e30d5cec1cf138576cb116b02191ad984e47dbc49e03eeb5c4252f303c7ab5105b2595247cf18e4e0589ea9b2cdd970bbf1f0b644135ce705964b08d4db861b862d683a889a70dfd88a6a60bc65b9798a45d74c277d98c78a15e246919089523b82bb6b55a0fe2632b3266f8105c9cea36c309cdd1b6f4e21a51782f8361cdb3c3ce5710037f482c5ea1580ba9079ffd837c9a0e16ea62fea85b8ea92f813482a4b2b1f1696372332d781c165e7d03649292ed4ffc1df43926b3088a0daadd096285b70badb535f7947afc6bee56c35de0c4f53d39f1f885c00b651e0ebd1e7f126db97df34891df7299e1c9659aed345a128239fa8e245cf85f5f2600ba66ffbfcc79c656698cfd6dd3c309c3520cc4d7593ee61330f99d740b32c52415fd1062db3138b69739c72433d06eb10d60bef27b345ec9540971996ae03428eee1ccd499f3cbcced66460c1be7cb14d356885a6a45142a2cab10e2a799e2bbe0042ed36808986c13a5d03b6a21cb2f53d4c56ce9a38bcc5e27b1bcfaf832d16c18bd615caa84becca8d1977970a2c90b4ea1d2cc430f3095281ac8903c1e0a5fa06bdda0245c66d1309b080355128f9484a1e62c950aeeda7fc10d2ef307168e3ae0a9a0ffd3face18f13c775adb7c662249503d2aa3bc43ce1f22feefa8572e6766739014520ad00b5a8dfa61ec7379044d46434063bc7969cd4c4b3ca6cd29af513393eb63a02f6db8ac024309da9c59bf82f82463411f690b2a613eaf45ba2bd9c84c04dc643535e207b8e3d746976906c489b33f5bd374c8a6facf645e32d10c2867a16a14cb9d3031c50642b555863921c1542b54a5291ce3c29c6d16844aa371f6070957360786acf53ab198e807a866860a062abeff81b4ec67f272cca5e78a57486453c80f82f2ffa52b5133656f01421e6106234faf6ba97f320179ffe1b41caf03b61945361964fbc2493c4109de20a4fc0a5b0d3e5bedff020bdae03572e8006f809e12c58242f3d4d6a8af624ce4aeb80d201b58151050869560bbd08e1ba1c64d3a08b6029028892221eca48800ec898a502b7084fa4912ce9325a86df80c756956949814906d158c99c61aa890e016037089c1cb4be93b19763183ac8319b8010b42e02af4cde3cb70e875c2441dcb37b3e00a911834fa26cfa31a4cfe111af9ac9cfc3065fa9fd4f259a79f092ad08ab7d6fd231b1e8ee8dc0dc221814afc2d2180cb0e10fcd31269ad9dc4124ef69fbd2457d14fdb665606fee21cf5c9508fbbd270682285a7c9a337bf0249a7e15ad0c1f2b22091ec942457700acf2245cf60d3f37325b60c3b58c30a93ef0e0d52013d3a881ce9082a49f215170a5307af3206924303e4e8e2e22b8bb28587cefe4eb911ebfbbddaace48a5ef89705425e548044e98368e7fc1a5fa008a2dc66330739748a9effe2e571ccc091c35ba1fbb44ca322dd150b051edde59a0ee1908d3c6a8b6869598dbb0769e999e00fa385acbb641611a74f23e198b02550453c33d144b34a7588b09e87937c23767635e0889c977a3ecc36e2720c6612683de818a1bc4839135c6ed2edcd21b5b765d5e9e2493db9747d14fd4a3d02025e9f365ef8455f7753c98b21d604e8a1f207056b08b73681aaafb18245d69b893d8ca2656f738a94651b696da5f6fe3b3220b01da67ea07a7a5794dc2605502827d3feed0a48df33091081fc82713fcd08347996970e9c5a3c9ba30d5b70f1aec8a9136caa5413eced88b1151b003290a244d45465e7cd8239fba06e84292af205a86ab5f4fc717d2ef26e71554ade0839204b850f4a0c06e347ca5585a92d838f1e202f9486caa607eb7804c242a440287845e5203d2aa86ea366bbd6c8eef1ccd24d2f0d9c78c0139bdbcec3c0f33146fa45bb003eb06fb930917a9ae8ad36f78d6700b6d283413f7e704a555e117ce1a61a69853dcf3065bdd6555a9792da241566ccaa65c11e06c4ba6209fc1afc01c03bbf946b9c2ff7c1877d7dac46286b90b87f0c665f54c88e39abc40b845429ea2162e30801d6687c7175f16fe759928f818461e1922e6f2625b3836e2ace29c0be533e4902f1ef06405b0df0db6a0d2e9ccd7472673c0d8a2b9cf8f7c7fef8dcaa3fb9f2ab7503f495c8d50c2615106028e74f2ff805a7bb441d3c6af626d9bfa82785eae4c3e99aaf0bdc7eabe1b4969dc4fce6a6ccb43a24ba920d51535e5345242be6b5c37f485f025425056d36c9cce42cd939dcf82528e4f7d513b71685a8f6bddfaa4493df1fda26e13e2af123586272e7db66a4dc1887121937b6e93e1b2ff951ee0da5a0b3dae17eb88a1a4c82ae5297c4330a537d3d7308244f84dae6e5c56087d4bbd2b1696feab1c5d055e42272ac9217690168f453768981fe3e1072165d8c83ba22d9681ad139efc72e4b7142c279941fe21362c062ee55f3efca2c9028b46b884d81d8161541b625204b37109b6bcd09cf9e2cd2fac356f370ed8cbff061a30c49931f7fb4eeed9c98c41a982f278f5f449d1d7644bb59d1ab16fccc64f8e86635c7dae1dd72d8155603da553c891316c1135c7882583b97779dd581765447e684453422f32ecd1dded579ad5818884b08ca9a3a2c1b72b71e1ce64822726d480c44174ef060178f10bd7b96e91887311df182f624e6113bba5ee5336cf8934fe16e3c79b3de7a448482f394054138751d7cb6ee00f1a215b519435690f0a703d1b6826a0116789f8026fab499bf3a8e78adc489deb7e4be78ff2ea48024e2f639013f08a78814ee702189229ee2577b993667ae6611b7cdf96982ad5e261eaf1b253c88ac9d4ce037e931268278dd2891c7bf044dbd78b4ae4c77425c5367a3248971428048dd16dd9d95bfd6daaa4ed8be216a171dfa6bbe044834046eaaf6a86516c5ae044aae00c35031563ff088f72a5b1d0adb39791c89b43b475154af4801ff80a05a017483f0cd28c56fbaab76812db6a9a1645cab29dc01bad2534772d767a415c8182ecca488b85d14c8c2acd802893159b870a1ad84e452dcfa3aab45bbb2501f1cc0a6412d3cb23f6aac2f1820e35896bd19ec8ce48d72ddaf88e74700d5c772b4660e61c42fdf00a38d4229bf9ad109f1f0dd9171c373927a670d8082f99abfbb72ad18ced25af02d12fda57b2f1f57fb37682bcaccfb92dfb48896ae331cd7a8981ed97fcfa29b5434589d400a69c09a18f4ed1537a8d71290f3be1b1fd5472e94610b65b4823cf2c30c808955a2f0ada249af4b2543ea6116ffd30b340e4889c2250a1718a46a5980f88ca9531d18be332083b685447c33aad61bbf67a89c27e5b970f073edf53ff639afc0d250940fff21199a99e1e94f5271f860a5f5f22e610d301bdcc862eab433fcc77603fa5b95e3a9b94c745659c685e609893de5b64a6ba81e98086130e214d93a81839f889fd364ab570458f32d335f4429e2028210f3985ebe23f5fee94597be6ede50426fa319410cb05a193cce49af35cfaf19e601471f80908345e4ce756765b808df961388fe42a4c02dbab5f9f201c9fe83a7112a43d4fbc308e8d7fffba56be02cce3714f7744ca72f38e8638f560d23143b4a7f1927a6103243f2408d1249872c06ebdb5e01d59e15d47089fe582fb16605aa4f4c8a23e63db7c5ea6a2f893a6eb44a566414ea6ea60c228d7666a09bbe68c607056c6ca27e02a522364f9b3afd62cde94e4eab12c9d9f119632e97f0aeefd16f2e636147bfcbec0985f1cb7171028279639d0e9661992023d2720edf5e15a82f93a7321232085d215041a87fe680e0113f178445c4f665be4f2b5c186bed1fbc9a390b4312c43add649359fe3b7cb866b34fb0bec239199905de27435c017606315eb67ba53c6a97d1b86797fa19edde0b7d89846ff5e2000f0c523b71f1e71645c2f6fee8c86b1d91b31b6c42fda69dafcd78f29f400e32b8a44db9a8893902f01687cc78f0c77e9a1932f3ab874be6bcfb922c81ca081668cd30366ac46fff003116b1e81b3a785ebb52f206d0d033cc90c1c395eb0e11f207d0d033c8b0a1c319539f7b04dc18bb91483cdd782b8e3d026f8cdd48148f6eb8957913a837590c5dc346034cae04d2d53f60d0b0d18045a0697c9d838679b0a28f45e1753cdfa1480b8428e863f50d11871cfde3abfc353d9affa89b8a54a452c97769f45ec469bac875df1d7517398d4974b3e48e94927929335a74ff9b3a12ddd86c92f7464b808cde38287892b8a2d777c8241ac41306e169ab06889ce55a04f88fec4468b12098ee466ef967fe432a00bf68779c0f1275f64cb1c246460a132c2561db3c483967a92568e814f0f30151c6eecaac389c479f6802a9645432c4c9560568f423d58894e240760b34dcfc3ec967b4857a00c03bef2642968b0804cafc8dba5786ca0c5a1fb8514dbc03818afb6164d5a1958fd4c7f80096680ccd1c71fcea788b61dfe960c11bce1f95633362afc9a4bcc3185b8a4bcf7c7824c510d8e6c3f78590783befb77eba5418a6d5ca0146f4d4a6360205c4c133ecde2dbcdb96ad1d047353b50ea0185389d05ac130bd1bb9f19ff98f5002fca2dd711f4cd4dab31051615e8b0e68a2609ef09158b442456851ccb16c4203faaba3d6f428a66a37766ce85c4c752ff4eace96599829109ffb900dd44dff1f56ab69f0cd69d51bb0958197df855d29d5ef10020f49d8baf6f029a8b94f35e79654098198d59ad359ae390b107e5645d0e63dab89781485970cca44e2aa73480fcbab9ef2908896a06f92ab06c30db8bad02fc984d5ce87c2d44842fcebc1dc56987122c4b996a8a1c3c00225377cfc2291d9dbabc69ce9c35276fc6ff0bcc80329ac74ea71dcbb7955ec183c249c4f508f15166a49bdb668d912b7964b62ea5caa8ad8327b40cadf1c7d9da25ab7085b46f3dbc7bb6b89f1c36be908e4b5acac2e7d16e7db11cf14dcd1cce2638f0e85ca2e0eeb39e6513db740dfc571d921c1246f58053b261e92d46d8066154fae49971c9c57841468e2e81b387800744b81667c355a98172c47f0f4cd0fd896b5119055b8c7a4a98485f3355c0bc3338b2208f20f08e7a51fa8a73eb04f7aa09ef0a09b37b50c4853194b266fac1872665be191d4a900a45ff351aab7fa281194fb2809f385b79c20eb693340a1408db5c15386cc98668bf7ed0d17bb4025789d3ba5f9329bd28150d30a66034bc9eb0c9ea91dd8c65abf4719eb1d3e64d06060d2468874643a5df63d9d5cc7f142ba3f5c03bff071f8163eb95affa49c277c826ade8bcf2c59315d169e444cd6f4bcf9c4e98134982475e37192d43ba0dda456d3665bcc2ceff63cfd54df60dd9e6e3064f6e4131a409278abce7aeadf3c622ca092f25acddd0f430645b189547306cb505fd062b6a2130393cdae8ca7bd6c8b30ef27bc5671d08e4c9a1281a2708de63f63bc7ff0eddbd235cfefd1a4ce98dd95bb702275c37ee1f66b47c91e1dc1a209e26399bedb2b49b1264ba8092757d792b177b44ab5276d895c41cc65348f76b69208efb1260f090efc23e603c6b1357bedbaf39717a71e7fdbda71da0901d4cb8dca27e45c7290f5484700d3c268f88043dd7aa681208446aaf0011b473859e5e4c8021e5f30328a1cd98ac66e2c24c4223a55b5388283069ccd39a1160bf48b3a9e7adc186ee5c9de33f92fa00b28f1b81852f45a4a8dc752e943e828bdcc14084a6bf832758352324e4c1b1d93386a66b9c0a8bf9f6d8cf15256185f7f37f0c0b5467432af99dc95e84b75c39d75b12e8a2f61e6b0ce623d0017dce3ae1e858bb24c4594df4eac802101bb28b2cd89c764c12c7849d0bc72a010ce7604debb764cb760d217dea3030947e6857ec16e05b0de9b464f502e65ead0a3a3b693759290aaab1f0f604ec3e51bd90e1a0431eb4560894e786e9af30acf406e786301c6c682448d56160908dad75bd673a898c70daeb062baf92386b01d249d9c65b083613cd46b314e0a7a206a1d30182a10515388a992bf84f9de058095dca759cb14e4e31f471b4e299265fb86b39018de0ffd59b1ad71a371c5ba266cd7172e31966f667e0fc415fcde5f721cf594a244bda3d768bb16cad77c01a16d94a1acdd1ff327b13ab69857c30015f8f9b1e4907b5e5b5ef56047c7938e73b43eaf12a4b70d2387f03bae9d2d7b54f8a4bb4ff08185dc500ae35bd334cf06a8ba33449683101c02c8569be59de4d5011882630b9240f8dc0b7e8384d047a48a2afd0d6927e574c570b65add898e2ba8833df977f52e961682f61487cc3f99587f4d3e1dee086378a3df07b2d48f47240ab1841265f328efbea5dc5ba01c07e1ff7fdc4856f7f454dad92b064e390dc41628e4431aca29d7b6957e9fb953b557067276c424909b92be8a4147bdc65525fa0e01f1fb135e5d5a2b6f8fb5c5bd0aa876c7e7e44dea99a8a6dc282154c8ddc6139d59f692932e78f36a532b4f5b719d1ffebceceaf643160d3e00af095aca2c55329a5762eaa965512e9257222b1b71716fef6b37ce9adda889bac9e8740fbcb7ec975a12db7ea1fb6cf0dc8cc27c5a11a484efc90da3941d6e11071ddefd7a3d89f66d01af0d6f2448c4f9d22ac24b38898e0277a8b6ca177f8e8953ea380a4a1c45e13c50cb87b406afd7f04d93a917a6392c65ef701cbabe4c27d151c259b4c43219f751ea2c5a8a1c6c6ce1908db2401404fe391bc7d10f9dce4cf729521edc01deb1e40f054e08e89d8143d72e59029c158ff32892044f0676471161bc993c91d230fc137c43e69aa986249006000249a933919cf8278811cb7c02079960c5728f390019f443b0151307c988a6c1ccd75feeba64e646da8583231372d4f4860a7295318684c2fc2b41fc2cfcb18a92d20f12974d8a4217e4004161fc41575c3efa51b62fefa6cf0598ee9dad1886f63b02fec52af0124c1a62630b0c6d59f037a74957dd1ef5a13041245ec27cd263193c04d00fe80650b1e2f003fc10ad5495734f4c506c09f2a4d9898b54600ffb81265078b1effd0ecd3c9bf2ddeed009e41c0e8e8bce389f63ab747402bab861565b7016514d1b389217d7805ff0c1770b6062ac8b96f00820ccc07ec8626830a19401239c97fd48cb87fbfbeb81f24694d3f12df698d0b898d00cd3972da234f29630049cf23b2858e497a532c6052c7d33b39b88904d2485b6e4ca1da20515054605f649a27cf8171140e8eb65966599d691f2ad0750daf39ebc59c815142dff661dfb9d0d7fb65d2dd36b676fb76d5fcab79b8920609dfd7d12b758b8a0c1e6ed425fff2c1c70f47bba6d0ebcaf38ca15f902d26cc8aafe50840f628cee1ffd4a45dc545555515a844d113bb2109c7a3875301d8a23780a82a66918cbd3114aa79b13121f1e1e4271f4f1f1f1010272b2911efa958c8801c32d4288a6841296144c84e85732c20aa24e0700187a0840a8068fc1501cc12dc7126e0eac2807f85ee79d88fff03b61d2dbc40e99c03a0f015047fc4ab10545fc8002187c3082500cb0670845dca0e0e305451c51c40e1650083e3db4786250824e0e58701076d08ea04376ba51c13d2191028c8713d81798e08a9102ab0824a84a300135420a3a544658a1053347d783ccd1030bfc55f972d4c0258711489063092ba51c35f4d4af94030a2139885470947e9eeb14f0965dc8961d4ad31978dc1b94037ecbeea601bf1d47c56f3fb9691499303280378aaf7ffb0bc96f8761c06f9759c06fa751c00cbf234e3c459477297efbca489431402c11e063cb00de33e97700fd46fa6dfceebb037203b28abc3101de005e3cc5019c14bfeabc2b4966405e4056404e80c95360c049f16bc508c81b87427f80dce22920cc2c459802e4ce5344978ac653441b142846a3ff5008e318b28d4d75f214be426150a0188dfe43218c4fb5621c0afdd75cd7dbce0655c8168fff489638127afcf1250f201f5feaf0660041791ee663f378cf56691cfa4fa886260ed9a0309d134815a8f071edb1e1507e71f4d99e8e3a0452052a40fd01facef6c93040196f387bb6a755c8154fd172dd9f7745f6d57d77c5855adba0c69a7c912f2ff245bec817f96232994c269369b6cc96d9325b66cb6c992da5d2cd2cddccd22cddccd22cb9788a8ac649f13b97cea573e95c3a975a310e85bea2a94e4e8af4549d56aad329743a55ea35d46ba8d750afb126b880df676f5faabb6c69d2114a13bd89302d3ac6d95245983d4b3afa2ccd134da7a3ec24cdae68749c158deb6cdbd549c7eb4d700153986cdb1446c7bf1bd4efdd9c37b49bff650077b972a39f005050b880d60544714a72422a954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9542a95faf0803afb93dea303d4a0a819e1d75ebe9bd51f8f8fdf7933787c947152046900e4e3873c1f3fdfb37d3c68ab34c8c767dff9dbf978fbd1f9c8b34383ca5019a93fb61a7e733d26f76cef9d00e9e4174720b1e3e104670268831a647bfae3c693617cf2cda0ede94b634f31a3957203d05f8f8fef343edef3f1dd090f011bc09a096f06fc8ed3f9e8369bc777b64a7b3c1effc75f8f0f8fbf1e1f1e263adbf47c801ce7a5f620c0fe0b0af97defc49601179d27eafbde09fc9161773adae3734119c6a7a2d9fd9bdf3bd1d9de8579d56ee329e275e975d1d6ef91e3f88d1ab7b15e83c2bbe24c2c7588c5ee0aad93d55ab1ec66ffbabd0c633ebdd35d40149f201d32f00b7613e20c80820296f5984d1c39c05f9004caaf9e80a19e31daabda7cc915ed5badc14a71648f84c04a3afec84738058624f0bd68124f216b9c14670dce8a125bc017709436818fc997359e027b71527c982a4313aad1f1436a705c85cc180aefd1ae353a6ecca4e347eca65a55e8747ce9f34becc0da8db6909a2ad4d75b9baf7f5088b2827a05d3d6bbd12491246eecea60d113d330639d14f0d6503abe86a2262745acd3119312d41d61a1c718e10aacd54c18f1301347e0ed37464c59d58882268ec01bd78ac92e64e208bc2b366285891c6fc20818403d9c4ea7d3f3017c27dc1f0b3a58c815ed1e442e8289214c98620eb4070cfafdfb300103a1030e21e0f801870f100710f10720601ee028601c2d3fc0f142ef47c1851ba51b3537704a374c3f278e0e85a32509fba20e6cb003981b2fd03764a0f7a38853c84208bce2d0e169018916986fa8a8946ea8a07483458a40eaa96dc4e8ab349c93f44ec424dce8f8f684131072292cf0bab895eb026d2214ae573eb1b495374aad9c4a0857282eb024914a824612337401f42b25d19255b512e928a5282d4828524a84c522a14829919489c25bea57fd16e96aad740bb1d56f166ec5af79dbbc47259dd9bfd666dfc96cf616672bb398cdfbca27525b39845d44944b5697da69caad4c9fdc8ac5add0fca813ebba6467696a59d939154ec56b7744121dca842aa15e502d3b6a50196d45910ed67fdbc611ab1e6b8c22dd25d2dd571ad9bc5bfef5b36d64a3abf5781b9dc810118a859b342d6fcbadbfd6e7cb59b849d3ebabf74bbe65b97c87a41c528ecbe827002b2b176890a3e156b4bdb0d749968dda87e987d88b5510a6d00cab3284f4257c492b2b9b482c7bf89c8a35ad8c6656b5ed8b613bf34669c1755c8ac5bdd0d7bbd0536252cfe73a2e05ce203f72957503c6a9c019b2af629c1ab7a22b8bfdccfbc4cae25f310257954b44aee352b8953927b7a2a1f6339bdc1b302d5f836fed7c4a4ba055d99f4fa17cae8b2392a3b92e29a7bc32fa5c0a8963b2258edc6dce594d28a5cc5ce729edefd85394a76e7c4b9bc81ba0d581d2fe9c0a9ca1b2ac6ade1bb094de5687f6c7b6138b53e154a00cf3ade73aebe55d61712b9c0afec18e148d69d057323b84d8f142236103091948e8d05643914e67367ec37560badd0ddecfe0d7fb78f3ef6cf243acb76ea3b5d6469a5555fdf8a454b559f6b5da14f4f4833da8669f8f55fd6493f8d8d3af282de8c3147d28c2a2f7fd93f879179a5a128a941249b9d57e1e5e4b23a5f924ea8a7ef514f8e9c73f89d9a4facfd3df778b74fa8e6c34cdfb7ee8fd3ca4d5fa2d35a570b3c825b0877fad1ae89350f549293803fd2ad2514af749dc229d867f6df896803eaf81a065d1bfa017edc0d73de883ee9bd4bce1adaaf5dac6e256f441f04928196da3c668f5f4739f948232d0af6e49adde23a1ac6d3a2a8e78280c0d3dbf62f561c5ee572b6f520ef57cf51427526e98b349659fd2fa968e4a1ade1a2efc0ae612d66b4fe79372e00cf5e989d4f0f789d4f7b1dfa392d6b2680766719fe24dab8fd17b034643ef2ba5e767a49cfad8db27a1ec57778515e9f435b5655549ca8132d05c339b88621dc4837defbdf7de8c38366e503a4e1342392b5a51ebbd6a59082f8bdd875d4dc39df71146948e930c1a3635326e6ad4c8a081d15dca392b39ab8ad25a2d5a2debbaacc52e8b61f7669976334dc3b8d3f1783c1ec87b3084000107582687165c90630b39bca062adf6de8bfe830c9ad20c87f921e2b8947356159d554569ad16add5b2aecb62d675598b61d762d8bd59a6c51b9ee29db7380b8c4008a16134451a91068828938a2d5d2abe441f629742cda8612acdc0b1519a510359a04c0cd80259e0caa3f1503a9ec906c6e82e258cee524e39ab8ad25a69b5acebb297c5b07bb3ec669a8671c7f301813c3c3e3e40e07f507c401e09f08851d3e27bfe7c6631cb9004fb62d8f2457ef6d6ca1d92f7f5d79a64f8baa4cc9ebe99c76bbd7d09c0af54c40b2dff53448a0e1dfa7a10226c68f9181134b4fccf5b4b31782300b57c1ce567797f7cb5e1f3526aeff1326fd0d78cafcffefadb7989b3bf4aaebf36cbcbfe7bedf1b55d577665dfe9dcb79f7d672b81330dd7dbcedb8bc43bda93444f16edc059662157b4bfb289f6389b806c72db99966f06f9f7d23fb2bff2f6c8329fb8c63efb786dc0fe9337dc2e740df6afb7d766af0bbbb0960faf0dfbbefd7de21acbfb035ad6e0dadebcb33ff12b6b29b365a513b0943366dc1b2e6d330fa1a193374adeb8a4457b1e7b30c6375f355879b3b0c1d2013566510caa0af9f13d6618d2632ef118eb0b6b5f8c1686c14b5f3903f00b5b763696b0d66dc4917f7daf114715f48f12fbac2512bb7c085d4ba2b6f8b51741f6f7e92d3101fcda57006b15c8eadfecf5ad9559c7e0bd017bfb170d98cd6e7a27ae2c6a018ef4eb93f8d3f4c4d2337343687f1712c58a3208b5457690722bb4aa62fec8a5545c4cd1f3655ed1b58ba3a9021c658a5ca92d73051607ca29af975576c012e92a4b56524e6bcefc293aa3b4d11a2ae3343a66932805387e0ab09bbc86df546a23e5b4c918ef60315b02bca50b4c85912e1546bab060130ba6c2d41855a6021147aa2aa3d6c4115b2a0961339772711da7c275d587ea525f5ce288fc9738421f5eb3be8876807fcd2b5f26902e3160645830943ec817f9430c18194e8563a92e71644b974a13477675912ed20798ea4385a931a44b85e154aecca5585ce7c2a96c1c502a942e9c8a8da5615f0c8e33a1bd4218eb90fdbd591591006f3f790a6a72927fad58c403355d6aa235e80db51147aa1bf414472e0a95aa4f4a411950a49c4c85a0a58ddad0521c914f6de2087d684d6a23d2c19a96a805d37fb424e201437d721d8ef2944c5949d15b40e94d4f1a278e6c5af2d349fbbb8eee8817ed4f85a0a638f24a5ba8e1276a22e5905295843a698795422bd7bc71407198f7f6132947d68e3a0683b7a21db009fda92bfad5ccdc0a06aa2a595522155cbd77a27a92d8c55195626b68f9cfa44f589ae49287505a7342e85c47a9bb731d9d93fe9c16a494c29ac2a9702bb4b6685971dd932da2237055b568f87293ef28970bac7d188494ceac7a92484241586155ded3a431d6524cd5c3ad82b0d2b62ca3104239453a38e753ea35da453a6093fa73eafafe189aa875d70c445d4f71e43a5c74f573bee884270bc7d1f5028ea351a938aa77b332165213868972e04d4d222330f5902da157d41447aa0885ad6a3b8eaeefa9ecf5afafd5d268b74cda3f93f8dc2aafaa696b2cc774d0a1dc0ad771295cc7a9702b9d0ed7712a9af65c8af65cc7a9702b7144e33a4e05748210d614e864e2b403e8c4a978742094c70ab702d2014a79a4804e9c0a4b1c4998242401ef2a035f88380ad9c4910c95de09f9a013d691c24f123194968fe9d0f2f1163ac5510a053af140ca8a464807e844a3868d1b3a7e8081e15464d7e2f262e284c958fbb02db81c81041da3bc35b8fe885b5c119f84ba443a10100b3e7c128a9422a1483922dd24716bfbf877577c5c978dd5e3adfa1747aaa7f19350a41c6cdf754bb1e7293c2008e67d222fa795465c41e9c35ca2942a7521a52dc4443a6013f853ebcf4d1cf998e208ccffc18923343e35e2888d3822ff631347ea8b54b0952e222170f62221f0ae2b5ac2076d9df7d83ca21e60a8a5687c40603c85e7e585c17c6c3cb6122d4e92dad6525afe6703a18923f99e0d04660391d112fb8dc17c6ce248be4807b82ae1a2650c2dff6e1b4486968f7d6cb4fc1a2302216386105abe65716991ebbf7b6d149dfd24a3fc122f2ee29d181118be065fd3e06b58d328d6264a0b4c7b128a94c2341116ad83f346911eed3d22299ac793e77bbef3d55380be93f789c45ae73d0f7292a743b146ca21e59072483911458b540b321af6a05f890b3ee00e7c29b9171d296987fe49d4554e94169dce73291de9e974b88e63e9749e247a6447a3f869276f68c9e75438154e855391a9ebee8ecd99cdcf22a7827dcc322e258b5a9663e4bac8b164c0b59861dc8ae537db10fbbb619953e1543895ae1a42176e74a1465bcddd5d9b73def91723e59072505a5c12ea3e29754558b0ccda4828ec3591947bb1ab8974f3b5acf3998675e67bd51b07ec318c9443caa9f4cd0daabb63feb0f2870edf436901fd3de45ebcd716b563c1a1ffc3110581e116f221749c2f185a18514954129544315c6affde461111b0b6d11a27d9cf4adabe7d0d48ed3871047b6be7a5378bd02b401c6c739c3872bfc2937e85aad67aeffdf8d66efb95753d7d59343f15960741f354ed506f67e656240cde89f82f9b7c71c15bc280e58584c143c0d372c50518ca952a1387b02f864d6b3269594f4544c02a424438b07ca7327144060582d2e8f910abfcaeb87faf69bba9058c45d171cba41c6bdb239a3a7f73d38b614a5f827d1f2222025716b9a259fc637c51776dd15b761dd4b40635bd1344687101deb26b91126e2b5986bc441cefe1eba146947d31bceb04583e2efe03fc41f171fc076908a1b5bdea3dcfc1da701c4d44046c59d6c7a774d39fee36427c80440c2456b48559a47b27fc452bc09b6a8b4deb2dc0d87693beae9f15455f6e9a55962df14684027fa1a3f441c78f21343ffe14fd20ca02dea35a310e8d467a8fa0ef20f2210810cc0822071ad10b4439984002103140d9c92e4503b2a6bcebfd45607dbddebf0257ae80b5257419a3acee1357b74462d5969d0f5132315ae75b6bde50fd7cd10eb0ec42628864e08d759296666666666666666666666666666666666666666666666666666666666666666666666666e2f653d5af565a4324832549b4a13520f5f6530d1d55f8298e447d8231663bc0db4f34c42812029e5f553ff909ca171abe48081886bf05a20a87ef4f78efbdf7de7b3041e4f0a27368b1f40b2287141d44a723888e8850101d154a98a044032525250fc2c0947c8c2850402f8114f05b12a534e1255e52f234ac443588100a3131313131313131313131313131313131313131313131313131313131313131313131312f86a93d864d0fc9db7ed679bb61dadb3ca7f674a6557ecd07cdbfd67e68fe9d0f9a8fb55a79e827fe8f9f797b7cbd365cfbdadbcf3c3f3bb6c47e866512b79b7d0ffe8edd2cfeecabf9d6934b747ebe2dd179ecb5f76c253a9906fbd8636fdff3989dd4e24f66e138f86d36c1dfc926a1b7f6e7b6359c65e8df4bbf3584b4b779bf2c3df289ebfbdac76bc37d509e77621b66a7edccecb1b777be660396b34ededab43e5f6403c791dbbf30cd433c79a3e4dd097dbeb369efd9eea7d3f91deae4cdc271323ba7b53f352d7b6dcb5ed37e87f0d3ef78b06c32dfdaf9b6858bfefc276f16efb12dd3be3333f69eadf3dad6d938b3709ca9bdc55c4433c0f3336de264a21960cc3acef5247e529271d14f45741cd9d1506202f4e55780bea438383750c6eaf8e16f1f423fafdcf4627429a59c73caaaaa2af9966271a394525a61c080010386dc44302c18160c0b8605c38261c1b06058578c7705847185fb0a29e58a39e75c51555555ad10d1608588063737a7130d8d8806d8d69a95c4d869428b63967543768b4e7bdef72f0bd3fcfeb34eac2b9fac3936b47f278786f6b7f0b19c191a7b8f1c20b4bfcdf941fb77a27d07fdebbce7eaf1fef19ff7bc3dffe25f9e1dc3015e96ff85bdb66debdf43e0e3b5278912c0fcb12dfbec6f2ea1bd3ff6d7dfad84f6d6df125a16c90063d8e3b7b6dd82c427f6f1f7b32cda81b16cf2f15a36f178ccd2379f58fa234b8f1abcb3b3f4e413d7d706fb9dbca1b6efdb7661b1cdc21cd3fcadc7b2bd7f6599f7752cdac0fef1c50b8df17b08bc346879a364f7493cfb6bb3152219e09bf78985e52b9bd4b7aa75f9bfebf0ad9c146dbddf1632fe25714cc3fed65bbfed161d7ef8f8ba2ceb7140d1f72febdb6ed1896480fdd270eb76219201de2796c6f276b14fac0a4fba0e74bb45956e7d06dc03663b443610bd886c00e332ad50f2c24ae98897189f0663747729a59c73ce595555555554857cab8962109808a8344eb576b1753513000401c315000030140e878322914092c469968d3e14800e838a4a6c4c9749a3d21c48519051921062082006000000c0ccc8cc2611004d78b15e92695fa2c4ab911704f200c20f008b99a4688ce6017528ba74e8ff27f705b50c3db9bb3a1673d9ea59c06d02e65aa872dc27152c911ec067a1e8ef4ad0f5f083a97d2861aceab3e937365e31e4c96ad81701a0d3792b23d6f71c7924c8872464e491c20a1255e491c23fa911e9086625729386f85a5fee4f30b19e999ead3b64fede7816e8467ab3498541db33fbd211e373d0a0eecf3b454d9ba6c3d5a3638820aaa867f040d20a102458c714ee37889964bf21c35c56c9239b99e682c5eca24ad59cd3c41bb5e22f70a33f07ba8a8432c2201e5e25941f930b23bab0f388c4b8a53ca5f673d386779f10793269e0dd7ded17c6a9de77a1ac43789c5c843a94eb9b73c27960ed922d6d04bb47dd5816597cb7211c4bc509189217475a4700a2f3eaac684a7f84b8e50bd7f1c3fa7549ea8578ee172e1075dfaf3890bf0c7eb6c47afb2588a63c879c555b80e7d80ecc83ced46304c30f659566c818b0ac00fffb2db32a4326482f6a6f2ebbf2a05f5626449f4d2629e64e82f2720966cecd32ccbb6a4eb0a4d693cfb3e40847f1e1f38c4495e1565814c0f9e3184f67668734306cadb36feb8e59d7809678695d2cef0e09e393d407c5f07387751f32996425c9dc623b60d6c36c050eca2d1e78dd0a9c656680bd1dd98d06dfeea51b5b01cf9bf6e59f8c224fbb0ed4500d85b4c92c7c3d1531714ca095ef78a9845293e514a49a22cac29cbadeda5a03e044a927c775472895b663405d83a6d83a68e7cb4bf61abec5364141b3019f0fa9636b8d299f73646013011ab041f58e0e0bcf5de8cb912ab661c1961c570ca0e445b4f77ee8cf93cc9dbaed2372861b3fee3587d26421ee85087421772f0f8c8d8520e474a8560d01f767eeaf2fd95cbdd92ffd29903a4f172a9de3d0b18c9a81532024daa579a6710c63d8b971327cbce079d4611b080bc0b16f4070df22db5e5e799afd29a49fac91b5607203b7e0a7b95de70bdcf6a3a8f0c5c397e0fcc5a889d8868e5de4bc06ed9ec716ea2ae5721bf2d732050f4d6bf9f3a0e536e5ac0325c53e6ed07a079333986afb0349d37d5f01c0b8231f114335be3d2728d1813ef4bc2410793d0500e65b3d891af07bbfdd5aafab04f598a8d0d993ad39e9a70fbf3b48deaaba662cae422463f891d466274edd0945fcda48e685eeb0a304644dfaf8f923bef6d68cc55a7d6e802fbcd97690eca7ea4756a86ea601e0b67d39e846a9186200aadd5ccd94b32b83a7eb88791a4a3e959bd9408a9bf890084e57dc1b2b6c1008ec995b95d691a66aa18935d4770d36df2f19bfb99a76519aa2df288a3f6d70ef67d468fcc35dd69db0cbaa0c9c202d82e504d06a92b1c0ec39d0c7a29b53ecb30ede2fd4afde790c313d54c70cd2b9b2345e49a0722be179ed821a1dbde0ee0cc6687ab33d3a6de9d153ffb73d653f58997523899a062d5ddae81a4cee1ac3f8cd0a4be946b128ac4cf65c488c8a3f787d5a3531ef3b1802888d180cd251826d90fa46d087e0395b5f8abe67fc6f0edddb630bc003dfd8484e7e891e5ec9d9aa94d22abb9e5735954688239be7dc49ffaa717c64ed204f7885b7372d6b4f457d20153f788317b3acf114dba362a5fd089a00f7403d646d3755e238218b0e3c26f9750883c2b7000c7ff6263a0bbbc9490a59eb3e79d20f83d2348caba181b5cdeea66cb9f722b5475bd94549e44c412e2a22d9f9485776bcccd303c84d30d4cddf114ea26c2d494166765fda4ae27a644aa4e178bd18724e4eb97e98899f472f72ae965c9f06dfebcf6ea61595113d562a009252313fd13fe14ef71b3833676a70cb08ca3eebc8bb97edc3e18b251e06f1f953bb8f337c9cc6853a425a81444e8b4c8f988bba47525debc531d49dc69d9fae015e66b05f9675422d2eab615a4695c0c5bb34d96fa2646124d7b36921ca10cf133190fc3024d8543816a84f6b549d354284bb3731028e0450b2fe2a9f48d6f4969ea24cbdee9d00151415e4d2664b960bc4c8b48e974e857bbfb30c6673c053d7707d19d3748109e5cd4d90ed5b914cc7ed364f7537fce0198649580f3e699a3475d3331003acd3a1048c48d117ff04bc94bfa42a9a0fd0079960865fa02955921a6b28596545056bf62c5363c39615ab5459b060cb3a4bca58d8b3c6ce262b6a58b366cd8a0d4b61e56248eb3758062c36099df1c2058f2cc5a33252dc76e3bb0fbc7b033b9a91c6c58351db84d843e137784a20ae8ea5afc90f317839f86c90221abaf6eaa8f697b5ac344a9a56a2d210efcade284abc4e3dc05c71da2b50d30922cee7f751a202fc8e62763d6464fd83b08ab814f4129e0eea318933beac9cd52974dba00753461dc01b0e9c09fa8125567fd8826befb50b9a005651e7345028fef554965de6e7f5495a2a4a2083413f901248644663c04daef8ae586e00fc5946381405cb8ebb2c9b676726b7cd21008ccdc5e84a4ca3979df020da2a667941c7c0c835b151ec62ebe3a1511f5236d3a069984371d4907be9dc2ff5a601f6bef788fbfd8b071e1b05a515987c05f38671318d513e4d9c8490b05c91174e2117f1390168eccfa02f655e000ed63ff5324b3ab436bcfbbe50b6495a8cb60064903ad1d68a804942806cd4007c3f9f355fa8acf30dc0070662263fcbb102aa01d82f696a5c5fc96e53b9cc4d0d7b0e5ba43735a27e53ab3fadd6b1eb724827811303504e3c7ff57249a22e70ea1a0f2a197343b7654e8d736be644c4d200242d225eb4b446a44e2b6a8a2969884c3f3dbd74a2534a4d315d3ad1d3a74d2925757a51534d4b253dedb49e0617e371dc07d6d6f582353c4a3eedc2e2eee1e0e4138dd6c1b4b01018031f34a6f125e165019a5823ea879914ce8f7e797b06083ca8eb9c45830b945f822f05d5fb0165c737683ff0c582fc94c5bb338a6968c3385053580abf401012a814aafca6b3fa7ba751685246ddfa1b7ef3c5604b62ac5159d283f652f8c2d04fdc4f37692cee1a60f8115269fb44772bfcb28b6b5a0f774c379af511f9c70406692a7f6a8fcf33cc5154ba58c01a841a03badf8d0eab1c255b971610439f531f95723df996084dab904fbe399e130497423efb33d53bc13e609c8ef7d1d6af502034104527d8a357682fa3ee7fc5c38e74f418b967b91d77ab125fcce7086b300aaa47845e0db8e1f4fefd8c40c4e192de7a20d759160e4d1be0db8e48be189f8ded17f9bc57a211b3b7b313810f17cda6617b9708e023ca5356fc27e3b12e5ee74fcc5296f787746f76e0b4245100c02a98f0c560d2e8052dfbd049dac9676f9f4cc986fc08a40320403399f6eb6d327fd26913551549b8aef1fa993f9d20b8fa4240c581a16438b05a34014df0372b049058f946ef41f6ff13d2a2c3fa1728af14a60d018483663c12cf9797986defd07b81db5fa0118dff64e34a34febecb6721e22b246a8a5f67e930475d54df45af8bba7c0a48b1949b5fa037b577363a89e78b41eabf40776daf4052c8eacc9c02c586e04d30509e457727c8ef748d2d92638d5be40296d4dc9700be5893af6bfa15e2dad20ee7bf2edae76b0e2755dbbbdc99b13b3f906de44f77966c27c9d6b973382faa3623c99d691e32f454e3ceee1ad5ff6d883bddb7cdc167744d6f3234c551bff5cadebe9de4942c85dbd98cdea02332a4ed868298d100befea4b6bff9f0ffc8ff6cbaa834183fe1cbbf6ad4a7dd56d93f2b156e916704364ee30d4d3ec45f91271db8385248a60d14fe66459e2b33e2cccaf8e5177b1e4d621579f27a082b6cac39fb1779562f9afa1e3372dc781b35352bd3248b3c5391331442043dce93e23afd916ae1a5cf65231e787e07ba19bc41feddc90360456fe20639094c11c5b1ad67a89295c1f33703b479d9ee19ca0b1e30ed10aff92518a5568d5fb7cdda859c3161ee5252e71530edf485cf57c340c9e60700bdaf9cdb15f1c4e66006867cbca2ef7c85fc350245cd432f0aed5ad0083fc589d6ac990ac42e926b464c6767d7102ab9204540282070bb7852ac9e7ecd3bb2a396548380051f5dd0e8a366f2585b4a1115aa0f46fac835ec90fd8204cddddab49c8250e97c628541c76119eb687d83b0e4c564295329453fe3bd6c9874857d0f6a434c0a65513783b0e6e687f0c7d84f3ac632b35a7696bbf7f3da29ac1ac8fd25d41daab049f9e66983c8984bcdc3e93bda1e165d3d439a9d398fb541508a377620aa20bdb9477d2ed806ec8ffa74a9c3f65232e8bb4861110e9685751d1dfd9c048932fe111d88514177770c2ae2cc4d57322e67541eae48ff6b0cf4a8c2cd69743c7914c075e49e7c830e320fb943bd69a6ee1c4afc410ccffb032bd390934c109fe011132ecc83a0e9426abca49bc61092deffd1ca4a928f0963317f1cd4e10ad61631fa82a8a19094bbe6dc2c8aab1b9a474b67cd83f6c46c7fea0a6a9e45ab11cb43ec57b45bc6bf6ec51220dd11cf838c8562dd45f465fb54ed7fa3961615c8726d91a8abc220b61b88b1640909921d9f8cd6ba1b5bc47a65de5457ec416acedb5460a88d054e1e0f8116d2d418c37d0af2149fe5b385323efa9f4ff8679907dd820635fb493e453d64da304c7cd20a5dfab3fc617c23cd95b14388185725a2ed34bdfc109a4306f19b8e879072c93e5f3dfa47757c0fa10dc72ec1bff86e12cd7ba4fbf4788cc3291b836e3446b8deeedcc2696b8cb23f5ad5ed11daec3f84249e444e7960fee9015d27092f9e7b8fff9d0676405d6ed6a7c36e6c8cae6461f49498e2f890c2ad20d84b8a622a0051759ef723289aa3b8c36f88ec85a54a9ab1af8e08fb0bff297155c7513e28ebc1d59b813e781b648fc71cd9764d08e09ab8f5dd756d6809c1eca0f1ca029bdae99e79cee6afb09590bd11ca3eb318e917da0b25d14e9ea3c5de5ac2edf66e98e6236e158ede180da7b9930abac58a8a57005a3ac94816d5534ae9b106b6521ae10e2e1a806c661d90fb4a8ff5fff78a4a2dd8283228a1678209b255392c48fb5b251a47a503c28b1cbd3aac9cb2dc03d1985b3318c42b29425d0b80eb7d63efbf30ccd14e2684b7c7620c7d239120a4e961530f4b863fff41d75a51865fbcf946a23e4883812d5d2cacb072f2b31efc6164b20c921e222ddee32cb5e53242fdc1d1398507dfa5b4c76d5894ed926ad8ec6120dd08d793711d2c65427b397d353528836a042819e17bc4fc30004e4648bf650fbd57f7f867ba0bb8f39d4a6c978704767ff6773d6d24741be9c535636cde99b234cdc364b651fd10ca4105456d9c135e3320b57628acac2ab6fa3f8be4416927c19e4a8d2d777e8b5de8fb455e0419d5328a92466c6c02b3c8b566c7380b19c753dd6324a474277aab9f7827a375f521e34fe80907b8f237ffda63b74416de7bf41ee41cf3e372c6137eee11138f2df8c0e591ed71bd35420fcf7171e9ea08430931ca00254c4167dd6f2a4dc7cf4ed910a60af9259577e90e23ecab5a9413e49010bad336cbf2a3d89cd8bde392a8c25ade42720fccdca48eb473e0c1d49a601bf08a0612a943d4d1fa8c2bb919cd81874e8b5e400ceeffb5c2de362fd8a009565e6783d7dc89b91b0ad76eebb4df81a4c7de733ce0f98318ecaf002f7211b43ff1bdb9303072adf12f4cd3557bc8ea931236955abb701118343bd911cbbf3f40e44d2b06f6d3d6ea9544a9d27e18d6a78916fa8ad39a287add458cdeb71cb391a34103aab56fd815ea598d9c13bf736afaff9330f695579575df15b981953f985640ae8fd5d7803042f68deb7ad130a6413889dbe37a8bb38de5156b286dc51a170d71643450bae2c58fc6d67e81f7cba615ac0c0b5792d2350b3ae7bb03c844d1c1aa7e6a603a12907d0edced7fd99f300f4acaca03912f6423b9b9f05b28ad66282c4377349aede4a49ba1a0d8d7d80394c735d518edbd4278acce510b71904d52031a5193a9311a3b0ddf313e6cdf45766c5a429ede090023d9e5dc5193a82a72cedeecdb3b01f7b260abcfdcf28e16a34752918054392a7d24a2f99d3db94705e809997d4b6320dc873d363dc2317cdf293e45c314e31c3de1ea0c251a4a96fda447119da5c54d467d8f54720da871f165966f77f63ac4adb307dee735c53283235aecd7bd1366f1dabe31f6f34425d1ea9f07fe11667411b0f790145d7efc8c4326cd9eb4b47d8514c9c01d785d6a762b79192357e32aad1420e5a0325d062b66e8f1a50c86caa22091650f6cd014c1c290402be5e19893f616e878e0e083a872494f5a7d1526e660666a6697c0028810c3d9a09aaaa35a9131cc592fe66f7994343aab9f7dd6060922b6828c73cb555d9a2892f05211d616b5361a4d6d243bf3fa3c94b7bd6a49619879ba7553454cbcc4295b7bcec03844a3cb6a7c44553fdb8d320b6b96cf9c329c1d30195acd4f898722597f1529a5a54d45fd4ca4f2d83968eec4126d5704bd68efc355f8337a9209c6dc6dad51186a26440359f71d6aae14b39733e1eb256ef7e4738dd64174a2c2df58bac9b8eae991de400c8508d0cebc0721e3b3ffb7c9fef3cc4fbbabea79169196ea616f6ecb5845912b5dbf9ba0c7170cac943c2f22ce345d85b2ad45bb8ce9ca5dc0441d09106d665ce8b9b7b34d695400fc0447821cfacae8016a44e5fdca68da6a5ebac3b2321a9255466f45abf5f5af2c2e2766d9b541769302a7f3bddc490416f662dec2d14c1da6599612899d3a2f37a38f10bbb11a470c6da79e0beb4e8d362c481a4dfbe1809701313572290823725433d43efd2740683030cacc0185de351abc49379f92180114d804a1786fec7b98a569d575279df6362f97779abea567d50535cafd9513cfc8e207ae7119fdeffe6e44b76d3d895b626cf932ea84cab42cedf1d5a3b92da7398402defae46507a05fbf0a7dfa0e0c4508308dd8004396304d98bc846c1ca247b359fca79fe18ae52c9448d24dad1d0dcf9646f4b2149dc68484cd44b4308e1bc4dd3c901701fb61db76669352b46fd1e6cd9bca498ef888633235a1c2d3616de9d53837270ca539d2516b07a13bb9c753c1e875f4ccaf981614a24814446b7c584625ead3534cfd1454b67630b8871a9684e11477e8606a922387b9560ad1f0b9d99544f1d69eaedabe3d59cb9d7924f4fa844a00991c2d065428fb748b86536f9739dce0a4451b43d0f06359ae9741300972301813e54822e3d015a8f0f00f4c5a42159d2b54052d2a82f097f465152c6155faf1b53363a338a6b87c7977d898e6ebebc7048f12a5385bfc7709f4d97cbedcc96c8e45feccd24f1dcfafab804e62b2633ac43680a8a79f397891dd11e7e8d3d44f202113b1e0e94a52ccd09584064d298fd3b039523a5c2347c1049232f18cc427831ccc5e843b174e80e6388b20d352585f926445dc46290f980b515b5802b59f26700a8b6573eadf58253c189ed76e8e9b0db933db77ea61556d0fb7ddcaa4f223a28153b493073cd0ec5977a43638a1bbabe71302c34317a9341d3996d055d84d1bc9cdc1b46886929e91634e6eaca609c1071b0cb3d1abb0f44daf82b4971932b0d9ec8332422b3309f5b9bc5cf9c8cd8c3446585664e14de404b938504bf2e0bc5b20302e225a8e2c83f086c4909c5b7750d3c77e66f4b93d740c31b3df9951047213dcca252808217771e1c24ebd7f297e6665e9dad1a5becdbf9a27fa1aa2083b55a1d92cdc5aeb661dad86246bc4fb9f778b7b6477b47e510af18d3b04d246cef66aa44c003347a82fa0c7a7ad612fb3ea50ca904d30e95357cabc6a5cefbb8da2cc07c974eae77ac3d71996456b6c41bca4250bff744ffac7c7d62a1847018d10e7387cd373462c7b46e2f71ac515338f54814f0797f41930bba91d804904701089dcb7dc0a0240311ca86420f500157ca9d64fd96cd25a8d6c28227748c8f48d0536d39e5149b60c123be407859efeb0468683a7afa73289dc0c032467c40dc6dbb71391aa58f6630258e0a8bd4193579967f49ec10bd4b85d02eb11924ae6f592cac92f6797568716502750d637392cffd0dca2145781ae158ce427a787ab466fef6880549dd33452144dfff84932882f56a0fea439b23295cb24f3789873f0f561b38f49967a8fb042253b2dfef013c322e30ae0bab6d81d1bb190db0f074eeb2f61141fdbc2adc0eca65baccc085c2948c22013c0b923cdda082d1f9a79484049008cc87a5651e5edce0f679a98a98d5a13c2235faec9387804239a0ad06b83eb89639081d553f4e228a2ace32fc35af03b54aa9d0c5951a0347da145c6934d7ac0f436572756d6901a62877faffb031c0d5d9d2c5fe61cc734f4bb316e14bae8adf2e8c88cf765b92e67b4f3a0d049d2ab9f09efc198f2a96fae9fc3cdfb05d9090ac72b066da5495685961a9816a9371672e93ee66c5a3c5b40d49855f2c121749c7338a5b484a85042386847e74271a7ff483964c64f7b2b503844ff6fdb8303845c08bd4213c7bcff8bdb59fd803aae6b1ae106b9c09b73ca05c280b5e365a8c08f5294d602d71fe8de34c7945b27be9dd50ddf1c02ac52fb7ab48f4697a35acd30a4fd63351b3da996a03157d13b601f73f15a000b185c09e952e5d6666640642328da7a3de822c2aa264560bcf101ba561e55825c521755ad07261cf7828c7a91192508160e0f573ced51a7237b1916c36515c911ca3adc91daa39af651b72e7c4428f135b79b96139fbd18b541343e906ad49c9da66ecbb040998b2aa2546ee4f7bf10a75b7cc55322961d6a44d2541ef86d27bb266e25e9e13ea9ffc825a172e68031551451cf6b7726cb3ae3a61626b13cd097eed4da4c5f4c7b7333681a6ef459e2add8ef11bdcd9d994010566fa15e7f3edfb2938dc6014e093e4b8bffcf56ac57d11d317890458962128395979290680fa420a26110f968ecef4b9f02684d6b704fa2f6e0ab9775c34ff58d9fac57d46f9b3b9e81b79fceced2281b380a0d28c094ec0c7464318eac9408dbb442e102f871210c14b520455b35f378bc13f2bb98575ee8ec53d9c5bc48a29b53e43f14e04700e450f49b3ab71937890c4fbd1bd30da8326f9e97ce623244fe9de77d0d3d000ef542974b5a48746c9bc91e4ed8772c7726465b2c9175e9d7158a475352634e3ad82bd479e10b190b73a13074b3c36909850af5374aa1d4f93ce0e5628140aabac52c07733d582588861d87824db7036ba26f857db1cb1ea9df1851b6cb827689d92b06e9d648419e817b3501e85fd9454977e442636020d8e56b9b92956932b630d11f2022bce958bd08ecf2842ac74918d3527de0afdfea7519203464bc2e171766e275b92f5705dc11a2ab35f5e4bd3c4b779cf2d532085085765d06ff6ed68bd55d65ed6c7660ac88d60142ac509d955de8cf0bd7201b1251ebd2b8d0ca55dbd9b3ed7ab4f2375170455e4a5fe3b17008fa9878cbf1b1f9300399bc434557e68b81efd7659600f3e0ffbc0da836c1d4027a098f10f4340b8fb7db10bdaba17a6c3bcbe99b166328c26efb7fdc31732cead76f5b550fdfd94a92e5a147f9467fa81c3323221e757b2872ceb25987a157efbe1e9aa9d868a5e02ce06b55977b285edf69dfd03c9fc55150a9f89ac5e0a06a219899cf2409cb3bec78955bbf4ee45d011ea0bc2d5e7cc1fc65838c059decf8aa0a13efb23e9e3ecea4d5c55f9e28c4ac8fe1b263c72a6e539ee29a4d240c83ffc357413567711afeb2ea94f25ffaa169418a6c25a6f1f8adf7cb80ae37f95a6fba5f3e397c915d9d1fa4ee97f994aed665946619261b42cd3541d9e386c2bee10252ce75e17ef99422c9bdb7ef7496ff043583c0b532fc7af87e8cdaa3b5e52de5dca92a986fe251e1375797eabd44181a8f1a0713549fc83509051b4a62cdc7771e4e243eae9269e18c9f3f65b36e583e9180570ecb6061535521e52f3eaa6af3a17864d13324567237e88bcacbf32989d407a97081ca2f67ed5b194933f8c0f38214dd53bfc3a0bb8ad63b2b75ccfaed73c5e554758d2ccc327afe06f486de856a8a14ebbeee1f7bda551afedcb54ad4c424ecfde40329ae37d1d8723ab7117d2c231fb7af563c6d856bdf603de1206a6802441cac410f9727c9c588dbdb8dfe67e34b06684d1e1097833ca32a9255a67a415a85ee3c9fe3ae250bed6ca326020eb1a4601994655326416050d1482b72a693c96b3f59a69b6bc070ac3c67da442455f6722f08cbc87164929e56552c8bcd8ae444cc999d309a2c47da8633bf1c1031d34c8e09fdff10730066fa513c1e553ac40c567af24e17c0285e52b1f983cd748d0a0066262b69c436510cc6f22c6adca8ed0ea76709e9bbe5311102cd5d585242c61c6d15f5d534579d832bc44cbfc227a2ce1436f5c4029a6602e18610f5e067a9be245f36729753607d498b33dff35b621b0c4a153f723192ce3ada564139c9d9a0d4002d77402ce43909b89519b8fad074b0da627389494e6945c0902c738e99acbe0ec981935f167df71ea5f0a07c08124a3444d5017839e32bbd858058ac54295520f8b1484f26635fb5f9703a0ed833fead453bbc68167c64294006cf44028bcf1a9d787fc0160c3eec6e0e7c0a3d84e2c5af9859a98ddcf2e5a8cd847a7997ced2383fbd3c6046fb0a8a99e5f7b64163e0aa46e33d91484af0d58c8aaba5d0c86040c5efea77540462e6a544df4cf307b563612722c739efe73a35a4f9a556973d42dcf3100d6614f02046b809b67c297723423aa0990efb96caa878c1439bdd6e4743f2d00ed2c0b9e0a11053690f25f783a3b9d743981d47fd21cc3ba0d0d6f3197d0659b4ad662789ac50e11c9b1937f36a7bcc741a35e088b4fe81ae96d2d57b1264b57cd0cd1cd45805ae9ac95ac7da749520c1d4bba71002d5ab293ea8c43c23432d4b40c94317d30b686171fbc0ef6bdf051433127e232ce8e8b54cdcf5ae6f7b7040ccd30bb56720a572d7cd29400c7b3fb63dacb1330e1d7ed18eafc95677ae2c1c7f26db6b9c6c1f875a454d4cc899fc5095a6cd2e6591bceef8cbe6ee4aae41e9f6a80325919b24e8e08d4b918862686258002e73c7f372fb4f09c4c57bc1444ffd82fc3b5620a399a2e0c484fd739cac22c71fba8a390124c28be23e1e93a2143b85ee9752ce537c8bfdb6c929feba56f9619ea06d1c79dcd337e992cb9d203f4ce1b408752e16b316e1e84f1504256bf606392280c6cbe7858e76c60fc3e92a8a5c79ec14a205de85988cd38c661a3a6397c36f5f9543d3a95c8c8f39b24c0dbc53ed4ef143f5855619713e4441e4d1ce87adb639583a1fda80b459d25e795229815511076aacbc28aad3ee56a37181988eda023103d32c831ef5773f195ca7aa22ed5d133e5014df5481789076df32c893f2fe1b0ced578457011bc4001cd3bd75233ca4eee5021d552066a68d4b64e0a5caa5b492c21488b90775df796d812d43ee956cd7574ebe06623a9f7dea6f6f71ffb08ac26c0585ed81b6795f380e961b7d006ea4c3eaa2a6135ce8cf9da40f98b83d74af089ab3046b082f25b1d4e324596b0289da77d932e5396e39d0ff2ca0f40a215a5de9a059d45b8e20d9a88ec64963a789ec6788e9450a11c322b36cece61d72e8ba3a415201306623438ced4742827fa575597a7a314097110d71f746d8d631317e7a3fc2d5380baaab5be556abd1486c06d34d36eaf8bf64f8fe8903e80ef86e1d58440e9457a72a24a512e3c12a2aa9f9c27488570c2c02c35162639d8996855c39136719b69ca2837eabc399305e7b9c70564431386c175405dbfb613790a7b08171865c96979d9a857f5e12f175b80809a07c53b60f5b49282fd726d6e363f66b2ae1cdc4f37b0e17e5723c9ade4f0f82cd14c09d60f8675636c212a3fe989d0068485fe6f0e7df908e6bd68a56136a770e17fff2a87d271911a9d307b5bab8cd3ce41919ed7d0993d188421a41a0d9b3f745191f282501495ce4238053588bac0b0a0079c5a95ac43c2171119b21590b06a8ebd982de3131449a4e37fc4b48bbec4dfcc67e5e968254e13bd79e3f666fc2e21cf7aab4a4862107ea7563d159b8b1bcca1ab127d2934322dfa40926b42b06328f40c7423ef0ef1513089818b63b779d540f0f7b63b8a5c5a87f06705333851935b294d23ef26a510800ef43d052d0b608af50be48f271776aa78ef7b0d66ac95f88d8fb61d14f7c745931ee0615bbd0424bcc4a0b6af270d80aad4278a1dcceb1a8403308c6d41c8de8d5e93da623c4a668d0749e3cb8c899d80dd8a83e501c546d8813009983601b541c936314e9b56143a841d1a39b8c697e2af5d1318a56c831262685d47dd65cd7332b02ef1695563baace442043efe13cc907b93ffdf2b891d3a3834be70f9281da2255179d1248cada16d634aa72a7c94949cc5819d0919d6eba08c5323332ca695723a8c37c36336801eafc29b55d19a59739c43952863a81b439b0600f7170d72d604ac8a1e696c86ad4278159b7bf6afda5d4983d1afc166ef990246e1a9466bb76ec906ac027fb67e0341f3ff07271b0cc1b83e7daf8781638ac842dbb2da1e040ca4dd427d0296b29ea4fefe6570f62031a7d050574d66fa4afa783fe683fcd64d49c1b7c691c5ad32f76eb971c46fb8b94f3c3ffe7ed13997291b3e98f35f34d7f8dfc813a045f992378e2c4e5da0419b5d718ced10cefdbacfbe5de2bf92b9a516197c3578eccbf009269e083042aa925e03d2f81b90d1c155f474f0fffae7786a065dbaa43252734f19ac7df282826d5c583170303a4c4bcd37f7a85248e3a60cec54807af17202f0e47c2e7546262206f1065459a249c05100390997998ff34667d464953cc47ed12bf7fdb409180f4afdd72b9e36f7cef97f94535b2f28f97d04c8a658e5f86b0fd8d914c1a9d5ad52ba23dee8b3166e319b47aa8bcb91c990faa0126f858a3de779603052042ac7c17a7f96af2e826550b932c701cca41bcffcba05103e8b5ab8c715f398b512259521097a31437ed5e80cd2c38f2cfc8ac34c41010107fbe943e5355e8ca797dc42345fe70045f817031f306587f7b0258b77259782abe9c599c5ad380c11bb8f6111f0a28c65e6a30a13c8b26a658877e897485e2248f9d50f76bef27f9cb61b9558e1139b2ed0ebc5ed957e5a0486aa0980129cfcf662bdd869a599546e060da1e33f873aaa27d0e01a25d78a929b7303a67b6e566b5829e505c429baf0e04148da1dd39a901bf6c95675e964a4eb976850d6353aea033271c38b4b5ca190064e8aeebf5de832957d2da8b2f097a26a103777a20846829f7f8537d69cd2ae580850fb371e0815fbfd64f2e3b29574b84d2ccfa05e007529f51d1f24757317c24f3bef3f7aa16049f9b9aac980481cf82381596c674cd8f79d404627f934c4800e100d9b822e0a30e6223d2c9213a6f0cf884c36ec7a0fb3511ad7794c2cb1e852a82b59a7e1e80aa81e5b91473981a1630905844832eb4a2d01a6369ea5fd5a71a8881a561fd5c4dad5512163cb4f56bee0156c4d47fa3ba01b5ba084c6bf027b7f19a7cf97433cef27efab79f2159999b4001551f06e957d0f156030a61eab7fed9068113d0d64253b74786d53be5fdd91bff2fb56aaacd393d606d8a8395a0185e912626d564d06eb3e0f93f6edf6c003dc9bec134de55755e459337dfcc515be361cc6a3b58d54a934bad836bcdd4f86b5d6a93e027b5444c54ceaf1c5a6d1d57fe5f9acde2a7c4dbbb2b90f1c89138c5845f965c97999157312318fc86aa0da22beba22fdb3fb109f821a6a7b3f528d94ea6d631779a8ba85018387a0bc53da295cb01003fc4e49ba142f81adc62069e27ceb4b4658230b92588536f1cdd4b3f6dfa8d56fa5d69656d9dd8d830490323ce65a438d287a10f74e6d22636299c110978c5c66142a1e9231eaa289bade1b84427ed115c2deb45ef34413d80656392784527937dc63e870f68c8a45b39c66dd40374954ac10369b471493869afc970b31a893c19de5e8da00bb2052d9a6b1e11c48d4efc428151b3a479bc6ec9688378ae294596ee435bd78f058d6361ac5434f33e67da862efc65196e8ebbb1e32b4dc924b22b0054f27d0c12576e8c99e3003a5854a86461e1b895ba0b57006ce65b2347fcae46c4a686f8d4650f59c4c3cafb2ed294f33f605195338b9d02c60d9993be7c9746181ac23c51c6abf3c393bcec978ef001903cd26c65a55470f315826427290e829e236d3b0e4f25ef108b1a6c38e2c33440a331bb83ea3b39a7824d6e5f2a6d3e87c918275ab8be95b9c21149d45e20462865e402e2c893cdb0f8969e0d2df8084eaea639eafec9ea514ee3d2593208b8a43b4e470e0a9716d7edd7bcc147b12ac44e025806d2bcd63a4359c484ce1072bc0fa99ab145f31c6e73e5020242b4b952b3f58410ffc34252dbd25bfb836d13b0e61730019c2b698a4ea53cc779f9dbb8d737572e3e690cc82caae315f320d36122e7762d2db5a0a9e7ca823cc176073b64f6f7fd1d813020f647159179ce24142804b5accd9505eb59da5ca98512fd46ffc1ca94dd1cd28dcf49a2525a3f93b4ad3c8b29deacbb90fc01e449ebfb1a960d2abdc8e1cac63dd0b81a546a062621bee2dad272c37e05dbf069d74e868c3fea0fb600ca34264cb80e9a17c3cca7b8751dfe105802ef1f3e253bc944eae316009b17d7198f206494d09c30022e34310880f69840577f4a1a2f2c810350b117711ba40385cb3d56b292c604f41661c125d84ef321a35cda215844e1bfd54b35cd132b626dcb719eb2cb224ec1aa70684c79e6543dbb9144ddbd10cce1f6b25b53cd42d288d1c2eaf16da0e345b5f4a371d4953afe63b11e42d4ff1fcc92de1377ee5102866c105a556130232d3fd7b356fd5b949ccde19931f36d02c45499a24691dfaa7e7798a67d2a2573c6827adf589987147f5226098b52ed7754d9b1e8556755b49aaea4594079de038bb850d6a1d9844bd51dd632235accdc92ea214c79a56130572dde142f31a2f89b3d02ce6dee2fee809fc3f88ec31fef4b8c00722a34dfd0216b0f8c685ac266bbef4fff79c229f156025558b007ef0c98354bdc1a249f735aa7ed3c3f3aec6ef8112a7c06755ecc3a12bc6dd544458443e3f9c12583c12b872b3459baac3c16107fbcaaddc26ebca9b649c86645d93cdb81c455fe8d5d73f26b5cb5c237c8834fdf1ae0a97643621af102e8df1793d574ce9260cbc75c12a5776c4c2b99da16f6748719f9c4c68984cd99b4ee250951207e3a7aec247be86c72053c9b6b8bc3e3a6de2c62faaa2eb9c1c8fbe58638b9f4effd134c064472c0d9b8c2c9fa398eabdae1cb6990f4d3d5c0da5ea15b3deb56b11f61511150c26068388f69082d18aac41cd338aa39e561a35cec048bdcbfaee1a6ac7e871036c29a8b51efd78a75b495549b74506ba53ba601e28d768ac5900fad99313c23843e76e294ce8443bc825e7e7cb04eb9ccbced3a821fd6d2d10cfae236465428c2d7bf7736b9b4667048a6c10d176ab3ed4856c129dc95cc70848ce00d6e7db3381a4330d391de2c8bc612dca5b3d28c1b125382b9804be14c32f02952d66a4085e5ec9c031ab6023ba3e11c87cf3bd9f6c6d5cac9dc48958eac422da20a97d81d724924531927aa714b822bc7df4745ca4cede2609a1e35f2413d8bea6dfc2223cdbb327130d6de629fc2b8f247d116b634724086e83e6b4175ccc4bb7eaf1725f33de02b80888cd9735ceaead8044e34a1244e25603f9041b456a16e98ed954362f32b26e3e093e20441be02c06a8dc2e324d652598650e8aa324cf0706aacaa82fedb532a981be4b52088534459205255404cca9584e20f0c717d159894757e30097cc7c1a4210df806931a106417068a54be69d413378e03b156546c8992524284b5ba662985d10a26692607c9c2c4f1ab95ee5da48e891263167ee76ab528acc483ab95863152bf5bad4c9591cad156ab4f715eb5400d69b512e401e4b46d22be8a28dfb512bf99a442ad95fc19a953b95ad1a79152786a75c55a068341ad34312669d1b4d27e237533214f3c6d3e916a15ef182936aad5b772287b51adc230d62014aa95be17e119a856b4f918ea7f6a458aae4c93aad5dd2f0c78e439d9514818a75a1db3cf8667aa95865b203b94cf9d3c9e37e48236c7e4130d98892bbeb3f92f1c6018f66dbf2362e4f3829afb670761ed56974c62fae4cd671554421307d2dd131b413798b2d7241db0d91118a45d04d855dee12f0ed8237b7229f76f9b429f83707bd46467a1e8bfe41393f17921b03b6f58a693637c7be1e44491662a21085b3cf2a448c0bf27ceaec80858786207c01241357d1da4acf221c676747462722549fe1aa41210aea4502cd734728095e808905b495fde004fcb1170bc92fe3647f73e1de6f25d41e1fd8c8308065849c69ca06864a86860257d28014653218060257d32023c293549e54280c9120404aca4ff7e00170e08f05a491f75005bc207f85a493f9e003b7f0f80b5927e96007f7a0f90b5927e1b014eea1e4096597d090196e01e602db3faf3012cae3dc0ee4afadb0160d06fa646ee9f716256d12251625654e7fcc4ac42884913b35a8ddd7d9534b0af8e7a56eb0933cfef33460c203b6407c02ab3caa2cf2d3418566615ac048862a6c5b756924207186a9816f7aea41e8402d4702694ad6116fe7f9574369026667555a697985554413c312b2a19ef57490d6e6a1a809d72528279f038a8be1d367230ef53ea67f0e0ebbe97d567ae898528e403251d781f5ca9fea6559dd581ed038e1b9aad8b7157e1060530ced82b81bd97d06cdfb49cc831a2b674ec179c6994d267f53202cc4661cb75d9cd4de880310d260e5a7f9c180c95c2da16862b41253b6543fca9a7c8ff7059dbaec0c896e1c2eab0b382a8c35adcce4d8b8b223fb1ca4e71d541e195dd9021ac0c2457e1408324450c0faa2647347f598c5cf65871e1782d0c68582716117cd9b3219cfed048ac192a312ad91215ea1dddb67150a1dacb0749d55c54f8a1881fbcd6bf17847a0f22e7b469539ff2a6dbbc04e7a1e0c0e63168441beffc11d63cf1d4058585ef023e187aee2d37f183cc0b26355c859c17599ae018c7773807ba93b14cca2499c8bc8c1e5f99e698c0fc268fc944deac967fb3addafba9b19597f57eb128f9da710f6a8d8d4480ee5c4957b3373d944293fdb16a55fcacb490d19b74dd4a29f9265b587881721210ea3a8281ac94be341ea948c6d28b2700ca36f38b8ea730ef7e24cd0c8925f0f70fd7a994c794ff1f95e445850b55e88330d2b2250bdd954f975934c550bc1adeacda19c73dbe8ab87aeef2616a9b45a583735088c5532c2bcb6af235e213c67a9ba5b7820001c1f0739b005d3044748067794e365ebf1924d36d8e57565306fae7c1869055a8dfd48d34e48b119a1fbe7547dac3bd256b2a4a7798e6ef90e30f0db2250062af8fe4fbb107b92bdfcb6055c28047918d81a892d54fc3d2912c996d57a484c79a4d88db05684a27be658d7a90c4fd767973c01d18f780837e2d4f0726b611b0b2852114a2a7c87eb7a5958f5491e559b5cfcafad7f4782cab6371dd378d7dd8b362f1abd875d3c58b846e9a977603a3ecaff2003d8f0400903467f26e9296a37df1aea8494a3fa5913c1dbc36a73e2c383c1d3751d0f6ea0a7e7b420b48d4ef1327591d45df669bbf7ae0e8dbcefefc2334cf300f5e1f2520bbd0a730f484f4d2907ff320a4f569a5de70503131f14d9a4554aa4b7afec590dd1b05477aaf64fea36d28d5962d31517c566b564be7e36e7201e4df195ba8add8598cad82a75aeff22ee7888829d6ec088fff38b55c58a2f0ab5c10b8b3525e3d4b1e26e9cb701cf166721788cb155c1531e1100a6a33a86ec76b9f10f2f4f27001857077ab10e8686022582b3cce7ccd48b1b4dbad6a219d1c5e9ec991a3c44a44dea58848d510bf10afd871cac3ad7668c2bac543f230d62b20cdd75c04266a2555c74d18bb321a93b2cf2c3dbbe869adf28bc5ba6923c6a4e2e2cdb3512826c2bb31f17e5e63eb1611172d59a34cddb1e2ee09ffac505ae9166afac41bcf6be664f08792e4757c6155c89248723c8fbf40314c6ae09bef63b2c46a76832ded8a639e16d0d4d03a11dfec22690805a13a5bbb37c7638cf934323ad7096f2419fac7c9ca7a905d4ea6c6f3ed38b22ace8a106a6c733ce58d1c4553f279411f0cf9972e35a48baec55d24cac87c5f1b77f7329216874ad4ed4c75058f204684482b42fff8cb38781d5bfb0c2327a80f4352b8c25ccf2cf8cad9322244e16ec4507e59cf67f459a987fc1642b9113e9901bd3e90994f1786746433b889a8db63b0d2d419625fb1cc42336e97bffbf72d466225e6347da96345d66b2f410fb3f8535a89ca61ae2ac819c2d58fd5a2120efbe4c4639e076c501eb7362d59462ded4405e3d6d56af3989eb23bb1bf816ad5b941f67c85c60871d6ad078d05d40ade0d575a6e17c779345a12338bfb9790cdde60141aa39edc125ed0dce46e008766ff2a2f58be49819c05d3c3fb22aa34d9ec60d0ab0b0631e005cb625583e5af174cefd8649b6b5c79eceaae94013c3ef0f6a593f5d57bf1c8e71a7d2314bd5b68fd95d8c8f016ca3cb75ba6ff0d0ee1dd8840fd3d8801daca7b268e0fe0f2cd58bc24f7293b6d83eab70445a452bda4041d6f6822f3a36073d05f63cbf16d5a3ee0e21f195f19cb0ca05916e1941953df97c222cde9634a2149b0d4a73adb4ad79cd1113505aa253ce7f30a9e42d37984cd0e54e286d3bb959f0a2ef63ec0610f9a216ea751504ea7e0e468abd93aa8c487977482ced5ddae16bd4ed3c3224f60ce034b18db53d030d54668af72f59586b638bd484537fdceb58728bab201f092b5c22e25975ef53960501228e2c51782925ae0248a0a5f95141ae288a7c004973ff100d450c285de9848cbd24a6cd898086c3175e498f01f0b56148f09250403726c96a38d14e611d22dc8435bee90685f4cccf59760913cb66d1054b43972082373242e42bdecc643bf76f03725c7e210b6e951c5484ac0790fae98a854549021ba6348aea59e67cb6f898c7828f8fad9bd3d6de2a9547b833c1f6f68e64a87e47c7a5f9d8b0926bd909abc27b59fe2f7fbd42c7a3b8aebcd0c7c907099a1bb4af46ccc5fdf3a9cc09930b6fab39ce549450b9ba7e84fb8ca6546bd1c7a72d6c8daf094522a38e349a7372f61e70577de8ad24b5ba4c79bb18230637d276f2fd53d4e2058b083c348a8f55df5ec078ec53c4e141fe9c7309612a137bb62b2e753313f5094981c860e0f10395e5311b460dae31b188f13f7abb39df76f748852f1a337e049fbc6f4d7e3e66d005f5208120931c07dce29e9a051c85d65825226881614aea76444b2e09b76a7ac4e8b9b61c472d62034e765d1c80d9289644d8b64c227bd474a8904d52471af8a3d2a1093440a0ac725f828b8868447999040a030c8ba7373e8383193804549c03eb0feb68dd8c7a3bfdd3fd1878b04774ded80c0c00e52515947f3acddc2a08a0e23c1a897c2e57d248fc86056b1a0a3d12d11d8c492d37f57ff31f3d8230ff441e0c0b475883db19117b7046178cbf6251c0b22dab56581454e98173a8481fbef68a2ede3afb8e0c1314dc1d038569c3cf50141a26b0e2e265b880af3b554fa91db643ccc86f70dc752347ddbb4d8fad141f0d8c0d8772c23a1bfd3b18e8f3ed8f10bcb7bc052d631d0648a09fa5821f17b8143df1a6791712c41160f6af14d40df679a81637a8c5d7472da4b4e2d61c724964ed0477521edf333150212795c341ee31e617cbbcccb8d5ad4213c9256ff8084fd547460c5f99cc8210d316b023cc19b630a734b017c09e80609464f0bdb442aea6e0b9eefb489548c5a582d1513695b08231b527e673f97c3f3eb2ca272e1610225e9b7612e8b5ee2e27705b7109cf14f6ad8cb7e88892b5c470532419048ab2a88ec33b7330381fb12318790b560ec720d59510f71a5a53a93e01f1754d7416d2a5fec336fde80aca50a05859f0f74da8470bda7e0bee88dd946844bea112d11da82cb83602c10c515e384709604e739cc8500b93b9e8f7c3c0faa0f3456ee86a8aa3fe3cc7cef5f80c0cb6846fa4fbdfb649eff15661ce4e2d9635c3221d7eab8b538f79b09ed0b5414eed1ae0da1598faf631cf98922733fbe86de4baa972dfcbb908f6bb14fadd2d7f2fdce28049200bb1bf7a8097409d1f77146b012564c33079cf9033fc60763764310fb9c5e80d9983b4c64baae31be209b58164413dcada85c0ddaa314f4150bd1c42ea99d5539c1c4f40c706c795a700c3d289e270422c79b1086fcc5df3a3856f04b85115d38d2e04eadffe95f273bec714e2c011c6eafd09247fef4bea67cb66e0f1c43c0b15cc0d76f97d92adaaea339e44e3d6b3f8b30022d4ac2cdcbdc54e272a50e853b83d5e427644eb901649a042e2f44b20d54107066351d800341213804af51aa801208e32914855229a72804c1711e0d2e61ed8436b15b4ab22de5f65fba91b4bbc94d986ee9f081874b267c7e5fb5a5756afcb632d029e8546022fcd0f83a26e65ab4de64a7360f380c1c0de20fbd117df093849f29b6e4f7bcd17dfc49f263eca2cd1bce3265522dcd607933ae3ea238797818b55a237834824dba15d0dd39dd7153baf3d1b3e62da70ece2f8a93d4e96eef8e8b82337e190d5d9c8f7d26295dfe2249b3588e1ed6d216d94cd0dd47ba2b6de96e1cbae37afcbeec4ed1a7dbec4595de19769b3d7c7a8774c0188c870e1d3d7cc4660c06448720030079c4e68f1e3d401d80c08080af2304127b1f3b7a04993a60c6e5d5b9dd2dd45de902f87a302aeef078783b58f8730da6d3834710f007000b0730001e3f40f077b0460b7ab07296a9ac7633a6b2bf3a567627a8733f146909d3f9d1ce74f2b5b0d9dd32babbee8ed1dd32f44c77cb74774c77c37437aabb5f5ea6d0e8aee49da94862fff2fc6474b771d12d4e9e1add6d5374774d775b13cdc37d5c6977c3e83ed9d832be5e68471df08db6eeb6263bdd3d4377dbaabbeb8b2ec41fe6a158da197695639af2a30f2bf537b2e3df173969b84bb0eeb6e96ee31a5f2f8fb16bef7dafd3c3afb7cc7fbd5a9a67ae3fbe488ed4339d37bbacd29ce7786dcc67e9d4dd3574d748dd4dd35d3bd1dd342bc6ee1b59af650a4e7282f87ae01bbd68f3ea8017eb805614a74eedce0ba36277bb7497bafbc499babb44002958b8c0050580a941050a150c7cf024680935188a11c10715664422291c2904a9328386f2c0c0c4163fa2039c800992a302c18e2a33687880c791b807070210211d31029411601a2045a6a94489e26a0ee6015374dbb6335384112577c98952f2cd717a4746c651322f302687294931b98c6f3845a07c2ba166a044c14182003b9cc3e04841da76384782003b3f987cc68738198fc1e99d9919878971a46d07468a0c4a8a8ccff88653048c6fa8cd8b8871199cde8189c199b9f1e204701571fe44ade42e335262dc0547ca8c23e13b30becde444e17cf32d474a1146700e931385938284efcc38070308ce67708a3082f3989c289c977e18e2bc34038383b4edc0380a0769db41790c8e142408b003e348db4e8ccbe0dcf8c1e4330e04e732ee822305c504cace4c4e11510cc5f8e645c0384e1131be790f9c0b4eefc0e0e02011c5b6f385eb25a7e8895ac99fa899dce4dc8d1f4c4125df600499dc4f50361717149ddc94d32e28dc660099369d505216a080ade425d3e60299deb6a2cd4dcee16c3026938948c961fc05657a8131712f2f309c6f30a89c22ce64329938cef48468330014d78b0f2677796254ca1cd19313777a823ae564ce005050ce9d8a4e394425df5038452f272ff9e652c8949c3bc178fb707ecac1b9d9e42e39462577f1138e131b57918bb72b26c7c913178c97709cd8b85c7232e782f10d8691cd85e25c303944262742e53879e27ac9e1dcc585e35c45ed1dc35572d456ba01aa7b67c3414232494142c20605ec94709088c209015c4898a42045e18400aecd9130e544e184002ece9b8a8b632283e2803c796244c939376273938b3f9182e43ba721183fb911288ff1ce798284ef9c729e18e1e2313948bec3394c8e11a81c24dfd98c70d9fc94c379bb112e5b95b161013644b9f902c5a94e6e0303b64d0817db16ba9294238ee00ac021a1539b73311c12623ce6e60b27578ccba0bed0c5784c4e4c0c872587c372a385cd63884c515c31be798c0b8e09c9940491498aabe49c9b904c51601481c9312561427a9942c965b62ebae862ebe2a68b2851a8a0a28b2953bab8e9627369d1420515446ebad8b64d054b74443578134e4c8181e2742382ae51eeee2e45c90afdd22fa617d32aca0a89151211ca944429d5a6244c4c2075442629b6dea294548dea128e290994140d40828b23b2bc6871712f39a2b8bab435d72e2eed27180540394cabb6a8c690230a0c220d8383c2e1b44099a234a02b39920d0e4b49d59eb2c2844a59c101d9bc9d2855c5d539375ee84ebe715abc683955114247b449b9094257641b22e2380f924207c565bae1e3e22f4e6c378a70ae17df9cf84aa99294520ac9758a92a523eaa4cd65db729e389d4c505ccea54aa9552945b472955c2bd429ca4d968e0865c5490a0c74513a2d3a84d075900ca3630adde67af1514a959c8bde5c5a4a3f5c72885a0b14aaeb6c6cdc75f8682e4ea753149729474b7321840ea565089d1657898b192d5c6871e5cc68a9428bab8483abb4a1b4cca009974c8cd28c53957c0be98242a15059665110b76df36deb98d83627b6263ad031d135f1f282738a42d45b8e7acb4ce4b09480b8c0f8064513ae2d36284a279fa1524a9576d09ddca506e9a5344325277440f795522517a2942a6d2eae44e5880312850372f2d2290a1514165412d1cc0c9528418204091224488d248e83d142c94ba51b2a74250ecb1525202f59945425d722cb165ab878f1224a2fe12a212d51da3121e1e0da1a07242e07290b0724498babe43741e8362ff58c125c154a5b89e360385329e70859b2dc4081e3361f1c81c50747f4c007475001a493e10bb88201493180f8cd0eba195ee38e330367a689192a34b849896e2d112343a6460ca7e1260af40e319cdb5054361714150e08aa0aa7e2505c0d1c193132dce4362e23c365626464c8c839b5aae433b2a0aa7040382dadea969191c32575aa94a5779462702e19385c5277ca1443864c8d19a6d229c7e6031d0c279a69829b99320345a924030d8d93175769c6899929a514374385060e11a704171a7088562e6eca35d1f84c13251ae77cc6899929353433546c9b8dcd56ba1142131f25a7d2415895525c1057c955723591b9f94127d340e84a7e3ad580b273c36b7ce886d7d4f88d9c52ce500d7ec36fe43cb9e135e440d98911c4c5d5f80d270ae22272259628fd80e1363887aa12a4f42386732ea487265036e0d0f806e3c589669a082204460e0e37706e94fcc66bf01a9c1ba59c1b3fd4f80d5f5283dff80dafa901e7064e0d0eaa03a514876aa294e2504c348b3351096252820372c339140ac5255141d5e050e92188063a0ed5440dcf28d70c9ca33a40830de71cc50467e3338ed240ef60e3dc4c13311e84064e0d1b35bce434d000a3060d354a35336c6cd030d3c44c13346c6cd030438d19336ad8d8a081069b276a7c861aa7513323088d49868c1c27db174432706e36d0999ca673184e8303c5558281e2808bd31203e35c16130e1cd79d6c6040e686085dc965ba534e11510cb9b80c5ec4c963382aa7081797c1512eb3ddf8e1e4311c8893c7c801c2c5517873c538e785290ab7a5591c91f3a0e3b6e4984c318e42c5981cc6e42893f7c0714938a59713924ce3406493749ac198999999999999114d45332e830c3ee325199443d9e1bc3920308ef2211847c170a59ca11a8771989c2730507664500e5345e9c7e944c34f369cc64d584c3549382fbe790f2513161a3438262ca55416a6241a3082a4dcf4a0231224a5c669f01aaff1225039373847b98ddb7829a708989c1b5cce8d1f6c1ce54b6c50bea4a6c66b72aa205243a5943a79a9868a669dba2494141c10183f75326460a9a1a2c4838ea84b72956aa8e080c0c040e254279f314326a76b9260207139449c16a28ec60c381c0c2233b84c0ce7445d928cbfbcd4e0a0b84a3568b80c0def819b0187064c0d0c4e4d0e87855395905c307c860c2213961957378303c363e06c527236a42d4a2945840e95e43293d4753636251848441b0c24170c120c2418a49a18278241828144844a4225698182794125a1925e3822744435495d854a475493942404ee492ea54e47262c594a3f4a2f38642975326551fac17992ebb4856b564a9d5ec452eaf4522a954a3754e85e9c7bd9904aa9d316a5943a71a746fd50da41e5a06e96d06d2520286f189c99920af5827323848e0806e925c70585eaba524d92094be9c78b277157b8883a534c151d110c120c52e947124cc04c29fdb8513ac12011c174000669862be1dc044186a8b3eca043d9c092e43a113d918253a14e5e93a445894694d28f1b2514514d92ebe42f2527e272505b14ee74229a71895b6c4a314694a0702f375e70c1c201d976fa250ba7dafc458b6bcbd22e3336924e377eb0e1337cc8c68c9c214ee6b4256d7e4384cec4040c93121ae8367ff19817295164948b468d6fce6591512e1aba35e31c127a871abe350744c696a384ab0667062fe1b8b868c031426d6e6363b2e1b628a54edca97b4bab4ece995c3538dc169da281638472cd90c365e9d4c965e048e1b4f48e9333c088283b325c869b0187cb42038e11ca6593c369d1a993cb986c70382d9a753a39e784d639cd701a384f20a17666784d0e97e5c42535cb756384ee0443061964f0120e1187e566035dc94f1d0c37c580812ac12002c329c1c58812941826981cc898fc460859e8665cdecde1cc70eed29dcbe42ab96e6ad0b58b977eb8985c870fa219213139352e1797e92587339db65045072f53925ea8c821e29236e71cca8ecb9673e30793733e64722ee74914a61cd4d08c9bdc94f3c4e4333736e8aed0716e9a223345e947bb0c14ae928c14a617177fc11284d34946464606e766039d8b13bd547932e5e43138505cdbcba94f2f59e0bc5c514abd6039bd54e19270701002e71ce72693e948e987c94d28940b8753729d70da7583838e68e626075ab8e478079552dc02b498895995bc942afd184311ae1b24742eee330e65e7e59473e307199ff121199fc97912c5c99fe40ce53c91c981b263c2d2b938e735a5944b4ee73720e860728c702eeee2f2e28293e374429d4e279759a9861908ba6be29ce370724431f550fae1d26466e448e9e5a4a3072fb970701fedada53443812b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb9c1e2068b1b2c6eb0b8c1e2068b1b2c6eb0b8c1e2068b1b2c8e707385152b56ac58b162c58a152b56ac58b162c58a152b56ac58b162c58a152b56ac5829c97407dd10a16b6f1e6a24b938992a64a8c850d12cce6f88d0d9b8d14129c60c2a382031a890498a219314432629864c528c18fe22f3f2f2f2528a913423890a0e08979494258b16a21949584e319238153723892846928b93499a91342329694612a7e272886624b938ef1a495b89c31283ae944394616e3cb0422ac116979b1874442287e5a60339a2705b38184ee3e28292e19b0c2f2f3164a0b8c0e1b6f8c9a55d2ea6929f648081d3a1545b3614ca73a06670b69c19207439a2a8c68072140704c66de0c4c00092b9f141f7e2a6ada41a831125282e9c4b0e641a48d70512175818508593c941c5c8109313e328183ec4b86662fc0546015e4c4a2cc1449f4e2e3088ccc89c4e2ea7189d0c9a538cee743a9d6464e0d0c4f02e46c965885921f112835482412406c6f4836e85544a41e1c28a18d38c69850417e3a7182019574c4e0c8e8b8be3a2f423c60b33ce6d51fa3133136306870aaecd61b4e0dadac509aecd5f38174785ac5c7fac4df2f51a0206d8bc5fc5d2a8d2577e1cfea5f8c3577e1c560b7bd5c019d2b04ef0953195e54a5f6f345fbc7f1f885aa6e2ccd72229027fc653ed63d6b5e4bcb48e072de4bc34b779f2e8de7ee0210abe5eede6fa3ae41c75fe6f86e9e06a6946ddfda952e4bcb45ab65a405ff8347baf857da618f64cc4abe4c13aa928e2d28a25595e10c7e8d1dd0e170c08a9811027bce51b1072d4dd13c0e9070889d13895c6789ad6ed6044eff076b0c46a2f35aa3fc3d3c8acd502e9fd70be1191ce2248c297d53954bf680e3dbe1ff6d4c2a7b5705625b9be906b004b188010fd0abfacbdc06b637f3f16d6c741800c89e2e4a985f3938ce0d12bac8f811ca1035265e5afcfb6a6bad34105edad6b635eadce97cd8c1de320823aa6abf0a7e779ffe3d1a3fcdcb3d9bf888a347f9a7b31ebe38fd7c62af5a739ae0ffef58ced288a4f733c7d754beb7f671eed8dd118cdb6867ffd8de64c145dee39161d9796666bd191d2c3bf1f525c2d8884a709febeda9fafd26c2daaa563eaa1c72c129e26ee367b8f7b2a519c9ea7e31db84c79f824f9b04bf18f34bb77e9245df57d1efe2ae531eb3f74e0e13cbe688a30ff59ed7d700f93f366f7a73f1bc29fa738ceeab376df8848f7fc5b95fc2deb0b857f3f8bb4c88bb05995bc08a33ed9fe549af1f7d4323912b97606d6f949b2ad75f2e070ee544b33697f421bab948575741461048f583a72e898d101828e0eba4b32e81cc1d7cb475f299d31b7f98848778f2296514cb35822c1f7e90be1fcb23b876a319aed0f6e27ddad43771e108d133e3845f26fed0e858fadc813f684aef0b35d12be8f87316c52a3397b987fb6469ec572c63efc4ac7fbf943c7a4f8b31fe9256bb094c51efeb5197b77c6dc62c7eec92ab532ebf8b35de21e8e4c3d467d35c37326ce32832ef7b0cf9fe139cbf68722f96c97d4c43b89583b848f04c9aabd4c382ed810b4b2c10991e480841c50900313eda9527ef458957277daff18a996e2199e46c6cf3eb59b2b91eede418e1ee47822c712f87a3a16b75ad7be728e592bdb0ae6f001da23932ea932faf78dac5097a33b4856a908a3423356dda9aaf0707dd2563a6fcf0a72e8ee19bca0bb71ba7b04dd1da5bb9417f87af975f02b7c1bbe911d6162aab5d8fdeb8b9e676d8af78d80bcba52479a478ff0ab8c0aa5bcdf88e6f9835d95ce194f6d8a9f045f4f07bc983582473a2378a4e3031604880e1f03d009f23ce6fb781d42203c62417ae8f0c1baff1ac1a36a297ee18875388e747b2bacb4c857def2fbb8bc4f9642d81526094357c8e30a5f001ee86e01dc04804a7777901fdf4f1168c59def9be169e4f3d5f7799d2e4ff5630748c95a4e61eadfe7d36755566b53fc90f523cd4147138927ca2ac5fe342b8ad363762c477a34c798f5547dd153a5bc1c9c478fcf8b66feaecde02c22abb4fe8ce62b5cce86dcc3f4e8597fc94abf276b431f5867c6959622e93c7ab8acd2300c3f0ca7d78e2cf978ee78a18fabf645fea91eac539c3ba9987d2228fe88a0d8c81fdb19cdc7cf549cd5d24cc3707a9d7e6d0cd31a88274c55fba294d77e96e73886e2cf3cd7d28e329b7d7527163f743c67e444e29e3fcef627db9f1761b32a11c9b2878ef783ec4f5895d48eec0d8a892f647f5eafd7ab468aa11d5ff87a3a00a80000aa177e069fc47fa9fb9316c45ea95f9bc137f2e931ebb32cab2f0a0d816ff47a15cda7b55ae19318fc253b45f3993c58edcf7dd8f8e32b3ffecfd6e8b1154171624bda4bbedec85e929c98863648d11da4bb277063047cbd114f1a3863ac6abd7ed1cce25ca2530bc3597b7a642f894b3bd6aaadf3258ab4e873fd31834ff4377cb096b6d6f9aa1dd94b7637b79960daa5698ad084a6294296a629c2154d530424d4f044142df8aae1eb6e2cd2993f7cfdc7ba1a8e74db58adc147773f586d7de55a5a109c35d88416fcf0c696eec6b52f7a554b317efcfaa4be5f742ded158bd91b3aa896e6d7e70945e3ee9ed1dd0d251ae7faf7679576378eba2b8dddf8fa55134972763782669ee1cc3f7637821041c51bdeddafbfd175b59d0d2f1a3fcdb4e4d3d970a2b391447787af6c45dcd920a2bb6f7467e3e5ad901ad94bfacc33f45c92957a3877f0f5583a5807cf3b49911ce92bdb701689967c812f8a16ecee1bbaa3c18a760f7f86a7883dbfd46c8eba3bdf37aa1624c92f86699e18bf0d3d87a0cb2a7d983f59cb5eabd3f125dd5e708ebec37734471c5c88ab8ee688838e9394481f741d77f2e1eb6159a5b3fcba4fd2fc63dba0bb0fd09dcd4c77e3dbc3fbe1e960fdb5e02bacf376b71041749b82d8907457a336bede2cd33b7530695529d2da9f566b87d1fdf002fdabd51ac1a3f0430b56223da15025428e60935c5f084978278d5452249c3be1dc11e92c82f1836029d4ddb3ee686c81818189093f673abe07e13f1b82818189c9f58d887818094f934a5d56e9686fccc3774c3d08094f93fc7f63229d46d3f3d1d7e9f845586943b75874b9f77de1b5e05fbf6ff48ebfcf2735f2f0bd268ab3ac73acfd2cbb48732d9d9c636d66ecf865610973f7a3397af8e13f78f4201d67ad8558b437570b7a09e2ea72afbe1195f9f44a737dec0f734b276d3aa6fe97fa97373ba62e5a0bab328abd96e9b5f492ac998cce7c7a581f7f7d3c41afd443c7d477f86a3d4faf54f630c7e21cafad7e6dec07f7f0f899ba0e3d74d0e1c7fd3cffcadc56a7d92b73fc6389f1f467e2de07f4f95704f44d7f98675c8efeb796c9117f9e20f5fab3ec2b71964e1e3f48c34addd2b28f7bb9b49ef11433be34e62fab74b4e0c3c26bbd526755ab13facc3b83fc3ef930af89d57e9eb2bf32d9f4710f835e292ef3cc421ed617b24323d8249c3b471f561fa070ee643ad223f78d80badbeb8e26d5ed2b52a4b348973ae0a39b63c279347473acce8aeef616129e26ac20243c4d5c5629c60fda1bd4dd01e82e11b1d1bd85217c27be43f81997448ee70eb54c8eef0febee9b6e0e08fda3bb0ed5edc92a25497b43af89b9be48b17b5ea9fb1361bd55801f9f9f242e26dd3d761723020d030313e3e5174518189818950e0be7fa468f411bb22a9da38ea59e87411beae8b43099f32c35040ec2479b71c903030313d3c5f0d1dd1e4871a5371fbdd7298a13f487799de08bb03903f324310d739df44e23ff6a1d573a73b53ca23879bc8f66ebe77f6dec61feedf01c1c7ffe77922c717e98ebfcd1319d0db957044e98e3214c67d92bf5fcd8a7ff7ddafd59fe1913f78a402bc262d65d8e671015a751f5c92f846b7522b1766826a346ac1d0a3f2c45b0fad4c2f95774bd085625a10814fe8360891dd7264d9c2e8a94e6efb4af3e5d56e90c97a45b8c63d6efc3c6b28675fa2afcb09616e6987e7d99df277d622afacff26682f0f39d19fbd3bcce5976ff6b479f654a73b2f4b0be671c7582fe3497555acb4bfafd1c9bdb94eefeba43f13416b6982dcd8553778bddcdb03aac5f044e58a533708eaccf33631dfc4634d3915e327c5bc127f1eb28cb867c6468ba6b300f1f7f321aab96e7737f5c4ef061ee3fcb1eb39eef241d530f62912378f4e5974e5eb814cbb1046388d0dd367417b3822e86ec62e8f7b991bf6c5e9bb1e7faf796a06323ff3eaf74ce405605724ff59e23cf6474cce13390ce6829c7e2acf773a58eff4e11fcd07d025464a1890d3c015f4fa7d5c2d5525c3f1f7dabf51a3fe31aee6050d0edaddab57986758e1ece9dfb46f6f52035baffaf113c0aeb93b8c4a4bde158e2bfa16867f8ef2cd726f8e12b83f466fcf725ceb2d2d7d11c5fe4081ebd3ecf902c8f869850fcf50b003e295404fe8c474747871ee0f40102d1d9c163ea00d203f411f6e8e123888e07c2fa3c6fc6b012ebe05cda22f067a04ea6b2568ba4337ced2c97f395af25c912b37e9c37d66afd48732def4b17daaf8d5d191ddd563fa2034fc02f82b57ce5c7dd6def13e135987f488d68e8367b26c7cf797677f72904ddfdd3dd8bd88daf773f539d07a988ff5ad0003e4644718219dbf195e7ebd2d249019eace5972582e2d7cb26c63fbe8ee698eb5392827fef87f5f1b5456a775290c6be3eacbb89bc8ee678df88ca6e77f7f4081e75370ffeb0bb77321da9f8ea6e17fe8f75770f04c85f04d2dcdd43707e8c679ec9e8d35ef77534c7eee621a4afdafdd249770be91d5ab82aa996e2fb4b1e462f8861a51039d229f21cd1b03e49baf20bdd17c33a8dbc102e45f29642612d639fa45a9a4bf08f88d4ca1d59a5a1688d7c9e34d3ea23ab73061e11b9f65e2249c2fa20fe9e4a65f402ddf9228fac526c459ef033f920e8c25f3af924f54920f16b9d331edaff90e33592c1793f86ebbc438fab25f127a9dd2f7f083f5f4b7e3c7af80e41ca2068d08180090f6f87c783f5e204f10cfaa1030f234354292123d8640850abd56a8de0d1b5f71219c12641cad0e703f4033a3c90e401a41e42085fadb258e29a9831f51cbe077878a0460770d001b17b08215621ad962ca7cdab3b6d073c0e8c8103528034cfd1e672d69f0d71c0080e040d21c42a0821bc3a853850da00141b68d2dea7f255e8f319cd5919fac376f84471f27c1ba8a1812d3d84102b1768e0eba9811a98d802131d58e13963e24806ba30820c0865a03100457b5606b397ac6f54ef1b59992371af26c228c696f49f655cdafbb23a43552eadcd1ecebf9ef2d21bffd6445c5a8a69f58711c1c0033a0c34e99e4e9260e006064cdd3d84102b3c69ae0b30e10253f41042e472d22e90800bfc2cb1a58710c27b7c5673a47d1dadc59316ba96c8c1122358e248af42ea4108e189e2046d7d7dd1ccdfcce10ceb5c8286ce0255ba8710621584102e0b4cc002b8bb957467011b2a60c5104278487d1584105e2ead87d7fa2af44933f5556dd6c2f7e93330cf31f40a90dd8d597f2b6024d7c715e8308e8e0254bcf0f35ff21bea2870d4f4fb7c880241dddeb5310a787b147851428aee8e59af4d9adbbac293a6c4874b3ccb943aa63bba53c2bbbd5a9da35b3bd44d204b7b0f4e008a090c757f2c56c2c049628f592f02a7e8139373763fc83d95acd25cdaeb36749bbdf768caeddf9f0d75b74d7713587577507712c8c2535df2887a32ef53feb3a1214386a852438688e2e469b586e09a90e3e94342848c6093e7d1a3cc74a447866021477667889023bb93f1874c92a8411260123f10d802010f40c00210e8a183c04c777bd673fc68718e176b628827ad9623db9ac33115cb18c62eefc339da0a7afe59c6d452d8677fbc9a284e9aef24af7d911c6578fc6698ba579717fe4a9cfe009cee06eace01561c80030790ed3dad26e63bebbc2fab56745b9374f70fdd215d00a9eceea2ee9062904a0d80a201430de8babdc77306de9244c2d364c5fa6cc7bf2caf3691780dcc45985ecff3615e9b238df97cb54a96bef2907000123f90481dd1832352d0ddb0ee8e3822a50bdd0d7627c502527ca4d4d0dd4dba63800eba7ba83b06901d037c58c016cf6b936cb1bcffd824ebb33c1e3d62d65ddefa3e6779a91d4d6cf64fa5f2bc94af523c9a7cfe301745cac43d9c8fbef565fc6158a7c72c39413cbde2ff55f8b52cf17fccaf8d7de367fafa8f7d31fbe10f53ff2f12de49bb16fb0218d02d00c90286747792ee14b0457bf8fb90f034f99ce5618a84a789c7ec4c56da3bcb3e41904e51b4f98888028c1490f266209dd197d579a7ecafe3d26b36fbf422ec8aa282281880324577b3ba8b42bb7b4977516674b717565f21e169d2fa3e6779d9da2448bcf57dcef25433cf592a36b1d0105590d25741ca949087d5e6984bfb23cda2b5b017a637cf232da3c596d147b48cae62092da3655a46f368197d04080d1c8eb36d465459552107dd1591d4b53a63311afa0cff6beddaf1c769450be2d26b30ff6beb9643f796a366cc79868f29f84cba3755f796da0240831e9e5069b22cb25644d26d84d63d4935bedeebe9cd09e0e2e9cde3fc9bb13fbdb97bc3b109600b80c9012624d3024c504c46984a5997001b9dee36d25d00223480aff779caa8d1acaa1411473c979688547713f152fba29664b3afbc35da1bab51d1ddb45a086a11f0969dd17c85af97c919ce570d3cc2e2884a9e33daab4ef088088d0a2f0f874fcbdddec2a288319e22cffda07b89140111194a52cb4646f47ef8c25314e70bcfd70ccc1306623aea80988e47dd953d5867067eae657a27a9e3795e7f3c5f247d87f0efcb64f4e637a2b87eec439f65aa2b53ddde42fd404a151828d0a091c680d4dd4d33c593190c0f2b8200b1c1f2c50d9e69e3ebe197acd2abf3a5930f5fe01b75a99666bb9400878b8e0b134f56eda5f98f56c83d0c2bf10cacf3eeb82841c91204adc75ee1e3d2064e86890baad40b539cee0da77bf32e5e8072693f53b7d857199706e8de00d0bdd9b0dd746f35740145778574f787b6fea5fd0f086ea562a5feb0eaa1ad2e83cec9146f5e1bfb5aadf02b0de843fbf309e16a29acf0d9d2dd220c46eb86640322a75af02fe9a19de51fbd06db3250e204d0bd5de9ee21ba236b3a0b58580290eecec21ed13a03db8d2e6458509510131f3b0f423ca4a3b7f014613397634d0dcad6deaed6cc8c58c629ba7b06e6397ac651371bdd1b0ddd9b4df756a37b9ba17ba3d1bdd56c32ba379aeeadebde62746f32746f30bab799ee4d6683e9de50dddb4bf7e6d2bd9d36ae7b2b756f5b7fd1dd63e86e3174b717dd1d86ee0643777fc10bdddd85ee3675218641c4d2dfe734039df844f8b8d54a42ca37f30c5faffcf8eb360280ee8aa8b4f7b794556a79788a96e8199edd423a9c3f73b207d01535be1eae4af21caf2d42fba389c4c39e692d3dd52a958ad91cdc8738419fd73af6faa41dfac1e2b43f31a05c02e1a7d7669ffb950694ed4fa596fc910ed1ec91a38924fc6bf38495988a349742374ff2935425a150c6f648c6654ff8341b5622310fc46ebe073e4713493d72349178d5d2f0bd267ab63fee79e47f38165d4bcb5f75783a3c1e462f14fe387fdc0bebea71f853087bb5ee628bc810d08f7b35b15afc7d3e1d3f2e71edce0f2996552b4eff3ec72b1c8bd90fe7cdf8470be672c7bdef2bed018a701f3244c8ccb3c75737c8574384b45a31f185848c7426444e24ce83ffb559c8dd13e0ad96fb8b941c2d68ebf77d44fc06f7aacd5824c779f4feb35c624c1d675a4b1767b619d7320d69e984e6fa14a4b15889abcf1b51d145fefbf06219fe0c14922d2132bf071781f6c8ccb3e7d60f7d669e3dafee758517145e56ac56defafc17ac36dd9dbaa1c6eceee5a36b5ff4122768c56e09b40310f084ce6b048f5aad6ac7d182affbf4de0943400d773cc493ee577e6c44c5f922ff8b445146f18ed70bcf17d8322104d0e5080b9fde8c613a412c0173da6862ecf4c065e90ea95d725f14278f4552cb54a45949cf0836e119c126414744e62d5df3962e215710b6b1ea2384a5bbaf1ca1bbb1e8ee2b806084eeb652842add4d842174d72ebe59a746ba78c407ebe4a9f6a7565d07b0e9c6c100ddbd1d40064679b05a808205aad0dddb1411982068c60cac00d2dd1b012a100490120ef04015ddbd41c00a0050dd9310147477e90811024401023820e085eee6684ca00a1632c0441556badb650317d8b25dd11a430fddbd69d105059e7891012800e96e1307be170dcc8040d484eedeae80f1d881101170b2846e5c7b1f8460cc3c4377eed42449b6e2fcdb0d44c7640adabc3c76783a5895662f6c86e78c8912d967781a316d32587413e1a43d904577c7ba5bd28489a93dd0edcf922aa1053dd7f7960ddddd80ee66d2dd4f04c00f2df812024c07a1bb4d40e816c5f24714278f0e0d8c18c8d8ce7aa340b5747be243774349b4cb16c057b58cb991fda985f367d3adcccbde6eccda4bba7b6d8a7fb726422ee8849ad03d679e3d9d900fdd5de9944dc745778e33b03ecc6b79bdb435df61c887f8d11c439f57922a49729004a9bb55a9e9d8c8552977cf3fcf9166fc6e731257921949ba083f04e9c6e2a4b97ee9e4b1d77f5a7e980f092dbd1f349623ad1489900b564a84ee7e7517a44477ebe82e280b0d561b0e91e3cc38ba0bfafa06f50479bbafbcf5aa95b0560b2be92eada0bb11d01d900ea02b0065d101c90048054014f0167e2a8a936645f163bef216be31f7d2d62f9b24397fd6fad102e3eb7d68ab0ecf070f4f070b16b29ede8caf87040ced79d6bee8958fbeb65a488a80448af696e7e9aa55ed8b52cd6da0bbbf3b2441bafb024b74ab523c96ec58a263c9081ed119f45fa45aea614cd20c4e72a4fe5424c7f934cf25cc57df57ad87e458c2bc965fe62b2be4de47d26cb1381d3f154972fa7dfa335cfad3fcc14a71b63ffe7d9fefa0cac177f01c9e83ffc75e34e53c3849f32bbfb8838aa439058a137cf1e09e5fbcb688ebe8f85f5b6574957179bfef73cf7f96a9d760be529134bbad290f9f088a5935f14e918eb5bcac5ced8d7d3f9fcfece31e2e417182532c657feb574bd22cced9cc30eb36fbf71f7b7d46dfe797626b73489a2f35caf1cf25395af01327d097a9588efe1f7397fb00c0c6aacf0fed69ff63848702d0a0004bb4633164a85b9c3853b1c47f49ebe41c5f31cf88d6c4cf93863f8ef4fb1cd7e93f5ad0e622ee65f0efb520ce437c471349ab158457fca23fec431afea519cf23eeb9ab7c55cbb496e368c154f84734e62b8a695fc4da2125d9fee0d0274f0a5a8c5df627fc24d9fe74d1dd39baeb9942ed7d087b42b0ce12631f71663b8479f45012b3f606656c8dfc486fd0cb6650b6a25058ed0e4f488ed7c8b5e18bb089690fed7fc46969123c8fccf034125a1ea10f2d4f7ea190f6e09e0fe9c5e11351bb6f64414c7b669e3de17c23f783f0bf582629ba73bc9f271372bc46669e3dd5d22598878ae47f917cf43faefb8fe72ca8d26c4ff84a92643c8ff02809690fcdfe7c9e59485669aed3e8c54fd283c3f9464027489c8c3d19cf23a1cf0836f9d814aa7f048ba28b8950aea5e5897d9217497a87e695914abafbd45d0f2ae86e55773d207183e7e98ec7c778ce9b8f88fc2df3ac322a84ff86a1ab24127e55f2b2f78978555bc7be9302fa9ce591a5e792f46b551f0f17e2a90f7bd73a0064d000a06de8820d36a0b1e1c8866b430ddd1d035ae5c039f0d10c0a4a017939fc46a6862b6af0410db8061d35bcdcc0e2c6076ec4686ef8d0d8f0c2091b1cb0c143c316342c4143830f5fa0b1f981cd91cd0d3435aa34eec1527d3b82be948b7446abd5c9232805f4b9efc4807a38ebf395b752cec3593c825e3647fa97dc11f47d8c95aad4773e1e419e83eff01c7ce7969f0fe7810757a586f0e8510a69b562f6f585f36fabf5b239a991f3b8f7790e5e98c37fac264eb0c4d5d20b9bb1796dfd988f17d639c3b4d298db5c83d5c831c3173433d080668618ccf03433cca0a165c9e71ffdd8f497dd390361a5907bd562ea93e6d1a0c18486860f355da0a909024d8d12ddbdd3e3397c2eab34e8fb907c1ee439f837630032b2d0c888a2bb659a46860864fc74f7a96964f8d0c8b8c10a342da001010d0d066868461a9bae0add1234dd0368ba9d18588881849aa689b1039a18962606101a19a44023030fbe5aa77d0d45bb6306cef76b634648f01784f3a70a72577da63705f4f9ea5321d9e971d61744fbeadf8f2a7c168b8559a168fd43f2e3397810921b6ef0c05ac3f9656219fb3bc1af565dde101ffe82f09fe55c5a07a9cc8ab259e768c4fafc67437e834771fe7aae12b27c856288fd7fa4e183b4faef78a57dfd9ce591748603d7660debe3af4d1994a0984686264d9d46061ddd5e28838d4703438b07c38aa698d2c060a2bb457068884dd3c00062c88f1649ab3544b37506023309a099b98146e68a0868642a4023b343230323860a9a981178de971fbf66feaaf6f32f9ab9d5fa3c6653be63547daa1db02fbf5005fa52eef37d5f0de673cef09c91d5d23ca783b44ed27dee93e11759a34a6595ca2a8d09a289f15206a3a56960a4e876d1c090210d8ce3681a9496f6b0eaaf1d535eab13c54437100d2a287fcd572e1a54d79ef86077fbd0342f54744fdafdb0962e9a97284dfb18cd4b93f6ae751e2fa86e98671c7507a771a16287d246c154a443342e41de8cc6c506e6299d4c1268c810212607d0987a684c291ad30b0d4785ee66d2345c0568b849c3cd74125f793256b5bea2292580a6a4034de98566eb01cd7644b3e1f0d5fe783c40a4803c9282ace93e5f2ce10b157c1181ee0b295f00f9c2c462a9c4f00031b8bcf8c215bc188217485ee8e0850d2f640843953070200c621870008311c020050c3f80810730b87c61055f08e20b34b60c610b145b685b6ef08210bcc0022fc0bc00c30bdd85157421d68556175e74f1042ec52067a9bebf36e3cf6334e57835441042eead9d1e67798e1c9ce68f51d171a675357ec62d96c7f23eef6801e9f838cb5309c9ac9802fa523e03ef7cecb53b2b157a917504041029a02f6605e0e2acc11cf4fc139a650bf3d50ae3495ecbaa5689b3bc4f258a93c77370203c07175a8914d36a81dcfb767c5e135f9c46b474e2cdbbfabec7655853fefd6885bedcfab29dd15c9572dc12c5077ddcc31f2e45d257f4f396f7bdbe1dcef2cf6336463d633a7d8890fa339a10f097cc6b6dfebfb1d1de98107e71c1052e9a206b19bf382b2de271d1c4662e7070010bb6a2e7d2ae7209e30213cd85a3e742eab790e4a9301dfddad816a6747bdd16a2587bb7d083a70a539326b4854e2787eeb480c5b53065470bb3c62e33722d04e9a6332d5ba61629b440c0bab539a47dfd529c46add6d0ff8dbd685fb380832ce42cec6c81050d6081070b37ae60852b28e10a0fb8428f2d94b0c5115bf4f40dee5ec697621cf77139ffbaeacb9b53fe4694fc2f72b7d96bf78dde558fc5194be13973519caff9a2b52cec79607e5fbd6cdeafd55983917fc9d5cffbb095eafb927e5efffe17d5895f2fc2a67bf5b7e8aca0457b4340404978bc07614aacb084155c560052052ddacb25cc595ef8344661e02d2d3e7a3183f38808158e40051750c1082ae0c852258b07b20865e92960610a495358620a760a35a460450a2590024c0a3851d8a2db1b777adc56b7b8522067b9e3e9b549f3ef0b6b29ce8ccb9e24df8bf6f5556dab45fb9f0ae4d86667b97bdfab4ef0f539cbbd95c42bfda8c6ecf47196f7427e9fb42b718234d35bcaeeec719677ed0ac7fdbc28241105044401480b2fbc1bc431cf3ccf5b23cd0118c0008a3cdb3a87f8be207e9c425a44408b1f2d60a040032818412189b5f7734c555fcaffae9e66c56b9de6e3d54452f57d292f31a6dee7619dffb7c837bd24b85a3cff82988eff37569f087b63afff58486ba238c3214f20bdfc582cef136c54f8b14e0a0b39c18abed40964f8f9c50ff187ee851f3ac126294bbb92a4486ad29d645304d2a2266069c294226ef390ee9af035a107af09364cc072951c49a2e4081398604290f7e1a389e4638277b635c912b27c18c9d144f2fd2cc18af696d04477376d094dba9b2e41c7126e1653b288d2dd338ba06e2f0bf169cc6b5324310d9550a53d8ca9387ef6518212ddedd9ac84991252fd4a8091042ada0b1fe6d78a4f1bffc3247cf4e6af799893a0a35b86842dddedc9c292c8436b656e6b2d631c48a0d29e2ae5a1572468c0e637a20d19e2e3ab212131a0f1b38f10f0978494e7c5f20ea989e21c224e6cc921437c84601131161ddd5eb51e7eb64657a2f0832b2ab842b637946dbdefe1f04e0babf68a91ee6e91c8159bf17dfcef39c2963e8214dd4710bb08a43e1cc13b820b1653747b5eccaea8af7cf5d54471be3e7f6279736961d37f0916140beff6feed57af268a2e4be4f6475be968abeb8a2c5c31c5cb8ff1d74c9978d888e6150cd39e2b1a70858ef6fed25ca963ec5466842c2ef762e2e38795424658c2abcdaf85a1cb083eac70e1857f2979f44ebf0773fdf1f54654f63d58430febfc4bf35f5f4dc72e2b505869d2edd1ac28fa0c3facef78ceacafa65bb9a15b2caff7f8f0b85091201fa77d15af92227cd143f091ddc113fc2545004011ba0a145586aa7044b88208503a2218f13e58895fe1cf6fc563470e0f0ae7675ce9a762d5d04b5bcb60696be1b36a89ebc77cbc4eefaf37d6aa0dcbc7a4873f84150c61034358c010123004030cc1c653a5f07cf9b45a439e03136779aa9d1eff0ae42c0f87f36ff8cef2543b5240cef25ed9da242f7fd80b6114828d1d04a116041c3e1eff592e63f7692e8a1fce71f585ef3303f3dcf97e96ebf4951d720f8f25782958a97740800284cfcb6479338e6a7155e2fd40053f28e20702f001161f28c007a00f6e5891d41e8f8a2705f41511c5c9f378eeb45a93acc170ca3df04e4c633e9eca739d19d3947fad5ca7675b453a45d15ed1ce68a3cdd38a29f6c78a285f14be1541dde3e3e18f876b5fe423758cc3888aef430fb2f84ab33de0a107347890041e4cc103920742ba1d74b1832a7ae5318bf3bbbc0fd7bee85f680734e8400b3a78810e22a0031d74d0e5a08a1c7c0e3a1c24e12005dd5fed7df8bc1552af7d510b7fa69709acc759dfeac3b5f7211ffdcfe7ab2f0614fad0a1cf5b389c9f04d6e32c4f95c2217dd5bea8d5c2b5f7a1d51ac2617df243cfd8824fd6543b789ce5a9667866ec54258af6ce94acd2e918478f8f1b3dec33f8b1d8ab70aaf645b52ace213ba365b17c3d0e52dddd0db2dc8005dd0d8ebabd59a6b4af37e8a1bd9a98c11bf8a4b9a85479d98bd4885ef2f31427889f878a1262aed6e69528529951493595eeae36c0523bf2309c8e147eb6410f8ce3c95a9ee468c14a5d3f7694435aada1199e464471f20c191212033a726477447182add6500d64d0a00a1a34d1edd55be6dae7fa63155734ae22a79b411466d08119f4ccc0a6bbbd3c65ef35d5f7a5f0a5d5ba2a4c4dafc190783218c014627081181489814b0ba8f8a8f8018324181801060a80c15077e339cbdfd02b1ffde72c8ffccf594378925e13efe7acf9304a9b247e010a5e007b4190f6fe5d507301ce145e98c20a5330d1ddb83c3a7a219cc2def7cd4f14670bb4d082285a208487abfdee5b16408005cf022444ba6301aa5bc10e562083153859410e5250410a12482184142715e8a0bd5690b3bc96cb592def739617b31e13ab1d59ad20ef13e7df8be7ce37473a3f92cea6bbfd5be632c69a612ac2caa0144c210529e8528094021f29d089228b2882104519054e141c1452402104142e284a2898a27b87cb2a45e22da01ea0212fe613dfcf3fce3bc9d538f10ad3af8867ef13e1a1a5f7491d75d2322e89bebf384a5bab4adc537ddf8f13af8e3e2c6514364e4cc3cf591e8c1ebd18b3d9ff8d48717a6f6459def77d1eb3993aa63458aef3ce5236c37f633ebdd2262984829c1304e104b413f49ca046777baaa0d46332470e2f632b622c8aae1c39dc7b11462b0dfd67f9ab0d3d466976e6abeff31accadf77a615a9588f3ef0c4f23a238c1d90c4f23add6d00ccfd9db58f5c1a1cfd0ac4d60849c7f5d2648b53e13d427c939f30a34054bf7a4b9a64ce9ee764d0992dd92747b9f08561dea9ee0c2135474b7b7e4bb9647142748896470de7cf4459e803d81c3389fe81248e1e50b7e083ed99520fcd18278ce420ad2526848ed8b86d4de0721e02f11450abb1f547b1f7cfc283fb42009923ad3f14990c4892f9cd88213217042891342bcda7d23d5d76a59fa2271ca3f95500ae8f396cdaffcf85527f879ece813fa843c071f81134690c4081630823b821f46e089208b7ba258c6fee6b0beb7c3599e2ae59fe9a5ed70967f3c1fcd3f158ff77d68c12ff621ed3b1150e96e4f044988408a088810c1d74384f80d9f6a470ae873d610217e835774e7f8f78b261211d8747be4fc99631c5e73c19ec90b85c08a982b044d74b76cbe5008749a7042131ee8f66e09827fef87b5745cfb2258894bb7395b9ba426fef567e23972e4c8e11dd1d85fd2070c52d266228fe72ce8f19c9118df1f4b5c2d88efcc339c9748ab35f4ca2569ed7d0d191202fe9221414a21e02f098f3eac43e8e03144a389a8e4efaad7a99e059d424423a2010200431100203020168c478462d9704a89caee1480037ac85c904c9b49b330c729440c41c4100000000010000084410001d4430040b59b41698cd39138229bd43c3125ab1b7187a0399ae379821afb001729652652c303328dabc4df413e69ecb0b89e51127fae4883f5fb04ec9952bd58b11dfde5609c2ecfa7c0162ee9312791709cee7e4ad0e101ce8d81e8474108e19169e85ebd5ac9972f6ae5d8392aee7c27730bc707ee12ad0c876ff670428c7f13f25a64e6b1bffb2ff8ebfca1d9c75c26e23e643e6dfca3cae320781fab8735f630b4bf75fe61907b2c74900fbee792bdc54b827b4c7c82adf64a82f1a595abe05d9be3829c2d4f18269c20ee4974ecd0bddb5a56188a5b194d46896994c9e4f041e98baa91c6b01500afba8b323007336cc45214391eac7808591385b5a906526455ae465445279e2a298dcb020b37dbda388f10d6201b23eed9089ea264c0c422530bc8663a31ef01381b614a9d344bcb8b9568dddf3088fc6779bacd8f1f7bee529ccb2d2ea676ea1da348621d2112ee9dd1dfcbc11c58aa6f6fd00f2f502eff5bd07db3102a04c9c46ae5c765a03b7024630e9c712c4be8fe2dd01a86f4bda6a98bb439d42c3b4b8167e3870955a26153f01c84ea8e0676c8614ab438d2a65f7e7dd4cc4381b07dca81cc6725f13654e688d05049414c9b1e08c8e2779c2cb765d82029b1e2e1a6dc8119886a39c21bc819302c9e588c856db05f91b5aa08925b5393d52423c3ddd3b6a8f903632ca34ac30a655ce7b07e32bbfe84b43943bd11032128014947fdd2f11f7658845ef1fbdd2b427e7cd26c5ad6023255e2d65b37db9fec93e08c4c3ec9554f153952802f0eb316c3132030047880e8f66e39829cd893b4f43f175d2f5934fb03c078332bcf8137fe53e90286252545af6142610ce025d6e9959bdac97e77bab650124b6d51443e55e2ec608371faaeb44ce4741ead369fdbe1656e8e865f35f7af61ff189ad963ae02d4bd99bc5bc6c970f0fb4f22cbc13641cee172597afa3f15b3ca545c667ec432ed2e904ec43493b4b0b010ade5b87ba35e869a5bce7ad27a215c67feab1269d37bd59d4355c8ae2913095d95f89984c77d66cf209fdaaeb92fd966a073540477c1f0996cde4b6703e180cec319d9f834c73fcdd1d0347ea2e709c03f37a8de3af2f82922696117e9b2a9f78697c568c41d05d9c5ac9fe431df029f667d0736e7396edd91bbfd15d60def24406a2f5f136ce4a9b4c2e875ad912b949f4501d428caf180251ceccd1f8d4111543598b451d4564d7d21c7fc64cd4af6c834aac34ee021862f1fcb40a4cca07cefcbdd13a29740df9cebddf185a1a2726cded036952996199763ac01f53a40dd436c728c733709701d99d3a300646058c5ba28bae1d39857d668e775ed2ac3638a61aa1969b28d35731ad6c20502c775ecea9efd4506a70e84aafe64e493b8d17b4c41aeb49377538b615a1476c11edfa329ea5e94991294eefd8770e80b35845f357f87f0589798aa0e63eb84b4ea9203f65591d66ce78d9c9eebae08ff157e9c8ae9e44aaac45f814542385b3eccef02de7c2fc975ca4cf95520b89fd5fa7df3e206519ad821730d00c319cbc0c65086e1554de67a02c4f462e99c968e6cf8cdc683c013ca0498489fccd7b8d6593661638598adf0f2fa729b812c05b34d7589cf4f3bce3898010e08e659e4874a7bf61ee7bda68727c952abfd072e40221c9ce8bf0e749724de524cb08f96fddb6b4e1a9686bc43322da7bcf1591e605f9090de95734edfc9b30816249561d2d11580dfb9d2a3936b2701206fc146d9b60a0f9585031e3f1c1dcff6daa6ef08c199ad26f4e30fb99652f929a076da07ce47b0d000fef0e50f00b20b0986135e25239a5407921f1cafb08921ae9a0cf282889544163877bdb98e668211ea9b8833a827abd1211590b49036b0fcfc5f4caffc13a9faa0e70310b24a036ae97f900ffb5b9d05f178936e67267174125260af13ad0da4d6c70baca51dd0b988268c32f936cc33a488ac9473d5c73a7318adc5be55f58cefadc996bf9c03e72f7ea9f27a209e48cc9d5a97af7426e6482da73acb5c4da8cbd91e4f8ce700686e13c119b73bab30b4c84e3ef79a3d883c501957a56bd0ded52c08bc9cf4b0a7819bce8d75d5c3c5def229560d0c09bcf99188fe0619e63975b67032ffa3fe03c2f267dde6488b33e5f4dfa65474a78165dcd877788c9c30d6d9c27eac92e38838bc48d5560d66dfbe948e1ee313a543cfaa9af3eef17f313f0d36910051713a80e52ad2eadead110a3929da5deedad8214d20a4a49ae9bede14cc43d6360241b44585eb146d64dd47e3b9497612849a5f51122002783dcea407a6bbb9d155587a1639f7515061aa8d12a1888d3228f54507c011dffc6e1823ad15d5b7409ce7d36f6e822464d09bfbfbb7cf925caa68fbb27ec4ecdbec2ed63150d07239527babe0367c36026396fd49f1919204f78802ca55733fb043a4bc76a9b401bdaa660c8457a50876f6357acf3968ffac192ff0fd725490363fb70d5589a6c5681df2ae8bef667f3c7c45f64c0ae08f404e504c3b6028bd4a9a7de4fb0a0b7e52a1af52261f4cab4f66ca740576da9a5d4995fa958e973eed1af75a3a03daf9ee98d8f452eced374c0756a10eaca34d77615037d7b569c97ff820d3201d895ee1a588e49f1d342c3ea83cfdafc1a8422856471433a5c88e8e4bb53125128b99240818ab1330c111869805c67b701cf41bd8ece0a59b134e3749f2b2d06708dfd72e4cf5d9971b9171b77d6e36c3ad2ee2ea127a111fbee1ab7ff751fa3be05f91bd43a0c9aaee47edd80174ca7efa44e192f8eb4327a05d4891437333a4b8e937e73c223b8b97ddacd20049a289a3ccc8f1291698ee6ae89e23267451b8f112836d42b962ea9c31f90e7d1690ee609cc5f8bc90ef2811b8c70cbc3913fd92e24f78d43718950b8550181ea53a5f79a4e81af012a2a2a9a55e3781cd5ff79f118f8ca435ca3d644b27ac5d9d07a68749e2cd84df9d78e6940b622e98bd92269f53a84b8bd91dbf19f3d3db55b18303edfff8d241b14b8bd2631571ba60668066769684f3aa598ef43925f7966498acb0923c1ae60fd3f08b197231421b9373e0a60ec5e5d3d155d32b601655b8e585ef319af6c7d5816c78c043eb88a156051881842574a1121072263163421fff9ca25d221b8ee5baab2468cb04cd688a0bc989e707429ab4232dbfea5614b6fe348e696d79a9d33684f31496891233ad336bd515954c6ad0fbe8355e1262cdd438b8ab79013c642ff1a6c68d617cd6a3453e9b6f1d86d8c24f692adea1eb4deff5dc516a8c9159e81d8ab35f99936b898383a4a18fe9f17fe631caaf9247e77fbdc20be8f81519215fcc82fb97a567d5db9734fd93ae4e3314f4a86b2a77ea32bf5ebdc59a10780ff88ec7dbf126545aa981272106a335769489af2f1f20c2e654dbfaabd60a95cde7b2dcf1c62894b8d16f11716048c9b7832393d54f34e6dbf0952c3e402e6e8b32469fb134221ceb1a2f8ae4749e3a3bce35aaa713369319a7b1beaf36bf975c2c9c85d01999be8d6e9b217f49ac1da655896bbb95f7724770875db02cf144f6f62aa73fa3e5904522de89bf9cbcb8aaadd5cd8d00c1d4ee89ab4d296001e340941a290a77de10d97c41fe90ab1127eac089b6be1a7da138715768d0ce3127212c194086801cb8b28ab3750f62dcf71c9b58b80d6bf13c048d0d8cafaf796332875e8c13bbf406027674e7b4dc17e855749b426aed7622b21158d91b211f11904c5661bb9b21c6dd8d96755900ebb09bd7da6a8d6b41dfbeff9b174117f06cd22594623641540cd86a5f8b635121ea1d8f279b26bb62da52dafa01bc8267e85bb592985269dd12b5324bbb81621008b2904faab1cac18b947511ca9272758ca414737f66fe0f6f67c9afd2e436ffa0d7349bb7ee07f242a0a0a5345cbeecc43d61dc03d1d63340fa0e7591b3da4b23408d7f8068e840b21a08be617ce04adbcb57334a4c90b33a3c8ef4c38f37bae2b309afe12f4c5df8b50388cdefeb33c62897c149c48b735fa80ecfd0074b9e54f1fc67dcd6c49f7a3a22c2c59e1915256ff04d7b79b64857d61a4b8493845b3a8ab905320f4a4f20377e1c6beb27198977d0112ef391ed7d540f748260696e2dcdc6efaf952874ef71c620bad516a43a0bc57173512b09caf1f79a62957cff04d7d9b14d3fce64a51e35aa9b549e1bc4955bc420108d40b7189b43f3ea2f6b4f3dd34e4ed681887216d6e48d51466f460dac63fa82588890b386941c6d846e9d7ae642b6d353a52d104a5190b09120ff43e8eab3125460f1c50247471a269c629679ca6865ddfc50c06ae1ae8c79dd3657986262ded226f9813b6868c46056c1edba61fb71f5585021c59cbd219fac94f9a520b707e165a99607cf493fa3e8d15f4be03b97fea6c3c372cec686f4d1c76cef25ce52d99be7bd07a0174f8817e200091ff33e3fd09e675a52e1727b52f64c04f21a1b4019505f8f12bf85a8ccc8aa407e13764b6f63c14ec5c48872ba456cab454660705da1d29f07273a56b4d384e0eee0e98b189d25776440e961319c21c743341f7dc21c697d074f0dc9b0b3b18125718e34b49509538789eb09c284e5322bdcbc64d181be8a09d7314d82366cd85ce12a1abd687b7e83f801588b76d0207c92d23f1d128460ba8cf83b107bad61fbfd966f50de177ee290b21741d2349bf7137577e2be89261b6709014509ce72bdd85778159cb83fc2f3909df811fa57d19ebc565bc3d7387b605c53394cddc1cffae7649279b1f4c2c158ba7df20262815f8a76f061d8db64fab80d147eb2c20b7a658c9f606d1b362821bb2cdb027fa9552cde24ca085640ef475469d841ee1463674be609c58baa64d673d9d951878b7282389b67792007c38e55eca9cd9a379b9fcbf2c8e321c1ac6566b38c0f5b99c7f087e1e771800deb27e41c4ef6706470b4c7af0cb98dbbec7c8993f5a6ea04277b37c23be6656adb134303a952ae59a9b062ae31a7cdc365c8f0dc949805c20a31028f6730aece9c32ea533d7f26a44d448288e70b790d99d506c4cb03dda40f27442f740e56376f87562c51e716c2591e0f8013f1fa82887a8c4b60e78501f7802fc2d5b4040c079fb008d91aa8b775fc6e8879829ce9e6623c745607ddd36dfa27a0938b3e9c49a92d1989b07c11850a7f0ad67a432c4701f3696d6c5a502806d53d836443ada7246744fcb0354441c392bc26214341b925257b11116978650c653de232d0c4b7f4839934cebac619b4641ed205415eb51438c40d36f54e8a8bb166b5fb73820c49dcbb7e063b43e4e5d5119eb8e8492a92773728c12937e45cd9e1e2871f4989d9996dd3daeae41ec1d3001a2f50c1f4caa8d65f59e1653a0482eec5a3779e9c1f05f9efc5e7db0b7ce216a076333bb663c3668337387a0139cf4d3444c40bf445647d3b2ee0d236bcc289b8d0365822adc69a08f39f5adc97661e24c2516fbeadb0df1cbd84951787393e7ecdacdfe941540fbe8c0c4255c4a1fc041703980801eb2260e2fecd1159740a4a340e52da78e0d0b5b7204806404dfddba3140aaee55128c67d15f7b9d359004a46c15f5a9024b3c5741860057e1db93050666561419f21db971e3a6458757b0720db74d083b6fc3f677cd943e5ec2ea050e203f2241d0b8651df299e5d1d0a25fc938935ab5bef62e80ebd50d080bb9963ac46c5f086d360d193913293601d18f8e2a4c3e1dd32355c92111df445212f937aa94a821f108a7f624f730400ad3d4838d96153c518caffe7b92d0f64133765e6f04cebd97a64b80ffd015b656a7a3e7aeb2483bf8bc7dd4f5f8986ae52c20c999dc9edd573c9cfb516865907f6f5fc0c4176cc1a159e523ae9d67e771899bd5071f68bb97197c20a35d35491cf1bd460a1a63e0dfbab414086dcb8434b36a94c36ba403588cf026179609cf38d68cfef94742a34caf07fe0da6c1bec9af700b26ea1db810baf7ff8a2f0fb26073ee41c6a6657e4ddb0b766204c4c65fbee3a329f4d885d9e170116cce4e441ede7a02a6345d46c6580135739b4fd9ecfb2fd5f861787cfdccc5fe1334bfdc36210588a8e655e14fcc6c8df2d89c88b162e22297b43cde44e2dd6c07170357733a3814e08c55032a592a85fde5e9b16535444dad3c73ada77dade134fc90b8ae3dafd722807c8011ef4a94b3e8584c00dc36174d234c57381be86cd7cb79e816d3997170a2524fde460a8ab814bc8d41287a2d178b35434448c8e4cfd9291fcf83e58fc56d86d4ce30882833320ebc003c5cc6230f4b8847ab175311f43832537ad181734181c08dff18f6eb0fd689bcf074817883f64b3cba0c01379a673268837749a7c05bc3b8a1696b67561ced492c7cc8d3a6605434a47477581927c8d49b07bd0ad50a3104b2bff4687688db972dc6737d372d2c9c983ff27e4d80b92ab8cdf30170eb298d2756b30f79ccc0049d9e71632b1b32be022d0a08f4948be36673d9f7d88f2ab23b89b345ae959906fff400eded03875f39faab7127233dd8717b3a705a8ec6208aca66837a703939f26b72331482b7e1191ba8db3cc32be857b5db7d1216942b348975288f619214b30dbf62e84bc5ca520c45c145b44201b1d7c420306281f9c7017093c09c8515f6906c0cc776ac2d64d8f92e010937f779e6c9853415c087383553bbe8ab8ac29ef3daa83e0ee986e14b070d035b996725a564429f630acdbd4ef87a1db09b71fb4414a21ce76123f647ccea1598407d21bc5fe38d3b16277bca8c5d89dc9bfec63d57d02d851666a223907c84135b23685949340fc4b3e5af27492884a20b24536fca8eef0e41744fa9ee87d16972729d6e53241988e10ff09ee01acb9dbbe91fed3463e8fd5bec61e50513d2260b543c23653e0cdfc576f3f5bdda7cebe6d734e14b173860fe334ed7e3938d0793216ec646029accc668c67a89c8167f7b30e69cbd1b668c775c49251e087461cf229e0f9afb65d38460aebc5fc4cf75a0d149117bf61a4c9c1dd4e4a45700aa1d3d74ec9be996350f988a372d3d7e2cc5a71247b46d6e20f9e59f8d0cb9c2e745698d356c5d5813fef4f499d6af61b03032ec65f5b479553d1a267f08763795726c71139d0943f0a7feeeba3194d1218dbde799f4531c629c50d90efd4849a616f131c0a4e3e3b4aad86e143742a989bd8aa19858d2814e0356047967de595fafa6877332b66695feec06932d05a2240296b693c8a3eabae29519214261146ac3a427b38230922b129de48ee646ca4c601c9285f69737fb56c09dcd221f835210dbfee0395e90e55e2816a152024073a2df0199da0b7720c738bdcdd6c536f9406fe007f85960e10f5aa63779b5cfe45be0291e7a3cd7299bf2628bbd0538aea5252018569d41fa58e3b563297e37198a1c1211a5931383a01e090d9391b41576568353379cce2eea6a959bcd31a6d0fd8f51cfc5bcdd919636c966cb821f4f523c706eac5dbaa90f349e3409c5bf18b4d93e31833953b78c1979da46a784c792754423df2eea1edae268f27a8dc4622f5ab17bfe13d9dacf5128df7f41d4e698f41fd0d8d5236e6ad29b161124f821bf2dd75961762618b786c2eaf896afdf3f4fcf3189199d73f2dd274582bceb3be997ab8f12998ed9d9ee5b498f62654a69ec2ae05ac4c02750049ab699da51cfb00687ef245d2d92b029ae6dfe719371371f9dcb8be203d9df49a08cdd2486e54c650c74b7018a1c63e0e7c068277178e256460c3865747d6ab61c9385200e7c95aebb87bc9f7904ae198d10978ee4966697ffa54bc023320d492780e02e5139cb7f2ca9dba02f4599b11b89b4c583c27c830ea745ce7ffb4a23acf35efa5b03dc42d59ceaea691f3d9cea38e196f68bf50bf76169f313eef6f294eb7c8139eed09ff597774a496117110f7a7a52d42f871dffa2f3bf76957c9436e4331058e97f065137bc371a901bdeba5a0b5d4b0d84a3ac70c36e893531b5a4621851e3d2933dce9eb234854ccfee7c2ee6cb77abb88bb155a6ffebd5ef426dced57e8b34ba3ad7832e717862152a0fcb0aeba8823c411c6637ddbab380a9146e74f157b456ea55ebdf9bcc00a03e98a6f94be77e2920e9626e2adfa4702d789d26108f4f105f23075135abc5467de298e22e9e1c51b891e922c7afc63154d395ad9ca93496445ba613e2adda63204588df54fa2f6095f9b2e2aab68554c053c29653357e6f80a0626032f48ca6b5f2dee62bb19177d526db3a95655804d610583f8424657cc213c9adc9b2c851b58ed0f5ce2e0155d17b8735c28b62da95a7c40cd17a10c8ded6030f67bc2fc1b23e3f9243213ed14b1e6608cbe1f272464728cfe81a1249efc4eb025cc08d73eb8c46dbfbc19c7ddfd8ccb98bb726bb185c85027c41a24a091ed100585aa0ec38db61dc6a4c7ff676c49ce591b7ef8cb2b61de06bafe28d1f355362ac9b63352fb28f274d5b9565c07a714d13f2b2b0a68a1c9044e69ec70258a29d3f66fef007f08391e934219f3581a0ee402bb1c3f873d6f4463929ef87151fbb9de98a79f8925f2f9974b180555da0b1fd1c8d13ff40a40f3b80cf96ecd065a79d06888e0cc9ecf067d9e198892f6f348c8b6be82e8fc1b104198247819841163db7b415f737d11c698b791cb8415f27d5fd1a014d5105bee3184eba83f921f35e72daac3d9941edf555eda16025d5d13211fd77fb23ed0ecb5929fb20da1b54064b44c0216013a062222b49ae407274958ba9f6417b6df1ee9e12197de3f4b3c20d31ca697fed0cc44c2feb80e40218335b2bf4322e3a895111a5df6728bf30e51bc34bdb9669bd6ba4c673144e4290925ef9062ffa6b456ff604aa7eb9965b974b0549e55ceb679ff85802b8df50654b82f679997b5736b58d291807e25520dfd90fb6ef9ec236711bffcb7a3ad7f6ba1db1d6d7e8351e426bb2ebffc64ce5e12a279a802366c0db559027cf84f5c9d53cc2ab09e3da5b2de91c734b7224a5239b69f8a956e9ca8e513e58b6eb7ccd9a206286ddd7b1cb2c37b0db8688a4093c0989f537c1b45401b8a53fab88da9148493402c044895799e3ce94734b0a1501a3eea3b7110c929ed51a0f05f81fec98da8b74713cdc14c3fc3fa415c9c4c765853f1a6b7ed8d4791047ad9c9151c9ac066c9d09ef3d1ae4808273f391f78eccdddf81d3f58bd3eed7845b9243e64c456196479ead7aec5db9b456759bcf6eaba43ffe256216913ab5d52aee391ea13e9828ba078e70c0e3194a962505f69b5deb58385e8f3c56c29c78127157526e317354562dc779f4bdb8d0e62ed4c8ca89b1cb65e18d497b09bfbf91b2a1868e3737c9f5578277537fc9714a6c53bc9378e4cac16fa37ff7e9df7c53320d789f5070a455e5c660c352957a871c6f54bc3025d0c7708f3dd80c2d04dc3b8aad5cb6281e9a456e635dbe1e315ff42e75053d9b379cb9741cd42c2ef112ff7566e407912faf7dffac2026b64e7cfcbe7ce627be4449553a9a9332e7991443c6fcb46c4e072b9d83277b81fe1a72c3699cb4180fa7ae51c186d16fedb6127d5119587cf3d4a37155cb4dc57579b118ec247bfc963039c108061f5ff728e014b28127946cc179c4da2031fe5d3cb13cd527aa21d0b3ce4a3a3ddd6256b6ee869842e9985ccb3e54f02ffc1a0c12fec97cabb2e1b306284a7d6df906de5d3c39b8fdde23047341370f7922d4b41039ccfc555f486338f843bc8379c934df4907a972ef49a50d8043483bc0d78ad6ae492eb632fb06bf168a6720077f6a7fb6c314f1c8cc6ee1e8cf3a4a03410e70c6162a23c150c7da6330ee64bba23b58253c598419a8fb4ff5589d2cb328fca2b2102b98535b720615ed05e4eb4758da2398c4dbbe87a8e93a7e87ed0af4f25feebfba1e7195bfeda4cbad2ff81240eff0c157d325063ae9b21719d20ee7f1fce780cecc1d47da53abddaf33e95d756a176db713cf73387e2db7919707a711b57677ed79f1c5e66b23127cf36a317ad1d7e7eba52ef4c0f7cbf5321ed2b0cd6a60f39b76aa6c55300d159fbc8c3ac4879d70d24009a28882eb8fce680939e0b5b88e8949259a0c74b550b05680a088a0c3dc5ff19bd3f5706cb426669dc7b7a1a7b6f59d03a5313303fed6486d3f0d687a38de3cc2de2b15f859c3e3bcb3b686da8757c1374e6c5964fb6d17d61c1ceb31904117de7623d342df9c09718541119cc160a914e1d5f28c88bf9352df9bb347195306b8743e1ab2d82caac5c70e56212f0fea09429a08fd0706348fa38f1558d26f672d4d14c2d9e415a5d0e7015f66e426cd836f2fdde7b7663bd80a0bf86b1cbdcc27761466fbcb36e15d7cea1d9fbd32edd93ebfe62d9781e28cd6f23b578e2b9c3fd2ba054178c2f8ab29e2854aaaa9e789d95c2bf4c254b4f0903001b00823e79caab894c5720e673f56e404bfb877c82872bb0eed7263dc3fb96abca3bdba817d0538310290c98419849c60950affe4a6b84d37ec5f58f5815efa12fb524798af56c696e435370fa8c723947c7d5e5daaee86507bd908082a67b868867d66f7c5b4698802708fd0a2d00234b1fd3d3c50309568711d4be1aa831d05061c94231cb88a112c8e6cb4c2026fc252b39100ab2d384e54b730b137a54d018e5960ef4d0130cf6231c36e1910755170c77e0fa67b71d71500b390062ce8511b685a1b8a72ff43523d97fc56f23000c820fb97be4b031b3e491e9ba13edffd4dd63d9567e718ead717f7e9f71dec372451ee22887b6eb0e050fa70d04a4bcb9b15d94479c1fd80586ed487472e6532ace0626cb7f4f11c4046d76c6d107db8a97dd61431dae824e18299b43bdb3c2cc4a721ade6a007b7b5624357e265595cd113552c9525ee575f39bd2f6121884b378d48d50af813e8f1a98418061d670aaf2a9598c798f0e4a834056f964318b4f0f305b0ee6283e960140392c5022d3d0c73303fc8b34e355844833ad01b5c1a48db9025bae15946e0b19a7141df339b9650a80ce13b47bdfab75d7ecadfbade89d8c7de3a523dd437600848d990b6db0dbf3d40b79d06a7bf876680770b58eec7ada595578cb1e1c7d4f327a61eb6f928784ca8f8613ea50a25ac54ea7c3c745f78c1207c23fcbf157d7fb15ae6924e995a1bc101dd046c63cc52e2ff9eb21cdebfdb688523fa07771f28f4cba6bd3fe82f80d34379e1d017da5cedcabd0a88b14a6b76e9cb41fec14a72c3230cf4e41311dca7b5479a1c98a8b06bb932b7683893c802c275c9002027115a534509cd421a701892300ef3f07a8ed78bf240186155010609d39f87ce4ed8eaabd15297d0af4fa353b1ccb8a68348f03bc73f7f2d9b8d9db4323b3e430a3f4fbd72ad70e10fbeed6553b7c499ae60f4122a6777075754793d058f326874cfd341f41e82029bf997575015ca5925d75717427c7d6f84bb29ce5bfebf1c2ddcdd793a2e92f63cd5c1d350986009879553724928371c60306c4d0562d8269f6e7f86a8671ed7fe09fb2ba82cf4e955a4fed8426d6039e9f4495b72804cab9e557ae41e8b2840d815bac02627a317792b732a6cfae2789c1c4f222e9f5c02b3f0b60bb02b7e3d70325fe50008d2f69561862fdec58ba68daef3644c0f2233055876f28bcb0f7ef78b41b9233a39b6557540c134c6bacf8a333d6415ec8a5334e1baa0e0cda3b0050e96091a34abd5c32475dde1b426a334f8911e561ad650f0e2e53853423054ae9810ea5b8395588941186bf4e497768c255c9526b800e52ea7d58b3f83be564811f01564aacf0535d7dbcca5ab2ea51f5e4ee7e9c0d1c151ab75bfdef0f2cb7ff43a6f2801ee36b4b9aedaf54caf49a829cc45117a00a6d0dd079e50893d6197e7f68a66c15e3926d8a9a470f6d5350a56ebc1ad174732ed29122588c9051ab1c7c13614398c164b9c255c5657e1e827394e4806bc62030174bd5f1bfb89a125c62b93ec992db0e455ecbecfd09617559bc30de041567c90fda6dfa73c7b124dac044ccd7b2637ca69e5f1bc4c2c703e3e8b635b85624e272362a773bf38eac8499911c0b870d0f7e267fee8cd7172de44dce4b26a7c6ed5831ae5cc8f9f8654520ae4326a7699339ab16b5ef4ea5e8bf4cfeca9978516a8b784b374eebe1aeadf1063f929ba5cfa02e0f6a680d38da0a48fe65910321f0c68d4ce9d99c034dd4a2fc60d887b332bf281db152eb39907ccc6e7b43b794bb7d5ba4ed1905a0e0732f1be980f84fbcccc23ad4e0c551a263dee45c7b1c66193eb787e8ad8d48f7a97edab4f8c008910623e3c524bff9d2213bc26e37c5a6ce24b88c16dbeb80208e72c4ef27358c8567000a4ee1a381aa7cc2d990ac043eadc9ef8626afc5942b42ee4572a89a0f1e5f6aff9a88cd80632455e5c7a40b17f1d73d8ed45707fd4c3b72df429da44b2e80024622421a096a30a9a0181892ff11b164af4f84ddefbc2241600ad833a2d6de7aabeb1a74e5aea47c19e6d63e7c0d205028e446e805653a4daf627e314eb3edb93d0673a63728bbf635730e6e618bdfded5d61159a2cc6fceb2dc7bdb3db7185f920349eaaac446af16c820c42132988b8bbb800ece575b47c14f0e0875440956d22915a11952c059f82a9d4f3aa4f135451a02d176621d1085b030a212f164d5f56f3f707ed963d78407a5d8aef7f2cf1d570a73c6303e9c87b9c79ccbb85feabc318486b8ac06ee1fb90adc90f2721919ca1f3eec41db8a072a85d00c1a3cac6e4369244fa38e69c6e75ec0ef1d30f05f82be2bd575611e42983ca34436bca095e744c19706f2d2b1f6c1c42a28a8129775810ecf0e533630f1571c7be8b49cdc441734ebad2aa65656450e4884e16c2ceed88008fbc8dd4ff9872b5c48fa23931efa13fe93b62d687c3318c83a4f6b005f365f30f5eaca6f0ce38031243445c65fdc1be7ec5109fec0efe4503938a3a0c8ba2deb4500299f748993735cf944020ae13be4c05c126cd074ca414965d008908ad92711e2030653e6443dfee6f3d4b10f5e8ae7c57a86f672b0db659b40d0878170d94118e44e8228a1979d08f94f3c88bc67a66d446c1d12a1e196f138bd386b066a87da434ec4b5debef30d7856e8073a33d7a76ce6be64ec02437897fdc4a11645cce863c6781b831980b2243dd4b36e53f04825bc83bc069acd5ea46deab0cd9916a34a544138835534ab23fd931fb26f0d4e69abe6f9a6bf3e347dc7f9b7679da15a4a37ad2f7d8be7f6e3fe4aaab5e42b4146df266373be42447012cf2b1210e757d179a829594a310b4c4b590ef5ab9be3467596c8e00bd5be0106c0b06da50aac0cb1450ed13fde4a9f3ba7ab6f1587ee6d1a611b169e175b7d625c0b47633081f7b6cd910381850482b879e0e6f37a64bbae739125e502961ea457963ed7b81d6c8136ab488aae71801cbab8af29dbc54fc1d9c761f720a1216f20da811ccd16c093349275798538608b8677b9a52ad956cc3a41820e32e112980df24ae5d75c853f71602dbe48febd55e29f416026276168067f0de10f542fb84ac68566eaa2b2515675be0b2438763d83ab29ce45eb17d8b1c8c0c114093d083839db40184e63b500f3b457064456e3307da9b91053112b90c07b33de3a0e3e0708f4887314480cfecec9e29157466055f10a33062956c4da531fcc59f9cb58a071f9da5f1df761bc0829f9525b80d3ac6ecf8eb04a0b2b58285b1407bc2cd3202a8a76872dded71edd1589f67ee46b574b7434f0ff6396ef8bc229b96ef70148ecc7fb9cbf3e47eff70ccdb5c0b3b2fdc77bb806b7cc2dd0f02195f6d8699fe18c782b386227fd85f1cc7202e20ccb903c5c34f51e46443840c2d24510bfac9da41f0fd4461736dee27b4579f5ee19c859678ac4b1df8b7cb1fd410f3209a10dad99f40286237fcd4f45004a1139a044b8498ad71a5f6820eba8bb6e7e8f18c912d2ccecc072896bc58e853c4f1380a14645a84e51b2b3bf98e78bb11fe8148bc667b1024c0f403d202a353e9be2eb93c1062c4078de3430511bac13085e9f29fe99706e2d71eb38bae9a4c63d2cb85a0a82d91497a3deae27ba3a8040a774fb447ce3aa9bfe38c4fbcb489323fed546945f499c6a297b303e49a5a4a977f44db5c846c0a85bb6ac697e45f92b53782f3020b21c55a85c88553830426b4d19f92a3730804cb4dd8c1160209e29c756b23ef3dd023fcefbede10104186e69e09f88fd60f6fdc57750293134399bc9f5d9e6992017c8328467df1fa224c24aeb969024a099deac706b66a2806d95c94efe6a89a098311d44915659cd69aa710957ff59914cb15acc9bd4435d92843bf7e547888c11ace521a18dde38b8128529c1d4790d24c1afc603f3a488991b9310a43049c264c5db23359351c9a3cbe7bde063dc881be092b89063059ba85d8a57c47b722fef8aa55c8ea3e360428f9df8b61df42fab37be627b98928cee76a2828fc2de8dc97672b7d43a60bba3d61dda693d0b7fa9956984193abfd7ea6ba373174b3c37ce63905efc4b9b5687e01e507d115e9d9749c381564108da740029a9bcef1d6125b6629e3904e4ed3bf4910e69104028acd87cea966629773eaaabfa13bef59dae42e69297f3de5b9a0e1208fc87eaf9deef96dd1181545a69938efbc70612abf2db344c872fc428eb0f4905c8defefbf85304348b10a953f94c28a390b093e715e25fb9014a14111633948a63366fbc13145a0b3421c06f53a7b1a45c093b0be28fdf36fc7baffbbf346abb741d1fdfc68fa1d38f21476f574cc80488b70a8663992f3aee1e60b2a2ce460085725b3c91edc5224ff19a9baab9c6ae191b0831b0ea0397682c583a0e107c7945f7d033f5a11f98b98208cdcc7ad5c20ee5ec59c12b064e4e1fcaeff073eae9d44e7e0bf2d34344845da36fb134a37eb039e71d0a8b69afe1ce6548487a5e373670a2f3fb6596b91dcad415035e39e83c76e833c3b4f86b58b2ce47cb97d902f04188cbe9e227be99b1a1125709f7f7490171289e388a09a2da2c4f709c79cc4bfaebc4089a7e3bbbff4510981f4f117e5e8ac95f9738b236506d80f6536ebe5484bbc8cacb38cc310ca7e974c5d11dd3410f918ea93478a2675eba9f71e1e2f39028289c932f68df5118f54cf5233431d364c6f56106d687ee9414c0bdf1bb4272eec16faa715d729818fa7487e1d8c24bb9b160435ecdca71119609a0e05d827b60918bb43a435cfb96cacd45ff9fd6f6e738641d836e74f11765f68ac45e81452ab0c64f0f0aaef4868692ca95169bd5d8c6f5579732121bb9afafda46e016fef6c749bfd42b669ebc62fbc99b4448dc611858a64a8b9cd2192731b681a495678ce4fc6bf85f15be7148fa98a863513c4e8d2cfd8a4786b2b0a37e62eaf5e280a5ac57a5366a5c463ef10b9b3d5cd17943786ed1cd370140f4f8a2408bdd3a1575dfd33449cd4c1b5479609de5f1787a0c7cf3e45cc46eb4c32ead5d33b3db7ecf33a996e508af8dc268725c107eb4d3e391c2e0019ef539df631b0da9e1802e3d07da7e4cce69d61afe548912327701ce3b1b2a813f19e001f8e698e68960092e6067931cd809b5c6b4ce71677fb2f7cc2c2bba18a302cff2fccd23e6a815f2646c80788335abb67f9f19c4cfd18af1424d2ffe25b15efaed5023848378aa2fad0c09cfadbc3c1bff38c3f8add7e1320486bbc89cc3694ae101f32bea26ddf52a5e1ea4aeaff6aebfb1e1a4aabf1c91f049c632ed57e7d9410d0e823b01cf84f46ef73561286786c1f0e87d86301485bb772024bef67c93a4d467e1ec24a227eb80e782fbc9d8e1c9369bc04f4ad13874c4920c7a4e5fd44cd811243aafaa7937d7f176bd20de91e41a80985aee13ee4d9cf776519bad2377a26ec35d4f6bda3240a67da315c9bc48f528222cb607381ccd37ad9b566a38011083ffc433d070eb12485c4aa55b3fe871b0b9704a7aa46adf36613701920bef1fb71f9795f7f273b87e9f205d6fba74ac44d6084fef0c0c79a9ee6ff555b016638e51569684c7e9a3d13d3a6337bd0137dbd8875a6d811c8e98d33487865a156bb93cb1a86137ddcf921e106208f28ae157e35042640d73f15df800c54d4d9dd78cac769bee700a05dffc269ce29dbc03a4ef979374514bc61a8271045a50bb5d5cfa7bf2ef3dce74a903fb6dd7f8942a7e43b185aa8f3dfa390c1f47dead53b021dd1d29a12d2e08c00b6e40191cac476ffcbef92e6ac22562bc0f424f826792b5485e43708b0ec78f6a61e52dc6810ad81ca8b73a82f20359d74833835222dd353cf481c8ceaf0447d941539e1f3b6a12c367c01c28ce8b4f9c062d81effe2280e20d266589c3c8142eb263dd7907899e28642b4ba10f64f5e4f0dbe0c8253c31553efd0e8f09371bb79883d6fb868967ec869f8f4c9c35e1c62f8c78c14902cb89c3bd48cb93244ce1781b750e51c025c592c1983a1e1b5c2fb2667c03c6d8d0c044fa4e7d252182357a823ef590196d2be4b1f8e994b996d3bdd431ff603e6c956fc986a59f16cbc28690253f3a84e8e7a2b4557a2c457c3d442bbcc52eef637572a17101349f68b434fc7a08f78499fc15cc58907eec415859bcff419a3b824b60661b2f14b7734c0559e86e5b80fb83e299e0766b70361ad7ae6210c19a1b7e26d7d138cb65f413b5356204c46d6ef36f91329855f8c0bd041d91a4a9d8249d4302f901bbdd3696eb81d6ecd9a79a5621a5d866dc1175d9a9dc20d47922c6add36fb5fa24df5c1687237de27486e8f501851d7c1569ed4c08742972e124a097c661e5beb161695929e2401c79e7cd49e2d082da3ed04e401d7cee4a7ddba81029007e931e2d9621f672f832fb0c60d68fef7ba411c4a6f0d0700be2d0a092e7a377277de649c698c8f99cc7050e23ebd4820493f3cbe76be637f8023c8836ca6a3b62255ebfd0fccfe7792d8ae16cf8b03b1ce82ebb9add6beeb3dafcd97ab2370740ba7e5e71330845ab4e9e7daa3a58325e74c4aab5c587eaba0527b0a6f240d7263c523d48532f20378b3a6687c3bb0ef64742fe43bc8124b06001dd565dc236b3137109ae96af2ee6c4dd409879c11b76e5b581df40dc0d11951e9acc86b99a416b7e6920cc67f2ca783f2c63f9b5038c4869ec68823ea13a7e6052805705cfa75bfe7d184bec2197b9efc31fd1b876cae8ed1d46ee850e51134ba63524df94327e5b16840d8f68e74464c93cfbc64aace6ace0755dc2afae946cda1fc3496a1e88f485841b05abf307a0c2a73f6b166c1248bc9f1a796aefb714025869ad6d1e72075ed436ecc9d9865e1d857eb8c914b9c9671c8bff33e73a7917e0eff939c6f25ffba07ebd9d9384175846fde9b99067450616275d3eee6c99d9bf8a0f99a504cd0303b981bb04488f3bb036b259e74480bf1332393a33f550baf2b4194c2de60c23f88b079599f255927fa65021e97f63b64fb95185bdfff9119693fc5ab998f6d9a00f9081c360e49f55c57eebf0f50feff983b640a6547af1931b967d915db39782bf6f950763006100eceb6761f416e5c3e7ca06ac6e71e789b2d71e5d29b63b802254800bba303bc8eee9d1385580cde8952101e201a09d9d607e6d38b7a012a47f217bb9d2d5b758b6905923046c47b5a569721dbe0d7d287d760b570c4b4763bbd3e5fc2c3140d45dc6cf17e0387ebc5934669d23bb3de377682b2b97ffba5e123e1b8d77417739f9a27df2ddd3d0b53cdd6a849abd1676933d7eed1c0b22623de842f89093310e3814d422e0043bed77fb1cd21fd5eec4e0558506c9bf38beb059f6f86dcf3132033b61451a9f103190931a2d88191aabc22a96de279cfb1434afb959c07274922f3de3717ad23f25add0c26bbb7826167eb8376141aac18ecf7b164018d116ffcc51a41145c8632a3bda1c05003a50238415cdc475ce941150ccb063ee178e7258afe9020e1072653e8c2e83ff63fda6e5ce2aa5d1b804bf0b95e1316308671ba5ad7d3d7a97a543c48fcf2bac8f5833af9f9a5d16ca2b3987e85b24ef71ade239f151a7540516d5e74148e6cb13032d72493ded5a8289cf010c147ca0d978ea3b614356c4ee74b81d92fa6e88142da23c18f498f215d6f61ccc43737c1831f47d90c325c01d276a6ff4961003176b4972c194be3c8eb331327e93f59c8010daf12eb00662f87ff1f1edb1676210e47ed12b9af234d580a79fe1b88682a94525e4d6dab7bbd2f0c9c0d618051b9098a13fb2967ecff64cd679b7679fafe9e65c8f3cc9ab92d32b01a3684c74aa151eaec1b2e7c324cd0ef95ff305683df46160ab2177010682b9d623996f414133b7a47241afa932a8f2aaef1e71a27967dd7c29a259155b84643e13884f58bd530f1784866e866c26119023f69000c25597da5b82834ed9d95499faa45367488ffabba35cf1a3845575773a08ac8679c8ac25fe3ceb206f71e63ee66fb8be6445fa8ae888a2fb736f659f2aa0d2f61a9d6f63e46bb23c7a28dfccaf41c31e66dc2cfd679c4f9407e22941e2afaaad138a876214086674ad4ad06db4ea26fc56e0bc9d0f15acb6e12f1e211cd7c798a3501cfa67ddf5b9f6362fea32b04ed88ebeab4ab230455043b9eb1c5586f3935d120dbfc96fdd93066cea2765ebf0332380383fff8d2037f41ffcdae059cbb90e9b5ee6a1c015e14bc99f14e798abd74ae6075f1af84d7fac8b3d37598fb4fe9fbdfe5689d1cf8674e5039157fcb0698de57bb4059fb35b5c4516b1ca7fbce564527529d10c191dbbe041de448a4ea1b813eef3ab7064a5bc8848eedf7189a26b2723fef1b5a99415d97ddf4a08773b6e339446c6d68b862d805dec0d32468bfa77d36fb2e0f3e015016b6709a608a2977832c85b9bfa3cd524df608a50a4460723254a90f38922e687f52471a4c370da07a79bbf192382364fd81fca3f9b27ef2dcb4ed8fbd50dd993cedb58374d532d17298214ccef3042db7f0e5ebc7451013475affcd04d1396c17090277593a7ae3614ae7a12172a107168854a813153d8312a6f290966d84a389829684d224e88c41bab0f98b0a8a249061efa37de28018bd38126e1ba90f61736ee8be8a2ea128094ec5804bd33a10759f0421849196037a30142f1de77bd28cd2563edd3da75a761fd73b4dc5aef1175a3769383590778337712df93e46b832ae40f63490534afe946b46a573af9f13a298377ccc301ac86cc3f4bcbdcc168f381881e1773f120567f527570ed15a8c6fb18f757f2dd6d008aa3d41f2deaaa01eaf24b59ad53820b91ff34d23167457b5847d9af62fa105357f298c7da198c3e96851cdcbc9bada59e4ab40d3c0951d198ea00c3908c56ef5174e14c84ac08dfe91210f2de94fc3312c75acb9acd8c2a00af89313e675dc24b377bdb382049507af6a793857ac651e224cfe2ab7fb5af5863cf3fb89f73a33443d5833eb71994a7b1e1b340f32fc53e8c5549a74780c4830549fbd9d1f63a213bcf4bec8c57a05fa79c969aad1c1082bdea9b188dc619205ce98b245c5889766670d70b08726b2150787f9ffcbb65642262dc4053e4b8364cccc66aceda35675ae213f5d2901b2b73cae1c9afb67260f0bafd2f84719b0dd08e1ecbc87e7c413be6c660b4fd0a25ac5a6cc84f2ba6e329786ad82eb7206e39acc2c07e7c18b1ad50e2f3619107bac81bcad6ad8fb6ba61fa5443fe849167e7c27d13ae8223a0ed9b579796a4372387a0eb0b1dc03119255b626053a360bdee8b997e84d4afa7c8ee602e53c3dbc3496466496e1e9d8fcdc0f2f0ce552d86634bc1a465f111e5853d87e67aadd2e9fbbf8ca2eb6c91b55db61ddd1d334ee4699138194c554f325cfe22972a2a471695f18714ed4faa4a36b3c02dd541aaa0d747cd49fa256690e4ee12ccf4490e4ad84951aa76a9b910fc9c17fe6c7a7084cf14d661f4f9c9b7778472a99ee42b95c0b05774b2fce073e9602c9261029e7d0e0bd08aa5c115c06eaad10f31bf4248086e25a2a56393129088dcc02d34e2382caee1b83cc1cdd2f17389141692ba999a1510128ecaea5405273098e5472d108d8e65b8f3b6f67376088d825fed8b7f3fe8d180f568e7dfe5cb2dbf07d8670778271cc27c1df3fd9cca6abc3a98196e5a922afc640917fc1f19a9a48f7a772b6cef6c6e51305977034ba8cca02cbfc1c2ac9acf21a02fbcd97479768f42786941326c9149c7eaa9dfdc1bb241a0805bc78fc57a2952f8896442d6a69982f9d02a7dcf1eac840eecc11ee61eec10c7218cf19d9c2c26c7cf95e78ab2a18a9511311636069307891e7cb88a9f3e49c3289cef0513bc643d16d0f447acc55323f283750fd2537fa2d0189c57a38731dfbc4787578f317444abfcc606b6e61e10296473457e230c24336e44e6a19248b848881cc6da9f06b5b1538a3ba8760bcdac4d7f95b517e5bc12afd2f67425cb2b267a4ab97c31cb19ce9eee1b5788f0e91fa9250cfcd092fdc294507396923207139704dd3f0f9b0c1b0fa92bd7a1cf978453393013bd56b6041c5b300da1e38751aef1f47fff0469d2206a4df1785398e5bb79be613147621eb92dad92aaa1d23f4b37c042e5a0dfcf200c7de92a21d2e9c90714d8e138cc2822c65f16b2e8c82f2573187d66ef4e1a9e0de534904f2837d208fe8aab42c7ef4c7f5971418caf4280e2a98b7632bb5fdabb96b313d36cecaf022b7d9d3aa845b475c0c41a64fb244fe14cd5c07502e7ead5f83b730fbd6c87f1a5779e668e3db8e371760fe6b5c87e54a367a574c3b99d8a81030ea6711ca6de76c7e24b3ac3d2b23dc8691613aaa878338a9ae154071dff797c5d385fb4a0ddcd8b4efefc795b4cd2d9d37632f2084b61a243245f24a34b08fbfaed18ca2d4b5abec1990f8144dceb923eec16dc46ca85ed4062ff46271d85770e672a2d192adae02023ebee9664904f7c90e617d390947a7bbc34eb00212c63ec2c42c13bcfaed0b059d94d96c469da7250e782908cce5a0bf0c063b530d2d6c1dbce29716cd850d6a1ddd391e1c2828b6dbecf82288556b23cf67ee41fdc4f38a8858d0b2f112551c27823546f862dc5c60171455aa4a03f5173a5b046a968682ba0553ef8b9777315408a42056fc857ee49a3defd683b14762dd2a1a349839e65ea5bec53c729ad093e334526a9b64df952abaf71c6238485a555458c89f5f4b7753a334b6925f22ba5608a5adec6121463f2d8c9e5b4923202d8a97b966c278e205639fa511c4f72c209a33d4cf6e78a5465d90b6c3195912c29349398517424626b645be0e81ed2e3c6dc1b99f1a78a789a240a3d8a15442f70d285d89edd8787785f5dda367f64c9957bae68b96f03048889ac0eb2a51666e198b77c2525ae6d27d412ce8021228ac598f3bef7dce9ebf31b032abc50131be8082ece720cafa4d4a0292c944e5b593322e533c9c05c931f3c52c2ddfbc4539adc74e01fd61c719ed5ebabb335bf6be8fae63224edd60d04ef5cd8749cbb1f4037cd124b338cdf009fddc0951cc3094e51ef2b79943ae3583a92ab9de03231cae763610edd8d8f432615a3481b1ea868122a9aa06860649483c0015b69bd2065eb694f887ead3eaa29bef13f86e9c1ca23d846d4cd118ed198b34c00f0340d92621f66936aa65f8358bdd6ef3751b3f1de43b96ef7f2ef91c93b6427b44609edecf4b7cb2bcc2efe5f125bc1ec447acfe9ff923dc14fa26b003019c70d7d18b48c3310ac8e22ce2c32c61b1f1ab659bca6d02f6640f4f3f9cbf4b591f34ddfd90c3feddf97373971f95d9e63faf92cffb498de854e0b029343a838b3e56246eaddfe6e9ce241855977f1cb0ad95371118bc231a1b11e9f48da2a007a1bbda9fd30c75bcecb08db3bfe4778cb85ab33f7a9dc2e01193002f4899b38c97a936a87aa466ebb21c4c9bf75ef08231493d76142c72b39f88fd8fbefd580154fb0c020c61e7b774c93f20948903462d8159d6b22de56b60f9dc325f6d0eaff800b16008cef50c8bdbb2a1a6c34a01a87ac5e4898d540c8c16873a2972f0eb0fcf7ff7c057a2eb7db318da7f42ae8aff8c4fffd6b573bd0f8583908039091ece267ba0b00f10f0189e5a259898b0c134cc235f722b074cba41ae2d8c4841289e0eba6c9620b44036ae133cd3780968f89302bab6004c6a130768d2c7486c188b89050732bba207b46a3a31e51bd9f66a33771c738dd136bfae35f5833e7e939ad34cf6f5be696ac544d50896eaf96f0322a1dac42b1297ac67ebeabebf4fdc7f0167d092842b203b4e0aa38558eba1cc7b498865d3e21793adfb49114e7fc6c655560e05ceb0b13136a6574e14e1edb23cfe7619794b366c23664ecbdd80f35697ddd24cf8d2e0c8a7a50d9007a19c609294ac70df450f68015db6cb6accfcdfc0dba386f6c71385400318c21396cf74e4cc95c219352a15fcbda656b646370c5fd3f124f942155e1ffed35b098669677d76eba7a93a015f5d9954fa0adc3d34f2f4b99fab8563e7af73056af1e27e8f41e8d0f23285da3027f496d0fb653f7206bd98b50fbf76b280fb9b7faf681022a8aa558857793c17096bd995216f10ee82ff6e8558d9d9aa8ffc060b4a07d7fd7837f5ad5af14e03feac52c5c693900baa040349fb662514d0f2d9da6985654ef542fb682ad4ff7588808745a79171d544a48ddfed98586d9b15ac3ee1233aabebe1e1d038f812a1317ffda3f88fdc0e968b5955498426c8115bb2b3fdf40b3fb108372c3cab8d839222a3ddc94ed7fd9161060295df476c4e74bca499c5fda6383e572832e425bc517e36e97140525a336327c8f16edfc23955c018ec4bf0da5026aa4088709f400c598893f5e89a189eb6c7b8268ec114c932fe2fbcb34b36cfe1d12942815c67f49033d12f95bd89038533beeae62cc2505f52556bae3b3cb89eaac18cdd0c03fea04215ae43458380306605b5235a2189d8e81e252ab85d8175faf27ea5d945c20217ed4b7a2cb63145e700aa338b3f8566cc1d542b846646ca502a656f283efbfae30511863fd3ea677677a2bb8e3c6eefdb0b145ba2c5f42556fe5dc17cb0b35dfc0ae4f829a982e3645206483ebff8869f996545fe39565e29a05d7d9e285467dbc621fd9bdd18027025db74b7d1b6d3cacabceeb51da8f476a80aa9be9b19c55c2dfa4f981c8c0f1373480d1e6a643aa380dc317e9decb632d7c541c3339ef39735a01af7a43500a7ccf250fedd000288fb651ff158ef4ead3fdd75479741fa687887edf05492fbf4c36ca1603008555ffc317fb6fe5df0f2ffe67a3158bcc81667e593f4aaabae605e18e3c2334cf5e5352e657da5275cde2dc85d1a734f8bff392bc7ca96791df99b6f48e3feb47b6a7f34d10a043cb789dfd5fc1df43796f5c9a7a03fafdf61221c97251ad805026f45e6eeb8a2c2c5f9afa416156506828806280fe86f0142f41876a9b126d11d3c891c494acc046f9188dd8e40edb71e8082f5e3122152faec87a5ddc3acd6946209c70edad638dd49d73be015093591e7f2786ed5a4b414ace50b8d2a541f17de069ab0fb26a41e408c44ebc53a0665a871274f866c22146ed8d82bf329c6daac78a52407a0999c21e38eb94180cff546c1df73ebcfc2944a6bcd212004f97fc2ae4db5268ff23a144885e823cfaf3bd556c40557fac31ee423a50967d13ba4960d0228db6b678fd9e391ac01fc94c6c1c9abc6d80e16b5a517fa4a862a86e021ed5bc6b525ca50fdea6e37458042002c743b0107ecf02b6ac837ea5cd6c5fea2bf352fe9cd4769d73ef8bf390c1b12046b8a8b454eafbb3a7b457cf0720438b7aa849bfcbc6cffb12230a0a2cce887f1b6c4c4d9b3864a8d839bf5e75bdade3a0230e53e7739c5dfc19851cff520bc1826b988102c5298e698aadacd37804f59b4e0f61407373437f60a79e2bc67c9f0184a2ee055553d24120e379eff269abf79f90f477c3a630be7b7bcd2c2774454df0c0b2ff460f3dc0406d0e4147187f23d66e66761f2cbe9c22a2404945aa172a8dcc634454831735719a2bbd322f583549fc8c0bdcd3ade5b49956532056d381aaea2617a3f48b4f76bd7e3129f75216118f79512a5b6b705381d300333e516595a528b37c81f5cdee7bfa5bf39a860fb0806e7d4ea0252cdd7ac448956d79c96d000cb65b3b4c05fe4de0c5d7829235afefcc5fb4f3d693134a53c9dee8f9f9f7c6584edfd3ad8447ef01e026cb92aa255993a590b73118c8df5625f9f192807b67189b64f800f1af4b425f9a38c47cecdd69fe205762b2e85bbd4dcbd39499c755737ddcf8f27c4bcce992711394ffce14a43fd7f191460d0bf6a22385cb1e4a92b62116db90babc79cb15ad8241f7be88e659d9e4ef59a7339ee338fbb4917d81eabdcf26573f279f7ca06046099c65dd78dd5ca1b520fdb349d73594fc3d01f5f7f0e07e3c516dbf977e60019d469d8008133dada766013509692aad2b1aac661cd70b857d5bec9fefa7225d382b475c9e97e565e60d8e1a85db2bdead22c8c03661f20ee5c09d850b642051aa79b7868eda4c4176be09d2fb2c5217e9a4457ab7b1dede5252308659199a443468cb538cca8adb27106a28f6bc9a4cc5be7a92769f8bcf13a23c9771729894c1e560c72c6701e9dc840d3c403d77956e8206421e561b426610ed38fc7eef24f8142239b425106597b8d3278dd373a20131811bf9a68e82eee1197ab8dfe4e60f7490d98fa01280c878cbd7b0f583c43bd415d67777c24b6fb6bdfdcc6600af5cf860a0f0783aa631323c8aa44a21ade3fc5cdb5bd77216d2b954227c45b38a2214ece129bb33512889d520d810e8ec9e8db679a47d17c3fc87c4e27963bf4cd2bdbc462cae07f6d724f1c8d1242eec9e5495be07cef1044620e677d2dba749dab7007f735d93a9bb355a731e9d88d49d173401aee0c43bbed7ffba5c2813e673139a7a4858a50aaff525ff61ee41394f1fe4dcf6f991e338b81860fa46480003a26d6cc6a313e897b5a7c677a1b18944f5e6f9726c0e1ff17f4137689cc778326475ff0be81af8c0279bfc202c9b8b7784f0cc4ae8506f0c25cd67c6b28939da85208393ec742b9ca9461680044279860caebe086dad866548b01944b6c476cbab8b484f584595fb2b9adaf9e9adb4e4a4c4fc7eceac0bbdc10ff62312d8377206290122fbb6af42d4e974a82aa9ea21811aac06b144ead456039ca2188f04077f666d5e4f18e946ad56952f6411db4a22e91956e38ea98be44e048a83e1280e0caeb044c16da93f93b5675a49a0c05f6d110764ca6d18afef4db07818f9b84b927859ca33937071dce151c043c111d9a07fdee6ea51c072390034c9bdeeaa47fae27ecc5ec3e2065dfaf8f53fc036a24d00f442832405f0caaa833ec116c4a2b6d7a3ea3cd044a00a4b70c1257424776f89c328d0b2475690c6c1359df432038d99b5fb23e7439f1897e98c02516a3f00ad32b63199c017339c6091c52d00b4edfb2f19f994b5fc780027126be061dd073353acf6b0484236004a1af20c2165bda11376b73613115fe904ce3a6f39717c7b22058affdc940e49e0798bbdc1ae822104b63ccc34b4a2b4a5c2c655b0bc03721169b1c6aa976d9e90b193c548fc38b393be5ee275be4336769e6aa42e6ca224288c741bc5eb5d518ebb36b4b28395f28ce0f35040ec90ce90c2913163e5debf69bb1f82a6dcbd2ceaafa9cf0fcd4400ec67f48202740681fb6022a5f1c08dfd44eef7f993426d100ec838e9b637116880c4b5ac7542e92586260570d2191bef0bd18db7760bdb176265b29de7380e8402c0c512c6e7c4b68bd1e6a3ed27775210793026797aa5bd5dbdfc414f21b8598bf569cd516dd43b4432819b329cee45c345e015025e51cd134aa540105d6735b72a5006663f0809f5861804c5ba02090531d8f5bfdc99935c7445f0cd2be09b1e7f2a828dc5fdc51a06a77ad192d4b3870b3696f94c2d6fa0389e096c25f595259e93ebfea6f89e673c16e73b8327815515d47d28740858f77eab1c540981562f433cf60e100b32900826601704f3ca2d389812b69fcd2319fd5502a4899823e44db0f74110067807a495b6f28c061d2ed613da70152e307b7783b2b819cdae5b3bb882c0c8a2f425b94b5ca445bdd70d6dfdc272f6eeaa1b8ec23f9ab2f3deb390445427419b8c9c4707a5b76a38bcd9a56ea3229c86871b35843ad5f065de791bbaae5115a0d3a22b3408e569814ea763f8d34a4a360b80fe0095acb358e3da0a4ec0cc7e2f48eb5b056343c414c2f2b3dd900a2e599066fae103127fd007fdc69488299f07c256101b024b76e8cabccc0c931609796dcf98c19e875d68f315065861b2cb077da0137cb75f2ad29135e2163a0a636306c26653c79c244ae1bc95bf304c84a0cbc888ea5105be571a3242701ef0b379190901917c9f59c74a089af13e83bc98109cc4d74a07e0ca57809487442422a1de0bbb2925a673d9a6f7020819dff40238ef845e6d0c0e031c67f4deb8ad669b2cfad589ce9aa723d8d8e337b144606e58af341cd06f22fb21a498f4813056bd39363a7f534c21ce790f3aa047422b8768109d48abae397c4e17a89c5b1ff3118727de6d56f7a09595fa61525204b657f5aa340d87782f350038a3ce0cb97721ae8636941cc4926ab15f0a31a0017e318299e331afbac14bac071d74d01b8212f3aff99ce37e6a2ce59cab996f0b9a2a50aecc078907775ebf4479845331c2d17926d55b7cad2481117d64c2a8164a28e4bc101b92d9d4398b7cf6455b9401f1a0bcaf501e0492309aa70a3e4590b5c8cd67ee51ace4039808a680359274ceb3131a627cc5ef46b822a5301d5604b874a11535bcecdbc40c2427eccc8bc40b3448ed14ec4e185add980868cef413b8117abf41587b69446b655562e405d52e572d362824d1c86254749ba9d17ea16f708b0a6465db96cefa57e0ccd9ebe726b1ef2bdc334c79abebf20d3a66e67a4f3f2a3d6fc60dc7e843372037820c3c5206fe4cca07af3daa37647acdfd50d17b5437f45b7a5f9dfdf4fd6af43d6d43ef3b105d29bf9225a9c90168004af10148dacbf31eba49f87815f1c877ef1f013568a0b7011b9d650f71cf0c75eefabf7bfb66361cf4f7a294194b59aa614940c1077837a01a6ba65781ada2a1b730f5c3882a71009b54485886f107601bb21ae334ccb93264895000830c81070ef102233acbc05d91847cb3005dc16518c47deb7d6d542717e2a92fdfe650bb1c22d2fad1c8c26c283c86f4a4914367fd17a00b289bbacd7ebe6e2cb638c0004df0fa705bac2c9af65c09393f17a00b03b24d5b25435717e2d56e7d814b00edfe6a5d22e854f8679122d8adab75d0f2b5df3c108b71b608e84846f4eec492016ccdfe40b74062fc15cf6904d056b2535468075bc38c6786656ba8910efd2fd4a4502129eeba3a6e256510c8256731c0ad18a0dc4b69813cdae4e7022be15a34870a1d5c8cd2b2473b9e22403caf07106c0c9cdf914f0dfe3c1c1fe41ca916062d5e131027c504dfceea166390b70f48e108256f7cca7d50b086b90618066825b6790e39af8b0be8047e2266fc85c301e23cd1b91a62219bede9e899a8cd7aaf33f9b3916fd9c35cc49a9d1c2abaa880638341ed0263ef5b3fe1ebd06b5b3d12e01ebba2cb47ae4733d4a3a4b97bae6e4ac4f3999ecb4c203879765046a52311020f95143848f8e0a1eebdbe10f7833b40936e3695a31def5bc74417400d45597e72e52006845f04e24ecb4d95a1373b69f04b30146ebcdaa27f1e102752b936e1cf0ae074e9fd1a0195fb7476e938f7e2c917ec140e0269dbc5fdcf29500bcbcb5618df0aef2835ac41fefca280d51131468c82586bee8379d03ca52389a6d0300452192bfab15b9fc9c50854708330b6e7531042faf22155b89226252bad5b3ce2183b9dafa3756a09e23ce6b05f30d1048f65a08e35419ef53aac74d6fa63abeba3481c2b6835dc15f5fa414e3ab881fbfae8dbb80a009f6be751a0a51c931190ccdf2440ee1fcc54b8ce4043d90d9e8e56e26621802348c6afb2f590db40a316bed4501ac056546aab32d0ccd6d4485a711f1b83c74c9ac03140f3fc71362b6712e10e0de928f1b34c7826cbce047d6030b8c805b431104c37814023bd6b2a007e8206d81ac6d2f5623678aff9e467eaf1f0ef555f6507b43d59e48ff24b14b4e022e5cf795c4c84887cfd0c4f129a3dfd6bdb3f98da93eba9f404e45f31b66033b7b79f5fd35d6ee8ec95c9078a31f9d7c50bb5ecb1a3da93c5a160645c7c8c2e5430e858b218acd2e9336edd981a7ff813a598e8fbb23dc298ab40221484b1c074def10beb70f39d51d71e83bd4746e731d9bc1043933597cbc86af2b26644ba2a4f8ee3bc444140a2d3b208963c63e020ef69eeaeb912a0baa48724594c6805fdb98e6e9de265cae550620778387a48899d337957b722158a2d2fa1eb9739e466ef78f7057f4fef156202bf0ed2fb690cf64def4849080c5679838f80be3e3e50bda49fb4849df623533687fcbf42b39bc8dd0815fc527261b3e1d2b4e80a6b4f2f48e5fa30fd49a305ed179f329ceb159eb640110c1da06603e54fdebe48c931c06d7cd1f48f1f183628bed66a1832a7a2e6c23eb4c7383b7bd23f91185df28031f756fa8f284500670390cc24e1122704c0f9b4c3419b7aabe237c196a8719bff50d7ac053644dfd96240bd14f5ebd71719614bb5339e5475d2b8a30d8b181b51d92f6785fcd98942ea1b5cbaab45d53af55b036186abcd5363811e23b1901e2d5668318601d120c6555ec40e73e8f45038897a879da857b5d0b8b2104a25da8084871c6ab968607c756896f1f122b332a7e44be3ffa3f012b319bb78254235d200d978c0ba246e00f3c44a3d295399bd9ccdcc385bb51d259af310b4734473db012eed66282ee277588211a32d3692ca564a6b595367cd23a92573441251262a210c2fc75cac78432a16c727464a2edce7588d470849203b13aeaa25355899e579eee90b017d9c6c0c56bb4914239279cfaa5896c80f9d130ff1152ad43d602136c835560854be98c8c0540d5a72b829d052ba92bca4dcf4d9f48832bcb33f62a396f113bf0d0db340eef0a2784672ffa3d71fda27cb842c3318ebd456d41cd8d24b4510a51fcea83a65ecca131335a80573bdf558ced5c0369045b2984a4110a031611156686dae224d4339196a90369b17c69570d1afc07646591850446749a6d108d2e9ae96c021e1be5bd591f2f5d62d5e85baaaf0589476bc5473a2c905593ef4820758070907b1c1a1122be7f6cad640974050626e3d4939e4e81acab794045171460dee07b101e10cd54fa35414e32f2b6fce386841dc6d8f06b849dbfe7b2840588f571602bc07d6ab0c6af92324e2f8e36fc9e337bfefb3d4ccb8f488992fbf012e096aa03db03d8c4ff36f129be939442bd1276e987d0fd6ab4f1700864b3e42255bc93e24e25731657a0916a9038255ef2b945d296df8766d035af39c9a3be40b8ce289d07411c1492022c8ee0324a12ad796c9c3f67c0ca13795329a016dfa60076a05b88161facf3bc879517f2ec4ab03ad99dc209afc248db66581e7f2dedfd0f5b6de41ad2d9f853f84680d3a5bca45304002479d783f42bc78e5cf8d081705c60bfafef714a0eb4d096d545c76236e84c68097ff62a0f2710a9c160b371bd31955c119d57b23e4e78103048a4807796de64f3eb174c29d576779ea97d1b9bbeca53f8a7f118b7a2a605f7142904197cda018b218b5b011a7991e00226fa2ac49ecd15b3017d49c2798f184eaa7f5bce32aa5561f800af4cda5163c7548296ecebf8b36f8da7659b6d85f4e23e86448be4dc6035d54b54ab829c6423b086cbdf5ad94dd43b212ccf4c66facc3fe4db9b482979da4fc35ec1ebc9e167ebdd2bd8b4c0c944c4f47a02b2c436e1d5637940081f89fd90975209657bd8e32cc39b444537456a570574b3bb9ca97458a5f8da924da2b5c377b8c0bb0e08b0b6218c27e58f0a20d5190e28a70c886d424511e4e15c019739446ad3ec8ba8fc958f5f004be2c3732e6c62258aa8b6082f43019d48cdcb39cad76c4a5e02af56ddc47ab2a4fbf88031ff0deb1a20f504e07594a0c91e194d6afb3d17882ede30e89d51acd924bcf613c4483f21d7f2736802bd723a29cbeba1e0c1cec920403760f6f5227b808e89b4bcefdd03926ef96e3450eb3df8ae94833078f2c2fcc8ff1f09c59945cb2bc57433d9148b71bd4e6bf47f07ec5f709b32b12efe1c25b4b8d58c9c20027de9fff425ab5053b389231e71832312b3e0b444b24faa459c4bce057cfc805ce8498efbd3a86aaba9b6fcb7494d43196cd3a67e6fd72c835b2cae337e6070e7aaf2c97d662b9983f7d99e956e4812661226c476eda0c82b76b69e0c1f8427aeeb77b0ee8891ad6c5945583e014304fd8a12067616cd55e88c48b02810ec8e7f9b91ee937971280dbac797c1540282773c973bb067227543fc0cc43f169b10091c372e1a408bf99f291fee8898f840778b36d24089f13d2e709b72b331d56444929bf16b3472d82e4c43b0b22a83876a38b11887627d77332ab6beb64fbcbdf66734263453b6983e7d07bcd5d58c9bb82aace2f6aeb345ff64d25912375304d9c70cf119b093d0acfa5cee20cfa16ba3aad6e69ffd99cf7b2cc27b0a292f9981fa4a2ab6a17de2021acf20ddccb73e655c59a8bd680556fbb4981fbfcb50b117d211690e3e4e8e1d715478599a9ff4145d474651474e524dbf3e7039d46d1e75c64b0cff146f65849dbd23db8e6104f414bd0c8395fd88dac2f0f00f115dd7622d6cfae44e2e94a99974c32380f57d97865362e401bd9d7786895ebf70fbaec09131644e92c5088f51ecaff35503761ecdee105266b64c28ac3cad35dabcd2f5b21eeeb41661dc5616383ac42ba3a38515814c72ccd288ca109bea6b57143b6d5d8212b984c160de6136328065c7d1b78d977581dcf437c5d11b173032207ff1864315c98400b761e790cae372a544f441a5027065d7fcd05c982b0b4377b5e40f1abea69b423bf6f2dfd773e5893313c41c24ce88cb3f36dd6edb60fed086f6e7f6c42eb59100ba95fcae70bd30c536ad5fc462ea65e382765660b347dc61a23b7d97adaa24f487c30dcbb32670373a6f5fa72a23195606405c32e27ad1c51b5702f7b61f641fb3656b8e772349d93df74e9aa3f175ea3b0395c9341a363152c173bcfecf462b7af63a00acb4e3fc6637fc33e617e668f00519ba3203594e616227f2f79090fbc6702ec6f27b76afb474b54a4b1ed9cf98c65360ef2bf758abb10cb4eb902528c30a4fb3334a9bba165bd74122fed4d4929cd24f2dd5939b12c74c9a0fd1c7a9781a345fe25a6dffde5685fc987f1042b145edd946c42b411a67d617e4a84991f709003ca0fc1e04815f1be81ce8199a0f19476a86c84f22aaf875e9025299587cedc17f68e6c8cfb2b4acdbf8aae7eafa8b5dfabd46e8842bc393791d978757a7e21a8b2559dbfeb4810821384e8c94342e8566f89a18390804887d4cdfb86104aea92ca7a696506b682d5012962c271c645e7a07fdada3b0745da42c21be97d748fc810fab636d98fe653794ae4312799ba9b0f4b1a8b1ed1c57e3c3f4c7d3e94bbdcc2b45cf588f4f37494709916f0bfcef593dc9b26c448394d6f9d555be23db2998862642e182561f56466686eec99c2872733fcc9b83d99a30fce15c43e99e14fc67dc4461ff04ce1f370c362d9e7e136cac43f02f7110b7f32ee237694897f04ee2316fe64dc476ce483961d80bf7f54777df7064b27fb09c70766cd2dc9fa7d6b2727d5b90f22f4ad6631627763f0729d5930c9ee439b9311154f03fda0041a90891bd0c8ec999e93043fb0a875ba5e6687f93bf45e0d69bfb314c4ee957e742fce3a45792fbd9d2bfcad31f6481955b9300a260a730d2e248ea6fc1f13f38767d9626446bf7c8edf3871786a3f32ab14cbe7f88d138767d9b1c514cde1fe5c65359ff62e83183abca13be94aba5b4f27bae9ae3947ef799dde5fe1b18b63d982d68be91dd3cbee1c50057977453496137b77d2b226746ec56a4917b4a633b45513fcbaa76d1520d1ba0e27a690e27782960aa85fc72bd98c7e844e4707d182c875b4964ab69107732941c18c1dfa88020c0fb54229aaffc09fdc02b91fb7798ebf59999b4196aa02bcb742662f2245d84012ef7f46ba532075402f919127e988721834b99526c25a656b0efa38a3563416855abc493c85deb74542cbac892a3ac2458df96daa0b7a49a8cdd16b58bc5791aeb42328b06e89013648da1d352061aea0a025a1b3b0727a492c219d27eac781e656606facda8b71591dc5bced878ec102ea4b8552bff43f6dd3eb06b84225e60852541f99738e50e2039a98fbd3bdee873e68bf920e29c9e0092684fb72c81714f479c56a444283ac63353ab32f99ab68fc27fcaf8ad43ef46adac4ec5c7c98f0381cbabad4ae82f58e38cbf3dc3a666fa16b1a9b4e7a3d96dd454474c005e8174483f804e39452fabfc5e4ddaf5587d8b98dacd4d6afbb7c9e6aca6bbc0f7e155a6a79fecd2b1a8cb549bd79e5fe4a717a148f15a679c895ab20580240d2dbd8dfae5ca7c2d669d1f97fe435b816450f57be587af40f707837d46ee21f53d78dcd8d4ae12d34061b0068213b9dbba8f85e35a1c197cc4af2afebd6d64eca974cdf02d75c4d166d45f645803597e480d669f88264b23059c8817cc9b5460f77c01b86c177abd58c4042c59db5016433264e111bda366ae19b2c1aeca359e896624b41a7ef19dddbdbea1c9e69b85a0db2630d00a9e3d4d3bcd225eff724ca94d7c24a8b21ae2d7d081c84a7b4d6057b7d7539d6b54ef7b73e54bc3baf1474209987a59ae4b1fe71aea8aec7c04047f4ef59396c19787af9575af41e62bc4df97c6ca010c84f1c65f3257b53d26c19b3bb72168fe2a746928417f091d7b128a6f70403a51320bf35082a425573a280d4da047e64f95b327cb036541fa134d6d5c79d4d57a56cf80f1785ea7d381b49dc62060246523df990b9c994b11e2b1e316b4006b125c0498fd268dcced5d57d2afb2f1cc891731dae907aa2410f58bde0ffa1e48e3797b3092ca35e788d4e84b72864eeff7535cee8a155d40a76f996198d1ff39b04b49fb7a5555a16c9d13d47bd8e141d8a405533bf00a52ebeea4b65381341f0ff963f1d773c35e1c5f8e59eee99c4ea6624c334ee1f6aa9691d47d140e439022b282a86319693acb8ff9ae0dba759da7d112d104211665986d2ca17e968e83cd4f8f4c89da6e52b53b646d7d87c7e3e6c494486ce044459045e0fc55a105010705a9303003088e5fb06d14304648c31495b2110e8924ad162519917daaf2dd96f48969876449d999929c75bff7bf5e52d283ed72d5aacae88888888a4e87aeac337fc5af0048a88989a594bc86e193b129c12df0d7244d143097b7be861041fc0e1461b6bcc60e543650b2d98241902c9d5524d60829121342ec8c4281180283b7be0600739d8210be845174444408e37d890810ad23043034648403c60d565c16d5270021e41e0c10e602082270c208025028025ca4e114d76d06106194e608227cc28c3000528e5808396daa10539e260e2a7cb1e7a50610a4b2831830ca33764100316a8208d117c200b2c125012401257a2ece8b0818318dc00055e3801c20fd8c0810c60a0821464e0020ba0420a27e0f1060f5490821380608a2ebeeb301905c1c38e3ae45803062628011a646c7185ef25012ca1c4151d26473222a3206ce0608d30bed8620adf0560844e132647b21682889e1d75b081031ac4c0042540e303647081c514598cd0417224bb3412113212bd3deca8230e1aac11031898a0041f20838b2db0b8628a2194b22c3184115216b0f0e408175a10020e5a58b1002c576005ae584010170ff8d823a4c795c70b16ae2bc87040b4818b8c4b0396bc62085aa41f45424284301976b870b06e88b1215483458368064b061f2f081112a211b910a4059a203600a9e1070e33231f31323031170ccccb4bc87acf0612c0973a6d2a23be6bfc945a3da1c613d440821a2fe8c16a30ec8471a7a04debf70aa0a9b1a99152a3e73d0cc90d5683e406d3924614d4d8410d18de7b5dd0ce42229194d0710263431a17486dbeebb4cac8d6a5a1d37842648934744843e6619dee34c6613a238003e3e2bb7f7404633c6e23191901d0083ab6697fd31db7bd67e9f19e95c77b5616a860d92102fcdecb11c3c1b66dc583c819e79b6dae99e699658e19e68c31bed8e28a299e58e28821ce17df7bedad97de79e58d17de6cb1bdd6da6aa99d56da68a1cd15d75b6dad95d659658d15d64c31bdd4d24a299d54d24821cd13cf3bedac93ce39e58c13ce2cb1bcd2ca2aa99c52ca28a1cc11c71b6dac91c619658c11c60c31bcd0c20a299c50c20821e402b98df4b34a19e97e7e1625666c6a666a0a801500230086d9ccd8cc10c0bac27b9615a8804614b0ac8d9e0da0210134ac40837bef61594f0f96cdd8f4f46059f73d0ac3667a8860ddf7a89a1e244890f08006942798cd90215adeb3aa40053466c842b04608c8781877f2286e05254908a6788f440a819610f451083a11ece6068b35980e365f14f12c18aec4d0c40202044bdc4882453a4ddb54de1fb15d795c705b7744c3f6cf6ae398c6b892d6a54ea50e34fac0933b7e70c60e1eb7c5b184f72c25bc6725e13d0b09ef594778cfbae38dce308dce58c232c27b5611e23883863380c421c38619aaf79ec482c0545aa5b965c77b561d4418021d735872c4312a438bf760c7adb4890b130fbc74808a0e901e7f6f0d32b4973a59d1a4685d476998dfb4d3160ef35bbaeeb46dd974ea8499b8e6409ba7824921a3c87bd9064658a729e136524fadb25269278a0e95294cac9498149133250a0f955229e3e24b7a5be9317e60757101137ce0c8cf09e3f496aefd1c09ea543f5e9fb64ea5755877e2e2b1f05d102ab5691ddfb59d244bfc69e3c17a4a67d9fe596d4aa0d080d6e9cd77272030f034de88bbe08df80ede88cff1463c8f37ea33bc51cfe18d7a7cefc9f0020d0d131f1e0d93ecd13041e2d130e98f86099747c3648a47c3a4018f8689041e0d130c3c1a262278ef0119f53c9a91f66846503c9a51158f66c4001a2133231b298fc6863f1a1ba047637380476383c5a3b111e3d1d878e0d1d8a4f1686c62f0686cde8001080d4d10213c9a20763c9a205678342dbc3c9a16468fa6051d1e4d0ba4f75e901684b8e0438047e3838047e3d3c5a3f1d9c0a3f151e3d1f8b8e0d1f8d4e0d1f8e8e0d1f814e1d1f860e1d198823c1a930e8fc664e4d19870de7b2ecc2024861ea047d343c5a3e9d1e2d1f468e0d1f49cf1687a5af0687a78f0687a90f0de73818699f75a78011bcd30f39e0f1bb6e86fb405f7465b58f1465b5ce08db608c11b6d818237dac28d37da428e37dae2096fc4c5cb1b7141c31b7141df880b9e37e2c2bf1117406fc405166fc40506de880b34de880b19bc11173d78232eea78232e98f0465c48e18db8d0e38d18f0e38d18f003cc0c58e41b6139f2465872de08cbce1b61f1efbd1f40de0f191aec008f06dbe2d160603c1a6c8c47837de0d160277834d80b1e0d6683f71e90179e0d415dde28c88a370afae28d82ca78a3a01abc51901d2d04792f427ec4fc68a2118f26627934913f9af8f36862138f2656f168a2031e4d8cc0a389207834f1058f26dae0d1c4373afd319fd28a508117a060059709d0b862c6bb3440e2d299563e18a6d234d4151f33240ec33addc4c70ce9e747e31af35bea07698b88f57478cf92f2acfcac17903012038627703095e6a52d3e65c1f7ac1c0964e1e174af529db68ecb7e38bde5e63dcb07ef5970583dc8a458847b20144aff70160fa630d9411bef8974d0c6b631e9c152397837f0f17e2c37da78ef3d800d6e234920237ce3b89486100611ef89c2108dc020e2bd178130addb561d437129bd759bf637afc2c000c2c41770bc6ed92f4c0f08a30854e17a611401d8b34567814014de3ba1a8bc32a680030230bcb7a4f79c1fdfe974af859f8ea0923a694604a150395bfc0ef7d33b4fc5a35653b6f89d2e84d045962e601ea987e3a2a170d1507e561cc9a3b46df32a128742e590304e777af3c1525a8a07db569d66da92839d388ff29d0654c4a7340ca54f3aa83b6dda00f44f91cdab561ce64d3ca8243a6da707a1503953b49ddee9ad082ee749a7ed703fbed3f149694f348d87eba955939eca59624450d735ad882b264e3bb1d2693b3a49ca039d8ae8b49d9dee394e4be9b41d6b678400d316ef3d26180f29ede4936881079669d1012dc8d0c28947c270301c1eae6841b18c07affad122940514b2b8e385c1e5bd770dc962e6f994b6d369da941516556071002c50232cfadb7cc90896756f842bd96091048b225886751aeb3e752afd702e9ccb15565c1134ba82e7bd47a484d258963a51b1e28e97d2be5f62e2b4930ec40af91e29486f2bbdadf468015a16a0f352abadc36cb4cd37c19d804e5d8f040479af891387d22b26bcafe3bd97e58d1450e43dadf340a7d42975d206a0859fb4f4ae4b25bdadb4de560888c1a88a9e2d1da8c21ba3030441a57f86704103d438c093d785e58267b5a0052c78cf5a810adeb352f09e8582f72c354ef09e65028b046abc67a5a13bbde447e1547ae3f951381f2d0589ee39fdc42775e241651ac5888bc712811456785c6a5b75259fd300fc861d81180e36e588eebba6440a2aa4c842458a1829b852a1923aad3446e25ec561a8ae8726b8725c0fb852a192f2c14845607b0989fb9a89d34e3a6eeb38df515a0df78341217119070486914c3d5c47a406f31c4a37c1483d3f3ad563ea308d8bef52fca44afd1e2236353d26ce7fcdffaffd70a7943671ff83e9adf3401e7542f1229dc9e784f2499df8499573a379fc5683611a0ad683c373d363ea4e5b7ebca9fb5a916ea5611a172d09462a923a61563429bfa3565d4fad30d2e66d9c60a49e1e2a1889083744a57f6a308cc4f9af612a0dc5a65ba950ba26c5839196e8acbeffd13bdcaba8a474341eae7bbfd3718d47c99294b6a36d3e00296da7fbf7b2814660e2b4695b693b3ee0e28211a0c185025c1ac0e50a2e5370d1465c7eb8a09e4ac388fc50630423f20366f30396a934cce6072c558361990d87655162c4c50a971b22353a0b6f8b099e37f52da955dfa2a17e152cdbb46df34f32265374a79768dfff68547c4adbe1b172844a43f17ee349320242a150a75f52715cb7d23cd7a53c902f597bbc6b889513cf2a41ecc58404074b7954a9fb1e55ea286d02523c519397f76046d0711d438204e31b3745978815418284e47dbabfb8116782f792e0d1519223254709768371e9a79c3d5ede680f1fde680f1fc4dbe1bd21efbd9cc7cd1be541e58df2c0c01be531c71be5b1c71be941e48df488f2467aa4de480f2ade488f0ebc911e76bc6785f12c2a44607cf1b252479d4c3c7bcf8a80ccb31a2085cb8fb635e93e769c7e129a001224d8b6e23d446ab46825ee4422c2614e102961365c0d104e6036a5a05d2a91b8d429c4a46f9a73a725394d469a1d23ad3f52d7de94653d4af4f4605fe3580e463a2dd1b690b668d31614ead455d9b690308e71409ac37a4a6b0db535bf85d35bf4a69938954e711a87d21d67a3376f3ae9cdff7893ca934e3fd8294b4f8f12dc89eb9b96d2c148284ea561a91cecb4759dcfd2d3a304e6ff698b4f7d0deb29a534bfb12c53715886695ce39ce728d4290b9325519464590985f25b94c8a204e64d9d4d11cd87f340279f1c8cd4fd0995d24e3a558292742fc5e79444d378723a6d874aa7ede4683b3d55850fd1532a75de67c78904ca32eec46d5e8a0a360cde7b3c046d27bfa930bf7fb42ea54d524a9cce163de53dcb8bf7ac2eacb01c20c67b5603de7b37bca037d272701bc9f394e7385f2271584ab3d1db2a07dbb42658ca6bd9346ec5a5bce73413c7b695960446e236ad52696cd5b54d85051184dee29360246e88cefbf4d3128c14821e21bc2406290855daa524de1b32a44b796cc810ac7b2dfc74c4a6355155e136529609408b478a4025ad2b41a02922b0b210007def69ccaa42008fd318c83283cd03511192c50ad2a6c9f2e49ac90264c9752d01c633b244cf7ba4ce6d24af0497a70494f70280c7eb3d5dc71fd1e3b5784d733da594d6b3698fe218d7799f94e61a87a9bc16ee81303f84f3a60eb3e1ae602793df984fea74e2a71f2da5718fe2c1301217e48fe841fe086d67e78a15ded39db6bd2b686cd15247580c78cfe2c2d2e23d2b8b37baa21a5de91616ef595758565cc1410aca03f9272a8dc70a1caf9fb42a55c54a17ef6159136e64656764058eaa346154e58e52a9afb852f74d9cb84ef97731a08a8f01a44edc9d339eb8206e23713c537896f0641eec61192f9dbadf94782d9ac7caf2dedbde884a188fdb4850cab9454fe93a5c7c4f8da6a8a1002904300572dae69be8daa330adc3fec9c45957a45848bcf1deeb9e09ec089c0290413f9b96d279ee0e23e891071233ef3da8d21df773eab820af25c86b29711ba9e3951449b348911f8e05b3b9d9b426a8ad67fa49b39265a55229e57b3f994a27952ea9380e277aaed34b5986c34fa8bd92a252e5683c59e63bbd711f304e637a5be5dce86da5716eb8b772dab413c779ff535aa9436993073af974db77eeadfc702e3838446a706eb86849b2ac7b2edaceb29e3a1d8173c3bd954deb70a004baf9e158b22c02f59f55aa54eada9b4a4cfcf425442c79a4ae048e1c255ef491929ead8b0469949297e48c51922eef3d6d2709f6b8ae3bed9349db543933786fb5adb81c2d1e298788f79ed661a31c1e8868e3a5561ba675a72ddc09dbaa138a882c8250276dc7c46993eef49221b030440846433c311a22cb1041709640f23f36244c75ea704880c3493d9a694bcf49ab6cbcff984d4f0e17fdd353da1e2101c20889132324f83d5290deb2f9748f753a87e4b795cfe963dcc9e7644aadb613d7d560be9f90d460375edc387924d426b26bba07d22622bae6067b8fb4b123691ce93992433683f7485c4f0fa6753d5cea04a507eb21a534cc03698ff27e49a9a7b4dd4f3899eabd9749c9e0cb68f0198fdcc67b5c16a3f3414b74b0cce56129cd55c95878f290f75e0a07e19aebc6c5e22671f123f560454858104aff643d3d5811cea6c06af1deeb569a118e34c5f6707aa34a826ae222f6b51c8c94d27c3a4effcd6fd150580ec9c4b58aab33548dd7c3f9a44e2aade3308e36194d248ca618ef917a8250dd899f502a2e1eeb5af3d91a2305a5f43c329a3c8ce409deebd9bca9db565fa56d5d363192354fc990f88258c6283a79af47ebb08ed2ba0e89006330820b78eff53782437a48bad34b7ab04dfb53fccf8fa67f3acd57dd6fde47abb855a74b5dca7338264e9b8ca861a4676484886f4486c4617a8a132c45c283443ae3bdd791b8bc4752ad4624295ab4110993ba4e322a824711385ed7498a2ce03d2959c63d5096f58e2ba9b8aee3933a75cfad4a5de7643303ae633ea9938de93d1277b2a9215541080b7027215a10226614440b82e86214841641e88c827081881c23222678ef91a260590fb72ad283653da420fdd3d383719c5639e9da0369aa1217fdb3532a65c14420098a122c35783c52cd0d6ac0789c0fd252a39a5d43f388d46043ce783a673484cb101e4640ccf11e89488f073a6929acfba09a0ed31e15b489d400a10569d3b6cd1f0142ca0f96f3031eef3d926a8571dd69d3f429e707387eb81394d10f6afca022d904a136ed79463f48793fd08c7c98c123713ddcd7b40f08e019f9d0e3037e231f6a781d03000e3d2c61d44309de7bf98d7a8062d4c3113de4c0031078f8000f2b1e9c8c78f081d900fb0253614a603f7640c268870ebc243fca4d4a3b4d8912b4fd14264e787498f818e4b594b28c3b490c098e0cda2bd44f9d306ef7100946b6ac9feff8a5a7716f0d4d59d66d599665484878f7fb71c5926a6f75f426ad94799e8a926a926559c6a9b45cc4d22ef99491f62e3387d09465280de44b1d973a599b3ae7f51f4e992df65c4753966d3e25c4c73b6fada5aeb05738a529cbb8ee3d57eabc4f96e1609ca63225cb4a3f5a4fe9cda46fb8204adc6a2b956c2082d5f430a4fb92ad3208207e74f861d33a8d830f3d00e077ab1c7a88256f2af1b0e96e0856c30e36e810440e36e0a0c30d35d880430d3534f430c30d32e01003b539c0c045dbd2e9f082ad520896b154d2266cc445ffec40134b1aaae4933af9f868a81a5c98b0056e4810d9691a90aefd56f3c366a6f33e437c442e08190963628908cc9017090051e98790fcd178c96fa552d462ab5471cfddab5463c552a954eab878003c1da690018b2158fe47a74432609184f71ee7815cc8b8934a9780585400f9f1d6508015392f0a28ba3c41802682b86c015a75dcc6844a4bfda0b40ce064f2f9bef3ad7b4a02c8b2841201b892b8b05c41e28de2c0e38de4e8b14208f8f1d6a8628a9c2744c90b33a0c27b2f482524c97bef6dab4e732594e63612370599f72e29e474621041847745e18282134a4f70c2db3423428640809021ba9775df693e386a08c1a9c982908d9193f09e9294ced6a5aaa050ab26a8ad3b6da7a334274f7c13272a1c133c54da96aaf273d228255ee3e1bc6fd2693b4c348d47a5379eaeed08b17734e1bd4b074c70a37b146ab5f3de7584c72de1bd4b074a7891ca0fc7e2af33debb92808423f8f7ae3b3aea740565841f0585ca79ef2a0277d9915afdf7ae3afae9bd8b081ea5edf4f7ae21743ce7fb8e83c7c5773ae81c0fcb61630e9e9c417a8b43085b432541a1563b188b1547d4e275cfc429a5753aa58f780edb29e27ffc164c7f94e77ab88d04817ee08347a486935698088166402bd1ca0fe7f2de05c71bef5d3de0c17b7276cf4f9a156e6bd271da3fe972b489c76f1a94ae73d2c16382d2fc943271cfe3814e3efe094a9ff8a9af8c8041a99cf7ae1bec40ff686e75c400debb7470e540ceee06b56d5c6c4019e48fb8ce40a170f0de7583207f04aa888e3a99945c36e836ad7aefaa413f6d2b9494f72e1aacf1dee3706eb8b722235096c1089465100887888d9c59c675d4e94a479daef8a4564d52abdfb3d888376ddb98749b9612d4b524dda6555d27a86b49b08c2bbc0af25aa85df553d7d9f9d152beff682939573838720a3185117ef34e2216896562a1582a168be56279ef0201c6926511e8fac07bd719667049a8ec44d1e151b253c58812961c28254b4810382f0271446adebbca78efc95c1e78ef0191e4190001419e20b2e489a0105273c77ba920eeea0007966031e1593fb04e80022135a21d86a86248e74366891020aa705981e601044f0ade0f4e08f901c8ce04240006185654514502a6a0828a0da70b727a5092a45227ec88c47ec0521e0531243c60298f7aef0901800c5014904cc10c0f2481801641bcf7b290f2ac0c218487391ecf164d898ac32beead7027550e7752699f144af573c286c0f38ac011821171821dd8e83c95aea584ec6084101dd0d041c97b4272c0e23d5589c3210f213864ef85e1854feab48003707eb38284d8607acf771eeb6e5839b0c07b2fe55551b41dcb6fdae74e9b8d0f1f3e7ccca47492a06e3b61394268a8820484d08085ccf0ae0af850b790a1a68b134f87189c784f771c057e20000c6d9484c0e0440c19bc1a84bc80434a889036de4988901e2142b0f7b8f494080a5b7cea251720b5848d0d121c2418112efd54d37dff24cbb628ddf74f300cc3524b1000e3d24f25efd37de90d0d64e0a50b1f243798104d442a10e28290166c20a40517debb2020864f693bfe47a32286902053bc774de0bd4b02ef5d613c21419600e3d92ab52d3c5e8b462541e9151328eda96c52f4e6f5c6a4d65a6bad94524a29a594ce39e79c73ce29a594524a29658c31c618638c5042092594504209259450429973ce39e79c33c618638c31c6f7de7befbdf75a6badb5d65a5b6badb5d65a2ba594524a29a573ce39e79c734a29a594524a19638c31c608218410420861cc39e79c73ce19638c31c618e37befbdf7de7badb5d65a6badadb5d65a6bad95524a29a594d239e79c73ce39a594524a29a58c31c618638c30667c6da55346283f3aef25f1de1bc01312e2f2dedbbc117eda7ccafb54d1361f80a024da8e3f2de9a89576658b86f24994f826b4adc97b1704366fea3a2d95ea3ac97b971753b41dae8bf7def580f72e074c09d24fb49df7ae065c0c78efe2620bcd75ce84c98f126ed3765239db8a732d9573023a2dd1a9953fed4e7329df84e738cd75dcc96f3e48a33094ee522b229cf77feb948edf56ddc64cdd76da1829a531d48ad3d8d62812e78ff89c38eccae2bd0b8bf7ae2bacc8c224003a544a4b982c89a2648749694a9429539894983ca9b2240a9412961c28599693f25a341e8f5a750d0ac6f9f19d8e8f86f2a9934f8a89122c4c61d3760e46f25840e3bde7e35d0570e23d2235d67b6fb3c6b8c20bb88d14b44b1ca7555d4aa74e3fa78d73a78efdac521ee37e38bd05d39c70ef5d56debbaaf02ce97ed3b68d094a77bac97b179529ddfb4deb54411b97b3d36aa9156678ef69ae734fedaa0a516828aed350544a2a95ceb2928acbb156b97154c80096b18a4c1853b0c17b54c83ede53bdd114869c3696b1c46d5e85f226395758c6951444906525151745c97bd711a86d63c235142a270a4600c016852844210a50d001148078ef5179efd229e2058d9e30851376f05a183d8106ad3212d475dc6a0af6e3e339ccd469158642e564d97b9793ab08110e3cbc78f162851396e0f182d7842d2f8b9c4c20c1c34258890944308188f7b8c0032c6105a5d112c0580256c20c94d001291228cb704c9c76e2c3a5b6681da569bcb4994a3fab949cab2fe45ce1e015125ee0a86c0d95a433f9e1587ca7794a53d275b2ec8623c8f0b88d7452e9521749bc926755607487ea873b649e119c3032421bef3d0cc90d86653d3d58c76915e6794a03719c9bf7ae21de8583e48763e9a828a91cce53f13ebaa35204931d4ab0a38c9cee7f7ca7d39daed4f1c61bd581005d0726c21d8f8469227044d8deeb72ae88408720c77b244e63363a182988f349a495544eb4b2c5ef8c8680e9b8c1888e27481de77d7c561ca74d3bb0044bd20a2cc152b4c2f92928540ee74e50bc6f4285a79f94442bd04a96c9b93271da64e2b409080707db1b39ab745c4a5382d9e0d50db52bdf358e33c78ff71e0a95e3511a0c9603c87bcf7fac874bad4a405a7a4e5b9120afe5bd1b4994048bf868a87acd378aa30e19070fde7bda4fe904a154aa1ccf6993141e9fd469eba86419f75de372ae704a9b5771d13f28dd69dd0d17fde339bdb9e81f94e609c213384ea3b2ccea001066f0b8d3919ed2a6957a92701b89eb4e3f4580a0e53d13a74da61ff4bcd76d9a89c334adcb3cb77920bf5d1f6481db48fd880fac78afe37caab4f9ee54fad1b66f847ba0910f5446501a8e2d8f4422f1536a48e7519df69b0fc6a13c5086f2401e55ca9ef75b9394d7a2753fa50325484be17c12da4ed77ee382b414ef7f890bd22a8ed3284eedea8d1c2e207eb072f9008027814a3da0400fb4788f0856fa7eabe9c10e6f07637813a79de0e0dca07497d2704a59e64f5b5752713edc8fee74df917395832a1e0ab56aa2ede84e2fe15027ddf9255aa2c8b9d2a8124ad37689f33844301b36ea78416c2cc186e8bdc703376584032f4638e86e90850b86f7ae172e2137e0327a3668c3063d1e87884f3f6d3b07b3e93a37dc5b2122e70ab3917355c399f82931f1d34735c05b6840c60d6fcbd5c2688d138cd6c0f1399da675eda7a0744751f14d9ca8a474543f9b13254c543f9b93f7ae201790ebc77b254f6509187821083c18a20247b0638d317c70a3440c304fc8886066240236b6c04cd0c49582c20870a082086afce002154f20c0831641a403c240038d224fa0e10134e08007642c31400e781480240e98910c4ca3185871c5bc77c15ca22b34828113231838c90215485ab8d6366d0788173841ea3c87d24c5c60c6d39d5ea23bbda4a7fce6bd8f96326ac10bdef5523e2794f64d04e9270f8f2e3d2fe627e68990582fe6bd8cac98e782f52283d582252345f7851a20d221e692917911852cebcd7091def52c244443582fe6c8cbbb9e6559a1cb8965c558976585609ab8accb8ab9649862593056ccbbac20a4d0050353338359a2eb126961892ceb9ab1a470593ede8b25ba42deb2067059d62553e5bae1b22e18d16525e1b22c98cb42c29ac1b242978c0b5e42312d583258560c32214b0c0be6b2ac2b54b22ed18c0f7a01b17064ac171f4248ac98eb12c5d0cc7559445cb0160144f10704ae277a17062c51a846f47259a1f7e2006b08d6bb1e0d0dcdb39e25b22e8b0996cc1584655d2fd715b2ac6919b1642c20d7755d304aac21d725ba2c1822fda84106082b88101bae2eac97ab064b6485ac7749b9b0194bf4ae13ccc37aac2b428f0717588f88185c210bc612c55841ac9017d72593852c1cb2ae4b845d407cd4582f961503457107685d333032976559568c6565d67501210463f9b8442120ab876b6559a122968f1f972513635d445c3a5c3a5c39845ee8592e5830d7650511d18444570dd775593096e85b3e7cb07ebc5cd68bd5c2b52ccbb26eb88c80f9e1e3b2b60c9098cb42c292b1acd065892c27560e57be70b87e5c31d78b15b22eebfa71c588acd04bc8b2ae15b26a2c1f1610cbb28e583a5c33a1184b46645d969559168c0c170c96e8b25e4456be7e58a14b072b14ba2ed125b2f27559365c33960f4b467459969559395c3331214b2423b22ceb62160d41c8dc848478b142960f4b4483e5c347f643891b74b00020b2ae0be68af1164d0cf08713cbbaaccbb2ac222fe6a9de953d2c3caea41e66858e3bdab0428121945145d301a9d031c79bc2c30f1e121470c323a1d9785228708230a4f0a0458942c700f078c2830e5028820e1c60a6000d46b26e8103978e203e5c1e662c4b879587edd9430216d3e3917ab0a043919e312e9b3932a0d960300821c4b069c20e3d18901db019843c315ec8f27a5eb67898488af742efbd67ed71e58814b80133c5cc0f35e8e223464606666606e6e54728071f31a197500c4078a0d8e941a6066646068b80b8608980c42401a40b0509d1bcc0214504bac0b470c5f810d904c90197d165c60a902eb269018a8bdef0524564c1dcb4a00b92274b46525ca219d1132254e832c714d64b36da8108282e910da1223ce822041d5d769032450c2e24a1225404145574a9c1c715203044a04b93185432dccc14badc743e8ae8e18226c64728c88b165102ac804246340a15995018a1023e82e8c1143255e8a285ebc70b11a3982c3ac22b7146142fbcd4cc349901026609511031390a1250a08828dcc8c2c81441f81305bca0cb8fd5ff428a20d2052b8d2e355828666232cc8c4c0ba1ab5344288799263150e804a122e3e406264d667c380142a5df90a0cb0c221b3b0393bd100466e607931e0490812e33324e74d80be8f212a279b1609080997939021344ce103f563e86c838819989a921c8121f3e88767ccc00030e40d820431032353b538080624686143383ccab2325068828c686972c647d00110dc18888f111332332f27284081361bddc10e2e14506e843868732932334c8ccc8e0e342a164e70795a911f920f20166035d826841b4e44588171d7cf820c2c18518ca218a2e242356e8878a88422f04e841000cd0526694d1c60ace3063031750c01305e0c269f99ef70860890060b152858a94274638c9f0ac01e2070060a218c0608f2628c10843e0fcd0830d35c48871031b68200348301922cb2106203f605e70821278600c0d5cc0021410238c2a35438c90be88c01e5988c20e401398a08292c64516a78f736426668c2db4b83e7c0007196364d9ce00c38f1999181c6e4863044bf81e65c7089d264c24804502aa103247458119656ce0892b56aea50106911b6d40c10a0e12eb2306e603072801082af000062c800013908004b288b283736408100b0bd715ae2a88f0c09870dd2132c245c7cb1cd60fae37ae1ef8e001901d5c6e5c6c5c2708997169110dc0f2412687171c82d470cd70c560c1307ae145c835b268442d5c3f5e662e1f3232574ccccb25b2429605f382b810ba2194822ea22bba889ec00481593152808226035d5e5e80c400f10328441488a219805c8003300ae8227ae24386191c6890a28b8f24440108e9f0a3830122d34406c3cc848ed030f352832e326a74816109287cdc50184f00224797973dbabc00b1a1075d80743da4a08b0f1a5ab8628ebc187969000262f85143175188ace8e2020f2ef0102a32322243c3688f285e8490c13137211742373217e81282128dc0ccc074a04be8078c0d229b1f31648980886c669abc081193048c0d3033300300020310187cd0e043869824427944016343e88c285e66d0e58701887eb0d20f398832202ec08c4456a8484889484a101960ae982b3137c4ecbcc4d08205f323f42202120a85ae504c4826e46306075128a64a8c1017a4cc8c626062ac508c888a8c882c991a423740e16387170e7469a103508c604437c82c894214b6e60fbb0a7ccfdf6a8a65ae9e6bca533023dd5cc3a8e38f5a7b14505fabf6db62de21fc729f20ebff35e531eeef23d5d80411e359e1b4b5622ebfbe2590ba67cbaf9f74f66c3909348e52d67d7bdf95436ad5e071ff7921bfdb477b314d8376ac29f7b24e4f7fa67304bd6e6bf1fcd6eaceab9422e0f1cf8f35e411fbdc6b442353db7187956f0eebec2188b77abe75dd18430d3708fcecf9631d2df7b0620d7178ae0f60abe9cd3bd33eef9d5a9f41e3fef0de7ca7197f46b8f1a7d56218bdc4654ce8b7afba66ddb997df037ce6c9a3943552c8b7b71db8926b88b98d599a7054dab6c4c9c581eeed8ff26f196fbe7d6f00fbfa69d738eaebabd5990cbba18716626827859eda31b4e4f37e5e3194f8432d35b077dc9c7bbe2d9c96e2d8e4ca00d41542fa25fe1ec37927940b03145aee2bbd74e68ce1f4179810c67f73c4944789a3b6008ddbfe6e7bcc106abf6192ab02d4736d31f535e31bf3c7445c14c0fd475da7d5114eaf693565e151e226cb7a2e317a8c11e6bbf59f36fbea27c0a18d555a6e3b9d326209dc3b3db4356e3d3f853787b16fc630eadcbdc63a6330b096dcc208f9aff2c78bbff0bdeb2829fdbdea787704e6aef4677bff9512e64b21c0af8f704778e1de965368ca321c1c1c1dab8acb8b9c279df6f318ffedd3ea2ee8d7d1ca8fb1971e73291f702b85fa732c67ad5edf68eafce6802a35ecf6d78f23cc50479391ab0153c2497dacb45f79bfd5a62cbb18e061ef34767cb5f51bd7dae4e282620b7ff77c7ebdb9967f8b5b219e74e7daf5ad7d622db09db7560fbbc6f9563d955c5970697ba5d1db1aadc41e0bc9e59f9ed34877f4d8da2bfe9ddafba969bc73ce1b2f2b24cfd8634af9b711e70caf05583b758434d73ce3ff325fb914a02bb53f632a259656ff4ae54a40ed5b56d9fdadbc478cb909c7a7349412242e04c83fe98f3edfef738c5266190ef756ba2cd3c2b529cb88b8aaf0ffd238e1ef34f3d0eb003fc77d21dd3d6fcfe9a7918a3d6bcd9dc33e35c73573f8af29b8ceb5724eebe6b4d7ef995c52f408f39f3857af77be749bb20ca7ca1585d772d6f93be737cb2baf12171413e6c8618edfef58e3fe3d57976cefee734a6ab9be3f475396e16c6b8f8bfbc5bb7388e9d4512c3da2b6706faf33c5d5d7a86d1b932ccba34308bdbcd57b99a5b63166a157ff25c6d7636eebf4446ab00031c7197f9ff9be9d6348c5ba82bfd37b3b7ddf52fa3c21b442fd3c671cab97f0fbf869095661e62df1bcb0527d39a6b3894585ff71ce14c30b2fd4145f130e8e9cab52add2dbc8d9756e7e7ca753e5867b2bd60eac29688c7df4f17a08a38fd943296cabbfbcffc2782b94159ab2cc5b51a8316fbbabdfda574be1ca8282853f5b2fb5d5f6dfecfb13e4dc5947eeadef96ffba9d00fb9f72564bedc6f37a8d07ee73dba96f84b576cc7113f8b593434e3fc4945acf84deb9c6777bdaa1cf99cf25ec6e2bcdb9cacd67c65e9a707c56db2fe101e2065a4ac015639d7fbfbec71d234f42ef37fe18a3defe4b3b2d1220b45457c96bd5fbc61d8f10f1be927258358ef2d26bca329c27d61d7b7f19a7ce38e7db25ce502c23dc1c39fc1d42ee7785379bb20c07c72a4295995e9a2796dbf7eb61cab2034ebe71df1cf3ecaf87b40e3be3b67b570cb5cc986b22482a2f9793c2d9bbcff90ee1465c21ce5bd23971d694098b0ee9e3d5d6636b23fcf2fb3978a6f376fffdad36ca8ee5e8196efd7b977b6a2e7d1c53d75a61d493fa7ae18edf1242c7f656f837bd3a625f7910fccd9b529f798cd3fa798110f9b432dbed6de694caff03ee39e736f389a9ef965a1ff8bc2dfcd1f64dadc6757a0b0e2c6f9f15db5a2b9c51da37beee957f3e77ce50ef1997b07a50bdf6f9c36b6fec5e57cd03eef7f4b7eabce1d776df92b503aa2bb49ddb08e7bf306a1ccdd2c1b593f34d6da754e26abba05d32712b5596e5e0c65865c551f6cfb7bdde8d68b984ff7f18fbaef8661c93d5869f1f6f0fa3841243f9331b5c6eb839e5fc760d658f4f583880bdda1a719470f3dde7bec1e655db1c31957c6aefb129cb7088c02936100994eae754f228d5aa2b3961d9005b5db385755bfaada6bd06d4f3e9a7de15d6ada3bda61f6d6b32854583de67e730779c2bb69377130e0e0ecfcde63b1dad4be9d8f0dcf494efb830e15e4525cb726c6e2c29ac352e86725b0c6dfd5c67db4d598653ca62cdc046ef2da77142b8a9c7560637777e3bdff4525d7da6a62cc39962c5e0eacfab87137f88e7bdd5946538482c184cd82396d1d2ffe996389ab22c68ebb20c27cb7eb4ad49d0c693dda8ac1774fb7d97f56b4c79ff1836b1a962a373a3d2503a8d6a926529df751af537cb0595d748eb8f3d734a63ff2df0f8fb3de187fff26ef16781867a6f783f95bd437aff0a7aedd456ede1e774d7ee5550e1ed57662ae3febd739f0219f384d77fce27de3c7b14e06f278dfe4a197feed89f007e5965e7d97ead658ede04fada9965c4b64e4a2de72598dccfcca99efad65fff2681cc9bf36db98c9ffa5bb51a784fbc3d8e597b5d35d469f8bb37d6327a7fadfd368fe05fbf3df7546b4eedac5904fed22e35f5b77a18a9cc68481cf1c5b262bc33c63187c0cecbaff75cde2e3fec170496db4d319472faa861bf1fe8bee74c27dc96538af93dc3e28aa7949446e8e9dfd60c0c3dce7a53ea6ff6bbd73268b711f2b973f45b4a5c3db0ebd591fa0ab3f533d7da812e2bf47b52eb27d6bf530e7c6fffdcb66bbbafde7f6e607bedafe59eeb1c35f5930ccf7bae33d6e87b8531c252b7c6d053725aefc497eec9e7d440c4b3768c79cc1c76ce3310fb9e3153893b8d78660c70acb1dffae208bfd6585e60db9b7bc61bc6caa3ee16d839d22b73c53f57fe7705a4b7705b5f25cf36d61b2960ad95dd57796fc6f87e31bcb67dd708bbcc594a3f01df25ec5a6b59bf8e504309c47c23e6d7475d71ed1886b1e1c77e73fefda7df5e0e06e61d5ec9218cd75639370eb7be8074d36e6dacd3ca6bff34e11049629353a30ae2c150aa9fd34d9671252b5604aa965b62ad7bd550f7a94d5986c365d98e05816aa5c5fd66dba3cf5b4b532acb70b20c27894dce4d96a54e3acb36df9d6e5096171f676d37c698d34c3feee2726b6f8497cb8d71beff0137fe0c73c49d6e0f6dbf3818a7312c3746580ed059dae86184fe4f6f236f80a5516a2a2bbdd794655a571ac262c0a7bfde78ebac35f37ca329cb98dc585ce069ff8fddf7cb399e329ab22ccb9828b1b6f8596f8cb5bf5ce7eaf3d7627e3d619d194fa873cd3c8b5c37e7de5a4a3fd7ff5e2c2cdefbfaa9fbae57631db554e90a6fe18e10e76bb5aeda5b216bf5936f6a2ded58f205cc4cb7fc1feb5dfb9c5b01fefe3c29f5345ad8614d40fcda767aabee55ca1d3f022aa414dbaf73cf37c35ec5e537c7eff5c772d6c90fc0a59ef7d38d37e4964f2abcfdbc5bcc679f9d72e9a7f810c78feb867edf7ebf145fdeae318f5562dfa58e42533c27bd5ff60c7785c2d20dfbf676f3da2bcdddea02addf73e3ca7d94b2df2728a79bee4b61ef3f7edb0db0b3b792f3acf38c18db02e01c6bb670ffada7e6923b41b9d452728fa7fe3d7f02e08ae196f5d36ae7cdbd09993b8f98e62d27cd7807cd4bf3b5b5f7cd21b5984bc4135ffe61bdfacb29b74cebe38c585adbbbbf7103794cf1ee16674dfdfe7e15b59610f61d7bbf98f38e73db3dfcb4532b69d45ce49bfef969ed7c738937aef9f7deea0e2dae796a263ecd5c436eebe5f6daacca32d20aede79e6b0db156a7ffb3ee1939ced1de9484b95bacf18756565ff34fa5f672dda7fdb64af851bbc7bbabc7f7d24ab3d632f9b55b5a8e7196b9533c0079fdde1a6e6fa18614df93debe5e6df7b5167b8b4d38ce5e29d5d97278f7b43e104a2ffb8e79f3ba61fe7963bfe3c7fb4ffcbfaf72c6ec69b713cfcbbbdc9077d8359e1c7b89b9e49ad68d279ff3ea5f77ef31ffeaf3d7f6df19abc6d74b3d2fbd3e5b597d8fad386ab927ad1e67de4b707e5b27a7d14fea631600ce5b5e9fff8cfe6349b37cac37bf784ffde7e4932ef16d8779ef7b6b8d547725eae433d28aa9c51dd21c005ffd873cebfd3dddf92651359e9ace0de3aed2532cd4434837cd7043aee995cd29a5dd479c63ed724e2bbdfa6b7fe5d3f6da2d9755f2ae3e624afdf5dc7b1e5d719d17739eef8c9b539918e60ae7c6f157bc659c727f9ed06b9ceb95757624ecd47eebfd2bb533532b05df0eebc51bea1823ac304abf567fecb9fe1befcaed4eedd2ea4efdd5b0e72fa129cb521e55e21ea86719cf4aa51c287e7efbb7ddd6caccfb3cfd92d6959e705ea3e4f84eacb7b75a9ab26c87233abf14decf3be67dfa6e63c4ecd36b7a2fa7f6d7dca9df483a7c73bbb9a6f06e3c3fd626ae88939a2d9c5cc34eabd67be2de355a44b5587a1eb7f534fb5a61ef9a6d92ef86f2e38c21977477ddbb56996cba3f9ff252bb3d9498d62596ea98ef9697533a77f557c9beb2cefbb1e53b421ba5492691d0763a31be3aeafcabd57eb44d657320ddd7ca2a2db61cceff4d59a6d2b66e4304ae3eef0bb59dbe5b0ca9a9a475a421e4acf9f3cb67e4f243be4d59e6531a8a97f8a9d31d97654570e4f7f9dabbe7be5ed638ffd74add09a5e272904c1da1cd94d2ac71eef8de400be19e944ed9699f70e31c899a6ffa69859d7e9be534655929cb9464f45aedf5f5b0d70aa7fda62cfb21ff685ac9672b9564f0ccbb7eb97fed54c329ad29cb4af4daaeb59d1ac3bd65c4f59ba6dd53fa2bbfa5345fdc3d3765d9166df321d5eb2dd63163ae7fe5136b53966d1d4765e5f0ca0fef8dd4fb484dd9dc16f74879b4f56bed3f3765594fe992d6b36c476ebfb3b6337e9f7bc7389bb2ccc4ad54a54dfba52cc3c9b1d9a2a764191191660f73e6b5ef4f7bc7d394659b36f15296e16459f7f3af60ddea07889b239052befbcd714a9efbf7d09465387805c44d2975cab2ad53c177fc7c23ae31c23ab7b5d91a21c71c39adfb4b5dbdefb508f0e60d21c619431f7d851d755aed2cc3b18620b2c3c6cfb7c65df66f7187515447ceb0c3bfa594d24a4d271130e497438e31a77cfa3c042b33af3edbb975d533563a26febd6be9219e1a571aaf10cda12dcd3aeeeae5e75d632f0795f26b1abfce59fe48a1024471f038e18d7ac379a5a6989ab20c47c7e6089110baadf34748bd9c11f30883202dd57e5f38e1d41553da4504841c2f847ac30dad8db8a4f52ca21f780871af5e5bd927fd306a4025ad2f21f281ad5af7dc358f5acb8b79e77d522238ee8dfedb8fe7be79c36eb588dee0f7fe5aabef91e6a9af366559f73de835637cfb8757d29d6737659949c4831d682f6fcf3b632cfddf979bb28cd3543e221dc02fb3ae7067df4d3710e5a0de3d6def7072bcb5f6fe0b911b70de9eb186b2db9dfffe6dd4bb23e7f95ffeebdcd012a974ca68039978946ac55373639d216283ce5deb19221cf09b61c734fa6e7bbd4159868313c50607af541a8af500d10d748539c619b9b772527cbb10d9c0737c3d9e1dea2cebaef3860c510d62863d7ac871bfbd7fde6d6e3220a241e55dd7da399cfc4e8913e526cb6e2c0888d6d8d1f399e3e450e2e96d9e019f18664b67d6dad27ab30c74fef7fa9b69cd300679c33cebd6b2ff4839e7a62c838194374a2fbdbf2f8898f6ca3dff9fca8ca17641c694e39cf1fc15c21d730bf2f4b2ce8ca1b5d4decd827ba9eddfc72fe3fc98c215609e73fddef20fbddcdaaaa05618a3c591f74cf7d733052214d09be7ae5e6accbddf1146407402d9a99471471b79cd326bd19d17221344f83fb6daf75bbba7599620d3c933fd31ea183bc49304ff5edcfb84fd5fc92bdc6ae8fbbbcfb6c2e869e6719ab2acf33e5d88d2d8fbde3eebcd384a2a3d1f0196d8573bbda618735ab108b086f5737babcfba56fdd1b89647ebe1fcbe4e0bf71485605feb3986dc5efbb3f63775d21c170dc52615c5a6a74e47d8f8154a5bb1913206f9236ce2e66fc4108160525a7b8dd9eaabe7bcf60319c279add4d0eb5a7790d7522aa94467e4eda994dd46effffe549bb24c55c229c28a8d3cc2261e71a3d250a878d4de340788ccc0fc66cc7daf7c471f2b2f43e48149edff58e309bbbd954b539631014412206e98602245f5c3451d80ba7adc739d5d577d2f356559c6248a88037362fa65f61b7f5d63ed36106d60f60871ff96de7a6de6119151f3c4307f9c719c11de3d46c593c6dcf7ad7ceeae2b14220dc47d75d41fe27dfd863367a043c8a3941ef3cf75951b0392cb1f77ec5156ef79a6a20becbee7dd76f219a5f53f1b406481fb2dc71877bd258dd4ca0af04ca7b6b5efaf6f94b44721a2c0dff47bfd6bbeffdac8411189d1e9fcf8fb9af3ed95e2b94434810bb9e510ea4cabbd7fd7954802fcebd9a5dc764351183d762ca5e75a5e8b25c526244460507dffbcfb573c4d3d75fa59864345f4c5fedc46aafdc6fc5b696704f2af7b7b8e21854e8820f0a3e43d623b29c45ac26885c88b4fa7bf7073396b13a22eb2ce79464cbdbc14de9c653829edc4dd1840f400286ff67e479ca39e1e662a440ed0facf1c75ddf6f74bafb52a206a40fed556692fed1c63adb3e72930440c9097cfeff3aef14668e7e7c272b97faf7652bbe3cc5bcc1e21dd724b9f3dedb06bb135d752567b33fdf5739ec59f73d6bf7d95127a593716926ab929a717c66fe3d7574c9afbeebed77ba5fd305b01efc77d42293bc5b6e705d05c318637768da9b4b82aa0d36ae9e4fd6e9b7fa63401b26a7ea5c49ddaba7384088872d7cd67c51beb5921e6f1a22ab684557e3a7b9c3b579b6d4c9c76626361213a0085d4ef3badb53c4f1e21151b9e9b2cbb4189a8f877d3fa35af78d2c93ddd229a42fb291d254a84104931441445e9a4ca918289a038a9723c4f693988baec10da830bf25a7808e97152e55c89c243280f1f1fcd2344280b1c16b81216bac20d212b9470085501ca284485184253d0c235d4161292029050145e0841a17452c5107ac294b1c6d97da7bfe67cad29cb747cfc4e96e1e004712537555251b2ece7a4faf13c369ce7dc046d2b4efb8d47e3b9b9901072c2975c5e7fff87dd63ec3d1edecbedb7afba476e879a702bce344fbfa3e59c637db3448809d44afea18f787e6e25c5a62cdbbdf4356d93c224b4045ab1cc387e19bbdef87f53112125f48e21a7dcfeccbf97309ab24ca57fb20c27cb0e7684478920bd6d5a8692502584844ee795d672c8f186184b2e89d0119408ddb14346a83bf25fe58d35631d3fec382062a808d18e2ca13a4244b05f5fcb299cbc4708ff265273034343b0f2ef1a37c5dfd3e171f41042ac3b87b26a3d47f7d2563a73b7dc46cdad1c527f0ea9fe1c4ea923ae7174aa21d5dff64caddc740ae1c6d8adbf70e33e37a53d08726e7e3bdddc47e83dc74098f5536a39b47f6a79a1fdc19e15d70c25deb67f3c6350c807537f5d2395704269a1e7706c9c69eeb6c24aa5f711bfd16fed19f6ef2daf747adb83100fa68478cb4a6bd51ee61d81423bf032f32fabec114fae6bd581e47dd27ced96d5df98650e309f79cfbfab8f12568edd88dc7e0a7186b9db7eff6fc3eeb9e9b4f1738eb9ff4f84d8889ae23af1fef3f7a87bc4c1a6f5761ae3f632fbde6f806dd77dee19e586f3cb1e45c80653f2ae2ff511eb1d799d0808d5a057cdb78e1a5a8f6bbf34e8df434dfbcdb7fa1f235fe3ee5ee5bc5042d9f39eb83b119a41bf71e33bb3fcbec399ad0c4231c890db6fffa7bfef1cb9244008067ef688fdeeb3734933ec2f88bbfede31eede7baaf776419594c30fa5cfb1cb7e6f0ba09dd75fecb7d5f1db0c2d2a422ce850ff4d6f8497ce8dbffc406805b2cbaaefde924a6cafff2ad8747699a5b418c3ade94d41965ede3dabec917349231b2114444d6d96d2c21c69b5f082113a41c45d7f8ba5ffd57a1bed172113744bf1b73febde39a5df97a0da0a3dd65c768afdacd48b100966c774d27aafcfde66e9bb94075283f3a9a3fe32faecabad1789501a157e986b9efbfe6ead855984466073b53c632dffbebafe8c45480431d6ccf9cf9fd3b9efdf213472b47eee5df5fcffff5e4d591602ddb7a7f7622ea7ce796b5396a17a2a150201f435dadae9fd57daadad29cb362765843e60e39cd55aaee5f5fe7f6fcab231426740334265503fa3be77eeeb4d59f6c3b1f494a7622120e4811f61dc98d36b758c3a625396dd843ae07fd652e65ae7f7d9d21be200e692f7c92f9e36e7babf0d946203a3d8c01d1b08c5063ea9b1b0086d205a7831bfbee33a73aeda94653a213234d69fd3fd71acfdf31a9f088dd16ddf76e7ff3fcd77d36a80900636de75d289f7cea62ceb364df5732af594ce321c2da10cd0fae3957e729ef5bf369bb20c6715c280f693deabfbb59afeeae1054217e052ebe8fde6dbde5bfb3765d918210b50eb7da53272bda3ce389b7c97d23e5242158830e3d9b7a7b2dfedb72f410951a0df5ea3c5127a7ab1c4db9465abef242446ec36ef5db3bd38729c532bad88d004a4a598d7eea5a694f7da4d599624cbb2ccff947ca7734212c09f7f08bbf7dbfb2d51fd8473e3515dc7022314469ef24e88f1d557cb3a2f1891e35b35975bce3d2185a62c43e98d6f5e4a962d097db1bdb4956b6efdd4b1b1627344f7dda65151adba5f5252adbaef59968050046e9c7f563ef9ed93634b4d59562aa1b64e55e1220401fce7def7e73d799f196a2fa084ba083de052dc6d9d9bf7cb44c801b75b0db19f1d6ea827a5a62cc38992659c164d335955841a1062c04e888b1965af9d625b79b67ff7d016ddd73b6f8e17577dfddea62cb312d28246bf358553ceebb3fcd894657e53052094859cfd7fb879dc9ac20e61b7811016d9ce0a7dcd7ef69ffdb413085dc1f3a799c6bd219cbce70a84aca0f5fb0c39bfd35e083db4ce082d004aaae985d976ceed96500112ea5de9ec53d20da7f7a85002aea69cd65829dfdbde6eb59fd2f14564d94d014208a8d45bf9effedc7fcef5af2267da2bc697e3ccadbdfb0017c758bbbe515be86dcd54dc6abfe4b94a2d6b841b4f11ed95de6e59adb73bcf2b059d90e2b923fcddc61d05d7bd432b65c7fdeeca2d14f7f2ede7bcf0d74c73aea12eb5538ce1ec53c2dde7a47b64eda3a6d667e979f577ea51b18edf576c3bc5dfd63cb8c55b5fda71849d7e2ab3d033aff7479f25f6356e2cf43825ffd9e26ea39cf50afbe7f8a1de387adae98c56e091da6b7bee315b9a7315fad75bff4cb19c3ad70b772e2ac0aaabb6b6431a7596fb4f81c38a739cbc73b9e3fc5c0af9625d67b693f73b29e551b0fb4b4fefffbdd75cbd8642a5317bde71b690572cf313fc85fc6f5a21adf97b7e9dc039e7dd6b4ef1eddad28bc7ff39e22e398fd7fbeb6d132abd95f3b8abdff0636b9930af9cf6f2ba2b851dfbba045be3d73b5ea9efacb45725709ceba5fdda24eccaf9be9efb6fa1afb522816a2c219db2f6de67f447b8327b19edcf9fde18f31d9372eea3e658726da1a446a81566af778554fa997911fa85b943de71f696663aed98bf668f3fd7f84ecaeb9878d73a63cd90f76a8940fbc4985f0a37debeee2148e8a1bcb463d9b79e938e1a79fe9c66bb73fd1fca39628d54ca6b3de774722f07d6f9f3f8bfedd056cce3e8d9fa7c3fdc19d70db710babd9063d9edecb9df1c83c065d5f87f69efa79057205ce86bc5bc7a6b21edf407bf5beae7e7d56eb8a184445c3e88374e5b29c6345f3c778703ca8ce1dcd366ce33f4d69465a953c977fac8f506c7b766a92fff7c5e9af1d503dba1fef4d39fbf9f527f1e60ecebbe30d7ca6b9df8ef20779fb1a697672c65fe5d075957a861f733e22f2be539f0136e0de3a437f61d297743f78f27e7967fedf5cdbb8d4b73941cd73ce5b4916b36a2f7b6ef7e6b86146aaa71e03fce5bdf4f67ef5ff27c037925f57e6ee9e5f69a631b5cfb35bdde6a3937f5fed680c7be65deb577bfbfed970650f69c79bc7ac635f28db16abde1e7f8773e8359efdf1af7bbffeef85619c4a9bdb4355aecfdfe98c600eeaaabf7f67faafbce30f85142b825ad5af71af17cc1f69a7e9d3f9676729ca50bbcfc9c7b2f3bbcf963c9af16fc6bb9cff44a783b945aebec8b0578472971cc7ef2eca35f81edb8560d6f0d9c45a8347169c59994c328c610020061291a0100007312003048241e8dc582d1905cb691bb001480014c8c6ab44c2e954983b11c85411404410c8340000084186400214649c6b207a5e84a4baf2e4dbb773186425f343b46284b55f1c9f21b886bb008b38f7d08ac36da0b9b2ddcccf4626a462c3321d4c0a5e907996084247703f2563bcc669aeb9d820fc2d01f4f3d2ec45cdc4b1dd1addfbc9d4540101631ed342da08654c64a3cd2aa43f32a011268a733781105e54ec87e1012ea6a2010a35e4dc1e5f48590b21f8c13d7c8d813cffa9761380a90f9ade8e748b6fca7e817c810bbdff1d0c0574eb00664067eee8114798bb792fd313f41cc0c3ffcb6c0c88d100cef1dbbdf2e2ea3087dc36a3a3bdeb0e73c199b6325f1546c2864b24bae768e9372faf7db8eeb0265e490328516ade0d230a22bb277bb6ae45c6b4936bc946b895e379b8c516fba82afd5d83e1d4b92286c458a7eba4909414a92a32ebd161e74733df7192d49bde98f25774a3e18c401f59dea3ca4021ba0e18e660a50f3212a7db52534d9cb47584105ee9269629d41ea95899d4c0da4657b898e08f00f8bd7be30d6516a27b1d2a9d802ea16929b27f190cd8f2308d461c755516b29724404d358113e20573fb7d42feddc2a0d2bd3d3361896ab13ad0c8a1ee4fe3f8cb792ebf2ccf73c6f1b9ffffffeb816393df14870b5e0ffd1731d01b43925847d740bd3f3af2fc2ad08a18b72d456cf59bd09846a598ad0314420143a9b6ddc9f8bd0eeed0a8aefafcfa6368e8b13f762f7c810dfcffbae72e179ce3356119abd2beeef63615dbcdfc8a4defccf5da55f44efaff42eff60d9b7c952fa11b1f47f94f3db7863678a40c898bd08e76c595423fe4159475df1c41c4df7131c99b3202107efb1818a0134eee626fd50ac14c4bf2e88d5c4b77994bcc860f5e083ded4726bc2db8c356f50c6dda8bcdf70fccc2bfdcdfb0cc9b9decc4f9c71857f9f8d0f4594810f4acbeb8e5fa254748bdd4a12e1188f6f0abcfe49bdab3cbcf7d81aeaf4beca0a1f2872e326a95bce12184c68464aaca381a13d2a88dd9a93c9f4d388df0f93b14f5a0942a1df1af61d6e7239685210eeec32e95126aa6fdd07bf90bcd60faf29bdc2005231873b8ceac2fb8766853079d8884604dd88959a2492d67c44ce0a47b02975e59bbb62a27cd61eaf32e700e5be0700e621484a58fd100cfd1cea9845443f6d2c43fa204a10891952715d05a0608ee588e839ccc4380b9907e68aabcb40e5113f65b94f97a280a17a5f17613a6aab440a22f57b8f42b682d832f5c3bef15a77e875b65a5946853250a1dc18b94428a0d292026c066c91c2624b707e6a72a3f10cadf55e1b64500427915942984ab1c41997a2e3cf43f173f57a3101adc9c6e539efbcff33a303a9687038eb31a624a2134339de4d6a6b430666d1b5dfd8d865627031d26c678371bf463d0b0ca1fba37145a1b12d15f33c1c58a7c8d76d13f31e7c82bdf6c7b535c40fac7e24e1b3c4a752bf4efe2eea1b6b9f277e29fda324df57c26f6028e21cbc94f1cb8e15e27ef9dbe0a20ffdd4885ddeb81ca9cc7b9f0c4e515316f569a725758065e530691fff7b3e673f83288686d032ecfec2c4d96dcde4c8cf4e4f0094a6ca7c34bd45bd20e185aa7bc44d52f3681dca9af9c7eb68e54b0b60b99a07ca669db7a10242b8df6a05bfd16eb69f0e77619dc60968374c49c7da6877fe1c9208d1681de868345d851aeda6f1aba163c4dc68d6a6592e1b7354e6f8d6745ceb088e4e81919a03c1555d44ae1e8ca68616a2e3c649d11fac461f60ec5d2fc3d31c36dbbd9a4536f483440aba0681664f9e5147bba825305267770cd0af99b6ce0dc9617b21fd429e3644712c12e3183d09d848099612c4dce3fce6aa2da1265f0e4a0a66af8300368ffe9c97800e022540a822bb5461a2f8f1f474bd416453927ab2f25148b24e654690c6f7472a066fcd1de881d6898a959f314a8e827fd4ef6f0c3ee6c4317cc6b5b8806724fcb17cddfe18ae2bd3db821f2501cc04b9e334a6fbf5a85e73f03a84f9fc9f22601b5e30feb1fbfb6eccca6697dd3d7dc9caa2a170dd5569f913b3c14aec7e8688b5248e28796267978cb8f1d5d6ad5127968ccca20d25684aff17c3a3febf7318df70d4d95bec770b33ff58b1a7c83745e2bee8a71297009acbaf97e970fda56eb9f0ce6d89b6eca0ebdc6d8343c93b35a36c472b129e9b327e341cfac8dfb19a9dd01c09799411f36e61dd1ba06b936d180679e2d2e1240cf432f88fd4e45b932c2783b6b92256a49747f23185b9b4c8204ce65bc7578d1de21e4506abb690dc7160f788718a6a2c34707838bed73b046e50ea2394707299c139a34230370cc0ae85dc4cccd1a24a1c7ee6d51928f44fd86d2ac56c37917142f1d173bddb6b9660656c3295b27cd63824d3e6f1682ae81de04a80e9ecdd3f1b96378ada8903d1335d8d60c336f8a38416b2d8bbf11709308fd6b0ec4ac293fd72a4065432d0dd53fd9323003469b7e20bc8e7f8b85bd768eb7aa061914420cbc788f8f9495bba5783af4d6c111f377de5560e2958cf66eacabf1de921422d40d801d1a4f6d832acfd62e2cb19a10f7753817400ef10344ff79077d52f3deee9e8f82fd5255c3fa37237c5e5abb836263653995b9b7be5da891f8b8cc8a44f8e6d0037956ab689ff1ab6624564e14772dc616a48062f8cce7cb323b92e3bc8d14d08616b025424c7e5e600741c9c4b2e09fcc1f6a70fd9f3c0906a72d3975e0f182bec51d200051f45a0856d99652e048876622e0ed5b2c07faa1888c749ddb9cce9a0391d300c5e94e5a49fd43560c8c2352ebd6aa416765b58531628145da39a7bd322605cf2f0061efced91b802e63d50382bc7d0856abd4f017813242b602f534a1bb4f03e90b9d413cd984115931088e805d7c0be2dbdaaa90adb341ddb1d3e801531ee124f332f53ae841f701089710c1e2ed219d8e4c863448a2f67ac4e72634710422847286d48bef2366b78f606ef3aed1ee3f56c2e44615b294fda7275833991081c525e11c4bf6e5f1d9fe5f77d03f76809872de4be4927593c6b64d0f554a3630b2277ef66cafa8e39cf6f7702ea0add7c13ce53013d2cd1ba5c8884a7483a426264dcd4887ff6d7b07469ec651d060842b44afe989f25010c96471a4df8948ef043f3770d3a22f421d61687e40774ec0d452b537cca76e657f0526e956494ba992b8b485f6aa22f38168185d158d23156b0d916bb8c5d62544d67a09aa92bd41b10ddff32922af77392dbb4c1f91863141b921ed0959ff2b53d1d8846f48454592b27206a3f6a4f04cdc1a7e34206f68108c0fe73cff22f829590ef3e61758a4d20c1b64e8c361b2ad539d14fb779cbe4d921b6da26b605eaecde9f5110ad29324faca5cf79869035924ea917f4f69625f55bbed36ab94fb16800f3255f353668565700a617e378e578bfdb9b19704c5ab5f6b67baf2d84c12b49a736f1feae2feb7db3d462be6b09bb09d0bb18c871333de939497339b017d99946dcbfc94266cb5e6deb46f53b7eb2deed2f642df66f5265afbbdfeadab977eac94879ff9a823a0fd0b08c9b2beff20e8a3e947e29e0a69047b18fa24e4aff947ba1ccb998385d6423c7bbd07006607ad4946c8722d3fbe7440dcd28371b346fd4346cc72133c14c0a9a9eef6c10d3c3a0e91be86ceaf7e7a60143b0c2fc67094ce811be0fd783cca5162bb5aec0d205ab4b2d506c91926565962ab4badcba45ac71d28c02cd9f3f62681c212f8512314427e895096d921ad4bf51cee2b3fb2d8e0dac0673529ee29b425140d3904490761043a5a5fbeaa8ec53ff1a2b47caf733653af4e95cf98efe36553a723f252d94b60ee7495096518e8caa46ec2ffc67f6186dbc9b73ace2ebe60ef4e14e6f15ceef95534dd4201024ea757bd9f95e9796d1ae33d184e76e93b9a5da10ddfaa63cc3ce799eb35a0ff234db89946f58f31b0b4c4a42e6ab4aeb0e87ac6536d43079be3b43e32fde7467756cc9ee5c16bb3c375ac75bdb650cc47713ae4379c9509965cc8763049d4d475fe5ff768bc3ea77cc12275a91949787e2d3db165c9596cdb55d5eed1b171f3473bc80f3470ef6a0fa4c5d3cab6733768ccd76fb64dba952c95e2563990e4d442d2875fb1b48b5067973e0c490ccceca915e163804246ac9d6daa740b6e5eaea0a0ff08b2791e596c3d2384236580b9f39b1622c58cdfed790f726071c8cb872fde1fc83f5d2e0b57b56cbb216a9f17fe08a9569413f61cd7529876bbd6941b80a553de28ce35a32409d412b0507d24f63c66fffa65321caa79d3ae7872a56155de729ddbacf99f39b485f3451b618d689eb5ccf3d8620741166b41bc1da3406401c9d1024831faa2d95e0c6042edf66c9928107ed3ea82b80783ba585e56eb5592bcc04234f97b6729ba6050acb159a186ef2b5814c248c0a2cd346c728fb0d4c7fda47336a1e9f24035bfbaf506a2592ab3ec849db155954846f9135ae0c1fdbe078b4b34042cf6402e21d67bdce431b8be6545a21953270f733fdf6cd5950e1132c841290bcd96913cfa0d5fb1bda346bde371536ee4e44ae27c4b42e53817dc6f9a291c4c8743695efcb2ae4ef2cec7a13ae3d5df1414b19005dc13d56a86a8403119f195de5aa47ca2a3b3533dd58cb15a8f8edeed650e7e792751da58225887c046ae3daa29e6ee23aad9767029bbacc1a923fa2874be82523c4aea85ea5a44dc4defd03811863f22216d4587a43be03a1a41af2c3985676b39b31d3ad452f36a8f651337268229c96554355c3bc5082169f04bd3eba4cbe19a48988f3bbe2697407a2d280f0b3535510f5d645070ca24e1ea0c2c2ccc89383bea5a2c3e719b84df9588283ee8f049f08fa2582bab5f9fbec701ca3e96c7281cd421747078242635ed6fb8b5eee90ee20e45d88e278ec811c6e087b497adfa6f01cb4edcefcb4cbcd96768010e4896083694a81309234e4d3d24b735eec2f184a8a1d5e4c7617c3bded87014fed40edd08b43affa796b16cd7f789b6793c4bedb4e1aa5c5aa49cc1d0c3738d1d341d0f80e880d5402ed72c8cba15484a8147ac5d02e415e06a54288ca41ef90396897425e0ea52244a540af643eb4cb909742a918a212f4caa05d087939948a4054cc30f44a401723a4e5133b5c3dc42ed75e8202c804103340770a6962a84d103883082164e62075520d754119ba8542c71216613ada9a2804e4822719eee007117b28e53a207327e4ab653afafe3423f801629f5d80931ebbdf1db53c4788da5cbaaf221df02b05be8720a38ee74150c4404dfaf6dde58188dd6bd2ee54ba54d43710bd3511214cb5b4ba2d9636c94b6144210ce99851d56215e5179ec891329405aaad67b10b045f3b80ae79d7fc4583acbbd8983eeed4f2b5f46af105a48bcc2e035e4a7eb578dde935c0974b57dacc2bd661d7be4611dd383dccc5e3e3e45304b20fca6e30eb109b622c32a9076737c83a944d611639eac1d80d643dce4a962228fbc2acfd28ee5129c8229f7a0fd9a8291bc56c43ec8db18649399c4d204b50f68559db510e6313902538fb1eb271caea9b72fda828633bc8ba3e3540d6a3ac74a7506223eceaee61fd265e28c6a761145cdb2b29e17a3c2807bbb3ea8325231e105c9a8cc02e5a243cc89841d170cf89c25010e655178540dea84d3915efdaa6c74bf99af6775bb86a9e02eb96dfbcca6b27d4fc72002b3481c94015b76d551e4771b7586cfab3b0a5958c2c124256d170899ec46db059b04e87d358d6ce8441624895dca4c8e117f9c40b72549d9d1c480bb189584054e11b786b80d9e543e87d37dd888cf60bb7d6c5ea23a78c58ce1d3d3fa90ccb5e4b1b6aff0b947d576aef7001ecc9e014881119df5672e3a56ad1b1d4b541a1e8e44aa2c48c0cb75db46ab03c92b667a194a8292e32d6a55675f5bf9cb10e838348c16b4ee8ee31865bb0525b01c61cad4b7a4c00ca170db011f3056ef7d2a9cf1117cf17a54dd9854d5a75755f97ea5a012b5daff5403a9bb27a5ce52cf500fcc4209aee76e1e881c3ca65dccf0c0256cdc5cb33733820c1922cf2c0de74ad71439c7cc700ed365a9b80466b86ad788709f3c0df47df32827e3d43e0930066820e10ec62cb015588cb6d970dc63c1f624904208121fe89e5874552478d33c3539e5c9e384318aa100c8fe1377aed30abb984a9df34bfa19639d02e05a61804625ef4a4c3304cfc202c4f283a6fe10c2024a5411a8a5261a17bdbdbbcb4149298850eced821602a4804c611ec07f6bd22ca9151253c7999144aaffc4b8ee9d220139deb787e6e2397008f153a7f8657e063d969067f9870037f90a08abd891e595cfe3fe6689335fb671435361907ca5901c620bdd72e7f2093ae821ca231d192aa388f134b8fc65c0deb56416b3be01f314cacc52cadaf64de5e402d2ca1ac11d1306b9a884aac884e0c035cd89fbbaf220a149c78c18abf802561df182d28208ccd1965333f559311be7156cc7e6c115aef44fb982b369ced12a1761e43e6917b5cd7c6a8be51468ed995e42b4afb1c5e390bce4ca88fcd019551c533f4bc94ce907791d4549db1f2f69b12048d53a1057c2299354d719cb5d2a55a218e0900962173b63518f0ef214feb70474ea6c17c9903a5f95ee475074b5699c278bfb4f205450b70fc6dbecea019155a4004ca7d77d1656cac4c0f58bd6d17e6740c4970ea09baaad5f51a479019663732e40c079e1bee21db47d5f3f87cbf57aa99fd1fa37893df853f73d16f31b62051e17ef5e2422b7acb67dbf2bb897deacaf308d48ce93d0ea62bfdb13a556182d57399fb3e5f915d82b5fd243138593d433556ad2dc414c766b35439efbd778083b3015da8285ff019c5f8ce9ec1c5ac104701c3056052624eff2174b2efe57773a7f05d54d5126557fe2dd6e57d258184fe5161990141d84f75d52bb6ddcde9344d9b7ed5f51ad16f25ae67e15801a9190b9070b6788d0ed5a803fa4d0f04c2a6686c6eecf252560889526b74cf027ec65cdef8d3578d36a04d75ccef31d4911baa4aaeca9f0c89f6f2ab818ee5eefd6047e622efa3ad70fc7bd1fb47942a64ce085dccb5cb50a912262bdc48adac52005f50dbd3b1d69e08f6ba2653dc09c282cfa0fa19cc6065ff5e75c7e963a9add3bb78bd19b038367bed94aaf6fa7c6789ff77d0183dd284b4cba069e12efbc36c03066caf7241f1b72bdeeb28b864fdda8ba9796b3c6cc185e7a76abb46f4a165db664e073d29249619d5af5935ef9c9492154f82243a9f2f466212cbd030abf72cd91346a405fa790d131b3f763087a13e55ab9683d607802535a71908e6709cfe89116d5af1a4137652e9ecc374e9f2a0fb7bf060572caa0a0fe55d097367ecde0b36ef30cadbd3b0e5619d837a74c96e54e750de95623cabb2b7930db7231c264d41be6cc02c0d889efd9e7ebad53c0e415d66f557e70b73a6305d97cb7c9fe79e3b868c58991ac030fad5fd0e96e8e42317b0b179025e39943fe6226b94dc488532b99eb0650460dc07412af3213a4665eb9785347345d004493ced526e8a30c008e1bff16ca18b164992b1f275ac201c6d1e559fe9c928200e235c74b21b90ad02b16b284734f2f4b198488fba7670bb61997e923cc3d74760670df3563a2bb0a2ebc90984f0117bfcadd0b0349ba2994175816540bf429ba4dc3ce0fcc5c2a23a37b2dcad2b27a3c85e99ea2e45c878bf94f27d46809ca75c54897c22f2cf9146baf0738788a6ad97ac5d1bb975036e949e0efe2561c20d83c28800b9d1d3ca525aaf3436d387d73590bb2c4e3efbe79e233e7a333e50c639ba07f116fee5f6f20c1e9fad2815d848c89289677525fcb9c21a662bcb7e70dce7d688ab492a732500c526b47c7068f59e2d1cf60bbc60b7e073496b7a5633e301e18bdc2f9c1528b6e4c50bdce3d0699dcf6b50a199711cea0de8b060c894fc8173de47e4e9f39f8a11086ee6948333ed7a1dab80e7254e963eee0a4cd300279040c1ab65e87b748634cc12d95e90d1db63afdd4a2677c7941dee18c91f2d60b925cf036670d85b6cf70fb960d105ffc4851de55f05ea8b9553f501ee8d4b8ff6d787f32b6e9ac1a287f31e4efa31fe3b065fe8580d8397f1b8fe7a1ce09c3275897b64d10f86e82799cbe34a5030e12b46f53d7874360c6ca23fe5c94c812a7af117f1ebcf81c0ba8edccffe3fa11f304cda6141f274dca1cafbc92d3ad9d9915d2239e5e23ab6f98d5663d278f57a0897e2a44587716e7ca993638decb3a9b46850993c005ad0449168d7714cb4a4ddf8f21590d1325843cf60ed1f955ec0edd5cacbba4fffc6945f6c30a5e378593b2d291df7d47eb48536cda03903d8e11025cf14c31309850e69da5db39fa66486f86727adcfaf3dcfd3eebbe13ae3f3f40935fd0715ea8340aa8ce5462c2384d5bbd97380fe612a90f572ac2123f1652026d168277eee51977d8f9ec0bbef5cf41d7f0eba7c33a1bfeecc9a375e0d3ae7f2a87e82ced72b3cd523b58e7fc8198d5067b23f1fd3ce4f4efc39b52a71e527998792ff06a8afa95ec28f113ff82fd9e9f078bc2bfa1c2fbb35441d854a59ed4ed0b6979b51fa850c7bda0ddedc14eaaa5dc26f9ca8780dbb9b023eca119d1105542e50645f217ff00838f4d901d22cd8dcb00c5c9e8fd4b66a6a4878c5501232249d138836ad0d31b9780b2679a915a65537c2f564181bedd77d8a95c7d42a74754264f8a491250f38adb64bccae2778cb269fc8c6d8ca991dd15e5812b174e1ff9ccaa7f63963fee46c0e49d63386a16d850ef0f40b5569a1e931292fc329cadf3f7152e635a1ffc6239c3cb6cb8d67a544dca7d6d0d7d062afb7b050fdf800da9be294e82c50402749be5341dee9fe9cc6b71f98be7a4d6c0ab4eec780e1b6a8bf9799d540da005b7e28ac067b13ba017c2af50b162f4fc2406e927427fa761b67b6e15f3e7d3eea1d8056f61d51cadbeec76739ffa6b64d9f25075638fdf5f17a9fb9d61f208f580e350c9fb53899fc8bebf7580b788dba697b248a8119251f5061ba614469cb3335f63c1ea128401420610bfd5e211bd86ca202abfa608f0702fdd17d0804f5094782364c728001ef3dfe78d07ede11d6f1f49eba3fded30707c3a024e4fccf7b653d0d4df627aab87d6fcb011ea1da6ebf2c3cc31d6f25a9d2356dfcff531bafad9f9c15069e24f4a1b186f8d01e3446dd7d542a9c690e3adb69667def8f147e99c0f85452fc37f31f8e6a6622cf58f787740e44e7e81863e9bf5d3102b66292b23997a74dbc6f0d830cc221be41e81be594b153af73b58b34663b957db8f6c8bfc64c89a619118f9fceef93827118bbaebe17dce2273183cf7a5eaf1bbfe2d993649a7021755c302a74a2c134f225afb3d08ea428763efd5fbb3626ffddd45dfb59f6bed167ce3fd5f91e7a9d53a218ee3373ae703111c54404e53fd367e825b89eab7ef0903ad8bf617f877c3372bfe8097f9b71b643cf94c0f94671f3d36775a63fce5f36d6d5bd0675d9d0f73892eb9a04bb261fdd6bc3554bda6568a7a31bef3caf6ba6db9d4dc9759e6738e26bee0790a7250330f67f863e433917fd91c0b56dda19893a4c1eee01d683c54e579a79c39b7e377d04a21ab39dd8e6aa2afdeee8e7c0eabd50afc3545107dcc663d7a17e958e5dd194d8d38b582cc55693c89513ee2713813356da0b47d9043c38661a89c32a5ca2e2bbbc45a7883f9976db1476123f6aea99f5cf881c8935ddf4f6d1bf496ad94547c8bdc9d7cc74ad31fee869ef6efb61687e216eff660a0ed27ce974192bd7f0fdd3b79964cd919ec8b599cfc6f07a33f6d8abed273d51d533f6cc113b17b5b8eaedd2bc93d5b7c50c917bcad499eb5f31f9d26bfa892da3bf93f4b20b8e107bb3eff949ad23ded195338fad90ba13eae8bad4a0a541b881dc36506d86b341846db86bc6b506546dfca859975d42e49de342fb718bd17c15d1c75ce170769709b67a10328ff471bd764676473072cc5ab9b1ba0d096fc834665b3f1cbf938605dc241b64ff99584dd30273d81df52fe758e02a0547ec3a1acf1bc7e0ad4531fea28b3336814e326144109ae2c189e3b0a62db3fca2d921c67fc226b26f16055e537a5b88679c10633d0f8135143e9b2e8b672f30ec841defd766fa955685cca188e448c3f82ed5960e84aa9787e1145ba19bd97d74e76da1ba7fb9de8d0ec184da7c0f8a20ea2ca0a7b51d5a77786b71defa251674eb089401d7622c4befea7cef43d2d734fc2854cb30aacfe307cdd868fdb29841f48934db6ae3ed18d1b36c1c05e38049b63b87305e22100cb34b383b67f068d3df3b1aeeaa4153e451834d3bf376a81a8ddec8a8c82c4b6c6a56ff94c142c1727635b45004badb22592a85235f9a6340d8e1734a6ea432a0cb0e2a462f6cbfdf11ed7ac2e4a73553c304124efc168df4cb76c620dfe131c8c329425245c5008306b881bfc503b76e508b8a9d0255a72d64750b6fd2c804246bea28b440569e48ae4d776905f0f5381e4357aaef7b301e1dd5759551703341051804fef7619da525830ad1a6d96582bfbfa0e53e82778c2849d581b36867b8f5962d712816527ca2e9ea456cd5ce0834b1e818527140c59bd0bfd8a30363411fa39ce54f029b9e07ea1453bc94d7f502e5cd14e32f6dbb8c28b6e8779a3ac6d25c0d3c8cb4fd4453a0de6ccd026d1388702191f60512567da2a4c58e552e32fcd858c26c756d2855c721fb53707c3530399064d317894a50d51dcb4358a69bca0258a54b2d00298804dc426531aec7c7ec3d6db78ee680bfcaae892ecd827df6d433a9f3c020c83a8dd08c4b689f9e876aadfec7f0d5112836b9dc7dd6144551ff2257d12c54b1dfee77cc83ab786c0e1487eab50fb168965fa99f89c870f662f284915e8a92cbd13b0670b13e099df5ff408f319d6637ef77f945f7136de9b9793f64393a52cd0d2223e25c5fc3ba77bb8b343dfe81be7765206a6418c76988f1ecab92133ba458b370f572bd8a32b02739d6c070c2b01359171293f1c81f370523de63ff099d4b676d1793e992e5246372c4bd7324c2686f9c8d57b5262876855793ab2f70fc0a884c774e9ec3f35b96e3fa9ebe6174318839ff2d41f482aba8b65d5e0e7c0a8aa94cf89bd75e119adad3b68c0e19d3b2879cb1cbbf88f85ac092bc6d68d106b7951a049746513bf5df984b513dec29387fb919bade65b73b91aecbc8ef99dd2a6cc1dcca60b902d69378395b8ed8789a1d68240d794c5a6edb6039ac041a1ec5377b2140e2d17fcb1f14d219f6c07f7570d7ee6c214d47f910f8a978efc83ab8dee9c4750b497ff4e7bacfe14c76f39593c0ab0d17c452ecda0b4da0c685969737fbf789270a2b076b35f032d31235d7c22ef36b261ff522ee74c84fe7f61f0ec51da8b4e3702ced1072b16baa38d5fdb201cc8b9c1aa1027378dc4b0f78f8c6b4fac28bb45aef95fed4b193ef71f184ff4190adec898be568b03dd61532c8eb6ace2999b7f7a4bca5fd58f14bc87077191c65388d0fcc312b77baf78386318258b14bd586cde2e47110936b0585b9cc47d2bc7a7f10d92feee367b2fad110d74d3cdcecf0402150f3e59288e697052c0570565ce3d8c08025440e0f2cb318324f636e8ba9e36ec66d82dcacde64b6b85321523f4321fab13cc7d7e0b82a9cbc19945a40610d95b4395537ec95adae98252f7d24ec7a41ad42499173efa71b7232be33b010a64280e9ac05d0dfa0af052d943c25114029a8d741ad523bcd9e96a44ace936f492f549fa6d5ff1bce77e67d1543e86b18905916854f1f95dd43f0b62e46350b532b589d8338d7c790095956dab88cc90cd84674e03e8cbb904cde1e3ab2d6bd97e8f9da08696717736abbf2b3d387c6ee9edff09fcefe33ea82fb27d8841b6aa6a3fbac33eb9da8d9043906832dde47bff7bd4e9f00c47a545133e28e7b1d481c581147e3f5c4da4abae8cce0b849dc419b45d788bac1d7fe194b0618ce301a7530b343f144dc2bf177e3aaa03b811c72094fedc967da5de43f370e63d99b1c1e8860503d197967abd62158e8bf18bc1023b5471ddd8011aabf45694c8f08cf27e03e20be8e094eb04a705b7a8c6ecf71130b964e0a8b710b48200a6425236341820a6de6654fe30e4fd8cad4342df56ebf9bfbfa3b78c3c5615458c80298fad83a6084a5a807cd51f2e4f42e83f7d6e90edf00a961d77a4902abd108ffd84cd76a7c921c5fa730e74641ce40ae96050dfa7e466e1282a0d20da3782098fb905312f54e0b109521e6b9370fd0031a20bd544b5616f629885edcd13241d61b50eefa1745dd18c501966fd3b48989540bb5b1de25462cdbd45353a2fe7030b6fd066dfd0fb0d5fea33b12fc3a632f13a821551e5cc27a695cf89bc483e01352d094837b3c50a65a96ef2f0b1a7f4fe100179d9ca8beb1793b1a65eb4180c74b8d2b7c3c01e2a8554ace7b20613b24e4aa3b856d386cfd3e7318ea108097a8c97699d0def0cb8b62def6231170e8bca3e51c198093e7d9799dd2adcc4c35995dc0a39e66459bd5afecef98d85c86d9db7a82ca9eb340c8a318338f549769da01756361c6663105987f3a740694d2e4c822b180adf34a8bbe4099dc7aa77905cd312a7ab828a97852e2d8eec16aff44fb618c3bda8d4ab889216961ec4ca7e1264c7f5d32d3a26efaf424a3d9a4495f131720ec5050f54638d23442e5d6f136ff5f893e6ef3b3d28dfad7fd7cae8e8a0ba2c93a073851aed5e88a1f91beb8f3afbc0e92a180ac9f98e35696e67b88ee43c660ebf51caf729a3e771942fb8e819f9efb8ad3d8154d0f71cadc285010fa81baf83a014ad337944f4ede666c2d061ee766a7557df2e1b7b3928fafd9d0a008e31c6e10e1d3f3c95fc3fd009e4503c4e1f2fe2dcfd830be5e615e4c67d5f69355c58e230c97043abed702ab8af1788ca0d4bb45cf663ce00ec1be736ec3b43efc0faf79482062dd07c58d9fa08d6feb50319de6fe25d7be58d8971e17f7a2e0a11ccba66144801a7efb1c5b2ceab3190f23fab44182cdd0b62c2507569ee5fe83e8d4a5734979b3eef8ef432b2b66289eeef77e2fe8413dbd720efb20bd1d0355f70cb71e3aaf5e2b388ac9f5ae3e2b8ae9eb108ecdcc2f86c572cf5eaf80810637d2421ebdf80d6e63c064b1011dc59fd2c08343efe6f88f9d1133b58991a2a87a5aa1dbf76eb26be09e7068009d541b5219a3120c380099f45f3476463e06812fc5d820488a429f2385068ed054b2de1c7804034cd8bb33b209fa798f6acee6a58c66b8a846e4bf4e95b164cae763ea5cabd495c4147aeed42d9529754f79cf450a61aa2b8c96cdc5b1902b0ecb2a168a803f63d2569be96d9ce2f64af09b52aafa83f42f16180a590388014f600a19a02da5824fb8f66f86d41c6119d724dbeb7214f06baef17f889765e7bbbb79e67b1000f059232223d31517585d2f47d3ceee75d1679439722a1e3854c14550473e1297011d13040d610452861e39225506d2c777467f6abfe41376f7331870a9d00d96c92ce3d620611e142417d2ff3178fab844f90ec0eda87ac23f72144953b5f06962f8b027377a77d37a07f18739b839b7db41cd62a5b971f9be17f70faecb972332a16d7863165ce1dc43ea61d0aed9a5f400ffbb1bbaa83db7b615f7c240c59de73908138ed2946d6de3f144f046404349d7962f51b13ea836e712467539e8b3861cdddabfef56bc5d39d873eab759fc690b3ac8edf77ccd1ff4dd9f73e59853c7595c39d50a9bfdf096d2ead66d508296f37144b3058b6a534c40f935e24d35a11f3cdc98d64d8ab8b213a0e15ba223317e4f22d4e833c902833b59ca4715f55d4a4674c7aad7f00a5bc12abfb943942c26aba1e976742f485d4ba9c7e1853142bcbc945983d7494e7dd8ea060f364f365036c2e018b8aee4d42909d81d69b540a1a144f6691309b0f5bb999953c6b871b8b0dd573061975e91029a29be6f2bf50aae7e91d030ab84f7a12d40907b6e23481754c1cf5ac6abe763c3fcfc00e2eea343a0b1569207d884cc03d3ff1956f9cb52a3b25224bb372e7643e4a64a33a648d58b21a21d7bc2c4c6405d40ce609d6de10d097a68b541bd054fe182d6f259458bc43f6ea23e3a02554c26418a6fa1f267489e0e043578cc06f3facaf55c429a35c0932e21bc8d8051c18d9c6f3c6621f397b76a9838d6ccad4a0cf94bdd7b80abd80b9d7a6d597ffc0ec60296e6f66964eebb1f71320ec7164fc030535d0db177b3250f71c84bd360eb238eb543d3a007692af60535a2b5cf0939de66d696575d44ae5a77c31ee4a7b9aeff5b3d67023caeccb33ff987876dc0b5be9e3ca954287369ec39484a520f67e3b7cd8d6a75b2f51b81173d5e831f84286b82842a6ed27e993acd9c8da3514ff1e463e47a21e32b2d2e7cece120948531ef905b25be4d0972444884d378f9cd8d5b7b44c5a519c680fff3085e5f5dcb5a4a7376334f21b30e02c5e34928e5579d720b73da7c7c34e3b58d011fb5f22e8eb5b305605e32fc98d953c2746ca89de1a49d8107cd9a00e749cfa84d9cabc80427334ed6208742cc0ea67e6094eaa1c01253107f871f9a9acf20c0742c333a2ab5d5d49e547b96d68d26d1e1adce22bfb2b37bf5b1c1d5a7d2e4f038efba092abace9e3d40e03244468781cf04155ba0b8b0d8b239849e99598331f794eadf09eb721575aae1351d7c37ab7fe7b416073c067ccf111a9d483c26601c8408dc2cafa62a2a34d7625bf413a8b3ecccef4fc96c6158b9a7a17a889855cbf09a8634fe85040f47d2e1b22511db9304873c736d4b86824d30315369c25836effc136ec4062553021e0276d2c5620ce8ceffc3989ffc9faf94f5a7d563b43c0365fe7296b8b92823625b19178df491d6730dd0f40ee20f205d01a9b3efb0ac2796198e9393da8fe189fc759203db41823017e573be77e4c8ec3ddd76a7f2ea7c12bfd700ab98b2ce338941cc8bfb60103a40a3f80d8be317591e53ae1241f2da01b72715aeb0f39ba72fd13c30bbd41c1d5347d363a0f49153f2c7878d3ab924b3e43279720af7de1ede2bdc6af63cd57b6fa221e0d8704c79e2d250a40989645fe3d2c34155883ba69aa071af94af989a118ba536456e4a07387dba36efe7dd5207ff677682aca151f3d6aae1ee2f0498fefb2a9ecb075cb3f9de8d0e26bde5bcef9e87a5377e10e9ea97689f9f2e1c12b6812972a5099f1a0c08d3790dcb4d4ae199bd2cbc21e58d5eb29da4e12a941cf958c6598f2cedf510bdd6bcc4bcb8dc1c4cbb7b78db6e5f334e0a1dd054beed0ee0bde50afeeb8423eee385b3d6dee8b0f1a7be1d4b15b5b42ab97ded68dea7e009162cc7d5d904d509082a26445405eb9af5dae352446de141043b21962a8ea4fbe66f1a9d5bac59b27f17c03ab7935cce7182bf373849dae0ff59533eab4e295264e61ca3f68be245d5956536d16b517d742961418151bcc6b531d740be1b0b5f062d5f7bbacecd9d8b1dfa08cf99b9acf2bf0c98945981d78179ae8e26c580674b305be76d6c622d9bf2da6af5b8e88b5504e722fd0d9d02d24f9e1b52c11c1d405c69b6c65b09e041a2538b18c9b359b9a1645cf7fb648b657d4cc3c178699dda0789f14aac0f430f552b19459f8388784fdcec533e6f9c7d3ef4fb86e92a4faec977679ae8616d5c3be23ba8f141fa685667e36589c16658fa89c07d7fdde08c833bb94f95fc717a24caa1a16cff639d39049dcfe56fb424b78ad1e344b2bb7c3cfa8f3e9bc49d5c9e30e7322ea6ebdae2c5f05f4219ec019df9636078886f1a86e3cade0f035c618c091914d261db5c3cb5287c05f4703724058bc8df0b5c89884e7b1bdd72328481537c95d18cdee446ff399544651f1956b32ae3912f3066eec5efaddfcd578f1bed8e563d044f9d3d3ec292e001580a9a7ba92d5c77f8f32b0ba24c8c5ce4c78a1ba92b472178d7b94739c519fca33a143e4c05e50d1bf0264f46d628ca6786c674323e0989b76eebf39cc42897ea23da4d544ff8a0ec8a4fb44d4ee751522ed652de048386cdf651a655fbc67388707c6c03290578c837db8f79aa37f3aea33b4a49074665196e75c97dbdac9808cf29cfd53b1f1d59fe701aff68f91924a02f67c1b3d75d68964ad62dc71bec056404fe80e96fe3019ea81bdc337e582e2c954ad8eb852b0795f39c204af63b8570ad88d4eb47460b797ef2195909ff2c792ec8277524fa0b3f5f9ef5497890338f7ced30b856fefe3ff8606da0fb1a92416629d5ba6b3f37bb54a0271918ae5afd0faa15aca23717bc2cf5ef1fb06f21b901a422913be8fc964973641e57045cf1d6339298247dd4d9fa0c391579bbb88ee80488be360e7af9f68734f4b5fea9ea39d8a527434a46da78e5ebfc783aa59969b5e4e7b5ba459d832b491b59eab717f8ba1c227b562851e26cf66fbbf6b5e9c53f697c6da00686f408568ab5dcc415622a1cfde465fe9e636f84cc94a839da3636c13a24c0b216df6630e1333512369c23e8c208f27400de1f467cf8996be50d5ee169f02f3e90b159f2c3531030a0f57031e4cd887a4cde7d3a87d83d17616b0a9e2e6178447b23a80dca11ea318e7e73ff7085fc27a31da077b1500ccec6e3e634b939b0dccbdc7d1cf9e0a533bdffbeb3872a53230e20fe823176249ceeede4ae16fa1392badb1d732bd803a93e2d8ff8949781f91849dbb0146ecd276e8e9ae9f5bffd30a75b8f97def07ec1fcf93a446650fa02811422ecbffae1b8d457f7cfa738585f05a197a6eeb523ebda9d1415d7cda62b7bd9c917d431478e7263dd8713db6d8af75c0698ee476850b9d707c4b4210474b0ab0c21b2423800803eafffd66cb7fbbdfb6526fe452b19e0adb16826f5acb09a2e6a9b0a3e04d21b5939b8731deee4bda41e081dc4a0dce2a11388139a2df4ea33131d34832479c1b2887d71019fe0d548cee042625df4d47500f70a517eb43282f29b4821183942bc1dccaca1b889941cd4c214d4c209318b99ac1c71ac7424aee55553c3c4dd71c365d137cf4a44c5d5b93ebe3eeef99308361aa1a6a6ba59b132c6fbac66be21b6ab3dffd74fe02ac6ee42fae30b28b824892407b08423b1588d9451605ecc1de724d8eb20b54e706f23a7ac78290e4abdd4e579b601346e35838225c3af6b3d3b26a343419ce5199f5e8b7f5573af014f7a50e9cf15cb3ccb522f6bf0e6ebd5f3174638d1d206e6434ab51d3e219b4ab64f86b76b367ec0bf97be1fb5c79d21a349df2d93f11ac1b5feabfe7fd4c21d8b763b76d82f5dff6477ea539a83348b812030ce44816f6055e9addfb77581f4f3f13b687b29dc34bd58f8c48a1ba2f1f39737908702bc35c1f99325d4fe0a1f4a5baf0dbdc78bbedbc14754a144f4f6127cbcc91f9056aadf772d8896234d77b05ad9178f9080a49f5f5a27fd48d464391941ae7e1e44e0986efa48efbc6f80eafc2872af25842a3d16188d151d8715180832a94447b170b3c016794c19738dfb7146a568fe833b61886676ab1822073ec8a59b58b4e9be47e5bf6230321f1400829ff1b9ae799352e96a5cb05034c7ed3b83d09bb12c9528b8d84967f91a94fb5ae1f89ebdcd222b470b816b004884a53c2b16b6a393d8ea4f116705d4ba881c21e8d09d09e3b4c05b0015fbc13a62c7edb6bd5f2704efd6576ec07d422af0f40129c4c41c0144b29ee06e88e3df3760f86cd242deaca3d121a2b571a2f68db03ab1c6ea20f5163b1e43a2d4363409a2b335847a4e767e66ffba6299cf6e20ca26f94d41f3834a0e9b67f384a0d0370568f1c60e52d092368ea2aeb925fbdf25a4b73151304175cedffa6422fdfa2131fc5f52b0ff427542bce83d3c3b8378466968f2ef7d9c3e2fc8320b1c0e53c350a9ed82ff194955358f40e03a60c80dede2a8e0eae44a53c87847ec7f126c4fcc05f0afeca9d96109a322f4039abe36dd81807c5963c4adc28399fba5e28ab16994688c98ba357cce0cdb0c469564604157d7134a8293b4098098fff09910cf91f901590151cecbe964c05e230ad8d07c913771b32a6bf14ed71730993d6e420413de0438fc60764ea21c3c57dfa600456a96b52a2f8bc6afcdc3270d15fd6d3649641192f31015d344d5d68311363c167b0a60dc25911473a30a1da09e89c57282f8b3265054aa815aa3745aee48b18feb2bb205349097a9aa642018275ce4c4b0ef4395783b61d624f5436bd7cb27a8007dae2dd379bba0cd6f164a1f674f280337f4a9b5149a13df4b3994e4fb83c36c34c9dae22991deb349c29bf807e78bf632cb49b955326eeafaa9ec527aa6a02f59426f1107d60afa3df206f8083182be626609235dcf4f8efa15d8a62821c14e0ed9c1171b474f13456681cca9dfa42aa34c1f9f1bb436008467a1d025c27e8ef064b94897dc696b48871ba4a82b47b601d91a50eecad0d888d7b744d0e96e2216eceb95b3f2c90409aba9e8e469c315b4b124bf82bc12f5a8d37fc4e858722f94d5e834d8d6ce11f88c83d686a6d931e312db72aced5e1e4bcd39127aa1b7dbc93f6a2ad3f1371af0396ff30b055760c7ddd61865b1df175ba7ddcd27eb2b99bb696e8765448a580b1cf8f2411babaee0deca60b29829b63ad6d87485607005328e662dd611675cf4e67f69701c33e1f4fbc732f81c43243cfdf7735a138316653c99e4a60968ed7c43d082cfe2dc23f8abc75396ef506ba7d130346d600b86472c490662752309f2e63110bf684436b161601abe8bb8666e931bd4f3591d5acb3daed88fd1d8d431d2b98c0496eae4a4aac335a954c7a0fa4b8d04203b5a96188847b666951d09989b4facd3b42ea194a48511c40fcce9bfb69502807549606cc9b69657cc0e7aa6d9e2f328b3bd94d0e29dedc8904253ec9448e274185eebdb529081538e9f1b0711d53e88e7294f933118c4ba0d9243109d60ae5a3a0f1bd1a31f2e8eb9936d9c5b7c6bfb0ead3510c326d838814e16c1aab65c92c09b1d08b80e83e019bec808a8b4c2e365161911db588f6c2a50d9c7340cee58ed3a89959c43373cbeb1a667b17dcb4441b3945b0b0577460afa2c148b79ba2a6fa5024fbc95b6d02338b63fbaefa876b9350b4b528b001fe9cac067ed922f5cf8350708da5c4e2055d3aee84f309d641227d0a2d13b383962c1cb8f62da5de0d7efac641bc25da71ec2b56f1334203f8a26a6e8c47ed63c52326ebd90e562efe8179c7d2f9167c3532ffe43dfe755c0f92c71b0e65a932673bd13ae26dbc4b6a9d814f9f0332300985756c0b4ee5617162e09db27552dfb1c7372cbd637e1cc21b0b846c6aab10a2db9916b029fd03522db1079f9c09ff17a2c25d066994ef93c523f1a14fd76b18fce5f1696e52a6d0215fe838899f3272823608caea61844c109889c561063aab13bad762586975a49f980feee1c18f110657da1e38e74534fbddd26ba791e03687123654caf61600f9a9368327ffd4c3cd18c6aa58fe99e76ce2e6d33e37a8fe5d937648c5381cef53243fd8df8fbcb626eaea7bf10ebb383339584973cffd2e6ab0819c7341f94b45c04ab514fdbd5896cdca086f722f48b5f86b76814f2de2d08d06035ba3155e29046ae49a3350fbb0e2dece5affce0ac6a4aa01494927ce5f2f129c4d8a8fe64d7173aed875b9cac7b2d8705a6c373a36ee18739d51eb3209c811bbe02d3b1314e1ed2d3163af23a33aaa00f2439e2302fec29f7b399479e975edaa630f4dbf68da5e0e6dc5619ff02fff9332fb155c55699361eb2ed6960eae5d457d42de25caf41726f32de3241b3d9f1dd17d5cd28ffae077c342dbc18c5ede1b403d65c85cb1a2127ac96dc22dc7c2eadf1a49dac232cfdb1cb6ccacb55402e25e016d4fe3a875d423b310817a51a34031d5e06f23b98984a538789a3aa07e00d51002c535f1504760e42d32308e497ae442318247df1fa1a8b2780dac5c497bed29810b93b484b419c9bba13ec689c076c795b6e465921dc8e63878b509cb26fb2b6a8159c797dc8aa65ae8bcd60ddc4341b230e85561485947dbdf5eee9df0d225f10f1065ce1b3bf400061dfd27d80f14123017e4ced1158713387edfc662b6d1675b32b6af5e5e258e95d5d91bcc058b248da7e1587fbb17f60ba17bde7a80191a8f83eeb516301914958f11fb3aba753293f85973e4cc6095758993be2130a9c3a6d23196a6e567714e4cb952168dc392bb09842b13a0dd669efcb590ac2f45365922deef14aead0703da9932aba739b14aedff179e783a430d974b92e352eb9e46d7f2fba1cc4083b1f128edc57652ea92470be2b78af11eddb02220a62bff3c88a53818aa2045b7d17887b88720a9107fabfa621aa6ebed73af14f78ecdca0f5aa1e042802ae9d2d0d35af0b1b5232588a69dc3b30e3d4f44374781ea21154d59f77108ac5ff360bee8fcfb7fa0a7713a05065541df969af0a02891830050a15fec2b6016cfd05ea103ffc1bee73995ca5ff74b157bb852700dfd44b387c18c0812168f5dfb21c36e2b1bd81ab6047ba6df3a565a0922054c870953f116fceb18c8384cb00bdbf565189332899924c907c4afd1e1940c743fec979ae809c93ea24d3eb5f37e5e3f22950a3f141572b077b6053ad5daefa2280b53ebf64cfcde8f304f09857ac3eb61aef7fc51035c39e02491a54fac70e87cb51cbc11875f5a360b37baaf9ce4926bf68707f43af603b820aebe1f5e7d829a682aab01d25599209e6781c42b900d3f3938e5b48385213327be0b9995a8d84a0a1874aadce107b39d2c722aed8a51a3e7edc90487f800298b220958f8dc4fc030b01d786a62ad84db3f14926906bb6f1ff14b6107b91549012a5c3b009f5411cf8a0f719209b742174491df15d09fad72746edf9477d81e498b4a32755de9e77a7c7e0db35f4df60c55b631098733becd52f18ae3fcbd8de11ddbb7c09218650afc15c689110120ca16694b4c70148cd51de211b826cc42e40c5c6eea41adac08eeda138bd2c0462bf177421b91f667d8c086488729869a287f0beb652242321f1322cb97a88d591ef947f2cfc5cac5ccedaadc240484d59b80e42bd9977246bd9cd637dc3a25fb1cf7fee553c37a14173e46cf5314be769908b3551520596344984c6cc8d0d95572f1a04a463effb9fa6ab74abe0c3e5222c654c5be458977c392064159f1c0e70762808acb85b72a5c0be70eab5f78c2468c2284b74ff3b699be85ed1cc95647302821d437785c67eb4d30f72b9b87c7c42db51e92d2a0f2e111b8c7db580670951b925432a5972006a30b890558530971b3131f4a6be9785d58c6cf7cbc5d7f2c166108c04863337c6273fcb1bb33b062e4de86b3a99289265d6113679a02e9ace4ca72d68dcd514d4fe2b3cf9c67c62e2a33b5d64fd1dc615800c15001effafbc7e8135b0c2e35ab92b67a72720ee9126b0a1b12670576bc105fac4aca34d84f2a0a02b48fcb6039ecb0e1d15d7fd24563caddcaf83b899f80d4537fbc7f9ad46396fb8944c7cb592951560c30b0df312709653e22bf679576bf39a7d82e3d81edffd59534eb4b5c007b9a18e2d842dea575d580745a871c63d0dafc377f83d981d2efa2f1dabacac6b80697c4d8b61878385f3791524f866e6c8bd6ebbc9d242fb2b507d01a45081b903373e58611af65099ddcd6268f9945998e0ea1e07f845556ce20aafc4ec9a999602aa10a7b3799ec44c4c5228c48df3e608754523ed846a114387a23aab1add4458dc30c5a137173ab0ebaf45f12390ec4274ace4b3a030f6538ce3beadb278f1dbdf740760292bfb728ffaaabbc459227e388eeff3d69fc5ce865deb93c0fab797a9233046e9ecf88de45e31f107b8e66923f843cfc6c6f8cf039d8d89c823b5ffa1ce59fbedf48f2c49e556d11dbe7184a035d2ca9e8b2ccb9017a39171fda83b20279948d2e3b24560ca9afa0148268228318280da2fff54f7b13cea8ded014749336cacd9f758d283178b67cd8e197f77a7a34c0e9b9ebf2f3423b120722766ff229a0a110dae02a0c8135a494613c26e3d51f1e819536f88b28be441280091f5f7f16282a659a117501e3c2d3c522c3f3b4956a3ed64103a8fd7051bc9f8ba97bb6b57491871a8e2c6191dbf47c5a3c0c05a25c2a714afecbd9fa1b0e4bb7af9276333581fe83c6ad71a87a44c90316122af10876149a1c921fb5409bc1452cfefbda08e03441a48ac5387451d919572628215d06972573f1dab312b48499d52a2e6900c5b13edff8199e738eae2098b10bdd11db83e6f288c71e81a93f581af731350612497414d9f7a9dcaa8dd0eb7f0fa194802767a24bbce8f5b9d3376bd2e57ce7f26a63fd8cafb022b0a3ec10347109c616be79b71b4b4e162d3abbb4dd98ca24687299f41e7a1a942ea27b1581a93a191c4926f6858244a3f18c72959a938eefc3e1fea0e63257dc17d2b21af87ca65361c17ee040dd4706ed6c3fd70f1c91f059f7d269e2f7652279a738f040b402b936e18e171e00032777135bf0e80ece8cb70c9f6812ec652681d2eec7808e0c1aa84afbca326baf3499a413f0fc0489b92560e1ec09214957a7752da9101fae5794b3c9e9599ce606043ffb0cb00a56011a72818b69d8df75a0ffdb35918f40851d94a2dc769772a73285375a54fca8c888a6a6192e09996160604d53a4aadb0a876029aee17051f3cb80789965bf188b780c598c6ea8857a3996f82809bcff23941cc4b3f2b5d11eb1fe4db22deba363e44912f162a1e3e210b59870349c05908b51f88f22bb19706dda0b4279be8ceb240a758eb8cecfda00467f75da4c62f7bb09dd92099576ab28cbe9bfbdd7d67a59d1188c80aa514bd672aa2dc717b89ea088ceabe69208400f5eb7a4399fd5ec64e52995fa7267ae7f75ffaedf87d51046bd7c3629dec153579bf339259926ca4661f7a510d165c34c9c3b79c9c90c62265ca6c988ec065896dd942980f72ce19e0bb28ee57de41e905655a3633f9e8b87e3d85cf2b166beb79588fa2f71341a022fa8d204f354e68e7f80712d9fe97a1e14868d8ac80c015e054904f0ed1ca5cc6699e9a3e43385c46afc696b8b07d5c4bd1a74eef9f547901d971947f52a9fa95395f3ebcdea2e55c464a01d3f70c9ffc0d912ea7e21d864aa40e1fed0c1faa6722db54580290c6fe0f236653a7e52d01724bc1dcf5a9f9b4ff76577861b241e9c48946f465b1239daa496fdf588ddfb2dc835a118d4d3d4337ef096312d22a87fd28385ffb3879204a301b94240af5c1269b91ab1971fc9f484b26585630c61d5714c889105265752bfe75123db9b92194261a1c90916bb58e4443d6899018543514d3d0928d41b470dee205901b5ec3eb83a547e8a9b76ba8b1e5e44c1722ed5c185d1b966b58dd80917a6a64dd43d2f6cc37c4f94bb61330d50c67ec8059357ed93a174481d479623196181bb8e37393dc8a3332af2ac5eb3dc540b3d013fec2f67203f45dd0e3dc0c48d6dcbe64616c50debcc154c79808ad1b90824aa671311f1ff052edb397f934426102868fe990fae7dc48c932fb8ca48b08303d21154ef4b1eba804d8097383f76f24fa3c8fdf3c4a9d9676641cbd8ad37df2d48c615e998af5b4c5e99179df42bb67daa3c05157041a2911aafb623c606fb58486f212ce3cf0b7d0704d55e033a1899a37cc9ecf2f3f740a9ba223c4c5e7b380f452b189c6e2ba5bb0fe2611bdcb2fa71159a38c4fe367aefecea2ccea4d47efa2b83b9bdc23345b213a0a915e366ee7da8224fe1c0779bb1a3ad473e93dc828d8da0535ace7ac01f5ee4fdbf02dc3562ad30df98e90b463ba8ab84f34b30b64f838c95639a44d850943d80d5f16b1f12d0335c21e9f903573a0f42e8b940350fbeedeb899c8ef0df1f6e089c82bb9871b8717bfce6dc774f218715d86b9ce34fda111af8881a56ca37b4cee29da85dbb9389a97e74caf86c1020aba77a131636586d4c805f36db57655793ab43cf8475dcd0a973ced973ebf7e9ccfd57a6eb2ebe584f9de403e8e3634f8c02ab7b2a0c08e78c34b16aea9ad94f5740593a8d83cce98e824de7e2550a2d785be928e093678c99fea016b255a7387fa9dae875d144dd7dc7015bd75b43d9b115180b47082ca3e29be3f37ae3ee4c3c30cb93ee61168ee758f7668953a81d95f6793eaf0dbbade40cfe37453f825016c1d5a58d981ca1a6902b8ee00650c05307914ef3ad7f8b211744690eec2024bb8695851daacb51c6f7a6d43752cdb702fa3e54c54cecc778a06c6fb62de7d741caf816288396c5b0893235fc00021644cd68488a352e592aa07d764b1f9bf51bbd2f5f5f25a2c5e795872fdc08fb7f857fc70090f5c8e579f376e4962c91d68d88e63214aa2db3cb4336a3589b62831bd31aab622342f75a557736cc6249db158a200cd444da2ae46cc32f00639e32388df4597d44f360d20359598e1de992cdb4e036b3d08f77ff85e04ee8e026b8e684d98d0c4e5994a388482049bee6059642d6109b8b2a5a8d10fd682c64f3c7077bbbef9d0e0ba1a12d5b25cf9765c9f0c8e2002b6afc82640570832ae3eed0cc907479a60db85140a86132c182ead419a6b2798b2b15687ebc7985cfd4cc0351f41b1bcda39f5d2fdeee74cb67a9cd11757ab2f071db71c2e7c37782b3c9ab22d256b36b8b45dba9cd4f32217975f7247d272456091d5c118f2a15b40fdb7b0a23429f2ed38956d4a87135f1281cbe426709280af505d6b65f2b1c2f1b959e6a4f676d43ac422db652c4054206cf5da7b21a1d18bfcdda6b690596aa3ac6c79e97387719bea86cfb77709c72abb3ffd762460ed0f1cc7d6c4c583c95137ec28632354d31af19f4a71925f5b737c4c1bb3dbddce712d8903f20d250394ec8845bf06b35dd5bda0f83f4e19b26c8f9752ee48a95cf724e164b6a4fd9bee67f38826b9ef13cb8d015796d21c061327c5b20010552d0c1375a502b2d8ea6bb8001ceb829a1e28c32f31dd795a1cdeaf74fa448dd39525af8c92a060e6976f2bd0b42fc13828e844ee5aee7d1ac111b90cfe79e90d0f8aa014cc6373a6933c3d58aa3094e289521d06c6680edeadf43ef739d738ff2bd02232c9b6f565cce33294051c15699276c300e1d65b7baf73c43e0b5c791fe644c55d4a41cd11ed7fd381ba1bc93487fc8cbe7f222d48093fda4aa2f134aeb95fc625d32524167cb687e90ec12bca2af2550d5e0b8cca6de823b3c79ecdcdcec698d283f8b8e9b88a117da3f7b93c0aef7c555764f9604ea9bccf8e81aede2af2c8d8482301b92a5a2ca7f6102729e8e3dbc063b395769de0b0ffa33be1d998263591aa2ad41f96ec59485c0040064f03185d96b43ebc5ae9f89009f6f0a7b7d2b055b0823af89d0cdc97809c7754d04fe2713c7cf3981839a35eccf9877ae0df5225bd4fe0d3f37648894f8bed92009416d535f00e933cb84f5f2e550e5863bca9ea793aebf50ca0db1e770e8e3a0179e885035cd5b39ef8e077a0298963120c11c99e21c627f4e00351a670ccfcff8f7149565a1f4fefd2eb3e4fecd933228217032e0ab32e38f4d845056064a25948f9c7f199844d24eecb5a0573daeeef157ccb41ca6dd6fd93b1d57851d1455004ce84051a1551e298cc05fccfcf6d886ca286c7c05d2c44fa6212be62019fc268312390ccaf8f4c29964123ba87a28dc0203fbf04ec2fc1826bc8da6defcd725b22b4b78a88f7290aabb7c221157ea6785d26be66ee3d8d778de170437f2899c69daadf99c39e4038c5f71e041d76d17c5f507e2b4cf612e14c013f97c0943acda07302b396f23bed05744c5550366cc5df0fd7637b579503b241653bba0fef2dd2c45d0e873913f5a6db93a0d6a19368e9c1328dbbdef245bf0377fa2e338345ab4039812fd0f29b98af87c937c9b17f1541658d17610fb8e57e7b3f19473e533b0cc97770a46144670aafb2b4bccd220263d82b9d5f3d1141f625c98f8ba2ab70f04c4ca8f569605d943690645007a08ff373459eac7775f8d9aec124459e14cc3dfb98650ef6119ee513a70b455be99f485e7a32f43a7db2b6586ab8ebfd69dd43e5f383be27cb10fb404fbc1bcf216c2160448be361002ae27f61238ada2f5acf54e850519300417b282e3e2e17e96bc2c05c765d94261448511fdd637e24db0b06dad8703836f1a792678f19592cf5ba146fac37ea588af2a790c4d8528e1dc4121e2e73a6ab604f3ce46282df6fa66d1e59792deadc357228d5fbaae491447245cbeec3e75402cb373cdf95c6f77f6087118675c2bcdb70162345f65befe7f953035bb559af631387b7b8cdd779a0b278abc62c6fe4e916c5c39268692fa1a3385e80167fb3352f29e25d8a43360603f9219e6426d8ea9ab5bd300dca2635b5787314d836d8225f18c753c34589e277d9fd49fbd18bca1e2ad6cfb6a372d204c4586b881aa9c1b7fb3fd3be4b2a58d48fb1004423e4405f26658443e4acc085bd3b8028603162ea5c08cf724965e5fc909d09fa74475585118721077bac4099b5284eade909cececf46259fad55024ceb020e4945c70d3a50ac26c90103c00030000c0003c00030000caa38fe5ae8af5453999b32d4048828e15b4bbb222252eedbeb010087510000000040e207faf8f94ae50d530ecf0c8cbfdbbee4f796dcc51dac132a2a25d75bedc20ef9aa09bb1bf11f2a8744223a0080882eea606c68cb9a133bfc4542177448f21ad77a13ae559f4361ac4a081fbdce5c0ead85c9f5395d4fb57178f7f2e47c2997c4281cae72cfab1b3bd46ef60de8d7df9bfbedc966dd906859e5a2c4d406ea4ed68f9627d225cb86634aa973ea4e26afaa6bc84266448923155fa36a48be3c4564d234f49792bc78c50f9ea3c1387eb924e146bf3f43a59a51dae629a58f19bc68ab2af38fe9da32b49aa49f9ed4e9960cebe5fca9613fae9531e89a443f4fad9f534e0c6c948ee5515ecec44c182a494ef7e46cb1d7070327e6d42016ee1a53ca17ca315e94dcf97cfaf18252f729254fbb4064ac9d145f72e18ccea0f5e516eaf23b498c575151d782256a56e612f4cfc35930c378fe3bdd146c462c707218cb1b5593ff825730af921452e9d337875638577e5d93990ebd6115ccc15a3e7f7bfb932015fccd268931a6b097d729901416d04514d0b72d413c7488d51c14d064ab621f92192bf7046b273d364997a4cf7342d572d6d59bae235e13f630bb1a7bf19bed9880b86a7fd0ec9660ea5dcaaa9d4ad14d0998fc1d2ec89564256b49307fb5a4bc716f52352460d1bace433e49a5b123dc316c45fb8f963f6346e8a2084f67ff50fd1dd522113c394f3272a9343304c5634e45ab965f2784fe4555c26312e5b620183ae45c46e7e6990c0877a67872ca26a942ff019b33db1a2a8587ec03538a789eaa98e7d383f36b85da7729a15c1e745963cebffcd889ee80b173f7cf705331aa2e74e08d5ffe6e9d8b2d89c16a738eba3de3c2181d294992f23829b7b02d99a429f753ca650bedca66c53b66c844b5b83bddc6f8668f2e2d4ac9a3a6cb8bf6a4cfe2bd4ef1c5a2eccd461666aecf29a6e85c6d89857dc25d0aff5d111116764c8274756ebe8892904824e48718328844c6d80cd478c5415a4454fda3c5898744221b8980b1e30c1f3fcaf0e6e1001d3edc023b9250c315754ae26e5c831aada8c10aca6f442e9e28d71e0e8944de7d3c2087037414e5a0c62adcdfbcceb13da63b1a12898001011d35a8a18ad39bf4df558c96442e418d54b0255ff83fc92e4ca6432211303490030239c2d001821aa828d786cc91269ad0ef9ea2ae1e1b934eea5039690af62d2a552da5b4180f0ee40843c70c6a948214a3c043d3594ffae99b4614c6c73371dec2754c01c00e6a8422f17553c9b7b61f75058596735bfe79ccb1800e0018a1c6272c6d89fd2ad74bb3a1a4862756d578ea6693c95dd389c2529e596d4a1d6585ec18638cdd11f2e3057eba0627d86e9bf9ccbe27a6b6c70f1e168000066a6c82d2ac194d08ab8a9fa48626ec98e9fa7eee4fcace84b122934d6cee7cb060a2bd750d9b97798811021d3d7ef0b0808e05d4b8440d4bd4a8440d4ad498440d49d488c4026a40a2c6236a38a24623f83129b8a9a6e6ae6480310107e8f8618606784c20a406236a2ca2d512f914a6e29ba58a2832685bc8d95a502311c5a81c2b8e8941d4f388304d78fa5789f2546287787d73e668d9bbf79421f0099373905bfd300b6a14c2ca5a4247c449f651e7518310e9c5134bacdcf4eb778c1a83f0a2b8ab64e793b6e282c0934973327da1a261204a721a957fbe35658b183500a16a9b5c99ec7d8d3ff45771f7637c7f09b91f0cad49e8a4be163cc614d4e8836952c7fed01cc4738f851a7cd8473d57a6f5434c6c0935f6b06abe9c43fc8d86664e50430f4962728987fb6492d31fa891873298b45e8cf3b94d432211ff61c60bc898410d3c7029d5a9b34a6a491b2bd4b84353c2a64959593185ac0a35ecd0f4e55652d5247bee52a85187b2749abaf01257e2a5436daee561f43ef83bcef0f1230435e650f8513191283d50430e74be9cbd6346fec7ab461cd00a9da16365cc24546ac0e17b759b2e9dced2ef0d5be80cf5b638de41e306f65467f457ceafa46bb4e1245b66b14ed241d584400d362c126635d7256e4c768d355019aace374dc99ee2851a6ac8356515adbc79ad7c1a52eda8bd9e5575fd45c3a993557a68a96469ce807d68afed1c9a21399a6fea49c9b65f86a2a4540d561e36858c0cea6ec6ed939593eb312454902ccff1ef3c586230ef8579ff4f1d93fc861a61d856366c35c34cb92524120143f595a7938934861a5fb804fb0cff69693567470d2f541a9f66426cd0f12d241261438d2e949baba52725ad774a482452460f34d4e04225058d2795bca6cef70079861a5b48ee3e134b91fda84c991904f0d1e30960060f0ad4d0821baebd7ce22c2503307c682012d1428d2c30b5d9fced3ebd430b89445cd01ea2c3c7e0cd420d2ca425d9eda8465914b5c615b0d7d2afd0bbed5ba1134f5cefe49b2ad4a002dd921a2cb6878f6656a8318534e5d12445935cb73d07e888449850430ae61c735f4d4cb9c763c288418d2860ded697e4fe637f5e50030a9468d1296fd45451fa271075e9335e8adf4fe24ee8b2ffd9dac598627a9a608b49962a675e13b6c3045330a9bbd54a33787a0949874af24d57ce9dc34a28bcf4669bd9749db349b082684fe7934542f1c2ad4432658b8d39025956f99759bf522a8d902cfb52d26f6b4ab71581fed35892f09fe3844584e7a4933ccfe4b4c933842fdbd967d90c76292484c2c7e624b72597d341d8c3ffc5f78ee13d0508357e50c3078a4929c7ae3576ca9d1e741f3ddcb8db87e834241221a3060fb0a0f9df13a126577690581653a7d01a2d945e43077ce676cf1f32cd3e85462e8c5d16acc2ebc999352e4ac1353fb2fa72ccf12dec922f3eaa6dfe4f638ba36fce484f9e1fafd5624d39494e12b9e64912335e408b4dfccd3673f5e777165c9b4931a7743b16d516d090452925e1d27ca4dec22716945a8e31a578c3424d51e1f42a37afe65eb14699f45e9613d53257dc9d2aa5533bc992a65a5170cb249e548dff95ec38c3c70f562c55d7799d319572c380c62a0af924c798f8af59351368a86213aa636aa6ec6be791038d54bc312769d3c34f2ac916030d5468728eb7922794b8bf14c831811c12c811811c10c8b1021aa7388b7b8e4fa9ef593105256f9d10a6d96726edf13c2cb0230c344a41b44dde9a1463d27092e220e937267d70cff293416314873dcb71b9188b9e432211ffd183470e31688802078d50289d9bab57275f2ce2410314cb89f9cfa7de3dc6cd27145ffdcc24ff4edde9893b76d42c4acc61d247021a9d30d4b5e4e217ac8f11442261d0e08439875f5a4b25b48935ee4a98e86a22c9040d4c2455986587097abbf225dc9d137d736c2b69244b5cd9f2afbb62b831f9c1637b45f0011a95c82cf6844ed3944c3443223b7cf48844c010410e0ce888443a408312573e9ddc24fce5381e1a9330cb78ef4b49a2572402460a948624ccec294fcc2565cc6f262134225146aaeaad56925445828467e69f1b2a76820ad07844d16a2b25ad2ce57c0ac03880014ee08810d068040d46d058040d45d0488469eec3c66d8c31bc29400311748814d030041502f774d2c56cbf2533134293f24a89712f2a9b86c620ccd99a52565df7f9bc20deb4dbc95d9b0cead141231009e69633eb7aa6ab3c20124f0e778dff1f32a99fabe898b2cfe3075ca44bc3626325ebfac0a4c9861e8ff18154aff99c613487a6f6705e2a39689c8d7b238644225ba0a107fa828dfe09591353f2041a79d8c3eefb77e79c84b19240030f55dc89fdeb77127632028d3b981d5db94a7c5940c30e9d9770b15d3c6b0a0934ea50d28aeb9e4ffcac27191289e418638c85400e1d0028020d3aa07de9f3758aae3b7f4824e23da031072dbca84949e23d853c2412f9e1637d9841430e69ee89ff0d5d7f731c8cfd295a6cc75250b50a34e090bc267eecb4513473f60d5e4caf296a9f5b4327051a6ed0b26a2ec94ed0bb126d8321b63bc8863c3dc10a89444040830ddb98f82af723b2b9b2062e099f45ead2e57e510dce6c9a9c9b33854e4b230d7ab0123cd2c4bddfca183e4290830734d090fab5e7ef20a992930e24d03883a92dd473adefece77140c30c58275593f7f2e5f7b60c2629f4673aa66e7fe90634c8a0b96ef419bda99263c660060d31d008030d309c3f7d666ffc2c99121ad0f802e227e7e50d992f74e80c1a5e7893e4e33154ca4bdae982319464c1921ce33ae5148106170a9b243c63b488125334b6c0c8c7bc6692c40c992442430b44e6106bda9fbac9008d2ca463b97a62ad57d41c0f332e40030b6ee6f8c7f709a9b38544223c765480c61568588146155c4d959b921cbeb9bd9048a4c7a14105c7e4ca277e1293f7851f40630a67a63026a5d41d3589c18086140e9f3676c2a4dd36e117d08842fb9924dd4ed5cab11ed0804226758e399dc62017cb27ecadb9357aafd459e604b3d533c5e093551f35c18f3b29a5fdc5cb4b1212899c317abc8006138e54b79061272fbf4886185b860f1a4b30b4c6d85c2759844e4309dcbaa7b85021ffad19d04882a9726e975acbb8cd85b0808718349090099a83e65c5e2eb7d33882261d65762dfec48f1b21a1624ac124b9643ee700392ecdc861ccc861cc30c005681481061176135b356e491a5af107680c6103348400021a41f83fe5a85bcd133dea011a4060d2de3f8da7f3ef93101e3d7e50be54ef49fde622341a3e38555a3386fc3c29fd212fe8e123029148193da8c4248fdbf4ab05cf5f40830775a885cf10f1359592d0d8015b71e3a1639e336b34748006fbce396ab3975f1310402e12f32dc9d9a73d76cac18531a34ef6a64c6ff1dcc229c9e4d8e28aacf7db683e22732d0e79e15d726f86932ab4507ebbebb4b2ca49e62cb28bbd7b628c25e624c922e935e6243973b61426b110002c04f00a01b88205d00a0d088015b48a0508401502488500502180537ce97d29f92575644000a630e7ca5f17bbee5b3a1304500a2a6a89d93d6d3fdc8714c6e576534bd198e1512494247d3eb18ed9ac440206cb4244704314648893b3567a2314c9bf2a72952463ba68106e80e2e89dbfa975ed7336156e7c6257db8a323bb6e2fd0d4fa8d9e454b7624c78ef831b9df8bedb9224db94d0dfcde0062738ff6ed91cd221d64b2047182db8b189ff2c9b7caf5b060b6e68223159bc7ecebc6e64e206268a153e3e6365676e7be3127a9949527a6c422211bc61892336665a4b25df4954c68d4aecff571772f343771912898ce00625c850391d27cabb7ef8fd0393384d12db4bcc399d9329c10d4958e5a6e936da891a321c043722d17df04ca2152db74972e00624ec9b4a41a6ba3bc594471c5e3c76348f92a3578ea0e49225af635790971b6165ae5effd4956f75317c84c188677dc3e2a4c9e31713024604427063115b4ee1352f378a38b2c7d44b7037391cc68d44101773cc5167ac529ec5308311b1b94fe5d08df325e70e9159c54e295ac8acad420cb1554a7ba3194d9c4e62e046214af25f67cea7593f9a10225dd37c9672f01ced0ee2f99252123b2fc7cc193d7cfc28c3cf0604b1d494a8bae7b5212a2191c88e1988f18120e4666633fbee330b08a65370cbdec152f22a2412f9c373eab1e35b82a49884a1e38783406ff8e1b28df274b29be5b57dd0d32f98eb7d788f9a0f59cc8ad9afc4c64fee8cd163c71ebad160e772e298dc181289fc583dec73a9d3f2c9eb1e1f3dc4d821811b79403f3337be096b1d3e78204d67cd7274cfab5d88036edca1964b9f3dab520e936be0861df8fe4ec256786a125375b8a4de9382f489ffd9840ec96f551626f97bf2650ee60fde2587d73bad0c10dc9043f17e6d26b2d6d33f71c864694fff6dc2cfd52170f0525aea9f6f8c31fa6f703bf47eb4da5482d66e28a5d7d849da8a4a761bdc12644fa8eca6d5dd026eb0e19ecbdf1bd768b25ad6f07d9a4929c9456506dc5083ea9ef1273d5e564d1a742f57d3f893a65502230368f0246dd47bbc36537c866f2cc5985ed54f2e49cc50124d716314bfdcaa96e1ddd81ebf637bde4fc9608acbace9333a86b2bf72f7538a9fd712c37163a5b0bf7031a7948f1e3bc0b81106f398e0167979e562320337c0e049f953ad6bce78921c1289b8c0bd8c1d3c3ce4c78e0edcf882b57175825bce59d332811b5ed8f2957872f7e5f04b8544223b7cf4d82183edc2b17bf7cf7e57aaabc80d2ee4499efda81773824a6114e0c616b21832d55b88544bab853c34b3e7fc379e52921e3fb2704ca7e1a35c7e69562d70030b7bd44fd1ad98addb0b29632b1052c686682047181fb871053ca35e28ff781687808e337cfce0210117f4fe00818f0878e086154a4928f9dab3cb36d9d1801b5550baf28e5a36b73c2f156831bf8ab410bd8f86ecd8c1e3779051c6ca60c78e1e3f1670630aab9f1c3435b2c413062e05cc24fb244a499139f6904824033a5c0c1f6168e04614921b50305da60917a1ff8e1e3f7664e0c613384bedf9a153499eb71b4ee8422463c79655e78c1d6359c0430c17b4183cb6dc6802277790509d33b17a64c10d26dc58c20d259ce04612f80612e80820b861841b45b841044c2fdf44c3eec92b86442225b83104f3bd3b8973d9d56d211ddc108296627e931c9f193b69702308c6f2d499dae277339e88e08c1b40b8f18314dcf08119377a60f624cde5a5720b91dde041e69bbfcb624ea2a6ce0eb6e91819a74a263d764307ae78a6fccef6a9f1f390de0cd8c88517f374dceac8062e9270919fbdee16ef8ec660e561a756dba2b08a91c944d10a366fc0462d0ed5e513265694ec9191011d3fccd040056cd0e212e2374af093c284fb430c1e6294b121703e63351089fc108387183cccd8e17cc692118990e16464c0c62c32604316975a9db9e9e7d8d4b1110b7d4d2e7b57b8974f12c236606149ddf59b92c6eb98ee1318838d5738d5619697935cc173aef04a32f7ce4884c9263a6cb482f45b19cf2727d1666745c99394c4fd84aa4df12a3041a7a23693fa9e50c1862aca9f2f6ac650ffe5978d5498fc8413edbdeeb3a78c600315859f1426d2298651e914a6dc5a5315639d078b0d532445cdac29e5246795dc0e6c940213af429f249fdac8860a3648516fe650e39bad75338a622c495dd484becc4a083644e15ffc24a7f07413431f0a2af7c450d6d920d800c55127d97c7ed6d4e2f9c4ba49b03bf14f88aacc13d8894992247736f5bb3b60a31398249f61d26ac9f2b11ad8e0849a241f2f312729a5f36d6c82bb349fe424f5e44860431399306dd88bea1d453bc711d8c0041997eeaa745ba32d021b97a0e4100d6fd5a51d16d8b044b77e19e6a6ef24eddd462516559fec6c273596131289f8581fa3043628416df08cf48b89de7e125ace4a62926a743a456d482229b6e7d87a6a2412bd84f7080b736727244c93a2f74bc6558ece234c1dd910bbb5996704820d471cb52b977491ba49f47cc04623dadfacacf1fcc2b262011b8c48361d3bab4b49d8136d2c8253998a9e3ac5063614714cd57e25f9b2ab5d861967878d44b89fcea6346fd64c794824620311f84c499f5d4ea80c246c1c623f49f5dfbcf0f738c286215c8f53b1faba9048e4f818bc3e066f256c14824a23221563ce889884304d74cadb60523a4bf1818d41b49b2e6a77da915c1098dc19d253aa277c272412c9838d40e49b64972fbbf0379a904884103600c15d0a1953dee6b57648243206f3b04024f27fb0e107553b548c7bf199732e241251838d3e983eb7da56f5dcc92963830f6ae5cae57d60544007080020041b7b6073964c4bf93161333d6cc0461ef8557b8b99e3f2e52436f0a09a58e733171f0d848d3b50567da2e6f63289dd0e6b5a4fa9888a8893ad43fa1b4aec68cf8e5ea1836ac2863a970c4d85fc104306dd230360d89843a331ebf9427806af42c0884464d0638c311c90e30c1e1e011d67f8088387878471060f8f402462430eb5eb54b81cc3574de54005747c2012a1818d3860b51a2e45f794a4b1e1e09b10a1157f4363d32120c821821c21656c052236de40b46eb86bda6a851f1289f42883470f084c0003392aa0e30111d0808e336cb821b913f35afe7cc2cc4a041b6df8444d4cb5ea11820d3618427f5b374d27d9cb21d858439f5d73564f1afa332e031b6ad035564d65b7db24e521395c0c1f611c000c30c030669c1e1be80f4422eda35d041b88440ca0231211848d34dc6ae2f569d9cb7d340367380622111d2db08186c7daa45d37f6e97a66d83803e749ce71c16ccbb22311e0c186193861d5e4254de8b33d453046fb7941197ab05106ccc773dff6c364b3c950308ffa175636efde43b031067d3ec554af269660ae18b87c62ca90f11573fe9a60230c9626f32454c893b33c146c80e14e92a0211e2d2bb6f2c0c617e8f64d5abbeda33a25c1861734c1cf76ab4dcad9dd0736bac0e55c5d41f3dada2609f9c0036c7041ab60ba317b5432670bafbbf527c9c4132ffb5a3844a23377ce63c2db5960cdbb525d5fc6b83116ceb06143e6fa5379642c8f48048c1e7f05fde2d66ffed86d726785b29689491acfe93cba21111b5568df4d92e47052126c508117fbb0e61219d59982eac12ecdf799a8e1337cfca0810d29785615a6ff5ae3a5310aa5925a37e77c52563cb00105cc7e4e52936578f42191888d2798e25ae54e1d321e4320d870c2fdd51de3a794772617828d26d4f291e51ee59e921912891cc0001a00e30006c871860f07e38c17c3878b40870e30cc580f7141f71883cbb811071b4c2873ce98ff1ca305dd2ca16499c16dd317e23e1a6043094a96fc67d8601d3713128994e163f0862183f5118930c04612927e6663928dfffa186d03098d544e5e3c93332ce708a8f8dd05132d79c6d6088cb7c7dfb41053932bc26fa1e9b33afb4a36229cde9d63eb5ba3bc830c1b43d02c3bf5573e93c91662430895cf5ee5cbb62f4b1204fc7b5f4fade4263d40e0c4fc3dff52524ee50756b2d5b0b396cd261682367ca06888cfe96c982448ce43063d76f4f811892cc0460f28cf0ca231fd630e8f1de30515d0d17e7a404087dbe0818d1d242bf351dd21277e116ce8e0cb9f743fd5bc885e5210c6097454a08b5c9825da83c64b21b752d9052e700d97933019dd92a8dd22ed58c296c966b9518544223bcef0f1e3bab04561d5c49b4fe2769f36461961e8681f0e88449ac719d4452dbaa04509ba98c509ba904517b1f0f6de5eed24643e1a8908a10b58b051d32a87b5f94b61081837b881fb30a38c1e63740d6a10899c318373361201e38718eb238c001ca18b57f09dfd996eb129c419128980d1862e5c918a65e8f9e5e4317d4222111474d18aaf82a8daf8ab9cdc219108182948228002c00023b12a1089e8383d361089f8e9c12312e173021c74c18a2e5661ac6426aeefabe2934a4eaafd1aefd949859562be127b432cd78d0a2e57a9ffcc673af14222911bdc800c3142ca48400c6a50830a74710aabe3dddd6fc65c96fd6186064a17a638e64f617d55235f9e904824e9a2148d26f5ef8f19f3342705776327768ae6132a338a840f9bc4ec68794e3751541e4f324952ceb691cee822149d74f2ac39a549080f28fc112fd9f2b098be7ec29534b38ff24de1e43cd14527fe3d51f3e6effb30931874c1092c49164ace7192e72ec142179bf82f67aea8daf949fc7474a109339b27394e8aeeb55e269edfacfa312553eda80b4cf43219bf4eea52df5c7671097ff34489bd1b12899cf511468e1c398e0572b84f408718bab004ea2ee9d51662ab5309b3798c663a13de6f4a9cb5a48c269918273393e8d3e5bc7ddee5952e09c2829fef57ea8ba34782d318d18d1e6ffa73489865fc56dff347d4f9b24eae92c92eb923ecce27baac6594d11bd1650d993aeb6b680f23aa7839bf999492a4bb08cba3c9d932e528e292720e5652760c194f224e4d594eb6fa9cb53a8840a5e72b776bf80c9dc410d445217839e1624c5f25779a10dc455d3be9132ac50c828a5b9fde4fdaca600ba2cfafcf7ed63fed09841e35aef37fc6cb1810f466ac9c0c19259691c3145dfc81cc731aaa37e34c7a3f64959314f2efdae93e58fd61528e4e95936788d0051f4ae69a72fecfe99caa195dec01bf0c2677326d2f131241177a38aa7c499eed440d16ee220f5e5e8c299d184bf493bbc04309fcc49bdc7b1d4acb2e4d27ed78e8d0814bcf9836f557a8f41cbaba7811b11c92becc3194892726e1385c152be84e94a678e14088a7c58d4af5297d83926973328b7183a65f52e6478d6199363467929d8bc906e37e9e18aed364b6863c57789e9aa8944e0d59d0502e9e3f2c6d69d0838ccae62bd91f0d865a341dd70d13277e86fe84e8a0b219303196760a76194cd5f162c65dd4d764b8d4ac464c760ca5b3acb1af37e64f1143aa22257166189a92b64b434db58b6028ee8cd69afc51f7173ee15363b494ada879210b271fe326c227eb82dd31ee3c9a1c2e1ca3677e4994705372b6d085454fdfb9164c711dd367935f2d9c8537a7eacd9d0b3e3216cca751db84b7af9050b59bea4eac60d1b6c2fe6d1ab332b763da5538a4c6971c5328b74d53814c51ccd3f465b8949ec2a12e26b97b978211963ef8a978a560145cc9ae3c9ea79b0205b353feecf172fd9ea0c6349375374858e784322afc4eba7cd142dd04baa5424ca887db30c1fc239e935c1974f32550e9f6f25446b7aa84e3b4db4459dd6c7292c0dea5ff999872dc1b098d4b6ce9edabe78f506aabb5aaffcdc84658c3092e59a563f12d4226e639297126936b8890249ebc96d1b4e26708c5a9872eef6e0fa710c85062c8935d3eda41686743a47aba7f3e2094d3a498d2db89afd90f8eca29e9bc5ab4b97ca046c5fdc9f6b361e21eb876f132ebb6739807d7e56fcc214334f63bb85657a6e35fe8609335ff2edada499d5ca0677672924eae17e362933b861234e6afe8dea21c63665b0a3fc135b6c024317db8122e67ce5ab4714dfa2a51ae2e498b2ae3c7c2e44a49e52cfe0a62f2395c5924bd6b4a9ae7a7f4db58e41ae773c52496696e61e1977b999462cc9e6c5fb18929a70ee6e1624deb0a53844b7e2569cda26dc5a2a31725ac983427cb8a725f3acafdab4828b35afb348fba2a4e1fe39438bdf7de49c5e9042b4136ab55dea8f8d2e54a42b8f6a69c02cfd96b326ffd86d614f988895ec45dcc4b51cc94eea3bac58a2a294e9ec3a56dbdb87c14b8ea89d9da7f6e445164e5f2d831a148d67c7279b02828f0d44c89ce27cc8a76314fa7f8d63ce1cb592ebbdc955aebc47352aecf7a498a9a13495216b6263474b43651e77839ad1b63d094263ad953846c4e0f93341377ee910ff59c3d4d1413e8bd9fe5bdc52fff12eea65c72f26837d95b228f1119be792594f1b6f1b0ee4a3925de96914c5f9b49a027e9d55ff6b20d1b496051a22475999e8c4d244e9deef324a571ad8104be1f5f974d4c55d53cc2ac529e9d72698951e388c7522e3fc534a26d4b8b373e1177318c304a73b4624c29a26216c169ce2a12fe317e1a452856d14f1c3d492e691241459e96381bad5c348830674d3c6263a482e610fe055d0b4b9bbecf186289381b2931954f640a61bd05b30d99ecbdc41022df9872b7561233ff412495c999faeb926d5e10f798a64b748d863d10a4266d51df4ef51c406cc1935dce4d5e61ffe1dc5592497b9b2bd77e502ac7bc244b89d9e13e9ce64dde642c5a74f960704fbfaaf3a1325bf670add9bc7492d3f55af4506ecd9d6ea62c845af29009699595fff2a5b4e0a174c2ad56ee76f24cb9c3792a45114b79d5946287a724a9648b1531b3943abc51d573d91635540a1daed8355f1baf3386650efc2539a6d0d40bbb15399c7c3ebc49716328b11287ec376c38986622ee7ca2e2a5f206475ba3b362099e4d8a1b12e53c7f4999c136496983653e7e2959be127c36e8a296d2a1b3e9f66b48aa9472f2cf13cb1e3598b1eb19b2a36677d3e0a7bcc6aeff286bd140dfbdc87ace7c5dcfa06b4a4b8f922b4b3543775e196931c4322d4352d29885b9907f1a32f49e2bfd7162e63263a8ba93dce9a6da7411032756783ab91286ea84194ba2892e6a82818d317f542b49cc5f7e810e936f39eea549985e703b55a478545a13cc2ebc63a627bae16c73c98523bc444f15992c77b9857c57bf04ef38bea9d442f561d7fb399f2b6516b8906526f49eba9a2416708f2aeaf2ee15ce925a82580aabd1add0547c088d774284a70afec968b4685625ca542876d96cea58629284a760bcb8a1af29f22f2b8583a674afc66c15d5281424c3d726ebb2325048fa8dfe74e713e8ae0fbf8c27d8974e28c5cfd22ca5cbf29a700cfea1116769b263c2ab59343c6a6b32b684e463fa2737aa4fa604a72429c25536947c12ecf827cd9c1412d0c9d8deca749b2a3c42e639469b8fca084ba94459e59aa8131681d3efbf0e33e76e824428471f1793e344e7ce10cc5e62b59712c2de39ae256ace9fc241a0df553ac9d96b1b20d49be6c4f18a3e17fd41e246cb8d3f9f63333ed8a3a4a5545f4fbe07c9d9abfc53ab870f0ff42425eff0269820ef00d3949473cb0074a05e447bc7e482d02cd55963876578b8304ae5f3cf47a457778b44cb5393b01a254b670b72b3a7e82d17aaf3b5b8fa7a3d7e4e25984f0ba3e5bce94cc1cffb59146c73672fb563e4b230e537d5dc27168ba789c59818d7c302d1f47956625c65fd0aabaec39f20bb82affc9db3b5565426fc58be9c537d31566839c8acb47b4c7bda2a8cae134e8cb3fe699a2a8e2d3529b35ca6312d157ba82cea6296a4933454fcfb35fd3326b88a760a4bb8c88b7f82be84668ac2db4bf3224d8c9a9522c99fa9bbbc8c971929c8f1247249ce280a9792580cee1f991605bfa963bf8576ac43518e6a2eefbc63515030a32a75b1963de513fd9fd027ab498c26eb095efe643d86d0fa742231a62476855e8929e584e16c72fbddabdd4d987d2dd2cf4cc8531325134ec37b69c99bc944492fa9645a0a13d889299f5096ba441a4d70cd26799858294b2c5e95251a1b7f2a5589d2be539e74b245c915259c8ab9f12fad6b8ed524d2a896cf52e79b182b49e4a37133a5962459ac22a1e6fdb4b61a5c3b2b4824d6b947d3cf55b8ea11858bb5693efe4aaaca11668ff9ebab3fceffd4884b46fce24d2ed97c6204beaada15db84f2382d023dcb139ec2dcde4e8a703b3ee8673a39859d12b175ec4db9ff728c7142445f5b52e668fd191e3ac41661154d0e29b31d32045aa1ef92501722513e4ea667b28999109cacc13377ce3c130f62fbae901f6edaea1504ebbed1c4e0a3e16b20ea3c61e355f874290a88e592446aa9da96fa877289966297462ea87e483c6dea54a51e2ca60fd54b69e793e2e4d0f081feaf91f1949d97b2072b548e116b99b356f4c0a6f7d7cb394985310f6e9233fb98f7c9ed111e08b1084f4ba20916a33bdc298772f3b6d854911df8124a3d7deee4724275d85b3cc5f384c5ced3a14dc994a657b6be9f4382fa469d6cbd6c8e1c28f943a714f9ad76c7418ba29abe73b3d78643153a4ce72fe63b7e43a2874af6a72f63af1bd0cad99226f92d54d306d3a6fcb24cc29b56d8a094dfef5996341d5c4397525d2eb152a58b6a587a62d37353f4bd347c967be282c614ebd0a0fa499a4bcef9fbb13324f98e7c753a1bd5cce058f40e1eb6c6f365a093943945ff3cc12743493368b6e8bd274c6378263fe7b2b23a411283a59f83668e997aa2303c267487971018ce37e9c9c8a81efd021d97e409ad34315e387dc99c20a3992b5d38fa7e969c3f4a4d922424128941245286088a175c7832dae7cc5dcfafedc5165aff24485e5732e801811178a1054c36e9434e30a942be9048c478918524f1ee4e4e713273c70b2c147cc3495e76035e5ca137ef150b96b4fcf4b35e58c19b28f97c39e6bbb75e54c17c9ee52262c122d790157841853f06a98d5bd51be90989442211304040c6ba8f1f65a0c08b29785379bdb14b7450c00b2968c08b28dcd99e243937099997175038a355563c85cef5e6c51312cdd7976b7ab6b613f4fb0cd3494a4c52b49b805c745ede4da5a82b134ebdb2e994c6e6374b58f6df44acce4efc8a1256bf987325493e8d79124aba37ea1b7d766e44c271a399611db5acb62394c376e61e934bad848cb0ed6849cdfe9895494824c2021f4e0602bc2802b7dd2d65ebd5a31e193e7a3c1822c881811cfe8233c2d0e12ce0b11ff8f50c44222cf08208fe9c7049c8f28bdfb91743c02d8d055fb9aee4792184a735db889d1c56e57a1184e20510bcf801ff297ec66d6b133bf5812e9ea14e2a786d6a767848bfc08c1d60782047067494c08b1ed8e27d5207139354375ef0a04bbbde9af33d1f3a2f764067467dca60f142074d8613eba3e887ec7c2e38a98c9ec77f63ad8b8ba3e424caf79c68c6945b6472bcdacdb9daa20d1bf75765ac05e3ba62de31ba9294a28526c79578e7b652d1c20119dc9845f1a7366ceaa8d4ad0471431664d8bdf093f6f9ac92e3878f1c3a1cb023103762d107c98e19de24692ee6062c92eddc52a8eb4f89d11baf58eee26e3d7bca98a219375cd14ac5f767af2e4bbf15c7cb762764500b75eb062b12724cf8fb2dc9365b53b8b18a43977cbaf29bd733a707375491f579a9a58c27afe95424f5ee6a31a4c4ddcb0f6ea042b9f419cbe1aab7ea5360c95693f49231aac6dc30c5f973537d3c75faa68970a314e9645b55cc9f374f38448706cad8518687f48f2503004bb8418a1ba3c8c2d3ed771c4bcb7c0c972a5b0ef5c0a2a8921edaf24df6b2bc22bb0a0bffea30ff0cc7400e1f1e52c656c01575254990d24a5ba168d8e9d2d8e89c151cac28687897300fc9988457b145eb5f7ed3cff3bd2a38c1d259aed7ac686a07385261e8f0964297d4e13e2a3ea1242c53be4bcd491ce038c57e639a25b9c76d9ca6303cefec9c766592523cc0518a73484d396be7b324896a000729f2f7fe9099ab3911e1188517e72cc96b65047088c224af6e6b87d911d5ccc0118ac2c79252897a6692f11f384051dc4a9dc4d9df4d5a0103c727dca84935ebb2675c3d51de1bdfdaf06db58e0c31c6e8045f49ac9b2a21638b1e128978000727682f295696cb581c9bc0a109a38f54ce497f2978161289ecc091892d5e8cd8933a211dc08109bd4cd37f4c7125e57b89d35fe5134e3a4322114b9457e953856bd84e7748250a2d26b7be9a64c594c82ef26a723dc99b7242229110e09844e94e9e9ece581279fa2e79d4e2e2538c4462d12413644acc122b1c90e83c3579c84080e311e5bb90717b2d273bdd11c6b7122cd964fa0d7a2336f9e7ad734aa6c40f23d6d73539ff36774367115cdad4f09b62be30e11f3c3c06ae021c8aa0a44df6b0a7aa41d7445067219f9225c95b1a44247dcc90ad394cc54987e87248af13dde03084f92aeb55bfcfc478fb29c4a3596d3c4569876547f310430438087149f1bab47d5bf7c459b028c031885a4b52324cf41a739c17ac0640b0e3b88f1e3fca30050e41709234bf66f1f2d16347e20884f6212f7c2cc43b833924a0830c1c80d02ede3b669a0c7d2f878e1ecfa30638feb09f94a424a59d2109c0e187f373bb4948542c31a70f38f850e9b7491b542dabc684f0d881630ffd599a8a16935f923afc038c21e0d0c31996ba83798e49bbffe8d1e30338f270aaeb3013664bca193c70f19349ec4e276d4adf819eec246ed4ec61826b872ea989b9e4e3ca73b20ea544589adb998b71a343df57b92b6b3ea1de9ac372a29847e70c337939381d26dcd692cb799238147d3c26d94aa9f8e90f70c0e1abd14d1634e5903fc1f186b4d5a7eb3c555d7b379c2f553586bcdf5ce26db8eb438ce7cb6103e335b9712be4bcd86b387fcec94b32ac86e44a974ffe2ffc4a9306b4645d194d6d51dd82862aa3462ffbda7237cf4064ce7cb8643daf55080e331c6347bc9abc61234338c05186fb84794dd22193894e86c3e72c6163593777d6078e31e8d1296d86c9a5b9490c78ac3df1f2ce30301f63496ccf83a1109dbaae515267927cc1d1b7ec0e2727c13aa6070e2ff8ab2126ed962ef82945b18d492b896a73a1ec396636d94c1237698b630b5976d52bef3f593e80087260c0003a7cf4f8b122c881011d3bc0a105cdf6c27530694f4c380b76a578f7715f2cdc26a58cfa7f8c31ad5730495bec3d8f66f2c658a17829996931a13459aac0c794dcb7fab1a98c0acb487ffd7ac820c3026ac03105c3b9f5a6760956f24b61cbb549d00cd96f4f147e4dd27dcc490a27c550784bb47099dbefb1fa13dc2c96379bd8dbc5dc0975aeae4fb97c667769c292ea39a3e61ad992c2842a666dcf67e199525bc2995af6ae235202995e2c4acbf2c97a12bc98f559b765010f31ce88c01d702041ffcc9ffcfb3e8217e34bf95427d52487eca0030e2360e25710db8ca9c7f245782acfc6d774255b5689706c782649b70df596212476b9cf8652fd4c08cc091ef2b9673d5512178c610603c0123882b07526cfead6f17e7220e06b163d4be426b7f507bd5eb4f714199eb5f9c08ea9b72ae75dbd6c8594e1c38c761f3b9c0547023fccd040007c80a3075b48cffa13f3cdfd8444226398f162fce0e163bc60c7f7d8c13b660086057c70e0d733904304393090c387bbc0c792f1fe8153e0e001b266514c68db69fb71ecc0934377879aa4d135c4a1032a76c9b1937c9ea6d90e905cd826c6cde96ed5ef1f128924082ef0b5942ce93ba9a72cc82d92c7ff52988e17cff3b638c63093da53c911d1d742cb31f64b8e8e16e530265a2a8deb64726661d6a85462cffc981495c55272a84ac79458a4596308f36cd2769282851ea3a535ff04f20abae44e1ffb7153ec9009405c01d20a105680ac02441520a9004105c82996fac9b01c3d668c38e405653400c414608094a258e2febf8798564b482f045c0c1f61e400e30cc74048195b811c8f002105c828404401128abc5536b6c3562ce54141869ccf5eaadb96ee273051d793675cbff2c813c5935c67563ffbe41331403a818ee79f1c724ea3ee9c2889261fe5af82fba89b48b0d1d89be731e9a568c291da144f281f2413c5b0196bea345fa70e01c1847eb12693d093e1fab9c4976747bc4b4fd47c1dc412556ce51e718d4a165525d81dd5ac52f9ea634e088412d6d988d96db2501a0e89444026c149163c86cc1b13df21c60e2580488268eb97133f73ba135f22804422d14a480fbf2327fb8644223f0081c429ddad76922cf3cec903904718fe39fd4458ba5f2c0610479ce264dc588d39fb6223fe689a317c95a79493308030e298ee244912be345c6b8b404f1253bb9ebc993279014411b8647dcca82645893a02904498620ceb3985150411df06bbec9a673f2c05e410c9e7342a57aaa9cf0a89440e0f07411b400c91da9bd431fa335bce844422659c01a410b46aa7689f192c193b7afc0fa700194008b16ef68dae5ff2687856001984d9267f8a915fa7eb4e01441059b42bab09d3ce5169024820deac9dc47aebf41425800002d7384136f64c877dfe70ce187fe65556b12a7ed08377aca871e39c1481f4e1347671db57c7524807081faaa8d0954cd65793fa3d9483543e3359cee3ba7a70bd829d7eaa943d2f1000c983514dde9cd8ec612ee321a136675647e8c7fce500e40e9acc742739c9fa71317000b1c3fb61fba4d04a622e31241299001b40eae055e59cad4e103a244a899a69aa1301640e4911e5266a789cbde40191431c8c258ce61493a161952f80c0a1acc184ee1bb1b5f8435200f206d7f2c6b4615b71352606206e285efcd292b2a38c33dc053b7afc1003a40d85f1cdcc65f2c99e3936f82e25f6c965c9fbacc178d27676d9f897581202a206b6baf723f27f4f4bdc053c5e009206bc53467c7449c9c78444220d8206b3e8699de4c99bbe9dc1947e3b77bebce627cc20660029c3275d12b27e5d2a3719b202103218d2f14c0acd2dc90bc818e858e9ae28a152be28881812dfee927ce7b53e1648180ab99a97ac70fd11a70002864cc2f7cadd837cce1740bc60de13268074e13ac1a32f49967d72b8501acf795ba962c9311812896ce11213aac2f698466504102d70f1b2f63d4f867141b2b0a650a2949ce358af068285b4d26235de258d7f8f1e21631c319c0072854bccf4ba463a49621f12891c01c40a7cf0d9501136d6d12404092055389c97ed094320e487182328638c311c9023c78f19f80f1e3d2090c36320461140a8003285bc22bb722c5924dea40b2052d0d34a305bcf71b4fe238044c110f1d4e8fe4e6332047254200708744840082050a02aba5f6892077942bb1596212c66e5392700e204422a95349fc1739a0ca409e87f3a51ad6b10265426e48969244dc6f2d1a301204bc0b25cdda492d537018812eebcf6d1e9fcbf630e89444092d0695cf8b42f7140c78e1c3b725860092048d8d4c468f92b5c4bde2e00720453bd546a7f3a29561f041023bc715a9f3ce684ec2863cb7000007a005284f3f633c63d314eba730042043fdcf37396879ae8e10064088cabc4c50f16635516c2714b922ae6d659cbfe062041e88470b9f8525a524e56200708744840070d408060b2b297ecb6785a412980fca01777adb463bbdfd611407c70872c9352fb9b31411f80f4e0fc1e4f6e1e4be52b203cd82fc79f7dad0c901d6c0044075fe4c24b9e799f24496aaf784824f23d768494b115b82f70f1f77a2ceb183d54fc849801060fbeb84569423febc439045ec60f3124f0852d5449b7934d4c9249f39ff1430c1e3dc420c317b53876dbc9f406bfa045d249b9e12fe5b38e3f8c59f8f1e6e46a5b2ce73418be90c566924ac7099b2e9a7c2cfecd1c9e520e3e96db2e7c018bfea35b861c8b5591f9e2159c24ad5fbc6adf5a8e2bacf469f3cbebe49cd75678521a938b7812432d168851c617acc83be6289299829df059859ee94da30679b1d6bf50c5fe19bc5389713ec3938a524531b1824e9d4679067e784ce10b54f4f1ace4133d750add2a2739c85b3690a3023a92f08529088ddccb1e6fa2a296c22f2bb9cf04c993aa26457b6197ffadaebf4a4661dafe4aed92a74dce4551d584c97d710f453909f3d7974992a663a028e54c2917e261cdac4f1c196ea67f53fe9c224f6c269add9909a21b4f66f045270e9ef33b69aeac6acf09d445bf921c19ce4a7e136a8961334b43f35f471385cf84d598a6cbce45f045267091acb74a1d3c9e184c1c4b54cf0ea3ddea9613beb8c41ab6e4fcb1c4f24a1f147c618953a44e924d4e315bc548040c00f8e08b4a64e9a77c4b653ca59e12cd2771a66b2e7cbde8e38b491c6791e13486dd664612a54d139ba4892271e612f6faa5c43cbcef1f80c1179068bcc34b9c6cc8becc23ee3ca2963d86924d8c99a231be7044276ec133423bcd2d667cd108efda3f562b0922ff09d9d1811f5f3082fb8dbb8cf166ee2da22d69ca84b874c16274a9084df0aa9ff7f413d24ec479cbd6f2af09de6b410453a231bcd44d4c387ff4be800c177c7188c2e74e48c99ae77d43acde95b2654f32fc422853bbd6eb6f1d3e8448d3d3de489f24d919841fbeac4c644198bf76b2740e9ac30d44755203e2cdf559bf12fa37fa877b2e5b9213dbd3523ff0d1fab52e9b654abf0f58d5b7c9696ddb449f0f64cc93d462a7cad8fc1e6ebbfef0acd1831d673a52c46a2de5f3a0b59494d484b83ccbe301db649b57aa6227f777e8926568918cfb63f27658daa4688de1a87410230261180a0582a140180800886a7c2600831308303044208d0563e1a05cdd7d0014000044321e504a2622261a1216121288c3a17030141005c38030201008864381906a10e76a62e305d72d1b211327c7bcf8ca84c08d040e1ae2cc94d42194d2169d7c484dacfe9d0c211dc1acb9e826198e76c5fcf9113288c78850643b891854103900fa3a02b39628ec340200dfa098f060433e91e90e826416daecd7233056d942e0c21329155dcf86002ab254246a4e64b4a5ef1e5adfefc5a05743283ea1268afc7d1ab3177c72f54f51292536d601df875dc1dc97399480e956ba1a712319615588a18a904dc18e27617a90ceabc86568f6750091a4d555bb7738da78049007eb138b9d0e6a900b8f98603088353bef28bcbcb107ea090bd91aa299828e8d69f14c89679de6c05c0940eac1cbf23859215fe5eca9b1003d2eb1438500e4568ea26e24e451256f747b71ddb996598ce06e344e38395cd7ede08f7fc3bfc88860606580a52e4da65449c3303118afa58ba4534e9c5546b7d391e0a15c14cb1d476cee12934bc4225b1d0e49e733bd4430bacd7b732ea0c89d2f54cb8d72f8ebb9ec5e70b0e88e63cae9510bd123d2e4b2cbadf2cf8796775f60f72268121323a01d530640daa954d1646f8aaaeec66f60e4674e544bfdc8097793e17bf807eea8e8c6fde7a978eabea8b0fc3f6a1aecd434ba0cd30dc54bc1e5892bc2d35af914c130bac09ff7274835308b64ae16e0da47549690e013ac02184ad4ee00d242ce8847342496f6bee0576244e99af3373d976cde4e19a42185693368592e5645922c865beab82d1bd969fab4064174188e4769d4784e41c19b7891cf706e88bb4ef074d55908754bfb812dc708ac3e8a8267d789a3b8eaa314f1a8446acf90fad7dd95177a064887b30f7a060985cc2a70ecd37093b53f64623793ca75d858fd164bbe9445ec20476c42209ce07d99d8652d5fed200d3e17f5bd66a4369de878ca3fa5efe59e9b32d0e5c11882605d8e13fa04b3a4660534a82c949331f8380fca014f1f28dac9aa8cd39fefbee0d3652a7486168c7aa4c92a71efae6fead18b151bbfef42d8a267b70328bb2b140acb3e1cdfb61e231b53532b89aa647e440ed2e193409a69e5b122dcce2b93b34cfb9c578a69b4a80685d677d8e5638ed4e8a1809f4ea3e011c881ac2f29e7260651cf20eb2d887a0af2f532203750c1bce16670f90e4ae04db83f8e1df1c65aee0d177aed726fb7d8fb167bb525bdd992bdd39642d416dcede5b4b05eb90b51d61e203f840e462d06993d7cdc94560924d0735312f12ceaa0a928e112dece640a1cc13d3897750f18a60ad6aae10e3b090ac954c4d04121d631165cf07b6a321591a928314da4732ce4a37c6443cd4547d7fd6a3f864b373efdc78bbe80901b8e481f12d7c848378f19534e6fbcf6f26f8ea9386c8d0b538690979f56c766ec21de8d715a966e6a9b84484d1b1089261bc8673abbfa3399f9e276a09b88110a52f3b0ee0ef1849f6190dab540ec392d6d9bd52540e6ec70d9097271c9e2a8a0abbdca200e4ccd948a50d5f0391881a23639763936860c13978ebf162c6d8cac2e907f4dceb20b0e9b36231d29734479da57d4479d9632ea458c7a844b9a7abaf494e9094403e569557994330df13ca904a7a4e9a8534b5230c15ccd373726ad1df80331bb474bebfbc3cede504e0ad936bc4cf3398167beb159aaf66c2998264d9294fdcb4632f895f5d2350a142e2868fa0d324dbc962bd797ccb6a0f6b1fd117af1b57e426ab14a9055775d6b2cd68062af9e97f2e63e6f1cb0e2fadc98d615c9101df28ff934fad23aa05b4994edfbe2d7103762db7dbd328553add2c39c488af4496fc0177aa22483907dd063298587c7c37ebfa157e335e88da74c503d6ac4ee9dee63a4637d14a592604c062e0d9426982abe230156c154ae5262c2659e6b5a30861baafdf1f0c56567b58e10136ce7bbab96b2ca049fa84fe7d9e0701471696aaed3b47794d5239463c769887fd2ac4293916816d87a7fbce8855265bd30e33c6ea32c544b698b2f559b75f957b2963b9f4d707bca2b1f02985a8169b47b57ae3846124b0f67ed003496c938a77632fba84d8cb29e4efc9591da43b0bd1945852dc63da9fc02e98a04dffccb81cadb6023700bfdbb5c95d3380d90a329f2efc3bbf0f35163c6ef39a783c6e645aa8c629b23c586c35161cfc817d055ea29b413cb6a9dc54a8853610897674357f0af27b2420d06c1fbb5b35c671fccd5d54de5683b59aa3decd1f034220ac33e1d4d4ae52d008a2013bdbb07d9a8b99f578951316640e3d447f4cd3a39c7205a3c007cbcb288f78a4a0a392ae9dd3d21cef3dc9987e8fbec9708314ab025dc1f5e512f6ffa842ecf7da0d129f530c728680b06c702a24c75d51a9d75e03d67b4196828ac2de15ba3b655091392d6a0dd22319199df13e63d36d728cb58700898732dc9fe68703b3136f36c125c41633387f9f085a61e05d2b26faee98c016538856b2b2a13048de0afd90421213cefd0a40d744b15a5f5d2bd9064fd06ed1c27afd38c4c9b100018091f3337c046c99e2a1fe362457afb949514f03e15a40d872358a9f1237f1fcecaba7ff3219074317d01495732e506fb772e02c551cf6e4b221331bf0a50af3c0849cc6e6290b90d47f1c1e58f0dfe3e5c8226eee096798b913d4967d90922b0b1f8d5a9ad3352a6c6b4ce30f5e3bcf797b1353cc5b47f7423219c0fcb1c82ffe09e1d324dccc39536eff5255021b12f7ead9f24584a948226f91280912a3eaf7f1d812a150b2609b3201b23ab058eeb858dc9533a6098806fa74c0d5c031f708db012d5affe4ac27cd68d97e9237fc28f5239ce6999c397287f2f55a2174d7e19e5480bbb55113ede2a7d4f8ed1be0720d97234e55957f4df582eea4d036703239de1a962b6b33cc4c4fef6d49b0b75574f7558ee1e3923deac039e443daa0b88b59fcd147deb23cff83f31790d016b49850215bc7783e8a77a03bd6b0dd29c1c4caab1ccc93c5302fcb2a2939dbc9956d56ab4e14c1a81850b3656498e283ae39e4859ab8853369ede65ad57074ce7aa4a3acd005298f33d9337ce78ca9a80a69af86791840850c41e0eaeaa2120de120598f0382fd029f082fc2446deed69a4a14bf76a38bd61d80f78f7a203c13f89173a0d03381c5f78c740566da12f0d00f485dec61a1d13b86d8594296ff65c45e6a6a7dfc63b78b47909eb958151198a9d32bf3935e06892b4db3c2d56ae870d1b8fdc9e31741cf1255e34fb0c7e776fe1382cd362ef73249118119fa8980f7f0f11c37f150105650e5c465b971104768adad7c5c20a4fae3d10e624548721590e534a72a26ae95bb52ca8c1505a61d82de060e87a84d8ea3792936a390d22ecf5b0a7a680ed19284d58e789a9305034c8721d2a719040a99c65c9b0ec959bb917905211a5db38593c3154ecce7bf3e274864cba75a21271a5da42c1d021f355c2b0a8c6d4e4a48978f08b34f0958d9ae8e6bcf36c04016d3dd24c2cf92554f06d02dc910c49152da55ccf4fdb4ba08875db45204c18bb6634ac6136a1508a121863e862cfa048239922026fca18e2e1814670922a4820318203e2fb22d3ab570a99353e95c6a8c52f305b2021cedd90753b3da4227871c27fa741a4e2a0c7c8af45ec87f18ca751730907535cbdabce24dcb24c027409462f61536840981f8a0c44389f323df77880f4f8cec41e49a137d679fc124ef4a2d3e284a9740b8db0dc75917a7e04a9ab6f6e847192bfc9929fafe189e3f900b023fc6886fc29d868e94104307c86b0aff9028adc1d8ee179bed3f9abdcfc8303c70a19227f76083da38d99a0455b102d209045b8dd56b8fc04bc1c941b2f054006ee841d85c31dd41d152682952db8f9fc5d873defe0617f35d645e42b3b9ad73d08bb5305c7cee13668202874d244a114d7f0dcb7936d5f42f5fa61a13c47753c60999446d6d570addda33258bfb6c6591fdcd86203d094ec8a04b768222174422f0a3ac3fff19d2ceca51297c02f338de2e00f9c3b64f0f69c9d666c352db68fb4cfd4ab4c6b06dc19bf89d1b5f1229920912acf1540f176ae4c4ab0b3eb1740ffcc0765f35046b5b420a6beface53ca3052889b04d7a1417486befdb5580e33355822bcb1ba83bc6b4408aa61fa2e4119beb7c4b862cf00fd2aeb9a637ac9338de99f6b31ec11bb2d311737cae334b14f06a841e08788bca1b20e20714bd4d67029ddfc3a31046a61106ab071f76106c3bcbc6f0e94dbae823d528eb7259585e792990cf0ea8892d9564f63115e07774794bca301f7a905f6fd458106901d02e12b549282003d085c624f648ff63a46ef7764b451a65488d046fa4843a5f3b50b4672ad46ef02025b21caea5fb71470efa3e6b186afa3ac6695ce0ede2cc6e4c2de512ee928b078f9ca847be35ba67ab5156b92f5f6902199c5aa3417e9255e58f564029156f38f66c961357dbe53ea14f8053b4fff9acdd63ccd54a18609b98f58d4542b50db8eda54fa756796fcb44be9318d81077f0f3f229cacaea2866dbe9a69d1610043a3dcaf9061eca116f6dcfd68b4df4f98b41624d9766dc981599bd36fc5f4d3c43e1954fd4c310e583e47f2747a9ad9ecb0a01e34ca9d3bc6cc7343bf818cd11e3256f12211d38e346ee59d735dc49f148fe41e4f28d3b55c406ac94ea0a4c548339b225096cad46fe58b2702043852c0f8260be559452012cc3efb5e484730c0720134c6a50b95e85fc84da43781c2d63743eed25f7269d34a5c06a5a62903fe0dd70469929e1f3428d35896ea423dc50dcb9e0d724d5f894853bbe29a99bedd9a2aa73613d8a24e45ca358f2f107809ee5a98805f23d4981d01c7e1c0f12f45017a64e7faaf1f0b83ff0b7a8d235a149d424f448be62d48ab6701b265f3c04a994b002b169f4bc8a3dd1043b7cfa33babfe36d71905aba66ce4fbf52bdbb475b70ecfe5a574c280198035e012549fe8f13c35c24c98b0c15773aa207d4ff59d74917897bb2649e4797236637bb31be66d98aaff1d29b79d648ca4fae5a8cdaa37b2341b63669e6f3e1d32a73f1f668a2c6464b6e81c425e1ddab0eab07c065fdabd7c08cfc96df6366670910cfde4f6f4d9587adb610142a753c59e01df713dff10cce8dd77820c0e6cb7d7ba6129ef2236392e1ad20dd438e458febe4c97528335454bbee476210080ba5715b4af00359e015cbd55b62d8e4d36ccf502704dabb01d07e3ab536cc854ed3bd7bf348defee9125c478df615b6ebe3b78796cc974c81638e7e249338668f792c5f60a7c4e20770f6adf25a75697e168ea045fdba81f4866882837e9eb63c567f53524e353b643e686a63cb9e9b6207884a0722e53240aa1ff98f88c97cbe3249801d18205ee68bb866e5e12b53bc4214beeb766cd7509fa4735e8ae6d778d9488159526f07fb071ded25919cf618a08c1cea20b50cb84df45fdc89ba751489ca6c192b50d1ae3cb09285dee383dfb411fa20e9447aa935ffbec3bee8f151dcb9be787f724c639647e050d023b9ac477aaf839c0020f27a21f049f2541939936aa7454e39ee0561aac2cb2ca1ef8fef7c9ac5f7daeb6e0ab12d51c0d2bb8da5601818f0fa51f41835b568c1eef83c261120748a7a4e76df806031d6943661459e8cedf493a77d40121665e8406aff8c97f68476585db25c6b40879c405f057139c9dbc2a5524734d6d92049dbe777819a16008191ac7d6dec4c42a14031443557072d959a3056435b9e4d2fb821b29e2cd917b3b8732e7180fb3460fd2498daf67d27639fd81ab129eca6a2529447f9f96c322aa953dbfb9d1fe4a11033a82d2cf84c409347f3ae7f378252c1f125143c2f7f4b92606410da9f08eb301d7c21aec7d193aa98b757f7939c2d6e34252080a0b4c60662bcc9ee4d5d583920d36d257d4bcada6ad5531321f17e9962f198de578e6896794915c59826ca580a1cee5cb2dab1e8e508fb587672ffae77e8c969c68a996b70d4ab304b932ae8c1ed78e0a90e558389c43fc49c240442d3d9d38f73004598eef51a0ea443ab29f2be4a81317458276782ce1dc3c730dde153823721fe162decdcc3224402a66d0450c8ded923924640d37f7ea60698e46678cb6b31a25d1010c984e39aa0e660afade5a84355d2bc46c48f2aa1ec3bb13fe485c7a6885638881205c510f1224e1c2bd85ab19b637e4d8c38f6030913b73c99c9bb8ae73a15b7cf59213027d4db348ac33b42a4a18d0455966f231381bccb7d96ea5ab8fc4ac7670cb4218ebb8d357d1d257bf315632cae2850aa256c9edcfdc6abfcea5ff3011329dc1e737c099f784a178b03ea3191f4c9cd82a4b056b180e4b998e2d047c1032af3050245b5b9eeebe0ba9abe6e027f0609ef442f5d88aa6e355da4664b939466f0cba42e9020ae84024b982438ea10f93967e8a380aade9be8e41fa953144b6d0e58a7fa85ec24ce632bc78ca3211ae0c4ff32573a143f3aab00e93d7d761c92231b2a2a74c2f63ca797653835ca393419c98f4650baad1da2a56b194e1800ffc42092616728be0ade4874f804e31180b39925c9203d2ec1af2204011c441e3490151e13c16b7297ddb103a20c54d65a6638796d2229443e228b6ec4b0a5d53a247aba7021219375105566a25920912847839975c8c37ea97ea7b4820bfc8ca9d133a6fa936d676127b29c727b108f2005a3c84bd1fba200f9dd2be4bd74aa95a815967b2655a2184e5680c4c6045101c0d5270193feb02ebfecdd4355090728272a6bb8f03853565f9b604d8c5614cf12d3a669ea2e9ae1109f888a6b5045a3af05e2a418c1db031c56110e181f867d7707ff22186c2d0811a706d052a97309b3a95d2036a10599bf5bfab1822ee3e4c54a0191730ce141d2bb65e76022c7ccd3532d4764d5c4253d53babc01d0ac9c93f2c847a1ba9154593db78bac759a578689e971ffea31c4ac8d770c3a95385bc7d14f2fcae8a04b5a60434cebfcb8d1f3bf56d79981807e79b67de3a20bbc2072e47a878a623732ca9ba19f48597c249486329339c671db51e640cf0fbee7b9e01c2fc70a32d95019cbbf255dee825b49a59b0132f60a946545228b3e982b33584998aa99228a3334cfd5d6cfa69a0aae97d9bc9fcae8352690f9ee564917fa214e365b839b86b2033235ca087f25d8d476143cb3ad6246d2759e481f0d08401014db3ec54e89b058cea9112501f6d4e999aadc1d16726a3f9f4ae06c42ae07e379c0a2d07045926c3de871aace863b55f87a7676fafa978d0d0eaaf112f98e9e2dc44025fc92544dd38a6ca291a5a0d52895607a022a4d775ca030ca4aa59fe64780a8bff786dd77af6f152db82ccb96c0bbad7879f511583d8b6ab97f3c8c1dc4a2263154173970ebe3c5a08c6965605b1865293c6854b605bb4430171bc53750c0bde1bb62d08cfd010c7c1c9fcf4e443edf91616456cd4391a2803496d6f8c2e1f153729e7594346690ccdf5291aa0064df8d90b2913f8b0a9bd38b063608b614959846da0ecdaa119825cc823585f557044cc1a285d6f1b4fb77f8ad8116d3fa11d7fa80e6112d2ea6407fc3ed8af5cb434d5b3409f70f9e751e5147ba13de84a502abdd683207379583aeb29d7466971f2cc93156fe6434fd136bd81c33719280b458e30c7db439ccee27f5c6cb9ba4391032e5f708cc04598ce95ed70bdef4b537c76ed6a88334af682adb91a2876a9cd70db3c29bb0d5c833189215d420ebcad8ea0e0be22e288e8cc1db074b9372772ec54458d25b18b3fc8bdf7a4eca871b2355537fc062197cae18ee2f989cb89b61ab9111565543df92fb31ec9988b8637cc93286a454dc226e3f01ead2d24fba1b37937f64db88d47243dbea33982b31123d37decef124a862ce55810eaf5771b5e702d5290cf96ec9c4243af5da908e3919ce0ceeac5fa3b1efb22e6029b2521b4dc016ee52c9547e547759455cdcd21b148b608b55022808f990218f1efaea44458f3fd36116a4e616ba28069e2a8d97157265b330567f7466eaa93184cab6aaeea0ab4eee2db981f2c1e720b9f13803d2395e3644d321540c1bcf0f2d8b197b588e28cbc2f38344f40bd34d9d1c9b95826897c43dcacc64529a9791f8a4a494c1d8d1816b4daa1458c9bddff24ba29e41db7c1877019894ce8e8b086b83b5241cb249ba50cc8cfa32fbce8d085897be9ca1a0ea48852319c3f60981a029ec1383833013435fd0c71e2f448097cbb04460ceb023dcc57da6e449dd1ceda35d80060dab3b5cb6234fefb8c0844446e33858e83f5702c2999a82cc475b7a28a259d6374c2e2292ca2965c7292fc7ef12fde28e04a26281623166ee91a237c92bbcae19075da3045cfec416ba5c6000d5b9abd9984765a5f0428b2efef04b791284190a53b6c7ae94b119d65a3196f65574b05dfd29ef2ac0d58a18058ed0213fb840640b5ded6a06c8239aa66c987c173f5ae40fbae9aaf3151d0870876c30109a1cd0ad791af057090ad6d2bde43cb095f4a88e4e301c25cdcce0841557a626dc31c6e514a761dd75247b8c2f3658f32fc12fe74c89c1b2c3c189c1cfe64f1630e1917e6c13a445865884042b11e4b9181b79b1b2fdb1afbb66608296f48f98f139579483dbd3ad825f7b0edc332d9249830cabeba1e3bd05885a8303aaa41a8fe0eb6b7af862cb408ddc76910ac4f3cb5c7813ce13416034b3e0ee8131062b7dea333db3e9bea4fe47951c57922e89d403cb0c722bf58b3cc5b9b887aca5500396c3f3847c0354d102d32f27a4f79ed405939a3487bd2f58e02da52e238ab2621268e3782788e9ab5bc19b186130779a92003f92882b7b2cb14ed930509150561026b16f65fba791aa483298602bc331aaa45327e65b0313be4175ffd3f9509123367f8e6075878cd2140278d0037c452d0092d1b2c668688b3fc900e67b0e91b46be16cdcd7edcb86ab26a0887a5844508bd7b49b23fcca749e4899bd0236b572293bf93fb43a0177a0f01a15278cc0d1da2b4fcb08798c73e4c3c86078eed4ba6acb7980039f3edbfdbea3dce951c88940fb9b64e0ca311423f2443328be296d46aebb6643facadc209f4ce857b0f479750968865441090c8e743d89df0207dd0b589e5232e47223847e8bbf7bab2b8dcd4e9c37eb2234c247f9857a229ee0b258f45f0591b3e2a7427841f5a5c889f27d6db38b0524764fb8eed8061fd9736823af47f35f8f98bdb50fa77c1d2c3d4f02a13ab11cfe06f4eb8c73b1bd757b49cc07dce24714228afc9eae6d730cfd14c90badedc299895ff69b01b4b362a36693d307e3d5eaa8ab52d66b1cad28e57f011d2c9d6c146da6e1754b6b36661dda3f3b3921e249a348933eaaf8841c98fbab00b54a403e1b635a88b5fdffac9dea3f0a54f28685d97291a18ac167ded10b9e212dd3a45c34059b4765cd4bb51d43f53e7afad1633cf21afdd4b9dae3e69ffe9f83c5b2f1350414d84b73123272d36cccd0f78b5bff95089024e7421b632b9bade492080f705f7d31f018a9b3bd10da6daeb80c3302543d73bb118aa60f6acf24f5b016aaa12f99f660f87dd2be59c83394b686ef244e668c4a247ff95a0617d56cbbae0a7a4c791e72c41ffc419a0d0057ce5cd618bb91c85a2b19479aef8b9f54d551128c3d8d0b6b9973e65873fe9adcf134e4c8762b5bf0bd9e4e889b0cc825d710b899d66d71efca6897d2b3d407cdf71fbab5a72dbdd9818b4cf17ff74ec97f9b251086c3f40b7bba8b4f61f11244a5ff463322b409c1c58e06df8b9ccf7c25b8bc2bc92c796c71a9271490c395a96412c73097dae31e23e2803d427c81b8f167d2ae7a2bfbaaa87068c95a11eafe6cbbbbf28ab2b292b73e565119d499da812e131a2ecca369b0b1d2228d19c6e1357745f7d1278fc92b5fb7a42f95060a6dba62995268b5a87a8914dd11542e15f93cd61b893b639323527475977dc24a1206876e20f1ee57d6c8fc5f93edbfb1703cf69cba5c88e12e133a9aa1a615b7a195bf237f3354a6a20528b0ea8f5f02db0d2aa0c6eb9c090a0a4d4960c54e799ef3dc49decd1abf18a1b2bab65d08ab7dbef26a9c1372aef23041f9ae59c1adc4351794e2e0ba5bf43524cdb9dcc9b024aaff40fd6ba4d5f86f5957eba3c7502d9dd00507bfb16bbc78ee0521ce6e38447738bde91c594861947771b5bcdeebe88a2fe6155cc04e417f737be578503616e690bfb0061b23286bade1eb6e4dada902c8e87acf2d7d9beec472c3fa4dcb9b90d67a46db71f9fa861de1a014e52c0f1a5e943dd634c99ac594843667429c9c1f8bbb68312776a0831f8ef0778add4db9818649bf77e8e2c37c34b7656cd064c0721f9f0b7641f19f02a3274f83df7165dcbc3e4969d555db704c23bd1f3246fb07375795dee9b6e32d858d131c92e251e21724073435f99d93453549e5685921843d8e88d25e340649f3f60ae5513461eabd1c20aa532e5a4c7849429304b526315c25845b14b37444e00b6e31cf6fedf73f1958099f70413e694241c00f67c83cdcdd28f1f12f0b8ca257d6d43c8fcf24d5b869232dffb948f1a7fe59b944404761f677f8fa2679110aaa3bedeed5e3cdae0742600e2af488d9d162825d4da9191f9655143d4b56859bf4ad0991568054ae03ff548d3f14789b80907349f02a8b494d5aa09bcdda2b0d00ea74b48fe1679dbb0f73111eb562b2406ce09b45ba240e4f927165a35f1806aa8200630f975c052050ae1abe319d7ce6e82cbb4d4c53ffec2ca497ed471bafb6a24a6af382b52724929246935cff9e7473dbf5822c3a0a2783fb7a2bb44cbc5ff7896cf7600947e6dfff440174d1eb446b23feaf51079c09a45765e068b364a7c3b8c2cf8b90438041466a8b67bb54f35b9f548b40d3e7b5d7b56ad0f5d716f57a88dcbd8e9b2ee95eb5f779e3137336175e73d9c9b6b1b8a2f9f638f327d3fe1524b38a8b257667d9ac924bc0f52b36358412f0ee9356c8bba19c5ac2d05d9ff4b4f9af98427ef35d4ef8edcb3c9a7767e25408c1f31d0a27a810b51dbcfc61829620b68de893115215682ff61e9a4c39cd52e0c058d272d916fa05e90c3378a2625a0f2383b95a1599574b2d4c05170fe67f817c28e4a9263815983be184a256df4d8b992322e3ec95a94ba15d602275ed4c6516a51f0c7240bb266151e7b716c0659839430d667a683410ea27bf15056b81bd8018c51456571fac3368c4c9a5ff11158b1882f2e1fe99db7a5bc1bbdeafc5974e075fa562b2bf24a94cead0b527c918f7046d8520b2fda86e08a2464fa2440c83b82499eac1797cf72d27e170be1288661151a8e9b5ecbd44e7d82c182575660a42e7b5b0ccc79f081c7585e47990618ed0153363fbb2804cd88c87e84abfc95e56b7b75aaff53b9a3addf7592d668d08fc68ea5ee96fe5d4aa07573938e484add69f24629b79bf25689e79b4e9212644953e0b214e9ade55795111cb23dc0011b38fbe9d9c5aade80b1a199f01dc106082ff8c392be67bcddf72ea6ba5960209e44bbbadbf540ee48c3a83d6abb9830b0412bb1c135ae5647a5fb9df9e09463a86365811a12432e8b65b73e055c044dd99527c308b3ef3cd02897d2b6e78b04c7b5e4c499fb67834de805d3d44183184b1900435f39a181a5ac068be224f4875de34d3de6e3b880302a02280d3dca08179fc32646dd44e98aede20d1216c2c01fdb991b7cf45fb87384eee469549a59dbee798ac2dea2a07ce3741215244e5ecb57492a60cddf552598d034cc9b528e48c25096b4a32661060cd35b1c4b2ee54b1ee8b25a598dac2e473fa7958d26f060a96008f09ebd9dd96576f33bd8cd761be756cf78af443e3e1a4a6764caa1c4f2912016cf4cc3292c23b0b3c2d709e5efd3e2bd72cc46a6bb99ddd93ee59fb14785e9e1a1081ec2ec60baa1eff45109f805b606a620b8c9532a1b746e5fbae3cb3345418d18b6676c206a08c2ccc4dd7774996700935f76092e7a05813bb0368f1ad9152a2ac07fe5b5f1bb8596458a213afd77b054ce0091e2e23d2a4ddb38e337d9728d078baba585a92dde8ad7bd6d4442dc0b6a1349dda4552f1b8849bcd726bdc456d24aaa109e8ae37e3cd339cfffde59ea1d65feade892a01703a93768c7db699458c8639701cbea8304184b4fb957375636b64758777c21b5e4415aba5b389bc16b765ff9b5953f687fded40e645e58df53b50a2cf3d426c4735e35601a8f025feae588751201e8dfa54e6935bf1ecb15f429aedf59dfdb52322951c42c446dc9524995c995a4902f7fcb82c85c8dfe2530e44a8b4333c7cbb3acde6757db032e4f96f2614ef3f2857a244006b5b86242e591f66e3f641e5d83ea90f545007d080f0f9e7624396a1d16491576c6d16e158db32df903eb7f233e7545a237ed7cb076425a75c01c66173aa600d0c43c9907e88decc2a45a563168f21f31d7edd2bbec8a2578df744dc0bf99f7ab44b6b6c13462d44b6f4667dda86a476309f427570f28dd20e74f376f1db407023ff1285ce0aaef4a257c5855872a48d9721cad247925a8d6f77ace2ab92c93eaffedc12ea5e1c6602eeccaed87f3e064030c749456f9aed2bdd0a635efabb5afe4ac07cf7a4278dea4e91e1ed1737470d36541284b2831cc71c8dd033aaa2bf404d8825b75ac53e80ab0756f4f94c064abc224fdafffd8051597d3248bfc50ed10e68440c2ef999067072cb2a54a782ca966ca984654ae3f99cddddd244666e8a46df053d698405601a0cea568115375e221e6e7d66b27d40c1ac7c5595c13c179ba0e563143848566a7d87961bd7df4457c267254f27ab6073b46f7630e1e1b4d581c2fd5b9616bd9f5a70358a80b4beb242020c5806e12d47cce56341767350892ba764fb4084322a383a59f757f1380e859f5189cc4c402c2222b7826e82e6d5d7052a0006608c4de509204b87c9d49aa9a8193fc1f7a62f8b3017af83daec101849f052881922c02455d78fc3aca286b93e854ce346535740a6eda202dd77fcdf2394181bf6a7829f9051d1455da4ca360ede755ef0de4727356de37ce17cbbcbcaf8b8212b443742a7ae23296365d3c0acd6770121688101e5b353db83fad635a7834fd8e65c80a553f21ad45854aa7e3f83abc29406f714425605732434d4ccfa2eeb39e83ff84e8db5fb04f4991345ce53d560b9aeb6ac2ce5b349a1c8a441e749eadfc8f5e8f0fb223e9fa25753804489876dd8e934609ee4902a40a705a7503c63ed26f72f2ed4a57ecccf4916790ff46fe9f0abbf29d1f3856eaf2a6dc830ade1cf15a2a25264ee96de8b5be1c5aa39b24f4291aaecc2277e5a57625a9862f5b230bf2956ce80e606222869f481d7b1314a3034133239e8d71c27d85df2f6fcf662751c931667f732cf65139b4082b1d13fa7bb24869d1c7321a1c97370a8bf442a6bfded79b25c76295241a15d1f5fc153cd94d018e538055f4843a4d13b571f5fa3e12e9bb034f3571516961d82534f450940d64a015e2fc6af0998a81ab53989ada7896cf1682aaa056a2b15e975808f07a2b1169f910cbed8aa0be7ff789ce739b7e327e3fc1edd293ac8d4c7aee21b31334132695adfea88a1b50980d1de600b5441e5354a8e145d3ba59251586f6945f4d71df71a747cdcd532032cf5bda9225ebb7bef18a1bd6a70ebf3c6194d13859d89b439bf1658ce5de35a5fbc731e6d018d64a06eccf387497200b469c56c13e3936414d50bc546dd0f0d4f9500aa53a590afc147166439a9bd35d26b931cd17641703eece45e70e3440aea69003033ccff33ccff33ccff3d819df570409bd3b2525c105da07554b4a922d5b041502665f6003cdfeff7fc17ec2890a02040f1e0fe90eb7a7f8d57292ad82b45c6e4d51bc889638a96392b5a5f02737c54fb775269f90e27edfd2a824c928b4da0da2959e2d8926a248cc635693523ab3c95070e55f529f78c28509419194fd7163e53bf90b7ee22bc16dd4a429b1b5f304df29ca86f25c270c3a5ad2eb6f68cec6893e732a648354a46c9b58f53cc6d52474c91ed30463f11aee2e9a3e6399284cee4d8247a765fe60c258ea9bf2ec32b3752ef10966f9377ed2287f59028ff927459b58e16255893d2bc58572effbb4a1c4193759d60c4d52d4cc244ec93de50df929749024c1e7d7ecbf28126cab6fb63651f919125efcb04b52863bd17bc431e5a4cd4c56371a47dca14dd68c2d4f67298de054b367e6a8bb49533d326083116b26bdb0986c2c42cf694d2b6f6efe9d4644d2f81124053614f15d12c5b385e8cf662326b09108ae843949d8bc41449967492a44b8fec687c824e55bca92ae6bb035e0041b8678727e767ee4263e6da3109410a6a1a2c48bbb2c21f49433d9dd4ac8cd19326c0c620dd33995a6d08620ba92f4c9cc7e201693d9ac492eae6d1410e71e9fb012cc3f6471a2c3f32559cf4b16d8f003b6e7264a8d8d7d0567a08218a8c0461f123ef4c526f19ecb5919d8e0c3d21e3cbf6d453f49923d989b97d5c349655e1d2036f4d0257dab50211b794033d6f677a3b5648307b23cd3642bc6a5fd55f0031b7758ee42fa6fae6dd8414d63be212eec99b6a50e5589ffb99fa43a474d0727b453b666f09eb750b131077f63873c4b9a5672921c4c42f4c60c2d6f15bf387c1d4ed8b8794a8ea1c1818e31ae728e11b71767c002e80d36dc60a30d5c122646f3e6b021d9ed45d24c4e986b0d67eeeec890e94fba940d35944cf490e12e5c3491478060230d47669993b59c4ada4643925cb9499aaad3c619b2dd0bb1d5f9fcc46bc48619c8d20dfd17438d7e090ed847ca50ff966c455f7bdac98888480f3690044934202202840cace6f8953ac93d7c70a4878d311c4eceb1f3c466ced41964f0600636c4a075bcd0912a9d31ad2322223db01186248d7aaac9b7a413346c80814d5207ddf51e4d511e11110162e30bd707b1da2a4912cc922322225eb84f784d1542a225a61111912e24c6d5899292a6eb587ed8e0421d3e229f625276ce16caf7ca870d2d7897bcb2de7420592835763eb1d6e536577260030be7fd98ac7246fb14f4326c5cc1eddc9ce9ad3c367d464444ac40d709766d975ee3d955382bff52fce6cb19aa1ad8a00226acaae76aaf1e19a7b087abb9a5fc9ce4b4e3c08614940bff19c777733c310a7994a84ae9c32423c306140c1adc73cfe6496c3ff2843edc9d14bd2bad47d706369cd06dcce5e5eba9c41c036942ff296b7d762ad32440c828c3839031c2831e41dc064c286e2ecf2699a53be1c4c6129a1ed32d29ccf6c99a12dcd0be2979eec94193842cc51c353ddfcb62030989317322b222db38c2bfb184db641d1b46e03a5512234a4ef8b247c828a38ce4cd204301368a70c7f84ee37539c78ebb0d2224573e09bff898d0e0860ca3967b0be5a7fa5af9910b8cf1830132081106561574a292c99df2d9c3db8719272418e57a8a7f861e18e798a41cd54ffe40c82fc81721bd08e185f26ff2a99ce7924493110a8c00493ca081905d5cc28925e5096dd72415a28b04b98b3ab35cb35e2e5a37d7cfd86fc9a4181774169ff4702715fade62eba0f7f526d7d9545b98b1692e874e6932adc5c1432beeacd7b7420b379c695d7a679de5233d7e0439c3c70f13320bb32abbb56aeddc47cda040882c8ae925c5fa13377bb623222269ec06426211028b905784b862435a11c28a0984acc2ee0ab249b0f89f0c5185f14c5c4bfab2dcc13292000a4945082a424e814688295ecd954d10138db7d15228a751734a6d95793f529cc5834bd66dbc7e276414f5a5b01e8d32e9045f14bb585ba84693343f0f452171974a2ef55c5382025171b9cd49d27c267e22afcab424a7784c2dc413e6d0bc1223ad3cdfea44a27a995ef4138b17e644a9f6fe4c0e1d4b737213cd9f60172a5f58b7146922c136dd4c26e9e4e3434c08c984ee56be9fd54bd83862c23a7963767989c1d58284904b789ace53453c689a6589904a109dfa3dcb9c249467005084104a248d99749d3b7dcacc43266196b4761a57cb1022094bd4f8a1736fc9a1f6911e3e82f470108444a2d8b0bc4ff5a36b9721041269bc4d29bfda63087944a1666ee346257cea1f6e86191f70800ac6e881770e7cfce0801f421c4157aa2ba411079796bff7123b9c68064218e19669ccd5b52f2164119a24ee6c0ebe9f6de30eae10a2885776fdbfa4f4cc2a552124118a7d7dacc949db2735c23d4210913c79f7717299f82e1016841ca26ecb2d49d66c374f7520c41049d9ae3eef718f200e64032185e85eaec4caf4022184e0c37f884ae9e69f6c4444444484021f320863b54f73ce37cc07472a102208a3cbfcad5289b173de0c218170329649456d9afb5b0b2180f8f72fc8f59a14b5da1f8e12fe2eb6dd42a6a81f9e8b9aad3e635627e1903e14a531a685ae9d861cc287f3b5e3e6f857624c1db287e37a554c42e798b358881e12db37254146d334e72179e8d393ac5f98a44975081ef8a0a36db3b796ab0ab903eed9db3aa2834cdd217638cdbea264fd42ea90647df617ad332793103af023a6f94dad4e8a61c81ce8f7d02dd29229351a111149a38c32921e40c80891439969794633c571130b89439b1697763e262b407a00494636040ea58f7fd2a61a4744448090518390375c425bb887d733dbb8a1d8b4bda3d5f13cc85e868f1f3dda50c8dd74fe7d7fa903848c1036906e62548e09bf31df0308196b48b078af90ee4dbddb87a86199540bbf25edddbe232222dd49481ad0107286effe44347d39222232460ed8056e76300600c0106286ad63e47fa494a8259721137f47e7c2774a0d3d21840cdb9a984b0aff17e1a990319472f09d8ad58e6f133150619e34f224e1e4670b094352126c636731e14aa3400e3cc8074444289046f2e3c7052e30c6183d063b0bca2823c9410a4444c6e0410818f21aa9fecb8ff52eb220e40b215ee84d3ebdfc960ce942081742b6d081102d942fb5492a7f5132e573c02e9840481612a52f3bea4dbce93c1a675820040b8de6a70f15d3a9b4845cc1109784d0eb8d1742ac60a8fa94d258ba4865ad105205ddc35a54e3433ae44b08a1c2952dac745647c7306720640ac692888cf9da05da0c32382022122285648d0f711fa6902814f79dd35212337841cc2063a487fb800c203e08814272876492d22b7cc7840368843c41f7cb8c3dba9b463641429c4096a471aebd0412d204747a3e8698af0cdd9980d4beba749be0fded12308f7d6238918d29a42d085102f3ed7731e7e53b3133e000178424c18dab7f9f0f7565d24828b4956eb29c34c670861c813e394bd4dd9d98311462844a66b5e2971c327815528433b985e474524b8b0921428d61f0225fc96367c9adbd8630fabd14e2f2332549b082b19fb879538e72b125a74727a10630ba9d0be17f1bb37964f4d81e1410110182010778608c203dd8408d5f3026c45c4e72a8862fb2974ea1f15dda537d468d5e9c3bdd634da6943d2abca8f2676b976f7ec69c5df449f64ed0cc1553ba75712c2d9d3d399b8b3236bea794afc4dc4970e19ce5acb868366626b738f97ab424f161d93a5bac1e4cd294e44f397d925a785671ca520ef71dd3824f297fdae4f7dbb3b32879aeb524768c8a5522224180b80dc868326ac8a29c3a2d8917357694198bc2f9c7531f71040d203dcca8018bdfce4fb82454dce82b0c95842c131719d15c71cce961fe613352d30a2dccc7d206b3ff4bb362170dbf71fd24e79157c18ea5ad2a3b37b15e557492fcb77392bcf2394c85593448caa59a4be64105e76d62a6fcdd299a4b424acd4ed7254906354cf17f8f584a6531f6fca5e03f894977c57facb3a450dfbc930917556c3a2fa8310ad2635cede59a94f8c6d8400d51d4dab999677c1568a046284c490ecfba15f4400d50945abeaa43fc26f1e4d4f8440d4fd4e8440d4e503a9636bd5bec586b6c626b686204353251031329a871891a96a851891a94a831092d444ba6640118a18624f6f4ae26566da64d91a83fc951cd5c531e17755103129c144c37c9f7a3521f06281111111169e2d9a90008a3c623ee0de6194accaeca51106a38224d3989291e4f73b9d688b453ee2ea16255a78a1189c9ab376a6846cb7a11c9df3979acb81a3c4720d450445b5567da131583fb89c87abc5ceaf7d2e7434451e52d658f99aa3c3f849bc32eac5518e44762821a8630346612c574f3e45f28e0831a85687d73de6039864d138d8888384044640c163820050ec841102068dca02fe0ce817644d42084694cec3831f5f6db0791860c3f9724614bba5d1089f717a5f285c5ce3810ecbf5c4e1219df1b06847a593fce43fb07f2dc733a398931733ef183f9e73f675d3b553ae903e6e15d296a273109257c28f77b65ce5eeb6e49f6a079fa18eba71e0c97d3c6964f8b0d691e703be97fb3968bfe89874cb2e8992edd6fbcf10ec95172e2ae8ca787ed700aa3ba31c77392d6abc359ade4f2b687757428b7b52449960b96f23687a36b062dc14c7d4a8e1c281d4d169d6bf3421387672f7cea8ff54e471135e050f4bac5142b2656ccdf409dfe5ef59cd470839a236d354aeab49ea4461b4cf5595ede5683af63d46043521e9150a9acfa8daec1f094e864fd9d573c3524853c978d5927c7aab750230d977e2e4d1706a98106caebe54b4a16262bc91914cb94a379864fcf9a19fccecded6ca1a9e25486af4ece2147dd5c3c4f8634c4e76c7af31832edf49f433a35c4d06494b6bbc78ae57518cae1175ba72e5b8a070c499ee2c6ca1dcf2ae22f9c755d9ea3bddc752f1026a6a4f9a1eb266e1756135df1d0b53279e542d29a4445da735ae8b750466ecab1552d94a04616ced20c7a99fd93540e0b35aea0776ffd8c4911420d2b605aa9bff4a4d09255c13cdd5cf558154502420d2a9439256f73132d7938853f6fec1469c2a546470acdaa87e5eadbf3e0d68842f9a772379e673767a0e0753e9d12243fc8983cc1202e6dd5b3f1d9a1130ada49be14bdc465c526783f2399744f7e5083095bfe6b7e7797eff0975067cea39ab48347754a404a736d4837edb72d099f64be75fde726a1470216d2e4ff937e4e74b3c611ea24974763de566adf08456b798494a0da9a1641cf39dc5cb387cfd4d42082d993f867e6f1b373c34818cd6a2568495d0e09a3afeef2a974d958371889afb261ed5a32b70b8c2b68364b4f51a36f4502017e714cd1ef43b389871b7d516c7bb599cdc70fb9175675c558df60e279f2e2fbb2b6bb789aa9c75d74f95ae51c8d1c7f7847a62bc5c6cf4843056904f1437193c96dc9c1377797a30f7c9c56be7e8f0a39f860b4859e19ab9876da1c7bf83d7f925cd34acbc51c7ad8ea93d86692a8e98236222272460f1f417ef830411a3f72e4c1fc2589dd59a493a5ff100b2a90030fe518735d8e7fe61c678e3b1cf2b397c9e92b8cc7cc48aa90c30e26d93acc78b4ec249639eac05d69cc7d52a7a4961fdac11472d0a1d196eedb78fb54e273b02f7ed7cb4a98f8b70772c881c84e098f69ba973c5d8693c10125e488437b65659e97d3f2db09193f1216a41104004ec8018775cd4f638ce75be97e83495c3d4b927a3d794e0739dc70b8d470f91b1f89418e3618175cfea73bba3e9d830d468bd6edd3299a753ac71a887eb11c3ffcdaa4d4600c655b52a98935ab9221471ada541d3f68673641939820071af64ed9f2cf5476db739ca1d4246566cf7eb3cf7398a150e2e67e665a0636c53cd5fd52410e326421773733bd9a145e8e31f8d953a62bf9a4cb9ee7104362aca0e331da74f270214718caa3f3275766127e2b58c80106638808bbf7a4296cfa0bc9a9a4a757f1b024e885dc5376c459122c74b80b073f4f726bbd5c304dcc8e25dbb485eda2d47f6b460babe87a5eca1aa7269385aba412f37cfb58d0a72fe564598cefe71572dfd8565552e7ec94127258c1cc49a622f38c428e2abc25a51376f523324950c84185a7a44de9d672eee4981c53a83b8913e1c1aa3bf423e490829dae6bc28a1a85c7d324db7299030a467d84c49998f75fccf184e3c6b7e5d8b9db258605399c60fc6871c3757a23f626147f59fedc42b78fcb04f4e244f7d51b49cd12e8b0254efb4709870d1eed7b3e772a4b427e2362b27b7220e192d0b6cc9aae536d24c871842b4cc60f390da9241b81d616ad4d621bff9a1c45484a4153446b98f34e92830885878bc12f598671b4cdf321d91d6f34611c2a2a3387a54f92e10886337d2f0e60e0c93b4d8d8f6892022bc0f18b34c599e5b64c3a1ac7e10bbc354bacbdae38276f70f4e2f4a956ef20d57125bc28d8546d7cca76a18b5c58d9152b72bdc72a830317b5e999b89b7370dc22d93dca788e3fbf9b9b000e5b2c1ef65bad5dcd4d08472db6932eef475687b611072df0d09ea34952ef963642c0310b3b7389b9566a34991dc0218b47acb2db7a16ed13138b3eaba7d4b93c94ab05072c3431f9337cc6385e710e25aa7bbf8ec315e7f9cdfd27599279c3d18ac535648e27a6a0177370b0823e9988cf796bf53c3856d16cecfed418aca7c48c6800872adad87fb71aa7474d3e15c5a451a3d52d6a668f0a435b434d93a7e0193fc59617433a33835ad9a638f3c94675e6122aa64b517d8eaba74fa1bd6252f82997873e39c5e0d78e82d58e21729d4c12cd44145645fb88096928ba7839cf5286cecaa03074e56d30f5f268e627923a4acda7f31ccff744e1bbfaba52ed44ec446927ae227d3b6b0a39918b96c7768ef2dad626369796f3dead93324613aecc5b4c92878f3766c25072e5af31ed5462840942e5e4d0bb6b9a3e9748f2cd8d7a62b650a9e0b0847ef627c7f7084d15bd018e4ab0e9b97f629079cff944e0a0845d413bbab24e7c24e9e1c3063d80806312491e6d2d4bc5ec26562322223d1222e090c451eb6d7ff25373ec8c888804014724cace41d39af4320e489c2e7ea6beac1f816da8bf8bfeaaa5f650010e471cf216e7e67b29646e2401381a41e660bee2597e5f3d8c384ce8978eef9b9e7811be5b6ee40991f69ea308f2d7735e13e924f9611c89a04b8c1bb5935827443810e1874eb914e5b26a26711c82ceefef5c29da48a7380c917431e55a594ba7cce028447135524ee2db63ff3808b1866ad83239bd76a7471c00081c83484a57961d3fe11084d966ee841283ad25393802d14e5abaf83d169d96077000e22fdd64ab17c2f187b36398cf992b9f2425191111e9212222820b60a00422e8000a70f8a198138fdd2598e059c3d1872b5734263964a9a59c0f898916ab744f2ae9a4e0d843a12ca7bcde1a3de43f6d31f7d46ef4110738f2d066f9d6c8afb8f5141ee0c04329fa7fce991c2adc7b872b4df766624b0c1db4831dc42f8a8672cdfba9c32966be4c79f33d96659081831fe0a083b1d337a7d706c13187b3f689277a5481c8e19839899c78551cce372ee96ede36610207bd35697f4a162038dee0a55ff10a11df70133470b8e1a43a6d96d7e4afcb7fe068c37267dbd1bc43060e369453cdd6ecdf6b284ac9c65cce9eb99b031c6a783ed33b6359dbdb9986e773f7a675fc7cf2674444e471a0410b15d359ffb464fa6c80e30cc9f93b8cae6a5a4a9f0dcc505b7774dc283943a78c348e326ca13289a9c2e8a5c546444480f818711c64308a9675c6dce118035349b29b170f87184e5373b2dd95901a33053c00003de008c31b2f47554c25edf63138c070b44af99d49f6c990491c5fa063f273efeae0f002f62166eafedb3e8aa30bf77c56faf052ae591c5cb832677a59ee3f3b7f0b6f6fe9690c570b6488cd6da7104716ea8ecf9ff973ada5c281854258989e9ed1ec1f8e2ba02af1ae73b17a43c76105c64fcfb29c45255909e0a8c29ac757c3ba26cf09a9d0f69cd0bd11ff572e8e2970aa953a45d5ffb89e21e09082b65ab26d118e2898ea511e3be6bf4c0a0e2858b379f753e6bd7be7094c9da75ae6121c4e386bfecc61b358bcba58004713d0607fd2559a92b25c389870a985ccb1e5e358026f1be3c768d5d86f7d0087128ce87b8d127912eeb8122c53c481044adea9edbfacbb6442011c47a02b85b0babcae1e5c12e030c21a5334754b0f13971c018e22a89a32858ba99e72da8c88889c8b000e22dcdf293a49f2592a95ac4044c4c70ff781193ecc20c18d61e021dbcccc3ff355f087a7e0479014888898718630d6d4a8a466f223222240c8c8410f33bc8c337c7030bca94e727d7ef408188826417253b67db0724444a402377ea16ff46c9bcbbcab9b6484c730377c617bafaa56a5201dc32040c6a01bbd40b4ce773f07dce08599664dd812db7d539a811bbba8e3caaaf38ea78cd60d5d186b293d25ad73711ccb917bbf8df5f2062edc363d13ecfa6398f3c62d4a132e65373b19b1051b3a967fca96cebd47e0462df4ceb1c755a79294ef1f36f0e48c20490e7ef8e080dda045ed5ac172d608bb943322229286d0e8112407df801bb3a8b3491f6a4cbaba74cfa1d1c381fc48ce9045c952899f323e496d4e2c4c16d95d662d2c1add90a788480a446ebce2dc9aac69df9cac6a4444c415ce499576aae7afb9c08d56309f9dd3ee7db678ba1313888800f9e129b8c18af38dc9397b9fb627fdc72a98943fa93446549779813134704315775a4d4d92955871bb54b0b17e5377d2d7c87e046fa0a2f4354bb75a3f39993d809c22d1a283d4acc9259a670a3b263a95c6d768934ab1f9fe44798e592c0cb8410ab4a3d4e9ab360aadc59220d96be2b896033244447280861924b8218aa43e5fadfd122faca168df3a7eeeb6427f0e8a2ec646e7af389bd46232cc484c30060a6e7c82faacd935f51ae9f1801b9e385acb7555082170a3135db6bc6de95df3f8991b9c687d2cd4c90f1bf4d8c4352e3e3efa9319dd480f1ba0b1de3dfc8c8481b88808057e2423dc3e4682780e44447e24237c431387a6abe76728d9e7f6c08d4c189f362b225e4d9ce806260ef6b71afda2e57d342222d269987101119134cc48e8c625cefeb768e9e92e21e086256e5402336dcd193eab2ae41ef4074444c600c10d4ae4155e2ed555489cfc24961bf5a8d614c2bd95046a172515eeb9965a24ee709d41e43e3720d186126fb3a27af6cf474444c6c88088483b1967f8e004f8b8f188630a8b3aff18644c331c03371c818d470b6f4f722c971b815f7994caf33de9638ce8dea42ff32a7f04a11b8b286795d6fd8b4c25c728825ff1f97fb31c2ba43fbc7ff8b0c08d44244972af4f59f28a332142f78bec8ffddfdb7ff430c3cbe8a1811b876063995fb987fc88cb888888218e1ffb46212eb92fb4a39d1c3509bbe00621740b7ba23925837873dc8b26e7f9687249c10d412c97eee55f6236f94c20ec907937348e5d8f090a6e00c29f2f2949e55e103446f087d44c14f90ab657158d8888a8e0861f1ccb1a37952407031a1803031a68e7e48c14a4e12128c18d3ed0ae2e799e53924d1d72c10d3e7c75b939c36e492e5e066eec61dbb312dd7f335db52322223c70336ee8c19cee2db7cee7461e4c13d6317b727633ef811b786864dfb5e27c0aafd911119105dcb8c3396c0cefa61e3327d934829c9103b74353721d63349ff3bdeb40577e56ae7cd241ab1caa4c8acd41dd4ea79926ecdf69e8861c722bb9f1de2c72e98b4325a6860d7926ccb9950429c3bb0137e070e30da564e749abf10d377c52d2eeeabcf95f62d0d0816b600337dae0776987ece828d96783daa1d22235e6c61a4eb9b2bb9a50dd50c38d344ce0061a6e9c6193e7d644cb29dbf7bf61062b499efc2b1f9541dbca6af184a8fa3811c20d32dc18c3b9fb4dda37b92dc9470cca9b9c73c44647fa0324b81186caa662092b13972d9be1e30637c070ec8d8f3b26674885cc8d2f1451f6ff9943bfc7df0b4fb5a711ddbad44ab9d105f272ecf5b7cf05eea42ceebd4929bb06c28d2da03b3da13b92b1bbd4029ac4848eaef39db7a471230b495317a32feeb22c8f05d5c4d7943db4956dee0a64d26072fab415ee4a2579a26c974945c68d2a2827c9c9d3e79cde3a4a854327d3a5cb583d710a8ec9da593fa53559298514dc8882313753dee6f3dbebfe06149cd6ef35314fbf49f92778a2cd6613a4b5e5351bdc70421bbe2d5c93e6dee534a1923afce4f8ece7280a3798e0654cbce5c877557f099406ff31f9183b7a2b3794704a3595c3c74e57a2e2841b496037c71ee99833ef9c48f04efd52ccb91b47b8373e4379c865704d176e18a17c2d958996db386f14a1dbfc124e4e69d9ac45e10611f8fca61bf382d4758c8d611463e36ff8c68926e64b604318b698b0c1f2c9631eb30bb0118c4cf44da2a7c4e6fbef061bc03047d728b117e6669367b0f10b254aed848bcf0c367cb1947d96a0e341fb62bd3098fc896dbfd9939c106cf0c2c62ebacc16c74e568b6a1aed030369b40f0c7c09d20842c60f1f37484600e4035fb0a18bc4a4986e1e55af76511bb928091e63b2f74646066ce0a2e4399cdb5594927eb2710bb425eaf472a6d795b630687e12a6ac4247ac5a2445d5379b9f12d70c1a67d0c24cd2b47f9e9db8e3cfe2123d4d983ed59c722f8b3da5b7d54cf499d36351bc2c6a9f938592731c1689264a6d45fd15a5ff080fb617615157601d6156c29fe798ba159a3457da93ad517956283a3d9226f468b8ab3885ffc669c5e89bc3aae83ee9a73d53b1540ae7d2d6a282527bb76806c9e6d39b400c2a988268cadf4d7258f2814c4193342731a7735238eaeeac56a85220461452936a2f06ab984b6606c480022126640917dede997a823b55a24b06dfdd11c57082727963963c254d3879e82467ae9c436f2e0613eedc1aef2eae8f592704622cc198f1977365992f4948036228a1b95c9264b82b3155b8013192b069e9a7b2eb943f392006121e3951db132d42ee801847e8241f932c2b7fd6d2474444ce8c11fe4b29dd83234092910f885104c2e414b3358979da1e3188507f68b6ec713da6941bec18069ec2bfe9954617bb760863d5f48e413f3f460c76042339d2846d998a59f2c00e6024d5a6a67aff707d5911111f64fc62954da13a35469ff97c41a69093c352896ba301e9c59b42744cf4a25e89f2420b92529ea2df85f9c49fcc51297f49c22bd8a10bd5be52dfacbb06b972518c1f43e79bce3377a560072e4ae2e7764f31a7fe2f5fb0e316b5c9591f22230a76d8a20ad14e62945cf761ac45425748c9e9774edc043b6851684bb158d65a9659f0e927c9e6fb9c4b7a9060872c8893b3c6b497e2d7a223222235d8118b04a98bc1ffc711119113ec8085bedd939f43752a497a4444a4870876bc82dbe8947b7b5f324e3b5cb156a5358beaec68052747ffbeaa32614a9a15bc274d692b136149cc2adc143ce7a48990f2fa023b54b19418c5eae75374149841da8e54ac6a397eb92a6dc20415f9479fb4b14f769ca2d8579aa2597efafc233b4c91c9276fbc0e36268ac7cff0c14030b0a31445f52593bdab2c1ff4c18216ec2085b5ee6963a3edc939368a76ee3dc6cf753c5a51a4d939db57baae2e83831da1386eb45bd44f69ed2f65ec00c515fd042929da66ecf884531eae5d3bc91b5bf384b92bc5faedea44e1dad5517beca7264eb8276da96a98cbdfd226ced9263f54cc5b59464d28e9d942b9949948b45cb17d82c5676730518aa11b276a697e7f893cc68d4887966edb96c8a7b62cc78b924f629530672c299524c5fdd0d70e4a309e71163f6c1262ea1d9328f58a9f667dc7f8c90448b3df608724ee4c62a936af417c9491821cec88045be9e1fa2df85709422239fd8995e35faad1ea116efa57f8609289976e479cc44dd95d3732891636c29cf94ab629d94c73ca08358ba5e69a0a9f6e2da294a3c465ebe31d8ad86476c66267546e34115a86aacfa4911ff34484fe9ff251bfa4ebe41ec2b4b1aff6d162564d3184de976309262741d35f85e82ec604ed6413a20da71317173753390832675ee7a32aef5304d159a79f9cf953c73809c49d5a3e5ee5ce6459020873ead7790cfe81abd41b2d4e97e417f3c321531c93cb739db104801176f4a1cedfe79de353f0243c2222b203325a0321d8c187e23a347994f8c5380b61c71eb8dc6d7337a3f9bdeed043d96a5e5bab2978bce48193a4ecb29304ed9b320320d881876f43e34b43848729f0811d77b073f5bc7b9ca8d9230810347ef400428688089032c8088246eeb083575749721313b3a30e599ed0a92eb3fac23be890fc2549b1257bfa1cdd1caa289725bce4a6f34a1a415060811d72304c7928094dd36a7d471cfac8983b7c9c5360831d70a8c44d733125b1fac3fbae013f230d15243bde909b7aee0a99ea5ebb1bae53e9f4f9c1edcbb3a30d9c4b75ace01fca2c638231829051c61929a0c10e36987f3774ff0793ea6e0dcb493a65326fb1f36584033bd490b8dfda7d096bb9ef1d697866f32c78417a9046d2021f3c50810476a001134da235ed9ea124e7d63be14cb69eca0e33944bb69370a26ebc4f193bcab0cf9f70f163395c98c990943e9a82c6a8bb4ad9310693a6ce147e532ecb80058821b92bbd24c9e58c69c3a069b69d4c093b1a27306c57b95a99a4cee48fa92f982b5612436f2c417edde1053d6783c5fe7e9a3449c18e2e94d17e42bc9bac69cf327cf8d815ece042dbd3b9e9f1a949aeb670a8e4f1637ca473857668c1941a2c58b69c6b5edd91852429fec44af7ce86754444a487193e7a04711bfcf0f122222fd88185d76635254a70c715aad3b98b724952596b87154ce28484ce88f49c35821d552023e5754a3629e76431c37360031f630715b04b8289276a9f58139b1d53b0d5c28479d17ef8e84101158cf1c333b0430a76b2def124f92341121388888c0449ce10114923c88e286826a74d51a2bd67d43d82fc20e347901f417640e14b67f2d459563bb17f0236b6b9bc72a86a779d60ca8ea7280b7de76a134c6269d2a7de4813333b9860d4ce398bc79790b9099a523831f52fdfa1844bd6fbd974525ab9b823096ece326a6a61a2fcdf8104b35334bb5ce9239416eee2c5ac3b8c704927d2d93e3db3293b8ae0c9aa58bbe7e99c991d44e0d3df65f4d87d1d2f3a8661a53799198f55d5be30d679edff97cfa4a709465ec2887b32314dc2a70318a7dec7244489c9793fbf58a3e6eb94a7a13d73be384b344c6dc6f4c2b8be3bb3f73d5162bc28ad7430d7cc39475776f1fe6fa67fde3d6ca043172639e5c5b4186e628af7c03df0c379e04304a523170957a29ba96c8a593f2eba984ede2dd9a38a949020881964f830c10b74dc22b768b136560e95abd1610b74c6364c4a928e5a24eaa7d16467426fedb4305f38d1aa68ce22d9c5d2e2671232643c093a64d15b4b4989be39c91da3041db1f8734e2bbe17ff4349ea80c52587cea1f63a62c2d8021dafd893d4d9e5dd84053a5c61598a4e7889584e738c76337c9491011191d6818e5664e7ee614dee74b0822faf1867ac5b0517edd69d664f10ab55e1ccbd8c7e4c97dc642a38b3b4dfd984fe2c295478c2a68e5315ab4ed3294e297b123654980a1337c5f9aaa5a33aee3a594a8106bf28d5f2e82045d7d1156e345a8e68758c823651e53fcb736ed245614af6a6a4dfafaf6528bc1c16c37375ca12962fe80045752544068930c1f6b3828e4fe8d57652bd0996fee7078ea0c313edb8ab6659b1093a3a71e8306fcdb1a7ca541d9c28d37f382bb19a0f3751479f8ba72b9bc79268c237213ecb7d9889c25da3a768cca4291d9838a2d2c68bb28cfad925f00ff64912f3abc3126c86dbfacbcf76925702d3cd2144ff3aeea39450b4427a524ff7dcce24daf3bba0db1f163949a22c265db9bc2a93f047c2368d96d1ad2f2ac6464444120d15e880c471e9355fcc8c92df3fe264177276498ef9d47684553a9deb4f8a043a1a8105bd60b94c8a283933810e4678b6b72925fd4d696d1d8b60935872e5c98707597528a2fc49db52ca1546fd2411e55776d6784ef1b9bb810e44e8aab6f5d1395ee936d2a3471034ce30e3033f7c00f9814606807890343000041d876035bad4ee49619f53f7011940d0f8800e439445e236ee422f874e54884a2c0b6352d684f0d36f4cd00ff14b2beb18c45a312726fb389e2e17046ad179a29ffaa7e804a2b0f13cac233f2a3a80d884e9682949795913fdc1b1101395c37a820e3f50139e3506cb4d9a1a1d7d7883bf86e53c81a0830f7f5ccfd456ff2eb5ebd8c3626539c9a9eec434d38321b764d14a7eb731a4230f9698a162495b999227c18391d39d476fc6f37750f7cdb269882701a4c30ea47c860af1de1bb175d4a1cf2bafdc8cc9df8d0f1d74c03409fe6e3926ef9cd331074cb3586e4979b30c02c4832422d02187c2ef04b77c313ae250b654d163653c4fe1d60187dcd34b0531fb0dc98974e4dfafc30d546e7e4b3dd136944b74d1f7ecf46c396c7835ee7aa5d4d7b057f470129b4fa898a9c1ab365fcf9a4c2eee693086c547cd98dc1a4b6ea0030df49f986ecdae34a5fc1912cb674bd5dbfb2e378319d2fcd7372a8339e547ef4a4f6fdf92c18d1735dc77f55878633886cfcffde311c31e3c46ff46eaefa784c1d9bd0c9ead3567d7c05094764dbfac693fc45f503556a95e0e7961731fd9cd77ed9bcc2e70628917b25e672a2f174e51355416d5fa924cb690ac57dda7e8b4f054cc262f13ff1db42c1865a97da6abd4333ab0a0e798b2ee437b73c53bd07185b28a9cac494a269b9d5670a3735af5c77454813a299a7472ec091b722a1c2cbb47d405fb6e7f0a7cb88fd7ef8ecd572285744ac8cddb4c92073d0aeb66a5d9937d12e88042394f9e379b8bb22beb7802e5fd751b7312b35cd4e1842c76b4bfee7b2ce96fc297f2c994fc25ece8a8830979942df92fcfa03ddd40c712c8f1244b74e7752861d7d7b0304bd1aa4e7424413529e1729e930f9b1d820e247c16ee6249f34a6b8e8e23a039e57c4c330f298d0e2350d1c49336ee454711dceca1e56e96e43b131d44306c5efbaf96c5df358ca22e4aae0d353b8b0b038df9b7a4d82f912ac9418e60fca395162ff3c0d8c2a7cbeec77ed12529e755f0cd17650b16a36bae62de7b91b86faf66d3a4397b7841fe9414a34d70a4c7193d7a3020c72ed0f8a8a16312f1b09932fe72e8a23b4b492b06cf33591b393972d1586e1354fe63650f4744446ce043040700921c2073e082de4f5249d5741bd8c08708cef0410211111bf8284302396ee1e776984b1dcbd24573d882f29c6d75edacad5120396a81550aafe1db3d62de1cb4c0463ce566c7149390e5608ccd318b3f655916c6c8d03d6262b148d4e4bae7b9d5f3c9c9018b4d922db69a58399724af38e693e24c37f304b5b8824dbd3661b3c9c39eb48250fd18ab1262c5f796cac3587efe93ed418e555c59f3335af4c9d1d3c8a18ae32b7cf6e3829f89e64805e3b9baa33295f67415e4400519362649a2a4b8d9570f729ce25c9d6e6b533822228201535829946c314b5aa5284c878ac7b0964f280024072992247d75fffcc4b31b8527de6ef93d5fb25ba2f0fdd2a3753299185d288c5223995b2d57a70814cfc6e8191f4e6c3fa14f1c1dfc3ddbc560f1724f9862887dd92739fa4f9d602cc95a576a0e4e7819ad84cda9dc52d71c9b48f0bb8b96951ef4a4736822e9c684ee36933e939709538c716d23ccee5208136e922429a1c265bbd4e5b8849d37a6e76a7da57a23222219c86109357649628d86f020191772542231aa53ee128ffdd721420e4aa49faa6b7669ebde24083926614e269f681dfaaec30824292303392461d20b7eb949aa50aa03492331418e4818a531d3fa3266caa91c9050e4845ded486790e311c9e935eb976b5c474768242087233c7945e3c46062703d0a391ae14d49e273b27c962c23de984bbc8b551a4ae54598f249954a2e8dcd495184257476d46f0c0df32622d16ece9327c9d01444046751bda17e94408e4378577662509bf29bd110578e3d93a3618e42f0167e5359fb84f8af4fb3ab6bcaee7910e5143266c959c5f27604816dea4cf23d26e58fc911883b8949b25d4d27db09fb1866e400049b367fe57c6594918cf1c3004948ce67629e2499b82f1e128c172e2a85b48c84057530c011ac746d3691e9fcc28911124deea63374bca7b508e598a149efd55e4dce0044b0e494b34982cca94589c7300c6e7d5752b6a6931e1428050f6158ddebbe71a354873e18b5c9e6f961ce1fce031f65f81969a8c00a3c80d10965c2fc7a8a9dcffd42b5132c4b7c5aa2c417f89944a75abca063f5e24e15c3a69b31bfa0e1c18b4c0ae9a541db63f2985db496c33e9ce749db0e70c0071eba40bc2bbe89279a0b3e3479b4f11739d9010e7a7ce265f4a0000558100237f0c0c51e5bf9f2b57e63bfb760aa2ec5ac4ca5296e83f6e6618bc23c9c14c6c39a5ce95adcfb316dcc9f112ed28888488f1af0a085791bbe9652acb7f6b3f8ec92744c668e8888c480872c2c297864ed89b12809953c7cda764c65241e04880dcc2003063c6061da05cde37bbfa2d0e17259ce2b155676c52a121df16bd28a572ca4d27c7bd2342b8e177d92d03e7ab25a3c5661d558af77accd5a29aa28ca82492789e6c13b4ac18f2040121ea9305bd2fa94a316ea5378a082cc2785889929b724798a742e83e895679362e7043c4cd1f99f14d7744e92c49412f028c5c13b87bc546b0a7890c2b09c5c4b925ceb67192ce0318a74d6efc48b16e463c54314e8c6b8d1dc4fde107e284a29e9b7af696aca37280c6e65728e316adcea7ca2f91825d77f33a85c3c3c71f449aa7f873c3ae1b5f84eb895eecb56041e9c68bbe64b8a9591a0a1032f234143071bc0018f4ddc953cba790ce21a0f4d6cb697d9534a77fbf68888080acae09109c3d87ec7545c860ef6e081092f4ff3ef7e8ea5bb59018f4be049ce2ed9b721621191e4c7064444921f8e3c2c618a48cfb1f3b77ee9088f4a9c52f2fd9996b3d9661e94784bfe8edb966f3ec6e7318937f3523ef788fbb61de02109f3aad42a3e2ce6d79491e080472454fd547234314d6b89360f481c2a661ebe922421b50d783ce2e4bd494d7fdaf7f32309303c1c614656dc901293feeb22221ae0d10872fd6eabd7deb26c466452f29cc9fe93c58b1671cede70ba6e9e53a5085d3f45973c9fe2560a8f44ace1b76d3ea34949d68c50e0fd876bc043c003119694b26fb3436a1cf3108cda788aea3c0f435c9e755fbbd7fdbdf12844ff490e91edccb0241202bf247b39e7247f09161e83a8dd4acc79622ff4f43c04f16670d168521acbea7804e2fe9610f70b2556ecdc0c3236073e584484072074d5a041ca3e4687cac81fb89462c5ce704f61353cfc704c32d2d773d61f551e7d386a53563473d74f2f0f3e1cec83e668bf9bc71e0e7149455cff6292e4f5a0448e985c92f4b9269e07afca4ef8d49d3f7742021e782849a2749f749736647d8753ca4e2f699ad33bda81f4b4f694e1c2a30ee78e95fd7c729e685278d081b7fbf46bf5caab180478cc41577f8d79b525efcba10e67b2b9751cfcd0b313d22439ae091cb029c9c3447d4d55df9054d94bca54dd607cf16cbaa627a5b6c1d0d997254afde2c986d2e5c9a5b9ccc1b53564996afe5316d5f2a8818f9262d0a824da6ed2b05ddeea58f2b5be060d649b701f3ea7249d9c014dd24b9b341b3b496f862da4442f3a5c4ea12fc3971a9de6c49001cb74223195f9c71e439edba492832d06faa4bf15f3e849c3906435975ad55ae382c1e05d929463af98e07ee136e1c3f49e78819293f3af4e0cd5245da8adfc4349a25c602f4df95aa9664fb76065df94a1452dd815b38d59f4cffab2d05ed818dabb93760e0be62b9363c89c5f614d8bcbaf5421bdb9154c318728f1afccae79150c9725d6c9c4509939155ad3ace9a88f3e954fc1ece4314e27974277bff66a278cf5517034465cc7f2bdbda150dc94502577d1357d42257c7b9a984453ef84773b2e7bcae136be26e4a9c2a2b38afbc530e1dc714343a96d892fe110f17d1a53c241b5e593863a0966ceaa26af3412eec93131d453defc1f41df1e0d2a5e266f845f63f4a6db7914e17ced9bf5a6d5e2e641845bb3c74cf1ee4eae876132cdefd8679772164665d1297abe2c266583a107c912e42401c6d253b133a7c9e9fa0b634b8c75ee1de3555f90a31627f5f3fa077b71c99e1dee355ed4513585cf10311ddb0527556dccf36fc93eba404ed0ca984bde1c4f2e36f10f2755258929830b3e75852679e25bac1f397d524c985fd816b665779cfb88320bd7c26b69352997450ba43b9f099ec349a6cf2249f7d89c2257f496c51ed3668a65ca3ee958944b9a79ff1a169a5758bdb994f5db576c5d826812db4336ea0a77ad3b9c099ee2275bc109369d84cf3e7382acb83d65a83e49b8f66f15a7dcf1b2ea946ce5a8e2cce3aff1747ee3a9e8b3b2797a8e37372accd615fc63730a3f097dff1b53fc96ad95b1346ac894c2935e4f4e5249cc9d14c7a5cc6cf796a96414644e9bb4dedf1c912896b034ea256543c1b9540ee182c22a0fef9997a4b0fe13961021259b30efb1f64497c49eb314dc737c3bb17d25b1a24a38818999c4f25c37c14d6870d998ee3daa092a53f87c5666c213ee52478d63ab494c50f115cd37599e944c2e81995ad8d82cb713134b5c1a53e70953492c4c2a816fa6a8923a7fa52da184d17aae3d3cc924acf866c2e7c6d968259248b828a7bd1dbc629544a214c5b4356f98852881c4e9b3c3d6f343e32579c479ad43760e558249491c714992c8ec6876664ad288feab4c537891dc9f11c5dd7d5459592ef945b82ef9c1a39820db2bc2e9b0599df5c2e47c22b23cffcf318f082eaa93e5d12477d00f910693d64ef4114b6143f45d95f37c2f4f302944a9844eb9bd2666af84d8375a32e9533ab9741064d068db252b51828228eea6eb92f1fb140c44995f92e42702a28c7d526eeba656ef0fc7d58d3639e927c9a37e3086e6944e4ab48b39da8752c8145af163a129e5831fce375b2add43d1ae715275bc4549f550f0d4896e4b5dfae7218dc88b131e65dde3a16abb5fafca517abfc3e92a5253743b64f919b3c22495933a30321e1bf33c9ec4743865bff98dc7dc53cea1ccfa0d4bea52ad1c8c29ae899d581cf2b89649f02ce14057ba13bb6ec5ef936f48d2cdb9169d74839a73b1e2d59caf26dbd05e66f6932b9de529d9806a051337c65d8bf935606fdaf1e29d901557439b7df66e3f2cd54e439227fb77c74fa6180d49e9b35c48545e74cf605c0e65bbef51c935c39aea92ac9a512d4aca90d89f4dcaea7176563270f2d58b56fb5a9b632827df3f31c978124a316042ae499bc478756218e8b5fcb37a8260286627d1fb84bff31cfc82993cc9619b553c58d00b7b4a29ef27f92eb8b21f374d997c1de78227e47b7e5e0c7bf12dbce6d983c9e95e096be1338ba9e07116ccf338f9a931f99260e170797165df83977a854ede5bd792c4c84bada04b6aba5adead18ad02726fb2e5db14fd2515ee7acb65625bbcf2a6406aced5a999140ef73497648fb9b8a250d8a731ddda24a5eaa0f04875104dbd69b3b92798f42fe59274d173e69c60b23f5bfde89a80a70bb2da6f41f5724c70f7b563ab7c72b3dc12e83bc132c7e83af62b2151353e2dc5e46d3f09867af95c7298389723a15815de363f82c133272977ac19d1087e45d5467ebda67011123627d3af9c3dc40520422edd31f9591b466995275f2d877cd68491e49673ca923eada8168cac3f362f7e88aece8091a51426a5e4999ec4ec17c52ce127e3ed6bcccc1747a7bb4fcf7a51f0963e170f1a4e0e2f7e493bd1dbbf525ab60bbafda362c911e619d3c591d9b2c2d88a5ac672518e51375d5b52521f175cf64af2e632b3a0dfc24c3153865f8fbbb52da864a2d5ab5d850cd782d050e298afee569816c6a0ea9e2932ccb2b3383bcd45b6e25497c8a24d616376990b25afb1385690f832fd0eb5c222e9fd779592d4f77c0575629597c7c5acd315a757c54ea12f9a5cb602cf4d214faa7c493f563cf6fb96af9d5594f5f156bd957b324715969860a772f56797930a4fb8b859d3725051b67cf18a29795dca3945736e173e9a8931e4a648f079ff68dd936d97224d3d3e9642a39b2c29d4d01323a2427d4f46c1469974264645415a387965baa7a2190a73f0ef3cff28a62528923cf24db4f38937a5dbf0bbcead95270c935da6a6f324a93a91e07b69d57739bc8613fdba7f74926a137a6be53eb9fb3ba794269293ece1f3fb99b8644bccd4f13f1913d8e4e68e758973bde524e6ff984c5b2259338485f954023b39b7b8b1987ba68441fde6d2633389844e49decffe245fd64842935f4a0ca196a49cc44482fb2417264a875b8981c4aba9dc73a7645b92e61175640cf19d6282891947a826a57c1f45ca3c338d68cf2ee550c9ae2b6618b126693cc87dcc228c490a255ffa2b9bcb2882cafb17aa59b3f2c624820a6ad597a454f13c22ae93cbc28c09e6a93f442b955d2f34f64636c439db9669f2ca3172218c529aefb62f782c2184521fed34c93f26940cc2cb5b226a42ab9a2a08672f63cae431d2c540d86f9a84125c635e1110858e1bd314d5b73b7f48c8d47c9a2a3fb469fd4e73ba856dfa704a72a5d2d928f788f870e757d77429ad2ea23d247e5cab545c0fc55ea6d8a99097fd3cb8991d76a28f87a478b131f97f52fa3b9c314f8b77c94ce47638e6f7c855374d61ae43219e2646534ae1b374387de6c6acab59373b87e28b65097afbb52772787e35dac6e370b8bafc999c9b32091c3ec125aba26db25cdf9028a15e7d49923e9a6e58835898c9b8283db6e19452d6ab1c73d42a366899227f728ee953660d4fe7fc9375f52f4e450c351ccade73ca39bed9a58891062c3f6a2ec1c3bd253968a03a8c6712b39c01b1f3dc147eb2538f6298e19c26899a92bf568c9b11111131ca9067c99673c57fb1b0c9a077bfd5aa948c21073e7c0c400c31b41964f0c00c346c88118643c6ca4ba12c4d3b2ba30c3242700331c060a8310b16ebee9953231110e30b6278014f0d1d4d88c8ed9bbb70bedc2f612bc74e192ee38c1c7c200d0c0001929840052222692c10c4e00261c1b635bc05a24f52ab4a92f1cf820f708003cec9f3400c2d7c56d933d56d23222239c8021f2265a2cd57979efc0f1f41122cd89bb15212770ba2962bd47772fc93db6ccefc206858215963fa9dc538b1a902de1d0d8dc3a894cee2a1c1a1482c1007c481300014b23c2b004313082040541e0c0623b168246aeb1e140000562c1c463e202024181220121009c3c16020100c85016130181408878381e06a9e86b1a0f321382943932685b316d3b89deeea1e35b62da4872d44e9014be98d0520430115105ce06db4bed536c8ef4910ab4e10f1e807afad1fc2607b13e892d5f4104481b8cc3551e1241a12bda36798d7fd1fc98b9f0f2a575d9ddbaa20c420554b99f463949f5792a651368dbc69eabbe8b8c571dfb1c096859c1aec77036ee11c2ec459637e885c46309546ccd52ce75b2cde47d7d988b93bb1b0a224b305ecc8b1faa84cd0e98b79e108d649bec69b7a51dd360b737bcc66811ae0f7786bc828c1d6b20f56f290018c23b58b71976022a6f09155d347e34c17ceec6bb04da2986986cd07e154aa9b6491bca55797a74f50560c8e1f4777f7d617b082f92d223b3a86ce6793c9959516497acc9a095c481e9d8e6351b6ea75bf0bbdf4c511a70900e9b93fe82a165726269eb3dd43ad46ff6cae6913edc19d5598b95b83c68725e6d2264181cb78d2e57af7f017e37297be88babd721615899b3ce61881211bd13f7df66d7f9b7243d59b296174d39fd26509917f1501ae8c1b4039179cd18194a05bda0084a0e023954fb6601b16c0fdb905ba617ec722307d9d2f13d253501de36613da5a05e5af05579f1b2f49ff96f0ab46c3e9edda2b381b7a79f265248fb807dff8148db979409dc2a20538c69534978162f027a60c3d6d472c4352925ec47e576b94ac36bce049efcb0a16346bf070738a71d0ab9a87671a571550b3b4a7fd675a687c71855258513a29030cd57604df50085341e823d93d5d34bf06b8543ab6cccca759dd3ae0b78885a22c6bf25efaf0a9e49ca416f2dc6a9773d9b03396714495d0f46d8991a6fc99be59db4afa23e290d272a56571bc146da35eca8b612fcb2e24cebb009b95355bbb8a96adb2791e881150586f0da9c94e4b4c85dc4bc7adb08d114cc5f58f82eb33f413d6cb32daba5fca832f220df42037a56c182ef4abeae3b846ca920aa909c014b78aabb2dbc61c9688696c40c8e523f9d3a85ea0bfe8f4b9cefda2843fb27efaee86f98bc6a3eaba266256ad582716d8f7bfdf9c5ea8a94f51f1d690de0d68f14d8c4948ed510a15859d2d01a75fc559e1460d9cd135ad882b3c765159cca94096101fcd90a732e90b81bd119750fa50cedaccd46252e2b808e5ce76a65fdf3fb2573da98fd03bcec835eacffdaa68ef40a1b325c3b42e6f369830fc39b98d61438f4b627db962ace7d92086f46bc1797b03aae835cea9ba583294c643d7a22613fe32e9f2bc76e1872534c4aafe6178b11a20b680c6b5b3f2762cceaca53745b53368b9a35ac0ce7661cd31bed32c0146d924f897e26ab3ec257d4ea3364ecf05b2dbf4cd99d54473eb772d7df3ee3eddf46fa7651afc05b3cace17d57da7abafcb5e22ce588800d47941fa79ac12b13918179d040685ea45b224e4601846591a6c17dbbd0ad001b481cd857aef365641847a5df5321dcf2a8f722a36031fb8af63fd7e68dfa77edd587d3ad6adb10dbfd035f0d61d9201298689eef14ace8c635455913a5c16b767e754f3965447cc5325d4c1911420f81a62e44949928e1072047af35fef3b16870c81a2c0a859a47babf3e508f5d67033ed4ef970c19f276693f47cb5bda9c1e7d5765ce1dfa9f5abd27fd3fa75b5f3690c9ab48a75336a3deccb718a827394c4164faead868fb54b6199a5341cc0eb567b921c643bc71eaf6fbf5aec56ce3ebb59ecf2d2ef3b276ec267950c8f86e74d72aec633d34feb3db4a292590b116d11bbd5f2b4b37a567c5f7c5443b119fbd07d9deaf5637b3ef3df39e41a5f1eeeac0566c9ce75db98092c41fdccbaef350c715f63e76ba8be27c5cc3395364086ae92a55bb2fb9cd23d8fd570958772f5f1fb4c36c898e2772bbdb42fb5e616dfc0f3b67aa1470b48652e225ac41195ae5f26e90e4052268c569b058bc60175694bf3e0577874ae6a4e23568b6d717530ccf5c518d7f3277de289225dbce9886a39a5066cc51c99832cf1ea78aaa03a2cd5d28c073d39f9fe01ef0737e01901f1891ce3a7ecc15e0bbde6fbbf90ed34a541cb15222d6b954844421564a8c7d9e159b1b0fe035cb5bbc1b427fb8d768afa69f441022c976b55a1b37c766375226fef68be7cbd99652cbb534a0457123dcf9cc387b2c576d051e68e4cf32a43f6755832c8158272b1e558f053b0120840a3d8042fc644a71454202f1a3858ea7013ce79dd9a9b2e7f2f47e6fd2f1f810f328a805d44aa01b32718c610b7aea189bc4216fb308827a762cfb482e3e3567cc3116b9d8a09f7c29e06c82b86f71b75ae95508781a95b124c1f9c2aabd8a2ab96f64bc5044245c62cad0dfe9b07b9cc2da1914eb565d8e49639be1ec34a492577b4cf1756c60fa539da8ba06e25f5e247c7a02528e1e72e6c0426aa7aed46429ff6073571d4c9fb3846b50e711f02bcb2fc1d7290c6a8ebe56c99b338c06c0907ecc62af3b24abb4817e5bb7662e331e80c57fe53863835f579de8a09172b4e28c058927d3655f7fdd7ffe62983496c2af84250ba9ddc33200a914129b50bf4b1661796750d123086b10593284c6d7158b130d0c2aa6500448b263319364d8429051a64dac2218c281397563f807c5be4609c352029a72e18d42236cd4a58b78ffbe6e995c95bb56c41e600a3325ea8f97f6a4130f1ab56ef3d0e9f0d721d3d52b48f54168bb63c22c7fc4d4d64fe2e118f7ee66c1a164f6cc5dce2787bb83b83a54a3056841736dd420117c17418ebadc8462a71f21f6b0671f2ebca612f5f53e831ed58fddd9ab8167d2f46e9dc238c784b01d9ea59ec0b1db9732a2ac882a0375eb73136d3d144bd7cc8a21bac4491381fcb55e487d47b677fe1632cad7d315826b9f61e9f7fc7c0559c7156374d1eb92ddfad936baa42782325f5dbc31502d17453c54e6f53e64bce18b85065b8e0b99f9710d64e1d5216c8629da440a4b35eeed7c13ffc6b2cdd04056f6874bdb24e756847c9264ec68f86f27ca62e937a9d2c8832e0d4a40bfca4a1356f8d5725f7ebdcbba65704560ab35f179997e2c3221707509c387389802a31ae650e845f937339e909ae2f156bb2177109a51ae0fdecb61a3e8edc2b7e3c51f1c7881293c0c852be80631470acc57ad2256dd5b217ad8691ff58945c0c93316dc1f184a114372d9f84df4d2d38d99a2175139f6c73f9d20b01fea09c4bfb9dce858c913449279b126c48749988a4681033a0cd06dbe202a03c3d3e29bdbad81ab963d6ef2a48e9ebd53ddf0b8e673d6925624c56f061843f2c67f5c803f4fc83f99f032bd44d4f4baa1904e671af07e7bc689e3f5de2b675da8132e2e89399aca60782dcf6aaedfcfcecd87c9b09dcb135ec426b82e642d56a0d30aa7431cf4ef6eaf680ebf1ee68cfa54b66396596b86759009480083bb66507864e93ab45205e5a1616711d16004db07ea757c3e200e19b4aca5104301d4146ee8274603f061fdb2d6cb39942533a50a4faf3e32671914228f69bd301881fe9c676293af18741e33611b928d82fdfea88b043de9b1ed6a6d2cc7162178b13a8fefdf1c4b7cd077547878993299a873e1fba144ea00f6c34df5b28d24b92141df6e0ebb7e044ed92a3a1b44f267a26e780e9ccb3350ffa4371261572335a185e0a4b9c37a15e88ec422e0c3839e44a80f5a47e8c2fbe37f95aa1f06d217a6db2fa5008162e953d49b977b21be60bbf8a7924e4cee9a270532f26544d4ec8c672f5f952ba416e72207701edf7bdc39fa0610ec3a1558f54295e7db6c5af7beb6b58714d94d78f0e49df704e6d8d3499004b8a5fd045da371f91b158da06ecac64dcbe48327019fcd90ad3c73c3b056b8a53a85e0f345d7867b5e9e84e6b932806650e2a5247396f03ea0c8ae89bc4952f40cdfff5a8b1075191c72b13995ec82da97df58fea95e43c46bce9a64a363dd3758455ea51ed2cf76f34c6a69da0fadb8f8a966322b462eca1aa9333016592d77ec9073c85293c36b0ddd3a1852574e8fcad0c2e468a59c2ea622a359fc91071c63eb57073a91e2cc967f046ed7799cb26803ed3a58a341bc7cd7dcb1baa24b8cce8dd91a69e4978a16e89e06f7213c46053e588a62c03e3cab02778e8be2950fcd7c87e881580208d55277884d16c53c89f154a1d1e3f18bad42d3490d33063dca7e639eaba30d4a2a117c7ad038b9884ae77f6e62fef21c1bee81f2380821ca0d3ef188fd5a42459e526f2a52e61c59af186272f1b07d2c4c529c7412c2ceb6b6c25b3f6d66537db56b2c784b0c4ebd5f00e009eb3b54e027e5254095259bf0892a0113c36541aa89c33fdebfdc69865545307478cf349d4c5b31eb0252b143f8de0d622812d71b6820bc842fea0322b630794639c9b6dec7ae70e0f9fe7b901e59de24311d74939d52626b896e4c7698bddb2a496593129f15913927068a74beab69d42d248d0c2aef82d8a62b95a5cf085444c1db33e2dbb170d9024de7eb462772beb02a96800c22a6d56ff1172336520630d6fb9fd4b17fff217b8f60a19f5f5f375b241f7553ddc6c6466a84c710cc502778818e508828763ce867e0a8b514027f2e8376e3c1c9e7739889fb76e643cbf6326d2cc6a8d8a2d1954fcd49a803184aedd1fec8701595c94c6f2ba8140f5916e65a0047e59d7fc76cfeb3de3d31ff1d2a681c074978a3a8a0be88d13abe73d7d34bfd9f0e932707f6d3b751c5dd773ab65caf6ae34af8f47b69b6dc6f0ecd883c72eb25f31dfd6c17a3fa44034567d611870f3ae94177aaedbe0839fc1c6e0e6b6de1ce24f0cf067cbe6d1418f41b904444abb2474c844e1269f8306765d1ebbc2b7251f03426180d8894f0a94f90cf7789eaf109da85349b89b0542171878c36c00ff420dbf1d1749715510a6cdb3017517b8538bd7d63155c3cb98814970782cf8427a174c777634c8dc43715003467d00909a65d40affd57481e7064bbbf592f1d92bef2ec0fe8dbfbf92baa51684eee88f24cb6aa082755902e0810838bc00d5a8cdb20044f637d0baf132f5b1be80ff09ca239322a1506d4e489768c93e83339d34ee3674d23a9eee2b16ac050209afcefa953a1603048d4c25f46325a08ff610c3722209c55998b628cbf2d71a505248fa72b93a21fc6dca31496f2426d7c53301af819a7e2d6cee1f23c98346d2d9aa6156145a2c9a8e3922c99edbcdcf3582cb506decac35b7468432258e7c811c9ae17014dba2d0e747c73fbeba8f2942691ab52b9330d9729ec2391657cb12f0c77238029502d13364c89ce974f1b292072d80cc34bf6dc989d785109d0e1b7fe8e2f06785233f94ff3ddff9a4b0b81d6ccd11ceac07d54ab2aa240fa610a886567b2e2b5a5e6f35dd4c34eb19e39638fa86e8a1c378ae83e3bfddc5031ddac03fd01dc649aaeaee22a86b63ea433462a3e0379cb66fa294526098efd0cd0818d0927cfd7ebe4205d2b660ae719af7d2d819ad4081f1fa1999b71bbe8d65af00d71b94fdcb307636c77683655ad028507c0f03980055081715124f93e14ebac08cd417f161daa2c33626673ee936d893d48f48c23463a70ae552aa017b20074861be9d11a30754113b28c18c7abe4fd34f0d46435a73f9c1169e9b2241a80fb50cec0caf24c1402d04ae3f3152719f560306d322e8e9ea4eb22573bf0e3946409aa4b3c55a18a606f6b69e3a61894ef9354358ba52778f690250fe7e9611c9117dc76f4defa10e31f4d179f61391110518cb5cba4d0edbc5bc14bb5d98eae08d84c3bb552f99ac355e682cb6d64b01944ae041419dbe72f5d06a0ce3d9f3d4f75ca8665e90325473b2557982929629a1393398a381f280bc6903d56c30766ccb036afb6d20d8eb0bac41b6aaf009386e3984915570e515e5420d49fc5b0323977449180e4c56a2007bbd6b065e6eb1563406c29938564a3ec6d5c0b0cefd6b1cabe652f02c01a2a29392c97dabe98e8caf217d09f109dda2d646e1d5dce4276b6f304794282be5b8e4b058e6838a5319876b89436030ded2dbd89e8608269d4812cffb0358cc45bd600a2c5852d0e7cb1195b615deb7c5eb5bfb03d13b17d7045cbdcffe85921a4215b24348fe7fb1fa718429465e8963eb9a4327012ea7d27da92b54ded76397bd0fe2611632bb3d1e700ac02cd06d3a0fcb13137b0571f868cae00f636010f9604dc06e69c5cc3ecd3d5e0141dcb7db708e0bb55757c9d909627eafd0cf56b1b918c9eb0050b0cbc92ca461eb3bf4339bd03949010a88c5bb4bfed7943a0f0df2e9d2f4bc79f5cbd35a8cdaeceb4b3215107ae6a77cfddb0b36af22d4ec1cb17ef5a1adfe07bd7a2aa2ecdd60fc186268361280adabf0d6c24df43423add2e922b6a68de1b4246d940d5bc24ad2db909756e24b522b84ad23b994e98646f5d66d04ffe9d8e5fdc9231d1129621f6c069e90f67ea86481b77258b1218216dba4dcb2441141fb61216e1da3586d0a81430233ed55f5b416148b493e07e5ae5ff7352fe3efab7898c2815bba205e7c558033294750245ecdbb64e75dfc3593ac25c0150c40517ea9f4ebc23bfc5484b63edd4fb99c9a5cdfeb3983ada01baad3f003255b3e866e9d3755a580f0c0d80b3901070e7b06f736712b4ac494e7357194a5000e5baa07ba3bfc80ae082a923975742e8e35ce886409a07dc8e9f542346dc530c2563828806d6126e210d9bf8aa8fe9ac58ad34599025532ab51626f194931fb30542d9013626932613f8d2b2257f4cd228648ae5814b46b510aeeb8c0f4fb22d43a54c1ba99aad0cfd2c43524b2165e70e2c2e926aba958fa0abd395999eee886a23b1bf76b63aa77ec75de0df77e5315390304b5201a55b1e1e8236fde6da7eac4e9c7ad41db2e81ea380551789fbee867c2970b2952b7a060d44d15e717e0f6a557500d7ea60ed86662e409fff19042287fc0e8732f280161587972d33f8142d4d912f373a727c27565706002e9ee41344c0e71a8f127672dc5074d3b8be0c14c3b6f045e714f5ff4115a50734ebe7672a3c5f006c0630277a2ac1488f55a60a176de723deb14b51ad1f8ae2266234b3e81df4d714d17733aedb18586ec43810b0e59546a3ee7cb93da21966aa03db07dd1d2563eae1761f9e172d78fc56886cf711aff27407c64a59b72fc79f824cfb5f166ba8ed29b9d0a9a14e1c0c803129b69560356a52642b39417882fda1f02c9d3c8e5702c199d24339bac1f9e238604998820f07d28786d0f719464a6b8f18ceed641bc20f6c7a2d478bf3b387928b6bdf86a226f25f3458d8a2b72555d3c53086253f7fa87e6117b680d91f7386993d6e46cc73c6cf56edeb892856afcadcae80eec15a5155e2f4a3dd31ac822d6b990132f38e908d81273ebe6b26fae17b46fe29eb1dc4d73c159c23d3f83ecf44e99f1a4ca0fc12e620fba7b52765efa77f1524f60f5c6be2f1a6adfe12da3efcb06c8b6e43fc907ce6df7a3edda3c0bc831776ddf2a08b0710641fd99895caaab3e6abc3716f86ab52651e97cedfa3909d39288baef5fee2e59a370b47c2f434faef9ef0166028271cfb7a946e945e80b395fa413ba35393372c6df2968269bac0c197bab01d6b326d33e10ed0cb267d9ea6b042fc02307ece29b3c67802df619eee6c60ce7c0a2a49860306117595dd40bfb12dc9803b0e0497acc951d605404879ea263d02c57cb63926029bb0a1238b12b3ee2e99adfa7255a887fb9afc9443fb4e36d4cb7132b26ec02ed625832a9aa6d172c9f9f28d0aef830c35cb8c7a94a5c17df4db8df653e7c0819a22867d8366b348f4d7aba6e835272ff96af12e2d174bd189a39b6c41e2f5eea66d0ae8a4e238f81209e18a22124726d6b5e35ebe5576ba45ba154f565367cf6cc5627084787d2cc5e8064c6619f11b5fc0477ba02539f669a49080c96cc8a86fb71bc2f880a19242c6197c9d31d7f603847a5ea3b6056519a8a94fa6b41bc3af71712f81248918a9181426249aa5f3502235a2fc7e2643f414e091c3143a8679efa0c795358b9e53d86331db70f8db8b1489114169d8e23dfb5808af84a0f3b21f407a8a0614bc6bb8fc894bfda2ae89cbb7efeb16399d51b469e9ade7179b6dd05d987274d72a653b3b49997c2a073b5f2a9e834381f78ad8bf3cd41f3efe63d59216909f9f986fee309ddb21a17dfafce3cfe12e236b63fc66a0f8cfe4d23c8edacff2106174ef373022d4f20053e782910c3c6c270f1d6861e6dfce10a5ca23cfc22d06b4e7a5404c806313475baf222bc4a50008c0f0bc7b469f9cc0799f72b5fd15af7eeffb9830e571449d06d937ac1f1349196630540f105943ecc68aadb354624759257f9e0b0703981e58717be48fe5248393aa7449086f3522db55c97ca934a3e6de72e9d0c9a3628e808dabd70033f61ea619efcdb841b9ec4e9e3f0c7268611aef43b0cbec896dd7f10807110a8f2f3cf439e56948cacfe42be06851054371d809897fe1e695d941d5ad4a2b78f0bfd26a108f2ec975c05d7d61cde0521d579a7a2574ad1335a8bdd0de184d903d09aff8627410f081e52de49c9cdb15770ea7f98ab53773193daba1cf8db4383ad97158732c9d0285d34dc2ef0b1913e94cf8281561c21e245aee6dc6fe989abf390db4a096be5e64e31453d519e4372b13d990fd7435dc97953debdc7930ee5eda23ed4c9d165e0b9dc5b2304be7df81ef164693c0c2a94af274f62d928b1802ac587937ca735f21f7073cc673e0ec6b7357f746fe5902c8036e025bf390c73243370eced38d75a5e6adbd2a21464f41ca2d2a9b2c99d08c89fa251ad7cd437e2e528cce8a903859e0fac35076b7ff084caabac03bf83ecb975bed5d03a1971d1c7b4ae3a50b28e10b293d58d1da14bf1476075750b4833579acb027effadf2cb6933163f57b963a8abdf9d2b6e7f47a3c5a5e51f04841db0bf5b302aa894d68c87a7843c873f49869f8f4cd768e0c5255f6b38199df465cbe281b05f5b4614e630896e4ebf41f11aa055fb56cf4a51db8a8acd2a5e46a3d3e9009fb9c08b33284c05ec54f40f571bd9796dc2b83e06a99356abcb7109109a8b64abfdf8aed6e9e6f34f72118ced25103aaf3cfd21e6a0002223e24288df8068892a0e809f70d68dec7f7566f2fcd5d56bfc032c442554baf2274a60e363541c855eab1dd56641eb81148779a0e90e6ffa068d20ee58c5899476d8b19379e7299b9ef7568c5ae1b0020c2c683688bfcc92c13550522c4d8a1dd44fdfab2ad30306d14129e89be90952e5ca4cc8932cf0ba224af7e1554a0b55af4e2450a7d2f02f957611f8c8e06c6e63eb5f8252fa32fd56b5969b2b13fdc09e246425a3bb20b01659d7743cded222fd81af44d55292982f5dce496391782b5a70054963712025c495a7cf91629ce06d99fd448977c2f78313684c6cad5312e0ccacca6ced253846d58726875cf4d729c651c9818e5b57fd2299bde6428c432dcc1da190731161a7afe59c329d0d2cf2d0decc72533b2224d8928d68a465c557a0561496f3d1185f0643b0e883124a571cb3591f189e3a613f02f05df76dfda008c5138a8f264da2a6c57fe0df0b411209ed8e5b7e2c8c5811f0dc7fdfea97d5f6e01d39a633c70e662ee61b9259c707565618a7797e8e87c08eeddc48d479e3110a6921072a9a417b8093298958d54356de3716091ed587515ac3b921eba5f880c4001dfee51a01361976578458b5555d996506afe40a2c82ec82d92c49793ebc2d3449b87226b155017c801d0f01c01c2eef4af242595cdfc1ab37ed745c3253cb1178803cf31c11da30e5ff1abfddc146b0d368a2a500070ac5d9f12c7f8af87fef7ee2b127f9cb4ed649f707e30c72190c15dd6ecfcfb0dc50069c6f489417717fd3c563f0c4bf567d3a5e76f5b76a3727bef7d373af418fd98955b14b472dfc89c39e7ce8d1172df58383ecb7c133abaf6b408119ee703c02bebc1c4268e2e1202ae61c6c1a1d29f938d39d9450ee2e9f3f2d5d1baeeb5cd7317fe9b18fa7405a0bb30bf6851e9fc4aa68b965b8e4a6a3bd84737862d1ea725023d285b4ed4b14240260462bc38d59eda7c75484d4a1ef53f29586704c80e7ed07e8e8995d31eeded9b015ea818cda1797d4d40efef13ee1fc2bc14e7712a59f279a8cc5208a6c1943f4f2d807f8c63cb96fc96cab6f3bb91b7d1a451ee230c085b6ce9f6c4e1b70e456344b4785b21a19849ccf186ea3849988a8d01f98c157a45c7c2dc8012d09119148af7396427c3e554044c5a3d5191fcdc244c79a0242d2d7b8a695027df393d19074db339ebbd4b9ec56d2bb7904e62b467ff107a9f1aff03e8ec9e8d61d95d308a5efb8eb5b99effeef53a06d8594a4683f980f8fbe5abcfaa15beb49d26e42ceca45966548dec1b84f5edc4388e2e672123c09852bb80c4c182d1ba4d4324675de4422dd2ee5a03c881e6b7d16e9e5b99b2f2d035424fe75fa511b7d4ea4505fc3722cb19247c9cce9483252841e173b89030c0040ea1cdd74f4d12ba2703e2f9c48973fb4c70dd02e17e1979b9b1a9fea555265fc07ed863ef26a9201f128ef37c90f622b680599b0b98a335a91082c3e445eac51b0c61938c59a7ba2eb0082e12efc39326d6bddd467a7b2ad00ab5641352684c2fd7dd3a79184b98bd8698c54e7006662c570d4aa86598698dd9bc394d370799f784fa53171b0d71ecaaee6be62a6919da2c4dcb46b5437bd77c60fb6c6577962554f859fa9a3a1f33297db5a8c6abdac2e702c55ea8516d312ebfe61c1d3b6d5325c76cb3347a43ed9c479c53e25837c912fd690a0893d213bddd91b0baad71038c34d2e308a5c2b91659e9141a839814f0aca6353beb9779fb4e8347699b0d139964f2bc787a0b03127e5c0efcf3cd87f6c5b942e15f5482623beb44f34e913f15aba358d1787bdb2a8cbca3edd34e895b738a379a5757a1c485da3f191a7e286aeccb56a22683aefda49b078f884e762ba90c6de17706a6771822d6225421da829f976f5160cdc75ce42dc1a926290bfd84105e02334a1b4ad312e25e53c30efbb9a433da7414f022f71e4fcc5fa1043e4d6115393a262550c976f9ffc4217038927d21cd0dcdbfc69a88e6ba48d110512ada2f6d0cf5141e4a02fbb6cdcf2d7dbcab105f5e576c00928974defec736369b7331ab4bfe5828407ebb76b4e3bf289bde93d171358508270ab432848fb9da5b854d2808af650ee2ecc3b2b35aa839cd14b95424bd7125f146dfa12167701fda193317c718d1e82b4ab84eeb40e96b35c141cede4e96292f037121b85826f1b08d31ebda52e7cea07fc217b8e073415a81a892f051eaf2e07caa08787cdf891a40d9bbdf18082ca1edb404e67d2b311acb72260c63679a7cc5e81385359aaff1e94009d45c81f3dcb8ebda8f38e223950f8a9f4a296abd26ba2d4c45f0fdda50b3df123b8d96bbddea882c37d043ddf8bf89ec7f48b2812f2d1136e2f100b87f279991f257195e319d4fdb0f0726b59459f330a33935417f1a685945a9173c25c139f6796890cb423b3674688a0f5d8abd105391b2cd4ae378ffa9e84257cc56e114711003c5d4efce54ec91a2a785dde35821723422988ec588c5226ecb819ee808091ce1a442ff17e748c3b353bb55d13fc28a3740964990d0e38eee0983106d9a269e5d194bfc5ec3045a1af626748a3437904c19015d6934be8c5aa5cf9a99b2c14f59e2b3da5c2464a976ff7a64e422a2890987ee09dbf9dad1121dcab8fae93258fa12d1d34a87faaa8cf9141f54e152ec4a30ec83006ed462c903f384be5843c8a91e807fb63411d0eacaad772f5c87afe1409885894047dc1ba7d102040b1bb96bb991871c5da472f5c0ca78544fbefb0e0d8ac0b68cd9fc3a263bcce26a1bfa43e5042accf070ba83870e78afbc36cc0178ec42a30d470212452e3c20bc08c42fd3e79ae7d0eb97894ad2495f8ea086705fc58fb29d29146289f0ac3237fc1bb39f98f12d71bd99ad2b6c6829f961718af78377b4ae9d3d9dd93b793f98d0dd94458971869c5ed51d31cc4ff8ec2bd65c84d337bcc507e69199090dc3e1318ba512974117fe26ca53834484ae7ca235be57a46752ec147d90b4381be448781dcd2b31f7ee96fdd5b525b0cab02d56a3e86cf4f48d1d2a9edff5960572c3c1b751f6798c0d97c05839479d7fac9966b5a32f094970b90f31a4d58915fa96c4715f01b616b273d45f945f2af5054843e9772a64a2511911aa45c91b03499b3adec69807445a1e12637282fe9ee70923b4a7bea50a2510a272850d7d6adc3038bd5bfc612ddbe61003b0280aaa296851a3dc856c28beebfd79e01c0472d30c0b0094331a8388a87f5772edb6dcd7a8d7659200e10df4a5d48830bb7d05358dc4b5a6d692afb71dafc5b5050c85a3f9d6dcf39e0601c905b36eaa9bbafa5e386b9ae007e6f1063b128a278c72bb3e0d13a42150d1a643fc9a26cf38d82e82f9d455bf0fc1684af54d7a907676443355eb31a42710190714d86a22616f0742daff1cfcdc4eb005249eab02873345814df6eb62458183c1ac1e6c3a89f91893f9adfa2a679b4a9b8c2606c198c22c8b15d6b05e509ac0d29c2359162c5bf6893413fd8dffbfdb495ed9f28c43705e32012e5da2d22209f86689407f2a56498d0dffd5e2f3379ec1479bee109cfd313f34d2444b11b0e139cfa5c169db120bf46e11b5ba5a09d758b39f50cf97a593baea00fcb6b12f66e016ae4b78ee1edaab492a76cf3b3307e9b6c62267ceb12591c94a0686dc1a548ddb1cce6610b2c7bdec910a61a571d87859adc19f40d7b7c889aabe87cb115b3ef08df15597ae3cc7c6e91f5fef6509ed26ebe74e6fbaf1016d5b28fe28385dd3cb52836dfc9867643367127d0c038b3d1377e1654548aa1f7b762f6799666ccff9b4d68a8814900beeec9837e8a62c89fba3040ee17ab66d26bf4866f163ee5d92aaeefe94e7d8cdf8f70813a43cb63277e833b6159307851a5016c7cab263e221004f0797fe9eade7ed1eda218c3e1f02d17f1b8bf72f6710421bb2d49af0ebdcc66bb9a536d78bea5034e686c227aed950c24a4c437d35eb38db46388c01541a5ba2453f7070d7e92a69bdee32bb0f561b2c88cb40564402b2129d4e6ee1114453d825c3152c7c07ff256aefd35fe9ebeb1362b4a5f3e36be62c03bdb20ca7c22e8f1c3d6ad8d15f62b38aa79f5252a6f35c28cee211462798bee1399cd71ef0ebcc353190e0018dbe4fa450fc09e92536cf722dae3cceb50e0691b3792e942a40183a1e66baa62bb2fe9e0d8fda3c0ac9217476b9bb72fad3a1999e80d159ffdfc590904d5168ccd2bcd190239fd698780ec45c921ae554c9ed5a24050ffc6df14f8f1fb12538ef4cf3aaa446f511e42ab1fe7f94685e985239246ca51cc46f1cc80c7d48418e2e292396a41ee578c134a716442ee9ce8780eea6e3870ba0b1b1d5e15d6f4e147c80c442233f6f71c54f8e8ee02a0239be34dcbec97ca74f36f4d137c09e02fe7839d8d8bf9dbfaffce28a3cbc983f97653751ffd26ec449831f219c6954280d539c085c132ba24fdbb49ca515e6ae350170622c8c622f0e1d4386dcc235b0bb129211dbda777293e750e3182a85f4da0c0b3ef8a60c488d8902b08e86b63bdc858b3cde2f634c42c6da5bfad9bb65971b6fa240c0602d56dd2d9c65d1b576c0317b09d5f21c60c1d79fb56dbabb4edc6b698dfa4736cdec47df5b6dcdb2666b666e92032c451e573357b44d9191707be01d3d2c43d7fa130345f25d1600df5467fc2d2ab04bb2cf03032b170b859e57c022b5f53b0afaa68f5fd11bd81e6fa8f6a263f5e3d875b69fc2795d7ecfd68c32a65db2c6c930925332988a9159137497e3542953b554892922e351045278d088d7862de46d81675c7096a0392c94e712354e636a6df5cf449775756e8ace752f692511b5d2144dd0d4b447f3900a8977ef518698131513c4c30713ee2c47a6fbee02a53f9ee16626b096497dfebeabeb66c3fe2d588ff330250a914598d20dfad5f9a6b3157341ab5a4cd5cdb59c90769c2a86e7173629541a60b3c7118f4364caa8ed7fbeca00a4418125d980e1ef77c7988173d912574018c01a515015ae9654f3650ae24c901cfcff033fc0c3fc3cff033711f11fabf087d42f021735332bd491553804f49b2256da0528702c06acd750b000000b2521fef04ba04d4046626715f6f3d414a74001831b8e4010d100103aaf098c596924bf6e7cc24a54a16dccd5654f7f4f9eb138b8428d19aaf5b0312b8a1811b9fe3010b4a92c49c623c6be6ccd9a041438cc5f17845afa169af2aa3862bd0904b57393f7cbe8f058f569c243954b4606d52ec30c78a0183072b4e1a3d2324530cb7a4e0b18ac7c259464fc971a62ae3860a1eaab0fa3f336e9c5708cd06182710018e11e4b821c6231586f3ae2cef168d1f04a35d05220840131ea848772643bf899939666ce43845628979bae0618aafd24dea34887abc67f02845656a72ee4aba393ffa82072912bc35df945cee713119638c4146e7b8d18f512c7a177ab36c1b354e20821c37fc218a44ff7431544cd2b9651b346880710211dc7884e224670cd90f1f3ddffe0728344bbf8bd0c814bbf3893e4ccaaf62954992b48287270a636299bab935a5a5824727486f2d490ef331d9e99c287a5434d1040b1695df846aaf6e25979cd4414d60ad67492eff3caf990953d0d4bfbe1126ae9bbcdddb0b19837a094dcaf61534bac9a66e09d33c6ed24fb933eff5e0510993ece13c7d44094e54cac4564d92a4ca63125e4a7b6ecf6dc1f3e721898305fd8c317ba7bbf688c49b1e97c9ea2fff49f280c49db39470827f8f4760192bacb36f6ed5ac2334a9d28cd1ba182f783422a9d5a498b346060fd7070f46545b62d6b9fa2292cef1a44d62ac0873c8edc8141ab5649388d3b4e593a05142878e88ae844ee1ee2fc54c8287583ecb49fb39b64a5d0cf1e6d458d3599ec287856826632bdd4d0841774e4d7e39ea06eb06a1668a964a9a3b00c64310b7cbc7f5f84134cb1488dbd5c42e59bc73a70610c6d1df0e5f7fb96efe439549aa0c156366932c7ed8ede4641932e46a82471f14937d7783e7ec489f0f5ccee2a1f355698c13123cf6b08951299ed7bbe43c2278e8610b6e7782c48496e77958f3cf5a2eb94d755b81071e1893ae3be935dac9dde30ec60ed50db1e36f96b643db274d5f788c9c9f6ce070336e781d28ed99e813f3e692e4d0a1fbdd6cd1f26bffa30c1e73504deaf8ef97c3d34be470a5989864f3d98d593078c481d1dbaafb7c154f1e1f70f0734e1a2696f882c71b0cb96f7d5a75c2698e1b922e55366e4dc1a30d5cf494d2cad53668d058c1830d9ac5fc1a4226e3835482c71a8e7b13736c68aad0c678a8c1e851dbe0f2193c7be391864eb69c72fe7e678ffa030d6a92429574827b8eb939c339a6c4b4daa525ff38dc060e6a6ce161066caf476c335450f994e1faac94e6277d8ef43668d0a0c1830cccdc96bc7ffeff92338682d5d749ee7be11b13c3499a0c5d52f0ac50d50d1c6c19fb08c35125e512bf23d35609860a5af000835e1bf6dd15eaa5ce2f24c45efac73c9eab752f909db26cba2e78a9e7e24ea5f34d9a0e3cb8502c295e56aa8d75cd630b68b4ccb40a3b2945c9430b776a55f579ef9185448bafb9c2e4246e4f36c2a8a1831b5bc36fd4c041468d143cb040bccc796e8d785dcbe30aa906cf99c49c7e58a14f52e85509bf9b6e03c1a30a986852cdc54691cbd90868d0a8f1a0c22e7d9b647de557330b50e03185e432f9723db7d3461f5238442b25393269755751f87373924b9e0a145e8ffba49fc34fe8c3de87137895b8b87cc184b9cfa309497256cc9ee52e554699b069be24f9a75b476e3696c079672a4b622765e84aa8aeadbc2e7892b09ef6d87f2c794cd60712e8e990e1545ef3e8477054d4d75ac34f760f8e8711f892d4932465621a0b9111a7cb4a39a1323a5e71926437394a345e9e6ad0e18a5678a2b525490cd7b1abf740072b928412e5c3fd0995ddb30acf54cbe5ebf3ec2fa40af44f663ca5cc96fa549c26c5ca9cfca9e72bb4810e54a8a9f7c4312d217bcc5314d333db751f961f7698a2f23519cd34be7549ce6000133a4a719bcb49f3d353b92d292ebff93ad0318a46cf2ac6287a6d53768822b1356f787d4f22f293d1118ad54e667366b2d1010a7a6ed3eb7a7ed7f73fb189c1c46a37c790d1f7041d1927c473f892f44eb8599ed22594568a73c29c67d7621bceecddc46bf3a929b49a30fedc4f68fee9707a268a6a61a4bc5cd63dc784153bc6a764fc126634bf8de2294e4e5a428f2b556252fe1faf129f6be7fa5c0e25feac9fd4453a935025634a93caa4b48e24fc78f213a9155172249428b9bc820809c7a44e19db7b44ef92c12a87da11e5e98e0e17ea461c34ab7ecc9ec9d3cc8ce8afa2f53d851791dc51fd4493a02b1f459817523b5abeada913c164e731e1241711e615d1981fe2dfca9a2fbd1a22394ccabb2b16c21013a16653532124c4196d378b6cef576510274136ffab8b4f452a08fb2d443ec67d0b4f209455cdb7613ee99980f844c33b6d93c9b9fd8134593e78949824e9c40f875aa7b534dbedf48136fdec71c345c6c287a2cec97aae96e48a720f666fcc641dc674f37af05737d8e807f370ccfda1b44dc4c3e59f1f932396cec33b589b529d31496515433b1426c4d96cfe8f4b5887d33eaddeb86f3e3974a8a34faaf41e56639d03121fa6521a8fe1bd9343496343956b170763b40b5b7b2a9725070777531893a5f23259ee0d89de79b3b92a99749d1b125736964979f196356d30850f1f63af6c68beddbf2fb69e46cd1a28d97c46befeaf47a386e345776bde0dba9a4983a12a77fc731acf914143a7b9259d669c6cf719aad18dad922709729b194c3b3b6fe265c04a78b994c25946930c768c5bedd4bdf3958d01b1ccf41b24e7245b0c7745ad1e59933050eaaa9b4a0483963263cc5b291734c9172c317b5ecf2f66cf122f383e9f633a29ba4fdf854f93f019e6399ee8295ce8243fabd30adada295b2844b44e36b7b440c6f4349d2bdea45859382dac8d4509160e99b62544fb2fa5ea0abd54fcc9ce29dbd35660a72f9b468f67265a85928da89c581b3f27a9806487bfbbe0714e6e0acc05d1147a518714126c24742c6e4af2af3be88842994af2784f21952aff830e281027ca9af831ef78025a194ff64b9b0018a1c309ca758c5464dc5039273b9ad0c18424d30993f22671d330722c81f8f46f1afb9ada7d184a2854a527d3d42a1dc771818e24984bbc8adbfc31e30619387e031d48487386314f33ff6953560c0a741ce1fd91880cbe69b2f58ea30c0d7418a1a4595749fcf24f5fe236729c5186053a8ab0864afe5152c36db06654a083082531495cde3c5f72ba876066938fb4d8c97c7331cac891810e2198d6627fde29cd59d18e20109fc4d10aefab030849258b49db65f2f8451dd3ea2d8baabb770f5fd8e9225d729eeb3069048f5ea0e1b9c65f462f75c38b2be956de548fad551ebbb8a2eea6942755e3a18bc3688ad96378bbe8a50d7de4a2f19eaa28b936a87b0f5c24e6789876fc8afc718b2c79a50d936a52f09f047ec810413d6c51dde68aca38ddc04d4083c60d1cc73f6a91f6465d5ed8899f6579d022640c1af3c9278416488961f9ca4467b1c67cf94a726fd55b21b210012416b0784539ee79d6726833ad5c911c6761937ad48a2b93d499673e9ddc291056f4a2feb2392c34570a64150595cdf1495315c674aa1e3459e80e995474b9375af55f3f5f0c828a246966a5be249101e41497247adfa5e9b0b5e90b404c619e2494e593b1c8b24b29c5e1db969645eae53a148090a27c25cc857eb2b23e29096414095d1763196c656fae12c59d31d346cfdef51f8784e290f1bafee2cc778762000185b9e27e7677b9fc97b200e413ea746da5f1db24cff8038827922d33e74c41cf33a5a9139f69ce5d9337837002b2092cdc764e6f6dadc40907104d249e1e3e553bd826e94c606296c27e0a236dc2983894bb79cca5b1d9ee259c34d18b2657209658cc43e4475f89b42c57c52be973a74e892e6bb6e5543efbb5491c2693662da182480293bcbe82680793b5038944af9d56ce3abec694f2000289c2a6a5fba7cfddaa90479c2c6992a63479f5ac038823f692b2efe6587177e39046ec27c78a9a26c9887b4acc97c4ba642f9645a0277beaf93c6537a11b4014c1babbaf2635cbc9e38303928852cef09b39fa398020a20e71e7277932041502b5a8412bce9f9016a7284008f159dafdcf91b7bf181b350671d699c5ee70712aa5b6c310a304104120ef299d49ee61f95e110112086eaba693b47a39649e0910406c6288dcfb68fc97493b80fce1d5932c6c850606c40f6ad2136d54c23e247d521e3fc93d2d3605e18319d37a7bafbcc99f7f00b2073de421e93439e51425bf29b201c183a1648dbfbf30c003903b9c736e75ec8f1edebb1d52cf9da28a8c75481236cb895bb962799c0e59e8f4888a2beb1803990361c1e3d45ccedd4ecb618bb15ed163300e27b153844474bba7050207adca728ad84f0f6a027983a7da26e655e6ccafb8214912cd3f26614e9ab0da7099d54e795aea0c081b8ab74e3165b856ee3010206bd04afeac24ef9a264b11440dc963d147b33c9ea7c3b841c68ded0d40d2405aa76aaf244d0082863caaad411a809ce19416f45ac4e7a40f310031431992da6edfe42d91b21e4206c8186cebb4e1bf6290de4a0d8818125d56bb4b0806903070e2fb540c92a22dfb42c000f94279a1ba505cd0378ba69c53df85a62b806c21bd986a6fb4e2df665800d182eaa511755aa167395950672be4539746454e21806001720533cb4ce89f3387054800b1423a369a621493a4f8da04902a502159637378ac163285bfcb3a564796426e17f6a6d52858a659552532a5ab640e2050803ce1ab0caba949d6c61910271ce3fae5566c4c39be0d4813204ca82de36d9d6674057709dfb5d7e5ea0ad7a32a81fd533d317c2da7924930c6fcbd34594173ee90c0e5587cf3db8eb0fa9dd86e494393746284e40f13bf7b290299bd7d35931411ba9c625ab7d455f186607fc689afc76930110297efc2f64c0409426af197573ee2a434438060760f6a969320a2e95f70217652cce4b8bfbd2fccd123fb3fcf5bcc6b2fa89256b6c48af2f9125e247c8e697f3d8d392d1dbb384b4e5e483bab1c950e5dd0f2e9c41ad5ed0fa93b72c16564b2bc1caa64773b706187c72713ad63123f07a3e316b7adc64a79e5c131021a34ca18e33b6c410697e8d82d75d4a2cc97c19264a7fffc5f408b7385c74a6289155f9f8e599416cb4b924f6551aa1265726cb6c43413c522c1528ca35ea1f29b58072c36290ec0028123089442650107dfad92dc062c8022502e02156933729c81830001d001432001003023c719261840009c067b060d6eac180710400e1c8e801000e04f495a0d15c6e4dbd846963a83068d311c478d1b84716a9c30dacbc80102050c81566bc9b513db9dcd86105ec9cf49d35a5f46b6a180201c3e5acdbdee3475aa2800085fb0a0d16673bcce0c31c238836be0a8c82f9230ccb84118c717491866e0b091438c1a351010e985199e8317491866886123c7d6a88180c82e921a350e10d1451963e4c26f40c61863f8180688e0420765f4183e460122b748c230e39031c619356a2020628baa05d1c25861d453cc9b434c27099159c8a2fc14da396b0eb67e2c60d1a5e42fbaf18ebc22eb3acd952d476e1e5de1c6f8d3f84fb5c2b43393b369e878f964857ec244e5cff874f32abcefec361193882a5251abed5a64b92631d5082ace49c64646e3c78aef2996540daf1eb64a3534853968f4f446568af24931f26f6166831a214572852f3d8b98ed0f23a3706dd66f4c3af136daa2b03a653777e3814828f8b0494e29c5ce5c6e8e611150109b52b62d66f8cb67e4887ca28a2925e9cbdbc46c02114f147f27eb52e5b4942f158874a23359cb344ab4d7ccdaa04143239c28ed6f9b9c327b1ad76dd0a091914d54a6d3e1cae40fe6711b7c460e1a34725020a2894e7c2c2599bd31f9ae48263051976883594ad1a4762f899225aa1294988424faee8a3a13f124b81c890426e533296ab2d662c786db60511081c4236cdd76f9dc2ee2882b9dece59e3fd2887e93143784c4554a7236c208fb63bc799efb786917416d7694949373b4d6228a8824a22288687e7b3ac99fa9eedf21ead6135aeb73fb55c5109618364b86ddbb4ff28530deefece325612aa508a1c91ba236f37ec71a07517b0cb32fcb392a78362282403327837eeadc64171b1b8804e2be95ad64678900e20f59b01cc6c32789f8c199fc1b7119ffcf5d1f3eedd5ecf1bca3678af0a19bb5b839a4b9873f7ad0db0ea31ef260b88a2f267c46d87df09064272639947e3ea1a4ef60873ad0e128f2298a6529f1d099831c164d694becf98ce676400234c0e12188c4010e89de6ed67862fe289f0e44de60875ef5f470b2f61e379c2f69e645bc8c56d6067c2fa5937dfa0e138cb0c13895dc6c25165903a9210d8486c8192a628632d87329bb09f7a7f769329cd4a3df26b39881838c1c913194dd4ccc9ac5124318280206ef6ceb53c61287c817ec1c2f6ad72f42f28343c40ba709237a93267c5eda85af2bc5cdf868e32f45b8f06a063f29670bdac5a429e7def3f92007225ae0d4c4948a7b6662362359486a5bf3e40ff5151d2c982b76bb87c944aeb066bbcd293bc98b3e6205f77e3454599f9fe045aa80fa6f86fa4ae1c3d30815cef9e5be96e66e3786139129246d8594bf9770994ac110715225f554ce256d9811468d00ac2212053f9cec7dbf1e359f5c040a98ac9bbac7ff3be1137942ee1e4bdc4c594389bf130e9e96c455b619449aa009a51a66c2af989832c1d553df38b1224b20ca4b9af831e924d288129a7af3cd14522afc154982ae75a9a4f57d77759140c6fd283932ee5fa5c811f8507a62b96a1b11daaf2d5aecfe1a448a60b9d9ec9cf4c6d8c973c34f702244a8e4fb924eecca4c114686101102ae7a29336b125c43c2402408d56a64ea8dceafe34780b05fdcce296b49da4c7e51458f7ec9b8f645df06c4179a7912be2d724ce83ca417c48b2a2426f6c31b80354076a10bbc36967df654e2dd950b5cbc412a09256ccaa50f728b34d7f64e995cc9dc93c00520b6d0c64ed670558266abb56844c20a852aa833976120864110055110832008629f3543135080b840180c46c3012d91663f13c0c0ca42d170280e8a420181300c463110053110835010c3401cc44044e224b3ac1bd1a3b4bb7862d3e55c44ae5e0b5dc3629e52e2d6b0480673e51de4bcc7f666fe27e6eb55dbcbbec433741adecc82357ed3a223bb8e58837bad264dc261d956e063aeb42b33186f49fda99e4347facc4d80688ec7d7458350310a38ffc72578f8e1a0ef2195131f5a30d5d47effc3644ac31b6eb58195ad1185a9755032ce6b0f7bfc4854445acc262d27c52b133f126f022dbade01c257af5fe2a1a8cc3963f8661b97c2c1e868121a49cf74f8b54b91cb24ab63361549521f874232b81958359b539d7e772b98b28420ebb1fa2c423c16803213309f88fc647f2a3b8154170f2a6bde166f60b5c6e0d7d078a82c206352e9ad3ef357e30620b69d274447210d9e71a495fbb9e33749f275ff9345652e9715cfeaeb2ace2200010b6c05db6fd8ae90e95955d3334adeca76c4e7e65b46071f245bfb96df60b37ec7be078000c94aa8fdd7f8be270c5706361a33694296fbf49bd35abf59792d843953325e5d9558a47384f12856efb4e0eddf5be58b5200a88bfac9959c89da14da347287413453eca907e02d294763cda4b3f4439991806b804917db384ed08c1534196cead8e94ccd788d7c53562d7267baadbc3a9bc2083a3764b6d3a2e78e834b0b95038fca587ad1546943e04591197967abd948364862b0603452052202ebe8034e11035397cae42c8ffc55134e86663f6c94b1264cb5b5ecdac72076a7ed829a6c9e88516cbb02f0e2f41ee4b8451ecf9ce1b08f7bfd800c0dbe61b24700258c1fd964aa2df4af91eb3e1a44f5549db0730eedd8514a63e1b77272ddc9f9b0728c8c0122bd44579c7e16d050c109419a43b709276f0374c13870d20ebd2dff536c312ed182d10187fa74f71b1fca900372737603b03f8bb970c899cd1ac2de8c816155aa74143ded8841f8e4814dd4009b9bc0ad064677bb5d6f1af9583d9f4646c7512eeb5ef04126125aeae72875b78568bb021699c7f4594c2fd158c500174dea61ee981d689efc28037aa9fe89bb68517ed26a484c604edc3519d115193796ba6099036accdbf1894eb8720b8beb56c4f7ee80ba25d6c950c9cfc428f2a56ac3e28cbf8c385342497225bf59f88c3b54cb94ac7f33121a8a3ed55792b259084d9829e9e7a42f80eecc23231789c8ee41778331403a55bbd137e5a02bfa7d9f3b7ecd50e1ec4341fed85b965bb5bb86b1cfadda7922a51c38b01feb6397eacc2771750ac086cd1daca1c0ee53a4e4b888bc2a114b5c34fa4de42db36e5366854bd99f090b450bd92a6e42e61ae312707d17009e025370dd58237a87c6cb44a338b35da5a2e0e2543c8633ed395b0867f7bc014057317047e6cc792d00a59e92d9b100fcd73f04e9ddaf4391a45e3d44f9ebb03bd9d783f2935ad1d78c2738e1c668ad1d99b0bafc8f29eea804f90ee37abde857561e150216e38775e961f24914135c6e2a5deb43e264ffc5b994b40b35fcace963c0a63a47af32c683c9a621143a94d9a36875526f79e59ecabcc9dffe528fb76300997ae1464eb586e179546b54189fc8e2e14085208dfb6672507c23514208bdfdeb70ef3fb22941d049a23be02c96c23a7788e58d00a00227c026ffa24d6629ce3d620d2b07be1c609a5fc1a8d4963701592f2382f93e27111304a9e385354bfd026ea5bc45a63f1685649531398964f5efe05bc1062084b8f6911521c8d7cdaf473f847c0677191b55ca7059d4ed8799f96d3c9faa13ccbc9d93661da50ae99bd93e3c57cb21f4b26d58788cc4515fa6134af11a2b29efbcd5c0b33b29cf4e65c09526fff27f6882d1cfcc1124d0df15737a85a09623bd4594795b6aef8a370f5e1ca16da384cea5dc3e295d7c27608332b7984139a48d1dc88f54bed80e45b9c4c50a40b030e937883c5aaac241d11205e2fa5d9c1d29ffe37a2cae7fddc58c73ef5d530c32606cd21dbefedbdf774d68d6d9b8ededd24887cc44588b591364a605116c21ee81652de57834ddf864949b3725a51192e530ebee788de475586014797b51c45e59c15d761133a9abe65b3ae5e07c04254cf62d8d93aef9c1d6d517a4b379b8624d9343e6f5ef8455344ea09c81f2b3735434220d0a6211843de10ed8f247d4b539585a06d396dca98d2f11619bfa94264d182c0020b7f726897b9f98c5c49adf0cfef1926e23cddabc2a7f69eb3273edb31eb1d3593b4de0a33b7ba01b45372a2685be4afa4fef228c9c9e2b3fbbbba8d5519ad108c6d21d25a133f1059cb68be3fa714e6b26655df3bdb0ea85ad4b308cc07ae9057fc0285e05f513366081247a71dd9dc6dd28bd78c3873e92161e0f1797a2934e8b36e93ce213fc760d03e876646a252ecade956b8f023afea30b608be4f2909af8655e8f4ddbbdeb919823597a4a43a0093e4efcb9cea82f4dd08c77f57c27989a08ad507d8a480b09ee37d9443008d4836a7b887beab566d3a080dfa0f2f0b2265957553e6f9327a29b577e907b80e59e9ecb7deb6b27655b243c2b301723d728fa7546426ee7a65e35081c7b68daeedb32802a5b9df058f058d7efd209e8a50b6268dfcb138de5c324c65baa14e425d534705f885c1c9f2eef6eccdae34f84f48e4d58f6d69a4134c619c8dcb9bad4c51a88f269275b462c2867b4362204af1c9241b11cc1d6afb36230df62eea6e82095b5fbbe4fb708ec5f81833a0981f3e384a1837d01ab3f5844a043a5b4e8e2bf3a3dd40553cc1c0b0a0da81cab1a7fcf56e3a87150eb664ac5b4b58a36f76a53933c32fb1a654c2236395b7f753d3c8e4fd2072c8f0f1987de535083774c10d5038ca0d50f6049c8690bad5853ec4bcd90227d88db44fde2996570e5936415923a4cbd2140e8ea99efffd48ced8e8bcbd5c77cf1266d799b7c15654f131d6937ed9351503f1c338921b0f8d53616c611f8fa71a087d18e8ebcd389884f36b17194f6ee7743dca03eb195223b90ad124e0abcf8b6ca6fd0a93f5b06b6a0f040b0ec74a7808c417431d0abc141ca159c35a338971dbcfb716c9457a2bf751535f7f0c3adaed15cd0adc31696d55caebfd603cd7fa15daeb07eed15b9f867c7980d49d9c216760de9dcca87b3f9b7c3d5e6d1cde609ad521baed2abc0b70f9188749d70fc04e22649a24577784e524704f3446a5e8d9219fc412029152cae13ee4b81f62c2f396ac8ea99594515d5c4f0f786f1cdf9d4df6376354f416ca32dacc510514c2a22923be7ddf7b0d579cfc4d8b1a53440312f4e3bc62a1110b1775121cb50df773a58238510dd4ff1ad27956d272624d6223dd2c1c9b3bd0f038971b0ba84b08f1a2550743406af8812b28b770ebb9bdfd5fbbef8d5afffda77fe5358f670e8dc3ba342bd43e164464155dd2bfbebdf7ffebbfffa5752effe3a18a850a0622a4855e6e4317e0a4edaa639cd299f1ed359ff84331b1f09250f854e75676486b4b154be20cf78f9f35df963bffde59fdcf08dd3b5e154a4be0c47435fb295c35cce65ee9d7747b76198475df03405e848189413f80695ebfb2f5109877604de82a23d6ce73a6bb6abf718ced8184ed4173d8d6471d69a852216c4fdc95e5372f0ef4a5198fbd7e76e6c69afbb94bc0ef54e5a9335c12bc271c208fb1bd8ca1005e8ec51a13e203744af8871daece8b57f2cd385cd83edaab80e9916b897fa9d9ac5e7142376cf8c48cdcb4a77ed6fab607e605c6229164fe82415a5ace5a5c9135cc0d0533559e606cda733cf2596e8f964374d6f16c853dddc583236b6e359829ffe8b513e2ff7cc18a08e669e97f892f1067762f40cfa711673a64f2695791917f0e13bf2e579bdf6bb87fac2caaa2b8438eb64f9e54a2e401d2983b868e503ca5e8239809a7fb12e3fa471ac7cb72a5f60de7d160d84402b0c2c02c6a01a4290e72bf6b8c22fa3cb6a394ddde3cb792c6428a21962b7c62485e20b577c4762781e203782f14a65b41008d1a81bd63db67ef3e01983d7a5b06908b58f0e365ff6001b796498fda6b9e7929da8ce0e9970de7a3b2a33c4ad95def7b9ad20abc0eb29c68493c5e663ad0562c9845af588d86dbcd13218c4c0a552b4c2fd2f1ca3efc9e2568f483dccb91c2c1d04e8279f4528daa56656e3cf687393ac9a0289685cf39568b5ba31390b885867f312b5747e98651bd9f7f8af63eb63397f7f8f88a0605695a43afbda70c218b08695385d4dde3db5e55917a68d8d16e09282191e46252bac10fa8ad6b590ae1f42ffb00f6b4cbc3f291eacf537c42c4283652d1fba90c71fd96c6a09799204144865866368b595c3063871677beaaa8651325c219a224c071e3ca901daed028f547e8dffdf6d8c637c2058db85c87034bfe1bdd1be75d9c964949a25c3f05ceb6023d72dd2496a09a08ba7b1d2331a2ee5f5cc7324bf3b79e7e254102157b6639982ccb17f823f154574594f4c3330244c38ff78dda9a1c5f0cc2d36fb1fbc5da228532d67ce05b0b0c80e8609e33b09f48b6002c88189c1836c3285c949809076ea8690a106aa7e9716b1269cfbb6bfcf210b7547ad0a99237b6bf37228e586c3f80ad3f8eb7f91cc6529b5ea5d092c15f0ed43ecdd78ce3e0f5aad7172ee2d4a3b65cff321b28a1b63c97ea6fd2a52c6176059f448f10bd1c3e24b277190d993e36555b4a7c32a7770e80cac33d96d64055b941856cac552f25bf8ec695ef2fd05a93382a9fbece87ec3f4be21e0344235f79c33466a2c77f045b95bea6ca690240eb8bf0f89e9b426b719c29e599f283c0824c9c3f331b509906c5770ec4dd2a81c493647a8b0492066d8f5f8f3ebf9859aad890e5ec20708657a8299955afc5d9d87ece8072f4e0fc3c80822af533492ab56454c01ad0ea9071b6386fc8b3013944934434427eab886ede78d9a2aef1134d175822a7cb178b710e57b2a6110584db2ee4e0dc445594b5f2c153a5a820c8533c70fc4ffbca131bc08e30b21cce1102868f647092eca610529e6090a03b1c74e475c7db706b78634e1c9c7984b2ff55c0595226fa27f2be5342ae7bf13666c4e59a2a9c86954862d7b3bc60d6b89debaf0db8a4f38f1f9ab63f2dc69e88235eb22125dce3b73b9691278784b70a7a5a7adc56f89c8bf887676ef09cae8279d12a432cf1a0e9df6ba903e1dfd291746aeec5df864fbdaf006ad580003952ddd4220e08c26eab5516f596bc1e9c66bc628368e23ea3498e310d0b6cec4b04f386ab628363726e68c4a669a860ec69ad2bc23150447debdd3849e58067ca1cbe04318b4735ef31f0289df26b03956e335", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x10fe2055a032a91826e91e7548f965fa78014ddc062990c7c48acbb2cc0095f63b28e939d13c99847c1f67e499341c204d4d8d490363e09217c64da6f565f0f60318d1c8174a3ab43b525290a377844a47b5adb4eda848759022bff04235fe754b60264c397759099c732ad2d9c0a5eb550cccacaf0af872b97904954f8ffab60a", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x10fe2055a032a91826e91e7548f965fa78014ddc062990c7c48acbb2cc0095f63b28e939d13c99847c1f67e499341c204d4d8d490363e09217c64da6f565f0f60318d1c8174a3ab43b525290a377844a47b5adb4eda848759022bff04235fe754b60264c397759099c732ad2d9c0a5eb550cccacaf0af872b97904954f8ffab60a", + "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x79e2fe5d327165001f8232643023ed8b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x7b3237373ffdfeb1cab4222e3b520d6b4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x913b40454eb582a66ab74c86f6137db94e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xa42f90c8b47838c3a5332d85ee9aa5c34e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00000000000000000000000000000000", + "0xcd5c1f6df63bc97f4a8ce37f14a50ca74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb335b80dc19d29879310b8483205ff2e3dd48d4d4ec691d40d176926a9371c86ba497128450cdb7a40": "0xfe2055a032a91826e91e7548f965fa78014ddc062990c7c48acbb2cc0095f63b", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb35cae5b30ddee9d1d4ea63b50c3023d2eedb6796866581f3260d1f6fca2c08399d3889ff6cd904220": "0x28e939d13c99847c1f67e499341c204d4d8d490363e09217c64da6f565f0f603", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3b0bcb94a1a7d6a76c42c67a21ef4329adcf99c421b72d95e4b5a90e24beb0a9b1c922a33a3b45244": "0x60264c397759099c732ad2d9c0a5eb550cccacaf0af872b97904954f8ffab60a", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3fca1a7f44baada42667c31d014a1f5ed7bc867583d264062d3c7b15dcf14d487b976cb15292d204c": "0x18d1c8174a3ab43b525290a377844a47b5adb4eda848759022bff04235fe754b", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950074da5b83e4ecee96175726180fe2055a032a91826e91e7548f965fa78014ddc062990c7c48acbb2cc0095f63b": "0x10b8483205ff2e3dd48d4d4ec691d40d176926a9371c86ba497128450cdb7a40", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505392698015951df4617572618018d1c8174a3ab43b525290a377844a47b5adb4eda848759022bff04235fe754b": "0x667c31d014a1f5ed7bc867583d264062d3c7b15dcf14d487b976cb15292d204c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505b19d91d16f774e6617572618028e939d13c99847c1f67e499341c204d4d8d490363e09217c64da6f565f0f603": "0x4ea63b50c3023d2eedb6796866581f3260d1f6fca2c08399d3889ff6cd904220", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195072e0da17726161ea617572618060264c397759099c732ad2d9c0a5eb550cccacaf0af872b97904954f8ffab60a": "0xc42c67a21ef4329adcf99c421b72d95e4b5a90e24beb0a9b1c922a33a3b45244", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x1010b8483205ff2e3dd48d4d4ec691d40d176926a9371c86ba497128450cdb7a404ea63b50c3023d2eedb6796866581f3260d1f6fca2c08399d3889ff6cd904220667c31d014a1f5ed7bc867583d264062d3c7b15dcf14d487b976cb15292d204cc42c67a21ef4329adcf99c421b72d95e4b5a90e24beb0a9b1c922a33a3b45244", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x1010b8483205ff2e3dd48d4d4ec691d40d176926a9371c86ba497128450cdb7a40fe2055a032a91826e91e7548f965fa78014ddc062990c7c48acbb2cc0095f63b4ea63b50c3023d2eedb6796866581f3260d1f6fca2c08399d3889ff6cd90422028e939d13c99847c1f67e499341c204d4d8d490363e09217c64da6f565f0f603667c31d014a1f5ed7bc867583d264062d3c7b15dcf14d487b976cb15292d204c18d1c8174a3ab43b525290a377844a47b5adb4eda848759022bff04235fe754bc42c67a21ef4329adcf99c421b72d95e4b5a90e24beb0a9b1c922a33a3b4524460264c397759099c732ad2d9c0a5eb550cccacaf0af872b97904954f8ffab60a", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d86323ae84c43568be0d1394d5d0d522c4": "0x02000000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" }, - "parachainSystem": null, - "parachainInfo": { - "parachainId": 1001 - }, - "balances": { - "balances": [] - }, - "collatorSelection": { - "invulnerables": [ - "1NvWYSswSt5v95m5z9JycedzTXEWJ9Zcgbu5BMnGAwiWUC9", - "12n87jggYnvxvdHJaEiTAKZF7ZniJqxafYoKzEqfJCUDvJXP", - "13KNn7JmkSzxwrKZwTBUchTBZLVohPswv2jTPbmbyBHcHoN8", - "15SDaRyFoteK12K4oZFzCTUSsFckLYgaAjRwTAdsqvrziBtu" - ], - "candidacyBond": 16000000000, - "desiredCandidates": 0 - }, - "session": { - "keys": [ - [ - "1NvWYSswSt5v95m5z9JycedzTXEWJ9Zcgbu5BMnGAwiWUC9", - "1NvWYSswSt5v95m5z9JycedzTXEWJ9Zcgbu5BMnGAwiWUC9", - { - "aura": "5HoudDVmev8gct3rWm7rB1wuAMqgUAfjm8j1Ja8TW46R4za3" - } - ], - [ - "12n87jggYnvxvdHJaEiTAKZF7ZniJqxafYoKzEqfJCUDvJXP", - "12n87jggYnvxvdHJaEiTAKZF7ZniJqxafYoKzEqfJCUDvJXP", - { - "aura": "5CzM49boG39JkwR6pYQtFWqFhe2p7P51yV4mtMxGcQUUWQdu" - } - ], - [ - "13KNn7JmkSzxwrKZwTBUchTBZLVohPswv2jTPbmbyBHcHoN8", - "13KNn7JmkSzxwrKZwTBUchTBZLVohPswv2jTPbmbyBHcHoN8", - { - "aura": "5CdFKn2fUX8sCVstC1buyoHKMA4VN1GNjmG7nJ1ot9BiQZsx" - } - ], - [ - "15SDaRyFoteK12K4oZFzCTUSsFckLYgaAjRwTAdsqvrziBtu", - "15SDaRyFoteK12K4oZFzCTUSsFckLYgaAjRwTAdsqvrziBtu", - { - "aura": "5EEmq9QMQs8GciAQD5dixp482kAtAo181MorcJCEPyLrY1Go" - } - ] - ] - }, - "aura": { - "authorities": [] - }, - "auraExt": null, - "polkadotXcm": { - "safeXcmVersion": 2 - }, - "alliance": { - "founders": [], - "fellows": [], - "allies": [], - "phantom": null - }, - "allianceMotion": { - "phantom": null, - "members": [] - } + "childrenDefault": {} } } -} +} \ No newline at end of file diff --git a/parachains/chain-specs/statemine.json b/parachains/chain-specs/statemine.json index 272c100ba1a..a74cedf71d7 100644 --- a/parachains/chain-specs/statemine.json +++ b/parachains/chain-specs/statemine.json @@ -5,7 +5,6 @@ "bootNodes": [ "/ip4/34.77.217.152/tcp/30334/p2p/12D3KooWF63ZxKtZMYs5247WQA8fcTiGJb2osXykc31cmjwNLwem", "/ip4/34.77.119.77/tcp/30334/p2p/12D3KooWGowDwrXAh9cxkbPHPHuwMouFHrMcJhCVXcFS2B8vc5Ry", - "/ip4/35.188.228.71/tcp/30334/p2p/12D3KooWNqL6XroD35tDAs3DKG7do8dbKvdnACrR7Z3dcKesNcG4", "/dns/statemine-connect-ew1-0.parity-kusama-parachains.parity.io/tcp/30334/p2p/12D3KooWMzvdGcUXxacLdMQzRVrsP1mJrZHcrz8LtGbhLzve84Qx", "/dns/statemine-connect-ew1-0.parity-kusama-parachains.parity.io/tcp/443/wss/p2p/12D3KooWMzvdGcUXxacLdMQzRVrsP1mJrZHcrz8LtGbhLzve84Qx", "/dns/statemine-connect-ew1-1.parity-kusama-parachains.parity.io/tcp/30334/p2p/12D3KooWQmGf5z3DU1kKcZoLzMNgdbP31ybjuwxS1VGLKMUjq5ez", diff --git a/parachains/chain-specs/statemint.json b/parachains/chain-specs/statemint.json index f6bd896ab93..c929ce61f0b 100644 --- a/parachains/chain-specs/statemint.json +++ b/parachains/chain-specs/statemint.json @@ -5,8 +5,6 @@ "bootNodes": [ "/ip4/34.65.251.121/tcp/30334/p2p/12D3KooWG3GrM6XKMM4gp3cvemdwUvu96ziYoJmqmetLZBXE8bSa", "/ip4/34.65.35.228/tcp/30334/p2p/12D3KooWMRyTLrCEPcAQD6c4EnudL3vVzg9zji3whvsMYPUYevpq", - "/ip4/34.83.247.146/tcp/30334/p2p/12D3KooWE4jFh5FpJDkWVZhnWtFnbSqRhdjvC7Dp9b8b3FTuubQC", - "/ip4/104.199.117.230/tcp/30334/p2p/12D3KooWG9R8pVXKumVo2rdkeVD4j5PVhRTqmYgLHY3a4yPYgLqM", "/dns/statemint-connect-ew6-0.parity-polkadot-parachains.parity.io/tcp/30334/p2p/12D3KooWLHqbcQtoBygf7GJgVjVa3TaeLuf7VbicNdooaCmQM2JZ", "/dns/statemint-connect-ew6-0.parity-polkadot-parachains.parity.io/tcp/443/wss/p2p/12D3KooWLHqbcQtoBygf7GJgVjVa3TaeLuf7VbicNdooaCmQM2JZ", "/dns/statemint-connect-ew6-1.parity-polkadot-parachains.parity.io/tcp/30334/p2p/12D3KooWNDrKSayoZXGGE2dRSFW2g1iGPq3fTZE2U39ma9yZGKd3", diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index beee138420e..379281434fd 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -10,36 +10,36 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive"], default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus pallet-collator-selection = { path = "../../pallets/collator-selection", default-features = false } cumulus-primitives-utility = { path = "../../primitives/utility", default-features = false } [dev-dependencies] -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = ["std"] diff --git a/parachains/common/src/lib.rs b/parachains/common/src/lib.rs index c192d6e2a7e..afc2a1cb9ce 100644 --- a/parachains/common/src/lib.rs +++ b/parachains/common/src/lib.rs @@ -68,7 +68,7 @@ mod types { /// Common constants of parachains. mod constants { use super::types::BlockNumber; - use frame_support::weights::{constants::WEIGHT_PER_SECOND, Weight}; + use frame_support::weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}; use sp_runtime::Perbill; /// This determines the average expected block time that we are targeting. Blocks will be /// produced at a minimum duration defined by `SLOT_DURATION`. `SLOT_DURATION` is picked up by @@ -92,9 +92,10 @@ mod constants { pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 seconds of compute with a 6 second average block time. - pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(polkadot_primitives::v2::MAX_POV_SIZE as u64); + pub const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + polkadot_primitives::v2::MAX_POV_SIZE as u64, + ); } /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index b9ae5ef87ce..57061963173 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -33,7 +33,7 @@ where } } -// See issue #5233 +// See issue pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( @@ -64,7 +64,7 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( - target: "xcm::barrier", + target: "xcm::barriers", "Unexpected ReserveAssetDeposited from the Relay Chain", ); } diff --git a/parachains/integration-tests/collectives/0_xcm/0_init.yml b/parachains/integration-tests/collectives/0_xcm/0_init.yml new file mode 100644 index 00000000000..8c03348025d --- /dev/null +++ b/parachains/integration-tests/collectives/0_xcm/0_init.yml @@ -0,0 +1,95 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &cp_id 1001 + variables: + xcm_version: &xcm_version '2' + chains: + accounts: + alice_signer: &alice_signer //Alice + decodedCalls: + ap_force_xcm_version: + chain: *collectives_parachain + pallet: polkadotXcm + call: forceXcmVersion + args: [ + { # location + parents: 1, + interior: Here + }, + *xcm_version + ] + +tests: + - name: Initialize Chains + its: + - name: XCM supported versions between chains + actions: + - extrinsics: # Relay Chain sets supported version for Collectives Parachain + - chain: *relay_chain + sudo: true + signer: *alice_signer + pallet: xcmPallet + call: forceXcmVersion + args: [ + { # location + parents: 0, + interior: { + X1: { + Parachain: *cp_id + } + } + }, + *xcm_version + ] + events: + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.SupportedVersionChanged + attributes: + - type: u32 + value: *xcm_version + - extrinsics: # Collectives Parachain sets supported version for Relay Chain through it + - chain: *relay_chain + signer: *alice_signer + sudo: true + pallet: xcmPallet + call: send + args: [ + { v1: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination + { + v2: [ # message + { + Transact: { + originType: Superuser, + requireWeightAtMost: 1000000000, # 1_000_000_000 + call: $ap_force_xcm_version + } + } + ] + } + ] + events: + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.Sent + - name: polkadotXcm.SupportedVersionChanged + chain: *collectives_parachain + attributes: + - type: u32 + value: *xcm_version + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the weight must be static + value: 2,000,000,000 diff --git a/parachains/integration-tests/collectives/0_xcm/1_teleport.yml b/parachains/integration-tests/collectives/0_xcm/1_teleport.yml new file mode 100644 index 00000000000..a12f8f4c3a6 --- /dev/null +++ b/parachains/integration-tests/collectives/0_xcm/1_teleport.yml @@ -0,0 +1,126 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &cp_id 1001 + variables: + xcm_version: &xcm_version '2' + weight_to_send_teleport: &weight_to_send_teleport 2,000,000,000 # must be same for both chains + weight_to_receive_teleport: &weight_to_receive_teleport 4,000,000,000 # must be same for both chains + chains: + accounts: + alice_signer: &alice_signer //Alice + alice_account32: &alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' + alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5' + +tests: + - name: Teleport assets from Relay Chain to Collectives Parachain successful + its: + - name: Teleport assets from Relay Chain to Collectives Parachain + actions: + - extrinsics: + - chain: *relay_chain + signer: *alice_signer + pallet: xcmPallet + call: teleportAssets + args: [ + { v1: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination + { v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *alice_acc32 }}}}}, # beneficiary + { + v1: [ + # { + # # TODO use a separate Assets to pay a fee, to receive an exact amount of assets on beneficiary account. + # # a call with two assets fails with an error right now. + # id: { concrete: { 0, interior: { here: true }}}, + # fun: { fungible: 1000000000000 } # 1_000_000_000_000 + # }, + { + id: { concrete: { 0, interior: { here: true }}}, + fun: { fungible: 20000000000000 } # 20_000_000_000_000 + } + ] + }, # assets + 0, # feeAssetItem + ] + events: + - name: xcmPallet.Attempted + chain: *relay_chain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the weight must be static + value: *weight_to_send_teleport + - name: balances.Deposit + chain: *collectives_parachain + attributes: + - type: u128 + # TODO (P2) + # Flaky assert since sent assets used to pay a fee + # query and assert Alice balance before and after teleport (see example in kick_member test) + # drop this event assert + value: 19,999,953,648,988 # amount received + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the weight must be static + value: *weight_to_receive_teleport + + - name: Teleport assets from Collectives Parachain to Relay Chain successful + actions: + - extrinsics: + - chain: *collectives_parachain + signer: *alice_signer + pallet: polkadotXcm + call: teleportAssets + args: [ + { v1: { parents: 1, interior: { here: true }}}, # destination + { v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *alice_acc32 }}}}}, # beneficiary + { + v1: [ + { + id: { concrete: { parents: 1, interior: { here: true }}}, + fun: { fungible: 10000000000000 } # 10_000_000_000_000 + } + ] + }, # assets + 0, # feeAssetItem + ] + events: + # TODO assert balance.Deposit event on relay chain + # not possible now / issue - https://github.com/paritytech/parachains-integration-tests/issues/58 + - name: balances.Withdraw + attributes: + - type: AccountId32 + key: who + value: *acc_alice_ss58 + - type: u128 + key: amount + value: 10000000000000 + - name: polkadotXcm.Attempted + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the weight must be static + value: *weight_to_send_teleport + - name: balances.Withdraw + chain: *relay_chain + attributes: + - type: u128 + key: amount + value: 10000000000000 # amount received and withdrawn from registry account + - name: ump.ExecutedUpward + chain: *relay_chain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the weight must be static + value: *weight_to_receive_teleport + + # TODO (P2) assert Alice balance before and after teleport (see example in kick_member test) + + #TODO (P1) test: teleport of non relay chain assets fails \ No newline at end of file diff --git a/parachains/integration-tests/collectives/0_xcm/2_reserve.yml b/parachains/integration-tests/collectives/0_xcm/2_reserve.yml new file mode 100644 index 00000000000..0af20ba7daa --- /dev/null +++ b/parachains/integration-tests/collectives/0_xcm/2_reserve.yml @@ -0,0 +1,84 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &cp_id 1001 + variables: + xcm_version: &xcm_version '2' + weight_to_send_reserve: &weight_to_send_reserve 1,000,000,000 # must be same for both chains + chains: + accounts: + alice_signer: &alice_signer //Alice + alice_account32: &alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' + alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5' + +tests: + - name: Reserve assets from Relay Chain to Collectives Parachain fails + its: + - name: Reserve assets from Relay Chain to Collectives Parachain + actions: + - extrinsics: + - chain: *relay_chain + signer: *alice_signer + pallet: xcmPallet + call: reserveTransferAssets + args: [ + { v1: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination + { v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *alice_acc32 }}}}}, # beneficiary + { + v1: [ + { + id: { concrete: { 0, interior: { here: true }}}, + fun: { fungible: 20000000000000 } # 20_000_000_000_000 + } + ] + }, # assets + 0, # feeAssetItem + ] + events: + - name: xcmPallet.Attempted + chain: *relay_chain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the weight must be static + value: *weight_to_send_reserve + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Incomplete + # the weight must be static + value: [1000000000, UntrustedReserveLocation] + + - name: Reserve assets from Collectives Parachain to Relay Chain fails + actions: + - extrinsics: + - chain: *collectives_parachain + signer: *alice_signer + pallet: polkadotXcm + call: reserveTransferAssets + args: [ + { v1: { parents: 1, interior: { here: true }}}, # destination + { v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *alice_acc32 }}}}}, # beneficiary + { + v1: [ + { + id: { concrete: { parents: 1, interior: { here: true }}}, + fun: { fungible: 10000000000000 } # 10_000_000_000_000 + } + ] + }, # assets + 0, # feeAssetItem + ] + events: + - name: system.ExtrinsicFailed + attributes: + - type: SpRuntimeDispatchError + key: dispatchError + # TODO assert variant + # issue - https://github.com/paritytech/parachains-integration-tests/issues/59 + value: {"Module":{"index":"31","error":"0x02000000"}} diff --git a/parachains/integration-tests/collectives/1_alliance/0_join_alliance_fails.yml b/parachains/integration-tests/collectives/1_alliance/0_join_alliance_fails.yml new file mode 100644 index 00000000000..11778830562 --- /dev/null +++ b/parachains/integration-tests/collectives/1_alliance/0_join_alliance_fails.yml @@ -0,0 +1,34 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &cp_id 1001 + variables: + accounts: + alice_signer: &alice_signer //Alice + alice_account32: &cp_alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' + +tests: + - name: Alice fails to join an the Alliance, since it is not initialized yet. + its: + - name: Alice joins alliance + actions: + - extrinsics: # Relay Chain sets supported version for Asset Parachain + - chain: *collectives_parachain + signer: *alice_signer + pallet: alliance + call: joinAlliance + args: [] + events: + - name: system.ExtrinsicFailed + attributes: + - type: SpRuntimeDispatchError + key: dispatchError + # TODO assert with Alliance Error variant - alliance.AllianceNotYetInitialized + # issue - https://github.com/paritytech/parachains-integration-tests/issues/59 + value: {"Module":{"index":"50","error":"0x00000000"}} + + diff --git a/parachains/integration-tests/collectives/1_alliance/1_init_alliance.yml b/parachains/integration-tests/collectives/1_alliance/1_init_alliance.yml new file mode 100644 index 00000000000..152cf0c9803 --- /dev/null +++ b/parachains/integration-tests/collectives/1_alliance/1_init_alliance.yml @@ -0,0 +1,240 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &coll_para_id 1001 + variables: + accounts: + alice_signer: &acc_alice_signer //Alice + alice_account32: &acc_alice_acc32 "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d" + liam_signer: &acc_liam_signer //Liam + liam_account32: &acc_liam_acc32 "0x3614671a5de540d891eb8c4939c8153a4aa790602b347c18177b86d0fc546221" + olivia_signer: &acc_olivia_signer //Olivia + olivia_account32: &acc_olivia_acc32 "0x24ee8a659c6716fe9f7cb4e9e028602aa12867654ca02737da9171b7ff697d5c" + noah_signer: &acc_noah_signer //Noah + noah_account32: &acc_noah_acc32 "0x9c6ad3bc3aa2f1b2e837898e6da9980445f7ef8b3eee0b8c8e305f8cfae68517" + emma_signer: &acc_emma_signer //Emma + emma_account32: &acc_emma_acc32 "0x8ac272b333ba1127c8db57fa777ec820b24598a236efa648caf0d26d86f64572" + james_signer: &acc_james_signer //James + james_account32: &acc_james_acc32 "0x9a52805151a0b5effc084af9264011139872a21a3950cb9ae0b2955c4bf92c18" + ava_signer: &acc_ava_signer //Ava + ava_account32: &acc_ava_acc32 "0x348ef0b8776adbc09c862ddc29b1d193b9e24738e54eea3b0609c83856dc101c" + mia_signer: &acc_mia_signer //Mia + mia_account32: &acc_mia_acc32 "0xaebf15374cf7e758d10232514c569a7abf81cc1b8f1e81a73dbc608a0e335264" + decodedCalls: + init_alliance_members: + chain: *collectives_parachain + pallet: alliance + call: initMembers + args: [ + [ + *acc_liam_acc32, + *acc_olivia_acc32, + *acc_noah_acc32 + ], + [ + *acc_emma_acc32, + *acc_james_acc32, + *acc_ava_acc32 + ], + [ + *acc_mia_acc32 + ] + ] + init_alliance_voting_members: + chain: *collectives_parachain + pallet: alliance + call: initMembers + args: [ + [ + *acc_liam_acc32, + *acc_olivia_acc32, + *acc_noah_acc32, + *acc_emma_acc32, + *acc_james_acc32, + *acc_ava_acc32, + *acc_mia_acc32 + ], + [], + [] + ] + disband: + chain: *collectives_parachain + pallet: alliance + call: disband + args: [ + { + votingMembers: 6, + allyMembers: 1 + } + ] + +tests: + - name: Alliance initiated with the root call, second init call fails. Alliance disband and set again. + its: + - name: Alliance initiated, founders and fellows are set. + actions: + - extrinsics: + - chain: *relay_chain + signer: *acc_alice_signer + sudo: true + pallet: xcmPallet + call: send + args: [ + { v1: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination + { + v2: [ # message + { + Transact: { + originType: Superuser, + requireWeightAtMost: 1000000000, # 1_000_000_000 + call: $init_alliance_members + } + } + ] + } + ] + events: + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.Sent + - name: alliance.MembersInitialized + chain: *collectives_parachain + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # we don't know how much weight will be spent for custom call within Transact operation + # value: skipping the assertion + + - name: Alliance init call fails. + actions: + - extrinsics: + - chain: *relay_chain + signer: *acc_alice_signer + sudo: true + pallet: xcmPallet + call: send + args: [ + { v1: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination + { + v2: [ # message + { + Transact: { + originType: Superuser, + requireWeightAtMost: 1000000000, # 1_000_000_000 + call: $init_alliance_voting_members + } + } + ] + } + ] + events: + # TODO can not currently assert variant AllianceAlreadyInitialized, XCM Transact fails silently + # issue - https://github.com/paritytech/polkadot/issues/4623 + # Next test with a disband call will fail, if this call does not fail, + # since a witness data from a disband call will be invalid. + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.Sent + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # the call must fail, the weight spent is static + value: 2,000,000,000 + + - name: Alliance disbanded and initialized again. + actions: + - extrinsics: + - chain: *relay_chain + signer: *acc_alice_signer + sudo: true + pallet: xcmPallet + call: send + args: [ + { v1: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination + { + v2: [ # message + { + Transact: { + originType: Superuser, + requireWeightAtMost: 100000000000, # 100_000_000_000 + call: $disband + } + } + ] + } + ] + events: + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.Sent + - name: alliance.AllianceDisbanded + chain: *collectives_parachain + attributes: + - type: u32 + key: votingMembers + value: 6 + - type: u32 + key: allyMembers + value: 1 + - type: u32 + key: unreserved + value: 0 + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # we don't know how much weight will be spent for custom call within Transact operation + # value: skipping the assertion + - name: Alliance initiated, founders and fellows are set. + actions: + - extrinsics: + - chain: *relay_chain + signer: *acc_alice_signer + sudo: true + pallet: xcmPallet + call: send + args: [ + { v1: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination + { + v2: [ # message + { + Transact: { + originType: Superuser, + requireWeightAtMost: 1000000000, # 1_000_000_000 + call: $init_alliance_members + } + } + ] + } + ] + events: + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.Sent + - name: alliance.MembersInitialized + chain: *collectives_parachain + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # we don't know how much weight will be spent for custom call within Transact operation + # value: skipping the assertion + diff --git a/parachains/integration-tests/collectives/1_alliance/2_join_alliance_fails.yml b/parachains/integration-tests/collectives/1_alliance/2_join_alliance_fails.yml new file mode 100644 index 00000000000..574df004512 --- /dev/null +++ b/parachains/integration-tests/collectives/1_alliance/2_join_alliance_fails.yml @@ -0,0 +1,34 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &cp_id 1001 + variables: + accounts: + liam_signer: &acc_liam_signer //Liam + liam_account32: &acc_liam_acc32 "0x3614671a5de540d891eb8c4939c8153a4aa790602b347c18177b86d0fc546221" + +tests: + - name: Liam fails to join an the Alliance, Liam is already a member. + its: + - name: Alice joins alliance + actions: + - extrinsics: # Relay Chain sets supported version for Asset Parachain + - chain: *collectives_parachain + signer: *acc_liam_signer + pallet: alliance + call: joinAlliance + args: [] + events: + - name: system.ExtrinsicFailed + attributes: + - type: SpRuntimeDispatchError + key: dispatchError + # TODO assert with Alliance Error variant - alliance.AllianceNotYetInitialized + # issue - https://github.com/paritytech/parachains-integration-tests/issues/59 + value: {"Module":{"index":"50","error":"0x02000000"}} + + diff --git a/parachains/integration-tests/collectives/1_alliance/3_kick_member.yml b/parachains/integration-tests/collectives/1_alliance/3_kick_member.yml new file mode 100644 index 00000000000..2384aa55a2a --- /dev/null +++ b/parachains/integration-tests/collectives/1_alliance/3_kick_member.yml @@ -0,0 +1,182 @@ +--- +settings: + chains: + relay_chain: &relay_chain + wsPort: 9700 + collectives_parachain: &collectives_parachain + wsPort: 9710 + paraId: &cp_id 1001 + variables: + init_teleport_amount: &init_teleport_amount 20000000000000 # 20_000_000_000_000 + weight_to_send_teleport: &weight_to_send_teleport 2,000,000,000 # must be same for both chains + weight_to_receive_teleport: &weight_to_receive_teleport 4,000,000,000 # must be same for both chains + accounts: + alice_signer: &acc_alice_signer //Alice + treasury_account32: &acc_treasury_acc32 '0x6d6f646c70792f74727372790000000000000000000000000000000000000000' + alice_account32: &acc_alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' + alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5' + decodedCalls: + alliance_kick_member: + chain: *collectives_parachain + pallet: alliance + call: kickMember + args: [ + {Id: *acc_alice_acc32} + ] + +tests: + - name: Member kicked out, deposited assets slashed and teleported to Relay Chain treasury. + before: + - name: DEPENDENCY | Do a 'limitedTeleportAssets' from the Relay Chain to the Collectives Parachain + actions: + - extrinsics: + - chain: *relay_chain + signer: *acc_alice_signer + pallet: xcmPallet + call: limitedTeleportAssets + args: [ + { v1: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination + { v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *acc_alice_acc32 }}}}}, # beneficiary + { v1: [ { id: { concrete: { 0, interior: { here: true }}}, fun: { fungible: *init_teleport_amount }} ] }, # assets + 0, # feeAssetItem + { unlimited: true } # weightLimit + ] + events: + - name: xcmPallet.Attempted + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + value: *weight_to_send_teleport + - name: balances.Deposit + chain: *collectives_parachain + attributes: + - type: AccountId32 + key: who + value: *acc_alice_ss58 + - type: u128 + key: amount + value: 20,000,000,000,000 + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # must be static + value: *weight_to_receive_teleport + - name: Get the balances of the Relay Chain's treasury & Collectives parachain's future alliance member + actions: + - queries: + balance_rc_treasury_before: + chain: *relay_chain + pallet: system + call: account + args: [ *acc_treasury_acc32 ] + balance_cp_alice_before: + chain: *collectives_parachain + pallet: system + call: account + args: [ *acc_alice_acc32 ] + its: + - name: Alice joins alliance + actions: + - extrinsics: + - chain: *collectives_parachain + signer: *acc_alice_signer + pallet: alliance + call: joinAlliance + args: [] + events: + - name: balances.Reserved + chain: *collectives_parachain + attributes: + - type: AccountId32 + key: who + value: *acc_alice_ss58 + - type: u128 + key: amount + value: 10,000,000,000,000 + - name: alliance.NewAllyJoined + attributes: + - type: AccountId32 + key: ally + value: *acc_alice_ss58 + - queries: + balance_cp_alice_after: + chain: *collectives_parachain + pallet: system + call: account + args: [ *acc_alice_acc32 ] + - name: Alice deposit check, balance decreased + actions: + - asserts: + balanceDecreased: + args: [ + { + balances: { + before: $balance_cp_alice_before, + after: $balance_cp_alice_after, + } + # TODO (P3) set `amount` and `fee` for more strict assert + } + ] + - name: Kick Alice from alliance + actions: + - extrinsics: # Asset Parachain sets supported version for Relay Chain through it + - chain: *relay_chain + signer: *acc_alice_signer + sudo: true + pallet: xcmPallet + call: send + args: [ + { v1: { parents: 0, interior: { x1: { parachain: *cp_id }}}}, # destination + { + v2: [ #message + { + Transact: { + originType: Superuser, + requireWeightAtMost: 1000000000, + call: $alliance_kick_member + } + } + ] + } + ] + events: + - name: sudo.Sudid + attributes: + - type: Result + value: Ok + - name: xcmPallet.Sent + - name: alliance.MemberKicked + chain: *collectives_parachain + attributes: + - type: AccountId32 + key: member + value: *acc_alice_ss58 + - name: dmpQueue.ExecutedDownward + chain: *collectives_parachain + attributes: + - type: XcmV2TraitsOutcome + xcmOutcome: Complete + # must be static + value: *weight_to_send_teleport + + - queries: + balance_rc_treasury_after: + chain: *relay_chain + pallet: system + call: account + args: [ *acc_treasury_acc32 ] + - name: Slashed balance appears on the relay chain treasury account + actions: + - asserts: + balanceIncreased: + args: [ + { + balances: { + before: $balance_rc_treasury_before, + after: $balance_rc_treasury_after, + } + # TODO (P3) set `amount` and `fee` for more strict assert + } + ] diff --git a/parachains/integration-tests/collectives/config.toml b/parachains/integration-tests/collectives/config.toml new file mode 100644 index 00000000000..9d138be11ba --- /dev/null +++ b/parachains/integration-tests/collectives/config.toml @@ -0,0 +1,33 @@ +[relaychain] +default_command = "./bin/polkadot" +default_args = [ "-lparachain=trace", "-lxcm=trace" ] +chain = "polkadot-local" + + [[relaychain.nodes]] + name = "alice" + ws_port = 9700 + validator = true + + [[relaychain.nodes]] + name = "bob" + validator = true + + [[relaychain.nodes]] + name = "charlie" + validator = true + +[[parachains]] +id = 1001 +chain = "collectives-polkadot-local" +cumulus_based = true + + [[parachains.collators]] + name = "collator1" + ws_port = 9710 + command = "./bin/polkadot-parachain" + args = ["-lxcm=trace"] + + [[parachains.collators]] + name = "collator2" + command = "./bin/polkadot-parachain" + args = ["-lxcm=trace"] diff --git a/parachains/integration-tests/statemint/xcm/4_hrmp.yml b/parachains/integration-tests/statemint/xcm/4_hrmp.yml index 5de5e190820..00a3ff467bc 100644 --- a/parachains/integration-tests/statemint/xcm/4_hrmp.yml +++ b/parachains/integration-tests/statemint/xcm/4_hrmp.yml @@ -113,6 +113,7 @@ tests: ] events: - name: assets.Issued + its: - name: Assets Parachain should be able to reserve transfer an Asset to Penpal Parachain actions: @@ -226,3 +227,130 @@ tests: attribute: type: u128 value: *amount + + - name: polkadotXcm.send( system.remarkWithEvent() ) | Penpal Parachain -> Assets Parachain + before: + - name: Get the asset balance of the Penpal Parachain Sovereign account in Assets Parachain + actions: + - queries: + assets_balance_pp_sovereign_before: + chain: *assets_parachain + pallet: assets + call: account + args: [ + *asset_id, + *pp_sovereign_sibl + ] + its: + - name: Penpal Parachain should be able to send XCM message paying its fee with sufficient asset in Assets Parachain + actions: + - extrinsics: + - chain: *penpal_parachain + signer: *pp_signer + sudo: true + pallet: polkadotXcm + call: send + args: [ + *ap_dest_routed, # destination + { + v2: [ #message + { + WithdrawAsset: [*ap_suff_asset_fungible] + }, + { + BuyExecution: { + fees: *ap_suff_asset_fungible, + weightLimit: Unlimited + } + }, + { + Transact: { + originType: SovereignAccount, + requireWeightAtMost: *weight_at_most, + call: $system_remark_with_event + } + } + ] + } + ] + events: + - name: sudo.Sudid + attribute: + type: Result + value: Ok + - name: polkadotXcm.Sent + - name: assets.Burned + chain: *assets_parachain + attribute: + type: AccountId32 + value: *pp_sovereign_sibl + - name: assets.Issued + chain: *assets_parachain + attribute: + type: u32 + value: *asset_id + - name: system.Remarked + chain: *assets_parachain + attribute: + type: AccountId32 + value: *pp_sovereign_sibl + - queries: + assets_balance_pp_sovereign_after: + chain: *assets_parachain + pallet: assets + call: account + args: [ + *asset_id, + *pp_sovereign_sibl + ] + + - name: Should reduce the assets balance of the Penpal Parachain's SovereignAccount in the Assets Parachain + actions: + - asserts: + assetsDecreased: + args: [ + { + balances: { + before: $assets_balance_pp_sovereign_before, + after: $assets_balance_pp_sovereign_after, + }, + } + ] + + - name: Penpal Parachain SHOULD NOT be able to send XCM message paying its fee with sufficient assets if not enough balance + actions: + - extrinsics: + - chain: *penpal_parachain + signer: *pp_signer + sudo: true + pallet: polkadotXcm + call: send + args: [ + *ap_dest_routed, # destination + { + v2: [ #message + { + WithdrawAsset: [*ap_suff_asset_fungible_fail] + }, + { + BuyExecution: { + fees: *ap_suff_asset_fungible_fail, + weightLimit: Unlimited + } + }, + { + Transact: { + originType: SovereignAccount, + requireWeightAtMost: *weight_at_most, + call: $system_remark_with_event + } + } + ] + } + ] + events: + - name: xcmpQueue.Fail + chain: *assets_parachain + attribute: + type: XcmV2TraitsError + value: FailedToTransactAsset diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index ecfa993a296..1aa9540f048 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -6,10 +6,10 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } cumulus-primitives-core = { path = "../../../primitives/core", default-features = false } diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 2671524222e..56a7f451e22 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -6,14 +6,14 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } cumulus-primitives-core = { path = "../../../primitives/core", default-features = false } cumulus-pallet-xcm = { path = "../../../pallets/xcm", default-features = false } diff --git a/parachains/pallets/ping/src/lib.rs b/parachains/pallets/ping/src/lib.rs index 1ef9938e5c7..099f45eeee7 100644 --- a/parachains/pallets/ping/src/lib.rs +++ b/parachains/pallets/ping/src/lib.rs @@ -135,6 +135,7 @@ pub mod pallet { #[pallet::call] impl Pallet { + #[pallet::call_index(0)] #[pallet::weight(0)] pub fn start(origin: OriginFor, para: ParaId, payload: Vec) -> DispatchResult { ensure_root(origin)?; @@ -146,6 +147,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(1)] #[pallet::weight(0)] pub fn start_many( origin: OriginFor, @@ -165,6 +167,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(2)] #[pallet::weight(0)] pub fn stop(origin: OriginFor, para: ParaId) -> DispatchResult { ensure_root(origin)?; @@ -176,6 +179,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(3)] #[pallet::weight(0)] pub fn stop_all(origin: OriginFor, maybe_para: Option) -> DispatchResult { ensure_root(origin)?; @@ -187,6 +191,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(4)] #[pallet::weight(0)] pub fn ping(origin: OriginFor, seq: u32, payload: Vec) -> DispatchResult { // Only accept pings from other chains. @@ -212,6 +217,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(5)] #[pallet::weight(0)] pub fn pong(origin: OriginFor, seq: u32, payload: Vec) -> DispatchResult { // Only accept pings from other chains. diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 1dec52a1f92..cf88877cdde 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -7,53 +7,55 @@ description = "Kusama variant of Statemint parachain runtime" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } -hex-literal = { version = "0.3.4", optional = true } +hex-literal = { version = "0.3.4" } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-state-trie-migration = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } + # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,20 +70,26 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.36" } [dev-dependencies] -hex-literal = "0.3.4" asset-test-utils = { path = "../test-utils"} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] +# When enabled the `state_version` is set to `1`. +# This means that the chain will start using the new state format. The migration is lazy, so +# it requires to write a storage value to use the new state format. To migrate all the other +# storage values that aren't touched the state migration pallet is added as well. +# This pallet will migrate the entire state, controlled through some account. +# +# This feature should be removed when the main-net will be migrated. +state-trie-version-1 = ["pallet-state-trie-migration"] runtime-benchmarks = [ - "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system-benchmarking/runtime-benchmarks", @@ -100,6 +108,7 @@ runtime-benchmarks = [ "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", "pallet-xcm-benchmarks/runtime-benchmarks", + "pallet-state-trie-migration/runtime-benchmarks", ] try-runtime = [ "cumulus-pallet-aura-ext/try-runtime", @@ -109,7 +118,7 @@ try-runtime = [ "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", "frame-system/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", "pallet-asset-tx-payment/try-runtime", "pallet-assets/try-runtime", "pallet-aura/try-runtime", @@ -125,6 +134,7 @@ try-runtime = [ "pallet-utility/try-runtime", "pallet-xcm/try-runtime", "parachain-info/try-runtime", + "pallet-state-trie-migration/try-runtime", ] std = [ "codec/std", @@ -143,6 +153,7 @@ std = [ "pallet-multisig/std", "pallet-proxy/std", "pallet-session/std", + "pallet-state-trie-migration/std", "pallet-timestamp/std", "pallet-transaction-payment-rpc-runtime-api/std", "pallet-transaction-payment/std", diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index bc981fa18c0..7955b4d8b2c 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -49,7 +49,7 @@ use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::{AsEnsureOriginWithArg, EitherOfDiverse, InstanceFilter}, + traits::{AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, EitherOfDiverse, InstanceFilter}, weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; @@ -82,15 +82,29 @@ impl_opaque_keys! { } } +#[cfg(feature = "state-trie-version-1")] #[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 9310, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 8, + transaction_version: 11, + state_version: 1, +}; + +#[cfg(not(feature = "state-trie-version-1"))] +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("statemine"), + impl_name: create_runtime_str!("statemine"), + authoring_version: 1, + spec_version: 9360, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 11, state_version: 0, }; @@ -153,37 +167,27 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; -} - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; + type UncleGenerations = ConstU32<0>; type FilterUncle = (); type EventHandler = (CollatorSelection,); } parameter_types! { pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const MaxLocks: u32 = 50; - pub const MaxReserves: u32 = 50; } impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; + type MaxLocks = ConstU32<50>; /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. @@ -192,14 +196,13 @@ impl pallet_balances::Config for Runtime { type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxReserves = MaxReserves; + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; } parameter_types! { /// Relay Chain `TransactionByteFee` / 10 pub const TransactionByteFee: Balance = 1 * MILLICENTS; - pub const OperationalFeeMultiplier: u8 = 5; } impl pallet_transaction_payment::Config for Runtime { @@ -209,7 +212,7 @@ impl pallet_transaction_payment::Config for Runtime { type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } parameter_types! { @@ -232,7 +235,9 @@ impl pallet_assets::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; + type AssetIdParameter = codec::Compact; type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; type ForceOrigin = AssetsForceOrigin; type AssetDeposit = AssetDeposit; type MetadataDepositBase = MetadataDepositBase; @@ -243,6 +248,9 @@ impl pallet_assets::Config for Runtime { type Extra = (); type WeightInfo = weights::pallet_assets::WeightInfo; type AssetAccountDeposit = AssetAccountDeposit; + type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); } parameter_types! { @@ -250,7 +258,7 @@ parameter_types! { pub const DepositBase: Balance = deposit(1, 88); // Additional storage item size of 32 bytes. pub const DepositFactor: Balance = deposit(0, 32); - pub const MaxSignatories: u16 = 100; + pub const MaxSignatories: u32 = 100; } impl pallet_multisig::Config for Runtime { @@ -345,7 +353,10 @@ impl InstanceFilter for ProxyType { ProxyType::AssetOwner => matches!( c, RuntimeCall::Assets(pallet_assets::Call::create { .. }) | - RuntimeCall::Assets(pallet_assets::Call::destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::start_destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy_accounts { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy_approvals { .. }) | + RuntimeCall::Assets(pallet_assets::Call::finish_destroy { .. }) | RuntimeCall::Assets(pallet_assets::Call::transfer_ownership { .. }) | RuntimeCall::Assets(pallet_assets::Call::set_team { .. }) | RuntimeCall::Assets(pallet_assets::Call::set_metadata { .. }) | @@ -462,7 +473,6 @@ impl cumulus_pallet_dmp_queue::Config for Runtime { parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; - pub const MaxAuthorities: u32 = 100_000; } impl pallet_session::Config for Runtime { @@ -473,7 +483,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = weights::pallet_session::WeightInfo; @@ -482,7 +492,7 @@ impl pallet_session::Config for Runtime { impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; } parameter_types! { @@ -596,6 +606,9 @@ construct_runtime!( // The main stage. Assets: pallet_assets::{Pallet, Call, Storage, Event} = 50, Uniques: pallet_uniques::{Pallet, Call, Storage, Event} = 51, + + #[cfg(feature = "state-trie-version-1")] + StateTrieMigration: pallet_state_trie_migration = 70, } ); @@ -623,6 +636,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -630,7 +644,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - (), + pallet_balances::migration::MigrateToTrackInactive, >; #[cfg(feature = "runtime-benchmarks")] @@ -784,21 +798,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade statemine."); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::statemine", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } @@ -979,3 +992,49 @@ cumulus_pallet_parachain_system::register_validate_block! { BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, CheckInherents = CheckInherents, } + +#[cfg(feature = "state-trie-version-1")] +parameter_types! { + // The deposit configuration for the singed migration. Specially if you want to allow any signed account to do the migration (see `SignedFilter`, these deposits should be high) + pub const MigrationSignedDepositPerItem: Balance = 1 * CENTS; + pub const MigrationSignedDepositBase: Balance = 2_000 * CENTS; + pub const MigrationMaxKeyLen: u32 = 512; +} + +#[cfg(feature = "state-trie-version-1")] +impl pallet_state_trie_migration::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type SignedDepositPerItem = MigrationSignedDepositPerItem; + type SignedDepositBase = MigrationSignedDepositBase; + // An origin that can control the whole pallet: should be Root, or a part of your council. + type ControlOrigin = frame_system::EnsureSignedBy; + // specific account for the migration, can trigger the signed migrations. + type SignedFilter = frame_system::EnsureSignedBy; + + // Replace this with weight based on your runtime. + type WeightInfo = pallet_state_trie_migration::weights::SubstrateWeight; + + type MaxKeyLen = MigrationMaxKeyLen; +} + +#[cfg(feature = "state-trie-version-1")] +frame_support::ord_parameter_types! { + pub const MigController: AccountId = AccountId::from(hex_literal::hex!("8458ed39dc4b6f6c7255f7bc42be50c2967db126357c999d44e12ca7ac80dc52")); + pub const RootMigController: AccountId = AccountId::from(hex_literal::hex!("8458ed39dc4b6f6c7255f7bc42be50c2967db126357c999d44e12ca7ac80dc52")); +} + +#[cfg(feature = "state-trie-version-1")] +#[test] +fn ensure_key_ss58() { + use frame_support::traits::SortedMembers; + use sp_core::crypto::Ss58Codec; + let acc = + AccountId::from_ss58check("5F4EbSkZz18X36xhbsjvDNs6NuZ82HyYtq5UiJ1h9SBHJXZD").unwrap(); + //panic!("{:x?}", acc); + assert_eq!(acc, MigController::sorted_members()[0]); + let acc = + AccountId::from_ss58check("5F4EbSkZz18X36xhbsjvDNs6NuZ82HyYtq5UiJ1h9SBHJXZD").unwrap(); + assert_eq!(acc, RootMigController::sorted_members()[0]); + //panic!("{:x?}", acc); +} diff --git a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs index 16a431d8b18..e69a6c0db72 100644 --- a/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `cumulus_pallet_xcmp_queue` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,14 +48,16 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_634_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_844 nanoseconds. + Weight::from_ref_time(7_122_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_559_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_960 nanoseconds. + Weight::from_ref_time(7_173_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs index d871fc7021f..692c08bf4fd 100644 --- a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,51 +40,59 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. - fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + fn remark(b: u32, ) -> Weight { + // Minimum execution time: 3_919 nanoseconds. + Weight::from_ref_time(3_976_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(411).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + // Minimum execution time: 13_679 nanoseconds. + Weight::from_ref_time(13_807_000) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_ref_time(1_770).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(8_677_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 8_917 nanoseconds. + Weight::from_ref_time(9_108_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(625_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 4_078 nanoseconds. + Weight::from_ref_time(4_134_000) + // Standard Error: 2_191 + .saturating_add(Weight::from_ref_time(624_841).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(554_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 4_078 nanoseconds. + Weight::from_ref_time(4_149_000) + // Standard Error: 965 + .saturating_add(Weight::from_ref_time(446_865).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `p` is `[1, 1000]`. + /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_128_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) + // Minimum execution time: 5_538 nanoseconds. + Weight::from_ref_time(5_728_000) + // Standard Error: 1_272 + .saturating_add(Weight::from_ref_time(972_809).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs index c4694d80b5d..bba9223a8b4 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_assets` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,198 +40,236 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) + // Storage: System Account (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(30_336_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 27_691 nanoseconds. + Weight::from_ref_time(28_210_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(17_834_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 17_264 nanoseconds. + Weight::from_ref_time(17_619_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Assets Asset (r:1 w:1) + fn start_destroy() -> Weight { + // Minimum execution time: 19_150 nanoseconds. + Weight::from_ref_time(19_455_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Account (r:1 w:0) + // Storage: System Account (r:20 w:20) + /// The range of component `c` is `[0, 1000]`. + fn destroy_accounts(c: u32, ) -> Weight { + // Minimum execution time: 21_644 nanoseconds. + Weight::from_ref_time(21_898_000) + // Standard Error: 12_994 + .saturating_add(Weight::from_ref_time(13_266_487).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) + } + // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Approvals (r:1 w:0) + /// The range of component `a` is `[0, 1000]`. + fn destroy_approvals(a: u32, ) -> Weight { + // Minimum execution time: 22_442 nanoseconds. + Weight::from_ref_time(22_797_000) + // Standard Error: 7_559 + .saturating_add(Weight::from_ref_time(12_882_952).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } // Storage: Assets Asset (r:1 w:1) - // Storage: Assets Account (r:5002 w:5001) - // Storage: System Account (r:5000 w:5000) // Storage: Assets Metadata (r:1 w:0) - // Storage: Assets Approvals (r:501 w:500) - /// The range of component `c` is `[0, 5000]`. - /// The range of component `s` is `[0, 5000]`. - /// The range of component `a` is `[0, 500]`. - fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 103_000 - .saturating_add(Weight::from_ref_time(17_019_000 as u64).saturating_mul(c as u64)) - // Standard Error: 103_000 - .saturating_add(Weight::from_ref_time(18_891_000 as u64).saturating_mul(s as u64)) - // Standard Error: 1_038_000 - .saturating_add(Weight::from_ref_time(32_265_000 as u64).saturating_mul(a as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(a as u64))) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(s as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) + fn finish_destroy() -> Weight { + // Minimum execution time: 18_408 nanoseconds. + Weight::from_ref_time(18_637_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(35_875_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 30_558 nanoseconds. + Weight::from_ref_time(30_935_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(38_571_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_672 nanoseconds. + Weight::from_ref_time(37_548_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(50_931_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 47_322 nanoseconds. + Weight::from_ref_time(48_016_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(43_426_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 39_627 nanoseconds. + Weight::from_ref_time(40_353_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(51_045_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 47_666 nanoseconds. + Weight::from_ref_time(48_207_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(24_405_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_165 nanoseconds. + Weight::from_ref_time(22_493_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(24_445_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 21_889 nanoseconds. + Weight::from_ref_time(22_283_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(21_181_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_560 nanoseconds. + Weight::from_ref_time(18_874_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(21_227_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_383 nanoseconds. + Weight::from_ref_time(18_917_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(23_802_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_271 nanoseconds. + Weight::from_ref_time(19_631_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(22_959_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_180 nanoseconds. + Weight::from_ref_time(18_517_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(35_275_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(7_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 30_142 nanoseconds. + Weight::from_ref_time(31_374_698) + // Standard Error: 703 + .saturating_add(Weight::from_ref_time(4_165).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(38_293_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_646 nanoseconds. + Weight::from_ref_time(32_234_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn force_set_metadata(n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(23_375_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(n as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn force_set_metadata(_n: u32, s: u32, ) -> Weight { + // Minimum execution time: 18_874 nanoseconds. + Weight::from_ref_time(19_642_290) + // Standard Error: 436 + .saturating_add(Weight::from_ref_time(649).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(38_807_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_720 nanoseconds. + Weight::from_ref_time(32_217_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(22_088_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 17_817 nanoseconds. + Weight::from_ref_time(18_124_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(38_906_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 33_692 nanoseconds. + Weight::from_ref_time(34_846_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(66_949_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) + // Minimum execution time: 61_857 nanoseconds. + Weight::from_ref_time(62_636_000) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(5)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(39_491_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_218 nanoseconds. + Weight::from_ref_time(36_559_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(41_596_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_905 nanoseconds. + Weight::from_ref_time(37_500_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs index 8d28cb51805..102a715bd94 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,51 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(46_411_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 41_318 nanoseconds. + Weight::from_ref_time(41_955_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(34_589_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_411 nanoseconds. + Weight::from_ref_time(32_017_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(25_591_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_832 nanoseconds. + Weight::from_ref_time(23_419_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(29_471_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_415 nanoseconds. + Weight::from_ref_time(26_818_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(46_550_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 41_662 nanoseconds. + Weight::from_ref_time(42_609_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(40_804_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 37_061 nanoseconds. + Weight::from_ref_time(37_705_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(22_516_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_666 nanoseconds. + Weight::from_ref_time(20_929_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs index 53d31d9fa2c..a0b38bbc784 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,24 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(23_858_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(2_412_000 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 21_009 nanoseconds. + Weight::from_ref_time(22_782_519) + // Standard Error: 3_817 + .saturating_add(Weight::from_ref_time(2_244_637).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(14_642_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_625 nanoseconds. + Weight::from_ref_time(14_070_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(14_842_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_691 nanoseconds. + Weight::from_ref_time(14_032_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -72,31 +75,34 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: Session NextKeys (r:1 w:0) // Storage: CollatorSelection CandidacyBond (r:1 w:0) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) - /// The range of component `c` is `[1, 1000]`. + /// The range of component `c` is `[1, 999]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(61_940_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(170_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 44_294 nanoseconds. + Weight::from_ref_time(41_574_350) + // Standard Error: 1_029 + .saturating_add(Weight::from_ref_time(132_223).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(60_018_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(162_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_163 nanoseconds. + Weight::from_ref_time(28_470_095) + // Standard Error: 1_039 + .saturating_add(Weight::from_ref_time(126_663).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(35_100_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 30_143 nanoseconds. + Weight::from_ref_time(30_631_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -105,14 +111,14 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. - fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_237_000 - .saturating_add(Weight::from_ref_time(6_686_000 as u64).saturating_mul(r as u64)) - // Standard Error: 1_237_000 - .saturating_add(Weight::from_ref_time(32_537_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) + fn new_session(_r: u32, c: u32, ) -> Weight { + // Minimum execution time: 19_764 nanoseconds. + Weight::from_ref_time(20_011_000) + // Standard Error: 764_093 + .saturating_add(Weight::from_ref_time(27_541_884).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs index 2eed162d6a2..d7d91dbf220 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-26, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm2`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -47,81 +47,81 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 21_063 nanoseconds. - Weight::from_ref_time(21_862_078 as u64) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(343 as u64).saturating_mul(z as u64)) + // Minimum execution time: 15_740 nanoseconds. + Weight::from_ref_time(16_192_901) + // Standard Error: 2 + .saturating_add(Weight::from_ref_time(592).saturating_mul(z.into())) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 48_498 nanoseconds. - Weight::from_ref_time(39_020_484 as u64) - // Standard Error: 917 - .saturating_add(Weight::from_ref_time(101_566 as u64).saturating_mul(s as u64)) + // Minimum execution time: 43_792 nanoseconds. + Weight::from_ref_time(36_530_624) + // Standard Error: 859 + .saturating_add(Weight::from_ref_time(86_126).saturating_mul(s.into())) // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_559 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + .saturating_add(Weight::from_ref_time(1_599).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 40_013 nanoseconds. - Weight::from_ref_time(28_889_358 as u64) - // Standard Error: 846 - .saturating_add(Weight::from_ref_time(117_565 as u64).saturating_mul(s as u64)) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_480 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 34_402 nanoseconds. + Weight::from_ref_time(27_199_438) + // Standard Error: 533 + .saturating_add(Weight::from_ref_time(80_893).saturating_mul(s.into())) + // Standard Error: 5 + .saturating_add(Weight::from_ref_time(1_609).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 52_880 nanoseconds. - Weight::from_ref_time(41_398_334 as u64) - // Standard Error: 760 - .saturating_add(Weight::from_ref_time(143_103 as u64).saturating_mul(s as u64)) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_485 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 48_203 nanoseconds. + Weight::from_ref_time(39_327_294) + // Standard Error: 972 + .saturating_add(Weight::from_ref_time(102_451).saturating_mul(s.into())) + // Standard Error: 9 + .saturating_add(Weight::from_ref_time(1_620).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 34_872 nanoseconds. - Weight::from_ref_time(37_363_593 as u64) - // Standard Error: 1_144 - .saturating_add(Weight::from_ref_time(125_451 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_000 nanoseconds. + Weight::from_ref_time(35_051_831) + // Standard Error: 997 + .saturating_add(Weight::from_ref_time(90_076).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 25_288 nanoseconds. - Weight::from_ref_time(26_822_824 as u64) - // Standard Error: 705 - .saturating_add(Weight::from_ref_time(128_964 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_262 nanoseconds. + Weight::from_ref_time(25_347_876) + // Standard Error: 839 + .saturating_add(Weight::from_ref_time(88_662).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 34_669 nanoseconds. - Weight::from_ref_time(36_953_098 as u64) - // Standard Error: 944 - .saturating_add(Weight::from_ref_time(132_676 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_913 nanoseconds. + Weight::from_ref_time(35_087_663) + // Standard Error: 871 + .saturating_add(Weight::from_ref_time(91_420).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs index ea0239f86ab..e3b43ac00e2 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(24_000_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(37_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) + // Minimum execution time: 21_152 nanoseconds. + Weight::from_ref_time(23_050_659) + // Standard Error: 3_294 + .saturating_add(Weight::from_ref_time(18_228).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +61,42 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(42_183_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(126_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(57_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 39_816 nanoseconds. + Weight::from_ref_time(39_405_608) + // Standard Error: 1_903 + .saturating_add(Weight::from_ref_time(134_468).saturating_mul(a.into())) + // Standard Error: 1_966 + .saturating_add(Weight::from_ref_time(53_275).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(28_402_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(144_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(46_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 27_523 nanoseconds. + Weight::from_ref_time(28_272_532) + // Standard Error: 1_376 + .saturating_add(Weight::from_ref_time(128_200).saturating_mul(a.into())) + // Standard Error: 1_422 + .saturating_add(Weight::from_ref_time(15_264).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(28_820_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(145_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(18_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 27_750 nanoseconds. + Weight::from_ref_time(28_644_306) + // Standard Error: 1_659 + .saturating_add(Weight::from_ref_time(119_508).saturating_mul(a.into())) + // Standard Error: 1_714 + .saturating_add(Weight::from_ref_time(16_971).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +104,64 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(37_916_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(124_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(67_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 35_983 nanoseconds. + Weight::from_ref_time(36_651_889) + // Standard Error: 2_166 + .saturating_add(Weight::from_ref_time(119_974).saturating_mul(a.into())) + // Standard Error: 2_238 + .saturating_add(Weight::from_ref_time(48_188).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(31_658_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(81_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 29_177 nanoseconds. + Weight::from_ref_time(30_731_712) + // Standard Error: 1_788 + .saturating_add(Weight::from_ref_time(70_028).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(31_794_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 29_575 nanoseconds. + Weight::from_ref_time(30_796_953) + // Standard Error: 2_162 + .saturating_add(Weight::from_ref_time(82_372).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(27_460_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(44_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_514 nanoseconds. + Weight::from_ref_time(26_752_018) + // Standard Error: 1_688 + .saturating_add(Weight::from_ref_time(47_064).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(34_252_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_400 nanoseconds. + Weight::from_ref_time(32_761_873) + // Standard Error: 9_079 + .saturating_add(Weight::from_ref_time(64_506).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(28_616_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(54_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_823 nanoseconds. + Weight::from_ref_time(28_399_196) + // Standard Error: 1_685 + .saturating_add(Weight::from_ref_time(49_327).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs index 0948531fc0e..c6a68063077 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,17 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(23_807_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 22_444 nanoseconds. + Weight::from_ref_time(23_247_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(20_676_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 18_986 nanoseconds. + Weight::from_ref_time(19_353_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs index 44b13a39aac..088b8695adb 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,19 +40,22 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) + // Storage: Aura CurrentSlot (r:1 w:0) fn set() -> Weight { - Weight::from_ref_time(7_902_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 9_277 nanoseconds. + Weight::from_ref_time(9_481_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - Weight::from_ref_time(4_249_000 as u64) + // Minimum execution time: 3_799 nanoseconds. + Weight::from_ref_time(3_944_000) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs index 54a578d6f1c..4aaf7759bbf 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_uniques` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -49,16 +49,18 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(33_406_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 30_553 nanoseconds. + Weight::from_ref_time(31_335_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(22_030_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 20_306 nanoseconds. + Weight::from_ref_time(20_621_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -72,191 +74,215 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(9_873_000 as u64).saturating_mul(n as u64)) - // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(1_727_000 as u64).saturating_mul(m as u64)) - // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(1_664_000 as u64).saturating_mul(a as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) - .saturating_add(T::DbWeight::get().writes(4 as u64)) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(n as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(m as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) + // Minimum execution time: 2_328_818 nanoseconds. + Weight::from_ref_time(2_356_006_000) + // Standard Error: 25_300 + .saturating_add(Weight::from_ref_time(8_261_731).saturating_mul(n.into())) + // Standard Error: 25_300 + .saturating_add(Weight::from_ref_time(257_219).saturating_mul(m.into())) + // Standard Error: 25_300 + .saturating_add(Weight::from_ref_time(264_540).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(41_026_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + // Minimum execution time: 38_688 nanoseconds. + Weight::from_ref_time(39_217_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(44_624_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 39_932 nanoseconds. + Weight::from_ref_time(40_613_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(33_942_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 31_640 nanoseconds. + Weight::from_ref_time(31_954_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:102 w:102) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 12_000 - .saturating_add(Weight::from_ref_time(11_483_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 20_417 nanoseconds. + Weight::from_ref_time(20_569_000) + // Standard Error: 13_979 + .saturating_add(Weight::from_ref_time(11_031_095).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(26_821_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 24_601 nanoseconds. + Weight::from_ref_time(24_851_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(26_661_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_688 nanoseconds. + Weight::from_ref_time(24_189_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(22_335_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_606 nanoseconds. + Weight::from_ref_time(19_922_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(22_095_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_335 nanoseconds. + Weight::from_ref_time(19_831_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(30_274_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 27_519 nanoseconds. + Weight::from_ref_time(28_009_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(22_762_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_057 nanoseconds. + Weight::from_ref_time(20_615_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(25_193_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 23_296 nanoseconds. + Weight::from_ref_time(23_464_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(49_304_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 43_776 nanoseconds. + Weight::from_ref_time(44_536_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(48_497_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 42_660 nanoseconds. + Weight::from_ref_time(43_620_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(39_494_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_573 nanoseconds. + Weight::from_ref_time(37_107_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(42_057_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_705 nanoseconds. + Weight::from_ref_time(37_601_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(39_279_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_921 nanoseconds. + Weight::from_ref_time(35_832_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(39_339_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 34_617 nanoseconds. + Weight::from_ref_time(34_919_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(29_293_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_019 nanoseconds. + Weight::from_ref_time(26_484_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(28_463_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_579 nanoseconds. + Weight::from_ref_time(26_128_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(25_542_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_690 nanoseconds. + Weight::from_ref_time(23_948_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(24_982_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_005 nanoseconds. + Weight::from_ref_time(22_693_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(25_217_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_836 nanoseconds. + Weight::from_ref_time(23_207_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(45_577_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 41_765 nanoseconds. + Weight::from_ref_time(42_289_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs index c913b7bce0a..fd95226632c 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,31 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(24_677_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_837_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 13_034 nanoseconds. + Weight::from_ref_time(21_764_326) + // Standard Error: 2_410 + .saturating_add(Weight::from_ref_time(3_700_949).saturating_mul(c.into())) } fn as_derivative() -> Weight { - Weight::from_ref_time(6_606_000 as u64) + // Minimum execution time: 6_719 nanoseconds. + Weight::from_ref_time(6_826_000) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(21_357_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(4_002_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 12_554 nanoseconds. + Weight::from_ref_time(21_222_841) + // Standard Error: 2_537 + .saturating_add(Weight::from_ref_time(3_904_278).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - Weight::from_ref_time(14_659_000 as u64) + // Minimum execution time: 15_143 nanoseconds. + Weight::from_ref_time(15_426_000) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(20_033_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_832_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 12_779 nanoseconds. + Weight::from_ref_time(21_928_101) + // Standard Error: 2_278 + .saturating_add(Weight::from_ref_time(3_720_046).saturating_mul(c.into())) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index e47109fed89..2b11d541d1f 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::fungible` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -50,13 +50,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(35_315_000 as u64) + Weight::from_ref_time(32_154_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(40_541_000 as u64) + Weight::from_ref_time(37_328_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,16 +68,16 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(54_608_000 as u64) + Weight::from_ref_time(53_253_000 as u64) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(6_927_000 as u64) + Weight::from_ref_time(6_378_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(35_353_000 as u64) + Weight::from_ref_time(33_783_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -89,7 +89,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(51_366_000 as u64) + Weight::from_ref_time(51_293_000 as u64) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -100,7 +100,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(27_592_000 as u64) + Weight::from_ref_time(28_390_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 18d38f0af98..3e7d6b33dc2 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(679_129_000 as u64) + Weight::from_ref_time(892_211_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(9_337_000 as u64) + Weight::from_ref_time(8_728_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(17_924_000 as u64) + Weight::from_ref_time(16_766_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(21_258_000 as u64) + Weight::from_ref_time(19_546_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(9_634_000 as u64) + Weight::from_ref_time(8_907_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_616_000 as u64) + Weight::from_ref_time(5_393_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_627_000 as u64) + Weight::from_ref_time(5_453_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_793_000 as u64) + Weight::from_ref_time(5_417_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(6_477_000 as u64) + Weight::from_ref_time(6_700_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_709_000 as u64) + Weight::from_ref_time(5_365_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(16_302_000 as u64) + Weight::from_ref_time(15_258_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(12_324_000 as u64) + Weight::from_ref_time(21_485_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_724_000 as u64) + Weight::from_ref_time(5_334_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +114,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(19_809_000 as u64) + Weight::from_ref_time(18_035_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(9_008_000 as u64) + Weight::from_ref_time(7_661_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,7 +130,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(867_880_000 as u64) + Weight::from_ref_time(1_090_619_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index e4b8fd99fa0..98fe6381251 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -157,6 +157,12 @@ pub type Barrier = DenyThenTry< ), >; +pub type AssetFeeAsExistentialDepositMultiplierFeeCharger = AssetFeeAsExistentialDepositMultiplier< + Runtime, + WeightToFee, + pallet_assets::BalanceToAssetBalance, +>; + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -179,11 +185,7 @@ impl xcm_executor::Config for XcmConfig { UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< AccountId, - AssetFeeAsExistentialDepositMultiplier< - Runtime, - WeightToFee, - pallet_assets::BalanceToAssetBalance, - >, + AssetFeeAsExistentialDepositMultiplierFeeCharger, ConvertedConcreteAssetId< AssetId, Balance, diff --git a/parachains/runtimes/assets/statemine/tests/tests.rs b/parachains/runtimes/assets/statemine/tests/tests.rs index 974f89ec1ee..18caaaf3f7e 100644 --- a/parachains/runtimes/assets/statemine/tests/tests.rs +++ b/parachains/runtimes/assets/statemine/tests/tests.rs @@ -1,16 +1,19 @@ use asset_test_utils::{ExtBuilder, RuntimeHelper}; +use cumulus_primitives_utility::ChargeWeightInFungibles; use frame_support::{ assert_noop, assert_ok, traits::PalletInfo, weights::{Weight, WeightToFee as WeightToFeeT}, }; use parachains_common::{AccountId, AuraId}; +use statemine_runtime::xcm_config::AssetFeeAsExistentialDepositMultiplierFeeCharger; pub use statemine_runtime::{ constants::fee::WeightToFee, xcm_config::XcmConfig, Assets, Balances, ExistentialDeposit, Runtime, SessionKeys, System, }; use xcm::latest::prelude::*; use xcm_executor::traits::WeightTrader; + pub const ALICE: [u8; 32] = [1u8; 32]; #[test] @@ -25,34 +28,25 @@ fn test_asset_xcm_trader() { .build() .execute_with(|| { // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first + let minimum_asset_balance = 3333333_u128; + let local_asset_id = 1; assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + local_asset_id.into(), AccountId::from(ALICE).into(), true, - ExistentialDeposit::get() + minimum_asset_balance )); // We first mint enough asset for the account to exist for assets assert_ok!(Assets::mint( RuntimeHelper::::origin_of(AccountId::from(ALICE)), - 1, + local_asset_id.into(), AccountId::from(ALICE).into(), - ExistentialDeposit::get() + minimum_asset_balance )); - let mut trader = ::Trader::new(); - - // Set Alice as block author, who will receive fees - RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); - - // We are going to buy 4e9 weight - let bought = 4_000_000_000u64; - - // lets calculate amount needed - let amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); - + // get asset id as multilocation let asset_multilocation = MultiLocation::new( 0, X2( @@ -60,14 +54,40 @@ fn test_asset_xcm_trader() { ::PalletInfo::index::().unwrap() as u8, ), - GeneralIndex(1), + GeneralIndex(local_asset_id.into()), ), ); - let asset: MultiAsset = (asset_multilocation, amount_needed).into(); + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); - // Make sure buy_weight does not return an error - assert_ok!(trader.buy_weight(bought, asset.into())); + // We are going to buy 4e9 weight + let bought = 4_000_000_000u64; + + // Lets calculate amount needed + let asset_amount_needed = + AssetFeeAsExistentialDepositMultiplierFeeCharger::charge_weight_in_fungibles( + local_asset_id, + Weight::from_ref_time(bought), + ) + .expect("failed to compute"); + + // Lets pay with: asset_amount_needed + asset_amount_extra + let asset_amount_extra = 100_u128; + let asset: MultiAsset = + (asset_multilocation.clone(), asset_amount_needed + asset_amount_extra).into(); + + let mut trader = ::Trader::new(); + + // Lets buy_weight and make sure buy_weight does not return an error + match trader.buy_weight(bought, asset.into()) { + Ok(unused_assets) => { + // Check whether a correct amount of unused assets is returned + assert_ok!(unused_assets + .ensure_contains(&(asset_multilocation, asset_amount_extra).into())); + }, + Err(e) => assert!(false, "Expected Ok(_). Got {:#?}", e), + } // Drop trader drop(trader); @@ -75,11 +95,11 @@ fn test_asset_xcm_trader() { // Make sure author(Alice) has received the amount assert_eq!( Assets::balance(1, AccountId::from(ALICE)), - ExistentialDeposit::get() + amount_needed + minimum_asset_balance + asset_amount_needed ); // We also need to ensure the total supply increased - assert_eq!(Assets::total_supply(1), ExistentialDeposit::get() + amount_needed); + assert_eq!(Assets::total_supply(1), minimum_asset_balance + asset_amount_needed); }); } @@ -98,7 +118,7 @@ fn test_asset_xcm_trader_with_refund() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() @@ -107,7 +127,7 @@ fn test_asset_xcm_trader_with_refund() { // We first mint enough asset for the account to exist for assets assert_ok!(Assets::mint( RuntimeHelper::::origin_of(AccountId::from(ALICE)), - 1, + 1.into(), AccountId::from(ALICE).into(), ExistentialDeposit::get() )); @@ -185,7 +205,7 @@ fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() @@ -245,7 +265,7 @@ fn test_that_buying_ed_refund_does_not_refund() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() @@ -302,3 +322,70 @@ fn test_that_buying_ed_refund_does_not_refund() { assert_eq!(Assets::total_supply(1), ExistentialDeposit::get()); }); } + +#[test] +fn test_asset_xcm_trader_not_possible_for_non_sufficient_assets() { + ExtBuilder::::default() + .with_collators(vec![AccountId::from(ALICE)]) + .with_session_keys(vec![( + AccountId::from(ALICE), + AccountId::from(ALICE), + SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, + )]) + .build() + .execute_with(|| { + // Create a non-sufficient asset with specific existential deposit + let minimum_asset_balance = 1_000_000_u128; + assert_ok!(Assets::force_create( + RuntimeHelper::::root_origin(), + 1.into(), + AccountId::from(ALICE).into(), + false, + minimum_asset_balance + )); + + // We first mint enough asset for the account to exist for assets + assert_ok!(Assets::mint( + RuntimeHelper::::origin_of(AccountId::from(ALICE)), + 1.into(), + AccountId::from(ALICE).into(), + minimum_asset_balance + )); + + let mut trader = ::Trader::new(); + + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); + + // We are going to buy 4e9 weight + let bought = 4_000_000_000u64; + + // lets calculate amount needed + let asset_amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); + + let asset_multilocation = MultiLocation::new( + 0, + X2( + PalletInstance( + ::PalletInfo::index::().unwrap() + as u8, + ), + GeneralIndex(1), + ), + ); + + let asset: MultiAsset = (asset_multilocation, asset_amount_needed).into(); + + // Make sure again buy_weight does return an error + assert_noop!(trader.buy_weight(bought, asset.into()), XcmError::TooExpensive); + + // Drop trader + drop(trader); + + // Make sure author(Alice) has NOT received the amount + assert_eq!(Assets::balance(1, AccountId::from(ALICE)), minimum_asset_balance); + + // We also need to ensure the total supply NOT increased + assert_eq!(Assets::total_supply(1), minimum_asset_balance); + }); +} diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 69da88352b1..1ee00f6a5a2 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -9,51 +9,51 @@ description = "Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,14 +68,14 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.36" } [dev-dependencies] hex-literal = "0.3.4" asset-test-utils = { path = "../test-utils"} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] @@ -108,7 +108,7 @@ try-runtime = [ "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", "frame-system/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", "pallet-asset-tx-payment/try-runtime", "pallet-assets/try-runtime", "pallet-aura/try-runtime", diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index e042a4a81f1..ca3a2163dbf 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -78,7 +78,7 @@ use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::{AsEnsureOriginWithArg, EitherOfDiverse, InstanceFilter}, + traits::{AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, EitherOfDiverse, InstanceFilter}, weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; @@ -117,10 +117,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemint"), impl_name: create_runtime_str!("statemint"), authoring_version: 1, - spec_version: 9310, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 8, + transaction_version: 11, state_version: 0, }; @@ -183,37 +183,27 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; -} - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; + type UncleGenerations = ConstU32<0>; type FilterUncle = (); type EventHandler = (CollatorSelection,); } parameter_types! { pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const MaxLocks: u32 = 50; - pub const MaxReserves: u32 = 50; } impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; + type MaxLocks = ConstU32<50>; /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. @@ -222,14 +212,13 @@ impl pallet_balances::Config for Runtime { type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxReserves = MaxReserves; + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; } parameter_types! { /// Relay Chain `TransactionByteFee` / 10 pub const TransactionByteFee: Balance = 1 * MILLICENTS; - pub const OperationalFeeMultiplier: u8 = 5; } impl pallet_transaction_payment::Config for Runtime { @@ -239,7 +228,7 @@ impl pallet_transaction_payment::Config for Runtime { type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } parameter_types! { @@ -262,7 +251,9 @@ impl pallet_assets::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; + type AssetIdParameter = codec::Compact; type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; type ForceOrigin = AssetsForceOrigin; type AssetDeposit = AssetDeposit; type MetadataDepositBase = MetadataDepositBase; @@ -273,6 +264,9 @@ impl pallet_assets::Config for Runtime { type Extra = (); type WeightInfo = weights::pallet_assets::WeightInfo; type AssetAccountDeposit = AssetAccountDeposit; + type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); } parameter_types! { @@ -280,7 +274,7 @@ parameter_types! { pub const DepositBase: Balance = deposit(1, 88); // Additional storage item size of 32 bytes. pub const DepositFactor: Balance = deposit(0, 32); - pub const MaxSignatories: u16 = 100; + pub const MaxSignatories: u32 = 100; } impl pallet_multisig::Config for Runtime { @@ -375,7 +369,10 @@ impl InstanceFilter for ProxyType { ProxyType::AssetOwner => matches!( c, RuntimeCall::Assets(pallet_assets::Call::create { .. }) | - RuntimeCall::Assets(pallet_assets::Call::destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::start_destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy_accounts { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy_approvals { .. }) | + RuntimeCall::Assets(pallet_assets::Call::finish_destroy { .. }) | RuntimeCall::Assets(pallet_assets::Call::transfer_ownership { .. }) | RuntimeCall::Assets(pallet_assets::Call::set_team { .. }) | RuntimeCall::Assets(pallet_assets::Call::set_metadata { .. }) | @@ -492,7 +489,6 @@ impl cumulus_pallet_dmp_queue::Config for Runtime { parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; - pub const MaxAuthorities: u32 = 100_000; } impl pallet_session::Config for Runtime { @@ -503,7 +499,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = weights::pallet_session::WeightInfo; @@ -512,7 +508,7 @@ impl pallet_session::Config for Runtime { impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; } parameter_types! { @@ -653,6 +649,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -660,6 +657,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, + pallet_balances::migration::MigrateToTrackInactive, >; #[cfg(feature = "runtime-benchmarks")] @@ -813,21 +811,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade statemint."); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::statemint", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } diff --git a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs index 40fa7ad4602..dfae3fb8bde 100644 --- a/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `cumulus_pallet_xcmp_queue` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,14 +48,16 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_192_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_679 nanoseconds. + Weight::from_ref_time(6_933_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_363_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_807 nanoseconds. + Weight::from_ref_time(7_035_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs index f2e55bc0526..f1704aa96ab 100644 --- a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,51 +40,59 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. - fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + fn remark(b: u32, ) -> Weight { + // Minimum execution time: 3_847 nanoseconds. + Weight::from_ref_time(3_909_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(411).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + // Minimum execution time: 12_640 nanoseconds. + Weight::from_ref_time(12_808_000) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_ref_time(1_768).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(8_784_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 8_531 nanoseconds. + Weight::from_ref_time(8_772_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(625_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 3_965 nanoseconds. + Weight::from_ref_time(4_077_000) + // Standard Error: 2_158 + .saturating_add(Weight::from_ref_time(621_891).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(553_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 4_023 nanoseconds. + Weight::from_ref_time(4_086_000) + // Standard Error: 1_115 + .saturating_add(Weight::from_ref_time(449_323).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `p` is `[1, 1000]`. + /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_138_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) + // Minimum execution time: 5_923 nanoseconds. + Weight::from_ref_time(6_043_000) + // Standard Error: 1_267 + .saturating_add(Weight::from_ref_time(969_876).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs index 445d1b946d8..36ce0eba71f 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_assets` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,196 +40,238 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) + // Storage: System Account (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(30_406_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 27_893 nanoseconds. + Weight::from_ref_time(28_584_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(18_225_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 16_951 nanoseconds. + Weight::from_ref_time(17_784_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Assets Asset (r:1 w:1) + fn start_destroy() -> Weight { + // Minimum execution time: 19_356 nanoseconds. + Weight::from_ref_time(19_728_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Account (r:1 w:0) + // Storage: System Account (r:20 w:20) + /// The range of component `c` is `[0, 1000]`. + fn destroy_accounts(c: u32, ) -> Weight { + // Minimum execution time: 21_363 nanoseconds. + Weight::from_ref_time(21_631_000) + // Standard Error: 14_144 + .saturating_add(Weight::from_ref_time(13_363_125).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) + } + // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Approvals (r:1 w:0) + /// The range of component `a` is `[0, 1000]`. + fn destroy_approvals(a: u32, ) -> Weight { + // Minimum execution time: 22_617 nanoseconds. + Weight::from_ref_time(23_004_000) + // Standard Error: 7_641 + .saturating_add(Weight::from_ref_time(12_966_615).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } // Storage: Assets Asset (r:1 w:1) - // Storage: Assets Account (r:5002 w:5001) - // Storage: System Account (r:5000 w:5000) // Storage: Assets Metadata (r:1 w:0) - // Storage: Assets Approvals (r:501 w:500) - /// The range of component `c` is `[0, 5000]`. - /// The range of component `s` is `[0, 5000]`. - /// The range of component `a` is `[0, 500]`. - fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 96_000 - .saturating_add(Weight::from_ref_time(15_834_000 as u64).saturating_mul(c as u64)) - // Standard Error: 96_000 - .saturating_add(Weight::from_ref_time(17_275_000 as u64).saturating_mul(s as u64)) - // Standard Error: 966_000 - .saturating_add(Weight::from_ref_time(35_635_000 as u64).saturating_mul(a as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(a as u64))) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(s as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) + fn finish_destroy() -> Weight { + // Minimum execution time: 18_557 nanoseconds. + Weight::from_ref_time(18_876_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_535_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 29_562 nanoseconds. + Weight::from_ref_time(30_174_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(39_821_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_888 nanoseconds. + Weight::from_ref_time(37_464_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(52_287_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 47_435 nanoseconds. + Weight::from_ref_time(48_261_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(45_347_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 40_045 nanoseconds. + Weight::from_ref_time(41_239_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(52_369_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 47_806 nanoseconds. + Weight::from_ref_time(48_396_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(25_896_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_102 nanoseconds. + Weight::from_ref_time(22_509_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(25_630_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_072 nanoseconds. + Weight::from_ref_time(22_580_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(22_340_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_328 nanoseconds. + Weight::from_ref_time(19_071_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(22_204_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_443 nanoseconds. + Weight::from_ref_time(18_827_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(24_971_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_299 nanoseconds. + Weight::from_ref_time(19_760_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(24_079_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_116 nanoseconds. + Weight::from_ref_time(18_443_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(36_505_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn set_metadata(n: u32, s: u32, ) -> Weight { + // Minimum execution time: 30_356 nanoseconds. + Weight::from_ref_time(31_550_248) + // Standard Error: 694 + .saturating_add(Weight::from_ref_time(1_106).saturating_mul(n.into())) + // Standard Error: 694 + .saturating_add(Weight::from_ref_time(3_279).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(38_931_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_932 nanoseconds. + Weight::from_ref_time(32_361_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(25_165_000 as u64) - // Standard Error: 5_000 - .saturating_add(Weight::from_ref_time(9_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_761 nanoseconds. + Weight::from_ref_time(19_552_398) + // Standard Error: 474 + .saturating_add(Weight::from_ref_time(2_154).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(40_301_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_277 nanoseconds. + Weight::from_ref_time(32_731_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(23_393_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 17_900 nanoseconds. + Weight::from_ref_time(18_308_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(39_465_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_401 nanoseconds. + Weight::from_ref_time(34_919_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(69_070_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) + // Minimum execution time: 62_224 nanoseconds. + Weight::from_ref_time(63_423_000) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(5)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(40_461_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_283 nanoseconds. + Weight::from_ref_time(36_947_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(41_788_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_261 nanoseconds. + Weight::from_ref_time(36_524_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs index 465247219dd..7e6fdd2cab0 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,51 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(48_009_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 42_089 nanoseconds. + Weight::from_ref_time(42_634_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(35_939_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_299 nanoseconds. + Weight::from_ref_time(32_672_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(26_600_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_721 nanoseconds. + Weight::from_ref_time(24_222_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(30_092_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_112 nanoseconds. + Weight::from_ref_time(26_748_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(47_435_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 41_276 nanoseconds. + Weight::from_ref_time(41_815_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(41_179_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 37_021 nanoseconds. + Weight::from_ref_time(37_426_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(22_413_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_580 nanoseconds. + Weight::from_ref_time(21_111_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs index 2a95ad7a16c..910e0e8ccd2 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,24 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(22_504_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(2_465_000 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_533 nanoseconds. + Weight::from_ref_time(22_073_686) + // Standard Error: 2_818 + .saturating_add(Weight::from_ref_time(2_219_530).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(14_572_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_236 nanoseconds. + Weight::from_ref_time(13_781_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(14_791_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_134 nanoseconds. + Weight::from_ref_time(13_521_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -72,31 +75,34 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: Session NextKeys (r:1 w:0) // Storage: CollatorSelection CandidacyBond (r:1 w:0) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) - /// The range of component `c` is `[1, 1000]`. + /// The range of component `c` is `[1, 999]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(60_440_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(174_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 44_217 nanoseconds. + Weight::from_ref_time(40_364_036) + // Standard Error: 1_089 + .saturating_add(Weight::from_ref_time(127_363).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(66_209_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(157_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_038 nanoseconds. + Weight::from_ref_time(27_873_550) + // Standard Error: 974 + .saturating_add(Weight::from_ref_time(122_729).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(35_644_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 30_009 nanoseconds. + Weight::from_ref_time(30_367_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -105,14 +111,14 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. - fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_251_000 - .saturating_add(Weight::from_ref_time(6_889_000 as u64).saturating_mul(r as u64)) - // Standard Error: 1_251_000 - .saturating_add(Weight::from_ref_time(32_938_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) + fn new_session(_r: u32, c: u32, ) -> Weight { + // Minimum execution time: 20_379 nanoseconds. + Weight::from_ref_time(20_561_000) + // Standard Error: 745_279 + .saturating_add(Weight::from_ref_time(26_681_327).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs index ca74b6b56f6..e045ec0af7c 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-26, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm2`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -47,81 +47,81 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 20_538 nanoseconds. - Weight::from_ref_time(21_429_260 as u64) - // Standard Error: 10 - .saturating_add(Weight::from_ref_time(398 as u64).saturating_mul(z as u64)) + // Minimum execution time: 15_515 nanoseconds. + Weight::from_ref_time(15_923_915) + // Standard Error: 2 + .saturating_add(Weight::from_ref_time(543).saturating_mul(z.into())) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 49_619 nanoseconds. - Weight::from_ref_time(39_692_148 as u64) - // Standard Error: 795 - .saturating_add(Weight::from_ref_time(107_929 as u64).saturating_mul(s as u64)) + // Minimum execution time: 44_150 nanoseconds. + Weight::from_ref_time(36_429_036) + // Standard Error: 770 + .saturating_add(Weight::from_ref_time(87_020).saturating_mul(s.into())) // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_563 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + .saturating_add(Weight::from_ref_time(1_568).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 39_162 nanoseconds. - Weight::from_ref_time(27_925_170 as u64) - // Standard Error: 771 - .saturating_add(Weight::from_ref_time(125_006 as u64).saturating_mul(s as u64)) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_587 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 34_522 nanoseconds. + Weight::from_ref_time(27_056_839) + // Standard Error: 879 + .saturating_add(Weight::from_ref_time(81_564).saturating_mul(s.into())) + // Standard Error: 8 + .saturating_add(Weight::from_ref_time(1_554).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 54_676 nanoseconds. - Weight::from_ref_time(42_343_658 as u64) - // Standard Error: 915 - .saturating_add(Weight::from_ref_time(143_916 as u64).saturating_mul(s as u64)) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_486 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 48_530 nanoseconds. + Weight::from_ref_time(39_011_142) + // Standard Error: 1_112 + .saturating_add(Weight::from_ref_time(102_217).saturating_mul(s.into())) + // Standard Error: 10 + .saturating_add(Weight::from_ref_time(1_585).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 34_863 nanoseconds. - Weight::from_ref_time(37_816_741 as u64) - // Standard Error: 1_209 - .saturating_add(Weight::from_ref_time(126_254 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_849 nanoseconds. + Weight::from_ref_time(35_132_911) + // Standard Error: 1_202 + .saturating_add(Weight::from_ref_time(93_477).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 25_841 nanoseconds. - Weight::from_ref_time(27_329_266 as u64) - // Standard Error: 667 - .saturating_add(Weight::from_ref_time(126_214 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_309 nanoseconds. + Weight::from_ref_time(25_684_371) + // Standard Error: 709 + .saturating_add(Weight::from_ref_time(85_857).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 34_887 nanoseconds. - Weight::from_ref_time(37_482_449 as u64) - // Standard Error: 1_063 - .saturating_add(Weight::from_ref_time(132_406 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_251 nanoseconds. + Weight::from_ref_time(35_331_884) + // Standard Error: 1_201 + .saturating_add(Weight::from_ref_time(92_906).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs index 04baba21544..0be46d4004f 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(23_935_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(68_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) + // Minimum execution time: 21_377 nanoseconds. + Weight::from_ref_time(22_489_158) + // Standard Error: 1_714 + .saturating_add(Weight::from_ref_time(44_904).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +61,42 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(42_650_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(121_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(56_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 39_613 nanoseconds. + Weight::from_ref_time(39_452_331) + // Standard Error: 1_633 + .saturating_add(Weight::from_ref_time(130_771).saturating_mul(a.into())) + // Standard Error: 1_687 + .saturating_add(Weight::from_ref_time(45_617).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(29_249_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(132_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(23_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 28_265 nanoseconds. + Weight::from_ref_time(29_511_001) + // Standard Error: 2_681 + .saturating_add(Weight::from_ref_time(96_170).saturating_mul(a.into())) + // Standard Error: 2_770 + .saturating_add(Weight::from_ref_time(4_079).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(29_288_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(136_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(18_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 27_527 nanoseconds. + Weight::from_ref_time(28_797_699) + // Standard Error: 1_457 + .saturating_add(Weight::from_ref_time(114_616).saturating_mul(a.into())) + // Standard Error: 1_505 + .saturating_add(Weight::from_ref_time(9_138).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +104,64 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(37_822_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(70_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_013 nanoseconds. + Weight::from_ref_time(36_879_251) + // Standard Error: 1_931 + .saturating_add(Weight::from_ref_time(107_016).saturating_mul(a.into())) + // Standard Error: 1_995 + .saturating_add(Weight::from_ref_time(43_613).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(32_025_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(77_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 29_509 nanoseconds. + Weight::from_ref_time(30_966_207) + // Standard Error: 2_273 + .saturating_add(Weight::from_ref_time(56_195).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(31_970_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(88_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 28_747 nanoseconds. + Weight::from_ref_time(30_716_505) + // Standard Error: 2_029 + .saturating_add(Weight::from_ref_time(87_941).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(27_683_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(51_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_788 nanoseconds. + Weight::from_ref_time(26_975_282) + // Standard Error: 1_718 + .saturating_add(Weight::from_ref_time(40_720).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(34_807_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(9_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_514 nanoseconds. + Weight::from_ref_time(33_130_868) + // Standard Error: 1_738 + .saturating_add(Weight::from_ref_time(24_538).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(28_997_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(46_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 27_707 nanoseconds. + Weight::from_ref_time(28_793_891) + // Standard Error: 1_525 + .saturating_add(Weight::from_ref_time(38_793).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs index 3cda2056f0e..362e0e9c8d3 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,17 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(24_731_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 22_362 nanoseconds. + Weight::from_ref_time(23_023_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(20_852_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 18_914 nanoseconds. + Weight::from_ref_time(19_452_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs index 784b0043cdb..77d59062435 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,19 +40,22 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) + // Storage: Aura CurrentSlot (r:1 w:0) fn set() -> Weight { - Weight::from_ref_time(7_972_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 9_174 nanoseconds. + Weight::from_ref_time(9_480_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - Weight::from_ref_time(4_333_000 as u64) + // Minimum execution time: 3_748 nanoseconds. + Weight::from_ref_time(3_835_000) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs index 7f558a78525..54fc8c4ccbf 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_uniques` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -49,16 +49,18 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(32_952_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 29_979 nanoseconds. + Weight::from_ref_time(30_823_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(21_878_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 20_431 nanoseconds. + Weight::from_ref_time(20_789_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -72,191 +74,215 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 14_000 - .saturating_add(Weight::from_ref_time(10_327_000 as u64).saturating_mul(n as u64)) - // Standard Error: 14_000 - .saturating_add(Weight::from_ref_time(1_703_000 as u64).saturating_mul(m as u64)) - // Standard Error: 14_000 - .saturating_add(Weight::from_ref_time(1_599_000 as u64).saturating_mul(a as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) - .saturating_add(T::DbWeight::get().writes(4 as u64)) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(n as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(m as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) + // Minimum execution time: 2_336_630 nanoseconds. + Weight::from_ref_time(2_360_459_000) + // Standard Error: 26_301 + .saturating_add(Weight::from_ref_time(8_279_472).saturating_mul(n.into())) + // Standard Error: 26_301 + .saturating_add(Weight::from_ref_time(232_669).saturating_mul(m.into())) + // Standard Error: 26_301 + .saturating_add(Weight::from_ref_time(307_377).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(42_048_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + // Minimum execution time: 37_821 nanoseconds. + Weight::from_ref_time(38_389_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(45_139_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 40_176 nanoseconds. + Weight::from_ref_time(40_413_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(35_141_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 31_074 nanoseconds. + Weight::from_ref_time(31_629_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:102 w:102) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 12_000 - .saturating_add(Weight::from_ref_time(11_923_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 20_792 nanoseconds. + Weight::from_ref_time(20_936_000) + // Standard Error: 14_018 + .saturating_add(Weight::from_ref_time(11_130_081).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(27_789_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 24_049 nanoseconds. + Weight::from_ref_time(24_456_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(27_646_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_941 nanoseconds. + Weight::from_ref_time(24_402_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(22_691_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_759 nanoseconds. + Weight::from_ref_time(20_029_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(22_442_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_735 nanoseconds. + Weight::from_ref_time(20_157_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(31_723_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 27_888 nanoseconds. + Weight::from_ref_time(28_286_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(23_679_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_719 nanoseconds. + Weight::from_ref_time(21_372_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(26_006_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 23_332 nanoseconds. + Weight::from_ref_time(23_729_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(50_636_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 44_197 nanoseconds. + Weight::from_ref_time(44_890_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(48_616_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 43_965 nanoseconds. + Weight::from_ref_time(44_326_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(40_123_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 35_462 nanoseconds. + Weight::from_ref_time(35_821_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(43_104_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_443 nanoseconds. + Weight::from_ref_time(37_893_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(39_039_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_787 nanoseconds. + Weight::from_ref_time(35_466_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(39_647_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 33_943 nanoseconds. + Weight::from_ref_time(34_276_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(30_019_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_769 nanoseconds. + Weight::from_ref_time(26_260_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(29_229_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_005 nanoseconds. + Weight::from_ref_time(26_592_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(26_650_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_822 nanoseconds. + Weight::from_ref_time(24_168_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(25_238_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_531 nanoseconds. + Weight::from_ref_time(22_908_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(26_334_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_044 nanoseconds. + Weight::from_ref_time(23_469_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(46_144_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 40_549 nanoseconds. + Weight::from_ref_time(41_982_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs index d504d467191..0fc4e34bda1 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,31 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(21_360_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_860_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 12_596 nanoseconds. + Weight::from_ref_time(23_876_503) + // Standard Error: 2_470 + .saturating_add(Weight::from_ref_time(3_650_505).saturating_mul(c.into())) } fn as_derivative() -> Weight { - Weight::from_ref_time(6_860_000 as u64) + // Minimum execution time: 6_424 nanoseconds. + Weight::from_ref_time(6_541_000) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(14_622_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(4_028_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 12_873 nanoseconds. + Weight::from_ref_time(16_562_373) + // Standard Error: 3_653 + .saturating_add(Weight::from_ref_time(3_854_429).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - Weight::from_ref_time(15_303_000 as u64) + // Minimum execution time: 14_691 nanoseconds. + Weight::from_ref_time(15_077_000) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(19_985_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_859_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 12_340 nanoseconds. + Weight::from_ref_time(17_476_684) + // Standard Error: 2_684 + .saturating_add(Weight::from_ref_time(3_661_082).saturating_mul(c.into())) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 900472b6c9d..338aafb1d30 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::fungible` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -50,13 +50,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(33_878_000 as u64) + Weight::from_ref_time(31_628_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(39_130_000 as u64) + Weight::from_ref_time(36_286_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,16 +68,16 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(54_404_000 as u64) + Weight::from_ref_time(51_189_000 as u64) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(6_586_000 as u64) + Weight::from_ref_time(6_157_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(34_055_000 as u64) + Weight::from_ref_time(32_614_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -89,7 +89,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(50_905_000 as u64) + Weight::from_ref_time(49_945_000 as u64) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -100,7 +100,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(26_715_000 as u64) + Weight::from_ref_time(26_905_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index bd9ac30b57c..91d5d5cd102 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(693_490_000 as u64) + Weight::from_ref_time(684_287_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(9_276_000 as u64) + Weight::from_ref_time(8_580_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(17_581_000 as u64) + Weight::from_ref_time(16_082_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(20_807_000 as u64) + Weight::from_ref_time(19_394_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(9_523_000 as u64) + Weight::from_ref_time(8_833_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_732_000 as u64) + Weight::from_ref_time(5_128_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_666_000 as u64) + Weight::from_ref_time(5_081_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_621_000 as u64) + Weight::from_ref_time(5_196_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(6_570_000 as u64) + Weight::from_ref_time(6_199_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_773_000 as u64) + Weight::from_ref_time(5_078_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(16_085_000 as u64) + Weight::from_ref_time(14_742_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(12_664_000 as u64) + Weight::from_ref_time(20_490_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_774_000 as u64) + Weight::from_ref_time(5_024_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +114,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(19_102_000 as u64) + Weight::from_ref_time(17_473_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(8_841_000 as u64) + Weight::from_ref_time(7_230_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,7 +130,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(864_425_000 as u64) + Weight::from_ref_time(897_033_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index eaaa04f2f67..0095e4fd1e3 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -24,9 +24,12 @@ use frame_support::{ use pallet_xcm::XcmPassthrough; use parachains_common::{ impls::ToStakingPot, - xcm_config::{DenyReserveTransferToRelayChain, DenyThenTry}, + xcm_config::{ + AssetFeeAsExistentialDepositMultiplier, DenyReserveTransferToRelayChain, DenyThenTry, + }, }; use polkadot_parachain::primitives::Sibling; +use sp_runtime::traits::ConvertInto; use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, @@ -154,6 +157,12 @@ pub type Barrier = DenyThenTry< ), >; +pub type AssetFeeAsExistentialDepositMultiplierFeeCharger = AssetFeeAsExistentialDepositMultiplier< + Runtime, + WeightToFee, + pallet_assets::BalanceToAssetBalance, +>; + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -172,8 +181,25 @@ impl xcm_executor::Config for XcmConfig { RuntimeCall, MaxInstructions, >; - type Trader = - UsingComponents>; + type Trader = ( + UsingComponents>, + cumulus_primitives_utility::TakeFirstAssetTrader< + AccountId, + AssetFeeAsExistentialDepositMultiplierFeeCharger, + ConvertedConcreteAssetId< + AssetId, + Balance, + AsPrefixedGeneralIndex, + JustTry, + >, + Assets, + cumulus_primitives_utility::XcmFeesTo32ByteAccount< + FungiblesTransactor, + AccountId, + XcmAssetFeesReceiver, + >, + >, + ); type ResponseHandler = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; diff --git a/parachains/runtimes/assets/statemint/tests/tests.rs b/parachains/runtimes/assets/statemint/tests/tests.rs index 77cb45c1cc5..50c0f904eb1 100644 --- a/parachains/runtimes/assets/statemint/tests/tests.rs +++ b/parachains/runtimes/assets/statemint/tests/tests.rs @@ -1,20 +1,113 @@ use asset_test_utils::{ExtBuilder, RuntimeHelper}; +use cumulus_primitives_utility::ChargeWeightInFungibles; use frame_support::{ assert_noop, assert_ok, traits::PalletInfo, weights::{Weight, WeightToFee as WeightToFeeT}, }; use parachains_common::{AccountId, StatemintAuraId as AuraId}; +use statemint_runtime::xcm_config::AssetFeeAsExistentialDepositMultiplierFeeCharger; pub use statemint_runtime::{ constants::fee::WeightToFee, xcm_config::XcmConfig, Assets, Balances, ExistentialDeposit, Runtime, SessionKeys, System, }; use xcm::latest::prelude::*; use xcm_executor::traits::WeightTrader; + pub const ALICE: [u8; 32] = [1u8; 32]; #[test] -fn test_asset_xcm_trader_does_not_work_in_statemine() { +fn test_asset_xcm_trader() { + ExtBuilder::::default() + .with_collators(vec![AccountId::from(ALICE)]) + .with_session_keys(vec![( + AccountId::from(ALICE), + AccountId::from(ALICE), + SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, + )]) + .build() + .execute_with(|| { + // We need root origin to create a sufficient asset + let minimum_asset_balance = 333333333_u128; + let local_asset_id = 1; + assert_ok!(Assets::force_create( + RuntimeHelper::::root_origin(), + local_asset_id.into(), + AccountId::from(ALICE).into(), + true, + minimum_asset_balance + )); + + // We first mint enough asset for the account to exist for assets + assert_ok!(Assets::mint( + RuntimeHelper::::origin_of(AccountId::from(ALICE)), + local_asset_id.into(), + AccountId::from(ALICE).into(), + minimum_asset_balance + )); + + // get asset id as multilocation + let asset_multilocation = MultiLocation::new( + 0, + X2( + PalletInstance( + ::PalletInfo::index::().unwrap() + as u8, + ), + GeneralIndex(local_asset_id.into()), + ), + ); + + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); + + // We are going to buy 400e9 weight + // Because of the ED being higher in statemine + // and not to complicate things, we use a little + // bit more of weight + let bought = 400_000_000_000u64; + + // Lets calculate amount needed + let asset_amount_needed = + AssetFeeAsExistentialDepositMultiplierFeeCharger::charge_weight_in_fungibles( + local_asset_id, + Weight::from_ref_time(bought), + ) + .expect("failed to compute"); + + // Lets pay with: asset_amount_needed + asset_amount_extra + let asset_amount_extra = 100_u128; + let asset: MultiAsset = + (asset_multilocation.clone(), asset_amount_needed + asset_amount_extra).into(); + + let mut trader = ::Trader::new(); + + // Lets buy_weight and make sure buy_weight does not return an error + match trader.buy_weight(bought, asset.into()) { + Ok(unused_assets) => { + // Check whether a correct amount of unused assets is returned + assert_ok!(unused_assets + .ensure_contains(&(asset_multilocation, asset_amount_extra).into())); + }, + Err(e) => assert!(false, "Expected Ok(_). Got {:#?}", e), + } + + // Drop trader + drop(trader); + + // Make sure author(Alice) has received the amount + assert_eq!( + Assets::balance(1, AccountId::from(ALICE)), + minimum_asset_balance + asset_amount_needed + ); + + // We also need to ensure the total supply increased + assert_eq!(Assets::total_supply(1), minimum_asset_balance + asset_amount_needed); + }); +} + +#[test] +fn test_asset_xcm_trader_with_refund() { ExtBuilder::::default() .with_collators(vec![AccountId::from(ALICE)]) .with_session_keys(vec![( @@ -28,12 +121,20 @@ fn test_asset_xcm_trader_does_not_work_in_statemine() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() )); + // We first mint enough asset for the account to exist for assets + assert_ok!(Assets::mint( + RuntimeHelper::::origin_of(AccountId::from(ALICE)), + 1.into(), + AccountId::from(ALICE).into(), + ExistentialDeposit::get() + )); + let mut trader = ::Trader::new(); // Set Alice as block author, who will receive fees @@ -45,8 +146,87 @@ fn test_asset_xcm_trader_does_not_work_in_statemine() { // bit more of weight let bought = 400_000_000_000u64; + let asset_multilocation = MultiLocation::new( + 0, + X2( + PalletInstance( + ::PalletInfo::index::().unwrap() + as u8, + ), + GeneralIndex(1), + ), + ); + // lets calculate amount needed - let amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); + + let asset: MultiAsset = (asset_multilocation.clone(), amount_bought).into(); + + // Make sure buy_weight does not return an error + assert_ok!(trader.buy_weight(bought, asset.clone().into())); + + // Make sure again buy_weight does return an error + assert_noop!(trader.buy_weight(bought, asset.into()), XcmError::NotWithdrawable); + + // We actually use half of the weight + let weight_used = bought / 2; + + // Make sure refurnd works. + let amount_refunded = + WeightToFee::weight_to_fee(&Weight::from_ref_time(bought - weight_used)); + + assert_eq!( + trader.refund_weight(bought - weight_used), + Some((asset_multilocation, amount_refunded).into()) + ); + + // Drop trader + drop(trader); + + // We only should have paid for half of the bought weight + let fees_paid = WeightToFee::weight_to_fee(&Weight::from_ref_time(weight_used)); + + assert_eq!( + Assets::balance(1, AccountId::from(ALICE)), + ExistentialDeposit::get() + fees_paid + ); + + // We also need to ensure the total supply increased + assert_eq!(Assets::total_supply(1), ExistentialDeposit::get() + fees_paid); + }); +} + +#[test] +fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { + ExtBuilder::::default() + .with_collators(vec![AccountId::from(ALICE)]) + .with_session_keys(vec![( + AccountId::from(ALICE), + AccountId::from(ALICE), + SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, + )]) + .build() + .execute_with(|| { + // We need root origin to create a sufficient asset + // We set existential deposit to be identical to the one for Balances first + assert_ok!(Assets::force_create( + RuntimeHelper::::root_origin(), + 1.into(), + AccountId::from(ALICE).into(), + true, + ExistentialDeposit::get() + )); + + let mut trader = ::Trader::new(); + + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); + + // We are going to buy 50e9 weight + // Because of the ED being higher in statemine + // and not to complicate things, we use a little + // bit more of weight + let bought = 50_000_000_000u64; let asset_multilocation = MultiLocation::new( 0, @@ -59,9 +239,16 @@ fn test_asset_xcm_trader_does_not_work_in_statemine() { ), ); - let asset: MultiAsset = (asset_multilocation, amount_needed).into(); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); - // Buy weight should return an error, since asset trader not installed + assert!( + amount_bought < ExistentialDeposit::get(), + "we are testing what happens when the amount does not exceed ED" + ); + + let asset: MultiAsset = (asset_multilocation.clone(), amount_bought).into(); + + // Buy weight should return an error assert_noop!(trader.buy_weight(bought, asset.into()), XcmError::TooExpensive); // not credited since the ED is higher than this value @@ -71,3 +258,146 @@ fn test_asset_xcm_trader_does_not_work_in_statemine() { assert_eq!(Assets::total_supply(1), 0); }); } + +#[test] +fn test_that_buying_ed_refund_does_not_refund() { + ExtBuilder::::default() + .with_collators(vec![AccountId::from(ALICE)]) + .with_session_keys(vec![( + AccountId::from(ALICE), + AccountId::from(ALICE), + SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, + )]) + .build() + .execute_with(|| { + // We need root origin to create a sufficient asset + // We set existential deposit to be identical to the one for Balances first + assert_ok!(Assets::force_create( + RuntimeHelper::::root_origin(), + 1.into(), + AccountId::from(ALICE).into(), + true, + ExistentialDeposit::get() + )); + + let mut trader = ::Trader::new(); + + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); + + // We are gonna buy ED + let bought: u64 = ExistentialDeposit::get().try_into().unwrap(); + + let asset_multilocation = MultiLocation::new( + 0, + X2( + PalletInstance( + ::PalletInfo::index::().unwrap() + as u8, + ), + GeneralIndex(1), + ), + ); + + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); + + assert!( + amount_bought < ExistentialDeposit::get(), + "we are testing what happens when the amount does not exceed ED" + ); + + // We know we will have to buy at least ED, so lets make sure first it will + // fail with a payment of less than ED + let asset: MultiAsset = (asset_multilocation.clone(), amount_bought).into(); + assert_noop!(trader.buy_weight(bought, asset.into()), XcmError::TooExpensive); + + // Now lets buy ED at least + let asset: MultiAsset = (asset_multilocation.clone(), ExistentialDeposit::get()).into(); + + // Buy weight should work + assert_ok!(trader.buy_weight(bought, asset.into())); + + // Should return None. We have a specific check making sure we dont go below ED for + // drop payment + assert_eq!(trader.refund_weight(bought), None); + + // Drop trader + drop(trader); + + // Make sure author(Alice) has received the amount + assert_eq!(Assets::balance(1, AccountId::from(ALICE)), ExistentialDeposit::get()); + + // We also need to ensure the total supply increased + assert_eq!(Assets::total_supply(1), ExistentialDeposit::get()); + }); +} + +#[test] +fn test_asset_xcm_trader_not_possible_for_non_sufficient_assets() { + ExtBuilder::::default() + .with_collators(vec![AccountId::from(ALICE)]) + .with_session_keys(vec![( + AccountId::from(ALICE), + AccountId::from(ALICE), + SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, + )]) + .build() + .execute_with(|| { + // Create a non-sufficient asset + let minimum_asset_balance = 1_000_000_u128; + assert_ok!(Assets::force_create( + RuntimeHelper::::root_origin(), + 1.into(), + AccountId::from(ALICE).into(), + false, + minimum_asset_balance + )); + + // We first mint enough asset for the account to exist for assets + assert_ok!(Assets::mint( + RuntimeHelper::::origin_of(AccountId::from(ALICE)), + 1.into(), + AccountId::from(ALICE).into(), + minimum_asset_balance + )); + + let mut trader = ::Trader::new(); + + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); + + // We are going to buy 400e9 weight + // Because of the ED being higher in statemine + // and not to complicate things, we use a little + // bit more of weight + let bought = 400_000_000_000u64; + + // lets calculate amount needed + let asset_amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); + + let asset_multilocation = MultiLocation::new( + 0, + X2( + PalletInstance( + ::PalletInfo::index::().unwrap() + as u8, + ), + GeneralIndex(1), + ), + ); + + let asset: MultiAsset = (asset_multilocation, asset_amount_needed).into(); + + // Make sure again buy_weight does return an error + assert_noop!(trader.buy_weight(bought, asset.into()), XcmError::TooExpensive); + + // Drop trader + drop(trader); + + // Make sure author(Alice) has NOT received the amount + assert_eq!(Assets::balance(1, AccountId::from(ALICE)), minimum_asset_balance); + + // We also need to ensure the total supply NOT increased + assert_eq!(Assets::total_supply(1), minimum_asset_balance); + }); +} diff --git a/parachains/runtimes/assets/test-utils/Cargo.toml b/parachains/runtimes/assets/test-utils/Cargo.toml index 147343a3686..6a0a6b6c387 100644 --- a/parachains/runtimes/assets/test-utils/Cargo.toml +++ b/parachains/runtimes/assets/test-utils/Cargo.toml @@ -9,15 +9,16 @@ description = "Statemint parachain runtime" # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } + # Cumulus pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } @@ -27,7 +28,7 @@ parachains-common = { path = "../../../common", default-features = false } hex-literal = "0.3.4" [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 496292a0916..d87ff752f01 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -9,51 +9,51 @@ description = "Westend variant of Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -westend-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +westend-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,14 +68,14 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.36" } [dev-dependencies] hex-literal = "0.3.4" asset-test-utils = { path = "../test-utils"} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] @@ -108,7 +108,7 @@ try-runtime = [ "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", "frame-system/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", "pallet-asset-tx-payment/try-runtime", "pallet-assets/try-runtime", "pallet-aura/try-runtime", diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index e02e75a694b..7f5e7b1b7a4 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -49,7 +49,7 @@ use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::{AsEnsureOriginWithArg, InstanceFilter}, + traits::{AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, InstanceFilter}, weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; @@ -85,10 +85,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westmint"), impl_name: create_runtime_str!("westmint"), authoring_version: 1, - spec_version: 9310, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 8, + transaction_version: 11, state_version: 0, }; @@ -151,37 +151,27 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; -} - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; + type UncleGenerations = ConstU32<0>; type FilterUncle = (); type EventHandler = (CollatorSelection,); } parameter_types! { pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const MaxLocks: u32 = 50; - pub const MaxReserves: u32 = 50; } impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; + type MaxLocks = ConstU32<50>; /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. @@ -190,14 +180,13 @@ impl pallet_balances::Config for Runtime { type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxReserves = MaxReserves; + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; } parameter_types! { /// Relay Chain `TransactionByteFee` / 10 pub const TransactionByteFee: Balance = 1 * MILLICENTS; - pub const OperationalFeeMultiplier: u8 = 5; } impl pallet_transaction_payment::Config for Runtime { @@ -207,7 +196,7 @@ impl pallet_transaction_payment::Config for Runtime { type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } parameter_types! { @@ -227,7 +216,9 @@ impl pallet_assets::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; + type AssetIdParameter = codec::Compact; type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; type ForceOrigin = AssetsForceOrigin; type AssetDeposit = AssetDeposit; type MetadataDepositBase = MetadataDepositBase; @@ -238,6 +229,9 @@ impl pallet_assets::Config for Runtime { type Extra = (); type WeightInfo = weights::pallet_assets::WeightInfo; type AssetAccountDeposit = AssetAccountDeposit; + type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); } parameter_types! { @@ -245,7 +239,7 @@ parameter_types! { pub const DepositBase: Balance = deposit(1, 88); // Additional storage item size of 32 bytes. pub const DepositFactor: Balance = deposit(0, 32); - pub const MaxSignatories: u16 = 100; + pub const MaxSignatories: u32 = 100; } impl pallet_multisig::Config for Runtime { @@ -340,7 +334,10 @@ impl InstanceFilter for ProxyType { ProxyType::AssetOwner => matches!( c, RuntimeCall::Assets(pallet_assets::Call::create { .. }) | - RuntimeCall::Assets(pallet_assets::Call::destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::start_destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy_accounts { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy_approvals { .. }) | + RuntimeCall::Assets(pallet_assets::Call::finish_destroy { .. }) | RuntimeCall::Assets(pallet_assets::Call::transfer_ownership { .. }) | RuntimeCall::Assets(pallet_assets::Call::set_team { .. }) | RuntimeCall::Assets(pallet_assets::Call::set_metadata { .. }) | @@ -454,7 +451,6 @@ impl cumulus_pallet_dmp_queue::Config for Runtime { parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; - pub const MaxAuthorities: u32 = 100_000; } impl pallet_session::Config for Runtime { @@ -465,7 +461,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = weights::pallet_session::WeightInfo; @@ -474,7 +470,7 @@ impl pallet_session::Config for Runtime { impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; } parameter_types! { @@ -613,6 +609,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -620,7 +617,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - (), + pallet_balances::migration::MigrateToTrackInactive, >; #[cfg(feature = "runtime-benchmarks")] @@ -774,21 +771,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade westmint."); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::westmint", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } diff --git a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs index 4df6a114f95..e5bcc72a77b 100644 --- a/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `cumulus_pallet_xcmp_queue` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,14 +48,16 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_463_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_777 nanoseconds. + Weight::from_ref_time(7_022_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_221_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 7_026 nanoseconds. + Weight::from_ref_time(7_206_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs index 37115922a59..e967f4820a1 100644 --- a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,51 +40,59 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. - fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + fn remark(b: u32, ) -> Weight { + // Minimum execution time: 3_875 nanoseconds. + Weight::from_ref_time(3_969_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(412).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + // Minimum execution time: 12_604 nanoseconds. + Weight::from_ref_time(12_909_000) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_ref_time(1_769).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(8_984_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 8_643 nanoseconds. + Weight::from_ref_time(9_165_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(631_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 3_751 nanoseconds. + Weight::from_ref_time(3_968_000) + // Standard Error: 2_178 + .saturating_add(Weight::from_ref_time(620_130).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(565_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 3_824 nanoseconds. + Weight::from_ref_time(3_926_000) + // Standard Error: 1_073 + .saturating_add(Weight::from_ref_time(447_424).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `p` is `[1, 1000]`. + /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_128_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) + // Minimum execution time: 5_507 nanoseconds. + Weight::from_ref_time(5_668_000) + // Standard Error: 1_333 + .saturating_add(Weight::from_ref_time(970_340).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs index 9372ce6d998..be5f3fa94b4 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_assets` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,194 +40,236 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) + // Storage: System Account (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(31_293_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 27_639 nanoseconds. + Weight::from_ref_time(28_249_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(18_434_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 17_537 nanoseconds. + Weight::from_ref_time(17_837_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Assets Asset (r:1 w:1) + fn start_destroy() -> Weight { + // Minimum execution time: 19_233 nanoseconds. + Weight::from_ref_time(19_550_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Account (r:1 w:0) + // Storage: System Account (r:20 w:20) + /// The range of component `c` is `[0, 1000]`. + fn destroy_accounts(c: u32, ) -> Weight { + // Minimum execution time: 21_424 nanoseconds. + Weight::from_ref_time(21_798_000) + // Standard Error: 14_714 + .saturating_add(Weight::from_ref_time(13_304_772).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) + } + // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Approvals (r:1 w:0) + /// The range of component `a` is `[0, 1000]`. + fn destroy_approvals(a: u32, ) -> Weight { + // Minimum execution time: 22_437 nanoseconds. + Weight::from_ref_time(22_782_000) + // Standard Error: 8_328 + .saturating_add(Weight::from_ref_time(13_113_389).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } // Storage: Assets Asset (r:1 w:1) - // Storage: Assets Account (r:5002 w:5001) - // Storage: System Account (r:5000 w:5000) // Storage: Assets Metadata (r:1 w:0) - // Storage: Assets Approvals (r:501 w:500) - /// The range of component `c` is `[0, 5000]`. - /// The range of component `s` is `[0, 5000]`. - /// The range of component `a` is `[0, 500]`. - fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 70_000 - .saturating_add(Weight::from_ref_time(17_625_000 as u64).saturating_mul(c as u64)) - // Standard Error: 70_000 - .saturating_add(Weight::from_ref_time(18_034_000 as u64).saturating_mul(s as u64)) - // Standard Error: 700_000 - .saturating_add(Weight::from_ref_time(16_396_000 as u64).saturating_mul(a as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(a as u64))) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(s as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) + fn finish_destroy() -> Weight { + // Minimum execution time: 18_963 nanoseconds. + Weight::from_ref_time(19_203_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(38_154_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 31_210 nanoseconds. + Weight::from_ref_time(31_775_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(41_980_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 37_564 nanoseconds. + Weight::from_ref_time(37_945_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(54_531_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 47_205 nanoseconds. + Weight::from_ref_time(48_447_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(47_282_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 40_911 nanoseconds. + Weight::from_ref_time(41_564_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(54_238_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 46_813 nanoseconds. + Weight::from_ref_time(47_453_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(26_977_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_433 nanoseconds. + Weight::from_ref_time(22_929_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(26_731_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_022 nanoseconds. + Weight::from_ref_time(22_418_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(23_480_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_413 nanoseconds. + Weight::from_ref_time(19_054_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(22_840_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_704 nanoseconds. + Weight::from_ref_time(19_104_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_506_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_428 nanoseconds. + Weight::from_ref_time(19_849_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(24_610_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_571 nanoseconds. + Weight::from_ref_time(19_090_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, _s: u32, ) -> Weight { - Weight::from_ref_time(38_251_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn set_metadata(_n: u32, s: u32, ) -> Weight { + // Minimum execution time: 30_434 nanoseconds. + Weight::from_ref_time(32_109_763) + // Standard Error: 922 + .saturating_add(Weight::from_ref_time(1_574).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(41_601_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_480 nanoseconds. + Weight::from_ref_time(31_940_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(25_607_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_854 nanoseconds. + Weight::from_ref_time(19_682_117) + // Standard Error: 452 + .saturating_add(Weight::from_ref_time(1_773).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(41_226_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_300 nanoseconds. + Weight::from_ref_time(32_689_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(23_750_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 18_050 nanoseconds. + Weight::from_ref_time(18_460_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(40_582_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 35_007 nanoseconds. + Weight::from_ref_time(35_565_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) + // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(71_770_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) + // Minimum execution time: 61_166 nanoseconds. + Weight::from_ref_time(62_685_000) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(5)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(43_552_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 37_013 nanoseconds. + Weight::from_ref_time(37_554_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(43_189_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 37_450 nanoseconds. + Weight::from_ref_time(38_071_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs index ca77d7a1027..595e03c790a 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,51 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(47_120_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 41_402 nanoseconds. + Weight::from_ref_time(42_194_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(35_145_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_485 nanoseconds. + Weight::from_ref_time(32_000_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(25_940_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_174 nanoseconds. + Weight::from_ref_time(23_744_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(29_130_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_260 nanoseconds. + Weight::from_ref_time(26_966_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(46_032_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 41_394 nanoseconds. + Weight::from_ref_time(42_237_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(40_563_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 36_996 nanoseconds. + Weight::from_ref_time(37_453_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(22_226_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_619 nanoseconds. + Weight::from_ref_time(21_129_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs index a9b257a7094..363e763c266 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,24 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(23_157_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(2_476_000 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_551 nanoseconds. + Weight::from_ref_time(24_081_686) + // Standard Error: 7_962 + .saturating_add(Weight::from_ref_time(2_268_745).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(13_911_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_091 nanoseconds. + Weight::from_ref_time(13_508_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(14_462_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_600 nanoseconds. + Weight::from_ref_time(13_998_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -72,31 +75,34 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: Session NextKeys (r:1 w:0) // Storage: CollatorSelection CandidacyBond (r:1 w:0) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) - /// The range of component `c` is `[1, 1000]`. + /// The range of component `c` is `[1, 999]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(61_134_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(171_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 44_819 nanoseconds. + Weight::from_ref_time(41_349_067) + // Standard Error: 994 + .saturating_add(Weight::from_ref_time(126_808).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[2, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(65_244_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(156_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 32_715 nanoseconds. + Weight::from_ref_time(27_047_739) + // Standard Error: 1_041 + .saturating_add(Weight::from_ref_time(125_513).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(35_627_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 31_048 nanoseconds. + Weight::from_ref_time(31_525_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -105,14 +111,14 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. - fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_285_000 - .saturating_add(Weight::from_ref_time(7_375_000 as u64).saturating_mul(r as u64)) - // Standard Error: 1_285_000 - .saturating_add(Weight::from_ref_time(33_768_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) + fn new_session(_r: u32, c: u32, ) -> Weight { + // Minimum execution time: 20_005 nanoseconds. + Weight::from_ref_time(20_264_000) + // Standard Error: 749_242 + .saturating_add(Weight::from_ref_time(26_726_895).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs index 63ed12365c5..a98eac8d828 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-26, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm2`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -47,81 +47,81 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 21_175 nanoseconds. - Weight::from_ref_time(21_415_507 as u64) + // Minimum execution time: 15_741 nanoseconds. + Weight::from_ref_time(16_117_311) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(535 as u64).saturating_mul(z as u64)) + .saturating_add(Weight::from_ref_time(533).saturating_mul(z.into())) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 50_848 nanoseconds. - Weight::from_ref_time(38_951_816 as u64) - // Standard Error: 591 - .saturating_add(Weight::from_ref_time(129_854 as u64).saturating_mul(s as u64)) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_478 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 43_906 nanoseconds. + Weight::from_ref_time(35_459_211) + // Standard Error: 860 + .saturating_add(Weight::from_ref_time(92_745).saturating_mul(s.into())) + // Standard Error: 8 + .saturating_add(Weight::from_ref_time(1_576).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 38_966 nanoseconds. - Weight::from_ref_time(28_246_168 as u64) - // Standard Error: 854 - .saturating_add(Weight::from_ref_time(120_269 as u64).saturating_mul(s as u64)) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_559 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 34_417 nanoseconds. + Weight::from_ref_time(26_873_359) + // Standard Error: 612 + .saturating_add(Weight::from_ref_time(82_989).saturating_mul(s.into())) + // Standard Error: 5 + .saturating_add(Weight::from_ref_time(1_555).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 53_624 nanoseconds. - Weight::from_ref_time(41_648_270 as u64) - // Standard Error: 899 - .saturating_add(Weight::from_ref_time(146_173 as u64).saturating_mul(s as u64)) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_506 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 48_600 nanoseconds. + Weight::from_ref_time(38_956_898) + // Standard Error: 685 + .saturating_add(Weight::from_ref_time(103_430).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_ref_time(1_577).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 34_216 nanoseconds. - Weight::from_ref_time(37_335_151 as u64) - // Standard Error: 1_250 - .saturating_add(Weight::from_ref_time(127_478 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_984 nanoseconds. + Weight::from_ref_time(34_711_823) + // Standard Error: 1_062 + .saturating_add(Weight::from_ref_time(93_549).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 25_017 nanoseconds. - Weight::from_ref_time(26_893_486 as u64) - // Standard Error: 769 - .saturating_add(Weight::from_ref_time(129_806 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_584 nanoseconds. + Weight::from_ref_time(25_544_719) + // Standard Error: 721 + .saturating_add(Weight::from_ref_time(86_801).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 34_833 nanoseconds. - Weight::from_ref_time(37_327_112 as u64) - // Standard Error: 1_050 - .saturating_add(Weight::from_ref_time(132_018 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_989 nanoseconds. + Weight::from_ref_time(35_081_200) + // Standard Error: 1_043 + .saturating_add(Weight::from_ref_time(91_707).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs index 3364eb69212..220e0f060e7 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(23_821_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(39_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) + // Minimum execution time: 21_884 nanoseconds. + Weight::from_ref_time(22_652_660) + // Standard Error: 1_391 + .saturating_add(Weight::from_ref_time(52_722).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +61,40 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(42_022_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(126_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(64_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 39_603 nanoseconds. + Weight::from_ref_time(40_145_146) + // Standard Error: 1_855 + .saturating_add(Weight::from_ref_time(116_822).saturating_mul(a.into())) + // Standard Error: 1_917 + .saturating_add(Weight::from_ref_time(35_698).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(29_106_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(137_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(18_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + fn remove_announcement(a: u32, _p: u32, ) -> Weight { + // Minimum execution time: 28_768 nanoseconds. + Weight::from_ref_time(29_661_383) + // Standard Error: 1_394 + .saturating_add(Weight::from_ref_time(101_377).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(29_072_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(134_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 28_136 nanoseconds. + Weight::from_ref_time(28_654_813) + // Standard Error: 2_310 + .saturating_add(Weight::from_ref_time(116_567).saturating_mul(a.into())) + // Standard Error: 2_387 + .saturating_add(Weight::from_ref_time(26_495).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +102,64 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(37_840_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(134_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(71_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_129 nanoseconds. + Weight::from_ref_time(36_620_442) + // Standard Error: 2_026 + .saturating_add(Weight::from_ref_time(113_054).saturating_mul(a.into())) + // Standard Error: 2_093 + .saturating_add(Weight::from_ref_time(54_408).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(31_828_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(78_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 29_575 nanoseconds. + Weight::from_ref_time(30_834_020) + // Standard Error: 1_793 + .saturating_add(Weight::from_ref_time(66_803).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(32_104_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(75_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 28_936 nanoseconds. + Weight::from_ref_time(30_985_501) + // Standard Error: 2_622 + .saturating_add(Weight::from_ref_time(77_417).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(27_439_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(49_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_687 nanoseconds. + Weight::from_ref_time(26_828_926) + // Standard Error: 1_639 + .saturating_add(Weight::from_ref_time(57_632).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(34_203_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(19_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_315 nanoseconds. + Weight::from_ref_time(33_370_667) + // Standard Error: 1_821 + .saturating_add(Weight::from_ref_time(27_819).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(28_598_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(51_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 27_479 nanoseconds. + Weight::from_ref_time(28_677_537) + // Standard Error: 1_643 + .saturating_add(Weight::from_ref_time(32_716).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs index 7248e49b630..67d7596784f 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,17 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(23_885_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 21_925 nanoseconds. + Weight::from_ref_time(22_448_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(20_516_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 18_419 nanoseconds. + Weight::from_ref_time(18_941_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs index c2b261279e2..cd569fbbd38 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,19 +40,22 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) + // Storage: Aura CurrentSlot (r:1 w:0) fn set() -> Weight { - Weight::from_ref_time(8_507_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 9_171 nanoseconds. + Weight::from_ref_time(9_347_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - Weight::from_ref_time(4_495_000 as u64) + // Minimum execution time: 3_809 nanoseconds. + Weight::from_ref_time(3_951_000) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs index 80fa090e9e5..b6820449bdd 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_uniques` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -49,16 +49,18 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(32_549_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 29_840 nanoseconds. + Weight::from_ref_time(30_234_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(21_109_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 19_612 nanoseconds. + Weight::from_ref_time(20_068_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -72,191 +74,215 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(10_002_000 as u64).saturating_mul(n as u64)) - // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(1_796_000 as u64).saturating_mul(m as u64)) - // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(1_646_000 as u64).saturating_mul(a as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) - .saturating_add(T::DbWeight::get().writes(4 as u64)) - .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(n as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(m as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) + // Minimum execution time: 2_355_753 nanoseconds. + Weight::from_ref_time(2_374_906_000) + // Standard Error: 25_342 + .saturating_add(Weight::from_ref_time(8_210_192).saturating_mul(n.into())) + // Standard Error: 25_342 + .saturating_add(Weight::from_ref_time(235_106).saturating_mul(m.into())) + // Standard Error: 25_342 + .saturating_add(Weight::from_ref_time(274_994).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(41_837_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + // Minimum execution time: 36_914 nanoseconds. + Weight::from_ref_time(37_683_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(45_164_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 39_149 nanoseconds. + Weight::from_ref_time(39_647_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(34_171_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 30_460 nanoseconds. + Weight::from_ref_time(31_588_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:102 w:102) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 12_000 - .saturating_add(Weight::from_ref_time(11_658_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 19_504 nanoseconds. + Weight::from_ref_time(19_741_000) + // Standard Error: 14_211 + .saturating_add(Weight::from_ref_time(10_863_273).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(27_439_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_535 nanoseconds. + Weight::from_ref_time(24_106_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(27_669_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_904 nanoseconds. + Weight::from_ref_time(24_367_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(22_032_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_209 nanoseconds. + Weight::from_ref_time(19_629_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(21_651_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 19_115 nanoseconds. + Weight::from_ref_time(19_598_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(30_906_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 27_359 nanoseconds. + Weight::from_ref_time(28_095_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(23_165_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_037 nanoseconds. + Weight::from_ref_time(20_352_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(25_865_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 22_282 nanoseconds. + Weight::from_ref_time(22_795_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(50_049_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 44_638 nanoseconds. + Weight::from_ref_time(45_088_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(47_729_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 42_588 nanoseconds. + Weight::from_ref_time(43_510_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(39_470_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_488 nanoseconds. + Weight::from_ref_time(34_982_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(42_195_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_550 nanoseconds. + Weight::from_ref_time(36_983_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(38_154_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 34_149 nanoseconds. + Weight::from_ref_time(35_216_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(38_619_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 33_420 nanoseconds. + Weight::from_ref_time(34_201_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(28_507_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_088 nanoseconds. + Weight::from_ref_time(25_714_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(28_219_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_082 nanoseconds. + Weight::from_ref_time(25_459_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(25_565_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_911 nanoseconds. + Weight::from_ref_time(23_297_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(25_118_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 21_504 nanoseconds. + Weight::from_ref_time(22_185_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(25_956_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 22_189 nanoseconds. + Weight::from_ref_time(22_572_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(46_447_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 41_005 nanoseconds. + Weight::from_ref_time(41_754_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs index 1ec7329b080..205b5c242ad 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,31 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(22_368_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_915_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 13_150 nanoseconds. + Weight::from_ref_time(45_410_670) + // Standard Error: 4_980 + .saturating_add(Weight::from_ref_time(3_648_675).saturating_mul(c.into())) } fn as_derivative() -> Weight { - Weight::from_ref_time(6_839_000 as u64) + // Minimum execution time: 6_612 nanoseconds. + Weight::from_ref_time(6_812_000) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(22_179_000 as u64) - // Standard Error: 16_000 - .saturating_add(Weight::from_ref_time(4_137_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 12_684 nanoseconds. + Weight::from_ref_time(20_159_209) + // Standard Error: 3_165 + .saturating_add(Weight::from_ref_time(3_835_742).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - Weight::from_ref_time(15_391_000 as u64) + // Minimum execution time: 15_037 nanoseconds. + Weight::from_ref_time(15_427_000) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(24_999_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_898_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 13_009 nanoseconds. + Weight::from_ref_time(22_726_275) + // Standard Error: 2_643 + .saturating_add(Weight::from_ref_time(3_653_361).saturating_mul(c.into())) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 08675f10ddd..fcd1b0b5f41 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::fungible` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -50,13 +50,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(34_470_000 as u64) + Weight::from_ref_time(32_238_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(39_616_000 as u64) + Weight::from_ref_time(37_145_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,16 +68,16 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(55_124_000 as u64) + Weight::from_ref_time(52_803_000 as u64) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(6_618_000 as u64) + Weight::from_ref_time(6_248_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(34_636_000 as u64) + Weight::from_ref_time(33_168_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -89,7 +89,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(50_739_000 as u64) + Weight::from_ref_time(53_662_000 as u64) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -100,7 +100,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(27_420_000 as u64) + Weight::from_ref_time(29_189_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 4b07a7da815..ff3da44e032 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(692_482_000 as u64) + Weight::from_ref_time(710_352_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(9_444_000 as u64) + Weight::from_ref_time(8_924_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(17_708_000 as u64) + Weight::from_ref_time(17_278_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(20_476_000 as u64) + Weight::from_ref_time(20_214_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(9_802_000 as u64) + Weight::from_ref_time(9_218_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_466_000 as u64) + Weight::from_ref_time(5_175_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_608_000 as u64) + Weight::from_ref_time(5_145_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_462_000 as u64) + Weight::from_ref_time(5_298_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(6_248_000 as u64) + Weight::from_ref_time(6_134_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_521_000 as u64) + Weight::from_ref_time(5_277_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(15_966_000 as u64) + Weight::from_ref_time(15_270_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(11_936_000 as u64) + Weight::from_ref_time(21_147_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_627_000 as u64) + Weight::from_ref_time(5_429_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +114,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(19_169_000 as u64) + Weight::from_ref_time(18_098_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(8_660_000 as u64) + Weight::from_ref_time(7_527_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,7 +130,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(967_302_000 as u64) + Weight::from_ref_time(927_560_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index 6b36b797207..9d23dd55e59 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -154,6 +154,12 @@ pub type Barrier = DenyThenTry< ), >; +pub type AssetFeeAsExistentialDepositMultiplierFeeCharger = AssetFeeAsExistentialDepositMultiplier< + Runtime, + WeightToFee, + pallet_assets::BalanceToAssetBalance, +>; + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -176,11 +182,7 @@ impl xcm_executor::Config for XcmConfig { UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< AccountId, - AssetFeeAsExistentialDepositMultiplier< - Runtime, - WeightToFee, - pallet_assets::BalanceToAssetBalance, - >, + AssetFeeAsExistentialDepositMultiplierFeeCharger, ConvertedConcreteAssetId< AssetId, Balance, diff --git a/parachains/runtimes/assets/westmint/tests/tests.rs b/parachains/runtimes/assets/westmint/tests/tests.rs index 1bd8f7c5ec8..a7b846d49ec 100644 --- a/parachains/runtimes/assets/westmint/tests/tests.rs +++ b/parachains/runtimes/assets/westmint/tests/tests.rs @@ -1,10 +1,12 @@ use asset_test_utils::{ExtBuilder, RuntimeHelper}; +use cumulus_primitives_utility::ChargeWeightInFungibles; use frame_support::{ assert_noop, assert_ok, traits::PalletInfo, weights::{Weight, WeightToFee as WeightToFeeT}, }; use parachains_common::{AccountId, AuraId}; +use westmint_runtime::xcm_config::AssetFeeAsExistentialDepositMultiplierFeeCharger; pub use westmint_runtime::{ constants::fee::WeightToFee, xcm_config::XcmConfig, Assets, Balances, ExistentialDeposit, Runtime, SessionKeys, System, @@ -26,34 +28,25 @@ fn test_asset_xcm_trader() { .build() .execute_with(|| { // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first + let minimum_asset_balance = 3333333_u128; + let local_asset_id = 1; assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + local_asset_id.into(), AccountId::from(ALICE).into(), true, - ExistentialDeposit::get() + minimum_asset_balance )); // We first mint enough asset for the account to exist for assets assert_ok!(Assets::mint( RuntimeHelper::::origin_of(AccountId::from(ALICE)), - 1, + local_asset_id.into(), AccountId::from(ALICE).into(), - ExistentialDeposit::get() + minimum_asset_balance )); - let mut trader = ::Trader::new(); - - // Set Alice as block author, who will receive fees - RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); - - // We are going to buy 4e9 weight - let bought = 4_000_000_000u64; - - // lets calculate amount needed - let amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); - + // get asset id as multilocation let asset_multilocation = MultiLocation::new( 0, X2( @@ -61,14 +54,40 @@ fn test_asset_xcm_trader() { ::PalletInfo::index::().unwrap() as u8, ), - GeneralIndex(1), + GeneralIndex(local_asset_id.into()), ), ); - let asset: MultiAsset = (asset_multilocation, amount_needed).into(); + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); - // Make sure buy_weight does not return an error - assert_ok!(trader.buy_weight(bought, asset.into())); + // We are going to buy 4e9 weight + let bought = 4_000_000_000u64; + + // Lets calculate amount needed + let asset_amount_needed = + AssetFeeAsExistentialDepositMultiplierFeeCharger::charge_weight_in_fungibles( + local_asset_id, + Weight::from_ref_time(bought), + ) + .expect("failed to compute"); + + // Lets pay with: asset_amount_needed + asset_amount_extra + let asset_amount_extra = 100_u128; + let asset: MultiAsset = + (asset_multilocation.clone(), asset_amount_needed + asset_amount_extra).into(); + + let mut trader = ::Trader::new(); + + // Lets buy_weight and make sure buy_weight does not return an error + match trader.buy_weight(bought, asset.into()) { + Ok(unused_assets) => { + // Check whether a correct amount of unused assets is returned + assert_ok!(unused_assets + .ensure_contains(&(asset_multilocation, asset_amount_extra).into())); + }, + Err(e) => assert!(false, "Expected Ok(_). Got {:#?}", e), + } // Drop trader drop(trader); @@ -76,11 +95,11 @@ fn test_asset_xcm_trader() { // Make sure author(Alice) has received the amount assert_eq!( Assets::balance(1, AccountId::from(ALICE)), - ExistentialDeposit::get() + amount_needed + minimum_asset_balance + asset_amount_needed ); // We also need to ensure the total supply increased - assert_eq!(Assets::total_supply(1), ExistentialDeposit::get() + amount_needed); + assert_eq!(Assets::total_supply(1), minimum_asset_balance + asset_amount_needed); }); } @@ -99,7 +118,7 @@ fn test_asset_xcm_trader_with_refund() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() @@ -108,7 +127,7 @@ fn test_asset_xcm_trader_with_refund() { // We first mint enough asset for the account to exist for assets assert_ok!(Assets::mint( RuntimeHelper::::origin_of(AccountId::from(ALICE)), - 1, + 1.into(), AccountId::from(ALICE).into(), ExistentialDeposit::get() )); @@ -185,7 +204,7 @@ fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() @@ -196,7 +215,7 @@ fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { // Set Alice as block author, who will receive fees RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); - // We are going to buy 4e9 weight + // We are going to buy 5e9 weight let bought = 500_000_000u64; let asset_multilocation = MultiLocation::new( @@ -245,7 +264,7 @@ fn test_that_buying_ed_refund_does_not_refund() { // We set existential deposit to be identical to the one for Balances first assert_ok!(Assets::force_create( RuntimeHelper::::root_origin(), - 1, + 1.into(), AccountId::from(ALICE).into(), true, ExistentialDeposit::get() @@ -301,3 +320,70 @@ fn test_that_buying_ed_refund_does_not_refund() { assert_eq!(Assets::total_supply(1), ExistentialDeposit::get()); }); } + +#[test] +fn test_asset_xcm_trader_not_possible_for_non_sufficient_assets() { + ExtBuilder::::default() + .with_collators(vec![AccountId::from(ALICE)]) + .with_session_keys(vec![( + AccountId::from(ALICE), + AccountId::from(ALICE), + SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, + )]) + .build() + .execute_with(|| { + // Create a non-sufficient asset with specific existential deposit + let minimum_asset_balance = 1_000_000_u128; + assert_ok!(Assets::force_create( + RuntimeHelper::::root_origin(), + 1.into(), + AccountId::from(ALICE).into(), + false, + minimum_asset_balance + )); + + // We first mint enough asset for the account to exist for assets + assert_ok!(Assets::mint( + RuntimeHelper::::origin_of(AccountId::from(ALICE)), + 1.into(), + AccountId::from(ALICE).into(), + minimum_asset_balance + )); + + let mut trader = ::Trader::new(); + + // Set Alice as block author, who will receive fees + RuntimeHelper::::run_to_block(2, Some(AccountId::from(ALICE))); + + // We are going to buy 4e9 weight + let bought = 4_000_000_000u64; + + // lets calculate amount needed + let asset_amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); + + let asset_multilocation = MultiLocation::new( + 0, + X2( + PalletInstance( + ::PalletInfo::index::().unwrap() + as u8, + ), + GeneralIndex(1), + ), + ); + + let asset: MultiAsset = (asset_multilocation, asset_amount_needed).into(); + + // Make sure again buy_weight does return an error + assert_noop!(trader.buy_weight(bought, asset.into()), XcmError::TooExpensive); + + // Drop trader + drop(trader); + + // Make sure author(Alice) has NOT received the amount + assert_eq!(Assets::balance(1, AccountId::from(ALICE)), minimum_asset_balance); + + // We also need to ensure the total supply NOT increased + assert_eq!(Assets::total_supply(1), minimum_asset_balance); + }); +} diff --git a/parachains/runtimes/bridge-hubs/README.md b/parachains/runtimes/bridge-hubs/README.md new file mode 100644 index 00000000000..9b371c639f9 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/README.md @@ -0,0 +1,32 @@ +# Bridge-hubs Parachain + +Implementation of _BridgeHub_, a blockchain to support message passing between Substrate based chains like Polkadot and Kusama networks. + +_BridgeHub_ allows users to: + +- Passing arbitrary messages between different Substrate chains (Polkadot <-> Kusama). + -- Message passing is + +_BridgeHub_ is meant to be **_system parachain_** with main responsibilities: +- sync finality proofs between relay chains +- sync finality proofs between BridgeHub parachains +- pass (XCM) messages between different BridgeHub parachains + +![](./docs/bridge-hub-parachain-design.jpg "Basic deployment setup") + +## How to try locally +``` +cd +cargo build --release -p polkadot-parachain@0.9.320 + +# script expect to have pre-built polkadot binary on the path: ../polkadot/target/release/polkadot +# if using kusama-local, build polkadot with `--features fast-runtime` + +# BridgeHubRococo +zombienet-linux --provider native spawn ./zombienet/examples/bridge_hub_rococo_local_network.toml + +# or + +# BridgeHubKusama +zombienet-linux --provider native spawn ./zombienet/examples/bridge_hub_kusama_local_network.toml +``` diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml new file mode 100644 index 00000000000..ecf2068666b --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml @@ -0,0 +1,169 @@ +[package] +name = "bridge-hub-kusama-runtime" +version = "0.1.0" +authors = ["Parity Technologies "] +edition = "2021" +description = "Kusama's BridgeHub parachain runtime" + +[build-dependencies] +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +hex-literal = { version = "0.3.4" } +log = { version = "0.4.17", default-features = false } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } +serde = { version = "1.0.151", optional = true, features = ["derive"] } +smallvec = "1.8.1" + +# Substrate +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } + +# Polkadot +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } + +# Cumulus +cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } +cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } +cumulus-pallet-session-benchmarking = {path = "../../../../pallets/session-benchmarking", default-features = false, version = "3.0.0"} +cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } +cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } +cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } +cumulus-primitives-timestamp = { path = "../../../../primitives/timestamp", default-features = false } +cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } +pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } +parachain-info = { path = "../../../../parachains/pallets/parachain-info", default-features = false } +parachains-common = { path = "../../../../parachains/common", default-features = false } + +[features] +default = [ + "std", +] +std = [ + "codec/std", + "log/std", + "scale-info/std", + "serde", + "cumulus-pallet-aura-ext/std", + "cumulus-pallet-dmp-queue/std", + "cumulus-pallet-parachain-system/std", + "cumulus-pallet-xcm/std", + "cumulus-pallet-xcmp-queue/std", + "cumulus-primitives-core/std", + "cumulus-primitives-timestamp/std", + "cumulus-primitives-utility/std", + "frame-executive/std", + "frame-support/std", + "frame-system-rpc-runtime-api/std", + "frame-system/std", + "kusama-runtime-constants/std", + "pallet-aura/std", + "pallet-authorship/std", + "pallet-balances/std", + "pallet-collator-selection/std", + "pallet-multisig/std", + "pallet-session/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-transaction-payment/std", + "pallet-utility/std", + "pallet-xcm/std", + "parachain-info/std", + "parachains-common/std", + "polkadot-core-primitives/std", + "polkadot-parachain/std", + "polkadot-runtime-common/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-aura/std", + "sp-core/std", + "sp-inherents/std", + "sp-io/std", + "sp-offchain/std", + "sp-runtime/std", + "sp-session/std", + "sp-std/std", + "sp-transaction-pool/std", + "sp-version/std", + "xcm-builder/std", + "xcm-executor/std", + "xcm/std", +] + +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", + "pallet-xcm/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", + "cumulus-pallet-session-benchmarking/runtime-benchmarks", + "pallet-collator-selection/runtime-benchmarks", + "cumulus-pallet-xcmp-queue/runtime-benchmarks", + "pallet-xcm-benchmarks/runtime-benchmarks", +] + +try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-try-runtime/try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-multisig/try-runtime", + "pallet-session/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", +] diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs new file mode 100644 index 00000000000..9b53d2457df --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs @@ -0,0 +1,9 @@ +use substrate_wasm_builder::WasmBuilder; + +fn main() { + WasmBuilder::new() + .with_current_project() + .export_heap_base() + .import_memory() + .build() +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/constants.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/constants.rs new file mode 100644 index 00000000000..c4943f85232 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/constants.rs @@ -0,0 +1,69 @@ +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod currency { + use kusama_runtime_constants as constants; + use polkadot_core_primitives::Balance; + + /// The existential deposit. Set to 1/10 of its parent Relay Chain. + pub const EXISTENTIAL_DEPOSIT: Balance = constants::currency::EXISTENTIAL_DEPOSIT / 10; + + pub const UNITS: Balance = constants::currency::UNITS; + pub const CENTS: Balance = constants::currency::CENTS; + pub const MILLICENTS: Balance = constants::currency::MILLICENTS; + + pub const fn deposit(items: u32, bytes: u32) -> Balance { + // map to 1/100 of what the kusama relay chain charges (v9020) + constants::currency::deposit(items, bytes) / 100 + } +} + +/// Fee-related. +pub mod fee { + use frame_support::weights::{ + constants::ExtrinsicBaseWeight, WeightToFeeCoefficient, WeightToFeeCoefficients, + WeightToFeePolynomial, + }; + use polkadot_core_primitives::Balance; + use smallvec::smallvec; + pub use sp_runtime::Perbill; + + /// Handles converting a weight scalar to a fee value, based on the scale and granularity of the + /// node's balance type. + /// + /// This should typically create a mapping between the following ranges: + /// - [0, MAXIMUM_BLOCK_WEIGHT] + /// - [Balance::min, Balance::max] + /// + /// Yet, it can be used for any other sort of change to weight-fee. Some examples being: + /// - Setting it to `0` will essentially disable the weight fee. + /// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. + pub struct WeightToFee; + impl WeightToFeePolynomial for WeightToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // in Kusama, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: + // in BridgeHub, we map to 1/10 of that, or 1/100 CENT + let p = super::currency::CENTS; + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs new file mode 100644 index 00000000000..5315810c7cb --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs @@ -0,0 +1,730 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +#![recursion_limit = "256"] + +// Make the WASM binary available. +#[cfg(feature = "std")] +include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); + +pub mod constants; +mod weights; +pub mod xcm_config; + +use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; +use sp_api::impl_runtime_apis; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +use sp_runtime::{ + create_runtime_str, generic, impl_opaque_keys, + traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, +}; + +use sp_std::prelude::*; +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; + +use constants::{currency::*, fee::WeightToFee}; +use frame_support::{ + construct_runtime, + dispatch::DispatchClass, + parameter_types, + traits::{ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything}, + weights::{ConstantMultiplier, Weight}, + PalletId, +}; +use frame_system::{ + limits::{BlockLength, BlockWeights}, + EnsureRoot, +}; +use pallet_xcm::{EnsureXcm, IsMajorityOfBody}; +pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; +pub use sp_runtime::{MultiAddress, Perbill, Permill}; +use xcm_config::{XcmConfig, XcmOriginToTransactDispatchOrigin}; + +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; + +// Polkadot imports +use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; + +use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; + +// XCM Imports +use crate::xcm_config::KsmRelayLocation; +use parachains_common::{ + opaque, AccountId, Balance, BlockNumber, Hash, Header, Index, Signature, + AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, +}; +use xcm::latest::prelude::BodyId; +use xcm_executor::XcmExecutor; + +/// The address format for describing accounts. +pub type Address = MultiAddress; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// A Block signed with a Justification +pub type SignedBlock = generic::SignedBlock; + +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; + +/// The SignedExtension to the basic transaction logic. +pub type SignedExtra = ( + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + frame_system::CheckEra, + frame_system::CheckNonce, + frame_system::CheckWeight, + pallet_transaction_payment::ChargeTransactionPayment, +); + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; + +/// Extrinsic type that has already been checked. +pub type CheckedExtrinsic = generic::CheckedExtrinsic; + +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, +>; + +impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + } +} + +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("bridge-hub-kusama"), + impl_name: create_runtime_str!("bridge-hub-kusama"), + authoring_version: 1, + spec_version: 9360, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + state_version: 1, +}; + +/// The version information used to identify this runtime when compiled natively. +#[cfg(feature = "std")] +pub fn native_version() -> NativeVersion { + NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } +} + +parameter_types! { + pub const Version: RuntimeVersion = VERSION; + + // This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. + // The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the + // `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize + // the lazy contract deletion. + pub RuntimeBlockLength: BlockLength = + BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() + .base_block(BlockExecutionWeight::get()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::Normal, |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .for_class(DispatchClass::Operational, |weights| { + weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); + // Operational transactions have some extra reserved space, so that they + // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. + weights.reserved = Some( + MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT + ); + }) + .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) + .build_or_panic(); + pub const SS58Prefix: u8 = 2; +} + +// Configure FRAME pallets to include in runtime. + +impl frame_system::Config for Runtime { + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The aggregated dispatch type that is available for extrinsics. + type RuntimeCall = RuntimeCall; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = AccountIdLookup; + /// The index type for storing how many extrinsics an account has signed. + type Index = Index; + /// The index type for blocks. + type BlockNumber = BlockNumber; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The header type. + type Header = generic::Header; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// Runtime version. + type Version = Version; + /// Converts a module to an index of this module in the runtime. + type PalletInfo = PalletInfo; + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; + /// What to do if a new account is created. + type OnNewAccount = (); + /// What to do if an account is fully reaped from the system. + type OnKilledAccount = (); + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// The basic call filter to use in dispatchable. + type BaseCallFilter = Everything; + /// Weight information for the extrinsics of this pallet. + type SystemWeightInfo = weights::frame_system::WeightInfo; + /// Block & extrinsics weights: base values and limits. + type BlockWeights = RuntimeBlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = RuntimeBlockLength; + type SS58Prefix = SS58Prefix; + /// The action to take on a Runtime Upgrade + type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; + type MaxConsumers = ConstU32<16>; +} + +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; + type WeightInfo = weights::pallet_timestamp::WeightInfo; +} + +impl pallet_authorship::Config for Runtime { + type FindAuthor = pallet_session::FindAccountFromAuthorIndex; + type UncleGenerations = ConstU32<0>; + type FilterUncle = (); + type EventHandler = (CollatorSelection,); +} + +parameter_types! { + pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; +} + +impl pallet_balances::Config for Runtime { + /// The type for recording an account's balance. + type Balance = Balance; + type DustRemoval = (); + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = weights::pallet_balances::WeightInfo; + type MaxLocks = ConstU32<50>; + type MaxReserves = ConstU32<50>; + type ReserveIdentifier = [u8; 8]; +} + +parameter_types! { + /// Relay Chain `TransactionByteFee` / 10 + pub const TransactionByteFee: Balance = 1 * MILLICENTS; +} + +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; + type OperationalFeeMultiplier = ConstU8<5>; + type WeightToFee = WeightToFee; + type LengthToFee = ConstantMultiplier; + type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; +} + +parameter_types! { + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); +} + +impl cumulus_pallet_parachain_system::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnSystemEvent = (); + type SelfParaId = parachain_info::Pallet; + type OutboundXcmpMessageSource = XcmpQueue; + type DmpMessageHandler = DmpQueue; + type ReservedDmpWeight = ReservedDmpWeight; + type XcmpMessageHandler = XcmpQueue; + type ReservedXcmpWeight = ReservedXcmpWeight; + type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; +} + +impl parachain_info::Config for Runtime {} + +impl cumulus_pallet_aura_ext::Config for Runtime {} + +// TODO: map gov2 origins here - after merge https://github.com/paritytech/cumulus/pull/1895 +/// Privileged origin that represents Root or the majority of the Relay Chain Council. +pub type RootOrExecutiveSimpleMajority = EitherOfDiverse< + EnsureRoot, + EnsureXcm>, +>; + +impl cumulus_pallet_xcmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ChannelInfo = ParachainSystem; + type VersionWrapper = PolkadotXcm; + type ExecuteOverweightOrigin = EnsureRoot; + type ControllerOrigin = RootOrExecutiveSimpleMajority; + type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; + type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; +} + +impl cumulus_pallet_dmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ExecuteOverweightOrigin = EnsureRoot; +} + +pub const PERIOD: u32 = 6 * HOURS; +pub const OFFSET: u32 = 0; + +impl pallet_session::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type ValidatorId = ::AccountId; + // we don't have stash and controller, thus we don't need the convert as well. + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ShouldEndSession = pallet_session::PeriodicSessions, ConstU32>; + type NextSessionRotation = pallet_session::PeriodicSessions, ConstU32>; + type SessionManager = CollatorSelection; + // Essentially just Aura, but let's be pedantic. + type SessionHandler = ::KeyTypeIdProviders; + type Keys = SessionKeys; + type WeightInfo = weights::pallet_session::WeightInfo; +} + +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type DisabledValidators = (); + type MaxAuthorities = ConstU32<100_000>; +} + +parameter_types! { + pub const PotId: PalletId = PalletId(*b"PotStake"); + pub const SessionLength: BlockNumber = 6 * HOURS; + pub const ExecutiveBody: BodyId = BodyId::Executive; +} + +// TODO: map gov2 origins here - after merge https://github.com/paritytech/cumulus/pull/1895 +/// We allow root and the Relay Chain council to execute privileged collator selection operations. +pub type CollatorSelectionUpdateOrigin = RootOrExecutiveSimpleMajority; + +impl pallet_collator_selection::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type UpdateOrigin = CollatorSelectionUpdateOrigin; + type PotId = PotId; + type MaxCandidates = ConstU32<1000>; + type MinCandidates = ConstU32<5>; + type MaxInvulnerables = ConstU32<100>; + // should be a multiple of session or things will get inconsistent + type KickThreshold = ConstU32; + type ValidatorId = ::AccountId; + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ValidatorRegistration = Session; + type WeightInfo = weights::pallet_collator_selection::WeightInfo; +} + +parameter_types! { + // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. + pub const DepositBase: Balance = deposit(1, 88); + // Additional storage item size of 32 bytes. + pub const DepositFactor: Balance = deposit(0, 32); +} + +impl pallet_multisig::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type DepositBase = DepositBase; + type DepositFactor = DepositFactor; + type MaxSignatories = ConstU32<100>; + type WeightInfo = weights::pallet_multisig::WeightInfo; +} + +impl pallet_utility::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + type WeightInfo = weights::pallet_utility::WeightInfo; +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = opaque::Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + // System support stuff. + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + ParachainSystem: cumulus_pallet_parachain_system::{ + Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, + } = 1, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, + ParachainInfo: parachain_info::{Pallet, Storage, Config} = 3, + + // Monetary stuff. + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, + TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, + + // Collator support. The order of these 4 are important and shall not change. + Authorship: pallet_authorship::{Pallet, Call, Storage} = 20, + CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, + Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, + Aura: pallet_aura::{Pallet, Storage, Config} = 23, + AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, + + // XCM helpers. + XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, + PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin, Config} = 31, + CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, + DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, + + // Handy utilities. + Utility: pallet_utility::{Pallet, Call, Event} = 40, + Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, + } +); + +#[cfg(feature = "runtime-benchmarks")] +#[macro_use] +extern crate frame_benchmarking; + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + define_benchmarks!( + [frame_system, SystemBench::] + [pallet_balances, Balances] + [pallet_multisig, Multisig] + [pallet_session, SessionBench::] + [pallet_utility, Utility] + [pallet_timestamp, Timestamp] + [pallet_collator_selection, CollatorSelection] + [cumulus_pallet_xcmp_queue, XcmpQueue] + // XCM + // NOTE: Make sure you point to the individual modules below. + [pallet_xcm_benchmarks::fungible, XcmBalances] + [pallet_xcm_benchmarks::generic, XcmGeneric] + ); +} + +impl_runtime_apis! { + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + } + + fn authorities() -> Vec { + Aura::authorities().into_inner() + } + } + + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + OpaqueMetadata::new(Runtime::metadata().into()) + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + block_hash: ::Hash, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx, block_hash) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + SessionKeys::decode_into_raw_public_keys(&encoded) + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Index { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + fn query_info( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + TransactionPayment::query_info(uxt, len) + } + fn query_fee_details( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } + } + + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { + ParachainSystem::collect_collation_info(header) + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, RuntimeBlockWeights::get().max_block) + } + + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + + // This is defined once again in dispatch_benchmark, because list_benchmarks! + // and add_benchmarks! are macros exported by define_benchmarks! macros and those types + // are referenced in that call. + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + + let mut list = Vec::::new(); + list_benchmarks!(list, extra); + + let storage_info = AllPalletsWithSystem::storage_info(); + return (list, storage_info) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError, TrackedStorageKey}; + + use frame_system_benchmarking::Pallet as SystemBench; + impl frame_system_benchmarking::Config for Runtime {} + + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + impl cumulus_pallet_session_benchmarking::Config for Runtime {} + + use xcm::latest::prelude::*; + use xcm_config::KsmRelayLocation; + + impl pallet_xcm_benchmarks::Config for Runtime { + type XcmConfig = xcm_config::XcmConfig; + type AccountIdConverter = xcm_config::LocationToAccountId; + fn valid_destination() -> Result { + Ok(KsmRelayLocation::get()) + } + fn worst_case_holding() -> MultiAssets { + // just concrete assets according to relay chain. + let assets: Vec = vec![ + MultiAsset { + id: Concrete(KsmRelayLocation::get()), + fun: Fungible(1_000_000 * UNITS), + } + ]; + assets.into() + } + } + + parameter_types! { + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + KsmRelayLocation::get(), + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(KsmRelayLocation::get()) }, + )); + pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; + pub const CheckedAccount: Option = None; + } + + impl pallet_xcm_benchmarks::fungible::Config for Runtime { + type TransactAsset = Balances; + + type CheckedAccount = CheckedAccount; + type TrustedTeleporter = TrustedTeleporter; + type TrustedReserve = TrustedReserve; + + fn get_multi_asset() -> MultiAsset { + MultiAsset { + id: Concrete(KsmRelayLocation::get()), + fun: Fungible(1 * UNITS), + } + } + } + + impl pallet_xcm_benchmarks::generic::Config for Runtime { + type RuntimeCall = RuntimeCall; + + fn worst_case_response() -> (u64, Response) { + (0u64, Response::Version(Default::default())) + } + + fn transact_origin() -> Result { + Ok(KsmRelayLocation::get()) + } + + fn subscribe_origin() -> Result { + Ok(KsmRelayLocation::get()) + } + + fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { + let origin = KsmRelayLocation::get(); + let assets: MultiAssets = (Concrete(KsmRelayLocation::get()), 1_000 * UNITS).into(); + let ticket = MultiLocation { parents: 0, interior: Here }; + Ok((origin, ticket, assets)) + } + } + + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + + let whitelist: Vec = vec![ + // Block Number + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), + // Total Issuance + hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), + // Execution Phase + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), + // Event Count + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), + // System Events + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), + ]; + + let mut batches = Vec::::new(); + let params = (&config, &whitelist); + add_benchmarks!(params, batches); + + Ok(batches) + } + } +} + +struct CheckInherents; + +impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { + fn check_inherents( + block: &Block, + relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, + ) -> sp_inherents::CheckInherentsResult { + let relay_chain_slot = relay_state_proof + .read_slot() + .expect("Could not read the relay chain slot from the proof"); + + let inherent_data = + cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( + relay_chain_slot, + sp_std::time::Duration::from_secs(6), + ) + .create_inherent_data() + .expect("Could not create the timestamp inherent data"); + + inherent_data.check_extrinsics(block) + } +} + +cumulus_pallet_parachain_system::register_validate_block! { + Runtime = Runtime, + BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, + CheckInherents = CheckInherents, +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs new file mode 100644 index 00000000000..ea8a341b58b --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs @@ -0,0 +1,53 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Importing a block with 0 Extrinsics. + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); + } + + #[cfg(test)] + mod test_weights { + use frame_support::weights::constants; + + /// Checks that the weight exists and is sane. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + let w = super::constants::BlockExecutionWeight::get(); + + // At least 100 µs. + assert!( + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, + "Weight should be at least 100 µs." + ); + // At most 50 ms. + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, + "Weight should be at most 50 ms." + ); + } + } +} diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs similarity index 60% rename from parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs rename to parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs index 8ba86157a1a..3a5de013ea9 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs @@ -1,4 +1,4 @@ -// Copyright 2022 Parity Technologies (UK) Ltd. +// Copyright 2021 Parity Technologies (UK) Ltd. // This file is part of Cumulus. // Cumulus is free software: you can redistribute it and/or modify @@ -14,20 +14,18 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . - //! Autogenerated weights for `cumulus_pallet_xcmp_queue` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 // Executed Command: // ./artifacts/polkadot-parachain // benchmark // pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=westmint-dev +// --chain=bridge-hub-kusama-dev // --execution=wasm // --wasm-execution=compiled // --pallet=cumulus_pallet_xcmp_queue @@ -36,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -45,19 +43,21 @@ use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; -/// Weights for `cumulus_pallet_xcmp_queue`. +/// Weight functions for `cumulus_pallet_xcmp_queue`. pub struct WeightInfo(PhantomData); -impl WeightInfo { +impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) - pub(crate) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(7_499_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn set_config_with_u32() -> Weight { + // Minimum execution time: 6_810 nanoseconds. + Weight::from_ref_time(7_136_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) - pub(crate) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(7_493_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn set_config_with_weight() -> Weight { + // Minimum execution time: 6_891 nanoseconds. + Weight::from_ref_time(7_220_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs new file mode 100644 index 00000000000..0512efb60e2 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs @@ -0,0 +1,53 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Executing a NO-OP `System::remarks` Extrinsic. + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); + } + + #[cfg(test)] + mod test_weights { + use frame_support::weights::constants; + + /// Checks that the weight exists and is sane. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + let w = super::constants::ExtrinsicBaseWeight::get(); + + // At least 10 µs. + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, + "Weight should be at least 10 µs." + ); + // At most 1 ms. + assert!( + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Weight should be at most 1 ms." + ); + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs new file mode 100644 index 00000000000..9e569cdd8ad --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs @@ -0,0 +1,98 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `frame_system` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=frame_system +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `frame_system`. +pub struct WeightInfo(PhantomData); +impl frame_system::WeightInfo for WeightInfo { + /// The range of component `b` is `[0, 3932160]`. + fn remark(b: u32, ) -> Weight { + // Minimum execution time: 3_681 nanoseconds. + Weight::from_ref_time(3_824_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(411).saturating_mul(b.into())) + } + /// The range of component `b` is `[0, 3932160]`. + fn remark_with_event(b: u32, ) -> Weight { + // Minimum execution time: 12_708 nanoseconds. + Weight::from_ref_time(12_912_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(1_773).saturating_mul(b.into())) + } + // Storage: System Digest (r:1 w:1) + // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + fn set_heap_pages() -> Weight { + // Minimum execution time: 7_668 nanoseconds. + Weight::from_ref_time(8_140_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Skipped Metadata (r:0 w:0) + /// The range of component `i` is `[0, 1000]`. + fn set_storage(i: u32, ) -> Weight { + // Minimum execution time: 3_888 nanoseconds. + Weight::from_ref_time(3_952_000) + // Standard Error: 2_160 + .saturating_add(Weight::from_ref_time(615_707).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + } + // Storage: Skipped Metadata (r:0 w:0) + /// The range of component `i` is `[0, 1000]`. + fn kill_storage(i: u32, ) -> Weight { + // Minimum execution time: 3_878 nanoseconds. + Weight::from_ref_time(3_991_000) + // Standard Error: 972 + .saturating_add(Weight::from_ref_time(445_105).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + } + // Storage: Skipped Metadata (r:0 w:0) + /// The range of component `p` is `[0, 1000]`. + fn kill_prefix(p: u32, ) -> Weight { + // Minimum execution time: 5_434 nanoseconds. + Weight::from_ref_time(5_510_000) + // Standard Error: 1_293 + .saturating_add(Weight::from_ref_time(967_708).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs new file mode 100644 index 00000000000..869c03be687 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs @@ -0,0 +1,37 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Expose the auto generated weight files. + +pub mod block_weights; +pub mod cumulus_pallet_xcmp_queue; +pub mod extrinsic_weights; +pub mod frame_system; +pub mod pallet_balances; +pub mod pallet_collator_selection; +pub mod pallet_multisig; +pub mod pallet_session; +pub mod pallet_timestamp; +pub mod pallet_utility; +pub mod paritydb_weights; +pub mod rocksdb_weights; +pub mod xcm; + +pub use block_weights::constants::BlockExecutionWeight; +pub use extrinsic_weights::constants::ExtrinsicBaseWeight; +pub use paritydb_weights::constants::ParityDbWeight; +pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs new file mode 100644 index 00000000000..506bbfa8d43 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs @@ -0,0 +1,98 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_balances` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_balances +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_balances`. +pub struct WeightInfo(PhantomData); +impl pallet_balances::WeightInfo for WeightInfo { + // Storage: System Account (r:1 w:1) + fn transfer() -> Weight { + // Minimum execution time: 41_525 nanoseconds. + Weight::from_ref_time(42_161_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn transfer_keep_alive() -> Weight { + // Minimum execution time: 31_463 nanoseconds. + Weight::from_ref_time(32_025_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn set_balance_creating() -> Weight { + // Minimum execution time: 23_495 nanoseconds. + Weight::from_ref_time(23_752_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn set_balance_killing() -> Weight { + // Minimum execution time: 25_757 nanoseconds. + Weight::from_ref_time(26_221_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:2 w:2) + fn force_transfer() -> Weight { + // Minimum execution time: 40_260 nanoseconds. + Weight::from_ref_time(41_057_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: System Account (r:1 w:1) + fn transfer_all() -> Weight { + // Minimum execution time: 36_058 nanoseconds. + Weight::from_ref_time(36_775_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn force_unreserve() -> Weight { + // Minimum execution time: 20_161 nanoseconds. + Weight::from_ref_time(20_559_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs new file mode 100644 index 00000000000..ded90302efd --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs @@ -0,0 +1,124 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_collator_selection` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_collator_selection +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_collator_selection`. +pub struct WeightInfo(PhantomData); +impl pallet_collator_selection::WeightInfo for WeightInfo { + // Storage: Session NextKeys (r:1 w:0) + // Storage: CollatorSelection Invulnerables (r:0 w:1) + /// The range of component `b` is `[1, 100]`. + fn set_invulnerables(b: u32, ) -> Weight { + // Minimum execution time: 20_105 nanoseconds. + Weight::from_ref_time(23_402_474) + // Standard Error: 5_913 + .saturating_add(Weight::from_ref_time(2_214_697).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: CollatorSelection DesiredCandidates (r:0 w:1) + fn set_desired_candidates() -> Weight { + // Minimum execution time: 12_491 nanoseconds. + Weight::from_ref_time(12_788_000) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: CollatorSelection CandidacyBond (r:0 w:1) + fn set_candidacy_bond() -> Weight { + // Minimum execution time: 12_882 nanoseconds. + Weight::from_ref_time(13_141_000) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: CollatorSelection Candidates (r:1 w:1) + // Storage: CollatorSelection DesiredCandidates (r:1 w:0) + // Storage: CollatorSelection Invulnerables (r:1 w:0) + // Storage: Session NextKeys (r:1 w:0) + // Storage: CollatorSelection CandidacyBond (r:1 w:0) + // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) + /// The range of component `c` is `[1, 999]`. + fn register_as_candidate(c: u32, ) -> Weight { + // Minimum execution time: 44_532 nanoseconds. + Weight::from_ref_time(40_138_818) + // Standard Error: 987 + .saturating_add(Weight::from_ref_time(126_048).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: CollatorSelection Candidates (r:1 w:1) + // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) + /// The range of component `c` is `[6, 1000]`. + fn leave_intent(c: u32, ) -> Weight { + // Minimum execution time: 32_931 nanoseconds. + Weight::from_ref_time(26_038_824) + // Standard Error: 1_099 + .saturating_add(Weight::from_ref_time(123_313).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: System Account (r:2 w:2) + // Storage: System BlockWeight (r:1 w:1) + // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) + fn note_author() -> Weight { + // Minimum execution time: 30_412 nanoseconds. + Weight::from_ref_time(30_796_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) + } + // Storage: CollatorSelection Candidates (r:1 w:1) + // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) + // Storage: System Account (r:1 w:1) + // Storage: CollatorSelection Invulnerables (r:1 w:0) + // Storage: System BlockWeight (r:1 w:1) + /// The range of component `r` is `[1, 1000]`. + /// The range of component `c` is `[1, 1000]`. + fn new_session(_r: u32, c: u32, ) -> Weight { + // Minimum execution time: 18_664 nanoseconds. + Weight::from_ref_time(19_115_000) + // Standard Error: 745_087 + .saturating_add(Weight::from_ref_time(26_635_575).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs new file mode 100644 index 00000000000..8dd761a38ea --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs @@ -0,0 +1,128 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_multisig` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_multisig +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_multisig`. +pub struct WeightInfo(PhantomData); +impl pallet_multisig::WeightInfo for WeightInfo { + /// The range of component `z` is `[0, 10000]`. + fn as_multi_threshold_1(z: u32, ) -> Weight { + // Minimum execution time: 15_428 nanoseconds. + Weight::from_ref_time(15_941_235) + // Standard Error: 2 + .saturating_add(Weight::from_ref_time(537).saturating_mul(z.into())) + } + // Storage: Multisig Multisigs (r:1 w:1) + // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_create(s: u32, z: u32, ) -> Weight { + // Minimum execution time: 44_197 nanoseconds. + Weight::from_ref_time(36_539_501) + // Standard Error: 904 + .saturating_add(Weight::from_ref_time(84_250).saturating_mul(s.into())) + // Standard Error: 8 + .saturating_add(Weight::from_ref_time(1_544).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + /// The range of component `s` is `[3, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_approve(s: u32, z: u32, ) -> Weight { + // Minimum execution time: 34_293 nanoseconds. + Weight::from_ref_time(27_691_492) + // Standard Error: 1_234 + .saturating_add(Weight::from_ref_time(76_671).saturating_mul(s.into())) + // Standard Error: 12 + .saturating_add(Weight::from_ref_time(1_515).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + // Storage: System Account (r:1 w:1) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_complete(s: u32, z: u32, ) -> Weight { + // Minimum execution time: 48_305 nanoseconds. + Weight::from_ref_time(38_790_283) + // Standard Error: 649 + .saturating_add(Weight::from_ref_time(101_710).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_ref_time(1_596).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Multisig Multisigs (r:1 w:1) + // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// The range of component `s` is `[2, 100]`. + fn approve_as_multi_create(s: u32, ) -> Weight { + // Minimum execution time: 32_261 nanoseconds. + Weight::from_ref_time(35_136_339) + // Standard Error: 1_102 + .saturating_add(Weight::from_ref_time(87_710).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + /// The range of component `s` is `[2, 100]`. + fn approve_as_multi_approve(s: u32, ) -> Weight { + // Minimum execution time: 23_194 nanoseconds. + Weight::from_ref_time(25_477_839) + // Standard Error: 810 + .saturating_add(Weight::from_ref_time(83_750).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + /// The range of component `s` is `[2, 100]`. + fn cancel_as_multi(s: u32, ) -> Weight { + // Minimum execution time: 33_083 nanoseconds. + Weight::from_ref_time(35_190_588) + // Standard Error: 1_010 + .saturating_add(Weight::from_ref_time(90_855).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs new file mode 100644 index 00000000000..d0e8695fb84 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs @@ -0,0 +1,65 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_session` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_session +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_session`. +pub struct WeightInfo(PhantomData); +impl pallet_session::WeightInfo for WeightInfo { + // Storage: Session NextKeys (r:1 w:1) + // Storage: Session KeyOwner (r:1 w:1) + fn set_keys() -> Weight { + // Minimum execution time: 21_898 nanoseconds. + Weight::from_ref_time(22_451_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Session NextKeys (r:1 w:1) + // Storage: Session KeyOwner (r:0 w:1) + fn purge_keys() -> Weight { + // Minimum execution time: 18_481 nanoseconds. + Weight::from_ref_time(18_900_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } +} diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs similarity index 54% rename from parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs rename to parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs index db40762b6f1..6b1b4fa19ce 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs @@ -1,4 +1,4 @@ -// Copyright 2022 Parity Technologies (UK) Ltd. +// Copyright 2021 Parity Technologies (UK) Ltd. // This file is part of Cumulus. // Cumulus is free software: you can redistribute it and/or modify @@ -14,29 +14,27 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . - -//! Autogenerated weights for `cumulus_pallet_xcmp_queue` +//! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 // Executed Command: // ./artifacts/polkadot-parachain // benchmark // pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=statemint-dev +// --chain=bridge-hub-kusama-dev // --execution=wasm // --wasm-execution=compiled -// --pallet=cumulus_pallet_xcmp_queue +// --pallet=pallet_timestamp // --extrinsic=* // --steps=50 // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -45,19 +43,19 @@ use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; -/// Weights for `cumulus_pallet_xcmp_queue`. +/// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); -impl WeightInfo { - // Storage: XcmpQueue QueueConfig (r:1 w:1) - pub(crate) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(7_362_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) +impl pallet_timestamp::WeightInfo for WeightInfo { + // Storage: Timestamp Now (r:1 w:1) + // Storage: Aura CurrentSlot (r:1 w:0) + fn set() -> Weight { + // Minimum execution time: 9_095 nanoseconds. + Weight::from_ref_time(9_288_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: XcmpQueue QueueConfig (r:1 w:1) - pub(crate) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(7_234_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn on_finalize() -> Weight { + // Minimum execution time: 3_901 nanoseconds. + Weight::from_ref_time(4_060_000) } } diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs new file mode 100644 index 00000000000..6cb7a52357d --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs @@ -0,0 +1,78 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_utility` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_utility +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_utility`. +pub struct WeightInfo(PhantomData); +impl pallet_utility::WeightInfo for WeightInfo { + /// The range of component `c` is `[0, 1000]`. + fn batch(c: u32, ) -> Weight { + // Minimum execution time: 12_045 nanoseconds. + Weight::from_ref_time(18_369_157) + // Standard Error: 2_756 + .saturating_add(Weight::from_ref_time(3_423_771).saturating_mul(c.into())) + } + fn as_derivative() -> Weight { + // Minimum execution time: 6_095 nanoseconds. + Weight::from_ref_time(6_276_000) + } + /// The range of component `c` is `[0, 1000]`. + fn batch_all(c: u32, ) -> Weight { + // Minimum execution time: 12_131 nanoseconds. + Weight::from_ref_time(21_947_782) + // Standard Error: 3_030 + .saturating_add(Weight::from_ref_time(3_548_160).saturating_mul(c.into())) + } + fn dispatch_as() -> Weight { + // Minimum execution time: 13_790 nanoseconds. + Weight::from_ref_time(14_314_000) + } + /// The range of component `c` is `[0, 1000]`. + fn force_batch(c: u32, ) -> Weight { + // Minimum execution time: 11_873 nanoseconds. + Weight::from_ref_time(15_041_181) + // Standard Error: 4_925 + .saturating_add(Weight::from_ref_time(3_443_664).saturating_mul(c.into())) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs new file mode 100644 index 00000000000..4338d928d80 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs @@ -0,0 +1,63 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights + /// are available for brave runtime engineers who may want to try this out as default. + pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::ParityDbWeight as W; + use frame_support::weights::constants; + + /// Checks that all weights exist and have sane values. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + // At least 1 µs. + assert!( + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Read weight should be at least 1 µs." + ); + assert!( + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Write weight should be at least 1 µs." + ); + // At most 1 ms. + assert!( + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Read weight should be at most 1 ms." + ); + assert!( + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Write weight should be at most 1 ms." + ); + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs new file mode 100644 index 00000000000..1d115d963fa --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs @@ -0,0 +1,63 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout + /// the runtime. + pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::RocksDbWeight as W; + use frame_support::weights::constants; + + /// Checks that all weights exist and have sane values. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + // At least 1 µs. + assert!( + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Read weight should be at least 1 µs." + ); + assert!( + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Write weight should be at least 1 µs." + ); + // At most 1 ms. + assert!( + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Read weight should be at most 1 ms." + ); + assert!( + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Write weight should be at most 1 ms." + ); + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs new file mode 100644 index 00000000000..5051255d827 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs @@ -0,0 +1,188 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +mod pallet_xcm_benchmarks_fungible; +mod pallet_xcm_benchmarks_generic; + +use crate::Runtime; +use frame_support::weights::Weight; +use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; +use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; +use sp_std::{cmp, prelude::*}; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + DoubleEncoded, +}; + +trait WeighMultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; +} + +const MAX_ASSETS: u32 = 100; + +impl WeighMultiAssets for MultiAssetFilter { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + let weight = match self { + Self::Definite(assets) => + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() + } +} + +impl WeighMultiAssets for MultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() + } +} + +pub struct BridgeHubKusamaXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for BridgeHubKusamaXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) + } + // Currently there is no trusted reserve + fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { + u64::MAX + } + fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) + } + fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + XcmGeneric::::query_response().ref_time() + } + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) + } + fn transfer_reserve_asset( + assets: &MultiAssets, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) + } + fn transact( + _origin_type: &OriginKind, + _require_weight_at_most: &u64, + _call: &DoubleEncoded, + ) -> XCMWeight { + XcmGeneric::::transact().ref_time() + } + fn hrmp_new_channel_open_request( + _sender: &u32, + _max_message_size: &u32, + _max_capacity: &u32, + ) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn clear_origin() -> XCMWeight { + XcmGeneric::::clear_origin().ref_time() + } + fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { + XcmGeneric::::descend_origin().ref_time() + } + fn report_error( + _query_id: &QueryId, + _dest: &MultiLocation, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::report_error().ref_time() + } + + fn deposit_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + ) -> XCMWeight { + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); + cmp::min(hardcoded_weight, weight) + } + fn deposit_reserve_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + } + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + Weight::MAX.ref_time() + } + fn initiate_reserve_withdraw( + assets: &MultiAssetFilter, + _reserve: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + } + fn initiate_teleport( + assets: &MultiAssetFilter, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(200_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); + cmp::min(hardcoded_weight, weight) + } + fn query_holding( + _query_id: &u64, + _dest: &MultiLocation, + _assets: &MultiAssetFilter, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::query_holding().ref_time() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { + XcmGeneric::::buy_execution().ref_time() + } + fn refund_surplus() -> XCMWeight { + XcmGeneric::::refund_surplus().ref_time() + } + fn set_error_handler(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_error_handler().ref_time() + } + fn set_appendix(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_appendix().ref_time() + } + fn clear_error() -> XCMWeight { + XcmGeneric::::clear_error().ref_time() + } + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { + XcmGeneric::::claim_asset().ref_time() + } + fn trap(_code: &u64) -> XCMWeight { + XcmGeneric::::trap().ref_time() + } + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { + XcmGeneric::::subscribe_version().ref_time() + } + fn unsubscribe_version() -> XCMWeight { + XcmGeneric::::unsubscribe_version().ref_time() + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs new file mode 100644 index 00000000000..d85ace695e6 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -0,0 +1,107 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_xcm_benchmarks::fungible +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::fungible`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: System Account (r:1 w:1) + pub(crate) fn withdraw_asset() -> Weight { + Weight::from_ref_time(26_021_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: System Account (r:2 w:2) + pub(crate) fn transfer_asset() -> Weight { + Weight::from_ref_time(35_776_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + // Storage: System Account (r:2 w:2) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn transfer_reserve_asset() -> Weight { + Weight::from_ref_time(52_799_000 as u64) + .saturating_add(T::DbWeight::get().reads(8 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) + } + pub(crate) fn receive_teleported_asset() -> Weight { + Weight::from_ref_time(5_784_000 as u64) + } + // Storage: System Account (r:1 w:1) + pub(crate) fn deposit_asset() -> Weight { + Weight::from_ref_time(28_148_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: System Account (r:1 w:1) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn deposit_reserve_asset() -> Weight { + Weight::from_ref_time(45_600_000 as u64) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_teleport() -> Weight { + Weight::from_ref_time(23_402_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs new file mode 100644 index 00000000000..cece5061304 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -0,0 +1,137 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::generic` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=bridge-hub-kusama-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_xcm_benchmarks::generic +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::generic`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_holding() -> Weight { + Weight::from_ref_time(21_401_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn buy_execution() -> Weight { + Weight::from_ref_time(5_320_000 as u64) + } + // Storage: PolkadotXcm Queries (r:1 w:0) + pub(crate) fn query_response() -> Weight { + Weight::from_ref_time(16_749_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + } + pub(crate) fn transact() -> Weight { + Weight::from_ref_time(19_670_000 as u64) + } + pub(crate) fn refund_surplus() -> Weight { + Weight::from_ref_time(5_373_000 as u64) + } + pub(crate) fn set_error_handler() -> Weight { + Weight::from_ref_time(5_100_000 as u64) + } + pub(crate) fn set_appendix() -> Weight { + Weight::from_ref_time(5_288_000 as u64) + } + pub(crate) fn clear_error() -> Weight { + Weight::from_ref_time(5_315_000 as u64) + } + pub(crate) fn descend_origin() -> Weight { + Weight::from_ref_time(6_432_000 as u64) + } + pub(crate) fn clear_origin() -> Weight { + Weight::from_ref_time(5_254_000 as u64) + } + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_error() -> Weight { + Weight::from_ref_time(15_047_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + // Storage: PolkadotXcm AssetTraps (r:1 w:1) + pub(crate) fn claim_asset() -> Weight { + Weight::from_ref_time(21_288_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + pub(crate) fn trap() -> Weight { + Weight::from_ref_time(5_120_000 as u64) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn subscribe_version() -> Weight { + Weight::from_ref_time(17_992_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) + pub(crate) fn unsubscribe_version() -> Weight { + Weight::from_ref_time(7_321_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_reserve_withdraw() -> Weight { + Weight::from_ref_time(22_846_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs new file mode 100644 index 00000000000..ba15eed589b --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs @@ -0,0 +1,194 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +use super::{ + AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, +}; +use frame_support::{ + match_types, parameter_types, + traits::{Everything, Nothing}, +}; +use pallet_xcm::XcmPassthrough; +use parachains_common::xcm_config::{ + ConcreteNativeAssetFrom, DenyReserveTransferToRelayChain, DenyThenTry, +}; +use polkadot_parachain::primitives::Sibling; +use polkadot_runtime_common::impls::ToAuthor; +use xcm::latest::prelude::*; +use xcm_builder::{ + AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, + AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter, EnsureXcmOrigin, + IsConcrete, LocationInverter, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + WeightInfoBounds, +}; +use xcm_executor::XcmExecutor; + +parameter_types! { + pub const KsmRelayLocation: MultiLocation = MultiLocation::parent(); + pub const RelayNetwork: NetworkId = NetworkId::Kusama; + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); + pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); + pub const MaxInstructions: u32 = 100; +} + +/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used +/// when determining ownership of accounts for asset transacting and when attempting to use XCM +/// `Transact` in order to determine the dispatch Origin. +pub type LocationToAccountId = ( + // The parent (Relay-chain) origin converts to the parent `AccountId`. + ParentIsPreset, + // Sibling parachain origins convert to AccountId via the `ParaId::into`. + SiblingParachainConvertsVia, + // Straight up local `AccountId32` origins just alias directly to `AccountId`. + AccountId32Aliases, +); + +/// Means for transacting the native currency on this chain. +pub type CurrencyTransactor = CurrencyAdapter< + // Use this currency: + Balances, + // Use this currency when it is a fungible asset matching the given location or name: + IsConcrete, + // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID: + LocationToAccountId, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + // We don't track any teleports. + (), +>; + +/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, +/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can +/// biases the kind of local `Origin` it will become. +pub type XcmOriginToTransactDispatchOrigin = ( + // Sovereign account converter; this attempts to derive an `AccountId` from the origin location + // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for + // foreign chains who want to have a local sovereign account on this chain which they control. + SovereignSignedViaLocation, + // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when + // recognized. + RelayChainAsNative, + // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when + // recognized. + SiblingParachainAsNative, + // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a + // transaction from the Root origin. + ParentAsSuperuser, + // Native signed account converter; this just converts an `AccountId32` origin into a normal + // `Origin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, + // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. + XcmPassthrough, +); + +match_types! { + // TODO: map gov2 origins here - after merge https://github.com/paritytech/cumulus/pull/1895 + pub type ParentOrParentsExecutivePlurality: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Executive, .. }) } + }; + pub type ParentOrSiblings: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(_) } + }; +} + +pub type Barrier = DenyThenTry< + DenyReserveTransferToRelayChain, + ( + // Allow local users to buy weight credit. + TakeWeightCredit, + // Parent and its exec plurality get free execution. + AllowUnpaidExecutionFrom, + // Expected responses are OK. + AllowKnownQueryResponses, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + // Allow anything to pay for execution. + AllowTopLevelPaidExecutionFrom, + ), +>; + +pub struct XcmConfig; +impl xcm_executor::Config for XcmConfig { + type RuntimeCall = RuntimeCall; + type XcmSender = XcmRouter; + type AssetTransactor = CurrencyTransactor; + type OriginConverter = XcmOriginToTransactDispatchOrigin; + // BridgeHub does not recognize a reserve location for any asset. Users must teleport KSM + // where allowed (e.g. with the Relay Chain). + type IsReserve = (); + /// Only allow teleportation of KSM. + type IsTeleporter = ConcreteNativeAssetFrom; + type LocationInverter = LocationInverter; + type Barrier = Barrier; + type Weigher = WeightInfoBounds< + crate::weights::xcm::BridgeHubKusamaXcmWeight, + RuntimeCall, + MaxInstructions, + >; + type Trader = + UsingComponents>; + type ResponseHandler = PolkadotXcm; + type AssetTrap = PolkadotXcm; + type AssetClaims = PolkadotXcm; + type SubscriptionService = PolkadotXcm; +} + +/// Converts a local signed origin into an XCM multilocation. +/// Forms the basis for local origins sending/executing XCMs. +pub type LocalOriginToLocation = SignedToAccountId32; + +/// The means for routing XCM messages which are not for local execution into the right message +/// queues. +pub type XcmRouter = ( + // Two routers - use UMP to communicate with the relay chain: + cumulus_primitives_utility::ParentAsUmp, + // ..and XCMP to communicate with the sibling chains. + XcmpQueue, +); + +impl pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + // We want to disallow users sending (arbitrary) XCMs from this chain. + type SendXcmOrigin = EnsureXcmOrigin; + type XcmRouter = XcmRouter; + // We support local origins dispatching XCM executions in principle... + type ExecuteXcmOrigin = EnsureXcmOrigin; + // ... but disallow generic XCM execution. As a result only teleports are allowed. + type XcmExecuteFilter = Nothing; + type XcmExecutor = XcmExecutor; + type XcmTeleportFilter = Everything; + type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. + type Weigher = WeightInfoBounds< + crate::weights::xcm::BridgeHubKusamaXcmWeight, + RuntimeCall, + MaxInstructions, + >; + type LocationInverter = LocationInverter; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; + type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; +} + +impl cumulus_pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml new file mode 100644 index 00000000000..b90ffd5f866 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml @@ -0,0 +1,169 @@ +[package] +name = "bridge-hub-rococo-runtime" +version = "0.1.0" +authors = ["Parity Technologies "] +edition = "2021" +description = "Rococo's BridgeHub parachain runtime" + +[build-dependencies] +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +hex-literal = { version = "0.3.4" } +log = { version = "0.4.17", default-features = false } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } +serde = { version = "1.0.151", optional = true, features = ["derive"] } +smallvec = "1.8.1" + +# Substrate +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } + +# Polkadot +rococo-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } + +# Cumulus +cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } +cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } +cumulus-pallet-session-benchmarking = {path = "../../../../pallets/session-benchmarking", default-features = false, version = "3.0.0"} +cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } +cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } +cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } +cumulus-primitives-timestamp = { path = "../../../../primitives/timestamp", default-features = false } +cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } +pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } +parachain-info = { path = "../../../../parachains/pallets/parachain-info", default-features = false } +parachains-common = { path = "../../../../parachains/common", default-features = false } + +[features] +default = [ + "std", +] +std = [ + "codec/std", + "log/std", + "scale-info/std", + "serde", + "cumulus-pallet-aura-ext/std", + "cumulus-pallet-dmp-queue/std", + "cumulus-pallet-parachain-system/std", + "cumulus-pallet-xcm/std", + "cumulus-pallet-xcmp-queue/std", + "cumulus-primitives-core/std", + "cumulus-primitives-timestamp/std", + "cumulus-primitives-utility/std", + "frame-executive/std", + "frame-support/std", + "frame-system-rpc-runtime-api/std", + "frame-system/std", + "pallet-aura/std", + "pallet-authorship/std", + "pallet-balances/std", + "pallet-collator-selection/std", + "pallet-multisig/std", + "pallet-session/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-transaction-payment/std", + "pallet-utility/std", + "pallet-xcm/std", + "parachain-info/std", + "parachains-common/std", + "polkadot-core-primitives/std", + "polkadot-parachain/std", + "polkadot-runtime-common/std", + "rococo-runtime-constants/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-aura/std", + "sp-core/std", + "sp-inherents/std", + "sp-io/std", + "sp-offchain/std", + "sp-runtime/std", + "sp-session/std", + "sp-std/std", + "sp-transaction-pool/std", + "sp-version/std", + "xcm-builder/std", + "xcm-executor/std", + "xcm/std", +] + +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", + "pallet-xcm/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", + "cumulus-pallet-session-benchmarking/runtime-benchmarks", + "pallet-collator-selection/runtime-benchmarks", + "cumulus-pallet-xcmp-queue/runtime-benchmarks", + "pallet-xcm-benchmarks/runtime-benchmarks", +] + +try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-try-runtime/try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-multisig/try-runtime", + "pallet-session/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", +] diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/build.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/build.rs new file mode 100644 index 00000000000..9b53d2457df --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/build.rs @@ -0,0 +1,9 @@ +use substrate_wasm_builder::WasmBuilder; + +fn main() { + WasmBuilder::new() + .with_current_project() + .export_heap_base() + .import_memory() + .build() +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/constants.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/constants.rs new file mode 100644 index 00000000000..549e549d38a --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/constants.rs @@ -0,0 +1,70 @@ +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod currency { + use polkadot_core_primitives::Balance; + use rococo_runtime_constants as constants; + + /// The existential deposit. Set to 1/10 of its parent Relay Chain (v9010). + pub const EXISTENTIAL_DEPOSIT: Balance = constants::currency::EXISTENTIAL_DEPOSIT / 10; + + pub const UNITS: Balance = constants::currency::UNITS; + pub const CENTS: Balance = constants::currency::CENTS; + + pub const fn deposit(items: u32, bytes: u32) -> Balance { + // map to 1/100 of what the rococo relay chain charges + constants::currency::deposit(items, bytes) / 100 + } +} + +pub mod fee { + use frame_support::weights::{ + constants::ExtrinsicBaseWeight, WeightToFeeCoefficient, WeightToFeeCoefficients, + WeightToFeePolynomial, + }; + use polkadot_core_primitives::Balance; + use smallvec::smallvec; + pub use sp_runtime::Perbill; + + /// The block saturation level. Fees will be updates based on this value. + pub const TARGET_BLOCK_FULLNESS: Perbill = Perbill::from_percent(25); + + /// Handles converting a weight scalar to a fee value, based on the scale and granularity of the + /// node's balance type. + /// + /// This should typically create a mapping between the following ranges: + /// - `[0, MAXIMUM_BLOCK_WEIGHT]` + /// - `[Balance::min, Balance::max]` + /// + /// Yet, it can be used for any other sort of change to weight-fee. Some examples being: + /// - Setting it to `0` will essentially disable the weight fee. + /// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. + pub struct WeightToFee; + impl WeightToFeePolynomial for WeightToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: + // in BridgeHub, we map to 1/10 of that, or 1/100 CENT + let p = super::currency::CENTS; + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs new file mode 100644 index 00000000000..95971805bb8 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs @@ -0,0 +1,758 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +#![recursion_limit = "256"] + +// Make the WASM binary available. +#[cfg(feature = "std")] +include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); + +pub mod constants; +mod weights; +pub mod xcm_config; + +use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; +use smallvec::smallvec; +use sp_api::impl_runtime_apis; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +use sp_runtime::{ + create_runtime_str, generic, impl_opaque_keys, + traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, +}; + +use sp_std::prelude::*; +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; + +use constants::currency::*; +use frame_support::{ + construct_runtime, + dispatch::DispatchClass, + parameter_types, + traits::{ConstU32, ConstU64, ConstU8, Everything}, + weights::{ + ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, + WeightToFeePolynomial, + }, + PalletId, +}; +use frame_system::{ + limits::{BlockLength, BlockWeights}, + EnsureRoot, +}; +pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; +pub use sp_runtime::{MultiAddress, Perbill, Permill}; +use xcm_config::{XcmConfig, XcmOriginToTransactDispatchOrigin}; + +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; + +// Polkadot imports +use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; + +use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; + +// XCM Imports +use parachains_common::{ + opaque, AccountId, Balance, BlockNumber, Hash, Header, Index, Signature, + AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, +}; +use xcm::latest::prelude::BodyId; +use xcm_executor::XcmExecutor; + +/// The address format for describing accounts. +pub type Address = MultiAddress; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// A Block signed with a Justification +pub type SignedBlock = generic::SignedBlock; + +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; + +/// The SignedExtension to the basic transaction logic. +pub type SignedExtra = ( + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + frame_system::CheckEra, + frame_system::CheckNonce, + frame_system::CheckWeight, + pallet_transaction_payment::ChargeTransactionPayment, +); + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; + +/// Extrinsic type that has already been checked. +pub type CheckedExtrinsic = generic::CheckedExtrinsic; + +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, +>; + +/// Handles converting a weight scalar to a fee value, based on the scale and granularity of the +/// node's balance type. +/// +/// This should typically create a mapping between the following ranges: +/// - `[0, MAXIMUM_BLOCK_WEIGHT]` +/// - `[Balance::min, Balance::max]` +/// +/// Yet, it can be used for any other sort of change to weight-fee. Some examples being: +/// - Setting it to `0` will essentially disable the weight fee. +/// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. +pub struct WeightToFee; +impl WeightToFeePolynomial for WeightToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: + // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT + let p = MILLIUNIT / 10; + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } +} + +impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + } +} + +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("bridge-hub-rococo"), + impl_name: create_runtime_str!("bridge-hub-rococo"), + authoring_version: 1, + spec_version: 9360, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + state_version: 1, +}; + +// Unit = the base number of indivisible units for balances +pub const MILLIUNIT: Balance = 1_000_000_000; +pub const MICROUNIT: Balance = 1_000_000; + +/// The existential deposit. Set to 1/10 of the Connected Relay Chain. +pub const EXISTENTIAL_DEPOSIT: Balance = MILLIUNIT; + +/// The version information used to identify this runtime when compiled natively. +#[cfg(feature = "std")] +pub fn native_version() -> NativeVersion { + NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } +} + +parameter_types! { + pub const Version: RuntimeVersion = VERSION; + + // This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. + // The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the + // `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize + // the lazy contract deletion. + pub RuntimeBlockLength: BlockLength = + BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() + .base_block(BlockExecutionWeight::get()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::Normal, |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .for_class(DispatchClass::Operational, |weights| { + weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); + // Operational transactions have some extra reserved space, so that they + // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. + weights.reserved = Some( + MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT + ); + }) + .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) + .build_or_panic(); + pub const SS58Prefix: u16 = 42; +} + +// Configure FRAME pallets to include in runtime. + +impl frame_system::Config for Runtime { + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The aggregated dispatch type that is available for extrinsics. + type RuntimeCall = RuntimeCall; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = AccountIdLookup; + /// The index type for storing how many extrinsics an account has signed. + type Index = Index; + /// The index type for blocks. + type BlockNumber = BlockNumber; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The header type. + type Header = generic::Header; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// Runtime version. + type Version = Version; + /// Converts a module to an index of this module in the runtime. + type PalletInfo = PalletInfo; + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; + /// What to do if a new account is created. + type OnNewAccount = (); + /// What to do if an account is fully reaped from the system. + type OnKilledAccount = (); + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// The basic call filter to use in dispatchable. + type BaseCallFilter = Everything; + /// Weight information for the extrinsics of this pallet. + type SystemWeightInfo = weights::frame_system::WeightInfo; + /// Block & extrinsics weights: base values and limits. + type BlockWeights = RuntimeBlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = RuntimeBlockLength; + /// This is used as an identifier of the chain. 42 is the generic substrate prefix. + type SS58Prefix = SS58Prefix; + /// The action to take on a Runtime Upgrade + type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; + type MaxConsumers = ConstU32<16>; +} + +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; + type WeightInfo = weights::pallet_timestamp::WeightInfo; +} + +impl pallet_authorship::Config for Runtime { + type FindAuthor = pallet_session::FindAccountFromAuthorIndex; + type UncleGenerations = ConstU32<0>; + type FilterUncle = (); + type EventHandler = (CollatorSelection,); +} + +parameter_types! { + pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; +} + +impl pallet_balances::Config for Runtime { + /// The type for recording an account's balance. + type Balance = Balance; + type DustRemoval = (); + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = weights::pallet_balances::WeightInfo; + type MaxLocks = ConstU32<50>; + type MaxReserves = ConstU32<50>; + type ReserveIdentifier = [u8; 8]; +} + +parameter_types! { + /// Relay Chain `TransactionByteFee` / 10 + pub const TransactionByteFee: Balance = 10 * MICROUNIT; +} + +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; + type OperationalFeeMultiplier = ConstU8<5>; + type WeightToFee = WeightToFee; + type LengthToFee = ConstantMultiplier; + type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; +} + +parameter_types! { + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); +} + +impl cumulus_pallet_parachain_system::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnSystemEvent = (); + type SelfParaId = parachain_info::Pallet; + type OutboundXcmpMessageSource = XcmpQueue; + type DmpMessageHandler = DmpQueue; + type ReservedDmpWeight = ReservedDmpWeight; + type XcmpMessageHandler = XcmpQueue; + type ReservedXcmpWeight = ReservedXcmpWeight; + type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; +} + +impl parachain_info::Config for Runtime {} + +impl cumulus_pallet_aura_ext::Config for Runtime {} + +impl cumulus_pallet_xcmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ChannelInfo = ParachainSystem; + type VersionWrapper = PolkadotXcm; + type ExecuteOverweightOrigin = EnsureRoot; + type ControllerOrigin = EnsureRoot; + type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; + type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; +} + +impl cumulus_pallet_dmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ExecuteOverweightOrigin = EnsureRoot; +} + +pub const PERIOD: u32 = 6 * HOURS; +pub const OFFSET: u32 = 0; + +impl pallet_session::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type ValidatorId = ::AccountId; + // we don't have stash and controller, thus we don't need the convert as well. + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ShouldEndSession = pallet_session::PeriodicSessions, ConstU32>; + type NextSessionRotation = pallet_session::PeriodicSessions, ConstU32>; + type SessionManager = CollatorSelection; + // Essentially just Aura, but let's be pedantic. + type SessionHandler = ::KeyTypeIdProviders; + type Keys = SessionKeys; + type WeightInfo = weights::pallet_session::WeightInfo; +} + +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type DisabledValidators = (); + type MaxAuthorities = ConstU32<100_000>; +} + +parameter_types! { + pub const PotId: PalletId = PalletId(*b"PotStake"); + pub const SessionLength: BlockNumber = 6 * HOURS; + pub const ExecutiveBody: BodyId = BodyId::Executive; +} + +pub type CollatorSelectionUpdateOrigin = EnsureRoot; + +impl pallet_collator_selection::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type UpdateOrigin = CollatorSelectionUpdateOrigin; + type PotId = PotId; + type MaxCandidates = ConstU32<1000>; + type MinCandidates = ConstU32<5>; + type MaxInvulnerables = ConstU32<100>; + // should be a multiple of session or things will get inconsistent + type KickThreshold = ConstU32; + type ValidatorId = ::AccountId; + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ValidatorRegistration = Session; + type WeightInfo = weights::pallet_collator_selection::WeightInfo; +} + +parameter_types! { + // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. + pub const DepositBase: Balance = deposit(1, 88); + // Additional storage item size of 32 bytes. + pub const DepositFactor: Balance = deposit(0, 32); +} + +impl pallet_multisig::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type DepositBase = DepositBase; + type DepositFactor = DepositFactor; + type MaxSignatories = ConstU32<100>; + type WeightInfo = weights::pallet_multisig::WeightInfo; +} + +impl pallet_utility::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + type WeightInfo = weights::pallet_utility::WeightInfo; +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = opaque::Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + // System support stuff. + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + ParachainSystem: cumulus_pallet_parachain_system::{ + Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, + } = 1, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, + ParachainInfo: parachain_info::{Pallet, Storage, Config} = 3, + + // Monetary stuff. + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, + TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, + + // Collator support. The order of these 4 are important and shall not change. + Authorship: pallet_authorship::{Pallet, Call, Storage} = 20, + CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, + Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, + Aura: pallet_aura::{Pallet, Storage, Config} = 23, + AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, + + // XCM helpers. + XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, + PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin, Config} = 31, + CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, + DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, + + // Handy utilities. + Utility: pallet_utility::{Pallet, Call, Event} = 40, + Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, + } +); + +#[cfg(feature = "runtime-benchmarks")] +#[macro_use] +extern crate frame_benchmarking; + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + define_benchmarks!( + [frame_system, SystemBench::] + [pallet_balances, Balances] + [pallet_multisig, Multisig] + [pallet_session, SessionBench::] + [pallet_utility, Utility] + [pallet_timestamp, Timestamp] + [pallet_collator_selection, CollatorSelection] + [cumulus_pallet_xcmp_queue, XcmpQueue] + // XCM + // NOTE: Make sure you point to the individual modules below. + [pallet_xcm_benchmarks::fungible, XcmBalances] + [pallet_xcm_benchmarks::generic, XcmGeneric] + ); +} + +impl_runtime_apis! { + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + } + + fn authorities() -> Vec { + Aura::authorities().into_inner() + } + } + + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + OpaqueMetadata::new(Runtime::metadata().into()) + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + block_hash: ::Hash, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx, block_hash) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + SessionKeys::decode_into_raw_public_keys(&encoded) + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Index { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + fn query_info( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + TransactionPayment::query_info(uxt, len) + } + fn query_fee_details( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } + } + + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { + ParachainSystem::collect_collation_info(header) + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, RuntimeBlockWeights::get().max_block) + } + + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + + // This is defined once again in dispatch_benchmark, because list_benchmarks! + // and add_benchmarks! are macros exported by define_benchmarks! macros and those types + // are referenced in that call. + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + + let mut list = Vec::::new(); + list_benchmarks!(list, extra); + + let storage_info = AllPalletsWithSystem::storage_info(); + return (list, storage_info) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError, TrackedStorageKey}; + + use frame_system_benchmarking::Pallet as SystemBench; + impl frame_system_benchmarking::Config for Runtime {} + + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + impl cumulus_pallet_session_benchmarking::Config for Runtime {} + + use xcm::latest::prelude::*; + use xcm_config::RelayLocation; + + impl pallet_xcm_benchmarks::Config for Runtime { + type XcmConfig = xcm_config::XcmConfig; + type AccountIdConverter = xcm_config::LocationToAccountId; + fn valid_destination() -> Result { + Ok(RelayLocation::get()) + } + fn worst_case_holding() -> MultiAssets { + // just concrete assets according to relay chain. + let assets: Vec = vec![ + MultiAsset { + id: Concrete(RelayLocation::get()), + fun: Fungible(1_000_000 * UNITS), + } + ]; + assets.into() + } + } + + parameter_types! { + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + RelayLocation::get(), + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(RelayLocation::get()) }, + )); + pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; + pub const CheckedAccount: Option = None; + } + + impl pallet_xcm_benchmarks::fungible::Config for Runtime { + type TransactAsset = Balances; + + type CheckedAccount = CheckedAccount; + type TrustedTeleporter = TrustedTeleporter; + type TrustedReserve = TrustedReserve; + + fn get_multi_asset() -> MultiAsset { + MultiAsset { + id: Concrete(RelayLocation::get()), + fun: Fungible(1 * UNITS), + } + } + } + + impl pallet_xcm_benchmarks::generic::Config for Runtime { + type RuntimeCall = RuntimeCall; + + fn worst_case_response() -> (u64, Response) { + (0u64, Response::Version(Default::default())) + } + + fn transact_origin() -> Result { + Ok(RelayLocation::get()) + } + + fn subscribe_origin() -> Result { + Ok(RelayLocation::get()) + } + + fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { + let origin = RelayLocation::get(); + let assets: MultiAssets = (Concrete(RelayLocation::get()), 1_000 * UNITS).into(); + let ticket = MultiLocation { parents: 0, interior: Here }; + Ok((origin, ticket, assets)) + } + } + + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + + let whitelist: Vec = vec![ + // Block Number + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), + // Total Issuance + hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), + // Execution Phase + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), + // Event Count + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), + // System Events + hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), + ]; + + let mut batches = Vec::::new(); + let params = (&config, &whitelist); + add_benchmarks!(params, batches); + + Ok(batches) + } + } +} + +struct CheckInherents; + +impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { + fn check_inherents( + block: &Block, + relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, + ) -> sp_inherents::CheckInherentsResult { + let relay_chain_slot = relay_state_proof + .read_slot() + .expect("Could not read the relay chain slot from the proof"); + + let inherent_data = + cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( + relay_chain_slot, + sp_std::time::Duration::from_secs(6), + ) + .create_inherent_data() + .expect("Could not create the timestamp inherent data"); + + inherent_data.check_extrinsics(block) + } +} + +cumulus_pallet_parachain_system::register_validate_block! { + Runtime = Runtime, + BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, + CheckInherents = CheckInherents, +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/block_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/block_weights.rs new file mode 100644 index 00000000000..ea8a341b58b --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/block_weights.rs @@ -0,0 +1,53 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Importing a block with 0 Extrinsics. + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); + } + + #[cfg(test)] + mod test_weights { + use frame_support::weights::constants; + + /// Checks that the weight exists and is sane. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + let w = super::constants::BlockExecutionWeight::get(); + + // At least 100 µs. + assert!( + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, + "Weight should be at least 100 µs." + ); + // At most 50 ms. + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, + "Weight should be at most 50 ms." + ); + } + } +} diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_xcmp_queue.rs similarity index 60% rename from parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs rename to parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_xcmp_queue.rs index 23bcd818b33..9e30e61276e 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_xcmp_queue.rs @@ -1,4 +1,4 @@ -// Copyright 2022 Parity Technologies (UK) Ltd. +// Copyright 2021 Parity Technologies (UK) Ltd. // This file is part of Cumulus. // Cumulus is free software: you can redistribute it and/or modify @@ -14,20 +14,18 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . - //! Autogenerated weights for `cumulus_pallet_xcmp_queue` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 // Executed Command: // ./artifacts/polkadot-parachain // benchmark // pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=statemine-dev +// --chain=bridge-hub-rococo-dev // --execution=wasm // --wasm-execution=compiled // --pallet=cumulus_pallet_xcmp_queue @@ -36,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_xcmp_queue.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -45,19 +43,21 @@ use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; -/// Weights for `cumulus_pallet_xcmp_queue`. +/// Weight functions for `cumulus_pallet_xcmp_queue`. pub struct WeightInfo(PhantomData); -impl WeightInfo { +impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) - pub(crate) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(7_552_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn set_config_with_u32() -> Weight { + // Minimum execution time: 6_917 nanoseconds. + Weight::from_ref_time(7_104_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) - pub(crate) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(7_568_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + fn set_config_with_weight() -> Weight { + // Minimum execution time: 6_765 nanoseconds. + Weight::from_ref_time(7_102_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/extrinsic_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/extrinsic_weights.rs new file mode 100644 index 00000000000..0512efb60e2 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/extrinsic_weights.rs @@ -0,0 +1,53 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Executing a NO-OP `System::remarks` Extrinsic. + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); + } + + #[cfg(test)] + mod test_weights { + use frame_support::weights::constants; + + /// Checks that the weight exists and is sane. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + let w = super::constants::ExtrinsicBaseWeight::get(); + + // At least 10 µs. + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, + "Weight should be at least 10 µs." + ); + // At most 1 ms. + assert!( + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Weight should be at most 1 ms." + ); + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/frame_system.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/frame_system.rs new file mode 100644 index 00000000000..2e731f1ca57 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/frame_system.rs @@ -0,0 +1,98 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `frame_system` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=frame_system +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/frame_system.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `frame_system`. +pub struct WeightInfo(PhantomData); +impl frame_system::WeightInfo for WeightInfo { + /// The range of component `b` is `[0, 3932160]`. + fn remark(b: u32, ) -> Weight { + // Minimum execution time: 3_799 nanoseconds. + Weight::from_ref_time(3_878_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(410).saturating_mul(b.into())) + } + /// The range of component `b` is `[0, 3932160]`. + fn remark_with_event(b: u32, ) -> Weight { + // Minimum execution time: 12_275 nanoseconds. + Weight::from_ref_time(12_533_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(1_770).saturating_mul(b.into())) + } + // Storage: System Digest (r:1 w:1) + // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + fn set_heap_pages() -> Weight { + // Minimum execution time: 7_781 nanoseconds. + Weight::from_ref_time(8_119_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Skipped Metadata (r:0 w:0) + /// The range of component `i` is `[0, 1000]`. + fn set_storage(i: u32, ) -> Weight { + // Minimum execution time: 3_810 nanoseconds. + Weight::from_ref_time(3_860_000) + // Standard Error: 2_166 + .saturating_add(Weight::from_ref_time(621_137).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + } + // Storage: Skipped Metadata (r:0 w:0) + /// The range of component `i` is `[0, 1000]`. + fn kill_storage(i: u32, ) -> Weight { + // Minimum execution time: 3_821 nanoseconds. + Weight::from_ref_time(3_940_000) + // Standard Error: 1_002 + .saturating_add(Weight::from_ref_time(450_836).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + } + // Storage: Skipped Metadata (r:0 w:0) + /// The range of component `p` is `[0, 1000]`. + fn kill_prefix(p: u32, ) -> Weight { + // Minimum execution time: 5_230 nanoseconds. + Weight::from_ref_time(5_368_000) + // Standard Error: 1_362 + .saturating_add(Weight::from_ref_time(977_049).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs new file mode 100644 index 00000000000..869c03be687 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs @@ -0,0 +1,37 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Expose the auto generated weight files. + +pub mod block_weights; +pub mod cumulus_pallet_xcmp_queue; +pub mod extrinsic_weights; +pub mod frame_system; +pub mod pallet_balances; +pub mod pallet_collator_selection; +pub mod pallet_multisig; +pub mod pallet_session; +pub mod pallet_timestamp; +pub mod pallet_utility; +pub mod paritydb_weights; +pub mod rocksdb_weights; +pub mod xcm; + +pub use block_weights::constants::BlockExecutionWeight; +pub use extrinsic_weights::constants::ExtrinsicBaseWeight; +pub use paritydb_weights::constants::ParityDbWeight; +pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_balances.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_balances.rs new file mode 100644 index 00000000000..8bf85644579 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_balances.rs @@ -0,0 +1,98 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_balances` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_balances +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_balances.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_balances`. +pub struct WeightInfo(PhantomData); +impl pallet_balances::WeightInfo for WeightInfo { + // Storage: System Account (r:1 w:1) + fn transfer() -> Weight { + // Minimum execution time: 41_846 nanoseconds. + Weight::from_ref_time(42_432_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn transfer_keep_alive() -> Weight { + // Minimum execution time: 31_626 nanoseconds. + Weight::from_ref_time(32_252_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn set_balance_creating() -> Weight { + // Minimum execution time: 23_660 nanoseconds. + Weight::from_ref_time(23_956_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn set_balance_killing() -> Weight { + // Minimum execution time: 26_051 nanoseconds. + Weight::from_ref_time(26_580_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:2 w:2) + fn force_transfer() -> Weight { + // Minimum execution time: 41_146 nanoseconds. + Weight::from_ref_time(41_760_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: System Account (r:1 w:1) + fn transfer_all() -> Weight { + // Minimum execution time: 36_192 nanoseconds. + Weight::from_ref_time(36_894_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: System Account (r:1 w:1) + fn force_unreserve() -> Weight { + // Minimum execution time: 20_350 nanoseconds. + Weight::from_ref_time(20_717_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_collator_selection.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_collator_selection.rs new file mode 100644 index 00000000000..78e3f8f8e3d --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_collator_selection.rs @@ -0,0 +1,124 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_collator_selection` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_collator_selection +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_collator_selection.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_collator_selection`. +pub struct WeightInfo(PhantomData); +impl pallet_collator_selection::WeightInfo for WeightInfo { + // Storage: Session NextKeys (r:1 w:0) + // Storage: CollatorSelection Invulnerables (r:0 w:1) + /// The range of component `b` is `[1, 100]`. + fn set_invulnerables(b: u32, ) -> Weight { + // Minimum execution time: 20_717 nanoseconds. + Weight::from_ref_time(22_550_310) + // Standard Error: 3_492 + .saturating_add(Weight::from_ref_time(2_243_989).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: CollatorSelection DesiredCandidates (r:0 w:1) + fn set_desired_candidates() -> Weight { + // Minimum execution time: 12_534 nanoseconds. + Weight::from_ref_time(12_916_000) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: CollatorSelection CandidacyBond (r:0 w:1) + fn set_candidacy_bond() -> Weight { + // Minimum execution time: 12_687 nanoseconds. + Weight::from_ref_time(13_085_000) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: CollatorSelection Candidates (r:1 w:1) + // Storage: CollatorSelection DesiredCandidates (r:1 w:0) + // Storage: CollatorSelection Invulnerables (r:1 w:0) + // Storage: Session NextKeys (r:1 w:0) + // Storage: CollatorSelection CandidacyBond (r:1 w:0) + // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) + /// The range of component `c` is `[1, 999]`. + fn register_as_candidate(c: u32, ) -> Weight { + // Minimum execution time: 44_283 nanoseconds. + Weight::from_ref_time(40_422_515) + // Standard Error: 1_034 + .saturating_add(Weight::from_ref_time(132_882).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: CollatorSelection Candidates (r:1 w:1) + // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) + /// The range of component `c` is `[6, 1000]`. + fn leave_intent(c: u32, ) -> Weight { + // Minimum execution time: 34_104 nanoseconds. + Weight::from_ref_time(26_576_861) + // Standard Error: 1_061 + .saturating_add(Weight::from_ref_time(126_082).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: System Account (r:2 w:2) + // Storage: System BlockWeight (r:1 w:1) + // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) + fn note_author() -> Weight { + // Minimum execution time: 31_325 nanoseconds. + Weight::from_ref_time(31_718_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) + } + // Storage: CollatorSelection Candidates (r:1 w:1) + // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) + // Storage: System Account (r:1 w:1) + // Storage: CollatorSelection Invulnerables (r:1 w:0) + // Storage: System BlockWeight (r:1 w:1) + /// The range of component `r` is `[1, 1000]`. + /// The range of component `c` is `[1, 1000]`. + fn new_session(_r: u32, c: u32, ) -> Weight { + // Minimum execution time: 19_213 nanoseconds. + Weight::from_ref_time(19_502_000) + // Standard Error: 769_266 + .saturating_add(Weight::from_ref_time(27_853_519).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_multisig.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_multisig.rs new file mode 100644 index 00000000000..4a4a64dfce8 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_multisig.rs @@ -0,0 +1,128 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_multisig` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_multisig +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_multisig.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_multisig`. +pub struct WeightInfo(PhantomData); +impl pallet_multisig::WeightInfo for WeightInfo { + /// The range of component `z` is `[0, 10000]`. + fn as_multi_threshold_1(z: u32, ) -> Weight { + // Minimum execution time: 15_441 nanoseconds. + Weight::from_ref_time(16_086_362) + // Standard Error: 2 + .saturating_add(Weight::from_ref_time(598).saturating_mul(z.into())) + } + // Storage: Multisig Multisigs (r:1 w:1) + // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_create(s: u32, z: u32, ) -> Weight { + // Minimum execution time: 43_142 nanoseconds. + Weight::from_ref_time(35_930_763) + // Standard Error: 1_178 + .saturating_add(Weight::from_ref_time(82_978).saturating_mul(s.into())) + // Standard Error: 11 + .saturating_add(Weight::from_ref_time(1_614).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + /// The range of component `s` is `[3, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_approve(s: u32, z: u32, ) -> Weight { + // Minimum execution time: 33_798 nanoseconds. + Weight::from_ref_time(26_265_361) + // Standard Error: 614 + .saturating_add(Weight::from_ref_time(83_615).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_ref_time(1_635).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + // Storage: System Account (r:1 w:1) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_complete(s: u32, z: u32, ) -> Weight { + // Minimum execution time: 47_715 nanoseconds. + Weight::from_ref_time(39_237_542) + // Standard Error: 1_933 + .saturating_add(Weight::from_ref_time(93_722).saturating_mul(s.into())) + // Standard Error: 18 + .saturating_add(Weight::from_ref_time(1_629).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Multisig Multisigs (r:1 w:1) + // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// The range of component `s` is `[2, 100]`. + fn approve_as_multi_create(s: u32, ) -> Weight { + // Minimum execution time: 31_214 nanoseconds. + Weight::from_ref_time(33_958_587) + // Standard Error: 1_019 + .saturating_add(Weight::from_ref_time(94_973).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + /// The range of component `s` is `[2, 100]`. + fn approve_as_multi_approve(s: u32, ) -> Weight { + // Minimum execution time: 22_705 nanoseconds. + Weight::from_ref_time(25_017_425) + // Standard Error: 1_063 + .saturating_add(Weight::from_ref_time(88_380).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: Multisig Multisigs (r:1 w:1) + /// The range of component `s` is `[2, 100]`. + fn cancel_as_multi(s: u32, ) -> Weight { + // Minimum execution time: 31_444 nanoseconds. + Weight::from_ref_time(34_349_731) + // Standard Error: 990 + .saturating_add(Weight::from_ref_time(93_539).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_session.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_session.rs new file mode 100644 index 00000000000..847d9ef4026 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_session.rs @@ -0,0 +1,65 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_session` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_session +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_session.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_session`. +pub struct WeightInfo(PhantomData); +impl pallet_session::WeightInfo for WeightInfo { + // Storage: Session NextKeys (r:1 w:1) + // Storage: Session KeyOwner (r:1 w:1) + fn set_keys() -> Weight { + // Minimum execution time: 21_996 nanoseconds. + Weight::from_ref_time(22_441_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Session NextKeys (r:1 w:1) + // Storage: Session KeyOwner (r:0 w:1) + fn purge_keys() -> Weight { + // Minimum execution time: 18_318 nanoseconds. + Weight::from_ref_time(18_751_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_timestamp.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_timestamp.rs new file mode 100644 index 00000000000..40ac27afac0 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_timestamp.rs @@ -0,0 +1,61 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_timestamp` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_timestamp +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_timestamp.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_timestamp`. +pub struct WeightInfo(PhantomData); +impl pallet_timestamp::WeightInfo for WeightInfo { + // Storage: Timestamp Now (r:1 w:1) + // Storage: Aura CurrentSlot (r:1 w:0) + fn set() -> Weight { + // Minimum execution time: 8_525 nanoseconds. + Weight::from_ref_time(8_723_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + fn on_finalize() -> Weight { + // Minimum execution time: 3_707 nanoseconds. + Weight::from_ref_time(3_840_000) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_utility.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_utility.rs new file mode 100644 index 00000000000..29ac024e709 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_utility.rs @@ -0,0 +1,78 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_utility` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_utility +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/pallet_utility.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_utility`. +pub struct WeightInfo(PhantomData); +impl pallet_utility::WeightInfo for WeightInfo { + /// The range of component `c` is `[0, 1000]`. + fn batch(c: u32, ) -> Weight { + // Minimum execution time: 12_012 nanoseconds. + Weight::from_ref_time(23_285_911) + // Standard Error: 2_576 + .saturating_add(Weight::from_ref_time(3_535_162).saturating_mul(c.into())) + } + fn as_derivative() -> Weight { + // Minimum execution time: 6_534 nanoseconds. + Weight::from_ref_time(6_729_000) + } + /// The range of component `c` is `[0, 1000]`. + fn batch_all(c: u32, ) -> Weight { + // Minimum execution time: 11_892 nanoseconds. + Weight::from_ref_time(14_934_381) + // Standard Error: 2_702 + .saturating_add(Weight::from_ref_time(3_736_152).saturating_mul(c.into())) + } + fn dispatch_as() -> Weight { + // Minimum execution time: 14_082 nanoseconds. + Weight::from_ref_time(14_286_000) + } + /// The range of component `c` is `[0, 1000]`. + fn force_batch(c: u32, ) -> Weight { + // Minimum execution time: 12_445 nanoseconds. + Weight::from_ref_time(19_975_100) + // Standard Error: 2_591 + .saturating_add(Weight::from_ref_time(3_535_771).saturating_mul(c.into())) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/paritydb_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/paritydb_weights.rs new file mode 100644 index 00000000000..4338d928d80 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/paritydb_weights.rs @@ -0,0 +1,63 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights + /// are available for brave runtime engineers who may want to try this out as default. + pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::ParityDbWeight as W; + use frame_support::weights::constants; + + /// Checks that all weights exist and have sane values. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + // At least 1 µs. + assert!( + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Read weight should be at least 1 µs." + ); + assert!( + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Write weight should be at least 1 µs." + ); + // At most 1 ms. + assert!( + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Read weight should be at most 1 ms." + ); + assert!( + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Write weight should be at most 1 ms." + ); + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/rocksdb_weights.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/rocksdb_weights.rs new file mode 100644 index 00000000000..1d115d963fa --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/rocksdb_weights.rs @@ -0,0 +1,63 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout + /// the runtime. + pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::RocksDbWeight as W; + use frame_support::weights::constants; + + /// Checks that all weights exist and have sane values. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + // At least 1 µs. + assert!( + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Read weight should be at least 1 µs." + ); + assert!( + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Write weight should be at least 1 µs." + ); + // At most 1 ms. + assert!( + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Read weight should be at most 1 ms." + ); + assert!( + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Write weight should be at most 1 ms." + ); + } + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/mod.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/mod.rs new file mode 100644 index 00000000000..4d0d2c6ca9e --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/mod.rs @@ -0,0 +1,188 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +mod pallet_xcm_benchmarks_fungible; +mod pallet_xcm_benchmarks_generic; + +use crate::Runtime; +use frame_support::weights::Weight; +use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; +use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; +use sp_std::{cmp, prelude::*}; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + DoubleEncoded, +}; + +trait WeighMultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; +} + +const MAX_ASSETS: u32 = 100; + +impl WeighMultiAssets for MultiAssetFilter { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + let weight = match self { + Self::Definite(assets) => + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() + } +} + +impl WeighMultiAssets for MultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() + } +} + +pub struct BridgeHubRococoXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for BridgeHubRococoXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) + } + // Currently there is no trusted reserve + fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { + u64::MAX + } + fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) + } + fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + XcmGeneric::::query_response().ref_time() + } + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) + } + fn transfer_reserve_asset( + assets: &MultiAssets, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) + } + fn transact( + _origin_type: &OriginKind, + _require_weight_at_most: &u64, + _call: &DoubleEncoded, + ) -> XCMWeight { + XcmGeneric::::transact().ref_time() + } + fn hrmp_new_channel_open_request( + _sender: &u32, + _max_message_size: &u32, + _max_capacity: &u32, + ) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn clear_origin() -> XCMWeight { + XcmGeneric::::clear_origin().ref_time() + } + fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { + XcmGeneric::::descend_origin().ref_time() + } + fn report_error( + _query_id: &QueryId, + _dest: &MultiLocation, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::report_error().ref_time() + } + + fn deposit_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + ) -> XCMWeight { + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); + cmp::min(hardcoded_weight, weight) + } + fn deposit_reserve_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + } + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + Weight::MAX.ref_time() + } + fn initiate_reserve_withdraw( + assets: &MultiAssetFilter, + _reserve: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + } + fn initiate_teleport( + assets: &MultiAssetFilter, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(200_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); + cmp::min(hardcoded_weight, weight) + } + fn query_holding( + _query_id: &u64, + _dest: &MultiLocation, + _assets: &MultiAssetFilter, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::query_holding().ref_time() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { + XcmGeneric::::buy_execution().ref_time() + } + fn refund_surplus() -> XCMWeight { + XcmGeneric::::refund_surplus().ref_time() + } + fn set_error_handler(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_error_handler().ref_time() + } + fn set_appendix(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_appendix().ref_time() + } + fn clear_error() -> XCMWeight { + XcmGeneric::::clear_error().ref_time() + } + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { + XcmGeneric::::claim_asset().ref_time() + } + fn trap(_code: &u64) -> XCMWeight { + XcmGeneric::::trap().ref_time() + } + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { + XcmGeneric::::subscribe_version().ref_time() + } + fn unsubscribe_version() -> XCMWeight { + XcmGeneric::::unsubscribe_version().ref_time() + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs new file mode 100644 index 00000000000..75b9db0ff85 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -0,0 +1,107 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_xcm_benchmarks::fungible +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::fungible`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: System Account (r:1 w:1) + pub(crate) fn withdraw_asset() -> Weight { + Weight::from_ref_time(27_085_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: System Account (r:2 w:2) + pub(crate) fn transfer_asset() -> Weight { + Weight::from_ref_time(37_130_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + // Storage: System Account (r:2 w:2) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn transfer_reserve_asset() -> Weight { + Weight::from_ref_time(54_004_000 as u64) + .saturating_add(T::DbWeight::get().reads(8 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) + } + pub(crate) fn receive_teleported_asset() -> Weight { + Weight::from_ref_time(6_208_000 as u64) + } + // Storage: System Account (r:1 w:1) + pub(crate) fn deposit_asset() -> Weight { + Weight::from_ref_time(29_191_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: System Account (r:1 w:1) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn deposit_reserve_asset() -> Weight { + Weight::from_ref_time(48_966_000 as u64) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_teleport() -> Weight { + Weight::from_ref_time(23_337_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs new file mode 100644 index 00000000000..08c5d03941c --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -0,0 +1,137 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::generic` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=bridge-hub-rococo-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_xcm_benchmarks::generic +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::generic`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_holding() -> Weight { + Weight::from_ref_time(23_077_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn buy_execution() -> Weight { + Weight::from_ref_time(5_595_000 as u64) + } + // Storage: PolkadotXcm Queries (r:1 w:0) + pub(crate) fn query_response() -> Weight { + Weight::from_ref_time(16_593_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + } + pub(crate) fn transact() -> Weight { + Weight::from_ref_time(19_522_000 as u64) + } + pub(crate) fn refund_surplus() -> Weight { + Weight::from_ref_time(5_612_000 as u64) + } + pub(crate) fn set_error_handler() -> Weight { + Weight::from_ref_time(5_455_000 as u64) + } + pub(crate) fn set_appendix() -> Weight { + Weight::from_ref_time(5_404_000 as u64) + } + pub(crate) fn clear_error() -> Weight { + Weight::from_ref_time(5_402_000 as u64) + } + pub(crate) fn descend_origin() -> Weight { + Weight::from_ref_time(6_725_000 as u64) + } + pub(crate) fn clear_origin() -> Weight { + Weight::from_ref_time(5_417_000 as u64) + } + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_error() -> Weight { + Weight::from_ref_time(14_868_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + // Storage: PolkadotXcm AssetTraps (r:1 w:1) + pub(crate) fn claim_asset() -> Weight { + Weight::from_ref_time(20_838_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + pub(crate) fn trap() -> Weight { + Weight::from_ref_time(5_354_000 as u64) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn subscribe_version() -> Weight { + Weight::from_ref_time(17_989_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) + pub(crate) fn unsubscribe_version() -> Weight { + Weight::from_ref_time(7_304_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_reserve_withdraw() -> Weight { + Weight::from_ref_time(22_875_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } +} diff --git a/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs new file mode 100644 index 00000000000..9064389f6f9 --- /dev/null +++ b/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs @@ -0,0 +1,193 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +use super::{ + AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, +}; +use frame_support::{ + match_types, parameter_types, + traits::{Everything, Nothing}, +}; +use pallet_xcm::XcmPassthrough; +use parachains_common::xcm_config::{ + ConcreteNativeAssetFrom, DenyReserveTransferToRelayChain, DenyThenTry, +}; +use polkadot_parachain::primitives::Sibling; +use polkadot_runtime_common::impls::ToAuthor; +use xcm::latest::prelude::*; +use xcm_builder::{ + AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, + AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter, EnsureXcmOrigin, + IsConcrete, LocationInverter, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + WeightInfoBounds, +}; +use xcm_executor::XcmExecutor; + +parameter_types! { + pub const RelayLocation: MultiLocation = MultiLocation::parent(); + pub const RelayNetwork: NetworkId = NetworkId::Any; + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); + pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); + pub const MaxInstructions: u32 = 100; +} + +/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used +/// when determining ownership of accounts for asset transacting and when attempting to use XCM +/// `Transact` in order to determine the dispatch Origin. +pub type LocationToAccountId = ( + // The parent (Relay-chain) origin converts to the parent `AccountId`. + ParentIsPreset, + // Sibling parachain origins convert to AccountId via the `ParaId::into`. + SiblingParachainConvertsVia, + // Straight up local `AccountId32` origins just alias directly to `AccountId`. + AccountId32Aliases, +); + +/// Means for transacting the native currency on this chain. +pub type CurrencyTransactor = CurrencyAdapter< + // Use this currency: + Balances, + // Use this currency when it is a fungible asset matching the given location or name: + IsConcrete, + // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID: + LocationToAccountId, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + // We don't track any teleports. + (), +>; + +/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, +/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can +/// biases the kind of local `Origin` it will become. +pub type XcmOriginToTransactDispatchOrigin = ( + // Sovereign account converter; this attempts to derive an `AccountId` from the origin location + // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for + // foreign chains who want to have a local sovereign account on this chain which they control. + SovereignSignedViaLocation, + // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when + // recognized. + RelayChainAsNative, + // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when + // recognized. + SiblingParachainAsNative, + // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a + // transaction from the Root origin. + ParentAsSuperuser, + // Native signed account converter; this just converts an `AccountId32` origin into a normal + // `Origin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, + // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. + XcmPassthrough, +); + +match_types! { + pub type ParentOrParentsExecutivePlurality: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Executive, .. }) } + }; + pub type ParentOrSiblings: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(_) } + }; +} + +pub type Barrier = DenyThenTry< + DenyReserveTransferToRelayChain, + ( + // Allow local users to buy weight credit. + TakeWeightCredit, + // Parent and its exec plurality get free execution. + AllowUnpaidExecutionFrom, + // Expected responses are OK. + AllowKnownQueryResponses, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + // Allow anything to pay for execution. + AllowTopLevelPaidExecutionFrom, + ), +>; + +pub struct XcmConfig; +impl xcm_executor::Config for XcmConfig { + type RuntimeCall = RuntimeCall; + type XcmSender = XcmRouter; + type AssetTransactor = CurrencyTransactor; + type OriginConverter = XcmOriginToTransactDispatchOrigin; + // BridgeHub does not recognize a reserve location for any asset. Users must teleport Native token + // where allowed (e.g. with the Relay Chain). + type IsReserve = (); + /// Only allow teleportation of NativeToken of relay chain. + type IsTeleporter = ConcreteNativeAssetFrom; + type LocationInverter = LocationInverter; + type Barrier = Barrier; + type Weigher = WeightInfoBounds< + crate::weights::xcm::BridgeHubRococoXcmWeight, + RuntimeCall, + MaxInstructions, + >; + type Trader = + UsingComponents>; + type ResponseHandler = PolkadotXcm; + type AssetTrap = PolkadotXcm; + type AssetClaims = PolkadotXcm; + type SubscriptionService = PolkadotXcm; +} + +/// Converts a local signed origin into an XCM multilocation. +/// Forms the basis for local origins sending/executing XCMs. +pub type LocalOriginToLocation = SignedToAccountId32; + +/// The means for routing XCM messages which are not for local execution into the right message +/// queues. +pub type XcmRouter = ( + // Two routers - use UMP to communicate with the relay chain: + cumulus_primitives_utility::ParentAsUmp, + // ..and XCMP to communicate with the sibling chains. + XcmpQueue, +); + +impl pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + // We want to disallow users sending (arbitrary) XCMs from this chain. + type SendXcmOrigin = EnsureXcmOrigin; + type XcmRouter = XcmRouter; + // We support local origins dispatching XCM executions in principle... + type ExecuteXcmOrigin = EnsureXcmOrigin; + // ... but disallow generic XCM execution. As a result only teleports are allowed. + type XcmExecuteFilter = Nothing; + type XcmExecutor = XcmExecutor; + type XcmTeleportFilter = Everything; + type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. + type Weigher = WeightInfoBounds< + crate::weights::xcm::BridgeHubRococoXcmWeight, + RuntimeCall, + MaxInstructions, + >; + type LocationInverter = LocationInverter; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; + type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; +} + +impl cumulus_pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; +} diff --git a/parachains/runtimes/bridge-hubs/docs/bridge-hub-parachain-design.jpg b/parachains/runtimes/bridge-hubs/docs/bridge-hub-parachain-design.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02feb11e10175b1357835e12b6d3e756032c9aa6 GIT binary patch literal 88324 zcmd431yr5A(kQ%fclSb(qQxohUfkW?y*LF5#ogWAt++#RcPs7`ibH|Bsl7+ObME=> z_usqz?6vkYnM{&-CdtfXlJz{zKYalpONfYz06;)M0J^{*;AsgU2!Mu!go1>ChJu2E zfq{mFM@N8%gM-IGMMFX-z$GFiz{SUZK}tvQf`sNJKK?5CfWW}Oz{9~~BOqWi65|sy{Vx041@##iUI%-{JwLsO4`UmJnD;}@)9_BQdF5p5d$dy3C9=4WC!un9TP=FEUcz^MX zmC74)q+rW)#Z7nSnkDjL%8$Q-A1X-L{XAK)X+FTr^j6EW*gfj=-0WJ72INU?bByV3 zwKI`xf}}SBiHgkFJS)X`y6ms^e>}QVAe~b7OMRX*xL#FOxQPzBq3tH?WySK>VVcR> zgV+V?Ec0i0oQrBXgh+`N7S42zs~L5{TA>a#3o`v>!eb>xbwsQewzDTzG`$4eNqMxe zO(=(i_;I2dxh5`+nOqQ@;|39}oQDo1X%MjNePkuz*Q=u8n*Dn*#Vm3Y?9I_I7$DAdC^RK^=y)0AUJlmb%@n7WoT@&0*q2aC6 z8Lce;LNTdpHL+18#j7B7ZtU^J!Ekry>;Y`+ys(CrYNV16A6na9%+BMko*v;mi~e@p z;>GVqfKQkUidbOV3mZNF5WlU_w`%r;-0{9XzbRZNvY2y!XRyOWw5opy?r+5POO(Gc z%xoR-IHx9~ermsKJwIi#xH17~HCs%8-f)w-;U|DhhGgbn1R%TP<7+8mzYySeXoG*1 z0RV*DUq%LwDuE;QC;bo_l%Gg=_;C8E+i3dVvJ51$7^%xNwNRVnF&Sxc`&mh5nszKO zc7OSpc@6eYGk|AS)y|AkN+0g|WMqNM_7a5qpMZ)g)<|HL3;|a@m}vuX$+-$sEWW?m z0778>RXMFch=7^N71UP;z)U%<&D(-E~_(Z;i~h!~I1y%0-i+?G=rs+Sq+_xVAywT&I%4W6Bo*_#Mht zRUq@BgO&ds+TNe`(e`9Ae`XlAa5<;Ue!!rfFx!79fN~rCc%I;>JLbpZxY4XlwNv|W z%(1u>7n@a-Ai{dZz8Wx$cX~bhm@tguyTuvrVDDUSWZ1d2G{5VHNAEE;q3t&$wp=rO zF_7#DbI1pPx7Y7%D3nb*TxoOhraN_h0_aT!KQ`jlJHGp3pk08(6uVb_{zf`pq^+^h zJNm*&9o4R1G9{qML=p^h@lIuXv_vOqGQ5A9h*dRjz^V8rpOD;E3wbZFFM=umvN`@& zje5WJ-LsZkVDbT~T;mPiu0giwrL<*MJL_#8Pmpjfld}`WJJd@m9?#z|ji6a`5cFfo zX;7Jv-l197T|1Q!a{ITqqeHuvz_>N|>%{jcWkK0TriB+K_|ETM-i4Cq$8CttXR0PP zfeS5VRwL|Rp#S2H%TLnTio}Thhe3J9fw0CG)pjQWx#8?W8cK$2S@pBsHMc=VhlIbo zneABR8^8Uh>HTNI?~ea4DY*Bzx8z>t9yyKxw7uW+2sl>jSpt7vgF$yW*)416hyV-| zXoJWOdUx_yfMbu!68@g!Bg;sbRhq%7B|C5en5Im%$uYZh0P7>Z<-{JhdGXBV&-A>Y zz`)a4s^&n)0aCetspUeLo8mFppDOxUuXrc({jQ@w_y$+4M2I)m!`$Lw={C(&cXiBu zyr6`Jnw?gKw#a=^H_cl_b*8>xAtNW`gY9kc3$v9e#*MmCk#%0nNv`eH3*a($`C$#7 z)yie;->Mbhl;tv23BikUG0SgD_iQ$Ax#I)A-ftcKn}_FT#&20n&tCxmkoBWgUs>@x zeo%lx$|TP6w!XVE%B3LT5SaOU;tQYjk^6ON+a8|ttr|9D~Fa3=C)+@W1 zSXf|3?5cRp)eL6gzd&<63RW&|G=uf^we@_~`oaEBMfVH*>jD07d%^ct_LtYAe=}LA zJboRot?^p0$YI2=qDmb%o?)l&@HV}E)TK}A@_b}r)O=*m@$DNr5+Utiqm*=)kfQK# zUq{!<9p#L*d>SQ+q$@!k108)sI-lp}A=^4aSWkkAA~H|)N_NNp>hULpM7T?M?eiBF z$`3OgPpxJeH?pm_49oLuN!f8vdv+?R&q>?REDcc{N9qY6M~7gQZdrF7mhXgUf-_?f zm+x4v;89oha-coIf}y1L*#v@AR8>?l{!;5dY~o*i{DdIunVemQA>!lL|Ex9u7|NCO z=&Vz!#S42ZPuXytF~xER?#>|#X91eWLZO06Vv|z*0_AXTBC&D}jcOE=OTo~RcMd#m zVN9%+uE5nL^9qb;&F!2M^ym2hbOrvQV=xgNA$AGZy&gBU*gr)qV@<0K0gxW1Y>^a( zE2sLNL`0(f6K5A5{{Td&2k`yq=lT7ZDu0Uj2jWjtzX9AOrm)g4zjGjgI?9F$XN21- z45DEXgxd&wze|A6AJbIwI$8!{jrD--+1veLHf_v^@SXq&m`?ydDL$F$hR`XSTjp4X zWOH1ozOO(1hK9CeSWtHdVxGW(4}Y~tVYtBfr+Hk8HLrRAa60$Zgl+x7{_Zs+1F|QQ z*-lx@Dvc|TG`U{)wjjF|Dn2S%+oS4`c`-);QA_H(`uTYYZnC0NYGM z8~IKz4-egm{cPz-LP~MlsqqNi4z!esjYGzs(VmIyxC96v*p^jA^|||9|&9`u=grY4+o|%3Wst887+ccR53><%$w$7Ug{?h@8E407US3*i4)JEk0%&uL}OvE+&od?%B|f z#nrbX?Sr5&o<%-i^OhxQ&gyMxD!?1sfR1q8CJNao^d?p?s?NvGM8-? zi~nVB(hFn40Rw+_UyspsBKssI^M~&R$jE?zo}8#JcVL--I-UR{5+QM`4p;H^UNIYK zuS}h53nr~$WAjpm`^1pjg2gR~#G`e{eE4==^)5|BU-KkZ@Y)D9?~3E=4in7cm2y<&^RZB`fw^I_g5fJSs-x10&f$DajFG)PE&$f1X0WA24b5&o4`Q;!zs695%!<+#Y{ zqSURLNVH(z_)AU=nuBMNEGu=mbXZlNa+6px0lCqRm*a*&xb9EA30$^6^u_MZ(ik!u znFH)F@-9-FlH7=IZdd-Hu$4C&Q8lkUax6F^WG=u$#440?Uw`#x1&!+f!J zC%y1KkH8vHqo>u_`t?fMkf3wxk44F2uaYM!el6)d`kLDtZmisGWGc-B@!MF|j3g9h zpMr)?aTNa5?C3)@D`Vd6ct^YVvx(m=c}H@xL>i1+s|a(CTbs*r1*nDM9`B3iEl)tK zse!WZY3W}|H(;aIaUM0U@0%Ffs;jLoSQykRqHD36sWYACntAAHab%?lnGt9K^#S@$ zALxN=54T+^5&%A8Q>|Z7gifvB&M7-F^qO4|@?9?%E{< z2#Jrh2biewJNL;F4+lxE7fro>Bit{r3eCag&{Nw#ASy)gf9H1u(hG>}1eQ5dK6sTW7?TGsMKmD!7 zd4|CV`3D@2NmBYNf0o?(u^DJp(c$-HYl+v(3x8JD9|VQ~>~dNI75`O4V$()}{L9>Y zH;qYY0>_${EHjnaaY`p2*bYLdy`lafL?(a%$BEu5Io8YPXCKf1ga%W)elI~SI02&_ zOqK9QV4P63pKq@^GAXu}J51hYyYUdIdYP!rdyzYX?&{(^>fL#mh~W2Ss)9uvK~a<~ zj=kb?|Eo11^zQo2K+`iu?>+&2R2lvNGr4JZIpxn*_qhlv!n8YPQg#{$x?Y58JLGkY zYQk@Vz3I$SjbZaLi*5UUUv$0?!uL!IKs|Uj@yZ9J*oyq_Uk6ntR{+wBr&d2IaOo{% zkk4kM^;qf+KksP&t0X;ES8hoz&*Sr>5TvY{#kt@F2aqP>$_E)=r5dWnzxs-$cCgGc zK$+`3mDyC*6su~0a($L8+I6KHldlubG#{`gl;3K7{Xm)EI8es^$&WRzGE#PxXD8#p zx$@5md{I!vLPPb}E*HEhT}FIb=y?meS??C~fyel&3QMOv4#jkLsTwhE&3@mBt6k27 zlQj)uB4e&2+#^lBOC9|GN)*LW}t zMrT2+xQ_|+wg1cnaQc}nszcJa;X%5jeLAbk6Bu6S1Cn)?@ySd!_w<&~7pUm(u!a;i z*-f#lv#L304C!FT7un)!Z+zyYP1l)r990gBw>zI#DG}^an;LI1Ke7Y>rY9>&jLNc2 z_4D|qmVb3h=!xLmWujGyU{^VZ_xy)*>Nf0p@!R?P!y42;ZC_hoKI+FG7%1YoF|L6F zDC&$H6T%kR2z6 zK-Pp9kH4ctV6r!lD)^_x{&zILGhFUyY}NaCWeBGLfGO(;%il%_q_cnQuDgq3yBmSK zuKy^3L zEe=LpKzhOCP$k;|V{b2=@BZBIIz|TP*Ioq)SNm@_VZY-(U@{JbNk9?{OP_zwgiIEX z5BR5h9sM~@o;aJ6^EF9TW+npYXRjAn(fs(?=vbwD?C}AkeNfNZl@O|)CKD>cxUCMQ zsG*=#>EAXFG|LAskQ+>aLUie&A$YM#c>xX~llA6D+~eiJqQCL-P}++_)xow+M|J;< zxW}H>wA6b3YmKgvx(X4J-GMqon&uS7uDTF+g@m#8Xw{TvcRMT-7lNpo37X;9??Okc zm!*~H|CWdTthaw3G&=t2K;t$GSRtuH-nmTrjb;970l^XiK@(3T?e%ZOzis(vAp#Ne z56{}dQg4p!SCsWEFYVn2r+{s-y#$bcCc0165M1_B8I{(KGq1~ho!AfNyU zG;~yClo#~Od>AAznPiDc85kj1bcM-S1$`ocX9m!~lLQb5&?mrsv-`B;4x&TC+wCcK z$5Ab&|1%(wEAK$U3%1>1S^Xm4L3z}Of*mV$#n_>BV04$sDs`UKZXi`{l+*+@shiNY zH*3`l zjJwInaSBB0da!-*YZ-TQ`P(jyH&HnCBMx@OyNpq>WN?JGt;WdR@N#uQHYENyTv%3m zi~d;_>sbLB&d{|i_FI|v;)m_vM0H27c7Ys8bavF1nR^_Mga~F3=m>&X{=tcL2lFuw5EuL zZyh)i6Ao3^%Foo^M-%N6;}?F@$UL>=hocS8Ng%1mV_GpWzS2RSxw zE3jBxygXuh`I=>#@*Pa(#g4pXB6$;xIPOxoXXiV!=p|8nWO(AJ-8AM*EVAy1u zpZy|C`CZ-;d8&X)fCVC$wOMQxep|YR34Dxt;g~SfMJ81BkuD4? z0XacO7|F?y;I2WC_uJ@feB&$-r{A35;e!VYj0WVqc5&Lagj_^pd1rdPWLP(|s8LV| zUAbMpSY3OD%?7pY_xc%- z8h0MuX0I|TaXX;HPQ6R!@!v!Zt~Nvfo&Y)yw$MpkI&WGRs(VZv?9!zAYzUcRJhuBB zAW~;eMNwLO(e=XZlSVbzGe>pL<5GQhHkr~+q#fDVE7eBHD2U0j^+~FZaqg6_T^fV| ztu|6wJLBi3uC-i?gjPtbfhmF`|2e{t1^Ljlm6O~(Q*QZn=iEbJc!ttg$FNXW4NHV$ ze?HQJUKF+J^mNiUz_{9}j+~+q7{4(WiGF^&Zcw8p(-7z;nWP9ez1Nst+uZughro|p z3$U9DPzfzutL4^x)_pcAY$Yi(BL_Q|4sMODnycl?D{|XR7ZoST>2Y9JENaOM-D$yV z)3^es?UCQ$xNHWkaQ$!vJ6p?i$#>$0t z9aze^D>`;hy~=`e>ZCBWTv~rg4E}i5hOSy&9=|RvtF5dQ@s_A&UZ(2_u=g(LQvI8y z#2imvjd9XRGce z8opyh%@bhkM$)_TwBdZNm#o6ujy8_K?5h=uc?lE7HJnFJTz>tc32V|wzJpon{~7Qh z-)2ds@ka9Q2>|U?!UIEb*ueVv50dInfHKOd8)p?iqyYS;4cYJXE!O#ZFXXX?@B;SJxZ{l59SDGN%0bJ;8Tuf{m#}P=S=bM*?3!i$v3(0ZEovd>T-jEV zrqr>bP?O%%x%G2f^-J6Vf*0O z4M_#nP{aLS{I2X%Tf?|bVheT8oT13o_&%enaaP#T+;uS;k!mT6oGR$P?mCrnN4WRY ztIh3+I`9uMTOo0h$K93cUM)dop_H~NL|_YOhK+<(Q%+)0vU12ziZ$d_@4V-c^tOQ& zLypG}#g@@I5kBM&Y72S@D?=}KN-ntpMfEKkw3p8^rmh{Ok^m8N63-ym2hYSpo$m5C z!S@3C8ZgKb;xrQSE4hFX?u1;_4|zh70ez!WZ(4&IH_Z+Gx*rs-(B|%=+{O&t6#bO1 zqVA!*l^(tiE3!AzynCYt%g5r5B8B+16pAaG+>pABvE_ z6q~#ahaJF~Be#?)xMvQhZXny5nLNJW=`&g|T{yUnjVIN>Q0z4be=|T!?`%3VjQo&_ zRD7nhTa%uGaeG=$hbGk1O&(?5lrkq~Spy513eMo9d3E*d2&RrE3Yt=Gq{*X@`rxOxRi}}$I%{}^bx*B#GGlb_YVl{C4Gfa!j*pMPb2adL>*)jlyw46FypJa@AJm)!5M`q9SjwIj9PITCcBw13kXe^3RQ80Tn;?R=h`!gz9zY1_y(Aw zf_lPpO4-7d1CEY-2<|>XM)FpWCHIBrd{+?p~k0Xc^dANq~%4G2uW~KWM zZnKN(U8EFtfs&@qVN_Ey#b$g2IYQwn?j-WLxN~)ZyMenVt0>8{OIWNz!Unb8WzA^! zJnKm(vU1BbNX4i9qnhp$suKgy#x)b#E&7onwHNP5FjK&$rBhcvOf9l?f98}D)mvfwe660oINxBXe+zm0iMSV`X z0&~$09wf&tN%&nIzZVnXaJz8$P;_?w?bkG`T@BaSRi}o31R(K{@0LdE&&yg4Z8-i8 za0>nsCMX&`aWnKSq8-UvF@TtoBhYrN*orW+n+1E1>gKg|vV1G^QPM`rZG^Rkec3#b z(wEjIN{I^vqKpO7(txzw%f~Juc8bW?YDWVSu@>61gz{_)*9anOvGbNrLCt6Cq_VqC zJ=!SqFD732WLkdWV!I9cvJUn}e-yhWfMz}9KL-5q%k<-pfWpP9^e+q`Uc5g2xt>gQ zvPUVdxVw2`bxa28N+iCb->~d)x`I8JtOd^8P+W3Qcbj8Ym`AlAKChQV@hB61CYx-;a_T4UsYd#uc5rK6luagVj1Ay zd^W^45eN$(8wh(xPxijGSG5C(R2DTH;hnbbbsms9(QW0_B^VhGo%wTZ@p) z3kYg^#Pb7^Jy4y%?DU`&WZ+&!ZqY@03Rfy#kf-Eg<`5up-;D_j<2HYoNN(Yf;=P=< zLNR^k-c&z=Hp_vjJ4-h3$ZOkqIiE{&E_3h#W=SszWuWdeojn}Tqg#lG%@ft3o82!w zoRaB)nyEC93$jW}7le2TzJr&xJfov;vH)~kybyzzd!1CR3|<*jP*o3v7G*W%$_FcX z9b&*K3pHcCn(?%akxG>Ek&CpIu;R3lYs0WulLZZ@6;dSeo#0=ACzY0pwQHfOZ{AVg zng-;AD6Crw$kuHtaLfhxU8zpZm{1e2Twy)f+#ugI2bR4rl%E_@i=l$fY{R-2EEW_t z$Zs10M*B~J!^m|AQ>-mQJngz3mq6$>P730IQ3M3DMCfKEv3!v+VompM?OTCs?s<*^9 z8v;+D%g629pMbtuhuyO>y5JUnl!$2Sq+*Czr0APE@tzu6;Raz-q#&ix{xS2|kURkQND8Kiimprm zyVcPr7=V3ydG;M>--jj);&G!1Bw-9m#uJON&`A78SdL)2P-Bu^>|_Zf>FGb1>& z*)N1Ty274P!_~`&joTVrPx^fS`1ywuMzj&QkC{DSNrB)g^mb9^X78@T{q&)26-BKR zWH6TG#fjZl5Z$v`Pz|W^blus#-eRGO!EAhIf8v_5P2T$HMTs!O>I}+{uWC?^kR;(|PfnQJqwdimXf@s06Y=6@$OoliQ^xoRq2X1&Rm+%pM#Bu&*Amti9aSXm zyf#unDvl;{fXG@zP<)Xv3m_VHC=9`OG3%ZO#I3E{v%(bEm(OEP`rUQmzMIy^Q+m!Q z(YS3o^R#1z>bT1V6fEal&gy1JB{88xD%S9B*yUs==5b`fSKw~8p>23la=ts|O#Ha= z24ceQQ7rR}#R3#+a<$Ib%3D)K9s2u%p}3pN{8iBL9S<3RRujFKg^uaP?#!N0n_?aP zjPn-uTp(Qq7^vHU`Q+r>3ovr>epMB`3@tDZ?Y1jT3b~FE9k10Efw7i}3!<>N=Ac>y z%^}>QvoIyTqCy7P_e4#U=D6_6t*1J39TLmrB^FC;-6`uMr#m+e9_(%SYlt?1{~l2z zImcuCbsekpm}uYI7$}K%JXsIxVY1Ww4cb_j5g0`p#vL`fYLzten3iy?5GkM|@Bcj_ zj(~a-*xDoZmFXQ)KfP2YxI6JR87-K!E~(W4u`l%)SSSk|lh zzUUuU_&=}tUzm>jt_P9U*-XyWR!I5XH%r7d3@)2JMp|af9@%Db@yx z53x9B(dxQK3nfXy$&=>3&Lqh+)x8&oZ?yNT+E@k+kD(N5d#WF>Jfj5P9_+0cEqp?; zO7ZcpGSC7O*)~1&Nw$~cKd3j5UF69#FVp8>S`iME((=g&eXbN0=gm^@uq zOBU&$9L5HM9sfF^fDhC*0Vz*_ic34yc&gFb#y-EeyyZMEtV%aU8@9cI?J0ayOGd#N zPe-;u7AtCLIe%xWrY!%@kpmh9CEnz5kRu_AbqWoGeC>NM%m;Z1h-Eexi*t9wHpe&K zq0|)B>juiN6xkQ*r*LZftQb<>8vh1#@n>*Q132YKOg=H&Zy1KY_WZfwB8&lJP3#Ho z4moDlu@$RmGY(unh+(5$lDDIs55@>{N%$ z-08+;tS%`z+$`F?J1D|p8jEFnJ&+@<2Njobs!jeWrNg~v*WlZTCnj?h^m_yr$Rqb0 z^?kvGI^q>YmJRbo9bTV^0V_&#k2hLd{JoGhtQguehxpvG$Y3`iK;)Ceu(v5uEIZAMN*rT@&fPwONO zC3Y{;fJ$9^!@A9JB|GCFBwzM`mV21W9764&2P@##hN=?MtiTB_tWZ^0cE%DGE4p|w z+DD5~F{sSxVsAvOw)MR#t-N|br`wR{$%v4>7FS*TX~(C9J;oC-ncUznjK@lx z7`?N}>3rh}bg}H}e%vY5#`)P5v~mkf62$y^9Z}KIapWo3*`9-TswB?Tb9v0$>#hR+ z(>N-Pgk`&h0YCE-)SG(X+|JCs6hb| zcK)6bw&b5r?|8^7-i0!azxBV~3XCy8^beC`_pN>rknB6xs0J-gmM6I#FvjCabshhnCC{lZgc0%ID!FwK!#-H1S!Ga?j^!#&C%7i=Pse{FFXxRMt81X z7@`1I=c~yNV`>ZBU0=n8blzSrCE!@^p*h)l3SPm@>YO--D#AO@cjs*?%Im{&!m=>$ z*azUyF~QexB-^o?Vo;8feQ=PEg99;PC)rxL4D{l2rYtORzuBrSa+jdOO^1A3`_SI7 zUH-<OOc?j5tO-9=QQ3CwOo_q`dyF@A7*D9;#N{G-S=#x$MsZWjpJKkB#or;*1Fa% zj!wRg2*yO+^^qDw>drUCRP$FKNv)&Jd&7svT|&^pH0H@0;#Q0$Pha>{pl81-EKee! zJ^-kPng@OuzKXIiPWYx#nciNvy$_j9uIu56p1KTG!HS zJC6n(n^tbR>A;!wFf-iGhZR=yD<+|~SBcmdc5%;=9Jaa&8@NM@`DB#!+34|w<5zdi z0cPUWj;*{FGa*XY+lEIpv^7H3pRxkUyvZz}$gRtr~slR$_uPXJwfTu2i`)2;xv zUKhg<9m3QL;OaC*lHH`=bQON*!=edKxq~!&g-Z$^6e5CJm(mf>>{}wsq!2_kz1dWz zXtYxnWm@ap@W6?$5er&;@3_y!6h!TG>?E!wpri}GU@Q?8O%uBR$^D>fmDU2iyhLr@ z7Im*`M$96O4aq6~MRIXjxswu=$Ycp4U6y*J3R z)DsL!I)U=~B-EhV*)L|WYu0OnXXIq-rn+Ur+(PT8x}Dx!tloH9q+;BxA(iDcH{nff z6baa|`h&sANzASx5H6sX4R$@Oe|yb&{7&QEiwQsVquW%TWG}@TAOAmSG zON!jt6WL6+>*=@0`-Qb*SL=dE2SSLK-ae-@%eY6H+3RM-EfyCh4@ z1^#Kp(@OSNpl-=+FP;GP`-#)}H5{?4sME0O2T*x5En>s&s+R#Jh0u9*#uRtkB@Fpi zOUZE4Zk|VV^uooEin+~A3Hz$_W2Il^lPMPLU+C73kri9Txjq4$Hi%zQ(Q3Sd=7`lL z%U)P(jv|=YVtb(MzZqKAnqszi(=5EL)PUQ?>sCR_TxFCm-CGA2L;{SXJ-Wk~_zJI} zu}=H77gP?X2v2>5qsuBS&-i;XYU5@l+iZBCt7A&`cI-pRh)UiI$J1e&2b>O$e;PVY;3ESHz=I-FDyluPiVU zlAV?Jod&Kv>or}vg7-KdN?o>mvc^>lSqZ3Xa)VZq^(NgrnPNlC}(iJ^6fPg#F9UX7nD;% zv@l(2pGDWi)vC976&1jg?5nGwdgCx*lr7a|5CEgAv$e_`hKc5%D>Q@;w;Hb=MjpKV zZh)aFIajocid{)eny`0y?YI((Ic?D&G>{8X+_gqa%Qy?Fc};CdyZxXk4l=9-WECN- z?Df8qXyce$jnJ_>oI$UHzT}Zu(O1nmd+X9mk?&DmCAXx%JGQ|~$S*s6K((MTdwIpg zfYQi1(pCYZraVdUit@%sH-}781_zu;<-Zjs`bj)Ug{x87y#nJSEef`UdQF~1CDejm z{z*m0;BzZScEZ6oF$vhT9RqM&$o81(a}Ah}tt|_Qp(~}k)Af8MXdCmSO51}D+SdlB zbG3-U%I56}ZZ6xeXEx&vqgk?F-yjwqJTloQwQwzumh8$gwIp3S9PBEcyRa3dbd3y3 zyYz=xVH`Zw`hAs_Jnv0b(N{?^y zhL7%DrAMy$V@=zP*6E+E*=@x-5ve71LcWg}MQ3KVjH`*M(`|}Ii7kbczg+4n)DGsIXawiEAuclW#x>ikWrTPoiz|wMG2gK z^>RL_%PC=xeV(tp`hiZW?5a_jx{7V7?t8vlG}T(G5r^`b!NvNBkt0pim(y*t-lo>m zkNqax@&~xYy-w%q2Mbnd;(8o}gpnPHd=c%NS^Hf6&UF3)eVKh`yez2HFX{O@wUNYk z+f2UO4bs%7AB!;@JON%cV_$UMzZoEv{Ai1O>teD~ymEC;!?Ea<$Cz8z&MGUr&}!>0 zsZ1-oC?MVQ*l&IyaR3^Rt*MeAkC;c`c=N?Jv0k8cEJFH)o~?pZerSvAyNqLPC2f{U zH#;yQm_)TYy-GZ(moJTJy17Gv!K_q@X`2q^Vn($RU-pFLA^(HGuj7K~D%*h;mcvGr za&u#K)E;}S4)zm~>M}d^)@_oV!2|Q}&kx5%VNvYITH%p>;Lv%Kk>Z=+QS_ z>>A3K-^7UHIU$9Yf~)ZuoFN%+NMg%?@0I-{Y{8f5L8dAaP3fQ#K5Pj1=3Zhd>(@L7 z+NI5%+oQp1mZG+-zH{u6l=yMw>)@q}7j10UihH7RDx4x2*jp&$#;GVrsI<Y>|tUpi`% z7k*gCCh~@CkMaqSm>43mfC)SXtVsW#L^EEZXmouOe*&aZok}VN<+a?)*Z=Rr7XJ{~ zpyE*Jk{@R|;lySbS9}7b1J%I=h9!=v`6JQI$bAZUtEkN#Nd;ydc4GUwSg)Bici0m^ z%1tr$gle8~y!M;r*x2msKc6W4!VE^;8q$L4l=s0aB6uG_w|nmOk8K*y4$9{gBxBF> zMt!a_w3v;50+f6@Q1?`-G|Vzvrzqd0jH|QJ%<57*+NA{E(a{9P?0b51>L1&Cl&Lr^ zHE+L*KGBOuPiL+qRxKv7qtw4u0}{G}U4T zjDl^NZ_7yD?HjuO$HeqWRNn&EXDwLq5CkPK)ly>gT3(@Y<#fyZ@Tj05+HqI8(tikS z+J+{)Oy(^2Rion;ukmNl=m};7NBI$seWUIYPI-tyWheo+Z_q|%7qJz*h^>qX%u8*R zrt!@UIH6msOo=psN~vZ0-sE#-FO%Est=MO$cO4v3-bw?nG-+-qyfJt_+~C?!c{7y) z8M>U_5|XOu zo>L!`8q4)g26>t9@43A#c*|>#gzI>k1wz8xk@wBWNT%t^-6nZIzrM3r0iN_24lBPB zz68BxFkc!fE3phwHkRPH;V8j8W&zh!Dvn<}+q!&c`gn{}OCHpX#fnaN-PJ!;C}+1Z zgW|;UGWsj9|D@u#eHp|UwQ{jXDEg866O+qvj=3a8jqz3Un{m~Wn2rf#*t+Khm%2x? zlcUKLp6Qe$wYi$>rVP-?OLFPdJqc9jY0_MLfeewB!hGN?#x+Wl8Sy=Vh0&{qgtlfHQ) z_kq-=b)E~V*aeoQTS7wKb7~S!F11`cu#ELU)BO?z)85Ksk)2)-+u(6@pn|EN%;7q2 zWV6qHA7@m9s>3Q{EQ+nnUQ@ks1kyg=!LGzaPO>*MFDI-@~T|L`VMu8}w ztj>w`AJ+qcA0glcxn2%<$Mb4QqP#1ZA-Wp}HY?6L(StA@QIB={;zzot%pJ0t&!L+h zJ)SpsjTeBUobO_Xye4vlqS*RSZPkR0(9bkC7Pf&OFiKb@BGK@cdmtpskF@7l2}6l3 z_Fa!0?WrCN#|o0X{(i{8=PY!}PZehh=PgPG7Uo6iMqg#A=Rf9BCakm zSzAVC#(9w*A6*;UxoB^iP1Ycib{9MoQdfdyA*UWZZ8v z_gNDpK2<+N5BeEsD%LxdHg0b1#$p<(gHggm>gb%-!ZvqIw1w_uj3weJSe1=X-nta1hhK z9g0d`is~b0XGqH~&MpZq>l8vRa6e6^hlVx`FEsgl^fd|*H-`}UOK6Oe?ZLVzgp7Bb zj>V>;Nf)Ej^kVF5r{*{1EwBd;7O$L0bd!*A1dDLGsSI@3(QGzp~CT*;{ZNM6VJylC2)a&CSp+~9ATXD7D$)DbO`inDEvTekbd~8FY-9S z%S;i-iR41`ZLeBNM$nOOAKtj!2!51HDJ;Q)lA9Kd5WZ{`g^=9p1aVY|gvsR7MsJ>( z2^%;t%ETlCfzOI}Bi1ldhXoE^O;asfyH(muzKgPN(1JG^m?8jmdZ#qxN^L>a#7HkK zF2Gq?pmKD14N6oRwn4PJu-z4#gX5#(5FZZ}6*bZR?S zK|n#lpphV+FWLgYfS=v~1E7GTq7gHYFfuXo%h|;sqrZ5`Cm^q9|2`_ZYGR#U)*-7C zLP6g*=af`Xx4KKnAo~o%Z_@G4{aZ+0;QiZ&6}lq~QOYuL_VYdUPwaR3<%nKIC4L#j z=3jOXlKTX7jy(Y)20!&YUfNDw27D5~n=SkP;NWrS$*T>V zb8Av_?V}A-mtW6+Vn1Y*v2>4pox{!ecB_J)GT%s09xDrJWY9>FU?bYeS6lPi~9Xl9RG)?VTS<1Aj2ZCqOL8~46>=xg)z0%b}w z(GN46-NwY&^)y+~x?R-~JGg?aekC^ywStq(kTQrHQQthh^#p)#dIE6QJ(4gHogr8p zmxN`QeZ;TV?n92FVeXd2YIUwvWkYK_XLhyPEv&Q~i2Qio65lEVf1EqfpQl_`r}*wY zNA#=}ik9+zk#4XSsu09yjc6(To_N<6FTgB}+Xh9LN=r72G&Hiq$tWiLJc1&Ltej^` zkLtm0iXqx|90woMgu(5Nlm(=VdwQyOO$9z9%9Yv&caam6<*lH7X9=4MS&3gcY9N#P z=*x|d%V~il$i{6J@LG(2wgho=$vhZ3_j3gfh0?Jkmep4EP1KITtul%6N{dV+o(5ZS zjsXYodTySTb#ULuoe2cG@dnOUgOeiBkb_zQWp(iCE=iH41TM&YsRaa=p?M$?$i*PP`R zjuUE?ispz}SHy;hG7>e~Em4O55l_Abp)PQuq*$D+2AQU-FOHF^*-|O{t-aXWP=L}r zgwR>fNZL0I<>DIQSDFhBOG*a}$QI2XnwBmL^rMXgV^gfSrWeJwL^Sa8=VqGd6;2xp)8?+4;~vt3tIqpM2eij%{czwND6f`Etpjc7Ybo#(k_MH!~uUG9y`#_As}ex_-~lSKs$K zOIRabZ_BcZ}aD0vHJ#5``uK1YdY zfeuG$7T@s%peyBp{OeK5v>*H)ilUi`B#`EiztM}zF3qw{>${hkBLx2!)TwkT`4A&HAU7J zGf+kdY1Uh75K8<-@v1zEf86wh{c>jZ&C9P=IB>h$3j)F@m<;~9s!J+#gHZG@MHA-i z&9+}y0KmMu^>XH3hOnI?x>eqD@o^1F1#%iJ>}ty-lpNcCE*={0y40oN0!89~Rx&vR z6dkouRpHW3+xr-6`lDQhZAwOw#^0oKj_&if=9RJ$7=W>F7I$amV}Hr5{F>v^!g?aJ zf{(_mgNNI&;ui{_$?0cl$F>faQkwV=3Mx>%iZh*KGc5ma5az-5-tZIYa&cvG3IjxT zMD(YUV!@lE)UA>yZfSUlRhD}j%&4+Ey(Qk z!f5P~ZXfXuGw;=zv7HKpi~ipX%PuF$cf-1Sp*y5PeJg zt?Z#mabn_=h1EUWPiw!);J)!m?x3vH?WOs24AEo!t#T>X?yZF~s*ajYntAu@bMcF^ zBe?H9vyB@BC=V7+Au+cC5t9uvOpc$;@4zWiLuPy$eDg`)C1*^W_8C;djVBu+QHMl} zjM0~E+*7}68(e)|-4Js0|7|9}M+j6Ld&F*NhZ)_v=RQCjzea zf@Nh+1ZIS`5ZUtzitC-zMo%#Dy_#Vbv*D4u*zvRe=Vi(bkPVM{}*p>8P;ak zt&38F;-$sCSaB&N6fec0xVvizv{)Ool;ZAIpv8&=C&8f*oZud;Sa2xrbmx87x7S|h zto7r3>wIhfnIqSeC&_coYi7nPGWA~{KZxLpg3q9wAAMch+Bd>a93t#k2+{FeX)tMNA6*eQa>}G(a(JeY>RFdR z?c6=nZCRn%-5Zc{`tXgutV6hS;pBJyE=f5GMb)w~5b3n@p;Em29vy(DoKt%}RG9Dx z3SN(=P+0*qa2}~GAEzPMo9H}4Ukh+1n2?B>pB7khZR|zbwH@kFaF12SN7UQ3oNC*= z9e?W@?^RV0U6!$y`ET=Wi*x9Qp+!z!oxkr|`Qht2etqnh+yDuNJV1dw8&8@UgP_z7 zG=Aje@qNp3*wesU^^U|*GTgyb*~>F9G`+e~SpP^>;pJe0CzZSHgr6=K^2(5fN(lyY z*FwyJznN3;wnmO-ySIV{9t~t_qI! zs!hwazCU17SC^fezK-k-7KXPd2?=hVqzt_@`w^bcLx9?quY??EZdJYAqObf8_Rq*V zHdnrcJAWrn^{93vJK6=14u&68Wht~ueBT@;NM@zS{MXGpq(~M_M$`6^(5G(x=9bXuxV9`Odh)bvx%sxdWjUPi zXAFiDQbysSoUw#yIgDdLyvI!x3}U3+s9xKRHcBXZk;AursvTOg~T2b%su! zb4!K%!6Mtw&y4p$-L>T)8v26-eYsizHwaq;e7~P*G13hI3LR8KT@*!=byL&h=Op55 zw*xr27{tg8*>oE@-lsx&s9-l|oTj(CPOn&c&+?o^4-R5v}WYeX)~_pS?Qc1@)Q_L35Yf3Yil>-qI6O-|gZ1coI+VGd6GR zI}7IrpnN`KO57Wu`@(LtdwQrI3+QlJD}!6=<6$&efqrnftp;{`c|M{qujS`r;yVR^ zLTKZHJC2>UJ4mZ+B2PqB(bM}(@5_4P#p>GD@3*o!T}j@pb=ToIfMILFOuXigrsn4i zJnuhVEfxG<8$gH$n|%sA2*MIilCzKIol<))E8hov!Tnv?t zKY_fbTaN98&&I5*jR|*l*2G&;i*yYko7(`4|FL+#5iox-gl#3E`_M7m846V~Fxkyx z^g_m?MRdUf7%FnX+anc=&u0Vuuce-8DR5WwBpW=X0Nm=JCa#up*+KlXgMf^yw!D zm0}C$=C~jUC2&S0fNNAY`c2k1yhhnb7u)L)nH$q+%XF0C{oFmVJQd*E)U}rDrz)T| zEwBoc|L`LNlMjdLH1eaW^q0g|kNPr|FM+%JdIQ-CBAOywq~9SqKGb@U-$YeM)%75) zMw(Lmp!vi>B}tQp2EJKV3PCq~)G1eFGyc z`s%i4OueTv;Hmm~hPqO#M3lmET}Ph8HzR=RS)3m8S>}3EkEib1{h-0nu0FAyu`g1| z{)2)cPaSvN@u?s02(9tm&&2sUC5V&vaoOgf{D#llwvFNullvxDC5I$LfR6Frm(;wlG3IdcG4qoj z{jStT3Jg6n5!TJ=LLZLD)Cn>;#;x6BtPQD6gsl5tD?wS_!O^&awDXu6?CNkPVJbLv zggc9oLB=v*JujTqEv?#kSnKW7XtSu8+q6@-)yOV!1)%iIi?*JKZHY&2j)y1$IOuTD z2oONjii#Km_c2NrtdlE=9!g7QZ4Op9@>I`;EtNK7t78wfS7#h)tRhDS+r$dDB*G+c zFkn}(l_|oOCCrDk; zCO1i7w)H$dyN77J4=jzAuU=VpAWnv_v2yW*n_MWuwYgyL^Z;ygHyvtj^#1{3eCU82t1{(+*a3ydA7P z+^ut4rV1kQs%#^*#Z%`D>g`_F$QGW>cxrhwSA}nxhknRgJ1o5%zeQAD#4cu;#l9Gx ze#2p_W5p||+g=Z)1okecPM0Lgf6t0RAc5m6*iAfL3T&(iKuh=XjvD!GM3(9fcS3Hq z9Z1jWHSOu*y26Rk=@P4KThbKtXQca-P6p7$VxrzeGSmcezz8VJ;y-w@$!DZ7hgT3Gm(Zl(`gAW^$9cRt9;rEo)RGhNAk>m2r_TjprDgBl6gZO zo@a1lrp4^hpGxD*Awe?Jc~XIBY~y3Bkm4vj^>vVK+EP=`Syv9Lb1#0HJ7&w1*tu1T z$R-);M$Bq7S92$H5_~F|vovxs7{m9T+cJ1dvgGI{^=4v4mw-t+j=Jwjf3-|{lKc3e zkkgUkURos-8*g_cRT$|tmrz;rCL)Fnzk$3S>YT{bg!_`9d_FD+{EtymVy+id+O z9bFT3_eN!-9%?dTg$y?`BwHMQjd|$iy+id1gV+cOoE%MvKmha^cn0_99-U3Gu0@+{ zrMU#}P~^9Uvv^jbbLH=|$6?9XFA(>)*(cU^F5z`HFw_6(#B&6^XuOW)DKv)m5)4*^)FH;uVJ%08yJspUJSA~>)Mrg+tXnu_0yj; zXz<^r_eH!XQFdnw>5(x|?UXu}sv$u6rJ}p?oVswDo^Kv-;EY+OD)0U8LQ}T5swJa| zix$@QmV`On?_nXvDLYxQVeRFGV_Xy19!N8kB+~Ke6uEK0 ze&vz)C6ZGg0-E^8O$G&n8M`$0QlD8Cxm^A}F>IP(NxCZtnt*v{Sl7yqfAT*+q{@&8 zvt;p!Y?kv;7@z!8L)jE1$<0&qRi{R}Olg#4U%^1e)T9ypv?<%$8@93*GRhdP{`2`1 zSQ-5L+p=fPDNHv(hDB*TWlLQ62cD=X6>_`5Bp3K3x*30sV;X~ceOJhAVEcURWtjOX z(NI$QQn%-e1M^hsL3H2f>|cMl2A;v!Uaa(j1SKMa*h%P&#i5nI5VqA{Ofu9P^Z?jx z4CbUFiHGx7K`T1s-Rg!b$AD+d$v8Pl7wTZ%D~aND~;9%7VpDY*$i z`DAyy)^F}w>XFI9jDarhgW8n`ni5ALG-UyVNu>$62J-{?hq0K?u#yxadyVBrH1wjtpRT_` zjHvyCXs{!irj5)u@OaZ0tGx2t#!}f&mMXqEIFO^45&q{0-PI_%Q(A;8^ z!M4lw)PljS3GMchHZl>LV!-Q#MWYi4R0W^)}voZYj>c4R~h zJSX42PS3gwu0$#>s)4*%|C%MvjmFXLLPL?%#Qe!ao;3fx4{b)3*HSNU{Fnb)=k+gA zlKx9NE9fW)BKzXC&|4EY?nL!lRJ@1XF3ISm3P)6lrRF8%vPcpiH%e(@ zZxp^$SgCM9T>!>rCUBIchqu2wR1+nIx>n_UXsU(GSK`W5L;g4n>sAg1)s zIBk~>O52nN(QEmCuy6$?hjQ*p!-x0O|6u8MZk+x2gH^KPeyxo`uRfqhf9#L!oM!Y# zkSQ=;znPz`aOInSm7RQ{BOsU9YHsXi^dn=`Cb$x5Xtue-(kbdJ6?f3#_d z>6V%)G$wqkfWXP3P!p+pxyYcr6U0fKra?=w(isvOu^^P*8BI zP;esrCM`D}xye(K7(g)VmVj8Ykzawuh$a)*+>zfA8q1dW@~P_C(YTdM1A(FVsU+J@ z+;YEh3I^L-vebff=e;IUzbAW|Q(q;)^}DEGuzg8iV&_T7oA~B3PY!4-;4NcP&jY8p zIbYw&7rb#xla>BD&&O#(8hpTOb=6rytFm_-Ds#D?(7y#QWLD3g|GoP>U>QjF+WS_5 zrCCW_nK~kr9rjz;b^SW>*;pG|e+$t0Nv{w#WW8^Pz{B-3IbI{V#Ai z_C99!r)zGB!{T9f)p469r1iH*ZxdZ*F8wQr`PZ09Q3gSU(=yW11ogf~F{r}P4SPE- ztX|>BcR`5cQIZa5qb(?>gMp!eEi&08M{|0a7yGhXZc7M9IFQME_&s-zqg4zL?2SzQca_Vl!_0kb@Wt}Y zvE?cyx_MJ-iL7uN(~|tiG3AyYb`(?81&E&<>%mo1Y6vofd6{Xoh%-GufgbK8;g~l@3rKsPEYi_+K;sbwz>?rjP*KATU<`-2rdw)F@ZJhf+Dqy2)0f1ig7Vec?ad=X%WNeVcuRg+FMW@;wN4 zoZ{E1((v$d=V1>a>BB0zJ@}oDdt~5apadXtl%Q?7#=w0nAu>Htz~6X!w-X#w$o_`X!YHQ z+t>a;b$DeTRd1!F1#mIXGp>ilZW|L1mPLqqfI|CoTte-~IuCLJ#AvEy9m!16t6m4+)M!ckBQl>xy$X4Bi zFaEOAm{slS9_rJ(m$ZkSk7ZyZg{L|(H+tuD^AF+_cS8-mo>kBB?uu0E@~jLJ(Qa{q zvnbGh-95c|^asm7pdMeKIy!%>_VdUd?z+eMlNx8rYW3y``BaG;jUT2w4zBn^C~ zl^208i>byL>H8z`LoK3qzBW))7K>SasVuR3YSfcEImi5@3O!Y|_E3*Tmdrk@dS?bc zr%W#`{sLr+rN)%(MI7V-_3y#t_!d(_KX4k4cRtS62 zllJA_y%tGZvsptANh>G8Lc@tH)H=RPMEdhg8PXR#NAp!sJ8Cy-#Z=!%HTW3prlB){ z4^gcSYSOOeRy5}W*rov9Z&dtF3raoL z+7G6(jo62{(|5Wrui878QT2;#%276Tek*I}vZA(SzX-9CrtTsTTV`|Au%*)5_VfG_ zuPJ5?LoYmQ@B+U-nf6p*5YdOTB{_3})#JzJbt+@&okdRJQJy0yMB-6vC zZcVgztwp{oyp318(Yitxd$3*-03*tFsu!lGG#w1awI_!kNxc~IJ;6z=Xz*M&G{2p` z^<}fZ!A^#Rx`*AF{UQRJ;o^Lg+;?Phr-3hO_~}MQyV*KE>O%qWLV(X>;`%!1f(HBG zm4{q}-8a}=ekLc@j&9{vA81r>(4QHrWATxT-+&p<)LRd=<0V_77WG=!2C3169gG(d z%R2N{&VI=qKUz#UeJ1}kru^gWwrQUM>5?aGc%TupaNaXr9{h^)esF+WxYjDS$zXip z(qgl%OQY&oIL*hnrWW&4oojhvKZ!oxf&{ed?~q#!RCG%*(%j849qn>HR5bY-jA|1pv>m^9j$_$FA>2i6%U%QB)8H$YMQ? z@XLtCmM8d;r2WX#sxdmIe{{p-+HJ{vhTPf$m}ufeU#Z(gZgoF8e}r+K`muqX*rU_z zW!)?p;7>IaOXfZ4TXo5 zt>#B6ATevJ83oIovD1md`Q?RKj6jBV-{6Ljl1M)IINR(O@eA|$nV8_+6;bjy2F@z} zwp+m*TaJLMqLb{Vn^L-HzcprgE_epJkQdT=I%D#|n}$Vy0&0Up5@xQCm}GQeR%Pkq zaAWqD=ANot3QM{tc48Nk^cj>3v@@F(p2b!jP(!PUVb-%LAXOaq=<^mhoh~(!i7(M} z@pK{~(h0dq)P$Ev!t!ntsjtIyz6Ir`{J1*SpAI|F(Id0hMUue^5n4UL2Gw%K87ez~ zNXHSz&!}Lp0Xd?W*{Ba9W#%=QD1 zOp5|bS6Rbipr%~-lX%{5qf46QlN}|P=h9ntJ7-800pMlza28 z>OnpQ@|wI!{|Pg4Al*nJS$vE1HT2S%!llu0O|e$?la4w6uEIs};qSau|GDHXp`s>I zgO7S4bZ$q-e5y`UJ;nkkpRbF0Z4Fg)__Lh>JPKRdxdBs*=B9VLp`Gk2`x2QP6Yr|e zhZ5mYDrqZJFCD5g7u)Rnb?QLBQwm}U3gr%$ER1}CENQc}b9xs#^?@`dD?;reV9i3R zx8*$^KwEn6E?&kpLk3X*jQX}9vR~GfUZ;M}QltBrpq*P@+q~B1u@*%`v|5Q&;FTUe z8S4ofL2y}hWf>h3Vl)VbMaDi+woeqLaVZ)JZFPqocRrS$)o?0Ud9QoSMM&Y9T!DnqGGShilfrPx?I+EALU4^AG#7(Vfyqugr zl%pR+M{*~YbslzYITF$+$cdVx`-yQ^JHxbeZgD85@>=o6RL z18DuMoSI1BmJY&SdO6-bmR1<+8~o^f&ek;5UDkhT9GSk5o&-zz3-nRde2;P}GswAl zgq>hYb5yPY*5J(qCLg(a>HnV(Th0&Ww64=+8r{IU1AZ8p0#$8{dHzo5en)Io7rYf+l^XvK<^|j<;1SD}Z$raNv;UnA&L?Ek zrJ3p%*2R2@ej`$(ENR3;G}iNbP{67%lOKrlB*80tO<^6pd7VQtQfqCf(YVd!=NF}L zG~u7R^^5zr5)Jdmgp1bx__cRq{j+J&*#tQeIs0@|W(uC#BdS(X1UH<5s7HA^OOB7M zq#Rp~`{*Y1FnMiZqcif_#4H%6%%^X=cJuzS<#rJ z8$9s)+-A4z@e-!FrBiz06?0!$5x@Sg-P0sh1p*v`DyEu|pZ^(tuM`L8;;~%X3-J5Mcpeh^s z5~$-R^}|j{J%Z0bLh|{v;(2_{`dU$wIu*+p1y*6=t2!QWewloZR@Ul3!@Z;>4((ni z#fN3In)iG&BA>l3XGKZs#G%jh*sTO&>GkKMfu?%JleUiUcAU$*uP!~utkUOT8*YIR z9D$-*g1NMTwbnu?e&+^D?B1k0^NPT|+9-fBWQXoq@7p*+EkfBCWx;aZ_l(9-V+pvM zMc;x^B0}E!{eD4nngc_ClQY^Cfg|QE8hvMy0a@nMVPFguLuPgbJs(NIhF$%cjyoXG zvb;b(Lsu?Z5%;-Kr)&kwVJjB@$-O;bhc4>3bkA3_Y)hiaN>&xnbLZ^>>wm zlY^Ilu;bB=nhtD}hTwhBGW75;YD_NXAo_LkyF#Ys%PoL1y3afE)e^rlfZVC=F|3fDzn|`c% zD9g@b=7e@S(^%&;ZUv9^X~E$G_ucZT`r*7jf8`iKm=0d22j9*-!}(_p!;Z^ zuxkz2Vu_A_iF(RlhA7Duh+ID2B5K)!iTf1}HdzsQZa~dIKqi0b8YBlXsGF9s!O8Ft zTQ+{qst?4+)}O;|yNsmby}9;zDkpC3v9}BO?(X>9r|bD)S#>o5yMkyBW-0ag#?Srpkg<9U9CAa)BqI|165Bnnn4sV zw;yQVqmdk7notG^7(t>0$9AuO=PPLUPXqo6}5#&6;64ESjE zhirGO*5F{Otq%8v_`9->(88d5n*9SQZ1r|8J~};$5G2(yHv~INB;oyJitSo3E6hx| zr1<9N`nQ`m?mAGS{S^>=A+# zDeeFq(E#2pHqrPvy+Q^FWe!U?vN;zIDJ= zb*v>+i#!8oveW|HVo_JfD{qU*q5-) zZk9KzPD`eWg#*b@z}`k-TH~BgosS&34zIWd>beL+E|rwX^7PeE8z*+pokO=c?OH#4 zrOiK{1^JmDKO$RiH4)Lsn zN>V$r%sE$q|DVnT)FsuZlmp-2Sf?R3hjgHn^FXUg!0>Yq+q${aC8mZnlD2yx?QiM)|bJbuwd!b`RuM$j2)6hs6XUlp^``hQ?4+D9mK8Qdbqu$%ZfHeii`RdSpSg!`d$v;u3Bt8> z?lpGFdwu&Q0CT|ZCmw3wBKBCRlw!a$%yCB(^}&M~s?8k*oxILtU^MBvZHffj&GQLI zYiV0e3ohjf7AjN$jp}!)>6^WVWql#Jc{UK;6BJ!v!!iw#ALsxYvvvU z0y3Icvjeezok=;uV3@+lXp6Cjri?Vrxt%T$Cq^^fPBu8!eDS*IHn--xH$eAv$k~`> z1|v%4ty>*%Y3zH{^LUE5o+fo$P_oXk6{IcA4bg@B%MCD-PYIHfJ4=xEC_KllV`H}yv2?+?(OZkx#9JFfAHit&3B|G}c~ zm7`i0d!m^r@Jo!9H$>M+W7?e4m})ebs4#Vx-?H$HsbY?l;azL z(9!Jyt>v%mn$66q*DW$3uM5;}at;QyH+6~Rbtu-^nm~zcAbn@W$o%01ga$^@cYq*5 ztuiC*Y$ASHPrNEquy0tEo(VAfZmV(>Lch7olaCLV|z^T^tW05wUX;c|6nC-yuW#oSvi^&#iN{OK@QD> z^h2(rJ^k>^zv5HRtG*17xC4}u?Ma*1czRMnf(SXC`dp0qFT#==A_Mhe9F|5wx0%ZE zD0$SJ58Yw1&h`Rze`Z>Di@oiCgv5q^VU#JdRVG7*kW>uMd$0EVo&J$p1vXf>TGyUG zRln|@+>Fjy!lZ^N$QJEv%vtt>?e+pIG)1_gV#@1#w|D+KCR?vFlCcd(6Dh##g=yXL z|Fgisw-eS7XZtM-uDL*FdN#R5-Q_fa@crSGeL&_{@N|I;WyY4Oj!|b?@JbCY7{6*e z*H+@eEZ-*hHwB5;X?|nO8xWo%?dF*jOz{zR2?o?i{s3z48Ojk2rT+$}TkY*6++(sl z01RzLM{rSy9(>P{D(N^4=~5~h5Qsam1>TfUfKL*+L#HNDzyl*y;iF?8r#FXGPmt}O zC?>tl?|}MaX!2-W#*>Ing|K<929E?3Y-DtWC7a-f06SJ&^|!d_PIqkoh~Qk2knp-U zg^0wZ5DV>8u=1FdF%g|kse!@vaYTn|)`^h<>l!(Vi|)JdAQm3vY=R%iYc&`D{W0&4 zSrr#W!rPYF41rg|i^x8j6b4at zLGB=@S5;&$-B7EOn#oJU$rAQpD@$;im*hSw{Ih+hRX)oDO#-b>>-cJP%vH1sIf+%R zQF?wW%F*r<^n10=i~3($!F& zqG6UcraQ8o0jmp7n$G9>lnUf#auJPHvvM>}ch*1kNZ>M;cnJ?+ggw%~n;Q3_wXAEcsz=ZL_o-gI#NxAV{=2;Vl> zU1K<(m_-mh)){L7N7k(sq-*ffg9m0@2~~uqpCCUEgI`CyN;~+jc!Uif$M9tr=qT6c z4?;64KW+r3%J;kkGtwI&5FsLaj9wN1cCrW))lnPY&8Z2{+c^HwemVuNKn22(rUBOA zvYNurn4I(3;tN0D^mC#90{%mYFH>32)?%&7wv{J0@ULi^vqMV-UT{X^2fF4DK=B2k3m6`{`^( z&MJX&NX3Qr;>60N=Sg3pT+-s{=WsZboA^#*EJiU^7`l7w|MTTRu*pZP3}@+R9ozd8 z_0i0BHVe-gyi&v-(P}K&BRNdH`0IcBWHfD?$(7GUnV(09C=3O0)Qb_%{sk#Cb21Cs$)WBeZnl0)mx_L4;)tw(DaTbkc{9|nMU}d*uvz^W4s6N_IMEY(}xhOnep|=zbyCe0m^zg}S zc(~qTXBU3D?QllF-(%}AHv#EE*-$`;I!$4|O7nMHUf!46hy#N1IpCEVzeB_oTFPBbh8um2dlp>@<8uY0@k7q2F1>RjOy=<=Jv=s z_~3Ordu1()`V{D6eZS^-|KEhxg+Uw-={0AjO_;7hU(CVpBKOKJB*=%lpoG0z45MF)VlcGD2r`l%l7zud7G zBk{`kgZ0EYr&0S*9A?2SxiW1$;_W%rewO*jm15R}8dHPJY!TXo}upg~SzdWU{lS=pE#omMjY!o9Zx++V{Nr%&&0mRzlk&Q*p7jNbfu zA@QN9iy;N!;r+-3yQVhl$HCmI*~;kLrn`Nq#lV`va>AYY?vCnX=|jDMv5#Iu}Mod3~fZt7^`JPtAD8R0S@5=TWFor(A8FJ1ngqCL#o zy3{lUF`}aD+TrW(%Z$@TkuQ52vmmkV|0O|;AJON#HzEnYen$isBlF5Q*kJPCQ|}zn z#k$uk24p&|w}O?)cmqH)#|&-q;5=)>+_JE#oEC;MlaK73vb;O3=Ik0C!rC?UQsFPI zhi!U2vm%<&wF$w*Zrm+l$mfFMfx@0XmNZB~jg(o)V>BR{Ejlv|AW4m2jFq?qaVN_E zNY9w4^Q5Y4Je#uj)ErW6qN{j9h3Ppbh4)nk)ovYExJ$ifqQ&UekeoO3kNYRnv)&vh zswPjYFB$AYi-nx$+e@X{scb01LlHH6-<+gmz3ei-u9*d%wxLq2Fw#WjM?&xK4nt~2 z*w>fnpq`0m`nk=qQRVycBh-gmG0JqJ%O9XAewpB> z(IV6N12Pohy0J{_ve>7B%fC681Zn!X4%#>^2YEs>O-Th@j0Tbcl2bR$E6r7xlMRsA zC987+AU}$8ChLGD&%PqF9j~%pOwOw*^KLJe9lf=i^B1MM-a$5Fa0ukw!YQ61Ph*^& zOLepsC)xk^X)^7k`aIrO4;EHn_>`-oDcq$Jeb(PO>lc0=tk;@aE~m)K1GQHezLk+Q?-@~V3d z17wV7J=%~mN%orPWn7Ea5`?9oJ-bH&tm)+ycH$^qSl*i2#nQd2Yq6}SrAj;%$#TqA znwm5q>{g>NZn`7mWUZ;mAt#nSHZ_>T-n)=6GX| zZ;5k`?f9!YaD_MIxI=hW7{W@FWoU&k^ zo1q<29ZLb+&X3m@Qn7#%T^#Gg@=|w!tICPXGw7$OIyRO8#+Z5}Qp3sM{>AQ09t7{D zfk7;+e>LSQy6ivrY!H)@EmP?!UuzR77VOzlR&T0c9BJ>yz2IAJR=7b~=V&DOg5L zFVS0S^rcf9>^BZw`g=aCZcIq8aFtLj7%>C0_DwoZ=OtDžmdMEpGKsc-V?+C4vk zH0q>bPVqhE@Q|%ZJ-_zj+vq-+%RSd%m$Crig_L;D=;(g-&haN@#Wr9kNuA&FKjn(^ z+9H-XJ>zpJV98$KjlxVlZF=>g@4*GOy>LsaxgBWLH%;{K$A)kM!xxKA%qrP;?Aqli zTT7<9Ve_fwGrq6Wb)vT7h;8M95tZ_uLne_kI$4z+2D*Z{Jl3O5d+}ig#~_2F`&@*% zcr`<_p1a220%FGOXRzvEE_I=gfdr7S*H381!@&jN{eT9?dwTZnwweQ`XVRhSOcLO| z-IZU5=B*Vw8rH+Nvd|yjb}w|Qv(V&x$Z6-OH$9m~J#i!k;3vA-UIP_Yb6|GJ!{1qD zNgPIyyw1ng$TwJ@7IR)!I71s51OQay+}mn2 zsMHGg*s_ioq$!sGV5=I+v;2e+>Q7C*fA-_5elEf39i zi^UR@ZwPu9CdpKo^~zu!G{z+#)D8fI~k0qQ>Nu7=JT?aQ}-!1mA>`5t60V8ywrZ$ z7V#72EH{xEU%k!iO!;qpd~t0R0Q09Z0dq7<6<2AcMYiH0b;2opFS^aM?BwgOnc|t1 z5nwp6=|6-C8vl|g_-BU?7g5#&Ez`TlVg~x$B!95b{<_KJnAVf|;k9nZ$0s8(wxfN0 z$OQ(A_~$i>V1LU2OsY@5{cJGwkSAM8_|@IzUC)1tciJX{>0~(80IRCRcPhuw-uBc+ zjDp=*{RExGxBm8|UFJ$zx4if@*tNJ5QKg>4f{A-^n?=nNQZO3^r#*l2H)MIh*woh> z39kqj%UR$ZHkU96C_RaT$EcavZI#iM=A~xFoqQ0;xz_SercWg>o7)(fCpP5>LA?an z7CrZ>b(7qmpM1RM$UjCzkTj54-RLqs?A`{$h@YF1$F{C5F8DG~Y$UX}~`!;~Ft1=AD1TooC1J z6!m2ISMQ#FnAO^8$xW#qli-%zX<3{wv|^~vK+6vYXVqz;=cPxtdIz+I^|GSkmfa?> zT4ZjmP8HNX5U^}p*IobhZsHHtsRlZDbzbsn(Z%|#r6$6LJGZyE(u=3cXw;t-5Hz#W|;XO z|Gn>RycfH%v3K7_WkjD-eNIQ6iqln@UuJ&UVK;k{H1?2H)bS6J$c$ZT+QQANUR4I) znA!XKhl(GSbKTdNm4zF9I93_*r+xh>x6vqVB4h6^m$+PQNpLNeIWJ;62n4$)eICmZhn;niI(Se-BuU9ZKn= zTdS&@M(B6@ha2{nhI|8Y3qg58hRUH}ToL~-%8Zb9(tl zZ5Sq&&!|U?4anWa;;Vgrwo1`AeH@?e{sPE}|2-GcZt8I@DDM1gnZ={9wA52u=DnYH zdufbXg(A>bxYUVEHvY-&RvO` z=SfzqiZ4@deb$&}%87F~v{sGPcciqmeTYM6#L2XX!-sJ!%Plje9N`k5OcYw9T~Pod z@eF@mi7VuHq|BI8bOOZ?vH0SMw+&`K$MZk3EjmX(t};KqbifQ5I)9D5r7DTMxywLW z{90C|`c>JQBSCUj&u~JIEjcel?QqjD2H!-ebd@{0NO@3B%&1JSpIN!YR}g%yZHSup zCu0w`a=4muP2IvmEQZMT_T;Mlrv!q^bh=3Y@4&vg6q>%YkK$;pK6#di=<{5)7R!t5 zxF3ml2v9vPj_oS;7@$E->RoV~Wxb6wxvbBIF7;Aw=yslaV`sHRw{=P!p^d&(eA_Sb zErn^Sln$fL^zS5HiD0=plJUMSvx-FEj0a(XhlqY#J+~Ok&Y4XSD9@WLVGbDoNhX%9 zE5(8yf0FWe7glgnFY||qpVM|IFMlqZ7h(4H%T7xURSE$fjr9pO?(tSe!Ym(HF=dOh z?wRoO%t20=kx#jYR+cY9>PC#v3OlcW@f{axt`1Ta<0pyCc^YY6En2m5^6le3HD6Z6 z?&Psbjxm)IjnU83l(<}Hf)Qz7f-kx71sf64yk-?7IfpT*IDKXxNG~80St^~ZtvP8a zS$?g3aP+DFD|uWW483*8(xQo~8P<5TcC_ig8+aM6dfi&I8yRa}YMR$(_0vPq=9pu)OKDnF!3Vzg1a6Aua8k3_@tJ*ZGPsW-N)S-g13}*VpzQx2>rGe zkg6|WvWIx<_Vo$v`R0;Kn4+V_Wd9rL4s8F-715a?@ZZqE4ZqX3)#qMk2P60o6zL2N z{aoBI8BX>i-SuyVWM*`Tzd4a%VLzC|At3%HyN193kh6=co4bXi+})#-l{5}6vWcl3 znEe|8GK47kN66fb2$>w6B|<42xU1&ye_Vy7)pvB}#4_dnhqAIWRXq~GI(ZQ+} z{#0mM^+wY-nq=Oz4Qm?T6!OaW>;v%7cC-F#cjqt3qI|B9iR6q(@JA)8$ zB!S_o9vFle=?%0lJ04|@q(!L9M@Hi=Lz9p^A_te3o_a1Q;XL$-rx${Z~F$ zpv5@T#X8dQxB^R?wu(-krP%QX)hT`}K`WVj(=5Brf-Z~FckF?pc!KZ>5w?z2*;&$M zN@!$E7oYNYHMFqZ*k9=?hVujp@@MaQQCLpOASL1l`0Dk7;z8>15ShomVAu@FxK8A} z<_hP2rpbX9P>3NS5Alcpr&az-H5mi3hUQenWC9mk>*!YzdrlR=4EIz@S5qh!tUm)P zG)FlWB?5?*<&wM^Uwi4ZZA^B+tm<<1N7Sq8VeZ0x!=4yKh|9wKFFsfY?-iNmnooY_ zGItYtSPcq7{0RQ$hB^?QQtxLuO0sHVaaS}15&B6oY|;c z(u-F}Jy~w8`oWb{tE)aETIp21a7tKecZM=d5=5(7GW*c^d;^`)Xb-(pX>O?EWDfU za*I@hnIU-^=c4KASenT_%ZP{845eIBW0PCtX$i*pVpAO1;g;HZXk*2gmLL_yS6iAI%ZyrC^*RWJ|&NqE%fy}yNU_&OEFGzIyLJrCOW_}qg4G=~N9|lc|2B+Eaj)Kz39jq&T-%@ZT z9nP_p!c2=KXkDGmtet>i1p8`I)`%Ppi5tgTIkRjQ4@6CehICYXFmu+*s)gw= zL@~7Wimm%lyIO9lt(I&k@j);K>p7a51M2&Lj4)-o4CJ~&PLC2!=6BGPJPE{DTs+&B z0(zuZX}nB_rM+bbU%ACOE%MtEWTrSO+-^lE4z$FO*c_kM&|q*MFsl+aJRcyI;E{h} zl`Kx4kO9Fn@PSI(nl0vQ?Ri%anCw3}+{K z&rBr$I725wjktA(Pc2BkOcb1B_G5%$p3c-^A|ia<49nU=g^C*?uXoCVlO`*p|vzI7KH9L+ib)kg?K_aKEpoe|O zQODm+dsg^tmjNx?Ux(CHxW?3-Yt=C9FoRVFD*O-BKeh}5)lNq7*W87@s74Kc&Rcm= zj2DHhjjod@xD8zi5o!OBKMvo~HW@b^_~CUiF*;j`CB>3f782^QL$eeZnWL0~(Ao{-K8+dhCTb=SAUpU7x*ES&_q^DW#St0!0(9 ze*C=2SmLV4vjqtu8i0xwPg7oXAg?7PkB1d4oTX{ZQ{Zn=-ba_L8ZDfTs*{_Xib9*h zGsw1Js#u9jXT5e9L3T$IJ=Z~aMdv4C?rdxA7pq-n#xGV?2`RJ^Z6N^~C@$yJUSIq{UcHd&7;qYLS#>Q~8q?Io_-tZZYT zwig_JI%mxXFBpG(pX~~8nTR4Sb_88&*m9`$o!0EYj#X0?eEm(mT&qL^gGVE8p{CJM zek66f2CYw(xujMs^iYpmXi;H<|Hz&eRWhYL0l+)6{na_cV5c4?+^xE$2sc5`j!c4W zG%Nz!!pg$Pt<``f94ijN-*2f}-kP?tLJo%<%bLE|F^$J8dP^rJfycr%??|Kdqkx%W zFEIMY0S0%De)J$QgHe)cGI54iW0SX{vA4oSuFoFmr$|uTtS526Kn#SJ9o(2;Cf503 ze<&xx080-esQ)rLx)P7~$M>WZo58+|-^Hko1vEH1PS^b(6(iW=G!73)iT&Dx<_{kO zX-PR|wyI2*?4i-kPcgH;1VvcQBE5Yz?-(`q`Ey>14aZTyvDQoFmvsH(GZz*2_0$zA zF=IpD)&I0yWZ7FH)#7)*XW3ybii(boUcb*vq>(mH_k~#EyKpBQvp$OjBPZ?a{{^6N z+yBXWZTW3?zcvLg(0e5);!CC9UjRJPhKG0rHNS4ZYN=ENkFBFP!HaqW*6wE+XneT4 z(1Cpqx^EcN=akDqrVT7M3xBYj!VHWg=NDFLdys}J$`Gkp&f3%`nJu( zEe4rdW9;3DM)WHev6j3$ei@%oEJ+iq@nPdKLWL%#vw(v?Qw*@a=zQ0vAn-2hj3J^U zaLYT_p7G9}<6)@FKW_{v#>Y>?m=_p!%2C_(<{1hFa&kF0@ZbGbzBq{Y?~mAq8-CoM zX1(=9-W)?2bcb8*F6~`3Ij{HB?PA=)xru#|_Ww^iMhZ$;tNa&pAWf*=eR{J}+Z&$Q zPlw}FWPW_kC8)`E3rajc#$7-ax}2|?qvSf!)tY@ox{l(mv4Nzn3*jjPAwxj?q=(M` z3s7p(UBhk@{7Jgey-vzAd{7^MDE<)`+ktBiU932XBB0G{et8pLdRc&Zb% zScGP*>{B0Wv8n0itrLD*GYkI*MrTmOUjUwE$sQ@f5=l%lps!=kphc76H!c(Qds=|P zwjCGZvBEBm!X@DsCSV~M7%C2A18IVT2S8L~7_ew#Gz-dA+iGvLm6&RESRgwSXoU_bl9% zHAR{hp50nYXH|ji1F}&i<}(KQm>kz4#3$U#i`>7b<1FzMc=%qj&%sw$cYHYP`DY3N zfl~J=^C|hjBkFuo4obZyBhHsE`uVqT&c5uc<)^9ujyB69H|%gO3*+y$73Dl`d4_gh z;c79{Goq%rJ!z9C4xMXa(DnS|xUkoC1RJzVKvpye*sW~A(Yc;`%8SLW9fFjT0_l9F&j7EX(BLFhYB1sTt&c3U?^-Hf8Go$s2`(!C|u4-x!A7=i`opgd8N zPe`Vlo&}`fR(EfQbEYpT2_c$I#Y}L-SvBvU>MOMJ*}HbEkETjJ0D~{a5ie>PDiFrK zh|2CFm*aCf6NBvbS((##Sq}S3O?qmCn@l zYXj)rd`uqhieF;70Xsj<;DeE}%bAW$n;Yx#`8yH`1pLw7D%<&ZfU zLamu-xx1lAaM;T%cj>f9n;^JKvtW;sS_6>IyQy}Y0+OH7DMFIbdDZN>)deHOza5ER zW3M+-Lw&&}rK+WKaV!1qjVbew%aEMiFF>td7_y@+T*_Z3Qh9<@1}2XBQpeBRbMao&#8N)DFh^={0(^U1WV~x1zsmv+V<|4X7sUlCH9U62_j0n4ah(`<=A?wh0 zMibYz)`;5`;+orgDU$7yZyqUqKDoyAUD+Gir(KayYeb=%wcPspeM%ns71F&7Xp`^* z)$=k_yhpNiEQ71KMO9~yO$8elTT&uOiGB*onvaw6&EIT0sQD;zChdoXCB&}1G&}sm-K9am4ljN`@jE-AN_0kxRZk#R zI+uRKXQ=g;y68I>Le)shAKR<`5)4D|$o48!Egbp<8DTNwPS{IWRZwEqO7$(Cx&(aM z)wp*KAX)QZd#~a_ol#iV{gpX9w`Dc-aKj<}CDuN!ndJ>g3XQ6TzOvfdHZ`48!aMfL z&^mEgxH`jNy3xtc400G`i`a@2aw|I(o;8pH(}?Y6V!_vJbxsNsi?SXl~zYcEi}Js5H)%jG+|1obY;-(DI`(nMUiaOtoRh+|S>a4EC+m zr}c$HV+@L#*-$o5Sg&|2+<(k?=PW{k1OGyIO;Nb@=xG+9q&ACRIi0uN=*?FEx4+aR zH6+{ZU6@w(8M@ONb=P~A?U4LvpZ7;rKz@h7pV@3N^Miu*ytY3yN*wvPXrmHx$W^?j zDA1$h{C4I&k~)p?D`uRHgv&KhjZ#~hy-l@QrMd)pxLXPw+QBq9gZv~;A;QSQfj!yj z6HNqYlce=B34~m>i)H`!$Mgy_5XXWD0^(@3<;_LV;3N42WB-gLvd-`;Mq*(6E{RD* z{dWPCq{|HgL)sh5Fx9OlDwEXweyJ~v*Nbw91FkzaLS}oKdA#0XlIE}8y#t~ff9Qyw zM0iAO-!nA|Ni_(1`QI|jP?96|r(G9fsOQ(A#gJ+=lgWL+vRta9D>T-z+4aJp06CvO zYlYnvp0lE`*k2W4*vDS|)XR3nNjCa!_D1fGUekT(#NX8rsj~Avq40)Ju)no%>_z23 zMAbea!O(#h;F`jh?#edYrEM=hBFP$R|Ws67e;Dc>AXEbR|gV^`TytXs-Ej0wpHH z+P+VJTNN77!T5FXsYVaI7$0~A$uCCK7mU54Pi<-d02|tviM!eEN1eBi9DHcUNCODf1F2qz4gAsMSy+?;- z`Q~(AseVojtwFb*pt#ReNbAHj%mMS)%L8i4a6254tc(Z{s~(UW(2xyk0pPKVBGRJD z_7HxRAU7edQwCoUxvt^_>@?@#k&rC!$P07ksSi3!+OH2lFQ54{(c>$laUsfqP%gTR zDV+(2YBR|_AUDc$Y0lw+eT(j;y{GfY|4P-6-%`OV;n{v$suw>Tpydk6V&dQOW!$wVb&5>Wc zs<;X|uR~eNNxgsw2N`1%iaXyR_!rrvBh#v!gCb4fIaD_4Y%7vLRw91RT#RDqT{{m0 zZ?4X{wM<`*oXQMM%BN%=zVn)<^jVv;%`6^g!1tXG7@F+&r|d$EKjU`;!=5O)q*~8~W3YA& zH}+Jg2;x>7ajd^ok?=Z};K=p5Y^-FUZ?t$3F-izP+qvjK=zl!wvru{{kKB(k=LRIW z{i`lrrKP7It|7yuL8^yVNU5@PD`M}#Pl_RAG#zf zq3FRX1fTZde{%oRam5{kE{X}Q+9X`nw7g{4=z(}yAN!w(RJuxSRoHTj>xr@U{eL3* z2JA29s$;;pRgcZzA}FLmX%p_c+kn31{@ynA=%f%WT0JUyOgO3}zxYqJ6&o3i{7b3n zY<%lP45lCpVOt$7OKiU7AGoutu>5I`fpVX(iFhi#;40MwQ>D6?FD6#}Bz=u~u?Q)bA zSH*V6!6;t`EUefe+Jc&wi2?{6FshB+>kaN?=6GaOtvYDM26sPGQES{Q|HL2v$d(jjFt?$#>R60;S zWW-LiWZ=kVbVm<5$g_dX*77i{_SjJ)X}I96Mu=3Zcdh!xoGd-XVSH4R$QAkXp>%uZ(JTD~@cgkg@6 z_@xEqijs*sMAM;23yVFc%qwI*>hXop_m*`ZHOygxt(zr&c9Z+)y1E*XZb(39lwC<) zAA+aUmh-Ei2S)x=to?-*mODLBvMTgSWfK>eJgf;cMHYXnOmW{tLuKf8kZEYE^v#Qx zCTsjvE9(~{3>Mr(Hi4y%Vo+mk`rK)Fn1tsyCA1(;u3e$6YhcCMq%+cDnOF&=Zr)1c z=-{R$;b2T>oAgk^9(O#VczK~0;Qm`qWw;RQeBzqeZ0%!!PYV}v5~~2&(cPc2vSdRs zzQ;6{2`RA@9uDE^VWa?f^i1<%`WlZeVEN7&5E zKNEidSDET&6;Vm|K67(X!a@mLBDUJ7>QYP15oF>mwB}`;W=KeQcom;nP=KwxwRBXY zh-LnA|L=YG-%>4R+qaBk;=(Aa9&w@q{`(~z?*b_^lmb<=*!QUT~Z3@(|Ur581F+IH9@HzDqf zS0L?KzVmFJgD0#V!p(aXqExo%dN=i%_;oQDt?|3jKg{ImmFxS>E}c=?X93)zIW+ox z_d7aJ#E0kA0@>bNITU7u{Igbv@|ddxb=QHe05#PJ$FINbyZIN&{YPUIgMReF;$OlJ zX2|VrA^~lJY==?BzmsiPn5)4fXso);lk+{b0beR5mfl7Zut=-}q}hB7)38EWXG%xF z4Rww9u$vvpAL?BQ^`#p1Pb-z-npFu`r9a#EZovxY1T9_|LpIl&C#_;xh=_%(S*)rI zk!%+D!*=O5LvB=n=Ak2w#<|k`VD@x3Kn<5G9d81*JPfSf++1KNVCN5H)^T! zZ=5KM`7Y;I%lM6#m9LSWiUs!SXsy}J7TZc=ZP z42dfcXYP0|;a9h^Vv6&x3$}a+L1Wi{FBYLxe6mP@N{6bby??&NclwugBp4tk4@Yc| z4zZl12Z_*?o)W^>#k46yRGrw_l0_Oy88>4aKOlP_$l7}E@YNb2oKR5+wy8vBpbW8G zC_&UL9LM%TE*v==lRIg^2Zb(}P73kKMgkIkKb;J$4k4q5NlBqrJ=ag>%a%)ndfH+g z!q5O?>Ik25M*t7D;!Z;Ccq^UgU@A0&1xF)t3?*~WM#I}7FI?;gOQnoBz|Q3fm~Fyt z(Clq>wRB3J{B8&xtFn-N-YrIqOmJuA)%9_-xVq<1hsHe|ee<_zU!B!Ui z7`=E0S^*ZkBra@&c?w531QDjJ$y;G`&4414TIs6Rfo>z~6`hJbrcM7`4X`ZH_3^43 z*=1SGINqWgkx50W9St=+(o=XE-3pr?;Ebnj6}7Dx%5U2-h*xm+dL;lu zFwYd2QVcR9xZq7^l?M@(pT9o)GlBzi;jk%!vhuB}V!>@PO=lElex>u0)0pA~eq*QO&a|0I1A9lsFZ zYL7vQ-Z)sfu4Ogsm+H8WR67{HjrNns3ZL38hvJ61BBwV?+gUG8hHliwb zO`vGl=HR35du0$)l32mC-L*Pwj3WdCrzaVv}J^XT0^%Pd}G{ zu*55cgl=O$&vO~n9s3a_mSiL_HHw@4G|#flo-6fyVs>&gJ-cMKxg&&741Pdisot>6 zuXB;}cQ8g%Cm^daU}nQvlgFV%+|vT6l;FTx^tNPNVPpms}|~ zvF*Oi@%s5ynDBBre*nH($YXg5TlU7AC?f~l7VLzeu^VMG45W&I1MaBJKog4eBou>K z#ZuSwk=f9CA@a61_P$8K*bg=~>zZY%x?#-vk3{ED{9|bv8mcLG9d4*z+B|$LiQ5i7 zg4n!=g64`g63-g?vJiPJ_r<9YvJqNf85Fh{5_5!&6cwa)b1{u^3BDphS@f}3ykFrI zx#Ol?_SrsTv^lvos92O%plstmVgHR^<-X}=f({oazw** zN6Y}eTN8`oa1NJwu5NxhQUwBNpg3&-{IXm_<0>m0cO*Am^BQkffuEUAKdK~L%?B*B z`QSb2$lw&;DsH}d{po2Ras^#MZT^s81UTm4%lis-9Y)>IEGHqseVYpj2h4W&q-R8r zfGuHEnkA!wJ;9)~2MEKKYT2DD5wLQ}6?UGnS9eNqvfR{)%u_09#&YRcSAe^p_fRZK z_xY@V({bwH6nRPrY^Ft23|H5GdJwqFIC+jj4g}@15s89u5r&+cI+nMP^nnnO>9~}b z;T>PWd{{*0YXfUb^avZ_%fHlHk(xAn1u!KI_)LDO=ej5;i%mJxw0faOKFu*xPLFP0 zNns#(6tC89W`q^o8>E%t=kb^5*i(-C`}&vekqUDUi4GwBoeO@xTbDmUzNGIxH@1 zWy0cSSEtreGTM|$6l#YE5ZTUvQ*{{OC+6(T@EA92VM;DQ&=nB@8G8rNW$=*Dl@iFp$t(BsAqxE|PHEeG7e`3z0ty<#;e zW7c**BvDgo`>#CD-{sR~AqwK@qhr~=@tNyokck6bhsVYzX%?PGDRE(koOk;LnlPcO z(wxv54HVd1k$H6_mhy$GW?;jK@mm-ehYJv}@rR>nG$XMKVWA&`OB5ZIS4e(T5EBJ4 zf%law!Q+H!vtfRknR*(jZ8&J7YiR~N$H96+bAUWJCzO$nZ}oY#cK11I!AO+=P%Jba z6PfwpmtBHXM}?ki1@wnBQRE4tMecSBO-x_bFA{YCfWOwix3 z_-aa%@A0}SCnAOh(jf14%XGHU-FuL8;@fn zJdzRJ4irjf*i7xi>PnpVi;oQK$@WZQ$5$elPADjQB5JJcrmA=i<8SDL2LCY!0a*|! zR%!juKRr8yx{I#u+6@Me{VIsuE?};37!)*&!$`R6zxHI$Zg4@-+EbwK$fvvdLr!b( zHTr(m8Z2&`7OR0gOa#f(tO;x!p5gQIX(@ZT8sb}+G~#Y zO&FX}BdlM$rT;iMh5r#`f;QqE=T^Kne#-M(rVrO|qB4Kcc{oku33sn;yCRx=)9Tvj zTc|?9&Z5&Seo&)m7)(|l$_NFzM6>ZI6BF~ZH+-+vc!hR-^hyw+Lx&4AXL6{q;XF)6 zg+qgW(8e%km74}DZEh&2J33oz35-rvL7H6B(NzNJzV=~2+cARaZ<4~qkXbz_GYpKd zmrWRP_akrkv~~xh&vfhq;F)aj++%AF&}CA4B~Jq&s_lhB@aRW+>Ezr}QJ9g#ig$(l zaQmbvCd`g_8e9S>g6UK0twmn{0;E(em+(VH@CXGk+HjSrvnlGDk}7_;pG_IEybui& zc#-^#f@@?kW50ka-eB8TRn5wTilN!kVwTSC8S8Bt4fGPUL3H4n%^uqRK4w240E->` zeIQvb*6rLw>_DYz>DX7TDm4d%MMIqc?}sK-vi2}j!%8Otp@n5AI!r^eU(_xE{O)3^ zd2sD;jzm5(TrVA=6{Hqe=Z}w7lee^j+N{-ddM*;S#i=|mXb@bJ3LILM1#2=f+2Gc- zVZ90@CV?+_@nEQ2Khezc5m4Mx2GS8wJn$|gV#l&{7)C(z4W?+?Du(kMuhdx4LP=7z zcaUi<8W?jWu@Ed{G~W{`V9W%|uy%FGhi5lh8me0$!BQ$JKJXSaf*Y3ymS2X*`7n#F@(4{`Z3Hiv}eq%q1%x(v+A2&56GJfNX%XrxUnOcBCKVPNsGXb0Y45T0%(Vx}ZKC3Dhb`E>Csm(VoT0#-~X3!h>h3vu`JB zwz9m8h@`bHKQx-VWoxMX61BmI-|Kukqu%IOdh3VwM=T7|8{FTOI&B3*A zX#+VnfJ22MQ@X`?pX-euOPLxH?!Ws8-(X!s8^;Vsgz@mX;J>^pZP=%$LUeg3U|Fw;oXu0f{c& z)5ZnRW8_id8B1=hP+5klJ_rEnC%`aaG!V0DCOOe_k)seGD@QbZA)VyzS`)ZCnO23v zAz8w=wN?wiE-xKuZ=nMO2j7c{Vab4?ZU;@qissdUL>?D7>!x1bim*}qpi{jLJ`HIa z@#}YMK}?3{;US%SS15jyGIO3&{szXs%|;%w@EqHVV`rZWgcC8b4+JSDlWeu#JP=$4 zeMQo9x!E@VFURuawew1m@!+{-np+@e-4mw>%Q zodyxY-=ZIo4O)q9`b=di@EN4g1Ez7wQB{CmBEQT!j3(fZzs?6`;t%Q@@FQaK|DtVC zk8b7%g0^|oGVgQ5s`aoz4|x zA24T$(ya;=g~n-yz&4LF4K$Kk4GfzBqbeKnDU?Bf8*#wfD6ShwWw4M+?DN_9Bw!dp z6F_kMYxDcweg%b9AlwcF02boaZ!C9l9z+xODc444D3jLJwFBK^>8$oFf2dTbO+(3o zt#*rFlY2wGZ54Z6ZV`hA*Aqg`vYSStrHXamt@aie4r%sE!8K`qQ9%)LvZ;RHLh8kd zE1U9AZV6WigG!YH-Pui1=2T1HkWxzF$aD@_JpNfJ!cNU};7EUWR!Y0b!j){aN^hed zR#&?LehlTEHp2g)?v$q?)Xw6=tPPDOa}=7HQb&-;;NOmVvKkA@{y8d_nC(^=)aJZm zj$?LLMdi#b9 z{Vl>yYui!dHJUa7+LhgYzie_i-&66r05gX{biaXv#nMxD)K>)#HD-RaLP}#Y5eMlj984V*px!aH z+Z~xd2r|$2J>JttOC#$jn*)AY&%3N^QRc}p!}9rkH+;C`l)643S2H@y1qkdBj^^0F zxmreQ%43_SL|ZbdcQGxYfc&*>YvYoc8q;M3K4W1u-p|h=W7ejF!Qt&vMagV1yhL-6 zs|^toh3&v8000W`CtT8!FtIGnBUKQ<`NE!i=Xy5ev)3k{0x`yH-z2}NsP?eE7^JR{pszGux_3UQT7c(m;ou-V9 zb|D7#nK$1G|uKY^;8#@9!DTadoe|>WyiPY7!{tGUvVhsRrIyHHAUr6a%=54AWJj!0z5#@c;ebX;=P;SD zHutVK$FHQ>?5OG$Z9iUwg1NAZsx~(pE4qx8*!EGS>^Fz-E4L|z1UeGA$_a;;eCO4JU` zR31BiVeX30LBMGKIo8p{Nv{|otU_=Xu(hQA-H`_j;e5Z1DSz^>ZZH4-dcBAjxD2+O zV;V{AqW)yL6!ULW-lv%MH=Xt8RC0|>F5Hg7bfKro=ui14-yBJXKnV$1FMH*+KW%hw zwC=g|L}n|m;KSpcz4*$7CE>89*xSIy`Eg0t`*((v-qo~(YE)GBTe?kwMoDKyENCj{ zZ?&=*^Ez;K&^*CpLYDBh86=tn{M?xZT0%u#2X^LvuFVv`N35?=SX+8CzdDydKs(c3 zj){r6zhoDEm)W0seEY-^$r>U>Qxjq{IKm7WK9`eo*8YL#ciWd9f)|oeu1vhtRY73m|23O9KjV3&Q;a-^itkKwe1cd6FOz zz5W-#O`KCRX!7D#{YH|q#z<7>@f5Fd-sv&m4^VNCcjgy16%Nm;2+0bhO9C{x&+Ni7 zLAWDd;zd==z-OXd_Zg#f{H*m%H?Qg+dXC%KFEwBTUbC}X9D5zhn9Dy12|%ww5yj(5=7iP10a4SXK=a z&JDpQhJEA#Wa?3VcBn}zyO0}<|50eVl?@CcYCnuju_AW$=T-a2Edt@gAcSfy=?k5% zKeN^sO|u%sTQ~A+{3NDF;VT}pWM~~gNuNjwfy(SqXG*siSmut8evQci5&9t0qF3FK zK;CHbmfd-}MOf|)Q>5nU@#&%hjI+W}gkZ6vb(VrBEwXcZiIMIBgVnu@7=%0C3CxGb zA+WeprX+s{rwH+Qco(c?uyINf)>tINQ(?(%2|HLqH=Ig0GPi}fz!bNYo^F0-9i0=C zp3|yM&5Hi1Op9Vx(>baa`4@nkWL#jN>LXSdAa=f?A0nWc5Qs1Go4&&-PN=^rltK=C z<(ouo3MBe!5`WuqfrA)D(FGiI!$c#5YPdb6YvWF!v&x&YfS#v;FDkBDuV(j5& zQysN7LX{jJx=6C4{7p$}DwvM;ZGGs$xVD$!6TI@H{ z$8m5rZu&ie!ft&77FM=2i5F0E7&Amup?EeIqjbWVna*r1W<{N@Wt@K;GWY55j?U8H zBl4F5GYLD%>SaR?8aafhnb+asmn{`lM!gHkRMbMmy(wMuX|rSvTb&8$C-}mpjb}*nq<~D>wycC}b)WtQp0omR%X5s#7H-g63!$pJWy_&V14=>@53)@Wi(TS4 z>KzX=J=`uT^0c91L()0~xXG0vHl%aXYfm8pPlUreEl6=*t+eHwJ?sQ{Ww{LD#`~P- zx>s&=v@!Tl7#&b&+llfR74k=2*%T87${Rb|JAT3XA?_rDl@eANV}jG zo?uZ?Fo(Bs`oT6Zgx*DCT3iy3AIY|9O>kFZ3uLdmJo()EUvEfM`!%8L_7D+G_4*qE4lXeH@+OKc_E}rq99V`2NFug2p6p`|5@9M@80XrxL7ri3>Uj-TqKCt`0 z0M$IJ&}mj@x2hfjl>x8gcWgRqhf?2kcGLY7A+k=y$vf3y`EqG^p-979(@bT4dekeW zIO3!1J!dZjGpa5Jni@Yr40Fzcx$BJrR(=e`5UNp|)w(x8^7}lG&pPgt`T4+erHiR& zLPt*&s#MhH<6|n%J(jfAlDpH^Z8Zf000W{|Hz2-JZ=;tZwOn(~-m}}2bq#HKv++c} zp+=tQ;@BVz2TbRDdpkhl@bn?y(rCV85BWBvP&QUkR)*7-Cv zKy_-*yk*Av58O9h?~L`g-2RV&x$jA_9$!`I!dB|-8LtEF-9Fv9=zYnYA>an~o4GUV z)1B|>1*|4so9H}o^Wm@GBCEcMMARqChs4#0;83U5Sinqe97w>-LDDpEP>de>NxP(} z-APkf#?S3rN^!TuIwewfELS=v$23Hxl{mZ>Sm*~hth4{xGuSaw$!A>P5cR(>hSYZq z`b;7F4i%$USL-M8*q1hffQ;5`_ZNV2q4j}F&hRk&Ei{7~M4w;fOoJP`nbmF7(b%kh zmjjFSM-3YH+bP3efatBV<8y;Q>Y3Qp4O%l*POvh9iTs1?k?4JP>i zi@NuYYO34%Mw8G21PHxD=q>bKl+b(c2uPLQK@?P4Kzi>W9i&P}KtQVWUZg032qL`; zh&(sy<8wUcyx;xaG45YCV~?G+=K9UK%3gD2X6?P_{NSI#t9WdVyd(lj#V)*&LOI{W zA1a}wPrxpBq1AeQi62&zC{*{Bq$H^?4aBROA=mPu^C|NN1)v*LJ3rW}60HL)qhQAsq6cqwNPSOp_|vF ziPL(V*n6EUIJ8vF;qHyhhAPz^y8QLaO?cmmvbg`mh*JcSU6FQUBo~DUMt%6}%;+s! z2Rn^>My{qC?C7mIX&veWR*{~U`$$$S=1Lj zyBHmvZ5}GN+cU1u%s_rjtJdESl(^?oGqW!IY=?ej@cdJrnjTqI+dhwZ@!oe3=x}t>~I4q>lzBy4Ix&Y z3GdeYaE!UiM}E!&TAwe>sSn%`kVhO4Q`Vo4sz_O8A9EjGhZWF#aYo z>4M7~zmGW*JVbID;?WW31L;Cg2EH8PgRZc1m-+V}<{3 zTtz>5k7Q~q@%eZl2Nqq8oH$YJj%)X6h*6#hSt{(n)9CjQm# zU$EXW1@Avt>VBtx4cRZu@yqLfmnrS{;a@UOCcwSFxJJ1TezT+Sg}*Kps{L<%f;%4l zyAUbwU*LY4Kj`ewr>^DH{sPIVRIF~=WF4M_3t(C`oN)_=SH#r4P4`f(MH2JlWs+W#5WABj1slYfN# zp54deA}13f%UV(=Q6w`HG~OuK!JjRcmYk3hL=k_@Q&i&TQU6jMuYrJF0H7U9^OGX^ z7vOgpDu2{y8Td!`7tf#P0%8RP{&jXYDqnVUs)e$xfc`W8h@aSZa9(A{* zL`1rqRR3)bW# zbitj8*W>V$;p-oh694N7fz-j3)Cq>v*Kvp-j_BUGV9N->0@HK6Jj$1gg=qLwf&DJ@P|$f{8-&id4G&UZ7<}y7s5A^cY;!ik@Fv1 zqyKdF2jIss@>_-7+SlWyejtC*$Ji$_u1|(VQQ5>_l%MB=T)tk2K(tsyigVgDuhKUh%NUW$JcIR5Y1|Hl8KjDUZ0!B7*u`~L*{Pda2~g0107 ziYd0`B=mpLw!hioHWMqyBk;rqC~DvGWR!X47yXab=@EpoR>44& zFFR={D%j9F(QB!rivtSta+y$bJbHcFB58*WdV}|p7&x~2Q7N&25JP7= zE|24#@Wtb)%WA)@mV+r?dMyfMGz|>7l7|MC@Lp0Kyu@pgU~;ypbcn6?d^^o|zif|$ zGM@KjDKd}1iQ70}2s32(s~&o{%J$e)Tk&J2CzSmZI4#>T6~!@Orb52WKEpQ;m8Ns> z>Eu3D4m3R|cfTZy!*UH=>x0axosDOu0Qs6Jo425H3$@MSFq)TA$)m?(6h_=VjLf)a zTCVDNdh$5Q&qHUU_(-k!*sunlB|bB-dIO}{;cZrw<&+|}7+G>2s@d2RzV0Y}o!-bx zUl~ueAEOiNt0?RPg_{deRbYSoQqfvOSwucy^sb2L+75E-d)gvN-x%tC?xu-3{^ZqW zS5)*#5EvB6+3A>|Z-_(F*s5DtPTu&i){MX)471o5Oj#Q!$pk7^u5e#W=RdkB=-Dp! z=qcUmqj8?DMQ+|NfAC`KjW4+td1a%9Wo!F>sm++F%0(L4cV*!GD=q@2)gpU~JQEi`Y@GmKt!co>AerwJN>EwG1A@wMpAe8Htn*M{8I8Sppti`D{340uer~=00Qw zYydO!D9HuRmqH5B@3D<7v+6#(kt+gDUGK(>6D0AGK6p=gd^(g%5v$jIb#6Z-19=p1 z7=vYw1LAg0T$CJ0vzme^e>?kZYk4Pv$TEV+@i7yW9*xvd^w2@zL7US=Pzcn<_dbHp zjexwYv??(&u-)2ebM>8NKt*?IW{EjF9=|55B(Ud)Uzo<%d>fOy+`bqpuQemCTCYBWH?M$j@xCC^8y}a%OP^YZQZ!G{HViY6M;6F1(bUwa{w`|O9E>1{} z0t>R&zaO2kVx8h*R=f@d1CW;Kv*|DMrjc}UH+kE`!9#TZv9b`vg32D|5Xktey&;oe zz_U9FwtR1=1@YJ<7=j~@p+{7#Q0nDky}qyHnpPuSOpI^QCANa1vo%-zG-0wHKU1mT{;KRaTbhFbNGGT2+=*#Q(4vWoSa+4bh+Ao1CLj;@YG2^SMdAiUA^wZRm=~ve0QP+b*t8f z0NNTaWnSMqbLWi=dV-064x_0>w0QQs@&v9zc?nNYEx=^zbgJxmX495g<)=kUjEKt= zy+0=@Nsi!i3Te!GZuoWl5x0LU80t3lRlSl`@!fq})ZD#6j+I{0tLHFGaSW#(C-Wl!*pB5rLhT<+q>vK-j1j zf#6=T^42$PooagKJ?F*YR989_cT*IHZ4)1!9J;|)k(%@o@Bu;#D1uXcdo>r$SNaw- zj0`C+aI|@AR&zdm!euJ@<7J1RVVF%#q6u3z?cE+syr5%)!d64+$?mab=`>m$Jm9@= zN)^rEwVCz+Y`-W*2;0`Bt#Zbz-hlz1(Vo4yt}~0KQ{*_c1lBz!zAYlT*=LA7Z7ltJ zq_8KC0h$Q4b+omHA`Dj(>EK{(kK;JKA%&tiy^k2d(&IgU0mgj9gEVC)5~DxH+$9@o zR(y9?$VMV}L)@>q9Y(r*p$6@71P=QDi>b?6hOp;yv9v@=l1NuK5-3gPp`ZnhTx;R_i2LRG6obAEY5Rpy)+W8=?1rf?yhK`!7OQLJQ5i8!>0kr>gyq5W!rlwqhx9ldFCNiSJkVW3Tl@G# zP+p;uo@44o-rCyJ?isGTmt&S}*d%Lwb;voSkpUU_2_BMjtCq8}-f4{DtN(s!ofcF> zJA`^Ot3gpXVBZku?O%Y^^B^58!y>@;jG@G<7wXkc9U#=s1b(>KW}PB}`@QkI6W7Eb zX7!f=lMsr)ZZfZP0>}I>%kN(fDT|i{R|FrrEC*i5(bK5krIn6=%e0=#;?2C-NflYc z77DuP5uN{(F@wQi4eN*kNffPok&pNOSvKYD`sR=AV zP`o$R16|+Xb^L+|q1PtNA86Lk#)1m-b|OL<9RPsa<=jFjBjtm#7BlN+KC+z0(Mgz1wTX;lVqNw>(*eCu3y8@Cu%MmBRoJcyR1PI6SV-+n|8M^XKK+=+J= ziUeb?9_rm2Kx`G^w#P<+!%=a}pg#U%>S&K?1HG&%@c#nz$&KBrxORR*)}aVS#Biyc z=)&fPkX1S?NB%=#)%>CSImdU;BU#TqG+z(0O!6ULbm44 z>^>_B-iH#p+!1xv*XeTFd+x*NPq#+IW`mYx%`l+|GXrsdJ6j$mB zp@~klxGhrVLX@{0yWX@FQQVbyO`?{*+MSi3GhTSN4T|>_2`EqA2za|jY_ZGH_MKng z$xina#Q2&PIy|t-#A0(}JRY^P{Dr7{lJDC~b!)4ThcWN3p~8rR!yi2FvnR2JrYum<|fG?)F#2^rKHuD=cD|1gb=E-0XzrOaz^?^7m5 z0I;Trw*q3*u=k6t^!KJHd(U;iZIXD$SJw9DiNw*3V&Fn!aSgI2^Y~H4nzg4C*(A(= z0h%1dEZ9}}cy!22cb%@XJPslzcZ2vS@+!A-5;pI(=T-oWZr6Mw!T1_?B;QB;Btf1G zD2F+iVE!<)g6{q~@(oB_^ug)H5`ENg@6xNgv(bQeVrU@Gg@+2c6|=iE>xI^PuJ2~2 z4!S?S*`AsWVtWChf8!Y4^wQfbA=dXD1KnQ$LeZ_#x+^j@tN#3j*Y4oHfoHZcax}g- z&w2gJUMSZ+1<^Sy-BGI5v^di-OL)qQaDj$vTzLdnNx>+D<+dFBZom4jhII}cnHxl{ zxqzfdqCnldi;A=+0qzw%JxIW%i?4MA%oTH-w?a@*e#8Fk-{uPuuLyNvWYDg!ywm#z zHhze?)t(UdBjGWq_e4v1uxLu7#`3d7ID_Sh2@H_dJq=dKJz4BGjaUUz$VI+S35zS( zI1&IOds^tHVIi(^y6@+zI4!heT*5mE1ugcbt{JURaUvL^W`zSu9b#%E0M1ztZmGv6 z21%WR--!atPBSC822tT4NNkeb*%jKH5bwba2^Curud}s2B7MhiKJM({%;pCJ z<7|=v`cJBIZaGyM);A?Yf@;V67=Z)#zoQhG%B$3dqZ} zZpu&>KJnPcAF3pFlhfZvdG;nenmG)GGzH@5F2!?{7k?RdPt7Cbb7No4k6N2-@{^b6 zn=g#S?=MWevis6>hh(sN@JZBB-L2GYd|Nakg*@Tmc{oR+k6*>=g**_RtC|m5wLp;?xv*?Rt7 z%MK?bi|!#Yw#n`Hixd=dW$DZx4kkuXU9P>U0NiVnyNjj|u&lju^VT4Hp!VUZ5-RMW z6wNG?QNRVE1EL+}eOv>oUKw)r;=WRk>i}c6=U^2GD*+~R@d}RVjGfgM539?1sA&lK z&Q>~1cczV4cP=1klpzF@Um*e3LAF?fLH8o7Y-=gum}o;c9r%2PB$b6afUG%&7 zBEd#SgfDVj-A56nj0!SB2UiOMbNvnxp&9!%UsC7h?&MjMgiTV0=f^O-l?Faluspth zXh`7}@9`*fAKA6Jw|boyE*+M}#^{(A*mOH-fZ4oZ4^PKlI%sj!&*-hfaP@9va|L!G zGGN|82`O(aoc?5xGFJYjy#|T!@rrE4n9ZT>7D8AV?=>rtHM3rJ8Z4t0gM6zR^CP~h z`BfN)K6O1K-eb3CpP5CRhQQ>80tr@zUzrQ($oME#B*#^6Srt9NCDb48;`s~Ez1nyB zp(m)mZZeW_!?M!k?u^l4m47P~^=bt`u7y3LrB|K-Cp|wXmy3qd^tut<4cR3?FssoZ z-|Bq>mISe?Ont?fwsmmuqbl|4$yaY<&nBO`4n#sLo@-b~L0v>|Uar}rODzX-0_#4! zMjjArt!~xmwVWd>)?YCQ4t}NP0Ehzfsf5G}H`1;Y3ZsWa=E$P;H3tz`Ee_++b*SeB zZWZ>;=}%@nk{pmX4;=Tr~>eCSDRdUsTfdoz2b) z@}Er}+w81{ALK4IOxT*d8=hRAh?@}tVqT3FL zYmFlwle0Vp2iE~l#M!nd;rk8n#Qpjnr>W06Ipg&Q*{bi%liKRIK>$lI!RVSM;aLe= zKxb#Dg^VSe!;aEsta-|bVbZ(jE>dS9aaH!ls(}aY`GHt*rP-uV_Oztzp7JiW-L}Xc z;ZeL?`T~g*(vFqY9frbr+3{H%-a*biWHJ?vgmxrtV!~4<7M-$w zW^!ezBok05R``QiAcNhVj7rW&v@pgXPeH@Sf*^hhyLMMKm%U`7Xif=LKTZYz1l0RL z35i10kGeRNJ=0|~`<8=!c)FF%R~rc#rUEQZF=2*-)H^N__QQ-LjDl1<|p;2KQUguJfy{c-jDu1b1280xc;FwO2rX;4f zreWTb8M_tgMnaQGNW}c6@oV>uGNv_qgkO2k=>32(fU=ojDaRK2fR}vGlt4OV^fVKZ zhYBE)q~IQ#DG|IKl19|=X_?fexE|Jb`uwR#$t5XP5DqFll(|ZK!(=Fh7pT{^D$BKwJBglDJ)xeP2)r-91ej4dYqEIIiijEW&JL}EPlyGbB^fS@^qN#tEi;k!Mw6G2s5pS6 zYLw&{R&sAT5rNCAs<)02f>9n$$WBqWP#5f$AV@6Rs0)q&pxH(4snXrUm<#Hu67WVu zhBU~N5qdRLDH!W1z*sQC85-0o<%hTJd}9|L6ygx|WQzhI2a0or5wiOfSXP>-h!qlG zjB`_&C@*EU`I@uOB+^a1OfIcdwojlT ze74Sjpc+`!7yML^N4A)7fmvt9oQ&59%y`bF#su0{kn26y-hc)>DtYTnp_bBeD4~Rf zPhnru83p+ZXx3u60Xq*_z85PHm!wZDDyS(5&}wWYjIH>E+_G?QkAJC%?KNZ99xX%c zo={RXQ3Jd>7KC=v%%wdX8L|NkM5@cm8;6Csnh3};H#1-asqmGc zB@7@^)gCG|v2qa7Fn?fWWW;PNoMe5-0DY%k66eTA21|4n0(wEMgcx+*n(|qRh`?8J z_WO#b89>ue&W4l2H@Z?bs!DtI=ZD$HANmQkEFnhzC%nwyv z9#eCP!KTK>G&g!nM^2L6#rKR-B1(vaBfq=$aYH6EHpy*6hfk@HG$m6Y?M%&kb#_Kh z0p-Xn(IhMYA27bFMSWyRtM!Vf{UJTlN2}96T~Qa4s4l~KWDdGjc{@3?EdtB?j6s*# z65lXg?Wo)ztuwT#yd!Sn7f38`W!@zL0MLQYKd4oJ_ROMIdCSW;_30*tzE zRj%gF9cnpUur)m*Uh2f&yNiDQ|FNLS9p@Rii|7QGWmww)W0CphV#A6jSh&#a?8Q~h z7jC?P^y|(ph}|{c{r)lNP2^m@Bbu#)RwTBqR5RJmrOoEcw*xMf4MZ`{fN{*|I1=A! z`igp$bH;Ci9BxD=tt_39c|8i#DrUVM>bK0Zl@a@o^~T=;LE0t^^HMr95fWE$vT;o* zOsbd1EOJ!_;|?&RG54Cd#r41&nSj@7_Cxe$2I7Rn3zrCq$!H)?$v)A+`D6qz^|_8q z@%VIk-7Kdo3qfjt;pc@0x(*4SFVpzg3Il@#%aiX6U#Olu6A$DL2p`8#H6?PrMUwE$ zsR{!qHOu)39uk9WF_{l1m`(tR;;P|oW(93VB)V;dKGL5YIF&o22DREr>E(xu^2ZuvN_bi}+b#ja5Bn(}&?%PoK%vC^swd=#4dXZ9Tuua_ z6`hfvU05Eefft&e?J*CG+$^Tm0NARBACGE(=xYf36s$3Tm(^)MI-yO$2)Spkyxyf$ zCXq=ti<35qQnm_B}rsUk+$!okNpYV`L(^D_b?XZyqc))o>`Ya>{%!f`N7pCkJ zAuEJsG5bP`JIVLDxOtWK)o1#SNB4)1Z+o*A3TB@cRj4@Vf>ah+*Y(DaczfcAz2GZI zzPJn`s_y%4)$rpC4R(_*I7Q=(H3VEQ0F0z@)RjMss7KTWV|+|tX4ht*vS|cuK99d4 z908GA>uVrHOmCE#&3XFlObXty`vf5siHWpLvFi9t_9;5ORZkAkWB5$c2uYwEIFKNZ zAXn1sv@bKc^a2-X7Jx z#dOZNlmZ0OF>Vq!>qcY9EM3tRL4HL}L6)yPB&EClgoGVmI43!3k-PKt7^8jD!y(HS z^{i5NjT}+vLo|CJ_xACAza;+0le@y5os#zPN>a7ox$KAX^dV^4L6BKNwxit_KS z7uJEI@@T1ujT*h`ASv&gwC3x~GkLR*t?1ACzeW96DnqwnL$>gTfrW-O@7{W1S?#E} z$@!P~ofu9ICxVrl@a%_Q5iO5JUvh4>#P=vAPw1|-vb~Sx@P>IM2aa*-m+O|OrvCR= z_8WqaLg7(1%%WGf#k#Ky-+wK;)mhoO+nMl5qPOWZq#sHmn&9)Q-;VJh&paUGV|54& zCix^(bNzGuOHUq3`{zYPmcn#eHx*kW>fQXhA@S*P;U#`|v;Eoji)|0IFUtiqn3_h)2CF)erLQ~18Kiy#&Ox);ho4xmre>d=j zMcQ}HI1iF{eYJ2(OXI0Z(|3fkA9o3(8o+* zs5rlm3eW8s#tu)N9y3Ba;$05ER=8s5PFbtHX$P{ytn|BhvH;aA07slqPvT-af&np) zwce-rG=F{(%Zu+W1S)`w6}CND4vL;Ce7o<~-W%|kDiL$B>w!gFzXDg%IPHhE^x5P) z6DeqjfiL|f2h2L?%?u+Yf&1*^?}-VWCJVbj=v9b}5L$l|QAs3cb5a@t(U4?Wt{c@xu;W>_#t1?5chBSLo*a0f(buNSq?x0 z%X#Re4o#6r#-_mGyw?xx%fvTX@oV{ee{8YIowAgt;B$ z31PT6EYu(xSTJ7jB#w@mXAwJtmCttq)3uqa(A7PMI88Z(Ky}D7l@D+6&|KT4-jOJ> zQe=$k43m7yXmI72L}LhoXJ0&|aZZ;jBHKBQQJ&n%3R%dF#!5L5JZck;gg7kvCykt>{@D}n8UceeyuXE$^8aN zcf(yaIren0x8T0V7W%^zMPtf@SZL>*ZkS1tqI!VD6L^i?gFV|BH!^NA@e7 zf(Lggzt+Tjd;8|`&id{DbwSySr)mBKd$Q_@LtN3+lZ?y$d=x`>WQHHDt z^ELwrV8?hhl|ByiZII#NX)}#nV-Zvc!idleQwAw=CpNc{zLsNzH{uQAo1;R?^PCnWg4yVf|{hS!~8VF=*+&PjcLLNK^xZ>Kf}?8$_3$a7#1nE11(@oUu6~as`=bw& zt*8inMgXTaj3s8GSPC9lp8d!A+(1lrrY@s!^~lqFW8*A@E68~%1V~67dG=zyD=9*S zP*Uhfow@pxfqy4H1j7kwD=)94Lq!<`WNhB?t6Z%fvO;5y(wYr!U->KvN;SB6Chuq9~cmj1_&N=`e9xGr}5yI|k(H zvl!9`OL^(U`FDnx$QTNx>pgG;goMWGG|{())deG`@-E_=oQ*@VMYEKu2YC>ptoBcZ zb`=oI(fPv4WenA!$r2)Srn*ROl$*{h;iKi-BbcL0=`{n$K(r2#B8VGEFPRmCQaroeC8zG;s3N4c? zZ?dOb;M!nW<-Ya501o(YY*Z*4%I60OVp8QL)Vcs)7R7HE7ATH0_ZvmXX&zZ_^uB}to8s~(wxqEHq%g!jPLmL zVq_Ljms>W7T9Pr8Ck2%`VCo27_>1@Ttj+moX?4G+xr;VIelo($dLUdsxOnG{)3><2 zrMn8E_lfDGcjX@8=dyxc!jhPhQfMz7_R!-P=GlFBkKX|^Sv7{E37nO+mC>D5kwL7K zP`FqY*=QFA6<~O*%wByi2c7`$Zc}zq;HPphFcdPo<3?TV*1@8PT!=IYZ~xo8opD! zFN=D`A3sWL`B_j}h^IkC#uPL0F&$3hSZShPpQ{wIps1m632(x9WZ&T~KK%YqWMzWSatiLgm$ z0V%NubyE)LHCTX22)zGb!dy6F(_jtvE^ZYHxB?MEw?-?YMuSxG81~bpZ^j!*02t8z^s$@^d?x#Owhr)4S;<;R-0%j7K z5o2veP2)sr{QMF(tl=JoZW5x(%LBp?4~s6h>Y%n6#yAPuuG{PJtvqI}UK=CnJZA0N za=Ie9wOfz>&bN9^DVj(^&^{YollVQw*~v-!rU%3J@1}TY@Ht{i7NEZ1BC3a8!vRi* z-3Oy{B$GxeQj%h_qWiLcmD}gY4(i6h-~-hshe8r<>$TZsLy%9M9||#EaftgQVtBoJ zQR(-^ns{E}sV@#1Wtf|9z{{g}7+7$@@yA2^+PDgaaDtx-(c=aICbp?inh$xw2!$Tr3a+nh1{A?H$-){<-&% zXN9N$`Z@rKhMU`FUCh&>RRpvG3OCM?E1|bXEc!ai%0e)^l(uf8xzF%Oy-8xZpZT?t z?{U9_dq&UR)L9~+kPx1lHXOjlzX>cREAtkWIsg3o-xS_`nbbas;wOv0|6nCAkO%oo zqyrQw&Fdy<6;bQ-#e7FgU)B5J4{;&DRt9NK9-f5)-l>&MXx)5)rB0#F_iq4$$*$TV zCnf*;Dr@_7=LLOP03{Iu%^;bPe zNAC@`KB__O-=p@gl)_4&SVGw7%!=|?x|6+;;_c}L+R6Mx9&Cs3!k#WLn&r2EgNhKN zM*M@xYs?RYK04wcV+%+-o@U*v-iZ71rFUL?oJ&+N%W4)C+WM$60I^{@mUbNkyt@uD z_;_LCr`d&Fwb&kND*hsyNClE;Vd)8MRrzRKVwD%~%4MqbGZhn6)BN!)y%4=)=OOm{89SYiE=(Rnj<&_nF))DVvZ}Y+2DT z^#R;=8{%Q*R#&tlqn2S1u`QvYaN-ca+_8#tlHF);q={iuB^lPx^+I{2du^&-5%U?a z@>U4fU0WH9?wj(w&TnLxvahzrp7b%;V_ltZ*4&|#qQ;asOgnh@uwA|-t+g)7?Za6m z%R4srZyFC>@EO5RGgYz9!OZB4baouO=Euk3o^Y+ODjzu~IaNktug} zJ{r^@pd1kwU^L)Tt=C-z%miJs~D9feyk(-6U z+%TRzw$Q937!L-F%3WdJL_abD@1Y1z+V=}mHy?`7sMAj!W!396MWx@XnV6z%00IdPOC)k_WLdi zsSL6LpnrmWAuI3meEIjfj-hDOL-0UGM<8OhkP>7)4`3%ZI;?S_Yhyc{*^+)qC!6xB z%OZwIKj~Ys^~r5a&;xyBh9Y+db{I8Cov-W_5@oF9Zl?JaVQ=Bb>j?$tW$GJ*$hq2= zfaDOXX9`wVjAzd={qlphp)A;$eTq$f1*DJ3$lQ%Ob(1YP`CL{C8bh(_U#h6n*n5`n ztyi+ghB&0=6EU$7ZaqhQVziY*H&|D_yN!ws1Zji=no~=f1oUJr_c-!5t<{6Aa%P?( z3N3NCFj;CW%mUF^r1Z~Y86BxE*O7zCMY6_q7PhoBIYI~!+U4ztIc|UiE)BrW7!})& z>SbLH zJ82V|vN%ki65D(`Z;;$-hIa#NCkr7iDCT1t8vVTTmiZHQ*EsDEwoYf?MEuybrP(U$ z8f~a#^ipYn_24~genPrN=<_5jZ2g1}rj#sk0)`aeOse2F)9-uGX-^dGo7DK&7bC4b z<>|{KDZyk}3@fZ~KWj02RVxY)e)j2y+$zv_G)d#~{PHx8xx)d@K)ol~FWvY|HKK&T zXz0B^Ha{X)OM2$5yHB(!U*5X8g=BWX2tp%yUubFDNj2UeKM1`|-|SjZnZ3*B9S2txBkYRmF-aUed?-U~ zYiAZrWca4rOe$8NyndK${nkTjV$w=PI$tNMSPvaL0+*kxcmWQF_LuYG3spLHu#Tl^ zx>~s5Fz_??eRLk=kcy178OvwvG*+G@*TUFSGY4*{Hp=cQ_fzn5tWq<|j=NLq7-BpR z;(#?bE@2UHj$0LW0~9JvSUiFiQr!+#z2s(u(t2&b=z$%*y}X(oyXC^Z5M3F3#m$LS zWiYt+og)i^J{VNasMt6Uom5YNZWtJI5jUldshJmbV0V+dn7w;TNV}Ewk;m#za$3-v z68CB9di2`lS5e#~8TV)fBuLZL_2F5c6N{|)y3Clz_M7KpQI72Q!=B6?ElUx3C^Il| zw9y5rhCTpDfGs7s@eNGRIz{nq(t2k`uVowqhDc<%BfP#Sbxz#v0`LV#H0rRV4(hU( zV4F1C&7~%Lx5!qaBE|viGK>5UVIpYsFBocgLW~AWy_W2ZB%TpoVc>fr2)GJJx{gx< z5aHv5!z(b$$#lMDaDEI|>s&$Ckj-cb1Am9q0S^5rgKq4p&Bj;;- zvbkBuU-%FZd+jEp@up&Ch08in2u9C_xaku0jYZlt8TSlCo&~U@ z^@LCpG5iIq|t*;cj`m=+2sLL6BH ztI5EM+885KO3k)-_0Tp47y%{;lL+HP_?%eO+v0YDisCq6EOvDE`0VW-mbcn*)+af1X=OIurn6v?s+eVATBzW~%;jz%FESUoe$;#mZ|$0PHH5)o`1p9=&nk zJezN|-c6iNl{07VDav(F6}r43z*rqK1%QT8)k%Tcl6xGgC~70Fb8C|v-T(`q5ie|M5a$uAdyI3ZScnHg zqvP%z$p@L=N$-u4HMM?I%u4Rcg&L0Ap;s3>Y~_(gA&>R*`cUKXBB(TNs9lYw&s){_ zSgwz@kHNTuGX#nqn$Ib7N2F9`bS}A#&<46Y?QE@q&YliQq|s^2Gz;~V78n<>(y_!X zvgBzZcsECEOLpqXlKLuprGvoav|7sE-Bj@Pr&Thj9ULt+w8P%+JK}bp%=ahJfnT$a zcvBaz*3m{kL8TCFX0zNB2}B?wvJBcCoOVe5N(4eglviHtNg+Eo2@Nr{U-=^`fn`XK z?sRK7=bA&IZUyR7_3FkfmstyoYTe!X1*0KoSxipC)3#AQ2-`?DBE^X&s&~*Y59M=- zq=&_XWeG@*#{1N~H{_Y>;L7f ztekV!v-fZB=kmAvLWy2-Qpi1E;ghU(`3pC9xZLQXC{{>Lv}ws5F- z`n_Db<8*7$W1o4wbT^XAk<>dib^5DDgoJOB2TFwieNHx{0lG}n6*`~wx5N3N^s-?j zHL>*-EE+8{+G^2omY!k*3&5c3Z3~pwota ztk$HY>W9A0t{@zj=}SA4RK3B|4BDHI=vb^-2H5vMu07RDQ>!DGqWh#%GAnWBVa`00 zFVwuEIw{viJL~};Pr+eK(nHNLS&~M#N20O-_nKZXNc1{$d4=0jXMg3{6G5%J&J|IZ z347cm)@cZ!I4N^gSR1YEHr;BIz?s>j&e+r=;X)MrndEk4ti+0Gl_VN7(eQxltUm1P{wr&{ z*G+UuWro~mk8{VS+0)r+60*xcpRtM1+<-d38_B^^KK=MWO(m+X|Fz{Rs|)H2{M*q_Y&)7Y$xqw#9ML%l- zSj=yYW<#uj2?iv-E+_`<+TA$@iA~^iLk4zPDMckYfvM8UF_xR1HAFlXG-;N~RBKkc z-lu~;nc|Jg@Q%`-P8lhVza9~u?5nf2mwrOH_|en zKki%*3i}8NwgXLN>+bX!b@K8S3j~^Y&giFh8r#n5%evt5A+&4~C1&h?8MfaaZJ;!9KR?qU;bqzC_8FXdEXM1XDpB zcrDViKT#^^QUeomqlyv8%>5QvHnIE{$+zdDY9SmG7nO~BJ3Jh=7u3Ur5*)TaK*CuT&w!gL-KCIaiu9^g53hu_khC@N|&4fc! zG9v3WCg&Qb&uu;z2Cs^axSDl4H(&KO%}uGf62N=KDcAF4^s+_MdPP4M;ygElj7g}N zE8EQ++Qnv1I8dKWQ{SwO@^T4}qT9}~3}UYs9#lXF0Sp?oI(WRz+q=Lb7`4KoyJkL? zSU%LfR_u6!%9qPObTxhEtxYkoo?c6FACna9M6dF#&thv z$K17+ZgB1@(yy|v-SAT4tBcaq!+LeO(ed3q9jXIcbJ^6S1bV(j$p5+|!-T8XKh4;U zf10rlCoY0RTFY+kR8=&Kj_os=fneNQsP>F)wX_B)C%mpJ-znG{`PYf_?dLRaVWncY1>5qrC)LE82 zKUy2ikN18T!YYp&VOJ;==QK7VgNW?bU0ROz9npsKFr!3ogH=WUTt%Q)w5*;_Vh7Z8 zw0GY?_3hO1;d>*KjrFm21OvEzLHv0})4&@zUNczlU%)k=Q+s7>6@T1JczG@(;QC*{ zc+p)1ZRj4!OO^CfFbCqM7^ zH+2!(LR&KyZkTqk057pwGpCyH&%DTrok0nTU8#D82ds?X8_EPw3U2H=A}uFo0NqBh zDwVoHPVT0<#K|sDqMFA8FY#D1v}Ob57HC(L7T8EX%-~qB8Ss3;V2*5(hzSK2i0kvm zTyh|{f}?BFHrZHbGkNVy{{r+G)wL2!^lk8sdGBphDaeP(=8tx-a^Ec(PQGC_aD(~} z(c~S_2g(CLuvie<598`G>)Z;&MrV!Vj$s4dj z2Q-4<8}vVfACN}KWvp-%P0FFZt%)>50sh3NAWc^?Mnqi3@s&fJsC)`jMP{+0sZJzW zASU-(hpDi0IgPU+)}wN~29~(|sLD(yk%tZ9&u35|#TTf)2{vY}#`N{&k!j^;IW-IP za|9^+w4FQfw*haUElj#YbFyNu#?~5@`rIWDn5D%kQk?_g0FNp%WkXHQMX93UApeM7 zVcHsr=7KS0W)Jpg3&7rVXtS+|Z3BXIEvS0;S7vDpN2Jg-WRlh1(7c#H+-yU!Lnw&e z*&690&w5i}xWa3K$`+d2FV`hUV)ST92{TFo(Qa52OvLWxSxX5d@ zD#17+%Y8#dGJXM0Q*X5VzG#1I$DB|Fjv^>&j_{Z(W_L#62;z0}HZ^+x3 zQGyli&&e?ZG`!a1`q$WZRV#TUbh0IrlD4`o?{FE@B4vGkls<|sUoj7~UP*7ub3jHF*pABa0>;ftC5q_Puhd~zAs*8NTZK~Si-V+?8 zaD}(F5*6w? z@f}3R4Jv4G3Q*gVgmNIEA<1?W!C3ZV;WX0dy1oUPTUj6K1s8EfKmg5?wP3BpB4>cK zl=J5d7;R(>OVxcyAV($NE>byZ5(=?Vt8+7&RTK@}7|@yGltU80fxTjPl`SQB!bkgH z%P+ZdMgl|@?UZ$6ra8h}-+Nc_$r9jP9w807(x}0t@SkUcD#2Wx%a1T3msfkmC? zPze87uGGaMd(MJ4u4jXbFS;Pz%~tUBGr5pKZsT$CZU|XHf-FzB1S?i^cnS=w1xUHy z@V)=?wuAKfi-0vR=R?8?YsO_h7V{EMT7!LEaVdMK3)}F;{tMk4Gem{$=lSa7(IJJ) z=nq%P*ZS6_{MfvsyAxZ9vKkd}CguNdT`Fc+Mf8I8b~<+TM#GVP|&r1H35w^P^{Te?0UKhuiIJmu?RyKS6jXQ{U>4(J4EU>#|gSByItK7q@xUg zCX(yCrkNZFs8+T*zw<2iNJz@gN8n&_`zcOl!Bhg4)PcBWEZxCpd$T+6BEd`buR#?wjfi z-8wBH>C%`o_SZE#8*EUw7KSeGS2Qmt7o}Er-Xd4{YC%ym7Mm&_w}^Pq>A3nu zH|~cuycIOF&m2O??eN9KzIu})89XlHkC8FJ_*E9*UctJ0Yxj()K4X@9At{+HrAL7o z{8NA6Qm{-2?55Q+XR}r=Uz%1fbbr(Jp0bA{|>7S@D&TLdp_N#AK$qLva{XB8aAjtY`1hpLVXpX zxs|sJG_EHApz<9NUZ(t(&UiIimD&mO8zTF;x%*pj&83guSw6AbGv-4+d0sISUk>bS zH0B<|mEZ;oF}@}*nzuVuGff?GMn!LDn#_tA(u^R0bF#-ltAqg!i zUeC~-H$=?!rzUJfLyQh(kCi&?Ch|!wKl^XcHRS+ybF;*qkfw^9il|*v00B~J02xQ#O=G@ucm{fQrwk?DU^0Ibb(OwXTb72j%I!*?*t zDmV@N`p46sEyP(d9&9$(&f^7w+{PjG%my)*I#AWs%$k<;RP;UewO*@|r@GAX@t5gO$hb;X!sr}Zur4{DaV<0TS`?vRgg=L8p zm6)ohJ&f@n@%{zmq&7?DwI{Z#92NV(1Ck&Y#apn_Xck<{dwC~i0U2XKM4LsID>w08^ej>W*wbaUgQq^%y+y!sU}>c5 z{iwH*8<{DoJPcq877`Ra?FeE%IYeNV$tj!MS#S7hovlMT@1}79?9r2Q*L)OWwox1h zS8!+1Z0GW#6;Lb|^Lex)7Od!?=AfSty1429I%G$a-0h@GIsNLdBCq6;MkDq) zIg|X5u=3`3x8LVU0s!u3V%B%G%mc|Rx%%^f$(IaZeihkBQ~VOFWt~|ReW1P0NNuf= zt7WB+1=ig0(Qgw(+Tz`kOC_sg^Du7B7Z?cW10V;IIMM&9$kafro_!Q_B+CA5sS(5n z0ii5rS5uLnF9fyr6^syb`Y<^Z6kccdri@0OwWi@msjK&9?iu;^J*~a#654u5AJD>$ z0Kmb7*xs9Y(GIxST^uX#P%9_0X6SuJmd#jdDjWCgkD{EnIA@xLrj%J~mVq5Z!<~|; znyjUm9-k~Jqi|vVjR?pXg5un1D-z$YM>B2t&fAwKKFUd4cuo)sdKUP? zkEU*7h&@!n9Oviu;o#=nTkR{ko%xo}OPlwESkAZr^rLB?^oxuqAsn-fFHnqmE#047 zt!dF{2ypW>c>@0|uQ_2+*!I`~6oNQu4q1%chy&QS6DTNN^A(j%RX(61?e z*vV^&YmY84iWOp$f!2&*92yO)5-&V3s^*oTDtfm@J4`A34y}G0XS_ftEo=l~BtLIs zOb-|oQhF`|EpWL4sxzQRY7cn&1mA4`0|7d-RGZWaX9raNrVB@GGvk6xvOZAg|_rzU0t*XS2f=FMcQIXY> z*NgP6Rcrx78V$Rl#!%c=gvQ0hbzKG|SDUM?Te35C$0o{h(vp(cns39=ZFtdS9DVM? zwv>=&Z3N~$e@sqC0s0`phhf9&*SUu#MF$;qH{z|i3j|}sm7;Tx>MBpzAQd>?V6(%S zaS=tOxN4L_BD%m!;@J}{?8}I`Q9%_GBF(e0>n2_h;MelA%cH}$1dR=DgjyZSye&l~itv?K z#}T(HoxP7*hl0+DJ%0$Zinnm%AbHfU3!}GjPn3ArQ)cQ?NjB#uD&JkFOuE|nv|x7m z^jf3B3O8nrM!GRHlX3dwdKoNk=_uqA$pE*iB@6v5T{Bwk_DH8LGn+fmbxLcgX;XZ5BDH+S*Hv& zSq<+CO*t>rH&#!4`mP$qD}HtTlNDXuz~BzgyA+>*&KJglS62R`bwSj!h;R^#V&^T% zc>Pc3pI2p<(NW9nN!p)^e<lm8#+8WSA+B{<$3HGH2kT1RZ%GJPBMS__lS}ua4-`6P~8h-=; zs+>s%Ikm2;ww)5pUa96H1%T8U9fZ@sMF_B!L8q?D^<=vaO;gO7g#HYM`-arHj!0X{ zC~`4wR*kGKarrpGoh%%LoZLCL;1**M z0+t@azvgoY4Lf5F={_ixbnfaaDYSMyo2ke;SA8gXQNJ_e^s>}&Up~Z4zbv9{jo~iD$R~8Q1RNVgkT%2N`S?-SGu;~w*=|L2 zFCBdZD>PV*2;nI|TbX|KcD;jL&MLC$H>mKVQu=brZp!V-A!z_LVQ?IS1p>vsa+mTA zeNA<4cbtf;gvkIZA7-;?v=D@Eik@FiqQ93vz!p4Q^%6>?$;{?Acb;<=`HH7A$R*Xc z$H1a)$OgPzQb z#1dQ?^WfSFmNnaoq#67~j0`GTf)cNSQ-3{dHOpBLdS39$jfwm;^|#xd%B` zxAHSpUm7wqmTuqyL1#9^m*3Q9)X zw6;=9s_En>qE3XdP*ik4P_!VvIF*d&6HiufP^G6?k#VqaYK2IN=D*oqP~pe+Aiswg zu4MH5E|#85G$5~qFm|QpU*Wl!f%wA7>lgL9q+aUJqSE)=Yt!O(!3+*4GF~Za!qxcN zx12&BjCJX)8*O{{QEv}?kG-Pu5Dus(UT0f|Hxb@IEKwqFF@~c^a=|$zI0!OpEfpKg z#%Mbfr_Jel(vdJaPx!&v@J6P3UL5~3zUJFBs

1Qung&bjy!(!Y!y9tns+bcQ3u8 z#epcIHpTMp2?9(^-yqb_dlXbmi1+<9fzc z@*KGOp`i-Yi zal3=AI4u7e@6-b+QyKrNk{f2U4$#KpkarAvsxt}$hJSCeY%rFfsvAE=1jumHzWL-> zc=2|8_=OR}EkUx%Rk>6}PnR9t1PjQ0W*`|RTqR*)8m&e%x8wqjIz`SWF}+sF=#18O zY#Y08h5Oplwj;FMdW*iLC**v@%S#EL?7VhDUT7{jfBOq)!9;z!L$Keq!r}m|Y~TG1U%8)&zWn-!@}Vyu$nHdrDsd-W zkCFoNHM+!Na$BXcLy=y+^!u!{`fT<1gZNt^e`qNF>HGJTfA9CYX?uk^XsR|RTDA$< z)lN)B>m$)MrHxk6P>uBoI%4Qx#WFZ`26+z;d6fhWSnPbUT;mX z)?Srt)M*%_wQd#Lph!@Vz-7h>rNzWi7df}v3hsLjW^OH zHu>{$OJ=s*56o0idd9I!hHhuN9|HCQu4{+;-X`MZTv>CBVlx=x=KXw-WvZu(H=~7` zw|{ObmcGk*b{*Jc8F@^q^M`i@Qnptddn>xfO&61^3g3eZqvW$D2xO@kjAT?_g zjytF(&Tr^=pw6UN3gWX`38Rl#1-KV?c5ho`D&M6k7i{iU5HRDQ8%|Aj~1qsC07=b4$PGB~dYe*YFLfc)o*z{f8_A$nFT z!Xe@BsYLXcdt9;E=18k?rbKJHT|cifOY1TVuB@v-cvzs6(rT?1S)j#Y`%GJA{^0Ou zCmXw-s4j0F-=oL)+y+?z7*838$vk1<4)=UliY{j8u$@0xw3 zCwqkM#?N$aM{xz5CsRO`F>Bc3(!1lC#;5{%*p_m53D%@Rf?Q@RfT>258Uzs7z;i{gf)zbO3Taj z+6~-ZH;R<%!(X6_bu7|0eXp7JLkQ#lP_aJlN^f@j@`79fW^XW4d@cNg@I&^4!ksgL z#&f#yb+4jcEPW|EW&mJtN%uFZ-)2i7IJ_DXVwY-jRwjt_#a5qh)5 zm2&bf?1#9%{l-R3kXMEtU)Rx$9Mx62IXS<&l57&y?toCw>xVqg*8SYzG|Al9Vg>R$S?#%-*dlzV(G&GPb+AGO_i0OJShTEJ#vpF>PrIe-XK` zQp4)X!O*4+tO-Vw+0O|Ew>07>;!WDFv&lw}nlOlNj$o4%E`0y>AGvt$!|{hvdjpu0 zXd&1bCn8;Uf8M*oh!Z!;i_E+7dA;WG7bh! zo6A>^opT%m>}FRt3&QKu)N5y3nl16)J1(?MFLPH)vWBa(42s}AbXK;qc5ThQwY!=3 zZ8d$$vN*M$1@Bewkeg-IfQxC;fu=%@*IQKR#L&}Jh86j~8Z)f8a1V5YD%aB1S4s`^ZJQ1x7@DffL zj?`XxT>KX>$#tOcYjuiR8qQ0JW|Lv#A(jPW;i>5y2dXp^O6_p+(Vj5)qHD6QWveE(DrU7MI}!bcIu)@1%)Z@E`7ufs z8`yD4e3$pp;Jb!d1#9P?Z#MSre}KKA`ce5)F^1X*Wfp9Nz@{?m;+?W#!cfsoFTZ>hquB#yq)=!qp-3z)2c1*atqCY zG{>h9k*ovbRE#pEa3uvIDgk=8Q~gSj_9eZ8GAmsS16whh=ZH^<&ecUnx@A*6z<1rV7o-#8X56BPm*Bqf7+88NGpwOxmPsahAXW0W*LfG~^2kaqmRmsHQ4RV$^~J=# zReuU{eCGbqwIRLjg9IAsOhgI?IK-ApS6^CAyL;j0z2X)wh{+Y^JW{A%uXNch_4*Lt(b@acw52~1s6G5zg* z@Ln7|2-SHX8m|837v6`TMe6Oj=hc)eBQS%xl4M5O6B9Bp{)f?=P-lT^+pTv%8a;kP zjre&8viQ(zR?w(2^Bo@pt5=?iI3T@t_e0ZIkmF!t;TSd-pEEE_zaJ4f#l*Xo`VRN4 zz`lJZT7dYz`Dubol&r$nkN~&hNnNM@2^-$dogEz2v+HPceI(ASJ2i7jeA9)hVn?)usWR@RzMp@_2(jV zQb%JXJ2-R1mp`(!Ls)Rgt3;!3Rn3xFuVHK75Y(;Vd1XouTKL``2Qbnr<^iXM-gLD8 zsSq}K#H9|*4QXUw&YL;7-*GigK7Q2dMc|;|<#GFa5a2{Q;mK^rg@a(-7gUXWpkM1A z$B{_k5K+W};!wdBp!ogzYjw$`|2MMj--)=&pYxvK(A@RA*EOZ}ABWIHVVo~j)&lO~ zjt0^ngzyL3gA!eGN7f{seBTbt+)m4T`x!C73{rktQTP|I^at?&nQhDZoJoh{><4re zJg-ZM)*kJZHhUtLAe|dTO?~~k4UvMY>Zw$r+%h!Zc)w!6?bg#5T8x;`ozhyfQ@N=e zJS$x*!hvJHMp0&4GszFGmiHI19Wa0{1@qoynq?c1lAuUVr>D4`Kl7d^XI5-*Z{v1l z8>aI1-+%0lA1VR>K!9hza?D`rf@z*32Xv~kb4+n4-^MmrOu&-MrKOaY7txiX)=b#? z9@OGR;n&pY+kYnB_(c{HCPZ#9n**Yg*xGN^Dt;Hp8RRhpSk^;Itz&8jzwIxLj73|x z^B7uK{i+42v(Ahq-e_Hrh{_fUd~jY}K|9-Q_k%uHj?- zte5g>Pn*<^E;7E<+`D5U;hH4PDglf|9x8ITk!fp*kC3utUFUhg**Ax`OdAoo^9apF3u!o)_3hf zGAb-}4z7zlgvP?ruKfz4A)J_ej@7l67dE9ml+qr}*i#dE^J24-kpR<=fru^vHSFZ* zyJTksB|%``wagn~nO8|`-`QapCy9A|jwoi(S`MSgodXrF5*w;)4c^R2h|be@$Viw?}ga|1n9AU#(Bcdy@Gh8K#B_6PKL2 z|08>RBL*59gh~n~j3mwLtvkQoSFD0@$cLxu1~gVnknD)Y%TcENZGca{i?Z|(cJ^j| zZ&|T^{vf{sF*iFpPG9b4D{k~=Y<~fgBgwknd|_P?U8rWgq`1)~6-)qUU*GEkO`S_V z=fsM$Iw8w-!m_Lwa(o+(FPm9`4l8nJ4ZLi|UCF@%GE!)v7TW;`-`-t=NJQjcfY_av7D9J^ zzr3O}!Cd8deHP8OTy=w*KYpvEpSkh8w$H%CVwUnDB&stZW;nBJPwus*qpRlcSw{DI z4&A9FPs*5yuj^1BYZ|OO@Qr^41ChHZ&%)YwZe%_UnhVMJ#~jFcFo8v;*;8GczQ#{B zZ7`m1;ve_%rLJEko`hMdwIGJ`oG`M%S^i|!W?Oq&Xvl2!dFiurgMR@$(BK{-pD^f?Pl>x+w^&;nE}^EY%zRH;YHbo2##Q6_ zgWAw)JEX)g2l~nhF&C07XJVXxOt1M+tGvjso5B$oyG;mW84=*SnA&ajXI071K?CyPmpN+w&6eFB5WBde^|^np^hU zBdnM&KY(zTEOlK4demz0gg3}sA3-sA(>!gH zMB1Wm5k7-{5XH>9C!rKB>oQ!T>s8gE1iW^m+{@N+;;!RnqG2ETWh~MJ=L11!oI3Er z8WJcBYJ8H}+rT+Vc7wycF0j@x-c}I}R1=u`dQb8fae-4qsbzu;=QidwFzrm7P?eYO z2SA?Lu*#=Y9&J2XkB!9$3x;ui!l|o5f-tN#SbW5`HOLI|R!kSflxbYk4%aaG*^{xy74t+D~@A4 zRqFviSo0zoc4?I8(QE_!D!v~cxF2&mYjl#%OI8Fov?yBDYniXk_Km~ks4vZr2W&_t z1r4ksmTdytHfuen?2H<+q$&30&(+u9txO$(LuJh}G13J^?hB6y1%tbOaQbOvNAbVz z1{(xdlOVBEQ4jAOIzM8NeQO^oV|G^=#)GBMCUR+f9EQbj&b(Fd;fr!GlVnU`@0pbm zbOCAT^jAl6Y3_!d2XOZH_8kJ5`9{wHdE?FHS7Xq!OiAZxXqdmCfrV=uc`k{Fhx%2K zLqXTxxh++JpNSc#X<5nCQawXfMh?OP;dEc`(};2z$*Dn9!2i}#=@t89!9;Pwxg4~N z!rZ2Lry6_ZIM}8R1fNnsw$AIQBC$>RQceBO+HeX$XJod9_gE$iJxo^@nRmidg{+op zUdW+`Q@E&&{a)?pbDWGWjP|4xNf&NQJdw{Gb@<5=)8prgqg^q;uyHYcLL_oK&#qZU zW4Wt(CK)~UjB+?i3O!8a$nA2bmI&{LyRoLm;4Vaf5$tkAdu;k>=4HM?MNC3kOaGhvK0c@Dx-XDCk?0d#j=M$CInbUFIC(G@@93S4 zVrQnPKoNO$hpS%zgY)P_8BPUYta>4Y;&CWdW|65gifhwkTx)pb2dFZJ8zx))&=|!4 z4QwqQ*~-maJ7=O8Jt3i5Ey0RGN`nmW^RRYEMRxQcoK{Zx5j6f7FGn;QYS}e-$H^xF z1d#Tx`G1cvbnLu5*NGhu9TlX1o$ukW7@Gg%8|%NAcMy~$@=@lO!uuLS|7pbs;jI8P z-J5_~0@gmi-PSn$Mb#1=BkCJZ^BJdRG=X;0=GT}#)U|Fvuv>*N%>9OY1^Do-xxQ}2 z$RG?@`NuJrj_!OY*E^xBtZD-LvQIq{_|FOaeC}=?$SxlIIb$pPt70TqyjI2q-8ntG z@6$Ec5U0#_wl#jQ`s<}0zxNVBrt7xXJdtZI*IcL;3Y=_q;p;iPxs!JKD7X2Xt5HS7 zN<%1hExd79Y9xm)q$suAxpBwy)c!j%!@KBsE%M9$WOG?rRD?L`X6`-Jov(GhK6?uL zmtWVpteGvvQFj=+eJcEhEf%${o::do_vote(who, proposal, index, approve) } - fn veto_proposal(proposal_hash: HashOf) -> u32 { - pallet_collective::Pallet::::do_disapprove_proposal(proposal_hash) - } - fn close_proposal( proposal_hash: HashOf, proposal_index: ProposalIndex, diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 5134bd6f566..055b20f3ded 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -102,10 +102,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives"), impl_name: create_runtime_str!("collectives"), authoring_version: 1, - spec_version: 9310, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 0, + transaction_version: 2, state_version: 0, }; @@ -176,13 +176,11 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -pub const MINIMUM_PERIOD: u64 = SLOT_DURATION / 2; - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = ConstU64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = weights::pallet_timestamp::WeightInfo; } @@ -239,7 +237,7 @@ impl pallet_multisig::Config for Runtime { type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; - type MaxSignatories = ConstU16<100>; + type MaxSignatories = ConstU32<100>; type WeightInfo = weights::pallet_multisig::WeightInfo; } @@ -392,7 +390,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions, ConstU32>; type NextSessionRotation = pallet_session::PeriodicSessions, ConstU32>; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = weights::pallet_session::WeightInfo; @@ -446,11 +444,10 @@ impl pallet_collective::Config for Runtime { type MaxProposals = ConstU32; type MaxMembers = ConstU32; type DefaultVote = pallet_collective::MoreThanMajorityThenPrimeDefaultVote; - type WeightInfo = pallet_collective::weights::SubstrateWeight; + type WeightInfo = weights::pallet_collective::WeightInfo; } -pub const MAX_FOUNDERS: u32 = 10; -pub const MAX_FELLOWS: u32 = ALLIANCE_MAX_MEMBERS - MAX_FOUNDERS; +pub const MAX_FELLOWS: u32 = ALLIANCE_MAX_MEMBERS; pub const MAX_ALLIES: u32 = 100; parameter_types! { @@ -477,7 +474,6 @@ impl pallet_alliance::Config for Runtime { type IdentityVerifier = (); // Don't block accounts on identity criteria type ProposalProvider = AllianceProposalProvider; type MaxProposals = ConstU32; - type MaxFounders = ConstU32; type MaxFellows = ConstU32; type MaxAllies = ConstU32; type MaxUnscrupulousItems = ConstU32<100>; @@ -485,7 +481,7 @@ impl pallet_alliance::Config for Runtime { type MaxAnnouncementsCount = ConstU32<100>; type MaxMembersCount = ConstU32; type AllyDeposit = AllyDeposit; - type WeightInfo = pallet_alliance::weights::SubstrateWeight; + type WeightInfo = weights::pallet_alliance::WeightInfo; } // Create the runtime by composing the FRAME pallets that were previously configured. @@ -554,6 +550,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -566,7 +563,10 @@ pub type Executive = frame_executive::Executive< // All migrations executed on runtime upgrade as a nested tuple of types implementing `OnRuntimeUpgrade`. // Included migrations must be idempotent. -type Migrations = (pallet_alliance::migration::Migration,); +type Migrations = ( + pallet_alliance::migration::Migration, + pallet_balances::migration::MigrateToTrackInactive, +); #[cfg(feature = "runtime-benchmarks")] #[macro_use] @@ -690,6 +690,23 @@ impl_runtime_apis! { } } + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + for Runtime + { + fn query_call_info( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::RuntimeDispatchInfo { + TransactionPayment::query_call_info(call, len) + } + fn query_call_fee_details( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_call_fee_details(call, len) + } + } + impl cumulus_primitives_core::CollectCollationInfo for Runtime { fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { ParachainSystem::collect_collation_info(header) @@ -698,21 +715,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade collectives-polkadot."); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::collectives-polkadot", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs index a1a6c309aef..246d167dbfa 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `cumulus_pallet_xcmp_queue` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,14 +48,16 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_294_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_777 nanoseconds. + Weight::from_ref_time(7_035_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_180_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 6_871 nanoseconds. + Weight::from_ref_time(7_121_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs index bd1bec80950..465d5634b56 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -47,44 +47,52 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. - fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + fn remark(b: u32, ) -> Weight { + // Minimum execution time: 3_778 nanoseconds. + Weight::from_ref_time(3_855_000) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(510).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + // Minimum execution time: 12_934 nanoseconds. + Weight::from_ref_time(13_156_000) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_ref_time(1_860).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_069_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 7_743 nanoseconds. + Weight::from_ref_time(8_055_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(624_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 3_937 nanoseconds. + Weight::from_ref_time(3_997_000) + // Standard Error: 2_287 + .saturating_add(Weight::from_ref_time(622_508).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[1, 1000]`. + /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(530_000 as u64).saturating_mul(i as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) + // Minimum execution time: 3_888 nanoseconds. + Weight::from_ref_time(3_983_000) + // Standard Error: 1_138 + .saturating_add(Weight::from_ref_time(454_438).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `p` is `[1, 1000]`. + /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_059_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) + // Minimum execution time: 5_459 nanoseconds. + Weight::from_ref_time(5_641_000) + // Standard Error: 1_037 + .saturating_add(Weight::from_ref_time(965_492).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs index c78ba86656f..bf736022ca7 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs @@ -2,8 +2,10 @@ pub mod block_weights; pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; pub mod frame_system; +pub mod pallet_alliance; pub mod pallet_balances; pub mod pallet_collator_selection; +pub mod pallet_collective; pub mod pallet_multisig; pub mod pallet_proxy; pub mod pallet_session; diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs index e7528d5c3d9..f3d31cbadcd 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_alliance` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -52,59 +52,53 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion ProposalCount (r:1 w:1) // Storage: AllianceMotion Voting (r:0 w:1) /// The range of component `b` is `[1, 1024]`. - /// The range of component `x` is `[2, 10]`. - /// The range of component `y` is `[0, 90]`. + /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. - fn propose_proposed(_b: u32, _x: u32, _y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(53_023_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(132_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { + // Minimum execution time: 35_162 nanoseconds. + Weight::from_ref_time(36_412_712) + // Standard Error: 71 + .saturating_add(Weight::from_ref_time(381).saturating_mul(b.into())) + // Standard Error: 745 + .saturating_add(Weight::from_ref_time(22_365).saturating_mul(m.into())) + // Standard Error: 735 + .saturating_add(Weight::from_ref_time(104_171).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Alliance Members (r:2 w:0) + // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) - /// The range of component `x` is `[3, 10]`. - /// The range of component `y` is `[2, 90]`. - fn vote(x: u32, y: u32, ) -> Weight { - Weight::from_ref_time(33_003_000 as u64) - // Standard Error: 106_000 - .saturating_add(Weight::from_ref_time(312_000 as u64).saturating_mul(x as u64)) - // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(82_000 as u64).saturating_mul(y as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + /// The range of component `m` is `[5, 100]`. + fn vote(m: u32, ) -> Weight { + // Minimum execution time: 31_249 nanoseconds. + Weight::from_ref_time(32_188_065) + // Standard Error: 832 + .saturating_add(Weight::from_ref_time(54_591).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Alliance Members (r:1 w:0) - // Storage: AllianceMotion ProposalOf (r:1 w:1) - // Storage: AllianceMotion Proposals (r:1 w:1) - // Storage: AllianceMotion Voting (r:0 w:1) - /// The range of component `p` is `[1, 100]`. - fn veto(p: u32, ) -> Weight { - Weight::from_ref_time(27_289_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + + // not used + fn veto(_p: u32, ) -> Weight { + Weight::from_ref_time(100_000_000) } + // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) // Storage: AllianceMotion Members (r:1 w:0) // Storage: AllianceMotion Proposals (r:1 w:1) // Storage: AllianceMotion ProposalOf (r:0 w:1) - /// The range of component `x` is `[2, 10]`. - /// The range of component `y` is `[2, 90]`. + /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. - fn close_early_disapproved(x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(31_884_000 as u64) - // Standard Error: 72_000 - .saturating_add(Weight::from_ref_time(358_000 as u64).saturating_mul(x as u64)) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(y as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + fn close_early_disapproved(m: u32, p: u32, ) -> Weight { + // Minimum execution time: 40_517 nanoseconds. + Weight::from_ref_time(37_804_735) + // Standard Error: 724 + .saturating_add(Weight::from_ref_time(46_629).saturating_mul(m.into())) + // Standard Error: 706 + .saturating_add(Weight::from_ref_time(96_011).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -112,42 +106,38 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion ProposalOf (r:1 w:1) // Storage: AllianceMotion Proposals (r:1 w:1) /// The range of component `b` is `[1, 1024]`. - /// The range of component `x` is `[2, 10]`. - /// The range of component `y` is `[2, 90]`. + /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. - fn close_early_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(43_205_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) - // Standard Error: 73_000 - .saturating_add(Weight::from_ref_time(123_000 as u64).saturating_mul(x as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(91_000 as u64).saturating_mul(y as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(114_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Minimum execution time: 50_587 nanoseconds. + Weight::from_ref_time(49_483_170) + // Standard Error: 79 + .saturating_add(Weight::from_ref_time(12).saturating_mul(b.into())) + // Standard Error: 845 + .saturating_add(Weight::from_ref_time(46_955).saturating_mul(m.into())) + // Standard Error: 824 + .saturating_add(Weight::from_ref_time(99_511).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(3)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) // Storage: AllianceMotion Members (r:1 w:0) // Storage: AllianceMotion Prime (r:1 w:0) - // Storage: AllianceMotion ProposalOf (r:1 w:1) // Storage: AllianceMotion Proposals (r:1 w:1) + // Storage: AllianceMotion ProposalOf (r:0 w:1) // Storage: Alliance Rule (r:0 w:1) - /// The range of component `x` is `[2, 10]`. - /// The range of component `y` is `[2, 90]`. + /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. - fn close_disapproved(x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(49_769_000 as u64) - // Standard Error: 69_000 - .saturating_add(Weight::from_ref_time(352_000 as u64).saturating_mul(x as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(81_000 as u64).saturating_mul(y as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(100_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(6 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + fn close_disapproved(m: u32, p: u32, ) -> Weight { + // Minimum execution time: 47_785 nanoseconds. + Weight::from_ref_time(49_064_492) + // Standard Error: 3_243 + .saturating_add(Weight::from_ref_time(96_267).saturating_mul(m.into())) + // Standard Error: 3_203 + .saturating_add(Weight::from_ref_time(121_736).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -156,124 +146,180 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Proposals (r:1 w:1) // Storage: AllianceMotion ProposalOf (r:0 w:1) /// The range of component `b` is `[1, 1024]`. - /// The range of component `x` is `[2, 10]`. - /// The range of component `y` is `[2, 90]`. + /// The range of component `m` is `[5, 100]`. /// The range of component `p` is `[1, 100]`. - fn close_approved(b: u32, _x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(40_901_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(b as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(79_000 as u64).saturating_mul(y as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(102_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + fn close_approved(_b: u32, m: u32, p: u32, ) -> Weight { + // Minimum execution time: 41_807 nanoseconds. + Weight::from_ref_time(40_124_977) + // Standard Error: 665 + .saturating_add(Weight::from_ref_time(40_824).saturating_mul(m.into())) + // Standard Error: 641 + .saturating_add(Weight::from_ref_time(89_499).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Alliance Members (r:3 w:3) + // Storage: Alliance Members (r:2 w:2) // Storage: AllianceMotion Members (r:1 w:1) - /// The range of component `x` is `[2, 10]`. - /// The range of component `y` is `[0, 90]`. + /// The range of component `m` is `[1, 100]`. /// The range of component `z` is `[0, 100]`. - fn init_members(_x: u32, y: u32, z: u32, ) -> Weight { - Weight::from_ref_time(39_647_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(123_000 as u64).saturating_mul(y as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(116_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + fn init_members(m: u32, z: u32, ) -> Weight { + // Minimum execution time: 37_806 nanoseconds. + Weight::from_ref_time(26_654_829) + // Standard Error: 571 + .saturating_add(Weight::from_ref_time(131_979).saturating_mul(m.into())) + // Standard Error: 564 + .saturating_add(Weight::from_ref_time(114_315).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) + } + // Storage: Alliance Members (r:2 w:2) + // Storage: AllianceMotion Proposals (r:1 w:0) + // Storage: Alliance DepositOf (r:101 w:50) + // Storage: System Account (r:50 w:50) + // Storage: AllianceMotion Members (r:0 w:1) + // Storage: AllianceMotion Prime (r:0 w:1) + /// The range of component `x` is `[1, 100]`. + /// The range of component `y` is `[0, 100]`. + /// The range of component `z` is `[0, 50]`. + fn disband(x: u32, y: u32, z: u32, ) -> Weight { + // Minimum execution time: 226_805 nanoseconds. + Weight::from_ref_time(228_436_000) + // Standard Error: 18_416 + .saturating_add(Weight::from_ref_time(484_425).saturating_mul(x.into())) + // Standard Error: 18_327 + .saturating_add(Weight::from_ref_time(384_513).saturating_mul(y.into())) + // Standard Error: 36_622 + .saturating_add(Weight::from_ref_time(8_974_720).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(x.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(y.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(z.into()))) + .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(z.into()))) } // Storage: Alliance Rule (r:0 w:1) fn set_rule() -> Weight { - Weight::from_ref_time(14_689_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 16_471 nanoseconds. + Weight::from_ref_time(16_726_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Alliance Announcements (r:1 w:1) fn announce() -> Weight { - Weight::from_ref_time(15_988_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 17_782 nanoseconds. + Weight::from_ref_time(18_057_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Alliance Announcements (r:1 w:1) fn remove_announcement() -> Weight { - Weight::from_ref_time(16_823_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_072 nanoseconds. + Weight::from_ref_time(20_395_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } + // Storage: Alliance Members (r:3 w:1) // Storage: Alliance UnscrupulousAccounts (r:1 w:0) - // Storage: Alliance Members (r:4 w:1) // Storage: System Account (r:1 w:1) // Storage: Alliance DepositOf (r:0 w:1) fn join_alliance() -> Weight { - Weight::from_ref_time(46_340_000 as u64) - .saturating_add(T::DbWeight::get().reads(6 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + // Minimum execution time: 47_327 nanoseconds. + Weight::from_ref_time(47_908_000) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Alliance Members (r:4 w:1) + // Storage: Alliance Members (r:3 w:1) // Storage: Alliance UnscrupulousAccounts (r:1 w:0) fn nominate_ally() -> Weight { - Weight::from_ref_time(36_225_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 34_263 nanoseconds. + Weight::from_ref_time(34_687_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Alliance Members (r:3 w:2) + // Storage: Alliance Members (r:2 w:2) // Storage: AllianceMotion Proposals (r:1 w:0) // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) fn elevate_ally() -> Weight { - Weight::from_ref_time(30_236_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 29_783 nanoseconds. + Weight::from_ref_time(30_668_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Alliance UpForKicking (r:1 w:0) - // Storage: Alliance Members (r:3 w:1) + // Storage: Alliance Members (r:4 w:2) // Storage: AllianceMotion Proposals (r:1 w:0) - // Storage: Alliance DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) + // Storage: Alliance RetiringMembers (r:0 w:1) + fn give_retirement_notice() -> Weight { + // Minimum execution time: 37_967 nanoseconds. + Weight::from_ref_time(38_605_000) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(5)) + } + // Storage: Alliance RetiringMembers (r:1 w:1) + // Storage: Alliance Members (r:1 w:1) + // Storage: Alliance DepositOf (r:1 w:1) + // Storage: System Account (r:1 w:1) fn retire() -> Weight { - Weight::from_ref_time(44_311_000 as u64) - .saturating_add(T::DbWeight::get().reads(7 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) + // Minimum execution time: 40_362 nanoseconds. + Weight::from_ref_time(41_038_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: Alliance Members (r:3 w:1) // Storage: AllianceMotion Proposals (r:1 w:0) // Storage: Alliance DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) + // Storage: System Account (r:2 w:2) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) - // Storage: Alliance UpForKicking (r:0 w:1) fn kick_member() -> Weight { - Weight::from_ref_time(46_112_000 as u64) - .saturating_add(T::DbWeight::get().reads(6 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) + // Minimum execution time: 118_050 nanoseconds. + Weight::from_ref_time(119_080_000) + .saturating_add(T::DbWeight::get().reads(13)) + .saturating_add(T::DbWeight::get().writes(8)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:1) // Storage: Alliance UnscrupulousWebsites (r:1 w:1) - /// The range of component `n` is `[1, 100]`. - /// The range of component `l` is `[1, 255]`. + /// The range of component `n` is `[0, 100]`. + /// The range of component `l` is `[0, 255]`. fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_300_000 as u64).saturating_mul(n as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(125_000 as u64).saturating_mul(l as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 14_919 nanoseconds. + Weight::from_ref_time(15_135_000) + // Standard Error: 3_921 + .saturating_add(Weight::from_ref_time(1_221_966).saturating_mul(n.into())) + // Standard Error: 1_535 + .saturating_add(Weight::from_ref_time(80_157).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:1) // Storage: Alliance UnscrupulousWebsites (r:1 w:1) - /// The range of component `n` is `[1, 100]`. - /// The range of component `l` is `[1, 255]`. + /// The range of component `n` is `[0, 100]`. + /// The range of component `l` is `[0, 255]`. fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 197_000 - .saturating_add(Weight::from_ref_time(34_156_000 as u64).saturating_mul(n as u64)) - // Standard Error: 87_000 - .saturating_add(Weight::from_ref_time(7_042_000 as u64).saturating_mul(l as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 14_606 nanoseconds. + Weight::from_ref_time(14_847_000) + // Standard Error: 218_175 + .saturating_add(Weight::from_ref_time(15_210_084).saturating_mul(n.into())) + // Standard Error: 85_447 + .saturating_add(Weight::from_ref_time(717_495).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } + // Storage: Alliance Members (r:3 w:2) + // Storage: AllianceMotion Proposals (r:1 w:0) + // Storage: AllianceMotion Members (r:0 w:1) + // Storage: AllianceMotion Prime (r:0 w:1) + fn abdicate_fellow_status() -> Weight { + // Minimum execution time: 36_974 nanoseconds. + Weight::from_ref_time(37_428_000) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs index a7d82a458a8..5865c971833 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,44 +48,51 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(39_576_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 42_297 nanoseconds. + Weight::from_ref_time(42_843_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(30_212_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 32_222 nanoseconds. + Weight::from_ref_time(32_673_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(19_428_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_434 nanoseconds. + Weight::from_ref_time(23_713_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(22_526_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_916 nanoseconds. + Weight::from_ref_time(26_539_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(38_737_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 41_236 nanoseconds. + Weight::from_ref_time(41_847_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(35_648_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 37_002 nanoseconds. + Weight::from_ref_time(39_357_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(17_197_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 21_574 nanoseconds. + Weight::from_ref_time(21_938_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs index 560a8438016..dfd2e0c0ec8 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -50,21 +50,24 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(7_128_000 as u64) - // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(3_105_000 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 20_694 nanoseconds. + Weight::from_ref_time(22_134_693) + // Standard Error: 3_321 + .saturating_add(Weight::from_ref_time(2_273_097).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(7_922_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_127 nanoseconds. + Weight::from_ref_time(13_487_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(8_226_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 13_379 nanoseconds. + Weight::from_ref_time(13_713_000) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -72,31 +75,34 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: Session NextKeys (r:1 w:0) // Storage: CollatorSelection CandidacyBond (r:1 w:0) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) - /// The range of component `c` is `[1, 1000]`. + /// The range of component `c` is `[1, 999]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(56_086_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(93_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 44_894 nanoseconds. + Weight::from_ref_time(40_442_989) + // Standard Error: 1_079 + .saturating_add(Weight::from_ref_time(135_610).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(58_436_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(102_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 33_709 nanoseconds. + Weight::from_ref_time(27_474_927) + // Standard Error: 1_089 + .saturating_add(Weight::from_ref_time(128_421).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(29_654_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) + // Minimum execution time: 29_870 nanoseconds. + Weight::from_ref_time(31_130_000) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(4)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -105,14 +111,14 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. - fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) - // Standard Error: 1_911_000 - .saturating_add(Weight::from_ref_time(9_907_000 as u64).saturating_mul(r as u64)) - // Standard Error: 1_911_000 - .saturating_add(Weight::from_ref_time(50_916_000 as u64).saturating_mul(c as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) + fn new_session(_r: u32, c: u32, ) -> Weight { + // Minimum execution time: 19_278 nanoseconds. + Weight::from_ref_time(19_499_000) + // Standard Error: 765_150 + .saturating_add(Weight::from_ref_time(27_573_334).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs new file mode 100644 index 00000000000..dfcd01c0e4c --- /dev/null +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs @@ -0,0 +1,208 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Autogenerated weights for `pallet_collective` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --chain=collectives-polkadot-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=pallet_collective +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_collective`. +pub struct WeightInfo(PhantomData); +impl pallet_collective::WeightInfo for WeightInfo { + // Storage: AllianceMotion Members (r:1 w:1) + // Storage: AllianceMotion Proposals (r:1 w:0) + // Storage: AllianceMotion Prime (r:0 w:1) + // Storage: AllianceMotion Voting (r:100 w:100) + /// The range of component `m` is `[0, 100]`. + /// The range of component `n` is `[0, 100]`. + /// The range of component `p` is `[0, 100]`. + fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { + // Minimum execution time: 17_445 nanoseconds. + Weight::from_ref_time(17_574_000) + // Standard Error: 65_394 + .saturating_add(Weight::from_ref_time(5_265_879).saturating_mul(m.into())) + // Standard Error: 65_394 + .saturating_add(Weight::from_ref_time(7_444_558).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + } + // Storage: AllianceMotion Members (r:1 w:0) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 100]`. + fn execute(b: u32, m: u32, ) -> Weight { + // Minimum execution time: 20_317 nanoseconds. + Weight::from_ref_time(19_615_265) + // Standard Error: 27 + .saturating_add(Weight::from_ref_time(2_017).saturating_mul(b.into())) + // Standard Error: 287 + .saturating_add(Weight::from_ref_time(14_147).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1)) + } + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion ProposalOf (r:1 w:0) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 100]`. + fn propose_execute(b: u32, m: u32, ) -> Weight { + // Minimum execution time: 23_080 nanoseconds. + Weight::from_ref_time(21_846_487) + // Standard Error: 28 + .saturating_add(Weight::from_ref_time(1_944).saturating_mul(b.into())) + // Standard Error: 297 + .saturating_add(Weight::from_ref_time(24_113).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + } + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion ProposalOf (r:1 w:1) + // Storage: AllianceMotion Proposals (r:1 w:1) + // Storage: AllianceMotion ProposalCount (r:1 w:1) + // Storage: AllianceMotion Voting (r:0 w:1) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[2, 100]`. + /// The range of component `p` is `[1, 100]`. + fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { + // Minimum execution time: 29_006 nanoseconds. + Weight::from_ref_time(30_263_788) + // Standard Error: 89 + .saturating_add(Weight::from_ref_time(2_887).saturating_mul(b.into())) + // Standard Error: 935 + .saturating_add(Weight::from_ref_time(16_046).saturating_mul(m.into())) + // Standard Error: 923 + .saturating_add(Weight::from_ref_time(110_411).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion Voting (r:1 w:1) + /// The range of component `m` is `[5, 100]`. + fn vote(m: u32, ) -> Weight { + // Minimum execution time: 28_028 nanoseconds. + Weight::from_ref_time(29_008_901) + // Standard Error: 442 + .saturating_add(Weight::from_ref_time(39_227).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + // Storage: AllianceMotion Voting (r:1 w:1) + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion Proposals (r:1 w:1) + // Storage: AllianceMotion ProposalOf (r:0 w:1) + /// The range of component `m` is `[4, 100]`. + /// The range of component `p` is `[1, 100]`. + fn close_early_disapproved(m: u32, p: u32, ) -> Weight { + // Minimum execution time: 30_789 nanoseconds. + Weight::from_ref_time(32_883_315) + // Standard Error: 927 + .saturating_add(Weight::from_ref_time(20_146).saturating_mul(m.into())) + // Standard Error: 904 + .saturating_add(Weight::from_ref_time(100_366).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) + } + // Storage: AllianceMotion Voting (r:1 w:1) + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion ProposalOf (r:1 w:1) + // Storage: AllianceMotion Proposals (r:1 w:1) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 100]`. + /// The range of component `p` is `[1, 100]`. + fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Minimum execution time: 41_415 nanoseconds. + Weight::from_ref_time(43_034_456) + // Standard Error: 86 + .saturating_add(Weight::from_ref_time(1_786).saturating_mul(b.into())) + // Standard Error: 909 + .saturating_add(Weight::from_ref_time(13_068).saturating_mul(m.into())) + // Standard Error: 886 + .saturating_add(Weight::from_ref_time(111_933).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) + } + // Storage: AllianceMotion Voting (r:1 w:1) + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion Prime (r:1 w:0) + // Storage: AllianceMotion Proposals (r:1 w:1) + // Storage: AllianceMotion ProposalOf (r:0 w:1) + /// The range of component `m` is `[4, 100]`. + /// The range of component `p` is `[1, 100]`. + fn close_disapproved(m: u32, p: u32, ) -> Weight { + // Minimum execution time: 32_062 nanoseconds. + Weight::from_ref_time(35_026_550) + // Standard Error: 930 + .saturating_add(Weight::from_ref_time(18_809).saturating_mul(m.into())) + // Standard Error: 907 + .saturating_add(Weight::from_ref_time(103_195).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) + } + // Storage: AllianceMotion Voting (r:1 w:1) + // Storage: AllianceMotion Members (r:1 w:0) + // Storage: AllianceMotion Prime (r:1 w:0) + // Storage: AllianceMotion ProposalOf (r:1 w:1) + // Storage: AllianceMotion Proposals (r:1 w:1) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 100]`. + /// The range of component `p` is `[1, 100]`. + fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Minimum execution time: 43_574 nanoseconds. + Weight::from_ref_time(44_782_136) + // Standard Error: 90 + .saturating_add(Weight::from_ref_time(1_990).saturating_mul(b.into())) + // Standard Error: 960 + .saturating_add(Weight::from_ref_time(15_697).saturating_mul(m.into())) + // Standard Error: 936 + .saturating_add(Weight::from_ref_time(113_994).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(3)) + } + // Storage: AllianceMotion Proposals (r:1 w:1) + // Storage: AllianceMotion Voting (r:0 w:1) + // Storage: AllianceMotion ProposalOf (r:0 w:1) + /// The range of component `p` is `[1, 100]`. + fn disapprove_proposal(p: u32, ) -> Weight { + // Minimum execution time: 20_012 nanoseconds. + Weight::from_ref_time(22_919_021) + // Standard Error: 928 + .saturating_add(Weight::from_ref_time(98_275).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(3)) + } +} diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs index 7832192fc2b..d8061b9996e 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-26, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm2`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -47,81 +47,81 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 20_960 nanoseconds. - Weight::from_ref_time(21_224_051 as u64) - // Standard Error: 2 - .saturating_add(Weight::from_ref_time(562 as u64).saturating_mul(z as u64)) + // Minimum execution time: 15_788 nanoseconds. + Weight::from_ref_time(16_468_274) + // Standard Error: 3 + .saturating_add(Weight::from_ref_time(687).saturating_mul(z.into())) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 49_994 nanoseconds. - Weight::from_ref_time(38_168_401 as u64) - // Standard Error: 639 - .saturating_add(Weight::from_ref_time(128_549 as u64).saturating_mul(s as u64)) - // Standard Error: 6 - .saturating_add(Weight::from_ref_time(1_496 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 43_682 nanoseconds. + Weight::from_ref_time(35_976_690) + // Standard Error: 831 + .saturating_add(Weight::from_ref_time(85_730).saturating_mul(s.into())) + // Standard Error: 8 + .saturating_add(Weight::from_ref_time(1_711).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 38_218 nanoseconds. - Weight::from_ref_time(27_858_769 as u64) - // Standard Error: 787 - .saturating_add(Weight::from_ref_time(125_710 as u64).saturating_mul(s as u64)) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_500 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 33_844 nanoseconds. + Weight::from_ref_time(26_517_988) + // Standard Error: 605 + .saturating_add(Weight::from_ref_time(83_590).saturating_mul(s.into())) + // Standard Error: 5 + .saturating_add(Weight::from_ref_time(1_697).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 52_270 nanoseconds. - Weight::from_ref_time(39_676_905 as u64) - // Standard Error: 921 - .saturating_add(Weight::from_ref_time(149_819 as u64).saturating_mul(s as u64)) - // Standard Error: 9 - .saturating_add(Weight::from_ref_time(1_580 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 47_899 nanoseconds. + Weight::from_ref_time(37_936_281) + // Standard Error: 618 + .saturating_add(Weight::from_ref_time(105_273).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_ref_time(1_725).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 33_994 nanoseconds. - Weight::from_ref_time(36_875_310 as u64) - // Standard Error: 1_099 - .saturating_add(Weight::from_ref_time(129_680 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_990 nanoseconds. + Weight::from_ref_time(34_112_390) + // Standard Error: 1_073 + .saturating_add(Weight::from_ref_time(101_225).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 24_546 nanoseconds. - Weight::from_ref_time(26_469_862 as u64) - // Standard Error: 882 - .saturating_add(Weight::from_ref_time(127_818 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 23_165 nanoseconds. + Weight::from_ref_time(25_473_730) + // Standard Error: 785 + .saturating_add(Weight::from_ref_time(82_880).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 33_795 nanoseconds. - Weight::from_ref_time(36_427_405 as u64) - // Standard Error: 994 - .saturating_add(Weight::from_ref_time(139_272 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_177 nanoseconds. + Weight::from_ref_time(34_538_364) + // Standard Error: 1_216 + .saturating_add(Weight::from_ref_time(91_659).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs index 4172fdd49ff..fbd995a593e 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,10 +49,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(16_628_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) + // Minimum execution time: 21_247 nanoseconds. + Weight::from_ref_time(22_408_398) + // Standard Error: 1_684 + .saturating_add(Weight::from_ref_time(52_604).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +61,42 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(33_846_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(175_000 as u64).saturating_mul(a as u64)) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(88_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 40_354 nanoseconds. + Weight::from_ref_time(40_604_876) + // Standard Error: 1_731 + .saturating_add(Weight::from_ref_time(115_181).saturating_mul(a.into())) + // Standard Error: 1_788 + .saturating_add(Weight::from_ref_time(36_808).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(23_633_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(184_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(29_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 27_737 nanoseconds. + Weight::from_ref_time(28_753_715) + // Standard Error: 1_698 + .saturating_add(Weight::from_ref_time(117_524).saturating_mul(a.into())) + // Standard Error: 1_755 + .saturating_add(Weight::from_ref_time(17_580).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_121_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(177_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(15_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 27_987 nanoseconds. + Weight::from_ref_time(28_789_616) + // Standard Error: 1_598 + .saturating_add(Weight::from_ref_time(121_884).saturating_mul(a.into())) + // Standard Error: 1_651 + .saturating_add(Weight::from_ref_time(12_104).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +104,64 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(31_509_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(86_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 36_687 nanoseconds. + Weight::from_ref_time(37_370_737) + // Standard Error: 2_147 + .saturating_add(Weight::from_ref_time(109_740).saturating_mul(a.into())) + // Standard Error: 2_218 + .saturating_add(Weight::from_ref_time(27_280).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(26_168_000 as u64) - // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(127_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 30_054 nanoseconds. + Weight::from_ref_time(31_037_232) + // Standard Error: 1_671 + .saturating_add(Weight::from_ref_time(73_972).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(26_306_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 29_196 nanoseconds. + Weight::from_ref_time(30_850_447) + // Standard Error: 2_174 + .saturating_add(Weight::from_ref_time(74_625).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(22_287_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 25_283 nanoseconds. + Weight::from_ref_time(26_539_611) + // Standard Error: 2_055 + .saturating_add(Weight::from_ref_time(53_335).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(29_260_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(38_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 31_687 nanoseconds. + Weight::from_ref_time(32_977_547) + // Standard Error: 1_740 + .saturating_add(Weight::from_ref_time(16_154).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(23_012_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(p as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 26_521 nanoseconds. + Weight::from_ref_time(28_210_679) + // Standard Error: 1_681 + .saturating_add(Weight::from_ref_time(40_111).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs index 9d8a97c13d5..a10e6daed12 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,15 +49,17 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(15_802_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 21_282 nanoseconds. + Weight::from_ref_time(22_316_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(12_925_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Minimum execution time: 17_660 nanoseconds. + Weight::from_ref_time(18_017_000) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs index ec3ef62a08f..ce18d619b5f 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -47,12 +47,15 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) + // Storage: Aura CurrentSlot (r:1 w:0) fn set() -> Weight { - Weight::from_ref_time(6_170_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Minimum execution time: 8_970 nanoseconds. + Weight::from_ref_time(9_346_000) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_177_000 as u64) + // Minimum execution time: 3_726 nanoseconds. + Weight::from_ref_time(3_851_000) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs index 3d1301e8384..824991558ef 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-07-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-12-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -34,7 +34,7 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights +// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,26 +48,31 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(13_398_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_159_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 11_673 nanoseconds. + Weight::from_ref_time(20_232_865) + // Standard Error: 2_139 + .saturating_add(Weight::from_ref_time(3_634_291).saturating_mul(c.into())) } fn as_derivative() -> Weight { - Weight::from_ref_time(4_668_000 as u64) + // Minimum execution time: 6_465 nanoseconds. + Weight::from_ref_time(6_783_000) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(10_742_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_375_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 11_740 nanoseconds. + Weight::from_ref_time(25_924_183) + // Standard Error: 2_899 + .saturating_add(Weight::from_ref_time(3_860_781).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - Weight::from_ref_time(11_022_000 as u64) + // Minimum execution time: 14_329 nanoseconds. + Weight::from_ref_time(14_576_000) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(14_280_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_150_000 as u64).saturating_mul(c as u64)) + // Minimum execution time: 11_891 nanoseconds. + Weight::from_ref_time(24_417_472) + // Standard Error: 5_719 + .saturating_add(Weight::from_ref_time(3_635_818).saturating_mul(c.into())) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 24acb0fdeb7..a530966462e 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -8,57 +8,57 @@ edition = "2021" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } smallvec = "1.10.0" # Substrate -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, features = ["unstable-interface"], branch = "polkadot-v0.9.31" } -pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -157,7 +157,7 @@ try-runtime = [ "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", "frame-system/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", "pallet-aura/try-runtime", "pallet-authorship/try-runtime", "pallet-balances/try-runtime", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs index dab23f07b78..7cebf9f5a57 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs @@ -4,7 +4,7 @@ use crate::{ }; use frame_support::{ parameter_types, - traits::{ConstU32, Nothing}, + traits::{ConstBool, ConstU32, Nothing}, weights::Weight, }; use pallet_contracts::{ @@ -57,4 +57,6 @@ impl Config for Runtime { type AddressGenerator = DefaultAddressGenerator; type MaxCodeLen = ConstU32<{ 128 * 1024 }>; type MaxStorageKeyLen = ConstU32<128>; + type UnsafeUnstableInterface = ConstBool; + type MaxDebugBufferLen = ConstU32<{ 2 * 1024 * 1024 }>; } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 0d65a811473..6fc6929e3b7 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -96,6 +96,12 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; + +pub type Migrations = ( + pallet_contracts::Migration, + pallet_balances::migration::MigrateToTrackInactive, +); + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -103,7 +109,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - pallet_contracts::Migration, + Migrations, >; impl_opaque_keys! { @@ -117,10 +123,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("contracts-rococo"), impl_name: create_runtime_str!("contracts-rococo"), authoring_version: 1, - spec_version: 9310, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 1, + transaction_version: 4, state_version: 1, }; @@ -185,7 +191,7 @@ impl frame_system::Config for Runtime { impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); + type OnTimestampSet = Aura; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = pallet_timestamp::weights::SubstrateWeight; } @@ -235,7 +241,7 @@ impl pallet_multisig::Config for Runtime { type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; - type MaxSignatories = ConstU16<100>; + type MaxSignatories = ConstU32<100>; type WeightInfo = pallet_multisig::weights::SubstrateWeight; } @@ -282,7 +288,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = pallet_session::weights::SubstrateWeight; @@ -524,6 +530,7 @@ impl_runtime_apis! { storage_deposit_limit, input_data, contracts::CONTRACTS_DEBUG_OUTPUT, + pallet_contracts::Determinism::Deterministic, ) } @@ -553,8 +560,14 @@ impl_runtime_apis! { origin: AccountId, code: Vec, storage_deposit_limit: Option, + determinism: pallet_contracts::Determinism, ) -> pallet_contracts_primitives::CodeUploadResult { - Contracts::bare_upload_code(origin, code, storage_deposit_limit) + Contracts::bare_upload_code( + origin, + code, + storage_deposit_limit, + determinism, + ) } fn get_storage( @@ -567,21 +580,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade contracts"); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::contracts", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index 3dab0e0b6ef..1ea0341bf93 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -6,24 +6,24 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Cumulus cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } @@ -33,7 +33,7 @@ parachains-common = { path = "../../../common", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index 22b03670086..83c583f83d4 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -48,7 +48,9 @@ pub use frame_support::{ parameter_types, traits::{IsInVec, Randomness}, weights::{ - constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, + }, IdentityFee, Weight, }, StorageValue, @@ -65,10 +67,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("seedling"), impl_name: create_runtime_str!("seedling"), authoring_version: 1, - spec_version: 9310, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 1, + transaction_version: 2, state_version: 0, }; @@ -85,9 +87,10 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); +const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64, +); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -217,13 +220,14 @@ pub type SignedExtra = ( frame_system::CheckGenesis, frame_system::CheckEra, frame_system::CheckNonce, - cumulus_pallet_solo_to_para::CheckSudo, + pallet_sudo::CheckOnlySudoAccount, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 452d3063e46..d4abc73abbb 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -6,28 +6,28 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } @@ -37,7 +37,7 @@ parachain-info = { path = "../../../pallets/parachain-info", default-features = parachains-common = { path = "../../../common", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] @@ -68,5 +68,5 @@ std = [ ] try-runtime = [ "frame-executive/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", ] diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index 2d91a0c015b..227cb184fc2 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -55,7 +55,9 @@ pub use frame_support::{ parameter_types, traits::{Everything, IsInVec, Randomness}, weights::{ - constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, + }, IdentityFee, Weight, }, StorageValue, @@ -92,9 +94,10 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); +const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64, +); parameter_types! { pub const BlockHashCount: BlockNumber = 250; diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 56c30916eeb..a5ef481a5ad 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -12,53 +12,53 @@ edition = "2021" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.16", default-features = false } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -132,6 +132,7 @@ runtime-benchmarks = [ "frame-support/runtime-benchmarks", "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", + "pallet-assets/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", @@ -150,7 +151,7 @@ try-runtime = [ "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", "frame-system/try-runtime", - "frame-try-runtime", + "frame-try-runtime/try-runtime", "pallet-aura/try-runtime", "pallet-authorship/try-runtime", "pallet-balances/try-runtime", diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index dddb71773f6..1c9e4282e2d 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -35,16 +35,16 @@ use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::Everything, + traits::{AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, Everything}, weights::{ - constants::WEIGHT_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, + constants::WEIGHT_REF_TIME_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, }; use frame_system::{ limits::{BlockLength, BlockWeights}, - EnsureRoot, + EnsureRoot, EnsureSigned, }; use smallvec::smallvec; use sp_api::impl_runtime_apis; @@ -125,6 +125,9 @@ pub type UncheckedExtrinsic = /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type Migrations = + (pallet_balances::migration::MigrateToTrackInactive,); + /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -132,6 +135,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, + Migrations, >; /// Handles converting a weight scalar to a fee value, based on the scale and granularity of the @@ -189,7 +193,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("penpal-parachain"), impl_name: create_runtime_str!("penpal-parachain"), authoring_version: 1, - spec_version: 9290, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -230,9 +234,10 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); +const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64, +); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -322,37 +327,27 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; -} - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = (); } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; + type UncleGenerations = ConstU32<0>; type FilterUncle = (); type EventHandler = (CollatorSelection,); } parameter_types! { pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const MaxLocks: u32 = 50; - pub const MaxReserves: u32 = 50; } impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; + type MaxLocks = ConstU32<50>; /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. @@ -361,14 +356,13 @@ impl pallet_balances::Config for Runtime { type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = pallet_balances::weights::SubstrateWeight; - type MaxReserves = MaxReserves; + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; } parameter_types! { /// Relay Chain `TransactionByteFee` / 10 pub const TransactionByteFee: Balance = 10 * MICROUNIT; - pub const OperationalFeeMultiplier: u8 = 5; } impl pallet_transaction_payment::Config for Runtime { @@ -377,7 +371,7 @@ impl pallet_transaction_payment::Config for Runtime { type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } parameter_types! { @@ -397,7 +391,9 @@ impl pallet_assets::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; + type AssetIdParameter = codec::Compact; type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; type ForceOrigin = EnsureRoot; type AssetDeposit = AssetDeposit; type MetadataDepositBase = MetadataDepositBase; @@ -408,6 +404,9 @@ impl pallet_assets::Config for Runtime { type Extra = (); type WeightInfo = pallet_assets::weights::SubstrateWeight; type AssetAccountDeposit = AssetAccountDeposit; + type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); } parameter_types! { @@ -451,7 +450,6 @@ impl cumulus_pallet_dmp_queue::Config for Runtime { parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; - pub const MaxAuthorities: u32 = 100_000; } impl pallet_session::Config for Runtime { @@ -462,7 +460,7 @@ impl pallet_session::Config for Runtime { type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = CollatorSelection; - // Essentially just Aura, but lets be pedantic. + // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = (); @@ -471,7 +469,7 @@ impl pallet_session::Config for Runtime { impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; } parameter_types! { @@ -698,21 +696,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade penpal."); - let weight = Executive::try_runtime_upgrade().unwrap(); + fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { - log::info!( - target: "runtime::penpal", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", - block.header.number, - block.header.hash(), - state_root_check, - select, - ); - Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() } } diff --git a/parachains/runtimes/testing/penpal/src/weights/block_weights.rs b/parachains/runtimes/testing/penpal/src/weights/block_weights.rs index c004307336d..ea8a341b58b 100644 --- a/parachains/runtimes/testing/penpal/src/weights/block_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/block_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 100 µs. assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs b/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs index 3ce6b73d584..0512efb60e2 100644 --- a/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs @@ -23,7 +23,8 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = + Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); } #[cfg(test)] @@ -39,12 +40,12 @@ pub mod constants { // At least 10 µs. assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs b/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs index dca7d348310..4338d928d80 100644 --- a/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs b/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs index 87867ebfe17..1d115d963fa 100644 --- a/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), - write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 87159950350..b4621d1ef2c 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -28,7 +28,7 @@ use super::{ }; use core::marker::PhantomData; use frame_support::{ - log, match_types, parameter_types, + match_types, parameter_types, traits::{ fungibles::{self, Balanced, CreditOf}, Contains, Everything, Get, Nothing, @@ -36,10 +36,11 @@ use frame_support::{ }; use pallet_asset_tx_payment::HandleCredit; use pallet_xcm::XcmPassthrough; +use parachains_common::xcm_config::{DenyReserveTransferToRelayChain, DenyThenTry}; use polkadot_parachain::primitives::Sibling; use polkadot_runtime_common::impls::ToAuthor; use sp_runtime::traits::Zero; -use xcm::latest::{prelude::*, Weight as XCMWeight}; +use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, @@ -50,7 +51,7 @@ use xcm_builder::{ UsingComponents, }; use xcm_executor::{ - traits::{FilterAssetLocation, JustTry, ShouldExecute}, + traits::{FilterAssetLocation, JustTry}, XcmExecutor, }; @@ -149,69 +150,6 @@ match_types! { }; } -//TODO: move DenyThenTry to polkadot's xcm module. -/// Deny executing the xcm message if it matches any of the Deny filter regardless of anything else. -/// If it passes the Deny, and matches one of the Allow cases then it is let through. -pub struct DenyThenTry(PhantomData, PhantomData) -where - Deny: ShouldExecute, - Allow: ShouldExecute; - -impl ShouldExecute for DenyThenTry -where - Deny: ShouldExecute, - Allow: ShouldExecute, -{ - fn should_execute( - origin: &MultiLocation, - message: &mut Xcm, - max_weight: XCMWeight, - weight_credit: &mut XCMWeight, - ) -> Result<(), ()> { - Deny::should_execute(origin, message, max_weight, weight_credit)?; - Allow::should_execute(origin, message, max_weight, weight_credit) - } -} - -// See issue #5233 -pub struct DenyReserveTransferToRelayChain; -impl ShouldExecute for DenyReserveTransferToRelayChain { - fn should_execute( - origin: &MultiLocation, - message: &mut Xcm, - _max_weight: XCMWeight, - _weight_credit: &mut XCMWeight, - ) -> Result<(), ()> { - if message.0.iter().any(|inst| { - matches!( - inst, - InitiateReserveWithdraw { - reserve: MultiLocation { parents: 1, interior: Here }, - .. - } | DepositReserveAsset { dest: MultiLocation { parents: 1, interior: Here }, .. } | - TransferReserveAsset { - dest: MultiLocation { parents: 1, interior: Here }, - .. - } - ) - }) { - return Err(()) // Deny - } - - // allow reserve transfers to arrive from relay chain - if matches!(origin, MultiLocation { parents: 1, interior: Here }) && - message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) - { - log::warn!( - target: "xcm::barriers", - "Unexpected ReserveAssetDeposited from the relay chain", - ); - } - // Permit everything else - Ok(()) - } -} - pub type Barrier = DenyThenTry< DenyReserveTransferToRelayChain, ( diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index fc64be057f0..7d1302c1d79 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -7,38 +7,39 @@ description = "Simple runtime used by the rococo parachain(s)" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.36" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -54,7 +55,7 @@ parachains-common = { path = "../../../common", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] @@ -99,3 +100,7 @@ std = [ "parachain-info/std", "parachains-common/std", ] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "pallet-assets/runtime-benchmarks", +] diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 21d784aae65..ebaa2c3aa76 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -41,16 +41,21 @@ pub use frame_support::{ construct_runtime, dispatch::DispatchClass, match_types, parameter_types, - traits::{EitherOfDiverse, Everything, IsInVec, Randomness}, + traits::{ + AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, IsInVec, + Randomness, + }, weights::{ - constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, + }, ConstantMultiplier, IdentityFee, Weight, }, StorageValue, }; use frame_system::{ limits::{BlockLength, BlockWeights}, - EnsureRoot, + EnsureRoot, EnsureSigned, }; pub use pallet_balances::Call as BalancesCall; pub use pallet_timestamp::Call as TimestampCall; @@ -96,10 +101,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("test-parachain"), impl_name: create_runtime_str!("test-parachain"), authoring_version: 1, - spec_version: 9290, + spec_version: 9360, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 1, + transaction_version: 4, state_version: 0, }; @@ -134,9 +139,10 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); +const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64, +); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -204,15 +210,11 @@ impl frame_system::Config for Runtime { type MaxConsumers = frame_support::traits::ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; -} - impl pallet_timestamp::Config for Runtime { /// A timestamp: milliseconds since the unix epoch. type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type WeightInfo = (); } @@ -221,35 +223,29 @@ parameter_types! { pub const TransferFee: u128 = 1 * MILLIROC; pub const CreationFee: u128 = 1 * MILLIROC; pub const TransactionByteFee: u128 = 1 * MICROROC; - pub const MaxLocks: u32 = 50; - pub const MaxReserves: u32 = 50; } impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; + type DustRemoval = (); /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = (); - type MaxLocks = MaxLocks; - type MaxReserves = MaxReserves; + type MaxLocks = ConstU32<50>; + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; } -parameter_types! { - pub const OperationalFeeMultiplier: u8 = 5; -} - impl pallet_transaction_payment::Config for Runtime { type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; type WeightToFee = IdentityFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = (); - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } impl pallet_sudo::Config for Runtime { @@ -485,7 +481,6 @@ parameter_types! { pub const MetadataDepositBase: Balance = 1 * ROC; pub const MetadataDepositPerByte: Balance = 10 * MILLIROC; pub const UnitBody: BodyId = BodyId::Unit; - pub const MaxAuthorities: u32 = 100_000; } /// A majority of the Unit body from Rococo over XCM is our required administration origin. @@ -496,7 +491,9 @@ impl pallet_assets::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Balance = u64; type AssetId = AssetId; + type AssetIdParameter = codec::Compact; type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; type ForceOrigin = AdminOrigin; type AssetDeposit = AssetDeposit; type MetadataDepositBase = MetadataDepositBase; @@ -507,12 +504,15 @@ impl pallet_assets::Config for Runtime { type Extra = (); type WeightInfo = pallet_assets::weights::SubstrateWeight; type AssetAccountDeposit = AssetAccountDeposit; + type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); } impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; + type MaxAuthorities = ConstU32<100_000>; } construct_runtime! { diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 8ab166ec977..07e360661ea 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -1,19 +1,23 @@ [package] -name = "polkadot-parachain" -version = "0.9.310" +name = "polkadot-parachain-bin" +version = "0.9.360" authors = ["Parity Technologies "] build = "build.rs" edition = "2021" description = "Runs a polkadot parachain node which could be a collator." +[[bin]] +name = "polkadot-parachain" +path = "src/main.rs" + [dependencies] -async-trait = "0.1.57" -clap = { version = "4.0.17", features = ["derive"] } +async-trait = "0.1.59" +clap = { version = "4.0.29", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } -futures = "0.3.24" +futures = "0.3.25" hex-literal = "0.3.4" log = "0.4.17" -serde = { version = "1.0.145", features = ["derive"] } +serde = { version = "1.0.151", features = ["derive"] } # Local rococo-parachain-runtime = { path = "../parachains/runtimes/testing/rococo-parachain" } @@ -24,52 +28,55 @@ statemine-runtime = { path = "../parachains/runtimes/assets/statemine" } westmint-runtime = { path = "../parachains/runtimes/assets/westmint" } collectives-polkadot-runtime = { path = "../parachains/runtimes/collectives/collectives-polkadot" } contracts-rococo-runtime = { path = "../parachains/runtimes/contracts/contracts-rococo" } +bridge-hub-rococo-runtime = { path = "../parachains/runtimes/bridge-hubs/bridge-hub-rococo" } +bridge-hub-kusama-runtime = { path = "../parachains/runtimes/bridge-hubs/bridge-hub-kusama" } penpal-runtime = { path = "../parachains/runtimes/testing/penpal" } -jsonrpsee = { version = "0.15.1", features = ["server"] } +jsonrpsee = { version = "0.16.2", features = ["server"] } parachains-common = { path = "../parachains/common" } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-cli = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-service = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-serializer = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-serializer = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-state-trie-migration-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-client-cli = { path = "../client/cli" } @@ -81,21 +88,18 @@ cumulus-client-network = { path = "../client/network" } cumulus-primitives-core = { path = "../primitives/core" } cumulus-primitives-parachain-inherent = { path = "../primitives/parachain-inherent" } cumulus-relay-chain-interface = { path = "../client/relay-chain-interface" } -cumulus-relay-chain-inprocess-interface = { path = "../client/relay-chain-inprocess-interface" } -cumulus-relay-chain-rpc-interface = { path = "../client/relay-chain-rpc-interface" } -cumulus-relay-chain-minimal-node = { path = "../client/relay-chain-minimal-node" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [dev-dependencies] assert_cmd = "2.0" nix = "0.25" tempfile = "3.3.0" -tokio = { version = "1.21.2", features = ["macros", "time", "parking_lot"] } +tokio = { version = "1.23.0", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this -polkadot-cli = { git = "https://github.com/paritytech/polkadot", features = ["rococo-native"] , branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", features = ["rococo-native"] , branch = "release-v0.9.36" } [features] default = [] @@ -110,4 +114,5 @@ try-runtime = [ "statemine-runtime/try-runtime", "westmint-runtime/try-runtime", "shell-runtime/try-runtime", + "try-runtime-cli/try-runtime", ] diff --git a/polkadot-parachain/src/chain_spec/bridge_hubs.rs b/polkadot-parachain/src/chain_spec/bridge_hubs.rs new file mode 100644 index 00000000000..f04f38fb96e --- /dev/null +++ b/polkadot-parachain/src/chain_spec/bridge_hubs.rs @@ -0,0 +1,497 @@ +// Copyright 2019-2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +use cumulus_primitives_core::ParaId; +use parachains_common::Balance as BridgeHubBalance; +use sc_chain_spec::ChainSpec; +use sc_cli::RuntimeVersion; +use std::{path::PathBuf, str::FromStr}; + +/// Collects all supported BridgeHub configurations +#[derive(Debug, PartialEq)] +pub enum BridgeHubRuntimeType { + Rococo, + RococoLocal, + // used by benchmarks + RococoDevelopment, + + Wococo, + WococoLocal, + + Kusama, + KusamaLocal, + // used by benchmarks + KusamaDevelopment, +} + +impl FromStr for BridgeHubRuntimeType { + type Err = String; + + fn from_str(value: &str) -> Result { + match value { + kusama::BRIDGE_HUB_KUSAMA => Ok(BridgeHubRuntimeType::Kusama), + kusama::BRIDGE_HUB_KUSAMA_LOCAL => Ok(BridgeHubRuntimeType::KusamaLocal), + kusama::BRIDGE_HUB_KUSAMA_DEVELOPMENT => Ok(BridgeHubRuntimeType::KusamaDevelopment), + rococo::BRIDGE_HUB_ROCOCO => Ok(BridgeHubRuntimeType::Rococo), + rococo::BRIDGE_HUB_ROCOCO_LOCAL => Ok(BridgeHubRuntimeType::RococoLocal), + rococo::BRIDGE_HUB_ROCOCO_DEVELOPMENT => Ok(BridgeHubRuntimeType::RococoDevelopment), + wococo::BRIDGE_HUB_WOCOCO => Ok(BridgeHubRuntimeType::Wococo), + wococo::BRIDGE_HUB_WOCOCO_LOCAL => Ok(BridgeHubRuntimeType::WococoLocal), + _ => Err(format!("Value '{}' is not configured yet", value)), + } + } +} + +impl BridgeHubRuntimeType { + pub const ID_PREFIX: &'static str = "bridge-hub"; + + pub fn chain_spec_from_json_file(&self, path: PathBuf) -> Result, String> { + match self { + BridgeHubRuntimeType::Kusama | + BridgeHubRuntimeType::KusamaLocal | + BridgeHubRuntimeType::KusamaDevelopment => + Ok(Box::new(kusama::BridgeHubChainSpec::from_json_file(path)?)), + BridgeHubRuntimeType::Rococo | + BridgeHubRuntimeType::RococoLocal | + BridgeHubRuntimeType::RococoDevelopment => + Ok(Box::new(rococo::BridgeHubChainSpec::from_json_file(path)?)), + BridgeHubRuntimeType::Wococo | BridgeHubRuntimeType::WococoLocal => + Ok(Box::new(wococo::BridgeHubChainSpec::from_json_file(path)?)), + } + } + + pub fn load_config(&self) -> Result, String> { + match self { + BridgeHubRuntimeType::Kusama => + Ok(Box::new(kusama::BridgeHubChainSpec::from_json_bytes( + &include_bytes!("../../../parachains/chain-specs/bridge-hub-kusama.json")[..], + )?)), + BridgeHubRuntimeType::KusamaLocal => Ok(Box::new(kusama::local_config( + kusama::BRIDGE_HUB_KUSAMA_LOCAL, + "Kusama BridgeHub Local", + "kusama-local", + ParaId::new(1003), + ))), + BridgeHubRuntimeType::KusamaDevelopment => Ok(Box::new(kusama::local_config( + kusama::BRIDGE_HUB_KUSAMA_DEVELOPMENT, + "Kusama BridgeHub Development", + "kusama-dev", + ParaId::new(1003), + ))), + BridgeHubRuntimeType::Rococo => Ok(Box::new(rococo::live_config( + rococo::BRIDGE_HUB_ROCOCO, + "Rococo BridgeHub", + "rococo", + ParaId::new(1013), + |_| (), + ))), + BridgeHubRuntimeType::RococoLocal => Ok(Box::new(rococo::local_config( + rococo::BRIDGE_HUB_ROCOCO_LOCAL, + "Rococo BridgeHub Local", + "rococo-local", + ParaId::new(1013), + |_| (), + ))), + BridgeHubRuntimeType::RococoDevelopment => Ok(Box::new(rococo::local_config( + rococo::BRIDGE_HUB_ROCOCO_DEVELOPMENT, + "Rococo BridgeHub Development", + "rococo-dev", + ParaId::new(1013), + |_| (), + ))), + BridgeHubRuntimeType::Wococo => Ok(Box::new(wococo::live_config( + wococo::BRIDGE_HUB_WOCOCO, + "Wococo BridgeHub", + "wococo", + ParaId::new(1013), + ))), + BridgeHubRuntimeType::WococoLocal => Ok(Box::new(wococo::local_config( + wococo::BRIDGE_HUB_WOCOCO_LOCAL, + "Wococo BridgeHub Local", + "wococo-local", + ParaId::new(1013), + ))), + } + } + + pub fn runtime_version(&self) -> &'static RuntimeVersion { + match self { + BridgeHubRuntimeType::Kusama | + BridgeHubRuntimeType::KusamaLocal | + BridgeHubRuntimeType::KusamaDevelopment => &bridge_hub_kusama_runtime::VERSION, + BridgeHubRuntimeType::Rococo | + BridgeHubRuntimeType::RococoLocal | + BridgeHubRuntimeType::RococoDevelopment | + BridgeHubRuntimeType::Wococo | + BridgeHubRuntimeType::WococoLocal => { + // this is intentional, for Rococo/Wococo we just want to have one runtime, which is configured for both sides + &bridge_hub_rococo_runtime::VERSION + }, + } + } +} + +/// Check if 'id' satisfy BridgeHub-like format +fn ensure_id(id: &str) -> Result<&str, String> { + if id.starts_with(BridgeHubRuntimeType::ID_PREFIX) { + Ok(id) + } else { + Err(format!( + "Invalid 'id' attribute ({}), should start with prefix: {}", + id, + BridgeHubRuntimeType::ID_PREFIX + )) + } +} + +/// Sub-module for Rococo setup +pub mod rococo { + use super::{BridgeHubBalance, ParaId}; + use crate::chain_spec::{ + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + }; + use parachains_common::{AccountId, AuraId}; + use sc_chain_spec::ChainType; + use sp_core::sr25519; + + pub(crate) const BRIDGE_HUB_ROCOCO: &str = "bridge-hub-rococo"; + pub(crate) const BRIDGE_HUB_ROCOCO_LOCAL: &str = "bridge-hub-rococo-local"; + pub(crate) const BRIDGE_HUB_ROCOCO_DEVELOPMENT: &str = "bridge-hub-rococo-dev"; + const BRIDGE_HUB_ROCOCO_ED: BridgeHubBalance = + bridge_hub_rococo_runtime::constants::currency::EXISTENTIAL_DEPOSIT; + + /// Specialized `ChainSpec` for the normal parachain runtime. + pub type BridgeHubChainSpec = + sc_service::GenericChainSpec; + + pub type RuntimeApi = bridge_hub_rococo_runtime::RuntimeApi; + + pub fn live_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + modify_props: ModifyProperties, + ) -> BridgeHubChainSpec { + // Rococo defaults + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 42.into()); + properties.insert("tokenSymbol".into(), "ROC".into()); + properties.insert("tokenDecimals".into(), 12.into()); + modify_props(&mut properties); + + BridgeHubChainSpec::from_genesis( + // Name + chain_name, + // ID + super::ensure_id(id).expect("invalid id"), + ChainType::Live, + move || { + genesis( + // initial collators. + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed::("Alice"), + ), + ( + get_account_id_from_seed::("Bob"), + get_collator_keys_from_seed::("Bob"), + ), + ], + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + para_id, + ) + }, + Vec::new(), + None, + None, + None, + Some(properties), + Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, + ) + } + + pub fn local_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + modify_props: ModifyProperties, + ) -> BridgeHubChainSpec { + // Rococo defaults + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 42.into()); + properties.insert("tokenSymbol".into(), "ROC".into()); + properties.insert("tokenDecimals".into(), 12.into()); + modify_props(&mut properties); + + BridgeHubChainSpec::from_genesis( + // Name + chain_name, + // ID + super::ensure_id(id).expect("invalid id"), + ChainType::Local, + move || { + genesis( + // initial collators. + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed::("Alice"), + ), + ( + get_account_id_from_seed::("Bob"), + get_collator_keys_from_seed::("Bob"), + ), + ], + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + para_id, + ) + }, + Vec::new(), + None, + None, + None, + Some(properties), + Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, + ) + } + + fn genesis( + invulnerables: Vec<(AccountId, AuraId)>, + endowed_accounts: Vec, + id: ParaId, + ) -> bridge_hub_rococo_runtime::GenesisConfig { + bridge_hub_rococo_runtime::GenesisConfig { + system: bridge_hub_rococo_runtime::SystemConfig { + code: bridge_hub_rococo_runtime::WASM_BINARY + .expect("WASM binary was not build, please build it!") + .to_vec(), + }, + balances: bridge_hub_rococo_runtime::BalancesConfig { + balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + }, + parachain_info: bridge_hub_rococo_runtime::ParachainInfoConfig { parachain_id: id }, + collator_selection: bridge_hub_rococo_runtime::CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond: BRIDGE_HUB_ROCOCO_ED * 16, + ..Default::default() + }, + session: bridge_hub_rococo_runtime::SessionConfig { + keys: invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + bridge_hub_rococo_runtime::SessionKeys { aura }, // session keys + ) + }) + .collect(), + }, + aura: Default::default(), + aura_ext: Default::default(), + parachain_system: Default::default(), + polkadot_xcm: bridge_hub_rococo_runtime::PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + }, + } + } +} + +/// Sub-module for Wococo setup (reuses stuff from Rococo) +pub mod wococo { + use super::ParaId; + use crate::chain_spec::bridge_hubs::rococo; + + pub(crate) const BRIDGE_HUB_WOCOCO: &str = "bridge-hub-wococo"; + pub(crate) const BRIDGE_HUB_WOCOCO_LOCAL: &str = "bridge-hub-wococo-local"; + + pub type BridgeHubChainSpec = rococo::BridgeHubChainSpec; + pub type RuntimeApi = rococo::RuntimeApi; + + pub fn local_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> BridgeHubChainSpec { + rococo::local_config(id, chain_name, relay_chain, para_id, |properties| { + properties.insert("tokenSymbol".into(), "WOOK".into()); + }) + } + + pub fn live_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> BridgeHubChainSpec { + rococo::live_config(id, chain_name, relay_chain, para_id, |properties| { + properties.insert("tokenSymbol".into(), "WOOK".into()); + }) + } +} + +/// Sub-module for Kusama setup (reuses stuff from Rococo) +pub mod kusama { + use super::{BridgeHubBalance, ParaId}; + use crate::chain_spec::{ + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + }; + use parachains_common::{AccountId, AuraId}; + use sc_chain_spec::ChainType; + use sp_core::sr25519; + + pub(crate) const BRIDGE_HUB_KUSAMA: &str = "bridge-hub-kusama"; + pub(crate) const BRIDGE_HUB_KUSAMA_LOCAL: &str = "bridge-hub-kusama-local"; + pub(crate) const BRIDGE_HUB_KUSAMA_DEVELOPMENT: &str = "bridge-hub-kusama-dev"; + const BRIDGE_HUB_KUSAMA_ED: BridgeHubBalance = + bridge_hub_kusama_runtime::constants::currency::EXISTENTIAL_DEPOSIT; + + /// Specialized `ChainSpec` for the normal parachain runtime. + pub type BridgeHubChainSpec = + sc_service::GenericChainSpec; + pub type RuntimeApi = bridge_hub_kusama_runtime::RuntimeApi; + + pub fn local_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> BridgeHubChainSpec { + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 2.into()); + properties.insert("tokenSymbol".into(), "KSM".into()); + properties.insert("tokenDecimals".into(), 12.into()); + + BridgeHubChainSpec::from_genesis( + // Name + chain_name, + // ID + super::ensure_id(id).expect("invalid id"), + ChainType::Local, + move || { + genesis( + // initial collators. + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed::("Alice"), + ), + ( + get_account_id_from_seed::("Bob"), + get_collator_keys_from_seed::("Bob"), + ), + ], + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + para_id, + ) + }, + Vec::new(), + None, + None, + None, + Some(properties), + Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, + ) + } + + fn genesis( + invulnerables: Vec<(AccountId, AuraId)>, + endowed_accounts: Vec, + id: ParaId, + ) -> bridge_hub_kusama_runtime::GenesisConfig { + bridge_hub_kusama_runtime::GenesisConfig { + system: bridge_hub_kusama_runtime::SystemConfig { + code: bridge_hub_kusama_runtime::WASM_BINARY + .expect("WASM binary was not build, please build it!") + .to_vec(), + }, + balances: bridge_hub_kusama_runtime::BalancesConfig { + balances: endowed_accounts + .iter() + .cloned() + .map(|k| (k, BRIDGE_HUB_KUSAMA_ED * 524_288)) + .collect(), + }, + parachain_info: bridge_hub_kusama_runtime::ParachainInfoConfig { parachain_id: id }, + collator_selection: bridge_hub_kusama_runtime::CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond: BRIDGE_HUB_KUSAMA_ED * 16, + ..Default::default() + }, + session: bridge_hub_kusama_runtime::SessionConfig { + keys: invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + bridge_hub_kusama_runtime::SessionKeys { aura }, // session keys + ) + }) + .collect(), + }, + aura: Default::default(), + aura_ext: Default::default(), + parachain_system: Default::default(), + polkadot_xcm: bridge_hub_kusama_runtime::PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + }, + } + } +} diff --git a/polkadot-parachain/src/chain_spec/mod.rs b/polkadot-parachain/src/chain_spec/mod.rs index 30cff43b57c..3637e915406 100644 --- a/polkadot-parachain/src/chain_spec/mod.rs +++ b/polkadot-parachain/src/chain_spec/mod.rs @@ -20,6 +20,7 @@ use serde::{Deserialize, Serialize}; use sp_core::{Pair, Public}; use sp_runtime::traits::{IdentifyAccount, Verify}; +pub mod bridge_hubs; pub mod collectives; pub mod contracts; pub mod penpal; diff --git a/polkadot-parachain/src/cli.rs b/polkadot-parachain/src/cli.rs index b5df0b83643..90460095a6c 100644 --- a/polkadot-parachain/src/cli.rs +++ b/polkadot-parachain/src/cli.rs @@ -56,7 +56,12 @@ pub enum Subcommand { Benchmark(frame_benchmarking_cli::BenchmarkCmd), /// Try some testing command against a specified runtime state. + #[cfg(feature = "try-runtime")] TryRuntime(try_runtime_cli::TryRuntimeCmd), + + /// Errors since the binary was not build with `--features try-runtime`. + #[cfg(not(feature = "try-runtime"))] + TryRuntime, } #[derive(Debug, clap::Parser)] diff --git a/polkadot-parachain/src/command.rs b/polkadot-parachain/src/command.rs index fbffbc03c1b..3cb5164565c 100644 --- a/polkadot-parachain/src/command.rs +++ b/polkadot-parachain/src/command.rs @@ -18,8 +18,9 @@ use crate::{ chain_spec, cli::{Cli, RelayChainCli, Subcommand}, service::{ - new_partial, Block, CollectivesPolkadotRuntimeExecutor, ShellRuntimeExecutor, - StatemineRuntimeExecutor, StatemintRuntimeExecutor, WestmintRuntimeExecutor, + new_partial, Block, BridgeHubKusamaRuntimeExecutor, BridgeHubRococoRuntimeExecutor, + CollectivesPolkadotRuntimeExecutor, StatemineRuntimeExecutor, StatemintRuntimeExecutor, + WestmintRuntimeExecutor, }, }; use codec::Encode; @@ -32,10 +33,7 @@ use sc_cli::{ ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli, }; -use sc_service::{ - config::{BasePath, PrometheusConfig}, - TaskManager, -}; +use sc_service::config::{BasePath, PrometheusConfig}; use sp_core::hexdisplay::HexDisplay; use sp_runtime::traits::{AccountIdConversion, Block as BlockT}; use std::{net::SocketAddr, path::PathBuf}; @@ -56,6 +54,7 @@ enum Runtime { ContractsRococo, CollectivesPolkadot, CollectivesWestend, + BridgeHub(chain_spec::bridge_hubs::BridgeHubRuntimeType), } trait RuntimeResolver { @@ -107,6 +106,11 @@ fn runtime(id: &str) -> Runtime { Runtime::CollectivesPolkadot } else if id.starts_with("collectives-westend") { Runtime::CollectivesWestend + } else if id.starts_with(chain_spec::bridge_hubs::BridgeHubRuntimeType::ID_PREFIX) { + Runtime::BridgeHub( + id.parse::() + .expect("Invalid value"), + ) } else { log::warn!("No specific runtime was recognized for ChainSpec's id: '{}', so Runtime::default() will be used", id); Runtime::default() @@ -191,6 +195,15 @@ fn load_spec(id: &str) -> std::result::Result, String> { &include_bytes!("../../parachains/chain-specs/contracts-rococo.json")[..], )?), + // -- BridgeHub + bridge_like_id + if bridge_like_id + .starts_with(chain_spec::bridge_hubs::BridgeHubRuntimeType::ID_PREFIX) => + bridge_like_id + .parse::() + .expect("invalid value") + .load_config()?, + // -- Penpall "penpal-kusama" => Box::new(chain_spec::penpal::get_penpal_chain_spec( para_id.expect("Must specify parachain id"), @@ -226,6 +239,8 @@ fn load_spec(id: &str) -> std::result::Result, String> { Box::new(chain_spec::seedling::SeedlingChainSpec::from_json_file(path)?), Runtime::ContractsRococo => Box::new(chain_spec::contracts::ContractsRococoChainSpec::from_json_file(path)?), + Runtime::BridgeHub(bridge_hub_runtime_type) => + bridge_hub_runtime_type.chain_spec_from_json_file(path.into())?, Runtime::Penpal(_para_id) => Box::new(chain_spec::penpal::PenpalChainSpec::from_json_file(path)?), Runtime::Default => Box::new( @@ -303,6 +318,8 @@ impl SubstrateCli for Cli { Runtime::Shell => &shell_runtime::VERSION, Runtime::Seedling => &seedling_runtime::VERSION, Runtime::ContractsRococo => &contracts_rococo_runtime::VERSION, + Runtime::BridgeHub(bridge_hub_runtime_type) => + bridge_hub_runtime_type.runtime_version(), Runtime::Penpal(_) => &penpal_runtime::VERSION, Runtime::Default => &rococo_parachain_runtime::VERSION, } @@ -460,6 +477,48 @@ macro_rules! construct_async_run { { $( $code )* }.map(|v| (v, task_manager)) }) }, + Runtime::BridgeHub(bridge_hub_runtime_type) => { + match bridge_hub_runtime_type { + chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => { + runner.async_run(|$config| { + let $components = new_partial::( + &$config, + crate::service::aura_build_import_queue::<_, AuraId>, + )?; + + let task_manager = $components.task_manager; + { $( $code )* }.map(|v| (v, task_manager)) + }) + }, + chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => { + runner.async_run(|$config| { + let $components = new_partial::( + &$config, + crate::service::aura_build_import_queue::<_, AuraId>, + )?; + + let task_manager = $components.task_manager; + { $( $code )* }.map(|v| (v, task_manager)) + }) + }, + chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::WococoLocal => { + runner.async_run(|$config| { + let $components = new_partial::( + &$config, + crate::service::aura_build_import_queue::<_, AuraId>, + )?; + + let task_manager = $components.task_manager; + { $( $code )* }.map(|v| (v, task_manager)) + }) + } + } + }, Runtime::Penpal(_) | Runtime::Default => { runner.async_run(|$config| { let $components = new_partial::< @@ -550,7 +609,8 @@ pub fn run() -> Result<()> { match cmd { BenchmarkCmd::Pallet(cmd) => if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| match config.chain_spec.runtime() { + runner.sync_run(|config| { + match config.chain_spec.runtime() { Runtime::Statemine => cmd.run::(config), Runtime::Westmint => cmd.run::(config), @@ -558,11 +618,28 @@ pub fn run() -> Result<()> { cmd.run::(config), Runtime::CollectivesPolkadot | Runtime::CollectivesWestend => cmd.run::(config), + Runtime::BridgeHub(bridge_hub_runtime_type) => match bridge_hub_runtime_type { + chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => + cmd.run::(config), + chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => + cmd.run::(config), + _ => Err(format!( + "Chain '{:?}' doesn't support benchmarking for bridge_hub_runtime_type: {:?}", + config.chain_spec.runtime(), + bridge_hub_runtime_type + ) + .into()), + } _ => Err(format!( "Chain '{:?}' doesn't support benchmarking", config.chain_spec.runtime() ) .into()), + } }) } else { Err("Benchmarking wasn't enabled when building the node. \ @@ -597,41 +674,86 @@ pub fn run() -> Result<()> { _ => Err("Benchmarking sub-command unsupported".into()), } }, + #[cfg(feature = "try-runtime")] Some(Subcommand::TryRuntime(cmd)) => { - if cfg!(feature = "try-runtime") { - // grab the task manager. - let runner = cli.create_runner(cmd)?; - let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); - let task_manager = - TaskManager::new(runner.config().tokio_handle.clone(), *registry) - .map_err(|e| format!("Error: {:?}", e))?; - - match runner.config().chain_spec.runtime() { - Runtime::Statemine => runner.async_run(|config| { - Ok((cmd.run::(config), task_manager)) - }), - Runtime::Westmint => runner.async_run(|config| { - Ok((cmd.run::(config), task_manager)) + // grab the task manager. + let runner = cli.create_runner(cmd)?; + let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(runner.config().tokio_handle.clone(), *registry) + .map_err(|e| format!("Error: {:?}", e))?; + use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + type HostFunctionsOf = ExtendedHostFunctions< + sp_io::SubstrateHostFunctions, + ::ExtendHostFunctions, + >; + + match runner.config().chain_spec.runtime() { + Runtime::Statemine => runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) + }), + Runtime::Westmint => runner.async_run(|_| { + Ok((cmd.run::>(), task_manager)) + }), + Runtime::Statemint => runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) + }), + Runtime::CollectivesPolkadot | Runtime::CollectivesWestend => + runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) }), - Runtime::Statemint => runner.async_run(|config| { - Ok((cmd.run::(config), task_manager)) + Runtime::BridgeHub(bridge_hub_runtime_type) => match bridge_hub_runtime_type { + chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) }), - Runtime::CollectivesPolkadot | Runtime::CollectivesWestend => - runner.async_run(|config| { - Ok(( - cmd.run::(config), - task_manager, - )) - }), - Runtime::Shell => runner.async_run(|config| { - Ok((cmd.run::(config), task_manager)) + chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) }), - _ => Err("Chain doesn't support try-runtime".into()), - } - } else { - Err("Try-runtime must be enabled by `--features try-runtime`.".into()) + _ => Err(format!( + "Chain '{:?}' doesn't support try-runtime for bridge_hub_runtime_type: {:?}", + runner.config().chain_spec.runtime(), + bridge_hub_runtime_type + ) + .into()), + }, + Runtime::Shell => runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) + }), + Runtime::ContractsRococo => runner.async_run(|_| { + Ok(( + cmd.run::>(), + task_manager, + )) + }), + _ => Err("Chain doesn't support try-runtime".into()), } }, + #[cfg(not(feature = "try-runtime"))] + Some(Subcommand::TryRuntime) => Err("Try-runtime was not enabled when building the node. \ + You can enable it with `--features try-runtime`." + .into()), Some(Subcommand::Key(cmd)) => Ok(cmd.run(&cli)?), None => { let runner = cli.create_runner(&cli.run.normalize())?; @@ -678,7 +800,7 @@ pub fn run() -> Result<()> { info!("Parachain genesis state: {}", genesis_state); info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); - if collator_options.relay_chain_rpc_url.is_some() && cli.relaychain_args.len() > 0 { + if !collator_options.relay_chain_rpc_urls.is_empty() && cli.relaychain_args.len() > 0 { warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); } @@ -739,6 +861,35 @@ pub fn run() -> Result<()> { .await .map(|r| r.0) .map_err(Into::into), + Runtime::BridgeHub(bridge_hub_runtime_type) => match bridge_hub_runtime_type { + chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => + crate::service::start_generic_aura_node::< + chain_spec::bridge_hubs::kusama::RuntimeApi, + AuraId, + >(config, polkadot_config, collator_options, id, hwbench) + .await + .map(|r| r.0), + chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | + chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => + crate::service::start_generic_aura_node::< + chain_spec::bridge_hubs::rococo::RuntimeApi, + AuraId, + >(config, polkadot_config, collator_options, id, hwbench) + .await + .map(|r| r.0), + chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::WococoLocal => + crate::service::start_generic_aura_node::< + chain_spec::bridge_hubs::wococo::RuntimeApi, + AuraId, + >(config, polkadot_config, collator_options, id, hwbench) + .await + .map(|r| r.0), + } + .map_err(Into::into), Runtime::Penpal(_) | Runtime::Default => crate::service::start_rococo_parachain_node( config, diff --git a/polkadot-parachain/src/rpc.rs b/polkadot-parachain/src/rpc.rs index 8bd91075c4e..43752fd8d12 100644 --- a/polkadot-parachain/src/rpc.rs +++ b/polkadot-parachain/src/rpc.rs @@ -42,8 +42,9 @@ pub struct FullDeps { } /// Instantiate all RPC extensions. -pub fn create_full( +pub fn create_full( deps: FullDeps, + backend: Arc, ) -> Result> where C: ProvideRuntimeApi @@ -57,15 +58,19 @@ where C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: BlockBuilder, P: TransactionPool + Sync + Send + 'static, + B: sc_client_api::Backend + Send + Sync + 'static, + B::State: sc_client_api::backend::StateBackend>, { use frame_rpc_system::{System, SystemApiServer}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; + use substrate_state_trie_migration_rpc::{StateMigration, StateMigrationApiServer}; let mut module = RpcExtension::new(()); let FullDeps { client, pool, deny_unsafe } = deps; module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; - module.merge(TransactionPayment::new(client).into_rpc())?; + module.merge(TransactionPayment::new(client.clone()).into_rpc())?; + module.merge(StateMigration::new(client.clone(), backend, deny_unsafe).into_rpc())?; Ok(module) } diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index 2f38da0bd5d..7fab9065e3a 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -18,20 +18,18 @@ use codec::Codec; use cumulus_client_cli::CollatorOptions; use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, SlotProportion}; use cumulus_client_consensus_common::{ - ParachainBlockImport, ParachainCandidate, ParachainConsensus, + ParachainBlockImport as TParachainBlockImport, ParachainCandidate, ParachainConsensus, }; use cumulus_client_network::BlockAnnounceValidator; use cumulus_client_service::{ - prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams, + build_relay_chain_interface, prepare_node_config, start_collator, start_full_node, + StartCollatorParams, StartFullNodeParams, }; use cumulus_primitives_core::{ relay_chain::v2::{Hash as PHash, PersistedValidationData}, ParaId, }; -use cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain; -use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayChainResult}; -use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node; -use polkadot_service::CollatorPair; +use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface}; use sp_core::Pair; use jsonrpsee::RpcModule; @@ -43,7 +41,7 @@ use cumulus_client_consensus_relay_chain::Verifier as RelayChainVerifier; use futures::lock::Mutex; use sc_consensus::{ import_queue::{BasicQueue, Verifier as VerifierT}, - BlockImportParams, + BlockImportParams, ImportQueue, }; use sc_executor::WasmExecutor; use sc_network::NetworkService; @@ -73,6 +71,9 @@ type ParachainClient = TFullClient; +type ParachainBlockImport = + TParachainBlockImport>, ParachainBackend>; + /// Native executor instance. pub struct ShellRuntimeExecutor; @@ -148,6 +149,51 @@ impl sc_executor::NativeExecutionDispatch for CollectivesPolkadotRuntimeExecutor } } +// Native BridgeHubKusama executor instance. +pub struct BridgeHubKusamaRuntimeExecutor; + +impl sc_executor::NativeExecutionDispatch for BridgeHubKusamaRuntimeExecutor { + type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; + + fn dispatch(method: &str, data: &[u8]) -> Option> { + bridge_hub_kusama_runtime::api::dispatch(method, data) + } + + fn native_version() -> sc_executor::NativeVersion { + bridge_hub_kusama_runtime::native_version() + } +} + +// Native BridgeHubRococo executor instance. +pub struct BridgeHubRococoRuntimeExecutor; + +impl sc_executor::NativeExecutionDispatch for BridgeHubRococoRuntimeExecutor { + type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; + + fn dispatch(method: &str, data: &[u8]) -> Option> { + bridge_hub_rococo_runtime::api::dispatch(method, data) + } + + fn native_version() -> sc_executor::NativeVersion { + bridge_hub_rococo_runtime::native_version() + } +} + +// Native contracts executor instance. +pub struct ContractsRococoRuntimeExecutor; + +impl sc_executor::NativeExecutionDispatch for ContractsRococoRuntimeExecutor { + type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; + + fn dispatch(method: &str, data: &[u8]) -> Option> { + contracts_rococo_runtime::api::dispatch(method, data) + } + + fn native_version() -> sc_executor::NativeVersion { + contracts_rococo_runtime::native_version() + } +} + /// Starts a `ServiceBuilder` for a full service. /// /// Use this macro if you don't actually need the full service, but just the builder in order to @@ -162,7 +208,7 @@ pub fn new_partial( (), sc_consensus::DefaultImportQueue>, sc_transaction_pool::FullPool>, - (Option, Option), + (ParachainBlockImport, Option, Option), >, sc_service::Error, > @@ -179,6 +225,7 @@ where sc_client_api::StateBackendFor: sp_api::StateBackend, BIQ: FnOnce( Arc>, + ParachainBlockImport, &Configuration, Option, &TaskManager, @@ -229,8 +276,11 @@ where client.clone(), ); + let block_import = ParachainBlockImport::new(client.clone(), backend.clone()); + let import_queue = build_import_queue( client.clone(), + block_import.clone(), config, telemetry.as_ref().map(|telemetry| telemetry.handle()), &task_manager, @@ -244,33 +294,12 @@ where task_manager, transaction_pool, select_chain: (), - other: (telemetry, telemetry_worker_handle), + other: (block_import, telemetry, telemetry_worker_handle), }; Ok(params) } -async fn build_relay_chain_interface( - polkadot_config: Configuration, - parachain_config: &Configuration, - telemetry_worker_handle: Option, - task_manager: &mut TaskManager, - collator_options: CollatorOptions, - hwbench: Option, -) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { - match collator_options.relay_chain_rpc_url { - Some(relay_chain_url) => - build_minimal_relay_chain_node(polkadot_config, task_manager, relay_chain_url).await, - None => build_inprocess_relay_chain( - polkadot_config, - parachain_config, - telemetry_worker_handle, - task_manager, - hwbench, - ), - } -} - /// Start a shell node with the given parachain `Configuration` and relay chain `Configuration`. /// /// This is the actual implementation that is abstract over the executor and the runtime api for shell nodes. @@ -279,7 +308,7 @@ async fn start_shell_node_impl( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, rpc_ext_builder: RB, build_import_queue: BIQ, build_consensus: BIC, @@ -298,10 +327,10 @@ where + cumulus_primitives_core::CollectCollationInfo, sc_client_api::StateBackendFor: sp_api::StateBackend, RB: Fn(Arc>) -> Result, sc_service::Error> - + Send + 'static, BIQ: FnOnce( Arc>, + ParachainBlockImport, &Configuration, Option, &TaskManager, @@ -311,6 +340,7 @@ where >, BIC: FnOnce( Arc>, + ParachainBlockImport, Option<&Registry>, Option, &TaskManager, @@ -324,7 +354,7 @@ where let parachain_config = prepare_node_config(parachain_config); let params = new_partial::(¶chain_config, build_import_queue)?; - let (mut telemetry, telemetry_worker_handle) = params.other; + let (block_import, mut telemetry, telemetry_worker_handle) = params.other; let client = params.client.clone(); let backend = params.backend.clone(); @@ -345,20 +375,22 @@ where s => s.to_string().into(), })?; - let block_announce_validator = BlockAnnounceValidator::new(relay_chain_interface.clone(), id); + let block_announce_validator = + BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id); let force_authoring = parachain_config.force_authoring; let validator = parachain_config.role.is_authority(); let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); - let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); + let import_queue_service = params.import_queue.service(); + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), - import_queue: import_queue.clone(), + import_queue: params.import_queue, block_announce_validator_builder: Some(Box::new(|_| { Box::new(block_announce_validator) })), @@ -405,6 +437,7 @@ where if validator { let parachain_consensus = build_consensus( client.clone(), + block_import, prometheus_registry.as_ref(), telemetry.as_ref().map(|t| t.handle()), &task_manager, @@ -418,7 +451,7 @@ where let spawner = task_manager.spawn_handle(); let params = StartCollatorParams { - para_id: id, + para_id, block_status: client.clone(), announce_block, client: client.clone(), @@ -426,7 +459,7 @@ where relay_chain_interface, spawner, parachain_consensus, - import_queue, + import_queue: import_queue_service, collator_key: collator_key.expect("Command line arguments do not allow this. qed"), relay_chain_slot_duration, }; @@ -437,10 +470,10 @@ where client: client.clone(), announce_block, task_manager: &mut task_manager, - para_id: id, + para_id, relay_chain_interface, relay_chain_slot_duration, - import_queue, + import_queue: import_queue_service, }; start_full_node(params)?; @@ -459,7 +492,7 @@ async fn start_node_impl( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, _rpc_ext_builder: RB, build_import_queue: BIQ, build_consensus: BIC, @@ -479,20 +512,20 @@ where + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + frame_rpc_system::AccountNonceApi, sc_client_api::StateBackendFor: sp_api::StateBackend, - RB: Fn(Arc>) -> Result, sc_service::Error> - + Send - + 'static, + RB: Fn(Arc>) -> Result, sc_service::Error>, BIQ: FnOnce( - Arc>, - &Configuration, - Option, - &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue>, - sc_service::Error, - > + 'static, + Arc>, + ParachainBlockImport, + &Configuration, + Option, + &TaskManager, + ) -> Result< + sc_consensus::DefaultImportQueue>, + sc_service::Error, + >, BIC: FnOnce( Arc>, + ParachainBlockImport, Option<&Registry>, Option, &TaskManager, @@ -506,7 +539,7 @@ where let parachain_config = prepare_node_config(parachain_config); let params = new_partial::(¶chain_config, build_import_queue)?; - let (mut telemetry, telemetry_worker_handle) = params.other; + let (block_import, mut telemetry, telemetry_worker_handle) = params.other; let client = params.client.clone(); let backend = params.backend.clone(); @@ -526,20 +559,22 @@ where s => s.to_string().into(), })?; - let block_announce_validator = BlockAnnounceValidator::new(relay_chain_interface.clone(), id); + let block_announce_validator = + BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id); let force_authoring = parachain_config.force_authoring; let validator = parachain_config.role.is_authority(); let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); - let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); + let import_queue_service = params.import_queue.service(); + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), - import_queue: import_queue.clone(), + import_queue: params.import_queue, block_announce_validator_builder: Some(Box::new(|_| { Box::new(block_announce_validator) })), @@ -550,6 +585,7 @@ where let client = client.clone(); let transaction_pool = transaction_pool.clone(); + let backend_for_rpc = backend.clone(); Box::new(move |deny_unsafe, _| { let deps = rpc::FullDeps { client: client.clone(), @@ -557,7 +593,7 @@ where deny_unsafe, }; - rpc::create_full(deps).map_err(Into::into) + rpc::create_full(deps, backend_for_rpc.clone()).map_err(Into::into) }) }; @@ -598,6 +634,7 @@ where if validator { let parachain_consensus = build_consensus( client.clone(), + block_import, prometheus_registry.as_ref(), telemetry.as_ref().map(|t| t.handle()), &task_manager, @@ -611,7 +648,7 @@ where let spawner = task_manager.spawn_handle(); let params = StartCollatorParams { - para_id: id, + para_id, block_status: client.clone(), announce_block, client: client.clone(), @@ -619,7 +656,7 @@ where relay_chain_interface: relay_chain_interface.clone(), spawner, parachain_consensus, - import_queue, + import_queue: import_queue_service, collator_key: collator_key.expect("Command line arguments do not allow this. qed"), relay_chain_slot_duration, }; @@ -630,10 +667,10 @@ where client: client.clone(), announce_block, task_manager: &mut task_manager, - para_id: id, + para_id, relay_chain_interface, relay_chain_slot_duration, - import_queue, + import_queue: import_queue_service, }; start_full_node(params)?; @@ -647,6 +684,7 @@ where /// Build the import queue for the rococo parachain runtime. pub fn rococo_parachain_build_import_queue( client: Arc>, + block_import: ParachainBlockImport, config: &Configuration, telemetry: Option, task_manager: &TaskManager, @@ -664,7 +702,7 @@ pub fn rococo_parachain_build_import_queue( _, _, >(cumulus_client_consensus_aura::ImportQueueParams { - block_import: client.clone(), + block_import, client, create_inherent_data_providers: move |_, _| async move { let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); @@ -689,7 +727,7 @@ pub async fn start_rococo_parachain_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<( TaskManager, @@ -699,10 +737,11 @@ pub async fn start_rococo_parachain_node( parachain_config, polkadot_config, collator_options, - id, + para_id, |_| Ok(RpcModule::new(())), rococo_parachain_build_import_queue, |client, + block_import, prometheus_registry, telemetry, task_manager, @@ -733,7 +772,7 @@ pub async fn start_rococo_parachain_node( relay_parent, &relay_chain_interface, &validation_data, - id, + para_id, ).await; let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); @@ -753,7 +792,7 @@ pub async fn start_rococo_parachain_node( Ok((slot, timestamp, parachain_inherent)) } }, - block_import: client.clone(), + block_import, para_client: client, backoff_authoring_blocks: Option::<()>::None, sync_oracle, @@ -776,6 +815,7 @@ pub async fn start_rococo_parachain_node( /// Build the import queue for the shell runtime. pub fn shell_build_import_queue( client: Arc>, + block_import: ParachainBlockImport, config: &Configuration, _: Option, task_manager: &TaskManager, @@ -794,7 +834,7 @@ where { cumulus_client_consensus_relay_chain::import_queue( client.clone(), - client, + block_import, |_, _| async { Ok(()) }, &task_manager.spawn_essential_handle(), config.prometheus_registry(), @@ -807,7 +847,7 @@ pub async fn start_shell_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc>)> where @@ -827,10 +867,11 @@ where parachain_config, polkadot_config, collator_options, - id, + para_id, |_| Ok(RpcModule::new(())), shell_build_import_queue, |client, + block_import, prometheus_registry, telemetry, task_manager, @@ -841,7 +882,7 @@ where _| { let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( task_manager.spawn_handle(), - client.clone(), + client, transaction_pool, prometheus_registry, telemetry, @@ -849,9 +890,9 @@ where Ok(cumulus_client_consensus_relay_chain::build_relay_chain_consensus( cumulus_client_consensus_relay_chain::BuildRelayChainConsensusParams { - para_id: id, + para_id, proposer_factory, - block_import: client, + block_import, relay_chain_interface: relay_chain_interface.clone(), create_inherent_data_providers: move |_, (relay_parent, validation_data)| { let relay_chain_interface = relay_chain_interface.clone(); @@ -861,7 +902,7 @@ where relay_parent, &relay_chain_interface, &validation_data, - id, + para_id, ).await; let parachain_inherent = parachain_inherent.ok_or_else(|| { Box::::from( @@ -989,6 +1030,7 @@ where /// Build the import queue for Statemint and other Aura-based runtimes. pub fn aura_build_import_queue( client: Arc>, + block_import: ParachainBlockImport, config: &Configuration, telemetry_handle: Option, task_manager: &TaskManager, @@ -1013,23 +1055,25 @@ where let aura_verifier = move || { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client2).unwrap(); - Box::new(cumulus_client_consensus_aura::build_verifier::<::Pair, _, _>( - cumulus_client_consensus_aura::BuildVerifierParams { - client: client2.clone(), - create_inherent_data_providers: move |_, _| async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + Box::new( + cumulus_client_consensus_aura::build_verifier::<::Pair, _, _, _>( + cumulus_client_consensus_aura::BuildVerifierParams { + client: client2.clone(), + create_inherent_data_providers: move |_, _| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - let slot = + let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - Ok((slot, timestamp)) + Ok((slot, timestamp)) + }, + telemetry: telemetry_handle, }, - telemetry: telemetry_handle, - }, - )) as Box<_> + ), + ) as Box<_> }; let relay_chain_verifier = @@ -1045,13 +1089,7 @@ where let registry = config.prometheus_registry(); let spawner = task_manager.spawn_essential_handle(); - Ok(BasicQueue::new( - verifier, - Box::new(ParachainBlockImport::new(client)), - None, - &spawner, - registry, - )) + Ok(BasicQueue::new(verifier, Box::new(block_import), None, &spawner, registry)) } /// Start an aura powered parachain node. @@ -1060,7 +1098,7 @@ pub async fn start_generic_aura_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc>)> where @@ -1085,10 +1123,11 @@ where parachain_config, polkadot_config, collator_options, - id, + para_id, |_| Ok(RpcModule::new(())), aura_build_import_queue::<_, AuraId>, |client, + block_import, prometheus_registry, telemetry, task_manager, @@ -1097,12 +1136,14 @@ where sync_oracle, keystore, force_authoring| { - let client2 = client.clone(); let spawn_handle = task_manager.spawn_handle(); + let client2 = client.clone(); + let block_import2 = block_import.clone(); let transaction_pool2 = transaction_pool.clone(); let telemetry2 = telemetry.clone(); let prometheus_registry2 = prometheus_registry.map(|r| (*r).clone()); let relay_chain_for_aura = relay_chain_interface.clone(); + let aura_consensus = BuildOnAccess::Uninitialized(Some(Box::new(move || { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client2).unwrap(); @@ -1127,7 +1168,7 @@ where relay_parent, &relay_chain_for_aura, &validation_data, - id, + para_id, ).await; let timestamp = @@ -1149,8 +1190,8 @@ where Ok((slot, timestamp, parachain_inherent)) } }, - block_import: client2.clone(), - para_client: client2.clone(), + block_import: block_import2, + para_client: client2, backoff_authoring_blocks: Option::<()>::None, sync_oracle, keystore, @@ -1176,9 +1217,9 @@ where let relay_chain_consensus = cumulus_client_consensus_relay_chain::build_relay_chain_consensus( cumulus_client_consensus_relay_chain::BuildRelayChainConsensusParams { - para_id: id, + para_id, proposer_factory, - block_import: client.clone(), + block_import, relay_chain_interface: relay_chain_interface.clone(), create_inherent_data_providers: move |_, (relay_parent, validation_data)| { @@ -1189,7 +1230,7 @@ where relay_parent, &relay_chain_interface, &validation_data, - id, + para_id, ).await; let parachain_inherent = parachain_inherent.ok_or_else(|| { @@ -1222,7 +1263,7 @@ async fn start_contracts_rococo_node_impl( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, _rpc_ext_builder: RB, build_import_queue: BIQ, build_consensus: BIC, @@ -1242,20 +1283,20 @@ where + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + frame_rpc_system::AccountNonceApi, sc_client_api::StateBackendFor: sp_api::StateBackend, - RB: Fn(Arc>) -> Result, sc_service::Error> - + Send - + 'static, + RB: Fn(Arc>) -> Result, sc_service::Error>, BIQ: FnOnce( - Arc>, - &Configuration, - Option, - &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue>, - sc_service::Error, - > + 'static, + Arc>, + ParachainBlockImport, + &Configuration, + Option, + &TaskManager, + ) -> Result< + sc_consensus::DefaultImportQueue>, + sc_service::Error, + >, BIC: FnOnce( Arc>, + ParachainBlockImport, Option<&Registry>, Option, &TaskManager, @@ -1269,7 +1310,7 @@ where let parachain_config = prepare_node_config(parachain_config); let params = new_partial::(¶chain_config, build_import_queue)?; - let (mut telemetry, telemetry_worker_handle) = params.other; + let (block_import, mut telemetry, telemetry_worker_handle) = params.other; let client = params.client.clone(); let backend = params.backend.clone(); @@ -1289,20 +1330,22 @@ where s => s.to_string().into(), })?; - let block_announce_validator = BlockAnnounceValidator::new(relay_chain_interface.clone(), id); + let block_announce_validator = + BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id); let force_authoring = parachain_config.force_authoring; let validator = parachain_config.role.is_authority(); let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); - let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); + let import_queue_service = params.import_queue.service(); + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), - import_queue: import_queue.clone(), + import_queue: params.import_queue, block_announce_validator_builder: Some(Box::new(|_| { Box::new(block_announce_validator) })), @@ -1361,6 +1404,7 @@ where if validator { let parachain_consensus = build_consensus( client.clone(), + block_import, prometheus_registry.as_ref(), telemetry.as_ref().map(|t| t.handle()), &task_manager, @@ -1374,7 +1418,7 @@ where let spawner = task_manager.spawn_handle(); let params = StartCollatorParams { - para_id: id, + para_id, block_status: client.clone(), announce_block, client: client.clone(), @@ -1382,7 +1426,7 @@ where relay_chain_interface, spawner, parachain_consensus, - import_queue, + import_queue: import_queue_service, collator_key: collator_key.expect("Command line arguments do not allow this. qed"), relay_chain_slot_duration, }; @@ -1393,10 +1437,10 @@ where client: client.clone(), announce_block, task_manager: &mut task_manager, - para_id: id, + para_id, relay_chain_interface, relay_chain_slot_duration, - import_queue, + import_queue: import_queue_service, }; start_full_node(params)?; @@ -1410,6 +1454,7 @@ where #[allow(clippy::type_complexity)] pub fn contracts_rococo_build_import_queue( client: Arc>, + block_import: ParachainBlockImport, config: &Configuration, telemetry: Option, task_manager: &TaskManager, @@ -1427,7 +1472,7 @@ pub fn contracts_rococo_build_import_queue( _, _, >(cumulus_client_consensus_aura::ImportQueueParams { - block_import: client.clone(), + block_import, client, create_inherent_data_providers: move |_, _| async move { let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); @@ -1452,7 +1497,7 @@ pub async fn start_contracts_rococo_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<( TaskManager, @@ -1462,10 +1507,11 @@ pub async fn start_contracts_rococo_node( parachain_config, polkadot_config, collator_options, - id, + para_id, |_| Ok(RpcModule::new(())), contracts_rococo_build_import_queue, |client, + block_import, prometheus_registry, telemetry, task_manager, @@ -1495,7 +1541,7 @@ pub async fn start_contracts_rococo_node( relay_parent, &relay_chain_interface, &validation_data, - id, + para_id, ).await; let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); @@ -1515,7 +1561,7 @@ pub async fn start_contracts_rococo_node( Ok((slot, timestamp, parachain_inherent)) } }, - block_import: client.clone(), + block_import, para_client: client, backoff_authoring_blocks: Option::<()>::None, sync_oracle, diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index d3334795aae..c2bf4fe3ade 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -8,16 +8,15 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } [features] default = [ "std" ] diff --git a/primitives/parachain-inherent/Cargo.toml b/primitives/parachain-inherent/Cargo.toml index 56864cdc0c0..e402e1a23e1 100644 --- a/primitives/parachain-inherent/Cargo.toml +++ b/primitives/parachain-inherent/Cargo.toml @@ -5,21 +5,21 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -async-trait = { version = "0.1.57", optional = true } +async-trait = { version = "0.1.59", optional = true } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } tracing = { version = "0.1.37", optional = true } # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-storage = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-storage = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.36" } +sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../core", default-features = false } diff --git a/primitives/parachain-inherent/src/client_side.rs b/primitives/parachain-inherent/src/client_side.rs index 000094f0709..90234341100 100644 --- a/primitives/parachain-inherent/src/client_side.rs +++ b/primitives/parachain-inherent/src/client_side.rs @@ -174,7 +174,7 @@ impl ParachainInherentData { #[async_trait::async_trait] impl sp_inherents::InherentDataProvider for ParachainInherentData { - fn provide_inherent_data( + async fn provide_inherent_data( &self, inherent_data: &mut sp_inherents::InherentData, ) -> Result<(), sp_inherents::Error> { diff --git a/primitives/parachain-inherent/src/mock.rs b/primitives/parachain-inherent/src/mock.rs index 1793f6d4e8d..a26ee114ef7 100644 --- a/primitives/parachain-inherent/src/mock.rs +++ b/primitives/parachain-inherent/src/mock.rs @@ -115,7 +115,7 @@ impl MockXcmConfig { ) -> Self { let starting_dmq_mqc_head = client .storage( - &parent_block, + parent_block, &sp_storage::StorageKey( [twox_128(¶chain_system_name.0), twox_128(b"LastDmqMqcHead")] .concat() @@ -130,7 +130,7 @@ impl MockXcmConfig { let starting_hrmp_mqc_heads = client .storage( - &parent_block, + parent_block, &sp_storage::StorageKey( [twox_128(¶chain_system_name.0), twox_128(b"LastHrmpMqcHeads")] .concat() @@ -151,7 +151,7 @@ impl MockXcmConfig { impl> InherentDataProvider for MockValidationDataInherentDataProvider { - fn provide_inherent_data( + async fn provide_inherent_data( &self, inherent_data: &mut InherentData, ) -> Result<(), sp_inherents::Error> { diff --git a/primitives/timestamp/Cargo.toml b/primitives/timestamp/Cargo.toml index 31343666c81..963e6988c03 100644 --- a/primitives/timestamp/Cargo.toml +++ b/primitives/timestamp/Cargo.toml @@ -7,12 +7,12 @@ description = "Provides timestamp related functionality for parachains." [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } -futures = "0.3.24" +futures = "0.3.25" # Substrate -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../core", default-features = false } @@ -20,9 +20,9 @@ cumulus-primitives-core = { path = "../core", default-features = false } [dev-dependencies] # Substrate -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/primitives/utility/Cargo.toml b/primitives/utility/Cargo.toml index e3925d667d8..83a97644093 100644 --- a/primitives/utility/Cargo.toml +++ b/primitives/utility/Cargo.toml @@ -9,14 +9,14 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = log = { version = "0.4.17", default-features = false } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus diff --git a/primitives/utility/src/lib.rs b/primitives/utility/src/lib.rs index 2ed99394a6c..a84000c815b 100644 --- a/primitives/utility/src/lib.rs +++ b/primitives/utility/src/lib.rs @@ -71,7 +71,7 @@ struct AssetTraderRefunder { outstanding_concrete_asset: MultiAsset, } -/// Charges for exercution in the first multiasset of those selected for fee payment +/// Charges for execution in the first multiasset of those selected for fee payment /// Only succeeds for Concrete Fungible Assets /// First tries to convert the this MultiAsset into a local assetId /// Then charges for this assetId as described by FeeCharger @@ -121,6 +121,7 @@ impl< let weight = Weight::from_ref_time(weight); // We take the very first multiasset from payment + // (assets are sorted by fungibility/amount after this conversion) let multiassets: MultiAssets = payment.clone().into(); // Take the first multiasset from the selected MultiAssets diff --git a/scripts/benchmarks-ci.sh b/scripts/benchmarks-ci.sh index 72e1e2fbf5c..d4ad99d7bbe 100755 --- a/scripts/benchmarks-ci.sh +++ b/scripts/benchmarks-ci.sh @@ -39,6 +39,19 @@ elif [[ $runtimeName == "collectives-polkadot" ]]; then cumulus_pallet_xcmp_queue frame_system ) +elif [[ $runtimeName == "bridge-hub-rococo" ]] || [[ $runtimeName == "bridge-hub-kusama" ]]; then + pallets=( + frame_system + pallet_balances + pallet_collator_selection + pallet_multisig + pallet_session + pallet_timestamp + pallet_utility + cumulus_pallet_xcmp_queue + pallet_xcm_benchmarks::generic + pallet_xcm_benchmarks::fungible + ) else echo "$runtimeName pallet list not found in benchmarks-ci.sh" exit 1 @@ -46,10 +59,10 @@ fi for pallet in ${pallets[@]} do - # a little hack for xcm benchmarks output_file="${pallet//::/_}" extra_args="" - if [[ "$pallet" == *"xcm"* ]]; then + # a little hack for pallet_xcm_benchmarks - we want to force custom implementation for XcmWeightInfo + if [[ "$pallet" == "pallet_xcm_benchmarks::generic" ]] || [[ "$pallet" == "pallet_xcm_benchmarks::fungible" ]]; then output_file="xcm/$output_file" extra_args="--template=./templates/xcm-bench-template.hbs" fi diff --git a/scripts/benchmarks.sh b/scripts/benchmarks.sh index 0dd9544f56d..0ac2c3b74b4 100755 --- a/scripts/benchmarks.sh +++ b/scripts/benchmarks.sh @@ -7,3 +7,6 @@ ${__dir}/benchmarks-ci.sh collectives collectives-polkadot target/production ${__dir}/benchmarks-ci.sh assets statemine target/production ${__dir}/benchmarks-ci.sh assets statemint target/production ${__dir}/benchmarks-ci.sh assets westmint target/production + +${__dir}/benchmarks-ci.sh bridge-hubs bridge-hub-kusama target/production +${__dir}/benchmarks-ci.sh bridge-hubs bridge-hub-rococo target/production diff --git a/scripts/ci/changelog/bin/changelog b/scripts/ci/changelog/bin/changelog index 1f3de939d0a..ac4c42d2cbc 100755 --- a/scripts/ci/changelog/bin/changelog +++ b/scripts/ci/changelog/bin/changelog @@ -81,6 +81,8 @@ SHELL_DIGEST = ENV['SHELL_DIGEST'] || 'digests/shell-srtool-digest.json' WESTMINT_DIGEST = ENV['WESTMINT_DIGEST'] || 'digests/westmint-srtool-digest.json' STATEMINE_DIGEST = ENV['STATEMINE_DIGEST'] || 'digests/statemine-srtool-digest.json' STATEMINT_DIGEST = ENV['STATEMINT_DIGEST'] || 'digests/statemint-srtool-digest.json' +BRIDGE_HUB_ROCOCO_DIGEST = ENV['BRIDGE_HUB_ROCOCO_DIGEST'] || 'digests/bridge-hub-rococo-srtool-digest.json' +BRIDGE_HUB_KUSAMA_DIGEST = ENV['BRIDGE_HUB_KUSAMA_DIGEST'] || 'digests/bridge-hub-kusama-srtool-digest.json' ROCOCO_PARA_DIGEST = ENV['ROCOCO_PARA_DIGEST'] || 'digests/rococo-parachain-srtool-digest.json' CANVAS_KUSAMA_DIGEST = ENV['CANVAS_KUSAMA_DIGEST'] || 'digests/contracts-rococo-srtool-digest.json' @@ -114,6 +116,8 @@ else --slurpfile srtool_rococo_parachain %s \ --slurpfile srtool_contracts_rococo %s \ --slurpfile srtool_polkadot_collectives %s \ + --slurpfile srtool_bridge_hub_rococo %s \ + --slurpfile srtool_bridge_hub_kusama %s \ -n \'{ cumulus: $cumulus[0], substrate: $substrate[0], @@ -125,7 +129,9 @@ else { name: "statemint", data: $srtool_statemint[0] }, { name: "rococo", data: $srtool_rococo_parachain[0] }, { name: "contracts", data: $srtool_contracts_rococo[0] }, - { name: "polkadot-collectives", data: $srtool_polkadot_collectives[0] } + { name: "polkadot-collectives", data: $srtool_polkadot_collectives[0] }, + { name: "bridge-hub-rococo", data: $srtool_bridge_hub_rococo[0] }, + { name: "bridge-hub-kusama", data: $srtool_bridge_hub_kusama[0] } ] }\' > context.json', cumulus_data, substrate_data, @@ -136,7 +142,9 @@ else STATEMINT_DIGEST, ROCOCO_PARA_DIGEST, CANVAS_KUSAMA_DIGEST, - POLKADOT_COLLECTIVES_DIGEST + POLKADOT_COLLECTIVES_DIGEST, + BRIDGE_HUB_ROCOCO_DIGEST, + BRIDGE_HUB_KUSAMA_DIGEST ) end system(cmd) diff --git a/scripts/ci/changelog/templates/docker_image.md.tera b/scripts/ci/changelog/templates/docker_image.md.tera index 0506e43b901..cb0c619f3a7 100644 --- a/scripts/ci/changelog/templates/docker_image.md.tera +++ b/scripts/ci/changelog/templates/docker_image.md.tera @@ -1,11 +1,11 @@ - diff --git a/scripts/ci/changelog/templates/template.md.tera b/scripts/ci/changelog/templates/template.md.tera index ba50fc439b7..8b14db43fe2 100644 --- a/scripts/ci/changelog/templates/template.md.tera +++ b/scripts/ci/changelog/templates/template.md.tera @@ -32,4 +32,7 @@ This release contains the changes from `{{ env.REF1 }}` to `{{ env.REF2 }}`. {% endif %} {% include "changes.md.tera" -%} + +{% if env.RELEASE_TYPE and env.RELEASE_TYPE == "client" -%} {% include "docker_image.md.tera" -%} +{% endif %} diff --git a/scripts/ci/create-benchmark-pr.sh b/scripts/ci/create-benchmark-pr.sh new file mode 100755 index 00000000000..46927f24b80 --- /dev/null +++ b/scripts/ci/create-benchmark-pr.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +set -Eeu -o pipefail +shopt -s inherit_errexit + +PR_TITLE="$1" +HEAD_REF="$2" + +ORG="paritytech" +REPO="$CI_PROJECT_NAME" +BASE_REF="$CI_COMMIT_BRANCH" +# Change threshold in %. Bigger values excludes the small changes. +THRESHOLD=${THRESHOLD:-30} + +WEIGHTS_COMPARISON_URL_PARTS=( + "https://weights.tasty.limo/compare?" + "repo=$REPO&" + "threshold=$THRESHOLD&" + "path_pattern=**%2Fweights%2F*.rs&" + "method=guess-worst&" + "ignore_errors=true&" + "unit=time&" + "old=$BASE_REF&" + "new=$HEAD_REF" +) +printf -v WEIGHTS_COMPARISON_URL %s "${WEIGHTS_COMPARISON_URL_PARTS[@]}" + +PAYLOAD="$(jq -n \ + --arg title "$PR_TITLE" \ + --arg body " +This PR is generated automatically by CI. + +Compare the weights with \`$BASE_REF\`: $WEIGHTS_COMPARISON_URL + +- [ ] Backport to master and node release branch once merged +" \ + --arg base "$BASE_REF" \ + --arg head "$HEAD_REF" \ + '{ + title: $title, + body: $body, + head: $head, + base: $base + }' +)" + +echo "PAYLOAD: $PAYLOAD" + +curl \ + -H "Authorization: token $GITHUB_TOKEN" \ + -X POST \ + -d "$PAYLOAD" \ + "https://api.github.com/repos/$ORG/$REPO/pulls" diff --git a/scripts/ci/gitlab/pipeline/benchmarks.yml b/scripts/ci/gitlab/pipeline/benchmarks.yml index 03aedd03960..9cbd4ac827d 100644 --- a/scripts/ci/gitlab/pipeline/benchmarks.yml +++ b/scripts/ci/gitlab/pipeline/benchmarks.yml @@ -28,10 +28,9 @@ benchmarks-assets: - export CURRENT_TIME=$(date '+%s') - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" - !reference [.git-commit-push, script] - # create PR to release-parachains-v* branch - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI. (Once merged please backport to master and node release branch.)","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + - ./scripts/ci/create-benchmark-pr.sh "[benchmarks] Update weights for statemine/t" "$BRANCHNAME" + - rm -f ./artifacts/polkadot-parachain + - rm -f ./artifacts/test-parachain after_script: - rm -rf .git/config tags: @@ -50,12 +49,32 @@ benchmarks-collectives: - export CURRENT_TIME=$(date '+%s') - export BRANCHNAME="weights-collectives-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" - !reference [.git-commit-push, script] - # create PR - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for collectives","body":"This PR is generated automatically by CI.","head":"'$BRANCHNAME'","base":"'${CI_COMMIT_BRANCH}'"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + - ./scripts/ci/create-benchmark-pr.sh "[benchmarks] Update weights for collectives" "$BRANCHNAME" + - rm -f ./artifacts/polkadot-parachain + - rm -f ./artifacts/test-parachain after_script: - rm -rf .git/config tags: - weights +benchmarks-bridge-hubs: + stage: benchmarks-run + extends: + - .collect-artifacts + - .benchmarks-refs + before_script: + - !reference [.docker-env, before_script] + timeout: 1d + script: + - ./scripts/benchmarks-ci.sh bridge-hubs bridge-hub-kusama ./artifacts + - ./scripts/benchmarks-ci.sh bridge-hubs bridge-hub-rococo ./artifacts + - export CURRENT_TIME=$(date '+%s') + - export BRANCHNAME="weights-bridge-hubs-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" + - !reference [.git-commit-push, script] + - ./scripts/ci/create-benchmark-pr.sh "[benchmarks] Update weights for bridge-hubs" "$BRANCHNAME" + - rm -f ./artifacts/polkadot-parachain + - rm -f ./artifacts/test-parachain + after_script: + - rm -rf .git/config + tags: + - weights diff --git a/scripts/ci/gitlab/pipeline/build.yml b/scripts/ci/gitlab/pipeline/build.yml index 86081e6a46a..2b6a284ee11 100644 --- a/scripts/ci/gitlab/pipeline/build.yml +++ b/scripts/ci/gitlab/pipeline/build.yml @@ -69,8 +69,9 @@ build-test-parachain: cd ..; done +# DAG: build-runtime-assets -> build-runtime-collectives -> build-runtime-bridge-hubs # DAG: build-runtime-assets -> build-runtime-collectives -> build-runtime-contracts -# DAG: build-runtime-assets ->build-runtime-starters -> build-runtime-testing +# DAG: build-runtime-assets -> build-runtime-starters -> build-runtime-testing build-runtime-assets: <<: *build-runtime-template variables: @@ -85,6 +86,15 @@ build-runtime-collectives: - job: build-runtime-assets artifacts: false +build-runtime-bridge-hubs: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/bridge-hubs" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-collectives + artifacts: false + build-runtime-contracts: <<: *build-runtime-template variables: diff --git a/scripts/ci/gitlab/pipeline/publish.yml b/scripts/ci/gitlab/pipeline/publish.yml index 5773bc2b066..353f2aece93 100644 --- a/scripts/ci/gitlab/pipeline/publish.yml +++ b/scripts/ci/gitlab/pipeline/publish.yml @@ -2,7 +2,7 @@ # Here are all jobs that are executed during "publish" stage .build-push-image: - image: quay.io/buildah/stable + image: quay.io/buildah/stable:v1.27 variables: DOCKERFILE: "" # docker/path-to.Dockerfile IMAGE_NAME: "" # docker.io/paritypr/image_name @@ -87,10 +87,8 @@ publish-benchmarks-assets-s3: &publish-benchmarks variables: GIT_STRATEGY: none BUCKET: "releases.parity.io" - PREFIX: "cumulus/$CI_COMMIT_REF_NAME/benchmarks" + PREFIX: "cumulus/$CI_COMMIT_REF_NAME/benchmarks-assets" script: - - echo "___Removing binary from artifacts___" - - rm -f ./artifacts/polkadot-parachain - echo "___Publishing benchmark results___" - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/ after_script: @@ -98,6 +96,10 @@ publish-benchmarks-assets-s3: &publish-benchmarks publish-benchmarks-collectives-s3: <<: *publish-benchmarks + variables: + GIT_STRATEGY: none + BUCKET: "releases.parity.io" + PREFIX: "cumulus/$CI_COMMIT_REF_NAME/benchmarks-collectives" needs: - job: benchmarks-collectives artifacts: true diff --git a/scripts/ci/gitlab/pipeline/zombienet.yml b/scripts/ci/gitlab/pipeline/zombienet.yml index 4682af16ee4..04eee935041 100644 --- a/scripts/ci/gitlab/pipeline/zombienet.yml +++ b/scripts/ci/gitlab/pipeline/zombienet.yml @@ -12,6 +12,11 @@ - export RELAY_IMAGE=${POLKADOT_IMAGE} - export COL_IMAGE=${COL_IMAGE} +.zombienet-after-script: + after_script: + - mkdir -p ./zombienet-logs + - cp /tmp/zombie*/logs/* ./zombienet-logs/ + # common settings for all zombienet jobs .zombienet-common: stage: zombienet @@ -21,8 +26,15 @@ artifacts: true variables: POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" - GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" + GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet/tests" COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: 1 + artifacts: + name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" + when: always + expire_in: 2 days + paths: + - ./zombienet-logs allow_failure: true retry: 2 tags: @@ -33,6 +45,7 @@ zombienet-0001-sync_blocks_from_tip_without_connected_collator: - .zombienet-common - .zombienet-refs - .zombienet-before-script + - .zombienet-after-script script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh --github-remote-dir="${GH_DIR}" @@ -44,6 +57,7 @@ zombienet-0002-pov_recovery: - .zombienet-common - .zombienet-refs - .zombienet-before-script + - .zombienet-after-script script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh --github-remote-dir="${GH_DIR}" @@ -55,6 +69,7 @@ zombienet-0003-full_node_catching_up: - .zombienet-common - .zombienet-refs - .zombienet-before-script + - .zombienet-after-script script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh --github-remote-dir="${GH_DIR}" @@ -66,6 +81,7 @@ zombienet-0004-runtime_upgrade: - .zombienet-common - .zombienet-refs - .zombienet-before-script + - .zombienet-after-script needs: - !reference [.zombienet-common, needs] - job: build-test-parachain @@ -86,6 +102,7 @@ zombienet-0005-migrate_solo_to_para: - .zombienet-common - .zombienet-refs - .zombienet-before-script + - .zombienet-after-script needs: - !reference [.zombienet-common, needs] - job: build-test-parachain @@ -104,6 +121,7 @@ zombienet-0006-rpc_collator_builds_blocks: - .zombienet-common - .zombienet-refs - .zombienet-before-script + - .zombienet-after-script script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh --github-remote-dir="${GH_DIR}" diff --git a/scripts/create_bridge_hub_kusama_spec.sh b/scripts/create_bridge_hub_kusama_spec.sh new file mode 100755 index 00000000000..ba2074ecfbc --- /dev/null +++ b/scripts/create_bridge_hub_kusama_spec.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +usage() { + echo Usage: + echo "$1 " + echo "$2 " + echo "e.g.: ./scripts/create_bridge_hub_kusama_spec.sh ./target/release/wbuild/bridge-hub-kusama-runtime/bridge_hub_kusama_runtime.compact.compressed.wasm 1003" + exit 1 +} + +if [ -z "$1" ]; then + usage +fi + +if [ -z "$2" ]; then + usage +fi + +set -e + +rt_path=$1 +para_id=$2 + +echo "Generating chain spec for runtime: $rt_path and para_id: $para_id" + +binary="./target/release/polkadot-parachain" + +# build the chain spec we'll manipulate +$binary build-spec --chain bridge-hub-kusama-dev > chain-spec-plain.json + +# convert runtime to hex +cat $rt_path | od -A n -v -t x1 | tr -d ' \n' > rt-hex.txt + +# replace the runtime in the spec with the given runtime and set some values to production +cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.system.code = ("0x" + $code)' \ + | jq '.name = "Kusama BridgeHub"' \ + | jq '.id = "bridge-hub-kusama"' \ + | jq '.chainType = "Live"' \ + | jq '.bootNodes = [ + "/dns/kusama-bridge-hub-collator-ew1-0.polkadot.io/tcp/30334/p2p/12D3KooWP2Gngt4tt2sz5BgDaAbMTxasPWk3V2Z99bQTmFcAorqa", + "/dns/kusama-bridge-hub-collator-ew1-1.polkadot.io/tcp/30334/p2p/12D3KooWMmL3FQuYmruBui1sbY4MwNmvicinrePi1Yq4QMRSYHoR", + "/dns/kusama-bridge-hub-collator-ue4-0.polkadot.io/tcp/30334/p2p/12D3KooWQpTocTck1tNBzMNTHJ3kSv4vzv8Yf9FpVkfGnungbez4", + "/dns/kusama-bridge-hub-collator-ue4-1.polkadot.io/tcp/30334/p2p/12D3KooWRgtJqKEaMi7hkU4VMiGhpHTJeL8N7JgL7d9gwooPv4eW", + + "/dns/kusama-bridge-hub-connect-ew1-0.polkadot.io/tcp/30334/p2p/12D3KooWPQQPivrqQ51kRTDc2R1mtqwKT4GGtk2rapkY4FrwHrEp", + "/dns/kusama-bridge-hub-connect-ew1-1.polkadot.io/tcp/30334/p2p/12D3KooWPcF9Yk4gYrMju9CyWCV69hAFXbYsnxCLogwLGu9QFTRn", + "/dns/kusama-bridge-hub-connect-ue4-0.polkadot.io/tcp/30334/p2p/12D3KooWMf1sVnJDTkKWtaThqvrgcSPLbfGXttSqbwhM2DJp9BUG", + "/dns/kusama-bridge-hub-connect-ue4-1.polkadot.io/tcp/30334/p2p/12D3KooWQaV7wMfNVKy2aMz4Lds3TTxgSDyZAUEnbAZMfD8rW3ow", + + "/dns/kusama-bridge-hub-connect-ew1-0.polkadot.io/tcp/443/wss/p2p/12D3KooWPQQPivrqQ51kRTDc2R1mtqwKT4GGtk2rapkY4FrwHrEp", + "/dns/kusama-bridge-hub-connect-ew1-1.polkadot.io/tcp/443/wss/p2p/12D3KooWPcF9Yk4gYrMju9CyWCV69hAFXbYsnxCLogwLGu9QFTRn", + "/dns/kusama-bridge-hub-connect-ue4-0.polkadot.io/tcp/443/wss/p2p/12D3KooWMf1sVnJDTkKWtaThqvrgcSPLbfGXttSqbwhM2DJp9BUG", + "/dns/kusama-bridge-hub-connect-ue4-1.polkadot.io/tcp/443/wss/p2p/12D3KooWQaV7wMfNVKy2aMz4Lds3TTxgSDyZAUEnbAZMfD8rW3ow" + + ]' \ + | jq '.relay_chain = "kusama"' \ + | jq --argjson para_id $para_id '.para_id = $para_id' \ + | jq --argjson para_id $para_id '.genesis.runtime.parachainInfo.parachainId = $para_id' \ + | jq '.genesis.runtime.balances.balances = []' \ + | jq '.genesis.runtime.collatorSelection.invulnerables = [ + "DQkekNBt8g6D7bPUEqhgfujADxzzfivr1qQZJkeGzAqnEzF", + "HbUc5qrLtKAZvasioiTSf1CunaN2SyEwvfsgMuYQjXA5sfk", + "JEe4NcVyuWFEwZe4WLfRtynDswyKgvLS8H8r4Wo9d3t61g1", + "FAe4DGhQHKTm35n5MgBFNBZvyEJcm7QAwgnVNQU8KXP2ixn" + ]' \ + | jq '.genesis.runtime.session.keys = [ + [ + "DQkekNBt8g6D7bPUEqhgfujADxzzfivr1qQZJkeGzAqnEzF", + "DQkekNBt8g6D7bPUEqhgfujADxzzfivr1qQZJkeGzAqnEzF", + { + "aura": "5E7AiV9ygGUcfdK3XVoJsew7fsu18uvKQHYhksE5PXDNfRL9" + } + ], + [ + "HbUc5qrLtKAZvasioiTSf1CunaN2SyEwvfsgMuYQjXA5sfk", + "HbUc5qrLtKAZvasioiTSf1CunaN2SyEwvfsgMuYQjXA5sfk", + { + "aura": "5CyXoMh8cA2MSk55JASpCfhCg44iSG5fBwmhvSfXUUS3uhPR" + } + ], + [ + "JEe4NcVyuWFEwZe4WLfRtynDswyKgvLS8H8r4Wo9d3t61g1", + "JEe4NcVyuWFEwZe4WLfRtynDswyKgvLS8H8r4Wo9d3t61g1", + { + "aura": "5Grj5pN52kKU61qK9qP5cf9ADuyowe2WVvYWxMNK1QqAM8qf" + } + ], + [ + "FAe4DGhQHKTm35n5MgBFNBZvyEJcm7QAwgnVNQU8KXP2ixn", + "FAe4DGhQHKTm35n5MgBFNBZvyEJcm7QAwgnVNQU8KXP2ixn", + { + "aura": "5EHTyftGjcHfe71VVuZqCeLbHNf4ptYzgdAMMyqpTNbs5Rrp" + } + ] + ]' \ + > edited-chain-spec-plain.json + +# build a raw spec +$binary build-spec --chain edited-chain-spec-plain.json --raw > chain-spec-raw.json +cp chain-spec-raw.json ./parachains/chain-specs/bridge-hub-kusama.json + +# build genesis data +$binary export-genesis-state --chain chain-spec-raw.json > bridge-hub-kusama-genesis-head-data + +# build genesis wasm +$binary export-genesis-wasm --chain chain-spec-raw.json > bridge-hub-kusama-wasm diff --git a/test/client/Cargo.toml b/test/client/Cargo.toml index 546b3302834..a9143673570 100644 --- a/test/client/Cargo.toml +++ b/test/client/Cargo.toml @@ -8,27 +8,27 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -sc-service = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-executor-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-executor-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-test-runtime = { path = "../runtime" } diff --git a/test/relay-sproof-builder/Cargo.toml b/test/relay-sproof-builder/Cargo.toml index 6d78db44498..5539f177f7e 100644 --- a/test/relay-sproof-builder/Cargo.toml +++ b/test/relay-sproof-builder/Cargo.toml @@ -8,12 +8,12 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.36" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/test/relay-validation-worker-provider/Cargo.toml b/test/relay-validation-worker-provider/Cargo.toml index fb6fe87bcc6..3732a029630 100644 --- a/test/relay-validation-worker-provider/Cargo.toml +++ b/test/relay-validation-worker-provider/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] # Polkadot -polkadot-node-core-pvf = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-core-pvf = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } [build-dependencies] -toml = "0.5.9" +toml = "0.5.10" diff --git a/test/runtime/Cargo.toml b/test/runtime/Cargo.toml index 45036a6628b..d04c3c40a3c 100644 --- a/test/runtime/Cargo.toml +++ b/test/runtime/Cargo.toml @@ -6,28 +6,28 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } # Cumulus cumulus-pallet-parachain-system = { path = "../../pallets/parachain-system", default-features = false } @@ -35,7 +35,7 @@ cumulus-primitives-core = { path = "../../primitives/core", default-features = f cumulus-primitives-timestamp = { path = "../../primitives/timestamp", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [features] default = [ "std" ] diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index 786590b8b91..4d68e52f86a 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -48,9 +48,11 @@ pub use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::Randomness, + traits::{ConstU8, Randomness}, weights::{ - constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, + }, ConstantMultiplier, IdentityFee, Weight, }, StorageValue, @@ -140,9 +142,10 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND - .saturating_div(2) - .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); +const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64, +); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -243,17 +246,13 @@ impl pallet_balances::Config for Runtime { type ReserveIdentifier = [u8; 8]; } -parameter_types! { - pub const OperationalFeeMultiplier: u8 = 5; -} - impl pallet_transaction_payment::Config for Runtime { type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; type WeightToFee = IdentityFee; type LengthToFee = ConstantMultiplier; type FeeMultiplierUpdate = (); - type OperationalFeeMultiplier = OperationalFeeMultiplier; + type OperationalFeeMultiplier = ConstU8<5>; } impl pallet_sudo::Config for Runtime { diff --git a/test/runtime/src/test_pallet.rs b/test/runtime/src/test_pallet.rs index facb929dc98..59b82bd256e 100644 --- a/test/runtime/src/test_pallet.rs +++ b/test/runtime/src/test_pallet.rs @@ -17,7 +17,7 @@ /// A special pallet that exposes dispatchables that are only useful for testing. pub use pallet::*; -#[frame_support::pallet] +#[frame_support::pallet(dev_mode)] pub mod pallet { use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index caf29821cb0..376eb8b4dd6 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -9,51 +9,51 @@ name = "test-parachain" path = "src/main.rs" [dependencies] -async-trait = "0.1.57" -clap = { version = "4.0.17", features = ["derive"] } +async-trait = "0.1.59" +clap = { version = "4.0.29", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.4.0", features = [ "async_tokio" ] } -jsonrpsee = { version = "0.15.1", features = ["server"] } +jsonrpsee = { version = "0.16.2", features = ["server"] } rand = "0.8.5" -serde = { version = "1.0.145", features = ["derive"] } -tokio = { version = "1.21.2", features = ["macros"] } +serde = { version = "1.0.151", features = ["derive"] } +tokio = { version = "1.23.0", features = ["macros"] } tracing = "0.1.37" url = "2.3.1" # Substrate -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-service = { git = "https://github.com/paritytech/substrate", features = [ "wasmtime" ] , branch = "polkadot-v0.9.31" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } @@ -72,15 +72,15 @@ cumulus-test-runtime = { path = "../runtime" } cumulus-relay-chain-minimal-node = { path = "../../client/relay-chain-minimal-node" } [dev-dependencies] -futures = "0.3.24" +futures = "0.3.25" portpicker = "0.1.1" # Polkadot dependencies -polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.36" } # Substrate dependencies -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } [[bench]] name = "transaction_throughput" diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index 9e9f5883f97..2b7f17ce14b 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -30,7 +30,9 @@ use url::Url; use crate::runtime::Weight; use cumulus_client_cli::CollatorOptions; -use cumulus_client_consensus_common::{ParachainCandidate, ParachainConsensus}; +use cumulus_client_consensus_common::{ + ParachainBlockImport as TParachainBlockImport, ParachainCandidate, ParachainConsensus, +}; use cumulus_client_network::BlockAnnounceValidator; use cumulus_client_service::{ prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams, @@ -46,6 +48,7 @@ use frame_system_rpc_runtime_api::AccountNonceApi; use polkadot_primitives::v2::{CollatorPair, Hash as PHash, PersistedValidationData}; use polkadot_service::ProvideRuntimeApi; use sc_client_api::execution_extensions::ExecutionStrategies; +use sc_consensus::ImportQueue; use sc_network::{multiaddr, NetworkBlock, NetworkService}; use sc_network_common::{config::TransportConfig, service::NetworkStateInfo}; use sc_service::{ @@ -114,6 +117,12 @@ pub type Client = TFullClient< sc_executor::NativeElseWasmExecutor, >; +/// The backend type being used by the test service. +pub type Backend = TFullBackend; + +/// The block-import type being used by the test service. +pub type ParachainBlockImport = TParachainBlockImport, Backend>; + /// Transaction pool type used by the test service pub type TransactionPool = Arc>; @@ -126,11 +135,11 @@ pub fn new_partial( ) -> Result< PartialComponents< Client, - TFullBackend, + Backend, (), sc_consensus::import_queue::BasicQueue>, sc_transaction_pool::FullPool, - (), + ParachainBlockImport, >, sc_service::Error, > { @@ -145,6 +154,8 @@ pub fn new_partial( sc_service::new_full_parts::(config, None, executor)?; let client = Arc::new(client); + let block_import = ParachainBlockImport::new(client.clone(), backend.clone()); + let registry = config.prometheus_registry(); let transaction_pool = sc_transaction_pool::BasicPool::new_full( @@ -157,7 +168,7 @@ pub fn new_partial( let import_queue = cumulus_client_consensus_relay_chain::import_queue( client.clone(), - client.clone(), + block_import.clone(), |_, _| async { Ok(sp_timestamp::InherentDataProvider::from_system_time()) }, &task_manager.spawn_essential_handle(), registry, @@ -171,7 +182,7 @@ pub fn new_partial( task_manager, transaction_pool, select_chain: (), - other: (), + other: block_import, }; Ok(params) @@ -183,10 +194,14 @@ async fn build_relay_chain_interface( collator_options: CollatorOptions, task_manager: &mut TaskManager, ) -> RelayChainResult> { - if let Some(relay_chain_url) = collator_options.relay_chain_rpc_url { - return build_minimal_relay_chain_node(relay_chain_config, task_manager, relay_chain_url) - .await - .map(|r| r.0) + if !collator_options.relay_chain_rpc_urls.is_empty() { + return build_minimal_relay_chain_node( + relay_chain_config, + task_manager, + collator_options.relay_chain_rpc_urls, + ) + .await + .map(|r| r.0) } let relay_chain_full_node = polkadot_test_service::new_full( @@ -244,6 +259,8 @@ where let client = params.client.clone(); let backend = params.backend.clone(); + let block_import = params.other; + let relay_chain_interface = build_relay_chain_interface( relay_chain_config, collator_key.clone(), @@ -261,21 +278,21 @@ where let block_announce_validator_builder = move |_| Box::new(block_announce_validator) as Box<_>; let prometheus_registry = parachain_config.prometheus_registry().cloned(); - let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); + let import_queue_service = params.import_queue.service(); + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), - import_queue: import_queue.clone(), + import_queue: params.import_queue, block_announce_validator_builder: Some(Box::new(block_announce_validator_builder)), warp_sync: None, })?; let rpc_builder = { let client = client.clone(); - Box::new(move |_, _| rpc_ext_builder(client.clone())) }; @@ -286,7 +303,7 @@ where task_manager: &mut task_manager, config: parachain_config, keystore: params.keystore_container.sync_keystore(), - backend, + backend: backend.clone(), network: network.clone(), system_rpc_tx, tx_handler_controller, @@ -338,7 +355,7 @@ where Ok((time, parachain_inherent)) } }, - client.clone(), + block_import, relay_chain_interface2, )) }, @@ -355,7 +372,7 @@ where parachain_consensus, relay_chain_interface, collator_key, - import_queue, + import_queue: import_queue_service, relay_chain_slot_duration: Duration::from_secs(6), }; @@ -367,7 +384,7 @@ where task_manager: &mut task_manager, para_id, relay_chain_interface, - import_queue, + import_queue: import_queue_service, // The slot duration is currently used internally only to configure // the recovery delay of pov-recovery. We don't want to wait for too // long on the full node to recover, so we reduce this time here. @@ -420,7 +437,7 @@ pub struct TestNodeBuilder { storage_update_func_parachain: Option>, storage_update_func_relay_chain: Option>, consensus: Consensus, - relay_chain_full_node_url: Option, + relay_chain_full_node_url: Vec, } impl TestNodeBuilder { @@ -442,7 +459,7 @@ impl TestNodeBuilder { storage_update_func_parachain: None, storage_update_func_relay_chain: None, consensus: Consensus::RelayChain, - relay_chain_full_node_url: None, + relay_chain_full_node_url: vec![], } } @@ -536,7 +553,7 @@ impl TestNodeBuilder { /// Connect to full node via RPC. pub fn use_external_relay_chain_node_at_url(mut self, network_address: Url) -> Self { - self.relay_chain_full_node_url = Some(network_address); + self.relay_chain_full_node_url = vec![network_address]; self } @@ -545,7 +562,7 @@ impl TestNodeBuilder { let mut localhost_url = Url::parse("ws://localhost").expect("Should be able to parse localhost Url"); localhost_url.set_port(Some(port)).expect("Should be able to set port"); - self.relay_chain_full_node_url = Some(localhost_url); + self.relay_chain_full_node_url = vec![localhost_url]; self } @@ -571,7 +588,7 @@ impl TestNodeBuilder { ); let collator_options = - CollatorOptions { relay_chain_rpc_url: self.relay_chain_full_node_url }; + CollatorOptions { relay_chain_rpc_urls: self.relay_chain_full_node_url }; relay_chain_config.network.node_name = format!("{} (relay chain)", relay_chain_config.network.node_name); diff --git a/test/service/tests/full_node_catching_up.rs b/test/service/tests/full_node_catching_up.rs deleted file mode 100644 index 1dee360fc86..00000000000 --- a/test/service/tests/full_node_catching_up.rs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2020-2021 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -use cumulus_primitives_core::ParaId; -use cumulus_test_service::{initial_head_data, run_relay_chain_validator_node, Keyring::*}; -use futures::join; - -#[substrate_test_utils::test(flavor = "multi_thread")] -#[ignore] -async fn test_full_node_catching_up() { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_colors(false); - let _ = builder.init(); - - let para_id = ParaId::from(100); - - let tokio_handle = tokio::runtime::Handle::current(); - - let ws_port = portpicker::pick_unused_port().expect("No free ports"); - // start alice - let alice = run_relay_chain_validator_node( - tokio_handle.clone(), - Alice, - || {}, - Vec::new(), - Some(ws_port), - ); - - // start bob - let bob = run_relay_chain_validator_node( - tokio_handle.clone(), - Bob, - || {}, - vec![alice.addr.clone()], - None, - ); - - // register parachain - alice - .register_parachain( - para_id, - cumulus_test_runtime::WASM_BINARY - .expect("You need to build the WASM binary to run this test!") - .to_vec(), - initial_head_data(para_id), - ) - .await - .unwrap(); - - // run cumulus charlie (a parachain collator) - let charlie = - cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Charlie) - .enable_collator() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - charlie.wait_for_blocks(5).await; - - // run cumulus dave (a parachain full node) and wait for it to sync some blocks - let dave = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Dave) - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // run cumulus dave (a parachain full node) and wait for it to sync some blocks - let eve = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, Eve) - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .use_external_relay_chain_node_at_port(ws_port) - .build() - .await; - - join!(dave.wait_for_blocks(7), eve.wait_for_blocks(7)); -} diff --git a/test/service/tests/migrate_solo_to_para.rs b/test/service/tests/migrate_solo_to_para.rs deleted file mode 100644 index 89afd8d42b1..00000000000 --- a/test/service/tests/migrate_solo_to_para.rs +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2020-2021 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Test migration from parachain A to parachain B by returning the header of parachain B. -//! -//! This can be seen as a test of the fundamentals of the solo to parachain migration use case. -//! The prerequisite is to have a running solo chain and a running parachain. The idea is that -//! the solo chain is being stopped at a given point and sends its last header to the running parachain. -//! The parachain will return this header as part of the validation phase on the relay chain to enact -//! this header as its current latest state. As the old running parachain doesn't know this header, it will -//! stop to produce new blocks. However, the old solo chain can now produce blocks using the parachain slot. -//! (Be aware, that this is just a highlevel description and some parts are omitted.) - -use codec::Encode; -use cumulus_primitives_core::ParaId; -use cumulus_test_service::{initial_head_data, run_relay_chain_validator_node, Keyring::*}; -use sc_client_api::{BlockBackend, UsageProvider}; -use sp_runtime::generic::BlockId; - -#[substrate_test_utils::test(flavor = "multi_thread")] -#[ignore] -async fn test_migrate_solo_to_para() { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_colors(false); - let _ = builder.init(); - - let para_id = ParaId::from(100); - - let tokio_handle = tokio::runtime::Handle::current(); - - // start alice - let alice = - run_relay_chain_validator_node(tokio_handle.clone(), Alice, || {}, Vec::new(), None); - - // start bob - let bob = run_relay_chain_validator_node( - tokio_handle.clone(), - Bob, - || {}, - vec![alice.addr.clone()], - None, - ); - - // register parachain - alice - .register_parachain( - para_id, - cumulus_test_runtime::WASM_BINARY - .expect("You need to build the WASM binary to run this test!") - .to_vec(), - initial_head_data(para_id), - ) - .await - .unwrap(); - - // run the parachain that will be used to return the header of the solo chain. - let parachain = - cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Charlie) - .enable_collator() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // run the solo chain (in our case this is also already a parachain, but as it has a different genesis it will not produce any blocks.) - let solo = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, Dave) - .enable_collator() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - // Set some random value in the genesis state to create a different genesis hash. - .update_storage_parachain(|| { - sp_io::storage::set(b"test", b"test"); - }) - .build() - .await; - - parachain.wait_for_blocks(2).await; - - // Ensure that both chains have a different genesis hash. - assert_ne!( - parachain.client.block_hash(0).ok().flatten().unwrap(), - solo.client.block_hash(0).ok().flatten().unwrap(), - ); - - let solo_chain_header = solo.client.header(&BlockId::Number(0)).ok().flatten().unwrap(); - - // Send the transaction to set the custom header, aka the header of the solo chain. - parachain - .send_extrinsic( - cumulus_test_runtime::TestPalletCall::set_custom_validation_head_data { - custom_header: solo_chain_header.encode(), - }, - Alice, - ) - .await - .unwrap(); - - // Wait until the solo chain produced a block now as a parachain. - solo.wait_for_blocks(1).await; - - let parachain_best = parachain.client.usage_info().chain.best_number; - - // Wait for some more blocks and check that the old parachain doesn't produced/imported any new blocks. - solo.wait_for_blocks(2).await; - assert_eq!(parachain_best, parachain.client.usage_info().chain.best_number); -} diff --git a/test/service/tests/runtime_upgrade.rs b/test/service/tests/runtime_upgrade.rs deleted file mode 100644 index 37eb82d8e04..00000000000 --- a/test/service/tests/runtime_upgrade.rs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -use cumulus_primitives_core::ParaId; -use cumulus_test_service::{initial_head_data, run_relay_chain_validator_node, Keyring::*}; -use futures::StreamExt; -use sc_client_api::BlockchainEvents; -use sp_runtime::generic::BlockId; - -#[substrate_test_utils::test(flavor = "multi_thread")] -#[ignore] -async fn test_runtime_upgrade() { - let mut builder = sc_cli::LoggerBuilder::new("runtime=debug"); - builder.with_colors(false); - let _ = builder.init(); - - let para_id = ParaId::from(100); - let tokio_handle = tokio::runtime::Handle::current(); - - // start alice - let alice = - run_relay_chain_validator_node(tokio_handle.clone(), Alice, || {}, Vec::new(), None); - - // start bob - let bob = run_relay_chain_validator_node( - tokio_handle.clone(), - Bob, - || {}, - vec![alice.addr.clone()], - None, - ); - - // register parachain - alice - .register_parachain( - para_id, - cumulus_test_runtime::WASM_BINARY - .expect("You need to build the WASM binary to run this test!") - .to_vec(), - initial_head_data(para_id), - ) - .await - .unwrap(); - - // run cumulus charlie (a parachain collator) - let charlie = - cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Charlie) - .enable_collator() - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // run cumulus dave (a parachain full node) - let dave = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, Dave) - .connect_to_parachain_node(&charlie) - .connect_to_relay_chain_nodes(vec![&alice, &bob]) - .build() - .await; - - // Wait for 2 blocks to be produced - charlie.wait_for_blocks(2).await; - - let mut expected_runtime_version = charlie - .client - .runtime_version_at(&BlockId::number(0)) - .expect("Runtime version exists"); - expected_runtime_version.spec_version += 1; - - let wasm = cumulus_test_runtime::wasm_spec_version_incremented::WASM_BINARY - .expect("Wasm binary with incremented spec version should have been built"); - - // schedule runtime upgrade - charlie.schedule_upgrade(wasm.into()).await.unwrap(); - - let mut import_stream = dave.client.import_notification_stream(); - - while let Some(notification) = import_stream.next().await { - if notification.is_new_best { - let runtime_version = dave - .client - .runtime_version_at(&BlockId::Hash(notification.hash)) - .expect("Runtime version exists"); - - if expected_runtime_version == runtime_version { - break - } - } - } -} diff --git a/zombienet/examples/bridge_hub_kusama_local_network.toml b/zombienet/examples/bridge_hub_kusama_local_network.toml new file mode 100644 index 00000000000..ae8ae07a75c --- /dev/null +++ b/zombienet/examples/bridge_hub_kusama_local_network.toml @@ -0,0 +1,67 @@ +[relaychain] +default_command = "../polkadot/target/release/polkadot" +default_args = [ "-lparachain=debug" ] +chain = "kusama-local" + + [[relaychain.nodes]] + name = "alice" + validator = true + + [[relaychain.nodes]] + name = "bob" + validator = true + + [[relaychain.nodes]] + name = "charlie" + validator = true + + [[relaychain.nodes]] + name = "dave" + validator = true + +[[parachains]] +id = 1003 +chain = "bridge-hub-kusama-local" +cumulus_based = true + + # run alice as parachain collator + [[parachains.collators]] + name = "alice" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run bob as parachain collator + [[parachains.collators]] + name = "bob" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run charlie as parachain collator + [[parachains.collators]] + name = "charlie" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run dave as parachain collator + [[parachains.collators]] + name = "dave" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run eve as parachain collator + [[parachains.collators]] + name = "eve" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run ferdie as parachain collator + [[parachains.collators]] + name = "ferdie" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] diff --git a/zombienet/examples/bridge_hub_rococo_local_network.toml b/zombienet/examples/bridge_hub_rococo_local_network.toml new file mode 100644 index 00000000000..92a2397ab9d --- /dev/null +++ b/zombienet/examples/bridge_hub_rococo_local_network.toml @@ -0,0 +1,67 @@ +[relaychain] +default_command = "../polkadot/target/release/polkadot" +default_args = [ "-lparachain=debug" ] +chain = "rococo-local" + + [[relaychain.nodes]] + name = "alice" + validator = true + + [[relaychain.nodes]] + name = "bob" + validator = true + + [[relaychain.nodes]] + name = "charlie" + validator = true + + [[relaychain.nodes]] + name = "dave" + validator = true + +[[parachains]] +id = 1013 +chain = "bridge-hub-rococo-local" +cumulus_based = true + + # run alice as parachain collator + [[parachains.collators]] + name = "alice" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run bob as parachain collator + [[parachains.collators]] + name = "bob" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run charlie as parachain collator + [[parachains.collators]] + name = "charlie" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run dave as parachain collator + [[parachains.collators]] + name = "dave" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run eve as parachain collator + [[parachains.collators]] + name = "eve" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run ferdie as parachain collator + [[parachains.collators]] + name = "ferdie" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] diff --git a/zombienet/examples/small_network.toml b/zombienet/examples/small_network.toml new file mode 100644 index 00000000000..ac5ee11e5bb --- /dev/null +++ b/zombienet/examples/small_network.toml @@ -0,0 +1,25 @@ +[relaychain] +default_image = "parity/polkadot:latest" +default_command = "polkadot" +chain = "rococo-local" + + [[relaychain.nodes]] + name = "alice" + validator = true + + [[relaychain.nodes]] + name = "bob" + validator = true + +[[parachains]] +id = 2000 +cumulus_based = true +chain = "statemine-local" + + # run charlie as parachain collator + [[parachains.collators]] + name = "charlie" + validator = true + image = "parity/polkadot-parachain:latest" + command = "polkadot-parachain" + args = ["--force-authoring"] diff --git a/zombienet/examples/statemine_kusama_local_network.toml b/zombienet/examples/statemine_kusama_local_network.toml new file mode 100644 index 00000000000..01d1b0b2d21 --- /dev/null +++ b/zombienet/examples/statemine_kusama_local_network.toml @@ -0,0 +1,67 @@ +[relaychain] +default_command = "../polkadot/target/release/polkadot" +default_args = [ "-lparachain=debug" ] +chain = "kusama-local" + + [[relaychain.nodes]] + name = "alice" + validator = true + + [[relaychain.nodes]] + name = "bob" + validator = true + + [[relaychain.nodes]] + name = "charlie" + validator = true + + [[relaychain.nodes]] + name = "dave" + validator = true + +[[parachains]] +id = 1000 +chain = "statemine-local" +cumulus_based = true + + # run alice as parachain collator + [[parachains.collators]] + name = "alice" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run bob as parachain collator + [[parachains.collators]] + name = "bob" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run charlie as parachain collator + [[parachains.collators]] + name = "charlie" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run dave as parachain collator + [[parachains.collators]] + name = "dave" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run eve as parachain collator + [[parachains.collators]] + name = "eve" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] + + # run ferdie as parachain collator + [[parachains.collators]] + name = "ferdie" + validator = true + command = "./target/release/polkadot-parachain" + args = ["-lparachain=debug"] diff --git a/zombienet_tests/0001-sync_blocks_from_tip_without_connected_collator.feature b/zombienet/tests/0001-sync_blocks_from_tip_without_connected_collator.feature similarity index 100% rename from zombienet_tests/0001-sync_blocks_from_tip_without_connected_collator.feature rename to zombienet/tests/0001-sync_blocks_from_tip_without_connected_collator.feature diff --git a/zombienet_tests/0001-sync_blocks_from_tip_without_connected_collator.toml b/zombienet/tests/0001-sync_blocks_from_tip_without_connected_collator.toml similarity index 100% rename from zombienet_tests/0001-sync_blocks_from_tip_without_connected_collator.toml rename to zombienet/tests/0001-sync_blocks_from_tip_without_connected_collator.toml diff --git a/zombienet_tests/0002-pov_recovery.feature b/zombienet/tests/0002-pov_recovery.feature similarity index 79% rename from zombienet_tests/0002-pov_recovery.feature rename to zombienet/tests/0002-pov_recovery.feature index 0b4d0a81de8..80524164821 100644 --- a/zombienet_tests/0002-pov_recovery.feature +++ b/zombienet/tests/0002-pov_recovery.feature @@ -10,6 +10,8 @@ validator-3: is up alice: is up within 60 seconds bob: is up within 60 seconds charlie: is up within 60 seconds +one: is up within 60 seconds +two: is up within 60 seconds # wait 30 blocks and register parachain validator-3: reports block height is at least 30 within 250 seconds @@ -20,3 +22,5 @@ validator-0: parachain 2000 is registered within 300 seconds bob: reports block height is at least 20 within 600 seconds alice: reports block height is at least 20 within 600 seconds charlie: reports block height is at least 20 within 600 seconds +one: reports block height is at least 20 within 600 seconds +two: reports block height is at least 20 within 600 seconds diff --git a/zombienet_tests/0002-pov_recovery.toml b/zombienet/tests/0002-pov_recovery.toml similarity index 66% rename from zombienet_tests/0002-pov_recovery.toml rename to zombienet/tests/0002-pov_recovery.toml index a9117dd82c6..2e3f8629cab 100644 --- a/zombienet_tests/0002-pov_recovery.toml +++ b/zombienet/tests/0002-pov_recovery.toml @@ -49,3 +49,19 @@ add_to_genesis = false image = "{{COL_IMAGE}}" command = "test-parachain" args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}","--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + + # run one as a RPC collator who does not produce blocks + [[parachains.collators]] + name = "one" + validator = true # collator + image = "{{COL_IMAGE}}" + command = "test-parachain" + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-rpc-url {{'ferdie'|zombie('wsUri')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + + # run two as a RPC parachain full node + [[parachains.collators]] + name = "two" + validator = false # full node + image = "{{COL_IMAGE}}" + command = "test-parachain" + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-rpc-url {{'ferdie'|zombie('wsUri')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] diff --git a/zombienet_tests/0003-full_node_catching_up.feature b/zombienet/tests/0003-full_node_catching_up.feature similarity index 100% rename from zombienet_tests/0003-full_node_catching_up.feature rename to zombienet/tests/0003-full_node_catching_up.feature diff --git a/zombienet_tests/0003-full_node_catching_up.toml b/zombienet/tests/0003-full_node_catching_up.toml similarity index 100% rename from zombienet_tests/0003-full_node_catching_up.toml rename to zombienet/tests/0003-full_node_catching_up.toml diff --git a/zombienet_tests/0004-runtime_upgrade.feature b/zombienet/tests/0004-runtime_upgrade.feature similarity index 100% rename from zombienet_tests/0004-runtime_upgrade.feature rename to zombienet/tests/0004-runtime_upgrade.feature diff --git a/zombienet_tests/0004-runtime_upgrade.toml b/zombienet/tests/0004-runtime_upgrade.toml similarity index 100% rename from zombienet_tests/0004-runtime_upgrade.toml rename to zombienet/tests/0004-runtime_upgrade.toml diff --git a/zombienet_tests/0005-migrate_solo_to_para.feature b/zombienet/tests/0005-migrate_solo_to_para.feature similarity index 100% rename from zombienet_tests/0005-migrate_solo_to_para.feature rename to zombienet/tests/0005-migrate_solo_to_para.feature diff --git a/zombienet_tests/0005-migrate_solo_to_para.toml b/zombienet/tests/0005-migrate_solo_to_para.toml similarity index 100% rename from zombienet_tests/0005-migrate_solo_to_para.toml rename to zombienet/tests/0005-migrate_solo_to_para.toml diff --git a/zombienet_tests/0006-rpc_collator_builds_blocks.feature b/zombienet/tests/0006-rpc_collator_builds_blocks.feature similarity index 64% rename from zombienet_tests/0006-rpc_collator_builds_blocks.feature rename to zombienet/tests/0006-rpc_collator_builds_blocks.feature index 558e65f96db..78886b7020b 100644 --- a/zombienet_tests/0006-rpc_collator_builds_blocks.feature +++ b/zombienet/tests/0006-rpc_collator_builds_blocks.feature @@ -7,11 +7,18 @@ bob: is up charlie: is up one: is up two: is up +three: is up dave: is up eve: is up alice: parachain 2000 is registered within 225 seconds alice: parachain 2000 block height is at least 10 within 250 seconds -dave: reports block height is at least 12 within 250 seconds eve: reports block height is at least 12 within 250 seconds +dave: reports block height is at least 12 within 250 seconds +one: restart after 1 seconds +dave: reports block height is at least 20 within 200 seconds +two: restart after 1 seconds +three: restart after 20 seconds +dave: is up +dave: reports block height is at least 30 within 200 seconds diff --git a/zombienet_tests/0006-rpc_collator_builds_blocks.toml b/zombienet/tests/0006-rpc_collator_builds_blocks.toml similarity index 55% rename from zombienet_tests/0006-rpc_collator_builds_blocks.toml rename to zombienet/tests/0006-rpc_collator_builds_blocks.toml index 9414532682a..963b6f5d9e1 100644 --- a/zombienet_tests/0006-rpc_collator_builds_blocks.toml +++ b/zombienet/tests/0006-rpc_collator_builds_blocks.toml @@ -25,6 +25,10 @@ chain = "rococo-local" name = "two" validator = false + [[relaychain.nodes]] + name = "three" + validator = false + [[parachains]] id = 2000 cumulus_based = true @@ -35,7 +39,7 @@ cumulus_based = true validator = true image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain=debug,blockchain-rpc-client=debug", "--relay-chain-rpc-url {{'one'|zombie('wsUri')}}", "-- --bootnodes {{'one'|zombie('multiAddress')}}"] + args = ["-lparachain=trace,blockchain-rpc-client=debug", "--relay-chain-rpc-urls {{'one'|zombie('wsUri')}} {{'two'|zombie('wsUri')}} {{'three'|zombie('wsUri')}}", "-- --bootnodes {{'one'|zombie('multiAddress')}} {{'two'|zombie('multiAddress')}} {{'three'|zombie('multiAddress')}}"] # run eve as parachain full node [[parachains.collators]] @@ -43,4 +47,4 @@ cumulus_based = true validator = true image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain=debug,blockchain-rpc-client=debug", "--relay-chain-rpc-url {{'two'|zombie('wsUri')}}", "-- --bootnodes {{'two'|zombie('multiAddress')}}"] + args = ["-lparachain=trace,blockchain-rpc-client=debug", "--relay-chain-rpc-urls {{'one'|zombie('wsUri')}} {{'two'|zombie('wsUri')}} {{'three'|zombie('wsUri')}}", "-- --bootnodes {{'one'|zombie('multiAddress')}} {{'two'|zombie('multiAddress')}} {{'three'|zombie('multiAddress')}}"] diff --git a/zombienet_tests/migrate_solo_to_para.js b/zombienet/tests/migrate_solo_to_para.js similarity index 100% rename from zombienet_tests/migrate_solo_to_para.js rename to zombienet/tests/migrate_solo_to_para.js diff --git a/zombienet_tests/register-para.js b/zombienet/tests/register-para.js similarity index 100% rename from zombienet_tests/register-para.js rename to zombienet/tests/register-para.js diff --git a/zombienet_tests/runtime_upgrade.js b/zombienet/tests/runtime_upgrade.js similarity index 100% rename from zombienet_tests/runtime_upgrade.js rename to zombienet/tests/runtime_upgrade.js